[Cryptech-Commits] [sw/libhal] 01/01: Make hal_core_alloc2 a little smarter.

git at cryptech.is git at cryptech.is
Wed Sep 19 21:10:38 UTC 2018


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

paul at psgd.org pushed a commit to branch hal_core_alloc2-fix
in repository sw/libhal.

commit a4469079c753ff2c3146704f1e4eec3e3e1bb30b
Author: Paul Selkirk <paul at psgd.org>
AuthorDate: Wed Sep 19 17:09:56 2018 -0400

    Make hal_core_alloc2 a little smarter.
    
    Currently the only use of hal_core_alloc2 is to allocate two modexp cores.
    If the bitstream only has one, we'd allocate that one, then try to allocate
    it again, and spin forever.
    
    Added a check for that, and let rsa_crt fall back to trying with one modexp
    core if it can't find two.
---
 core.c |  7 +++++++
 rsa.c  | 10 +++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/core.c b/core.c
index e170210..0905541 100644
--- a/core.c
+++ b/core.c
@@ -254,6 +254,13 @@ hal_error_t hal_core_alloc2(const char *name1, hal_core_t **pcore1, hal_core_lru
 {
   const int clear = pcore1 != NULL && *pcore1 == NULL;
 
+  if (name1 == name2 || strcmp(name1, name2) == 0) {
+    hal_core_t *core1;
+    if (((core1 = hal_core_find(name1, NULL)) == NULL) ||
+        (hal_core_find(name1, core1) == NULL))
+      return HAL_ERROR_CORE_NOT_FOUND;
+  }
+
   for (;;) {
 
     hal_error_t err = hal_core_alloc_no_wait(name1, pcore1, pomace1);
diff --git a/rsa.c b/rsa.c
index 1b5de7d..9776b08 100644
--- a/rsa.c
+++ b/rsa.c
@@ -539,7 +539,15 @@ static hal_error_t rsa_crt(hal_core_t *core1, hal_core_t *core2, hal_rsa_key_t *
    */
   if ((err = modexp2(precalc, msg,
                      core1, key->dP, key->p, m1, key->pC, sizeof(key->pC), key->pF, sizeof(key->pF),
-                     core2, key->dQ, key->q, m2, key->qC, sizeof(key->qC), key->qF, sizeof(key->qF))) != HAL_OK)
+                     core2, key->dQ, key->q, m2, key->qC, sizeof(key->qC), key->qF, sizeof(key->qF))) == HAL_ERROR_CORE_NOT_FOUND) {
+      /* Couldn't get two modexp cores, fall back to trying with one. */
+    if ((err = modexp(core1, precalc, msg, key->dP, key->p, m1,
+                      key->pC, sizeof(key->pC), key->pF, sizeof(key->pF))) != HAL_OK ||
+        (err = modexp(core1, precalc, msg, key->dQ, key->q, m2,
+                        key->qC, sizeof(key->qC), key->qF, sizeof(key->qF))) != HAL_OK)
+      goto fail;
+  }
+  else if (err != HAL_OK)
     goto fail;
 
   if (precalc)



More information about the Commits mailing list