9 #include "sw/device/lib/base/status.h"
10 #include "sw/device/lib/crypto/drivers/entropy.h"
11 #include "sw/device/lib/crypto/impl/integrity.h"
14 #include "sw/device/lib/testing/test_framework/ujson_ottf.h"
15 #include "sw/device/lib/ujson/ujson.h"
16 #include "sw/device/tests/crypto/cryptotest/json/drbg_commands.h"
19 cryptotest_drbg_input_t uj_input;
21 TRY(ujson_deserialize_cryptotest_drbg_input_t(uj, &uj_input));
24 uint8_t entropy_buf[kEntropySeedBytes];
25 memset(entropy_buf, 0, kEntropySeedBytes);
26 memcpy(entropy_buf, uj_input.entropy, uj_input.entropy_len);
28 .len = kEntropySeedBytes,
33 uint8_t perso_string_buf[uj_input.personalization_string_len];
34 memcpy(perso_string_buf, uj_input.personalization_string,
35 uj_input.personalization_string_len);
37 .len = uj_input.personalization_string_len,
38 .data = perso_string_buf,
42 uint8_t reseed_entropy_buf[uj_input.reseed_entropy_len];
43 memcpy(reseed_entropy_buf, uj_input.reseed_entropy,
44 uj_input.reseed_entropy_len);
46 .len = uj_input.reseed_entropy_len,
47 .data = uj_input.reseed_entropy,
51 uint8_t reseed_addl_buf[uj_input.reseed_additional_input_len];
52 memcpy(reseed_addl_buf, uj_input.reseed_additional_input,
53 uj_input.reseed_additional_input_len);
55 .len = uj_input.reseed_additional_input_len,
56 .data = uj_input.reseed_additional_input,
60 uint8_t addl_1_buf[uj_input.additional_input_1_len];
61 memcpy(addl_1_buf, uj_input.additional_input_1,
62 uj_input.additional_input_1_len);
64 .len = uj_input.additional_input_1_len,
65 .data = uj_input.additional_input_1,
69 uint8_t addl_2_buf[uj_input.additional_input_2_len];
70 memcpy(addl_2_buf, uj_input.additional_input_2,
71 uj_input.additional_input_2_len);
73 .len = uj_input.additional_input_2_len,
74 .data = uj_input.additional_input_2,
78 cryptotest_drbg_output_t uj_output = {
79 .output_len = uj_input.output_len,
81 size_t output_words =
ceil_div(uj_output.output_len,
sizeof(uint32_t));
84 .data = (uint32_t *)uj_output.output,
92 if (uj_input.reseed) {
107 RESP_OK(ujson_serialize_cryptotest_drbg_output_t, uj, &uj_output);