diff options
-rw-r--r-- | sw/aes_tester.c | 68 |
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]); + } |