5 #include "sw/device/lib/crypto/drivers/entropy.h"
6 #include "sw/device/lib/crypto/drivers/otbn.h"
7 #include "sw/device/lib/crypto/impl/integrity.h"
8 #include "sw/device/lib/crypto/impl/keyblob.h"
12 #include "sw/device/lib/testing/entropy_testutils.h"
13 #include "sw/device/lib/testing/keymgr_testutils.h"
14 #include "sw/device/lib/testing/test_framework/check.h"
18 #define MODULE_ID MAKE_MODULE_ID('t', 's', 't')
22 kP256PublicKeyWords = 512 / 32,
24 kP256SignatureWords = 512 / 32,
26 kP256PrivateKeyBytes = 256 / 8,
28 kP256SharedKeyBytes = 256 / 8,
30 kP256SharedKeyWords = kP256SharedKeyBytes /
sizeof(uint32_t),
34 static const uint32_t kPrivateKeyAVersion = 0;
35 static const uint32_t kPrivateKeyBVersion = 0;
38 static const uint32_t kPrivateKeyASalt[7] = {0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
39 0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
41 static const uint32_t kPrivateKeyBSalt[7] = {0xa0a1a2a3, 0xa4a5a6a7, 0xa8a9aaab,
42 0xacadaeaf, 0xb0b1b2b3, 0xb4b5b6b7,
47 .version = kOtcryptoLibVersion1,
48 .key_mode = kOtcryptoKeyModeEcdhP256,
49 .key_length = kP256PrivateKeyBytes,
51 .security_level = kOtcryptoKeySecurityLevelLow,
58 .version = kOtcryptoLibVersion1,
59 .key_mode = kOtcryptoKeyModeAesCtr,
60 .key_length = kP256SharedKeyBytes,
62 .security_level = kOtcryptoKeySecurityLevelLow,
67 uint32_t keyblobA[keyblob_num_words(kEcdhPrivateKeyConfig)];
69 .config = kEcdhPrivateKeyConfig,
70 .keyblob_length =
sizeof(keyblobA),
75 uint32_t keyblobB[keyblob_num_words(kEcdhPrivateKeyConfig)];
77 .config = kEcdhPrivateKeyConfig,
78 .keyblob_length =
sizeof(keyblobB),
85 uint32_t pkA[kP256PublicKeyWords] = {0};
86 uint32_t pkB[kP256PublicKeyWords] = {0};
88 .key_mode = kOtcryptoKeyModeEcdhP256,
89 .key_length =
sizeof(pkA),
93 .key_mode = kOtcryptoKeyModeEcdhP256,
94 .key_length =
sizeof(pkB),
103 LOG_INFO(
"Generating keypair B...");
107 CHECK_ARRAYS_NE(pkA, pkB,
ARRAYSIZE(pkA));
110 uint32_t shared_keyblobA[keyblob_num_words(kEcdhSharedKeyConfig)];
112 .config = kEcdhSharedKeyConfig,
113 .keyblob_length =
sizeof(shared_keyblobA),
114 .keyblob = shared_keyblobA,
117 uint32_t shared_keyblobB[keyblob_num_words(kEcdhSharedKeyConfig)];
119 .config = kEcdhSharedKeyConfig,
120 .keyblob_length =
sizeof(shared_keyblobB),
121 .keyblob = shared_keyblobB,
127 LOG_INFO(
"Generating shared secret (A)...");
132 LOG_INFO(
"Generating shared secret (B)...");
138 TRY(keyblob_to_shares(&shared_keyA, &keyA0, &keyA1));
141 TRY(keyblob_to_shares(&shared_keyB, &keyB0, &keyB1));
144 uint32_t keyA[kP256SharedKeyWords];
145 uint32_t keyB[kP256SharedKeyWords];
146 for (
size_t i = 0; i <
ARRAYSIZE(keyA); i++) {
147 keyA[i] = keyA0[i] ^ keyA1[i];
148 keyB[i] = keyB0[i] ^ keyB1[i];
150 CHECK_ARRAYS_EQ(keyA, keyB,
ARRAYSIZE(keyA));
163 TRY(keymgr_testutils_try_startup(&keymgr, &kmac, &keymgr_state));
166 TRY(keymgr_testutils_advance_state(&keymgr, &kOwnerIntParams));
167 TRY(keymgr_testutils_advance_state(&keymgr, &kOwnerRootKeyParams));
169 TRY(keymgr_testutils_advance_state(&keymgr, &kOwnerRootKeyParams));
177 return entropy_complex_init();
180 OTTF_DEFINE_TEST_CONFIG();
188 return status_ok(result);