@@ -240,6 +240,37 @@ void test_crypto_asymmetric_sign_verify(void)
240
240
mbedtls_psa_crypto_free ();
241
241
}
242
242
243
+ void test_crypto_key_derivation (void )
244
+ {
245
+ psa_key_slot_t slot = 1 , derived_slot = 2 ;
246
+ psa_algorithm_t alg = PSA_ALG_HKDF (PSA_ALG_SHA_256), derived_alg = PSA_ALG_CTR;
247
+ psa_key_type_t derived_key_type = PSA_KEY_TYPE_AES, got_type;
248
+ psa_key_policy_t policy;
249
+ psa_crypto_generator_t generator = PSA_CRYPTO_GENERATOR_INIT;
250
+ size_t key_bits = 512 , derived_key_bits = 256 , got_bits;
251
+
252
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_crypto_init ());
253
+
254
+ psa_key_policy_init (&policy);
255
+ psa_key_policy_set_usage (&policy, PSA_KEY_USAGE_DERIVE, alg);
256
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_set_key_policy (slot, &policy));
257
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_generate_key (slot, PSA_KEY_TYPE_DERIVE, key_bits, NULL , 0 ));
258
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_key_derivation (&generator, slot, alg, NULL , 0 , NULL , 0 ,
259
+ PSA_BITS_TO_BYTES (derived_key_bits)));
260
+ psa_key_policy_set_usage (&policy, PSA_KEY_USAGE_ENCRYPT, derived_alg);
261
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_set_key_policy (derived_slot, &policy));
262
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_generator_import_key (derived_slot, derived_key_type,
263
+ derived_key_bits, &generator));
264
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_get_key_information (derived_slot, &got_type, &got_bits));
265
+ TEST_ASSERT_EQUAL (derived_key_type, got_type);
266
+ TEST_ASSERT_EQUAL (derived_key_bits, got_bits);
267
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_generator_abort (&generator));
268
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_destroy_key (slot));
269
+ TEST_ASSERT_EQUAL (PSA_SUCCESS, psa_destroy_key (derived_slot));
270
+
271
+ mbedtls_psa_crypto_free ();
272
+ }
273
+
243
274
utest::v1::status_t case_failure_handler (const Case *const source, const failure_t reason)
244
275
{
245
276
mbedtls_psa_crypto_free ();
@@ -259,6 +290,7 @@ Case cases[] = {
259
290
Case (" mbed-crypto hash verify" , test_crypto_hash_verify, case_failure_handler),
260
291
Case (" mbed-crypto symmetric cipher encrypt/decrypt" , test_crypto_symmetric_cipher_encrypt_decrypt, case_failure_handler),
261
292
Case (" mbed-crypto asymmetric sign/verify" , test_crypto_asymmetric_sign_verify, case_failure_handler),
293
+ Case (" mbed-crypto key derivation" , test_crypto_key_derivation, case_failure_handler),
262
294
};
263
295
264
296
Specification specification (test_setup, cases);
0 commit comments