[Cryptech-Commits] [sw/libhal] branch systolic_crt updated: Far too much fun with modexpa7 operand lengths and locations.

git at cryptech.is git at cryptech.is
Sun Sep 10 03:46:07 UTC 2017


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

sra at hactrn.net pushed a commit to branch systolic_crt
in repository sw/libhal.

The following commit(s) were added to refs/heads/systolic_crt by this push:
     new e3895a7  Far too much fun with modexpa7 operand lengths and locations.
e3895a7 is described below

commit e3895a788129f57e27716d1ab00df002c96b81a3
Author: Rob Austein <sra at hactrn.net>
AuthorDate: Sat Sep 9 23:45:20 2017 -0400

    Far too much fun with modexpa7 operand lengths and locations.
---
 modexp.c            | 30 ++++++++++++++++--------------
 rsa.c               |  2 +-
 verilog_constants.h |  3 ++-
 3 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/modexp.c b/modexp.c
index 950455f..7ff7b21 100644
--- a/modexp.c
+++ b/modexp.c
@@ -195,13 +195,13 @@ hal_error_t hal_modexp(hal_core_t *core,
    * about 32-bit words).
    */
 
-  if (mod    == NULL ||
-      msg    == NULL || msg_len    >  mod_len * 2 ||
-      exp    == NULL || exp_len    >  mod_len     ||
-      result == NULL || result_len <  mod_len     ||
-      coeff  == NULL || coeff_len  != mod_len     ||
-      mont   == NULL || mont_len   != mod_len     ||
-      ((msg_len | exp_len | mod_len | coeff_len | mont_len) & 3) != 0)
+  if (msg    == NULL || msg_len    > MODEXPA7_OPERAND_BYTES || msg_len    >  mod_len * 2 ||
+      exp    == NULL || exp_len    > MODEXPA7_OPERAND_BYTES || exp_len    >  mod_len     ||
+      mod    == NULL || mod_len    > MODEXPA7_OPERAND_BYTES ||
+      result == NULL || result_len > MODEXPA7_OPERAND_BYTES || result_len <  mod_len     ||
+      coeff  == NULL || coeff_len  > MODEXPA7_OPERAND_BYTES ||
+      mont   == NULL || mont_len   > MODEXPA7_OPERAND_BYTES ||
+      ((msg_len | exp_len | mod_len) & 3) != 0)
     return HAL_ERROR_BAD_ARGUMENTS;
 
   /*
@@ -221,9 +221,11 @@ hal_error_t hal_modexp(hal_core_t *core,
   check(get_register(core, MODEXPA7_ADDR_BUFFER_BITS, &operand_max));
   operand_max /= 8;
 
-  if (msg_len > operand_max || exp_len > operand_max || mod_len > operand_max ||
-      (coeff != NULL && coeff_len > operand_max) ||
-      (mont  != NULL && mont_len  > operand_max)) {
+  if (msg_len   > operand_max ||
+      exp_len   > operand_max ||
+      mod_len   > operand_max ||
+      coeff_len > operand_max ||
+      mont_len  > operand_max) {
     hal_core_free(core);
     return HAL_ERROR_BAD_ARGUMENTS;
   }
@@ -244,13 +246,13 @@ hal_error_t hal_modexp(hal_core_t *core,
     check(hal_io_zero(core));
     check(hal_io_init(core));
     check(hal_io_wait_ready(core));
-    check(get_buffer(core, MODEXPA7_ADDR_MODULUS_COEFF_OUT, coeff, coeff_len));
-    check(get_buffer(core, MODEXPA7_ADDR_MONTGOMERY_FACTOR_OUT, mont, mont_len));
+    check(get_buffer(core, MODEXPA7_ADDR_MODULUS_COEFF_OUT,     coeff, coeff_len));
+    check(get_buffer(core, MODEXPA7_ADDR_MONTGOMERY_FACTOR_OUT, mont,  mont_len));
   }
 
   /* Load modulus-dependent speedup factors (even if we just calculated them) */
-  check(set_buffer(core, MODEXPA7_ADDR_MODULUS_COEFF_IN, coeff, coeff_len));
-  check(set_buffer(core, MODEXPA7_ADDR_MONTGOMERY_FACTOR_IN, mont, mont_len));
+  check(set_buffer(core, MODEXPA7_ADDR_MODULUS_COEFF_IN,     coeff, coeff_len));
+  check(set_buffer(core, MODEXPA7_ADDR_MONTGOMERY_FACTOR_IN, mont,  mont_len));
 
   /* Select CRT mode if and only if message is longer than exponent */
   check(set_register(core, MODEXPA7_ADDR_MODE,
diff --git a/rsa.c b/rsa.c
index d964210..9cc940c 100644
--- a/rsa.c
+++ b/rsa.c
@@ -98,7 +98,7 @@
  */
 
 #ifndef HAL_RSA_MAX_OPERAND_LENGTH
-#define HAL_RSA_MAX_OPERAND_LENGTH (4096 / 8)
+#define HAL_RSA_MAX_OPERAND_LENGTH MODEXPA7_OPERAND_BYTES
 #endif
 
 /*
diff --git a/verilog_constants.h b/verilog_constants.h
index 5307f68..7b64c46 100644
--- a/verilog_constants.h
+++ b/verilog_constants.h
@@ -231,9 +231,10 @@
  */
 
 #define MODEXPA7_OPERAND_BITS                   (4096)
+#define MODEXPA7_OPERAND_BYTES                  (MODEXPA7_OPERAND_BITS /  8)
 #define MODEXPA7_OPERAND_WORDS                  (MODEXPA7_OPERAND_BITS / 32)
 #define MODEXPA7_ADDR_REGISTERS                 (0 * MODEXPA7_OPERAND_WORDS)
-#define MODEXPA7_ADDR_OPERANDS                  (4 * MODEXPA7_OPERAND_WORDS)
+#define MODEXPA7_ADDR_OPERANDS                  (8 * MODEXPA7_OPERAND_WORDS)
 #define MODEXPA7_ADDR_MODE                      (MODEXPA7_ADDR_REGISTERS + 0x10)
 #define MODEXPA7_ADDR_MODULUS_BITS              (MODEXPA7_ADDR_REGISTERS + 0x11)
 #define MODEXPA7_ADDR_EXPONENT_BITS             (MODEXPA7_ADDR_REGISTERS + 0x12)

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Commits mailing list