aboutsummaryrefslogtreecommitdiff
path: root/sw/aes_tester.c
diff options
context:
space:
mode:
Diffstat (limited to 'sw/aes_tester.c')
-rw-r--r--sw/aes_tester.c102
1 files changed, 49 insertions, 53 deletions
diff --git a/sw/aes_tester.c b/sw/aes_tester.c
index 36a3e0d..497f334 100644
--- a/sw/aes_tester.c
+++ b/sw/aes_tester.c
@@ -69,16 +69,12 @@
//------------------------------------------------------------------
//------------------------------------------------------------------
+static off_t aes_addr_base;
+
static void check_aes_access(void)
{
- uint8_t name0[4], name1[4], version[4];
-
- printf("Trying to read the aes core name\n");
-
- check(tc_read(AES_ADDR_NAME0, name0, sizeof(name0)));
- check(tc_read(AES_ADDR_NAME1, name1, sizeof(name1)));
- check(tc_read(AES_ADDR_VERSION, version, sizeof(version)));
- printf("%4.4s%4.4s %4.4s\n\n", name0, name1, version);
+ aes_addr_base = tc_core_base("aes");
+ assert(aes_addr_base != 0);
}
@@ -126,24 +122,24 @@ static void single_block_test(const uint32_t keylength, const uint32_t *key,
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]);
- tc_w32(AES_ADDR_KEY3, key[3]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY0, key[0]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY1, key[1]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY2, key[2]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY3, key[3]);
if (keylength == 256) {
- tc_w32(AES_ADDR_KEY4, key[4]);
- tc_w32(AES_ADDR_KEY5, key[5]);
- tc_w32(AES_ADDR_KEY6, key[6]);
- tc_w32(AES_ADDR_KEY7, key[7]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY4, key[4]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY5, key[5]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY6, key[6]);
+ tc_w32(aes_addr_base + AES_ADDR_KEY7, key[7]);
}
if (CHECK_WRITE) {
const uint32_t
- k0 = tc_r32(AES_ADDR_KEY0), k1 = tc_r32(AES_ADDR_KEY1),
- k2 = tc_r32(AES_ADDR_KEY2), k3 = tc_r32(AES_ADDR_KEY3),
- k4 = tc_r32(AES_ADDR_KEY4), k5 = tc_r32(AES_ADDR_KEY5),
- k6 = tc_r32(AES_ADDR_KEY6), k7 = tc_r32(AES_ADDR_KEY7);
+ k0 = tc_r32(aes_addr_base + AES_ADDR_KEY0), k1 = tc_r32(aes_addr_base + AES_ADDR_KEY1),
+ k2 = tc_r32(aes_addr_base + AES_ADDR_KEY2), k3 = tc_r32(aes_addr_base + AES_ADDR_KEY3),
+ k4 = tc_r32(aes_addr_base + AES_ADDR_KEY4), k5 = tc_r32(aes_addr_base + AES_ADDR_KEY5),
+ k6 = tc_r32(aes_addr_base + AES_ADDR_KEY6), k7 = tc_r32(aes_addr_base + AES_ADDR_KEY7);
const int
ok1 = k0 == key[0] && k1 == key[1] && k2 == key[2] && k3 == key[3],
ok2 = k4 == key[4] && k5 == key[5] && k6 == key[6] && k7 == key[7];
@@ -158,26 +154,26 @@ static void single_block_test(const uint32_t keylength, const uint32_t *key,
// Performing init i.e. key expansion,
printf("Doing key init\n");
if (keylength == 256)
- tc_w32(AES_ADDR_CONFIG, 0x00000002);
+ tc_w32(aes_addr_base + AES_ADDR_CONFIG, 0x00000002);
else
- tc_w32(AES_ADDR_CONFIG, 0x00000000);
+ tc_w32(aes_addr_base + AES_ADDR_CONFIG, 0x00000000);
- tc_w32(AES_ADDR_CTRL, 0x00000001);
+ tc_w32(aes_addr_base + 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]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK0, block[0]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK1, block[1]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK2, block[2]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK3, block[3]);
if (CHECK_WRITE) {
const uint32_t
- b0 = tc_r32(AES_ADDR_BLOCK0), b1 = tc_r32(AES_ADDR_BLOCK1),
- b2 = tc_r32(AES_ADDR_BLOCK2), b3 = tc_r32(AES_ADDR_BLOCK3);
+ b0 = tc_r32(aes_addr_base + AES_ADDR_BLOCK0), b1 = tc_r32(aes_addr_base + AES_ADDR_BLOCK1),
+ b2 = tc_r32(aes_addr_base + AES_ADDR_BLOCK2), b3 = tc_r32(aes_addr_base + AES_ADDR_BLOCK3);
const int
ok = b0 == block[0] && b1 == block[1] && b2 == block[2] && b3 == block[3];
printf("Reading back block: 0x%08x 0x%08x 0x%08x 0x%08x %s\n",
@@ -188,46 +184,46 @@ static void single_block_test(const uint32_t keylength, const uint32_t *key,
printf("Starting single block encipher operation\n");
if (keylength == 256)
- tc_w32(AES_ADDR_CONFIG, 0x00000003);
+ tc_w32(aes_addr_base + AES_ADDR_CONFIG, 0x00000003);
else
- tc_w32(AES_ADDR_CONFIG, 0x00000001);
+ tc_w32(aes_addr_base + AES_ADDR_CONFIG, 0x00000001);
- tc_w32(AES_ADDR_CTRL, 0x00000002);
+ tc_w32(aes_addr_base + AES_ADDR_CTRL, 0x00000002);
if (VERBOSE)
printf("Checking ready: 0x%08x\n",
- tc_r32(AES_ADDR_STATUS));
+ tc_r32(aes_addr_base + AES_ADDR_STATUS));
- check(tc_wait_ready(AES_ADDR_STATUS));
+ check(tc_wait_ready(aes_addr_base + 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));
+ tc_r32(aes_addr_base + AES_ADDR_RESULT0), tc_r32(aes_addr_base + AES_ADDR_RESULT1),
+ tc_r32(aes_addr_base + AES_ADDR_RESULT2), tc_r32(aes_addr_base + 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);
- enc_result[3] = tc_r32(AES_ADDR_RESULT3);
+ enc_result[0] = tc_r32(aes_addr_base + AES_ADDR_RESULT0);
+ enc_result[1] = tc_r32(aes_addr_base + AES_ADDR_RESULT1);
+ enc_result[2] = tc_r32(aes_addr_base + AES_ADDR_RESULT2);
+ enc_result[3] = tc_r32(aes_addr_base + AES_ADDR_RESULT3);
- tc_w32(AES_ADDR_BLOCK0, enc_result[0]);
- tc_w32(AES_ADDR_BLOCK1, enc_result[1]);
- tc_w32(AES_ADDR_BLOCK2, enc_result[2]);
- tc_w32(AES_ADDR_BLOCK3, enc_result[3]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK0, enc_result[0]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK1, enc_result[1]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK2, enc_result[2]);
+ tc_w32(aes_addr_base + AES_ADDR_BLOCK3, enc_result[3]);
// Single block decipher operation.
if (keylength == 256)
- tc_w32(AES_ADDR_CONFIG, 0x00000002);
+ tc_w32(aes_addr_base + AES_ADDR_CONFIG, 0x00000002);
else
- tc_w32(AES_ADDR_CONFIG, 0x00000000);
- tc_w32(AES_ADDR_CTRL, 0x00000002);
+ tc_w32(aes_addr_base + AES_ADDR_CONFIG, 0x00000000);
+ tc_w32(aes_addr_base + AES_ADDR_CTRL, 0x00000002);
- check(tc_wait_ready(AES_ADDR_STATUS));
+ check(tc_wait_ready(aes_addr_base + AES_ADDR_STATUS));
- dec_result[0] = tc_r32(AES_ADDR_RESULT0);
- dec_result[1] = tc_r32(AES_ADDR_RESULT1);
- dec_result[2] = tc_r32(AES_ADDR_RESULT2);
- dec_result[3] = tc_r32(AES_ADDR_RESULT3);
+ dec_result[0] = tc_r32(aes_addr_base + AES_ADDR_RESULT0);
+ dec_result[1] = tc_r32(aes_addr_base + AES_ADDR_RESULT1);
+ dec_result[2] = tc_r32(aes_addr_base + AES_ADDR_RESULT2);
+ dec_result[3] = tc_r32(aes_addr_base + AES_ADDR_RESULT3);
printf("Generated cipher block: 0x%08x 0x%08x 0x%08x 0x%08x\n",
enc_result[0], enc_result[1], enc_result[2], enc_result[3]);
@@ -298,7 +294,7 @@ static void run_nist_tests()
int main(int argc, char *argv[])
{
check_aes_access();
- tc_set_debug(1);
+// tc_set_debug(1);
run_nist_tests();
return 0;