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"
19 kP384PublicKeyWords = 768 / 32,
21 kP384SignatureWords = 768 / 32,
23 kP384PrivateKeyBytes = 384 / 8,
25 kP384SharedKeyBytes = 384 / 8,
27 kP384SharedKeyWords = kP384SharedKeyBytes /
sizeof(uint32_t),
31 static const uint32_t kPrivateKeyAVersion = 0;
32 static const uint32_t kPrivateKeyBVersion = 0;
35 static const uint32_t kPrivateKeyASalt[7] = {0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
36 0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
38 static const uint32_t kPrivateKeyBSalt[7] = {0xa0a1a2a3, 0xa4a5a6a7, 0xa8a9aaab,
39 0xacadaeaf, 0xb0b1b2b3, 0xb4b5b6b7,
44 .version = kOtcryptoLibVersion1,
45 .key_mode = kOtcryptoKeyModeEcdhP384,
46 .key_length = kP384PrivateKeyBytes,
48 .security_level = kOtcryptoKeySecurityLevelLow,
55 .version = kOtcryptoLibVersion1,
56 .key_mode = kOtcryptoKeyModeAesCtr,
57 .key_length = kP384SharedKeyBytes,
59 .security_level = kOtcryptoKeySecurityLevelLow,
64 uint32_t keyblobA[keyblob_num_words(kEcdhPrivateKeyConfig)];
66 .config = kEcdhPrivateKeyConfig,
67 .keyblob_length =
sizeof(keyblobA),
72 uint32_t keyblobB[keyblob_num_words(kEcdhPrivateKeyConfig)];
74 .config = kEcdhPrivateKeyConfig,
75 .keyblob_length =
sizeof(keyblobB),
82 uint32_t pkA[kP384PublicKeyWords] = {0};
83 uint32_t pkB[kP384PublicKeyWords] = {0};
85 .key_mode = kOtcryptoKeyModeEcdhP384,
86 .key_length =
sizeof(pkA),
90 .key_mode = kOtcryptoKeyModeEcdhP384,
91 .key_length =
sizeof(pkB),
100 LOG_INFO(
"Generating keypair B...");
104 CHECK_ARRAYS_NE(pkA, pkB,
ARRAYSIZE(pkA));
107 uint32_t shared_keyblobA[keyblob_num_words(kEcdhSharedKeyConfig)];
109 .config = kEcdhSharedKeyConfig,
110 .keyblob_length =
sizeof(shared_keyblobA),
111 .keyblob = shared_keyblobA,
114 uint32_t shared_keyblobB[keyblob_num_words(kEcdhSharedKeyConfig)];
116 .config = kEcdhSharedKeyConfig,
117 .keyblob_length =
sizeof(shared_keyblobB),
118 .keyblob = shared_keyblobB,
124 LOG_INFO(
"Generating shared secret (A)...");
129 LOG_INFO(
"Generating shared secret (B)...");
135 TRY(keyblob_to_shares(&shared_keyA, &keyA0, &keyA1));
138 TRY(keyblob_to_shares(&shared_keyB, &keyB0, &keyB1));
141 uint32_t keyA[kP384SharedKeyWords];
142 uint32_t keyB[kP384SharedKeyWords];
143 for (
size_t i = 0; i <
ARRAYSIZE(keyA); i++) {
144 keyA[i] = keyA0[i] ^ keyA1[i];
145 keyB[i] = keyB0[i] ^ keyB1[i];
147 CHECK_ARRAYS_EQ(keyA, keyB,
ARRAYSIZE(keyA));
160 TRY(keymgr_testutils_try_startup(&keymgr, &kmac, &keymgr_state));
163 TRY(keymgr_testutils_advance_state(&keymgr, &kOwnerIntParams));
164 TRY(keymgr_testutils_advance_state(&keymgr, &kOwnerRootKeyParams));
166 TRY(keymgr_testutils_advance_state(&keymgr, &kOwnerRootKeyParams));
174 return entropy_complex_init();
177 OTTF_DEFINE_TEST_CONFIG();
185 return status_ok(result);