[Cryptech-Commits] [sw/libhal] 03/05: Add protection against trying to use hashsig while the restart mechanism is rebuilding the tree.

git at cryptech.is git at cryptech.is
Wed Jul 25 02:36:19 UTC 2018


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

paul at psgd.org pushed a commit to branch hashsig
in repository sw/libhal.

commit e1a2a7ff2e240c118b62fd372254e8f8097bd416
Author: Paul Selkirk <paul at psgd.org>
AuthorDate: Tue Jul 24 16:57:07 2018 -0400

    Add protection against trying to use hashsig while the restart mechanism is rebuilding the tree.
---
 hal.h     |  1 +
 hashsig.c | 14 ++++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/hal.h b/hal.h
index 8797a4f..a01b9bd 100644
--- a/hal.h
+++ b/hal.h
@@ -162,6 +162,7 @@
   DEFINE_HAL_ERROR(HAL_ERROR_RPC_PROTOCOL_ERROR,        "RPC protocol error")                           \
   DEFINE_HAL_ERROR(HAL_ERROR_NOT_IMPLEMENTED,           "Not implemented")                              \
   DEFINE_HAL_ERROR(HAL_ERROR_HASHSIG_KEY_EXHAUSTED,     "Key exhausted")                                \
+  DEFINE_HAL_ERROR(HAL_ERROR_NOT_READY,                 "Not ready for this operation")                 \
   END_OF_HAL_ERROR_LIST
 
 /* Marker to forestall silly line continuation errors */
diff --git a/hashsig.c b/hashsig.c
index 2ffe995..f463b3c 100644
--- a/hashsig.c
+++ b/hashsig.c
@@ -1182,6 +1182,8 @@ size_t hal_hashsig_lmots_private_key_len(const lmots_algorithm_t lmots_type)
 }
 
 #if RPC_CLIENT == RPC_CLIENT_LOCAL
+static int restart_in_progress = 0;
+
 static inline void *gnaw(uint8_t **mem, size_t *len, const size_t size)
 {
     if (mem == NULL || *mem == NULL || len == NULL || size > *len)
@@ -1285,6 +1287,9 @@ hal_error_t hal_hashsig_key_gen(hal_core_t *core,
 {
     /* hss_alloc does most of the checks */
 
+    if (restart_in_progress)
+        return HAL_ERROR_NOT_READY;
+
     /* check flash keystore for space to store the root tree */
     lms_parameter_t *lms = lms_select_parameter_set(lms_type);
     if (lms == NULL)
@@ -1335,6 +1340,9 @@ hal_error_t hal_hashsig_key_gen(hal_core_t *core,
 /* caller will delete the hss key from the keystore */
 hal_error_t hal_hashsig_key_delete(const hal_hashsig_key_t * const key)
 {
+    if (restart_in_progress)
+        return HAL_ERROR_NOT_READY;
+
     if (key == NULL || key->type != HAL_KEY_TYPE_HASHSIG_PRIVATE)
         return HAL_ERROR_BAD_ARGUMENTS;
 
@@ -1367,6 +1375,9 @@ hal_error_t hal_hashsig_sign(hal_core_t *core,
                              const uint8_t * const msg, const size_t msg_len,
                              uint8_t *sig, size_t *sig_len, const size_t sig_max)
 {
+    if (restart_in_progress)
+        return HAL_ERROR_NOT_READY;
+
     if (key == NULL || key->type != HAL_KEY_TYPE_HASHSIG_PRIVATE || msg == NULL || sig == NULL || sig_len == NULL)
         return HAL_ERROR_BAD_ARGUMENTS;
 
@@ -1873,6 +1884,8 @@ hal_error_t hal_hashsig_ks_init(void)
     uint8_t der[HAL_KS_WRAPPED_KEYSIZE];
     size_t der_len;
 
+    restart_in_progress = 1;
+
     /* Find all hss private keys */
     while ((hal_ks_match(hal_ks_token, client, session,
                          HAL_KEY_TYPE_HASHSIG_PRIVATE, HAL_CURVE_NONE, 0, 0, NULL, 0,
@@ -2056,6 +2069,7 @@ hal_error_t hal_hashsig_ks_init(void)
         }
     }
 
+    restart_in_progress = 0;
     return HAL_OK;
 }
 #endif



More information about the Commits mailing list