* cipher/pubkey-util.c (_gcry_pk_util_init_encoding_ctx): Initialize
RND and RNDLEN field.
(_gcry_pk_util_free_encoding_ctx): Release memory by RND field.
(_gcry_pk_util_data_to_mpi): Support optional "random-override".
* src/cipher.h (struct pk_encoding_ctx): Add RND and RNDLEN.

--

Signed-off-by: NIIBE Yutaka <gni...@fsij.org>
---
 cipher/pubkey-util.c | 13 +++++++++++++
 src/cipher.h         |  4 ++++
 2 files changed, 17 insertions(+)

diff --git a/cipher/pubkey-util.c b/cipher/pubkey-util.c
index e9d98c35..71f4c508 100644
--- a/cipher/pubkey-util.c
+++ b/cipher/pubkey-util.c
@@ -650,6 +650,8 @@ _gcry_pk_util_init_encoding_ctx (struct pk_encoding_ctx *ctx,
     }
   ctx->label = NULL;
   ctx->labellen = 0;
+  ctx->rnd = NULL;
+  ctx->rndlen = 0;
   ctx->saltlen = 20;
   ctx->verify_cmp = NULL;
   ctx->verify_arg = NULL;
@@ -660,6 +662,7 @@ void
 _gcry_pk_util_free_encoding_ctx (struct pk_encoding_ctx *ctx)
 {
   xfree (ctx->label);
+  xfree (ctx->rnd);
 }
 
 
@@ -759,6 +762,14 @@ _gcry_pk_util_data_to_mpi (gcry_sexp_t input, gcry_mpi_t *ret_mpi,
           sexp_release (list);
         }
 
+      /* Get optional RANDOM-OVERRIDE. */
+      list = sexp_find_token (ldata, "random-override", 0);
+      if (list)
+        {
+          ctx->rnd = sexp_nth_buffer (list, 1, &ctx->rndlen);
+          sexp_release (list);
+        }
+
       /* Get VALUE.  */
       value = sexp_nth_buffer (lvalue, 1, &valuelen);
       if (!value)
@@ -1409,6 +1420,8 @@ _gcry_pk_util_data_to_mpi (gcry_sexp_t input, gcry_mpi_t *ret_mpi,
     {
       xfree (ctx->label);
       ctx->label = NULL;
+      xfree (ctx->rnd);
+      ctx->rnd = NULL;
     }
 
   return rc;
diff --git a/src/cipher.h b/src/cipher.h
index dfcc9121..83c5c532 100644
--- a/src/cipher.h
+++ b/src/cipher.h
@@ -87,6 +87,10 @@ struct pk_encoding_ctx
   /* for PSS */
   size_t saltlen;
 
+  /* for deterministic signature */
+  unsigned char *rnd;
+  size_t rndlen;
+
   int (* verify_cmp) (void *opaque, gcry_mpi_t tmp);
   void *verify_arg;
 };
_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to