4 #include "sw/device/lib/crypto/drivers/entropy_kat.h"
9 #include "sw/device/lib/crypto/drivers/entropy.h"
12 #include "csrng_regs.h"
15 #define MODULE_ID MAKE_MODULE_ID('e', 'n', 'k')
24 typedef enum entropy_csrng_internal_state_id {
37 } entropy_csrng_internal_state_id_t;
67 static void entropy_csrng_internal_state_get(
68 entropy_csrng_internal_state_id_t instance_id,
73 0, CSRNG_INT_STATE_NUM_INT_STATE_NUM_FIELD, instance_id);
74 abs_mmio_write32(kBaseCsrng + CSRNG_INT_STATE_NUM_REG_OFFSET, reg);
78 abs_mmio_read32(kBaseCsrng + CSRNG_INT_STATE_VAL_REG_OFFSET);
80 for (
size_t i = 0; i <
ARRAYSIZE(state->
v); ++i) {
81 state->
v[i] = abs_mmio_read32(kBaseCsrng + CSRNG_INT_STATE_VAL_REG_OFFSET);
86 abs_mmio_read32(kBaseCsrng + CSRNG_INT_STATE_VAL_REG_OFFSET);
89 uint32_t flags = abs_mmio_read32(kBaseCsrng + CSRNG_INT_STATE_VAL_REG_OFFSET);
103 static status_t check_internal_state(
115 TRY(entropy_complex_check());
117 TRY(entropy_csrng_uninstantiate());
120 .
data = {0x73bec010, 0x9262474c, 0x16a30f76, 0x531b51de, 0x2ee494e5,
121 0xdfec9db3, 0xcb7a879d, 0x5600419c, 0xca79b0b0, 0xdda33b5c,
122 0xa468649e, 0xdf5d73fa},
125 TRY(entropy_csrng_instantiate(
130 .v = {0x06b8f59e, 0x43c0b2c2, 0x21052502, 0x217b5214},
131 .key = {0x941709fd, 0xd8a25860, 0x861aecf3, 0x98a701a1, 0x0eb2c33b,
132 0x74c08fad, 0x632d5227, 0x8c52f901},
133 .instantiated =
true,
134 .fips_compliance =
false,
136 TRY(check_internal_state(&kExpectedStateInstantiate));
139 kExpectedOutputLen = 16,
142 uint32_t got[kExpectedOutputLen];
143 TRY(entropy_csrng_generate(NULL, got, kExpectedOutputLen,
145 TRY(entropy_csrng_generate(NULL, got, kExpectedOutputLen,
150 .v = {0xe73e3392, 0x7d2e92b1, 0x1a0bac9d, 0x53c78ac6},
152 .key = {0x66d1b85a, 0xc19d4dfd, 0x053b73e3, 0xe9dc0f90, 0x3f015bc8,
153 0x4436e5fd, 0x1cccc697, 0x1a1c6e5f},
154 .instantiated =
true,
155 .fips_compliance =
false,
157 TRY(check_internal_state(&kExpectedStateGenerate));
161 const uint32_t kExpectedOutput[kExpectedOutputLen] = {
162 0xd1c07cd9, 0x5af8a7f1, 0x1012c84c, 0xe48bb8cb, 0x87189e99, 0xd40fccb1,
163 0x771c619b, 0xdf82ab22, 0x80b1dc2f, 0x2581f391, 0x64f7ac0c, 0x510494b3,
164 0xa43c41b7, 0xdb17514c, 0x87b107ae, 0x793e01c5,
166 if (!
memcmp(got, kExpectedOutput,
sizeof(kExpectedOutput))) {