5 #include "sw/device/lib/testing/aes_testutils.h"
7 #include "hw/ip/aes/model/aes_modes.h"
9 #include "sw/device/lib/testing/test_framework/check.h"
11 #ifndef OPENTITAN_IS_ENGLISHBREAKFAST
12 #include "sw/device/lib/dif/dif_csrng_shared.h"
13 #include "sw/device/lib/testing/csrng_testutils.h"
15 #include "csrng_regs.h"
26 static const uint8_t kKeyShare1[] = {
27 0x0f, 0x1f, 0x2f, 0x3F, 0x4f, 0x5f, 0x6f, 0x7f, 0x8f, 0x9f, 0xaf,
28 0xbf, 0xcf, 0xdf, 0xef, 0xff, 0x0a, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a,
29 0x6a, 0x7a, 0x8a, 0x9a, 0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa,
35 kAesTestutilsTimeout = (10 * 1000 * 1000),
38 #ifndef OPENTITAN_IS_ENGLISHBREAKFAST
45 kEdnSeedMaterialLen = 12,
51 const uint32_t kAesMaskingPrngZeroOutputSeed[kCsrngBlockLen] = {
52 0x00000000, 0x000000000, 0x00000000, 0x00000000};
65 const uint32_t kEdnSeedMaterialInstantiate[kEdnSeedMaterialLen] = {
66 0x84adaf86, 0x652b7141, 0x1d880d0e, 0x1fff0b21, 0xa6ee8307, 0x1f57dfc8,
67 0x59757d79, 0xdeb6522e, 0xc8c67d84, 0xa16abefa, 0xc34030be, 0x530e88f8};
70 const uint32_t kCsrngVInstantiate[kCsrngBlockLen] = {0xf1ab9a08, 0xb48984cf,
71 0x2a2e277a, 0x6d9f08eb};
72 const uint32_t kCsrngKeyInstantiate[kCsrngKeyLen] = {
73 0x1c1d1e1f, 0x18191a1b, 0x14151617, 0x10111213,
74 0x0c0d0e0f, 0x08090a0b, 0x04050607, 0x00010203};
77 const uint32_t kCsrngVGenerate[kCsrngBlockLen] = {0x654600bd, 0xf0c32787,
78 0x3eb52114, 0x8a1e0dce};
79 const uint32_t kCsrngKeyGenerate[kCsrngKeyLen] = {
80 0xff6589b5, 0x4bb8e5f9, 0x62847098, 0x1e9f9cd1,
81 0x3c005fbd, 0x9a1b6e70, 0xe30eb080, 0x71dea927};
87 const uint32_t kEdnSeedMaterialReseed[kEdnSeedMaterialLen] = {
88 0x96994362, 0x7ef8f0b9, 0x5b5332dc, 0xd0df9b12, 0x96dfbaa9, 0xac0b5af7,
89 0xec2504be, 0xb00fb68c, 0xf37e0a7f, 0x88172eec, 0x4e4b5f58, 0xfec120c0};
91 status_t aes_testutils_masking_prng_zero_output_seed(
const dif_csrng_t *csrng,
92 const dif_edn_t *edn0) {
105 .
cmd = csrng_cmd_header_build(kCsrngAppCmdInstantiate,
111 .len = kEdnSeedMaterialLen,
116 .cmd = csrng_cmd_header_build(kCsrngAppCmdReseed,
122 .len = kEdnSeedMaterialLen,
127 .cmd = csrng_cmd_header_build(kCsrngAppCmdGenerate,
136 .reseed_interval = 1,
139 kEdnSeedMaterialInstantiate,
sizeof(kEdnSeedMaterialInstantiate));
141 sizeof(kEdnSeedMaterialReseed));
146 status_t aes_testutils_csrng_kat(
const dif_csrng_t *csrng) {
153 sizeof(kEdnSeedMaterialInstantiate));
156 .instantiated =
true,
157 .fips_compliance =
false,
159 memcpy(expected_state_instantiate.
v, kCsrngVInstantiate,
160 sizeof(kCsrngVInstantiate));
161 memcpy(expected_state_instantiate.
key, kCsrngKeyInstantiate,
162 sizeof(kCsrngKeyInstantiate));
163 TRY(csrng_testutils_kat_instantiate(csrng,
false, &seed_material_instantiate,
164 &expected_state_instantiate));
170 .instantiated =
true,
171 .fips_compliance =
false,
173 memcpy(expected_state_generate.
v, kCsrngVGenerate,
sizeof(kCsrngVGenerate));
174 memcpy(expected_state_generate.
key, kCsrngKeyGenerate,
175 sizeof(kCsrngKeyGenerate));
176 TRY(csrng_testutils_kat_generate(csrng, 1, kCsrngBlockLen,
177 kAesMaskingPrngZeroOutputSeed,
178 &expected_state_generate));
186 sizeof(kEdnSeedMaterialReseed));
189 .instantiated =
true,
190 .fips_compliance =
false,
192 memcpy(expected_state_reseed.
v, kCsrngVInstantiate,
193 sizeof(kCsrngVInstantiate));
194 memcpy(expected_state_reseed.
key, kCsrngKeyInstantiate,
195 sizeof(kCsrngKeyInstantiate));
196 TRY(csrng_testutils_kat_reseed(csrng, &seed_material_reseed,
197 &expected_state_reseed));
201 TRY(csrng_testutils_kat_generate(csrng, 1, kCsrngBlockLen,
202 kAesMaskingPrngZeroOutputSeed,
203 &expected_state_generate));
212 uint8_t key_share0[
sizeof(kAesModesKey256)];
213 for (
int i = 0; i <
sizeof(kAesModesKey256); ++i) {
214 key_share0[i] = kAesModesKey256[i] ^ kKeyShare1[i];
218 memcpy(key.share0, key_share0,
sizeof(key.share0));
219 memcpy(key.share1, kKeyShare1,
sizeof(key.share1));
222 kAesTestutilsTimeout);
227 memcpy(in_data_plain.data, kAesModesPlainText,
sizeof(in_data_plain.data));
231 kAesTestutilsTimeout);
233 kAesTestutilsTimeout);
247 CHECK_ARRAYS_EQ((uint8_t *)out_data.data, kAesModesCipherTextEcb256,
248 sizeof(out_data.data));
256 kAesTestutilsTimeout);
261 kAesTestutilsTimeout);
267 CHECK_ARRAYS_EQ((uint8_t *)out_data.data, kAesModesPlainText,
268 sizeof(out_data.data));