5 #include "hw/ip/aes/model/aes_modes.h"
8 #include "sw/device/lib/base/multibits.h"
11 #include "sw/device/lib/dif/dif_csrng_shared.h"
14 #include "sw/device/lib/testing/aes_testutils.h"
15 #include "sw/device/lib/testing/csrng_testutils.h"
16 #include "sw/device/lib/testing/test_framework/check.h"
22 kTestTimeout = (1000 * 1000),
29 static const unsigned char kAesModesPlainTextBlock12[32] = {
30 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e,
31 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03,
32 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
35 static const unsigned char kAesModesPlainTextBlock34[32] = {
36 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1,
37 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f,
38 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10};
40 static const uint8_t kKeyShare1[] = {
41 0x0f, 0x1f, 0x2f, 0x3f, 0x4f, 0x5f, 0x6f, 0x7f, 0x8f, 0x9f, 0xaf,
42 0xbf, 0xcf, 0xdf, 0xef, 0xff, 0x0a, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a,
43 0x6a, 0x7a, 0x8a, 0x9a, 0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa,
46 OTTF_DEFINE_TEST_CONFIG();
52 for (
int test_modes = 1; test_modes < 5; test_modes++) {
57 memcpy(iv_mode.iv, kAesModesIvCbc,
sizeof(kAesModesIvCbc));
62 memcpy(iv_mode.iv, kAesModesIvCfb,
sizeof(kAesModesIvCfb));
67 memcpy(iv_mode.iv, kAesModesIvOfb,
sizeof(kAesModesIvOfb));
72 memcpy(iv_mode.iv, kAesModesIvCtr,
sizeof(kAesModesIvCtr));
83 uint8_t key_share0[
sizeof(kAesModesKey128)];
84 for (
int i = 0; i <
sizeof(kAesModesKey128); ++i) {
85 key_share0[i] = kAesModesKey128[i] ^ kKeyShare1[i];
90 memcpy(key.share0, key_share0,
sizeof(key.share0));
91 memcpy(key.share1, kKeyShare1,
sizeof(key.share1));
102 .reseed_on_key_change =
false,
103 .ctrl_aux_lock =
false,
113 dif_aes_data_t plain_text[kAesNumBlocks], plain_text_block34[kAesNumBlocks];
117 memcpy(plain_text[0].data, kAesModesPlainTextBlock12,
118 sizeof(kAesModesPlainTextBlock12));
122 (
size_t)kAesNumBlocks));
123 LOG_INFO(
"AES Encrypt of first two blocks done");
138 LOG_INFO(
"De-initialized Automatic operation");
148 uint8_t key_share0_t[
sizeof(kAesModesKey256)];
149 for (
int i = 0; i <
sizeof(kAesModesKey256); ++i) {
150 key_share0_t[i] = kAesModesKey256[i] ^ kKeyShare1[i];
159 memcpy(iv2.iv, kAesModesIvCtr,
sizeof(iv2.iv));
168 .reseed_on_key_change =
false,
169 .ctrl_aux_lock =
false,
176 kAesNumBlocks_t2 = 4,
180 memcpy(plain_text2[0].data, kAesModesPlainText,
sizeof(kAesModesPlainText));
195 memcpy(iv.iv, &iv_encrypt1,
sizeof(iv.iv));
199 memcpy(key.share0, key_share0,
sizeof(key.share0));
200 memcpy(key.share1, kKeyShare1,
sizeof(key.share1));
204 memcpy(plain_text_block34[0].data, kAesModesPlainTextBlock34,
205 sizeof(kAesModesPlainTextBlock34));
208 LOG_INFO(
"Resuming Encrypt with the remaining 2 blocks of data");
210 (
size_t)kAesNumBlocks));
220 .reseed_on_key_change =
false,
221 .ctrl_aux_lock =
false,
231 for (
int i = 0; i < 2; ++i) {
240 for (
int i = 2; i < 4; ++i) {
251 CHECK_ARRAYS_EQ((uint8_t *)out_data2, kAesModesPlainText,
252 sizeof(kAesModesPlainText));
259 LOG_INFO(
"Entering AES Interrupt Encrypt Test");
260 return status_ok(execute_test());