mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			crypto: Add test of hash clone
Test hash clone by adding a test to TESTS/mbed-crypto/sanity/main.cpppull/9529/head
							parent
							
								
									861fb0cbf0
								
							
						
					
					
						commit
						fa46e3b499
					
				| 
						 | 
				
			
			@ -353,6 +353,70 @@ void test_crypto_key_handles(void)
 | 
			
		|||
    TEST_ASSERT_EQUAL(PSA_ERROR_EMPTY_SLOT, psa_open_key(PSA_KEY_LIFETIME_PERSISTENT, id, &key_handle));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_crypto_hash_clone(void)
 | 
			
		||||
{
 | 
			
		||||
    psa_algorithm_t alg = PSA_ALG_SHA_256;
 | 
			
		||||
    unsigned char hash[PSA_HASH_MAX_SIZE];
 | 
			
		||||
    size_t hash_len;
 | 
			
		||||
    psa_hash_operation_t source;
 | 
			
		||||
    psa_hash_operation_t target;
 | 
			
		||||
    /* SHA-256 hash of an empty string */
 | 
			
		||||
    static const unsigned char expected_hash[] = {
 | 
			
		||||
        0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8,
 | 
			
		||||
        0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c,
 | 
			
		||||
        0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    source = psa_hash_operation_init();
 | 
			
		||||
    target = psa_hash_operation_init();
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&source, alg));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_finish(&source, hash, sizeof(hash), &hash_len));
 | 
			
		||||
    /* should fail because psa_hash_finish has been called on source */
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, psa_hash_clone(&source, &target));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&source));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&target));
 | 
			
		||||
 | 
			
		||||
    source = psa_hash_operation_init();
 | 
			
		||||
    target = psa_hash_operation_init();
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&source, alg));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_verify(&source, expected_hash, sizeof(expected_hash)));
 | 
			
		||||
    /* should fail because psa_hash_verify has been called on source */
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, psa_hash_clone(&source, &target));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&source));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&target));
 | 
			
		||||
 | 
			
		||||
    source = psa_hash_operation_init();
 | 
			
		||||
    target = psa_hash_operation_init();
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&source, alg));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&source));
 | 
			
		||||
    /* should fail because psa_hash_abort has been called on source */
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, psa_hash_clone(&source, &target));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&target));
 | 
			
		||||
 | 
			
		||||
    source = psa_hash_operation_init();
 | 
			
		||||
    target = psa_hash_operation_init();
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&source, alg));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&target, alg));
 | 
			
		||||
    /* should fail because psa_hash_setup has been called on target */
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, psa_hash_clone(&source, &target));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&source));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&target));
 | 
			
		||||
 | 
			
		||||
    source = psa_hash_operation_init();
 | 
			
		||||
    target = psa_hash_operation_init();
 | 
			
		||||
    /* should fail because psa_hash_setup has not been called on source */
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_ERROR_BAD_STATE, psa_hash_clone(&source, &target));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&source));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&target));
 | 
			
		||||
 | 
			
		||||
    source = psa_hash_operation_init();
 | 
			
		||||
    target = psa_hash_operation_init();
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_setup(&source, alg));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_clone(&source, &target));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&source));
 | 
			
		||||
    TEST_ASSERT_EQUAL(PSA_SUCCESS, psa_hash_abort(&target));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
utest::v1::status_t case_setup_handler(const Case *const source, const size_t index_of_case)
 | 
			
		||||
{
 | 
			
		||||
    psa_status_t status = psa_crypto_init();
 | 
			
		||||
| 
						 | 
				
			
			@ -386,6 +450,7 @@ Case cases[] = {
 | 
			
		|||
    Case("mbed-crypto asymmetric sign/verify", case_setup_handler, test_crypto_asymmetric_sign_verify, case_teardown_handler),
 | 
			
		||||
    Case("mbed-crypto key derivation", case_setup_handler, test_crypto_key_derivation, case_teardown_handler),
 | 
			
		||||
    Case("mbed-crypto key handles", case_setup_handler, test_crypto_key_handles, case_teardown_handler),
 | 
			
		||||
    Case("mbed-crypto hash clone", case_setup_handler, test_crypto_hash_clone, case_teardown_handler),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Specification specification(test_setup, cases);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue