5 #include "sw/device/lib/crypto/drivers/entropy.h"
6 #include "sw/device/lib/crypto/drivers/hmac.h"
10 #include "sw/device/lib/testing/test_framework/check.h"
22 static const unsigned char kTwoBlockMessage[] =
23 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
24 static const size_t kTwoBlockMessageLen =
sizeof(kTwoBlockMessage) - 1;
25 static const uint8_t kTwoBlockExpDigest[] = {
26 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 0xe5, 0xc0, 0x26,
27 0x93, 0x0c, 0x3e, 0x60, 0x39, 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff,
28 0x21, 0x67, 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1};
36 static const uint8_t kExactBlockMessage[] = {
37 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
38 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
39 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
40 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
41 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
42 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
44 static const size_t kExactBlockMessageLen =
sizeof(kExactBlockMessage);
45 static const uint8_t kExactBlockExpDigest[] = {
46 0xfd, 0xea, 0xb9, 0xac, 0xf3, 0x71, 0x03, 0x62, 0xbd, 0x26, 0x58,
47 0xcd, 0xc9, 0xa2, 0x9e, 0x8f, 0x9c, 0x75, 0x7f, 0xcf, 0x98, 0x11,
48 0x60, 0x3a, 0x8c, 0x44, 0x7c, 0xd1, 0xd9, 0x15, 0x11, 0x08,
58 const uint32_t *exp_digest) {
59 uint32_t act_digest[kHmacSha256DigestWords];
62 .len = kHmacSha256DigestWords,
63 .mode = kOtcryptoHashModeSha256,
66 TRY_CHECK_ARRAYS_EQ(act_digest, exp_digest, kHmacSha256DigestWords);
77 const char plaintext[] =
"Test message.";
79 .data = (
unsigned char *)plaintext,
80 .len =
sizeof(plaintext) - 1,
82 const uint32_t exp_digest[] = {
83 0x7a99dab2, 0x7ce06e96, 0x83f0e143, 0x88e57c80,
84 0xcaa4c04b, 0xca023bd1, 0x18a172dc, 0x1709b520,
86 return run_test(msg_buf, exp_digest);
96 const uint32_t exp_digest[] = {
97 0x42c4b0e3, 0x141cfc98, 0xc8f4fb9a, 0x24b96f99,
98 0xe441ae27, 0x4c939b64, 0x1b9995a4, 0x55b85278,
104 return run_test(msg_buf, exp_digest);
110 static status_t one_update_streaming_test(
void) {
115 .data = kExactBlockMessage,
116 .len = kExactBlockMessageLen,
120 size_t digest_num_words =
121 (
sizeof(kExactBlockExpDigest) +
sizeof(uint32_t) - 1) /
sizeof(uint32_t);
122 uint32_t act_digest[digest_num_words];
125 .len = digest_num_words,
126 .mode = kOtcryptoHashModeSha256,
129 TRY_CHECK_ARRAYS_EQ((
unsigned char *)act_digest, kExactBlockExpDigest,
130 sizeof(kExactBlockExpDigest));
137 static status_t multiple_update_streaming_test(
void) {
142 const unsigned char *next = kTwoBlockMessage;
143 size_t len = kTwoBlockMessageLen;
144 size_t update_size = 0;
146 update_size = len <= update_size ? len : update_size;
156 size_t digest_num_words =
157 (
sizeof(kTwoBlockExpDigest) +
sizeof(uint32_t) - 1) /
sizeof(uint32_t);
158 uint32_t act_digest[digest_num_words];
161 .len = digest_num_words,
162 .mode = kOtcryptoHashModeSha256,
165 TRY_CHECK_ARRAYS_EQ((
unsigned char *)act_digest, kTwoBlockExpDigest,
166 sizeof(kTwoBlockExpDigest));
170 OTTF_DEFINE_TEST_CONFIG();
174 CHECK_STATUS_OK(entropy_complex_init());
178 EXECUTE_TEST(test_result, multiple_update_streaming_test);
179 return status_ok(test_result);