[Cryptech-Commits] [core/platform/novena] 01/01: Completed first, simple test of aes core. This test program runs all NIST single block tests with 128 and 256 bit keys in encipher and decipher modes.

git at cryptech.is git at cryptech.is
Sun May 17 09:40:45 UTC 2015


This is an automated email from the git hooks/post-receive script.

joachim at secworks.se pushed a commit to branch master
in repository core/platform/novena.

commit 267edcb85cda77840cc18fce7871f158454dde90
Author: Joachim Strömbergson <joachim at secworks.se>
Date:   Sun May 17 11:40:38 2015 +0200

    Completed first, simple test of aes core. This test program runs all NIST single block tests with 128 and 256 bit keys in encipher and decipher modes.
---
 sw/aes_tester.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file 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]);
+
 }
 
 



More information about the Commits mailing list