5 #include "sw/device/lib/crypto/drivers/entropy.h"
6 #include "sw/device/lib/crypto/impl/integrity.h"
7 #include "sw/device/lib/crypto/impl/keyblob.h"
11 #include "sw/device/lib/testing/test_framework/check.h"
62 static const uint32_t kTestMask[512] = {
63 0x8cb847c3, 0xc6d34f36, 0x72edbf7b, 0x9bc0317f, 0x8f003c7f, 0x1d7ba049,
64 0xfd463b63, 0xbb720c44, 0x784c215e, 0xeb101d65, 0x35beb911, 0xab481345,
65 0xa7ebc3e3, 0x04b2a1b9, 0x764a9630, 0x78b8f9c5, 0x3f2a1d8e, 0x8cb847c3,
66 0xc6d34f36, 0x72edbf7b, 0x9bc0317f, 0x8f003c7f, 0x1d7ba049, 0xfd463b63,
67 0xbb720c44, 0x784c215e, 0xeb101d65, 0x35beb911, 0xab481345, 0xa7ebc3e3,
68 0x04b2a1b9, 0x764a9630, 0x78b8f9c5, 0x3f2a1d8e,
78 if (
test->kdk_bytelen >
sizeof(kTestMask)) {
80 return OUT_OF_RANGE();
85 .version = kOtcryptoLibVersion1,
86 .key_mode =
test->key_mode,
87 .key_length =
test->kdk_bytelen,
90 .security_level = kOtcryptoKeySecurityLevelLow,
92 uint32_t kdk_keyblob[keyblob_num_words(kdk_config)];
93 TRY(keyblob_from_key_and_mask(
test->key_derivation_key, kTestMask, kdk_config,
97 .keyblob = kdk_keyblob,
98 .keyblob_length =
sizeof(kdk_keyblob),
100 kdk.checksum = integrity_blinded_checksum(&kdk);
105 .version = kOtcryptoLibVersion1,
106 .key_mode =
test->km_mode,
107 .key_length =
test->km_bytelen,
110 .security_level = kOtcryptoKeySecurityLevelLow,
112 uint32_t km_keyblob[keyblob_num_words(km_config)];
115 .keyblob = km_keyblob,
116 .keyblob_length =
sizeof(km_keyblob),
121 .data =
test->kdf_context,
122 .len =
test->kdf_context_bytelen,
127 .data =
test->kdf_label,
128 .len =
test->kdf_label_bytelen,
132 switch (
test->key_mode) {
133 case kOtcryptoKeyModeHmacSha256:
134 case kOtcryptoKeyModeHmacSha384:
135 case kOtcryptoKeyModeHmacSha512:
139 LOG_INFO(
"Should never end up here.");
140 return INVALID_ARGUMENT();
143 LOG_INFO(
"KDF operation completed.");
149 TRY(keyblob_to_shares(&km, &km_share0, &km_share1));
150 uint32_t unmasked_km[keyblob_share_num_words(km_config)];
151 for (
size_t i = 0; i <
ARRAYSIZE(unmasked_km); i++) {
152 unmasked_km[i] = km_share0[i] ^ km_share1[i];
155 TRY_CHECK_ARRAYS_EQ((
unsigned char *)unmasked_km,
156 (
unsigned char *)
test->keying_material,
test->km_bytelen);
173 static status_t kdf_hmac_ctr_sha256_kdk16_km16_test(
void) {
174 uint32_t kdk_data[] = {
180 uint8_t context_data[] = {
186 uint8_t label_data[] = {
192 uint32_t km_data[] = {
200 .key_mode = kOtcryptoKeyModeHmacSha256,
201 .key_derivation_key = kdk_data,
203 .kdf_context = context_data,
204 .kdf_context_bytelen =
sizeof(context_data),
205 .kdf_label = label_data,
206 .kdf_label_bytelen =
sizeof(label_data),
207 .km_mode = kOtcryptoKeyModeAesCtr,
208 .keying_material = km_data,
211 return run_test(&
test);
229 static status_t kdf_hmac_ctr_sha256_kdk32_km32_test(
void) {
230 uint32_t kdk_data[] = {
231 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
232 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
234 uint8_t context_data[] = {
235 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
237 uint8_t label_data[] = {
238 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
240 uint32_t km_data[] = {
241 0x704bb412, 0x30c07602, 0xf999cd74, 0x4b576387,
242 0x301cf77b, 0x79230234, 0xf5b8f00b, 0x863ccf3f,
246 .key_mode = kOtcryptoKeyModeHmacSha256,
247 .key_derivation_key = kdk_data,
249 .kdf_context = context_data,
250 .kdf_context_bytelen =
sizeof(context_data),
251 .kdf_label = label_data,
252 .kdf_label_bytelen =
sizeof(label_data),
253 .km_mode = kOtcryptoKeyModeAesCbc,
254 .keying_material = km_data,
257 return run_test(&
test);
277 static status_t kdf_hmac_ctr_sha256_kdk48_km48_test(
void) {
278 uint32_t kdk_data[] = {
279 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
280 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
282 uint32_t km_data[] = {
283 0x520c2cf4, 0x9368e70d, 0x72aaa8bb, 0xdd1f4371, 0x2355b586, 0x8e7a28d3,
284 0x6806b281, 0x953b3b5d, 0x1b0399c0, 0x986da55a, 0xa7206265, 0x45b1a115,
288 .key_mode = kOtcryptoKeyModeHmacSha256,
289 .key_derivation_key = kdk_data,
292 .kdf_context_bytelen = 0,
294 .kdf_label_bytelen = 0,
295 .km_mode = kOtcryptoKeyModeAesEcb,
296 .keying_material = km_data,
299 return run_test(&
test);
345 static status_t kdf_hmac_ctr_sha256_kdk256_km256_test(
void) {
346 uint32_t kdk_data[] = {
347 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
348 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
349 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
350 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
351 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
352 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
353 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
354 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
355 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
356 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
357 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
359 uint8_t context_data[] = {
360 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
362 uint8_t label_data[] = {
363 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
365 uint32_t km_data[] = {
366 0x557c5a55, 0x07a0ffaf, 0xd89f3b21, 0xd1620356, 0x0e72fad1, 0x6ae67352,
367 0x164545b5, 0x8fc409b8, 0x0738a08d, 0xb43da945, 0x21463a5e, 0x04ce052e,
368 0x5a5bb893, 0x226dd47c, 0xb4752b20, 0x6fb1dfc6, 0x0206c74f, 0x59368818,
369 0x36b92a1c, 0x4ae94ee4, 0x8ee21374, 0x96e8b0bc, 0xb1ddf0f4, 0xb6191c31,
370 0x9a9ec74c, 0x60fe86be, 0x132aa6dc, 0x44f4c828, 0x3de6b49d, 0xeb6cde1d,
371 0xe6215aad, 0x940c0849, 0x1fa33864, 0xaa8a4250, 0xe179c388, 0xe509ec88,
372 0xcd5a5d51, 0x498bd6df, 0xb295d807, 0x478d3d21, 0xde21f5f2, 0xf0abc3e8,
373 0x113b3b0e, 0x7503f69f, 0x012db118, 0xf3c3a036, 0xd24a41ce, 0x1a9f9311,
374 0x6752d1fb, 0xdff3a272, 0x77b49978, 0xd73ef1a2, 0x427d6557, 0x0c925536,
375 0x56dc7a8b, 0x07c3baad, 0x8371ca9d, 0xb4464f55, 0xa09a4d86, 0xc0dfdaf9,
376 0xf4a12fd6, 0x9b45e8c7, 0x99ad7a60, 0x82390046,
380 .key_mode = kOtcryptoKeyModeHmacSha256,
381 .key_derivation_key = kdk_data,
383 .kdf_context = context_data,
384 .kdf_context_bytelen =
sizeof(context_data),
385 .kdf_label = label_data,
386 .kdf_label_bytelen =
sizeof(label_data),
387 .km_mode = kOtcryptoKeyModeAesGcm,
388 .keying_material = km_data,
391 return run_test(&
test);
422 static status_t kdf_hmac_ctr_sha256_kdk256_km16_test(
void) {
423 uint32_t kdk_data[] = {
424 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
425 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
426 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
427 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
428 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
429 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
430 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
431 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
432 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
433 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
434 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
436 uint8_t context_data[] = {
442 uint8_t label_data[] = {
446 uint32_t km_data[] = {
454 .key_mode = kOtcryptoKeyModeHmacSha256,
455 .key_derivation_key = kdk_data,
457 .kdf_context = context_data,
458 .kdf_context_bytelen =
sizeof(context_data),
459 .kdf_label = label_data,
460 .kdf_label_bytelen =
sizeof(label_data),
461 .km_mode = kOtcryptoKeyModeAesGcm,
462 .keying_material = km_data,
465 return run_test(&
test);
481 static status_t kdf_hmac_ctr_sha384_kdk16_km16_test(
void) {
482 uint32_t kdk_data[] = {
488 uint8_t context_data[] = {
494 uint8_t label_data[] = {
500 uint32_t km_data[] = {
508 .key_mode = kOtcryptoKeyModeHmacSha384,
509 .key_derivation_key = kdk_data,
511 .kdf_context = context_data,
512 .kdf_context_bytelen =
sizeof(context_data),
513 .kdf_label = label_data,
514 .kdf_label_bytelen =
sizeof(label_data),
515 .km_mode = kOtcryptoKeyModeAesCtr,
516 .keying_material = km_data,
519 return run_test(&
test);
537 static status_t kdf_hmac_ctr_sha384_kdk32_km32_test(
void) {
538 uint32_t kdk_data[] = {
539 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
540 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
542 uint8_t context_data[] = {
543 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
545 uint8_t label_data[] = {
546 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
548 uint32_t km_data[] = {
549 0x1fa14960, 0xa71ae98b, 0x750a55d4, 0xac1325a0,
550 0xbeb88709, 0xd66134ba, 0xf61959e8, 0x4091784c,
554 .key_mode = kOtcryptoKeyModeHmacSha384,
555 .key_derivation_key = kdk_data,
557 .kdf_context = context_data,
558 .kdf_context_bytelen =
sizeof(context_data),
559 .kdf_label = label_data,
560 .kdf_label_bytelen =
sizeof(label_data),
561 .km_mode = kOtcryptoKeyModeAesCbc,
562 .keying_material = km_data,
565 return run_test(&
test);
585 static status_t kdf_hmac_ctr_sha384_kdk48_km48_test(
void) {
586 uint32_t kdk_data[] = {
587 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
588 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
590 uint32_t km_data[] = {
591 0x9386ebdf, 0xa30783d5, 0x727e461d, 0xc2df28de, 0x61d6f52a, 0xa4252d0d,
592 0xe417a509, 0x36595012, 0xde30d7b3, 0xfe1c5263, 0x0bd545d0, 0x1574045a,
596 .key_mode = kOtcryptoKeyModeHmacSha384,
597 .key_derivation_key = kdk_data,
600 .kdf_context_bytelen = 0,
602 .kdf_label_bytelen = 0,
603 .km_mode = kOtcryptoKeyModeAesEcb,
604 .keying_material = km_data,
607 return run_test(&
test);
653 static status_t kdf_hmac_ctr_sha384_kdk256_km256_test(
void) {
654 uint32_t kdk_data[] = {
655 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
656 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
657 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
658 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
659 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
660 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
661 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
662 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
663 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
664 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
665 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
667 uint8_t context_data[] = {
668 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
670 uint8_t label_data[] = {
671 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
673 uint32_t km_data[] = {
674 0x066a4f36, 0xc5d89bf4, 0x7f309f76, 0x0874f702, 0xe6181b02, 0x004d16f7,
675 0x9861d172, 0x264dce02, 0x15c20387, 0xb0c70016, 0xb33a7d40, 0x55256360,
676 0x9b348448, 0xdce97d29, 0xf0a31b88, 0x222919b4, 0xadeb1dd3, 0x581f7f20,
677 0x5cdcbd14, 0x8cf883dc, 0xcf55a3c3, 0x0208a251, 0x12c3981c, 0x6dedec0e,
678 0x93a8421a, 0x9fc162d7, 0xf75ed2d3, 0xcd872100, 0xdf87ee27, 0xedc7e8ed,
679 0x4bce7fba, 0xa1a4c37a, 0x1db04f47, 0xcd1ec73d, 0x598902e1, 0x79d5e068,
680 0x8ea0d0da, 0x7536ba66, 0x06c1b3a5, 0xd94d5147, 0xf60e53f6, 0x433b1d26,
681 0x23a3c5a9, 0xfca3f532, 0x8bb7f5e7, 0xaa785f28, 0x25ceedb1, 0xc79f9900,
682 0xb9d6473d, 0xe3a19191, 0xefec92ea, 0x1030ba2c, 0x86f7e72a, 0x8809f3de,
683 0x7d5ed3e0, 0xe1d0f341, 0xf0afd988, 0xe6e80d71, 0xaf112d74, 0xc64d8566,
684 0xe63f03c3, 0x5aeef080, 0x1b3d6103, 0x247e8e16,
688 .key_mode = kOtcryptoKeyModeHmacSha384,
689 .key_derivation_key = kdk_data,
691 .kdf_context = context_data,
692 .kdf_context_bytelen =
sizeof(context_data),
693 .kdf_label = label_data,
694 .kdf_label_bytelen =
sizeof(label_data),
695 .km_mode = kOtcryptoKeyModeAesGcm,
696 .keying_material = km_data,
699 return run_test(&
test);
730 static status_t kdf_hmac_ctr_sha384_kdk256_km16_test(
void) {
731 uint32_t kdk_data[] = {
732 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
733 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
734 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
735 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
736 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
737 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
738 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
739 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
740 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
741 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
742 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
744 uint8_t context_data[] = {
750 uint8_t label_data[] = {
754 uint32_t km_data[] = {
762 .key_mode = kOtcryptoKeyModeHmacSha384,
763 .key_derivation_key = kdk_data,
765 .kdf_context = context_data,
766 .kdf_context_bytelen =
sizeof(context_data),
767 .kdf_label = label_data,
768 .kdf_label_bytelen =
sizeof(label_data),
769 .km_mode = kOtcryptoKeyModeAesGcm,
770 .keying_material = km_data,
773 return run_test(&
test);
789 static status_t kdf_hmac_ctr_sha512_kdk16_km16_test(
void) {
790 uint32_t kdk_data[] = {
796 uint8_t context_data[] = {
802 uint8_t label_data[] = {
808 uint32_t km_data[] = {
816 .key_mode = kOtcryptoKeyModeHmacSha512,
817 .key_derivation_key = kdk_data,
819 .kdf_context = context_data,
820 .kdf_context_bytelen =
sizeof(context_data),
821 .kdf_label = label_data,
822 .kdf_label_bytelen =
sizeof(label_data),
823 .km_mode = kOtcryptoKeyModeAesCtr,
824 .keying_material = km_data,
827 return run_test(&
test);
845 static status_t kdf_hmac_ctr_sha512_kdk32_km32_test(
void) {
846 uint32_t kdk_data[] = {
847 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
848 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
850 uint8_t context_data[] = {
851 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
853 uint8_t label_data[] = {
854 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
856 uint32_t km_data[] = {
857 0xe949abba, 0xcbb81849, 0x5fb1ef76, 0xfe3f2f1b,
858 0x910e75af, 0x1fbb8e89, 0x8b5fa06a, 0x64253932,
862 .key_mode = kOtcryptoKeyModeHmacSha512,
863 .key_derivation_key = kdk_data,
865 .kdf_context = context_data,
866 .kdf_context_bytelen =
sizeof(context_data),
867 .kdf_label = label_data,
868 .kdf_label_bytelen =
sizeof(label_data),
869 .km_mode = kOtcryptoKeyModeAesCbc,
870 .keying_material = km_data,
873 return run_test(&
test);
893 static status_t kdf_hmac_ctr_sha512_kdk48_km48_test(
void) {
894 uint32_t kdk_data[] = {
895 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
896 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
898 uint32_t km_data[] = {
899 0xcd4e3757, 0xfeb2d0ff, 0x2535f3e3, 0x54692166, 0xdc27554d, 0x6f850bb8,
900 0x133cf806, 0x2e148900, 0xd51f270a, 0xa467d916, 0x17f87a3b, 0x9a6b2528,
904 .key_mode = kOtcryptoKeyModeHmacSha512,
905 .key_derivation_key = kdk_data,
908 .kdf_context_bytelen = 0,
910 .kdf_label_bytelen = 0,
911 .km_mode = kOtcryptoKeyModeAesEcb,
912 .keying_material = km_data,
915 return run_test(&
test);
961 static status_t kdf_hmac_ctr_sha512_kdk256_km256_test(
void) {
962 uint32_t kdk_data[] = {
963 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
964 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
965 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
966 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
967 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
968 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
969 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
970 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
971 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
972 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
973 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
975 uint8_t context_data[] = {
976 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
978 uint8_t label_data[] = {
979 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
981 uint32_t km_data[] = {
982 0x24833077, 0xb668fdda, 0xbe501ec5, 0x411abb73, 0x156b6ac3, 0x166721c2,
983 0xe4f121ba, 0x0da65c1f, 0x49faa57a, 0xa66bd160, 0x3b08d379, 0xd2db84b4,
984 0xac1d0742, 0x6f3154a7, 0x897fbf57, 0x2ac65421, 0x2a8f5951, 0xf7fa263b,
985 0xe5f854f5, 0xa25743d2, 0x8e1961ae, 0xc22d5f9b, 0x399d664e, 0x31062543,
986 0x540aa408, 0x4f6c1b01, 0xbbc88a90, 0xd295dcf3, 0xc935dc4c, 0xa919fd83,
987 0x75c0a7a3, 0x0fe72bfc, 0x3f69c98c, 0xc752e913, 0xfd7cbec1, 0x63f1aa3a,
988 0x70368763, 0x7df10be1, 0xfccdcc0b, 0xc9e9cc0c, 0x6b324923, 0x8cfeb909,
989 0xd4444935, 0x9f72c5d1, 0x2d4d8baf, 0x23b9449f, 0x6897131f, 0xa5c64485,
990 0x985492cc, 0xa4de5178, 0x26032437, 0xd379b57e, 0x26b9c395, 0x07027cdb,
991 0x78954d95, 0xb7b26d2f, 0x05e14685, 0x7cd4a271, 0x2632f39f, 0x759922d5,
992 0x221318f4, 0x3f862ba2, 0xa3138f58, 0x79ebf585,
996 .key_mode = kOtcryptoKeyModeHmacSha512,
997 .key_derivation_key = kdk_data,
999 .kdf_context = context_data,
1000 .kdf_context_bytelen =
sizeof(context_data),
1001 .kdf_label = label_data,
1002 .kdf_label_bytelen =
sizeof(label_data),
1003 .km_mode = kOtcryptoKeyModeAesGcm,
1004 .keying_material = km_data,
1007 return run_test(&
test);
1038 static status_t kdf_hmac_ctr_sha512_kdk256_km16_test(
void) {
1039 uint32_t kdk_data[] = {
1040 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1041 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1042 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1043 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1044 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1045 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1046 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1047 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1048 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1049 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1050 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1052 uint8_t context_data[] = {
1058 uint8_t label_data[] = {
1062 uint32_t km_data[] = {
1070 .key_mode = kOtcryptoKeyModeHmacSha512,
1071 .key_derivation_key = kdk_data,
1073 .kdf_context = context_data,
1074 .kdf_context_bytelen =
sizeof(context_data),
1075 .kdf_label = label_data,
1076 .kdf_label_bytelen =
sizeof(label_data),
1077 .km_mode = kOtcryptoKeyModeAesGcm,
1078 .keying_material = km_data,
1081 return run_test(&
test);
1084 OTTF_DEFINE_TEST_CONFIG();
1088 CHECK_STATUS_OK(entropy_complex_init());
1090 status_t test_result = OK_STATUS();
1093 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk16_km16_test);
1094 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk32_km32_test);
1095 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk48_km48_test);
1096 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk256_km256_test);
1097 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk256_km16_test);
1100 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk16_km16_test);
1101 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk32_km32_test);
1102 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk48_km48_test);
1103 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk256_km256_test);
1104 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk256_km16_test);
1107 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk16_km16_test);
1108 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk32_km32_test);
1109 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk48_km48_test);
1110 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk256_km256_test);
1111 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk256_km16_test);
1113 return status_ok(test_result);