[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