aboutsummaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
Diffstat (limited to 'sw')
-rw-r--r--sw/aes_tester.c68
1 files changed, 64 insertions, 4 deletions
diff --git a/sw/aes_tester.c b/sw/aes_tester.c
index d2f0656..80acc80 100644
--- a/sw/aes_tester.c
+++ b/sw/aes_tester.c
@@ -47,6 +47,14 @@
#include "cryptech.h"
+
+//------------------------------------------------------------------
+// Global defines.
+//------------------------------------------------------------------
+#define VERBOSE 0
+#define CHECK_WRITE 0
+
+
//------------------------------------------------------------------
// Robs macros. Scary scary.
//------------------------------------------------------------------
@@ -112,7 +120,6 @@ void dual_block_test(uint8_t keylength, uint32_t *key, uint32_t *block0,
uint32_t *block1, uint32_t *expected)
{
-
}
@@ -127,6 +134,18 @@ void single_block_test(uint32_t keylength, uint32_t *key, uint32_t *block,
uint32_t enc_result[4];
uint32_t dec_result[4];
+ if (VERBOSE) {
+ if (keylength == 256) {
+ printf("Writing key 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ key[0], key[1], key[2], key[3],
+ key[4], key[5], key[6], key[7]);
+ }
+ else {
+ printf("Writing key 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ key[0], key[1], key[2], key[3]);
+ }
+ }
+
tc_w32(AES_ADDR_KEY0, key[0]);
tc_w32(AES_ADDR_KEY1, key[1]);
tc_w32(AES_ADDR_KEY2, key[2]);
@@ -139,21 +158,60 @@ void single_block_test(uint32_t keylength, uint32_t *key, uint32_t *block,
tc_w32(AES_ADDR_KEY3, key[7]);
}
+ if (CHECK_WRITE)
+ {
+ printf("Reading back key: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ tc_r32(AES_ADDR_KEY0), tc_r32(AES_ADDR_KEY1),
+ tc_r32(AES_ADDR_KEY2), tc_r32(AES_ADDR_KEY3),
+ tc_r32(AES_ADDR_KEY4), tc_r32(AES_ADDR_KEY5),
+ tc_r32(AES_ADDR_KEY6), tc_r32(AES_ADDR_KEY7));
+ }
+
+ // Performing init i.e. key expansion,
+ printf("Doing key init\n");
+ if (keylength == 256)
+ tc_w32(AES_ADDR_CONFIG, 0x00000002);
+ else
+ tc_w32(AES_ADDR_CONFIG, 0x00000000);
+
+ tc_w32(AES_ADDR_CTRL, 0x00000001);
+
+
+ if (VERBOSE)
+ printf("Writing block 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ block[0], block[1], block[2], block[3]);
+
tc_w32(AES_ADDR_BLOCK0, block[0]);
tc_w32(AES_ADDR_BLOCK1, block[1]);
tc_w32(AES_ADDR_BLOCK2, block[2]);
tc_w32(AES_ADDR_BLOCK3, block[3]);
- // Single block encipher operation.
+ if (CHECK_WRITE)
+ {
+ printf("Reading back block: 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ tc_r32(AES_ADDR_BLOCK0), tc_r32(AES_ADDR_BLOCK1),
+ tc_r32(AES_ADDR_BLOCK2), tc_r32(AES_ADDR_BLOCK3));
+ }
+
+ if (VERBOSE)
+ printf("Starting single block encipher operation\n");
if (keylength == 256)
tc_w32(AES_ADDR_CONFIG, 0x00000003);
else
tc_w32(AES_ADDR_CONFIG, 0x00000001);
- tc_w32(AES_ADDR_CTRL, 0x00000001);
+ tc_w32(AES_ADDR_CTRL, 0x00000002);
+ if (VERBOSE)
+ printf("Checking ready: 0x%08x\n",
+ tc_r32(AES_ADDR_STATUS));
tc_wait_ready(AES_ADDR_STATUS);
+ if (VERBOSE)
+ printf("Ready seen. Result: 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ tc_r32(AES_ADDR_RESULT0), tc_r32(AES_ADDR_RESULT1),
+ tc_r32(AES_ADDR_RESULT2), tc_r32(AES_ADDR_RESULT3));
+
enc_result[0] = tc_r32(AES_ADDR_RESULT0);
enc_result[1] = tc_r32(AES_ADDR_RESULT1);
enc_result[2] = tc_r32(AES_ADDR_RESULT2);
@@ -169,7 +227,7 @@ void single_block_test(uint32_t keylength, uint32_t *key, uint32_t *block,
tc_w32(AES_ADDR_CONFIG, 0x00000002);
else
tc_w32(AES_ADDR_CONFIG, 0x00000000);
- tc_w32(AES_ADDR_CTRL, 0x00000001);
+ tc_w32(AES_ADDR_CTRL, 0x00000002);
tc_wait_ready(AES_ADDR_STATUS);
@@ -226,6 +284,7 @@ void run_nist_tests()
single_block_test(128, &nist_aes128_key[0], &nist_plaintext0[0], &nist_ecb_128_enc_expected0[0]);
single_block_test(128, &nist_aes128_key[0], &nist_plaintext1[0], &nist_ecb_128_enc_expected1[0]);
+
single_block_test(128, &nist_aes128_key[0], &nist_plaintext2[0], &nist_ecb_128_enc_expected2[0]);
single_block_test(128, &nist_aes128_key[0], &nist_plaintext3[0], &nist_ecb_128_enc_expected3[0]);
@@ -233,6 +292,7 @@ void run_nist_tests()
single_block_test(256, &nist_aes256_key[0], &nist_plaintext1[0], &nist_ecb_256_enc_expected1[0]);
single_block_test(256, &nist_aes256_key[0], &nist_plaintext2[0], &nist_ecb_256_enc_expected2[0]);
single_block_test(256, &nist_aes256_key[0], &nist_plaintext3[0], &nist_ecb_256_enc_expected3[0]);
+
}