6 #include "sw/device/lib/crypto/drivers/entropy.h"
7 #include "sw/device/lib/crypto/impl/aes_kwp/aes_kwp.h"
8 #include "sw/device/lib/crypto/impl/status.h"
10 #include "sw/device/lib/testing/test_framework/check.h"
14 #define MODULE_ID MAKE_MODULE_ID('t', 's', 't')
17 static const uint32_t kZero[256 / 32] = {0, 0, 0, 0, 0, 0, 0, 0};
26 static aes_key_t make_aes_key(
const uint32_t *key,
size_t key_words) {
28 .
mode = kAesCipherModeEcb,
31 .key_shares = {key, kZero},
50 static status_t aes_kwp_wrap_kat(
const uint32_t *kek,
size_t kek_words,
51 const uint32_t *ptext,
size_t ptext_bytes,
52 const uint32_t *ctext,
size_t ctext_words) {
54 aes_key_t aes_kek = make_aes_key(kek, kek_words);
57 uint32_t act_ctext[ctext_words + 1];
58 act_ctext[ctext_words] = 0xffffffff;
59 TRY(aes_kwp_wrap(aes_kek, ptext, ptext_bytes, act_ctext));
60 TRY_CHECK_ARRAYS_EQ(act_ctext, ctext, ctext_words);
64 TRY_CHECK(act_ctext[ctext_words] == 0xffffffff);
84 static status_t aes_kwp_unwrap_kat(
const uint32_t *kek,
size_t kek_words,
85 const uint32_t *ctext,
size_t ctext_words,
86 bool valid,
const uint32_t *ptext,
89 aes_key_t aes_kek = make_aes_key(kek, kek_words);
92 size_t ptext_words = (ptext_bytes +
sizeof(uint32_t) - 1) /
sizeof(uint32_t);
93 uint32_t act_ptext[ptext_words];
95 TRY(aes_kwp_unwrap(aes_kek, ctext, ctext_words *
sizeof(uint32_t), &success,
101 TRY_CHECK_ARRAYS_EQ((
unsigned char *)act_ptext, (
unsigned char *)ptext,
116 static status_t no_padding_test(
void) {
117 uint32_t kek[] = {0x6d48676f, 0x1944911e, 0x85c243cb, 0xeac1c709};
118 uint32_t ptext[] = {0x2d63c08d, 0xe40bee92, 0x840240f7, 0x7082b010};
119 uint32_t ctext[] = {0xa63fd68c, 0xeda58a78, 0xc83f75fa,
120 0x675a647d, 0x7c10142b, 0xe719453b};
122 TRY(aes_kwp_wrap_kat(kek,
ARRAYSIZE(kek), ptext,
sizeof(ptext), ctext,
125 true, ptext,
sizeof(ptext));
134 static status_t needs_padding_test(
void) {
135 uint32_t kek[] = {0x0fe26578, 0x9a65213c, 0x620b69b4, 0xc43cdf9c};
138 uint32_t ptext[] = {0xd44368bd, 0xc88d3720, 0xffffff96};
139 size_t ptext_len = 9;
140 uint32_t ctext[] = {0x56a9ec41, 0x7e04aad4, 0xfe4ecfb5,
141 0xe7619665, 0xc5f8b64d, 0x0035e264};
143 TRY(aes_kwp_wrap_kat(kek,
ARRAYSIZE(kek), ptext, ptext_len, ctext,
146 true, ptext, ptext_len);
149 OTTF_DEFINE_TEST_CONFIG();
154 CHECK_STATUS_OK(entropy_complex_init());
158 return status_ok(result);