gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: patch up RSA signature format for #5698


From: gnunet
Subject: [gnunet] branch master updated: patch up RSA signature format for #5698
Date: Sat, 16 Nov 2019 18:27:41 +0100

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

grothoff pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new be6c14f2b patch up RSA signature format for #5698
be6c14f2b is described below

commit be6c14f2b2b880d72cd77538e98a067241d90f55
Author: Christian Grothoff <address@hidden>
AuthorDate: Sat Nov 16 18:24:47 2019 +0100

    patch up RSA signature format for #5698
---
 src/util/crypto_rsa.c      | 70 ++++++++++++++++++++++++++++++++++++++++++++--
 src/util/test_crypto_rsa.c |  9 +++++-
 2 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/src/util/crypto_rsa.c b/src/util/crypto_rsa.c
index b34f919ec..08bdeb2ca 100644
--- a/src/util/crypto_rsa.c
+++ b/src/util/crypto_rsa.c
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet
-   Copyright (C) 2014,2016 GNUnet e.V.
+   Copyright (C) 2014,2016,2019 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -32,6 +32,8 @@
 
 #define LOG(kind, ...) GNUNET_log_from (kind, "util-crypto-rsa", __VA_ARGS__)
 
+/* Flip for #5968 */
+#define NEW_CRYPTO 0
 
 /**
  * The private information of an RSA key pair.
@@ -333,7 +335,6 @@ struct GNUNET_CRYPTO_RsaPublicKeyHeaderP
 
 GNUNET_NETWORK_STRUCT_END
 
-#define NEW_CRYPTO 0
 
 /**
  * Encode the public key in a format suitable for
@@ -1127,6 +1128,39 @@ GNUNET_CRYPTO_rsa_signature_encode (const struct
                                     GNUNET_CRYPTO_RsaSignature *sig,
                                     char **buffer)
 {
+#if NEW_CRYPTO
+  gcry_mpi_t s;
+  size_t buf_size;
+  size_t rsize;
+  unsigned char *buf;
+  int ret;
+
+  ret = key_from_sexp (&s,
+                       sig->sexp,
+                       "sig-val",
+                       "s");
+  if (0 != ret)
+    ret = key_from_sexp (&s,
+                         sig->sexp,
+                         "rsa",
+                         "s");
+  GNUNET_assert (0 == ret);
+  gcry_mpi_print (GCRYMPI_FMT_USG,
+                  NULL,
+                  0,
+                  &buf_size,
+                  s);
+  buf = GNUNET_malloc (buf_size);
+  GNUNET_assert (0 ==
+                 gcry_mpi_print (GCRYMPI_FMT_USG,
+                                 buf,
+                                 buf_size,
+                                 &rsize,
+                                 s));
+  GNUNET_assert (rsize == buf_size);
+  *buffer = (char *) buf;
+  return buf_size;
+#else
   size_t n;
   char *b;
 
@@ -1142,6 +1176,7 @@ GNUNET_CRYPTO_rsa_signature_encode (const struct
                                    n));
   *buffer = b;
   return n;
+#endif
 }
 
 
@@ -1158,6 +1193,36 @@ GNUNET_CRYPTO_rsa_signature_decode (const char *buf,
                                     size_t len)
 {
   struct GNUNET_CRYPTO_RsaSignature *sig;
+#if NEW_CRYPTO
+  gcry_mpi_t s;
+  gcry_sexp_t data;
+
+  if (0 !=
+      gcry_mpi_scan (&s,
+                     GCRYMPI_FMT_USG,
+                     buf,
+                     len,
+                     NULL))
+  {
+    GNUNET_break_op (0);
+    return NULL;
+  }
+
+  if (0 !=
+      gcry_sexp_build (&data,
+                       NULL,
+                       "(sig-val(rsa(s %M)))",
+                       s))
+  {
+    GNUNET_break (0);
+    gcry_mpi_release (s);
+    return NULL;
+  }
+  gcry_mpi_release (s);
+  sig = GNUNET_new (struct GNUNET_CRYPTO_RsaSignature);
+  sig->sexp = data;
+  return sig;
+#else
   int ret;
   gcry_mpi_t s;
 
@@ -1185,6 +1250,7 @@ GNUNET_CRYPTO_rsa_signature_decode (const char *buf,
     return NULL;
   }
   gcry_mpi_release (s);
+#endif
   return sig;
 }
 
diff --git a/src/util/test_crypto_rsa.c b/src/util/test_crypto_rsa.c
index 5b546f243..277f58ba0 100644
--- a/src/util/test_crypto_rsa.c
+++ b/src/util/test_crypto_rsa.c
@@ -93,15 +93,22 @@ main (int argc,
     char *buf;
     size_t buf_size;
     struct GNUNET_CRYPTO_RsaPublicKey *pub2;
+    struct GNUNET_CRYPTO_RsaSignature *sig2;
 
     buf_size = GNUNET_CRYPTO_rsa_public_key_encode (pub,
                                                     &buf);
     pub2 = GNUNET_CRYPTO_rsa_public_key_decode (buf,
                                                 buf_size);
     GNUNET_free (buf);
+    buf_size = GNUNET_CRYPTO_rsa_signature_encode (sig,
+                                                   &buf);
+    sig2 = GNUNET_CRYPTO_rsa_signature_decode (buf,
+                                               buf_size);
+    GNUNET_free (buf);
     GNUNET_assert (GNUNET_OK ==
-                   GNUNET_CRYPTO_rsa_verify (&hash, sig, pub2));
+                   GNUNET_CRYPTO_rsa_verify (&hash, sig2, pub2));
     GNUNET_CRYPTO_rsa_public_key_free (pub2);
+    GNUNET_CRYPTO_rsa_signature_free (sig2);
   }
   /* corrupt our hash and see if the signature is still valid */
   GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, &hash,

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]