[Cryptech-Commits] [user/sra/libhal] 02/02: More fun with RSA test cases, still not working.

git at cryptech.is git at cryptech.is
Thu May 28 07:46:42 UTC 2015


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

sra at hactrn.net pushed a commit to branch master
in repository user/sra/libhal.

commit f210238062d990ac2b3e21810686108ce89965ea
Author: Rob Austein <sra at hactrn.net>
Date:   Thu May 28 09:45:45 2015 +0200

    More fun with RSA test cases, still not working.
---
 .gitignore       |  1 +
 tests/test-rsa.c | 46 ++++++++++++++++++++++++++++------------------
 tests/test-rsa.h | 18 ++++++++++++++++++
 3 files changed, 47 insertions(+), 18 deletions(-)

diff --git a/.gitignore b/.gitignore
index 23e4de9..20d13e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ config.log
 config.status
 tests/test-aes-key-wrap
 tests/test-hash
+tests/test-rsa
diff --git a/tests/test-rsa.c b/tests/test-rsa.c
index 95b366a..23d1b8b 100644
--- a/tests/test-rsa.c
+++ b/tests/test-rsa.c
@@ -49,12 +49,11 @@ static int _set_register(const off_t addr,
     w1[i] = value & 0xFF;
     value >>= 8;
   }
-  printf("Setting register %#lx %s\n", (unsigned long) addr, name);
+  printf("Setting register %#lx %s...\n", (unsigned long) addr, name);
   check(hal_io_write(addr, w1, sizeof(w1)));
   check(hal_io_read(addr,  w2, sizeof(w2)));
   if (memcmp(w1, w2, sizeof(w1)) != 0)
     printf("MISMATCH\n");
-  printf("\n");
   return 0;
 }
 
