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:
140 LOG_INFO(
"Should never end up here.");
141 return INVALID_ARGUMENT();
144 LOG_INFO(
"KDF operation completed.");
150 TRY(keyblob_to_shares(&km, &km_share0, &km_share1));
151 uint32_t unmasked_km[keyblob_share_num_words(km_config)];
152 for (
size_t i = 0; i <
ARRAYSIZE(unmasked_km); i++) {
153 unmasked_km[i] = km_share0[i] ^ km_share1[i];
156 TRY_CHECK_ARRAYS_EQ((
unsigned char *)unmasked_km,
157 (
unsigned char *)
test->keying_material,
test->km_bytelen);
174 static status_t kdf_hmac_ctr_sha256_kdk16_km16_test(
void) {
175 uint32_t kdk_data[] = {
181 uint8_t context_data[] = {
187 uint8_t label_data[] = {
193 uint32_t km_data[] = {
201 .key_mode = kOtcryptoKeyModeHmacSha256,
202 .key_derivation_key = kdk_data,
204 .kdf_context = context_data,
205 .kdf_context_bytelen =
sizeof(context_data),
206 .kdf_label = label_data,
207 .kdf_label_bytelen =
sizeof(label_data),
208 .km_mode = kOtcryptoKeyModeAesCtr,
209 .keying_material = km_data,
212 return run_test(&
test);
230 static status_t kdf_hmac_ctr_sha256_kdk32_km32_test(
void) {
231 uint32_t kdk_data[] = {
232 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
233 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
235 uint8_t context_data[] = {
236 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
238 uint8_t label_data[] = {
239 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
241 uint32_t km_data[] = {
242 0x704bb412, 0x30c07602, 0xf999cd74, 0x4b576387,
243 0x301cf77b, 0x79230234, 0xf5b8f00b, 0x863ccf3f,
247 .key_mode = kOtcryptoKeyModeHmacSha256,
248 .key_derivation_key = kdk_data,
250 .kdf_context = context_data,
251 .kdf_context_bytelen =
sizeof(context_data),
252 .kdf_label = label_data,
253 .kdf_label_bytelen =
sizeof(label_data),
254 .km_mode = kOtcryptoKeyModeAesCbc,
255 .keying_material = km_data,
258 return run_test(&
test);
278 static status_t kdf_hmac_ctr_sha256_kdk48_km48_test(
void) {
279 uint32_t kdk_data[] = {
280 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
281 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
283 uint32_t km_data[] = {
284 0x520c2cf4, 0x9368e70d, 0x72aaa8bb, 0xdd1f4371, 0x2355b586, 0x8e7a28d3,
285 0x6806b281, 0x953b3b5d, 0x1b0399c0, 0x986da55a, 0xa7206265, 0x45b1a115,
289 .key_mode = kOtcryptoKeyModeHmacSha256,
290 .key_derivation_key = kdk_data,
293 .kdf_context_bytelen = 0,
295 .kdf_label_bytelen = 0,
296 .km_mode = kOtcryptoKeyModeAesEcb,
297 .keying_material = km_data,
300 return run_test(&
test);
346 static status_t kdf_hmac_ctr_sha256_kdk256_km256_test(
void) {
347 uint32_t kdk_data[] = {
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, 0x0b0b0b0b, 0x0b0b0b0b,
358 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
360 uint8_t context_data[] = {
361 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
363 uint8_t label_data[] = {
364 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
366 uint32_t km_data[] = {
367 0x557c5a55, 0x07a0ffaf, 0xd89f3b21, 0xd1620356, 0x0e72fad1, 0x6ae67352,
368 0x164545b5, 0x8fc409b8, 0x0738a08d, 0xb43da945, 0x21463a5e, 0x04ce052e,
369 0x5a5bb893, 0x226dd47c, 0xb4752b20, 0x6fb1dfc6, 0x0206c74f, 0x59368818,
370 0x36b92a1c, 0x4ae94ee4, 0x8ee21374, 0x96e8b0bc, 0xb1ddf0f4, 0xb6191c31,
371 0x9a9ec74c, 0x60fe86be, 0x132aa6dc, 0x44f4c828, 0x3de6b49d, 0xeb6cde1d,
372 0xe6215aad, 0x940c0849, 0x1fa33864, 0xaa8a4250, 0xe179c388, 0xe509ec88,
373 0xcd5a5d51, 0x498bd6df, 0xb295d807, 0x478d3d21, 0xde21f5f2, 0xf0abc3e8,
374 0x113b3b0e, 0x7503f69f, 0x012db118, 0xf3c3a036, 0xd24a41ce, 0x1a9f9311,
375 0x6752d1fb, 0xdff3a272, 0x77b49978, 0xd73ef1a2, 0x427d6557, 0x0c925536,
376 0x56dc7a8b, 0x07c3baad, 0x8371ca9d, 0xb4464f55, 0xa09a4d86, 0xc0dfdaf9,
377 0xf4a12fd6, 0x9b45e8c7, 0x99ad7a60, 0x82390046,
381 .key_mode = kOtcryptoKeyModeHmacSha256,
382 .key_derivation_key = kdk_data,
384 .kdf_context = context_data,
385 .kdf_context_bytelen =
sizeof(context_data),
386 .kdf_label = label_data,
387 .kdf_label_bytelen =
sizeof(label_data),
388 .km_mode = kOtcryptoKeyModeAesGcm,
389 .keying_material = km_data,
392 return run_test(&
test);
423 static status_t kdf_hmac_ctr_sha256_kdk256_km16_test(
void) {
424 uint32_t kdk_data[] = {
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, 0x0b0b0b0b, 0x0b0b0b0b,
435 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
437 uint8_t context_data[] = {
443 uint8_t label_data[] = {
447 uint32_t km_data[] = {
455 .key_mode = kOtcryptoKeyModeHmacSha256,
456 .key_derivation_key = kdk_data,
458 .kdf_context = context_data,
459 .kdf_context_bytelen =
sizeof(context_data),
460 .kdf_label = label_data,
461 .kdf_label_bytelen =
sizeof(label_data),
462 .km_mode = kOtcryptoKeyModeAesGcm,
463 .keying_material = km_data,
466 return run_test(&
test);
482 static status_t kdf_hmac_ctr_sha384_kdk16_km16_test(
void) {
483 uint32_t kdk_data[] = {
489 uint8_t context_data[] = {
495 uint8_t label_data[] = {
501 uint32_t km_data[] = {
509 .key_mode = kOtcryptoKeyModeHmacSha384,
510 .key_derivation_key = kdk_data,
512 .kdf_context = context_data,
513 .kdf_context_bytelen =
sizeof(context_data),
514 .kdf_label = label_data,
515 .kdf_label_bytelen =
sizeof(label_data),
516 .km_mode = kOtcryptoKeyModeAesCtr,
517 .keying_material = km_data,
520 return run_test(&
test);
538 static status_t kdf_hmac_ctr_sha384_kdk32_km32_test(
void) {
539 uint32_t kdk_data[] = {
540 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
541 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
543 uint8_t context_data[] = {
544 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
546 uint8_t label_data[] = {
547 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
549 uint32_t km_data[] = {
550 0x1fa14960, 0xa71ae98b, 0x750a55d4, 0xac1325a0,
551 0xbeb88709, 0xd66134ba, 0xf61959e8, 0x4091784c,
555 .key_mode = kOtcryptoKeyModeHmacSha384,
556 .key_derivation_key = kdk_data,
558 .kdf_context = context_data,
559 .kdf_context_bytelen =
sizeof(context_data),
560 .kdf_label = label_data,
561 .kdf_label_bytelen =
sizeof(label_data),
562 .km_mode = kOtcryptoKeyModeAesCbc,
563 .keying_material = km_data,
566 return run_test(&
test);
586 static status_t kdf_hmac_ctr_sha384_kdk48_km48_test(
void) {
587 uint32_t kdk_data[] = {
588 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
589 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
591 uint32_t km_data[] = {
592 0x9386ebdf, 0xa30783d5, 0x727e461d, 0xc2df28de, 0x61d6f52a, 0xa4252d0d,
593 0xe417a509, 0x36595012, 0xde30d7b3, 0xfe1c5263, 0x0bd545d0, 0x1574045a,
597 .key_mode = kOtcryptoKeyModeHmacSha384,
598 .key_derivation_key = kdk_data,
601 .kdf_context_bytelen = 0,
603 .kdf_label_bytelen = 0,
604 .km_mode = kOtcryptoKeyModeAesEcb,
605 .keying_material = km_data,
608 return run_test(&
test);
654 static status_t kdf_hmac_ctr_sha384_kdk256_km256_test(
void) {
655 uint32_t kdk_data[] = {
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, 0x0b0b0b0b, 0x0b0b0b0b,
666 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
668 uint8_t context_data[] = {
669 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
671 uint8_t label_data[] = {
672 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
674 uint32_t km_data[] = {
675 0x066a4f36, 0xc5d89bf4, 0x7f309f76, 0x0874f702, 0xe6181b02, 0x004d16f7,
676 0x9861d172, 0x264dce02, 0x15c20387, 0xb0c70016, 0xb33a7d40, 0x55256360,
677 0x9b348448, 0xdce97d29, 0xf0a31b88, 0x222919b4, 0xadeb1dd3, 0x581f7f20,
678 0x5cdcbd14, 0x8cf883dc, 0xcf55a3c3, 0x0208a251, 0x12c3981c, 0x6dedec0e,
679 0x93a8421a, 0x9fc162d7, 0xf75ed2d3, 0xcd872100, 0xdf87ee27, 0xedc7e8ed,
680 0x4bce7fba, 0xa1a4c37a, 0x1db04f47, 0xcd1ec73d, 0x598902e1, 0x79d5e068,
681 0x8ea0d0da, 0x7536ba66, 0x06c1b3a5, 0xd94d5147, 0xf60e53f6, 0x433b1d26,
682 0x23a3c5a9, 0xfca3f532, 0x8bb7f5e7, 0xaa785f28, 0x25ceedb1, 0xc79f9900,
683 0xb9d6473d, 0xe3a19191, 0xefec92ea, 0x1030ba2c, 0x86f7e72a, 0x8809f3de,
684 0x7d5ed3e0, 0xe1d0f341, 0xf0afd988, 0xe6e80d71, 0xaf112d74, 0xc64d8566,
685 0xe63f03c3, 0x5aeef080, 0x1b3d6103, 0x247e8e16,
689 .key_mode = kOtcryptoKeyModeHmacSha384,
690 .key_derivation_key = kdk_data,
692 .kdf_context = context_data,
693 .kdf_context_bytelen =
sizeof(context_data),
694 .kdf_label = label_data,
695 .kdf_label_bytelen =
sizeof(label_data),
696 .km_mode = kOtcryptoKeyModeAesGcm,
697 .keying_material = km_data,
700 return run_test(&
test);
731 static status_t kdf_hmac_ctr_sha384_kdk256_km16_test(
void) {
732 uint32_t kdk_data[] = {
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, 0x0b0b0b0b, 0x0b0b0b0b,
743 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
745 uint8_t context_data[] = {
751 uint8_t label_data[] = {
755 uint32_t km_data[] = {
763 .key_mode = kOtcryptoKeyModeHmacSha384,
764 .key_derivation_key = kdk_data,
766 .kdf_context = context_data,
767 .kdf_context_bytelen =
sizeof(context_data),
768 .kdf_label = label_data,
769 .kdf_label_bytelen =
sizeof(label_data),
770 .km_mode = kOtcryptoKeyModeAesGcm,
771 .keying_material = km_data,
774 return run_test(&
test);
790 static status_t kdf_hmac_ctr_sha512_kdk16_km16_test(
void) {
791 uint32_t kdk_data[] = {
797 uint8_t context_data[] = {
803 uint8_t label_data[] = {
809 uint32_t km_data[] = {
817 .key_mode = kOtcryptoKeyModeHmacSha512,
818 .key_derivation_key = kdk_data,
820 .kdf_context = context_data,
821 .kdf_context_bytelen =
sizeof(context_data),
822 .kdf_label = label_data,
823 .kdf_label_bytelen =
sizeof(label_data),
824 .km_mode = kOtcryptoKeyModeAesCtr,
825 .keying_material = km_data,
828 return run_test(&
test);
846 static status_t kdf_hmac_ctr_sha512_kdk32_km32_test(
void) {
847 uint32_t kdk_data[] = {
848 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
849 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
851 uint8_t context_data[] = {
852 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
854 uint8_t label_data[] = {
855 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
857 uint32_t km_data[] = {
858 0xe949abba, 0xcbb81849, 0x5fb1ef76, 0xfe3f2f1b,
859 0x910e75af, 0x1fbb8e89, 0x8b5fa06a, 0x64253932,
863 .key_mode = kOtcryptoKeyModeHmacSha512,
864 .key_derivation_key = kdk_data,
866 .kdf_context = context_data,
867 .kdf_context_bytelen =
sizeof(context_data),
868 .kdf_label = label_data,
869 .kdf_label_bytelen =
sizeof(label_data),
870 .km_mode = kOtcryptoKeyModeAesCbc,
871 .keying_material = km_data,
874 return run_test(&
test);
894 static status_t kdf_hmac_ctr_sha512_kdk48_km48_test(
void) {
895 uint32_t kdk_data[] = {
896 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
897 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
899 uint32_t km_data[] = {
900 0xcd4e3757, 0xfeb2d0ff, 0x2535f3e3, 0x54692166, 0xdc27554d, 0x6f850bb8,
901 0x133cf806, 0x2e148900, 0xd51f270a, 0xa467d916, 0x17f87a3b, 0x9a6b2528,
905 .key_mode = kOtcryptoKeyModeHmacSha512,
906 .key_derivation_key = kdk_data,
909 .kdf_context_bytelen = 0,
911 .kdf_label_bytelen = 0,
912 .km_mode = kOtcryptoKeyModeAesEcb,
913 .keying_material = km_data,
916 return run_test(&
test);
962 static status_t kdf_hmac_ctr_sha512_kdk256_km256_test(
void) {
963 uint32_t kdk_data[] = {
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, 0x0b0b0b0b, 0x0b0b0b0b,
974 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
976 uint8_t context_data[] = {
977 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
979 uint8_t label_data[] = {
980 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
982 uint32_t km_data[] = {
983 0x24833077, 0xb668fdda, 0xbe501ec5, 0x411abb73, 0x156b6ac3, 0x166721c2,
984 0xe4f121ba, 0x0da65c1f, 0x49faa57a, 0xa66bd160, 0x3b08d379, 0xd2db84b4,
985 0xac1d0742, 0x6f3154a7, 0x897fbf57, 0x2ac65421, 0x2a8f5951, 0xf7fa263b,
986 0xe5f854f5, 0xa25743d2, 0x8e1961ae, 0xc22d5f9b, 0x399d664e, 0x31062543,
987 0x540aa408, 0x4f6c1b01, 0xbbc88a90, 0xd295dcf3, 0xc935dc4c, 0xa919fd83,
988 0x75c0a7a3, 0x0fe72bfc, 0x3f69c98c, 0xc752e913, 0xfd7cbec1, 0x63f1aa3a,
989 0x70368763, 0x7df10be1, 0xfccdcc0b, 0xc9e9cc0c, 0x6b324923, 0x8cfeb909,
990 0xd4444935, 0x9f72c5d1, 0x2d4d8baf, 0x23b9449f, 0x6897131f, 0xa5c64485,
991 0x985492cc, 0xa4de5178, 0x26032437, 0xd379b57e, 0x26b9c395, 0x07027cdb,
992 0x78954d95, 0xb7b26d2f, 0x05e14685, 0x7cd4a271, 0x2632f39f, 0x759922d5,
993 0x221318f4, 0x3f862ba2, 0xa3138f58, 0x79ebf585,
997 .key_mode = kOtcryptoKeyModeHmacSha512,
998 .key_derivation_key = kdk_data,
1000 .kdf_context = context_data,
1001 .kdf_context_bytelen =
sizeof(context_data),
1002 .kdf_label = label_data,
1003 .kdf_label_bytelen =
sizeof(label_data),
1004 .km_mode = kOtcryptoKeyModeAesGcm,
1005 .keying_material = km_data,
1008 return run_test(&
test);
1039 static status_t kdf_hmac_ctr_sha512_kdk256_km16_test(
void) {
1040 uint32_t kdk_data[] = {
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, 0x0b0b0b0b, 0x0b0b0b0b,
1051 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b0b,
1053 uint8_t context_data[] = {
1059 uint8_t label_data[] = {
1063 uint32_t km_data[] = {
1071 .key_mode = kOtcryptoKeyModeHmacSha512,
1072 .key_derivation_key = kdk_data,
1074 .kdf_context = context_data,
1075 .kdf_context_bytelen =
sizeof(context_data),
1076 .kdf_label = label_data,
1077 .kdf_label_bytelen =
sizeof(label_data),
1078 .km_mode = kOtcryptoKeyModeAesGcm,
1079 .keying_material = km_data,
1082 return run_test(&
test);
1085 OTTF_DEFINE_TEST_CONFIG();
1089 CHECK_STATUS_OK(entropy_complex_init());
1091 status_t test_result = OK_STATUS();
1094 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk16_km16_test);
1095 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk32_km32_test);
1096 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk48_km48_test);
1097 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk256_km256_test);
1098 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha256_kdk256_km16_test);
1101 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk16_km16_test);
1102 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk32_km32_test);
1103 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk48_km48_test);
1104 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk256_km256_test);
1105 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha384_kdk256_km16_test);
1108 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk16_km16_test);
1109 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk32_km32_test);
1110 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk48_km48_test);
1111 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk256_km256_test);
1112 EXECUTE_TEST(test_result, kdf_hmac_ctr_sha512_kdk256_km16_test);
1114 return status_ok(test_result);