@@ -70,11 +69,10 @@ static int _get_blockmem(const off_t reset_addr,
 			 const size_t length)
 {
   size_t i;
-  assert(reset_name != NULL && data_name != NULL && value != NULL && length % 4 == 0 && length <= sizeof(value));
-  printf("Setting register %#lx %s\n", (unsigned long) reset_addr, reset_name);
+  assert(reset_name != NULL && data_name != NULL && value != NULL && length % 4 == 0);
+  printf("Setting register %#lx %s...\n", (unsigned long) reset_addr, reset_name);
   check(hal_io_write(reset_addr, one, sizeof(one)));
-  printf("\n");
-  printf("Getting blockmem %#lx %s\n", (unsigned long) data_addr, data_name);
+  printf("Getting blockmem %#lx %s...\n", (unsigned long) data_addr, data_name);
   for (i = 0; i < length; i += 4)
     check(hal_io_read(data_addr, &value[i], 4));
   return 0;
@@ -95,13 +93,11 @@ static int _set_blockmem(const off_t reset_addr,
 {
   size_t i;
   assert(reset_name != NULL && data_name != NULL && value != NULL && buffer_length >= value_length && value_length % 4 == 0);
-  printf("Setting register %#lx %s\n", (unsigned long) reset_addr, reset_name);
+  printf("Setting register %#lx %s...\n", (unsigned long) reset_addr, reset_name);
   check(hal_io_write(reset_addr, one, sizeof(one)));
-  printf("\n");
-  printf("Setting blockmem %#lx %s\n", (unsigned long) data_addr, data_name);
+  printf("Setting blockmem %#lx %s...\n", (unsigned long) data_addr, data_name);
   for (i = 0; i < value_length; i += 4)
     check(hal_io_write(data_addr, &value[i], 4));
-  printf("\n");
   check(_get_blockmem(reset_addr, reset_name, data_addr, data_name, buffer, value_length));
   if (memcmp(value, buffer, value_length))
     printf("MISMATCH\n");
@@ -116,8 +112,8 @@ static int _set_blockmem(const off_t reset_addr,
 #define set_register(_field_, _value_) \
   _set_register(_field_, #_field_, _value_)
 
-#define get_blockmem(_field_, _value_) \
-  _get_blockmem(_field_##_PTR_RST, #_field_ "_PTR_RST", _field_##_DATA, #_field_ "_DATA", _value_, sizeof(_value_))
+#define get_blockmem(_field_, _value_, _length_) \
+  _get_blockmem(_field_##_PTR_RST, #_field_ "_PTR_RST", _field_##_DATA, #_field_ "_DATA", _value_, _length_)
 
 #define set_blockmem(_field_, _value_, _buffer_) \
   _set_blockmem(_field_##_PTR_RST, #_field_ "_PTR_RST", _field_##_DATA, #_field_ "_DATA", (_value_).val, (_value_).len, _buffer_, sizeof(_buffer_))
@@ -130,6 +126,8 @@ static int test(const rsa_tc_t * const tc)
 {
   uint8_t b[4096];
 
+  hal_io_set_debug(1);
+
   printf("Signature test for %lu-bit RSA key\n", (unsigned long) tc->size);
 
   check(set_blockmem(MODEXP_MODULUS, tc->n, b));
@@ -145,11 +143,15 @@ static int test(const rsa_tc_t * const tc)
 
   check(set_register(MODEXP_ADDR_CTRL, 1));
 
+  hal_io_set_debug(0);
+
   printf("Waiting for ready\n");
   check(hal_io_wait(MODEXP_ADDR_STATUS, STATUS_READY, NULL));
   printf("\n");
 
-  check(get_blockmem(MODEXP_RESULT, b));
+  hal_io_set_debug(1);
+
+  check(get_blockmem(MODEXP_RESULT, b, tc->n.len));
 
   printf("Comparing results with known value...");
   if (memcmp(b, tc->s.val, tc->s.len))
@@ -172,11 +174,15 @@ static int test(const rsa_tc_t * const tc)
 
   check(set_register(MODEXP_ADDR_CTRL, 1));
 
+  hal_io_set_debug(0);
+
   printf("Waiting for ready\n");
   check(hal_io_wait(MODEXP_ADDR_STATUS, STATUS_READY, NULL));
   printf("\n");
 
-  check(get_blockmem(MODEXP_RESULT, b));
+  hal_io_set_debug(1);
+
+  check(get_blockmem(MODEXP_RESULT, b, tc->n.len));
 
   printf("Comparing results with known value...");
   if (memcmp(b, tc->m.val, tc->m.len))
@@ -201,13 +207,17 @@ int main(int argc, char *argv[])
   check(hal_io_read(MODEXP_ADDR_VERSION, version, sizeof(version)));
   printf("\"%8.8s\"  \"%4.4s\"\n\n", name, version);
 
-  hal_io_set_debug(1);
-
   /*
-   * Run all the test cases.
+   * Run the test cases.
    */
 
-  for (i = 0; i < sizeof(rsa_tc)/sizeof(*rsa_tc); i++)
+#if 0
+#define N (sizeof(rsa_tc)/sizeof(*rsa_tc))
+#else
+#define N (1)
+#endif
+
+  for (i = 0; i < N; i++)
     if (test(&rsa_tc[i]))
       return 1;
 
diff --git a/tests/test-rsa.h b/tests/test-rsa.h
index b6e6ba6..5ae3ada 100644
--- a/tests/test-rsa.h
+++ b/tests/test-rsa.h
@@ -40,6 +40,24 @@ static const uint8_t n_1024[] = { /* key component n, 128 bytes */
 };
 
 static const uint8_t e_1024[] = { /* key component e, 4 bytes */
+#if 1
+  /*
+   * Test Joachim's theory that it's just a known bug with short
+   * numbers: pad e out to same size as modulus, so an extra 124
+   * leading zeros.
+   */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,
+#endif
   0x00, 0x01, 0x00, 0x01
 };
 



More information about the Commits mailing list