gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] 21/37: secmod CS sign implementation


From: gnunet
Subject: [taler-exchange] 21/37: secmod CS sign implementation
Date: Fri, 04 Feb 2022 16:53:51 +0100

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

gian-demarmels pushed a commit to branch master
in repository exchange.

commit 2d70c8c6d01c50ebee59907eeeeb3eed4b630767
Author: Gian Demarmels <gian@demarmels.org>
AuthorDate: Thu Jan 6 16:24:50 2022 +0100

    secmod CS sign implementation
---
 src/include/taler_crypto_lib.h      |   8 +-
 src/util/crypto_helper_cs.c         |  36 +-----
 src/util/taler-exchange-secmod-cs.c | 217 +++++++++++++++---------------------
 src/util/taler-exchange-secmod-cs.h |  12 +-
 src/util/test_helper_cs.c           | 111 +++++++++++-------
 5 files changed, 181 insertions(+), 203 deletions(-)

diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 295d0e7b..c0e96427 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -1784,9 +1784,8 @@ TALER_CRYPTO_helper_cs_poll (struct 
TALER_CRYPTO_CsDenominationHelper *dh);
  * differences in the signature counters.  Retrying in this case may work.
  *
  * @param dh helper process connection
- * @param h_rsa hash of the RSA public key to use to sign
- * @param msg message to sign
- * @param msg_size number of bytes in @a msg
+ * @param h_cs hash of the CS public key to use to sign
+ * @param blinded_planchet blinded planchet containing c and nonce
  * @param[out] ec set to the error code (or #TALER_EC_NONE on success)
  * @return signature, the value inside the structure will be NULL on failure,
  *         see @a ec for details about the failure
@@ -1795,8 +1794,7 @@ struct TALER_BlindedDenominationSignature
 TALER_CRYPTO_helper_cs_sign (
   struct TALER_CRYPTO_CsDenominationHelper *dh,
   const struct TALER_CsPubHashP *h_cs,
-  const void *msg,
-  size_t msg_size,
+  const struct TALER_BlindedCsPlanchet *blinded_planchet,
   enum TALER_ErrorCode *ec);
 
 
diff --git a/src/util/crypto_helper_cs.c b/src/util/crypto_helper_cs.c
index 5b299934..c24815a6 100644
--- a/src/util/crypto_helper_cs.c
+++ b/src/util/crypto_helper_cs.c
@@ -210,16 +210,6 @@ handle_mt_avail (struct TALER_CRYPTO_CsDenominationHelper 
*dh,
 
     memcpy (&denom_pub.details.cs_public_key, buf, ntohs (kan->pub_size));
     TALER_cs_pub_hash (&denom_pub.details.cs_public_key, &h_cs);
-    // enom_pub.details.rsa_public_key
-    //   = GNUNET_CRYPTO_rsa_public_key_decode (buf,
-    //                                          ntohs (kan->pub_size));
-    // if (NULL == denom_pub.details.rsa_public_key)
-    // {
-    //   GNUNET_break_op (0);
-    //   return GNUNET_SYSERR;
-    // }
-    // GNUNET_CRYPTO_rsa_public_key_hash (denom_pub.details.rsa_public_key,
-    //                                    &h_cs.hash);
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Received CS key %s (%s)\n",
                 GNUNET_h2s (&h_cs.hash),
@@ -394,8 +384,7 @@ struct TALER_BlindedDenominationSignature
 TALER_CRYPTO_helper_cs_sign (
   struct TALER_CRYPTO_CsDenominationHelper *dh,
   const struct TALER_CsPubHashP *h_cs,
-  const void *msg,
-  size_t msg_size,
+  const struct TALER_BlindedCsPlanchet *blinded_planchet,
   enum TALER_ErrorCode *ec)
 {
   struct TALER_BlindedDenominationSignature ds = {
@@ -416,7 +405,7 @@ TALER_CRYPTO_helper_cs_sign (
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Requesting signature\n");
   {
-    char buf[sizeof (struct TALER_CRYPTO_CsSignRequest) + msg_size];
+    char buf[sizeof (struct TALER_CRYPTO_CsSignRequest)];
     struct TALER_CRYPTO_CsSignRequest *sr
       = (struct TALER_CRYPTO_CsSignRequest *) buf;
 
@@ -424,9 +413,7 @@ TALER_CRYPTO_helper_cs_sign (
     sr->header.type = htons (TALER_HELPER_CS_MT_REQ_SIGN);
     sr->reserved = htonl (0);
     sr->h_cs = *h_cs;
-    memcpy (&sr[1],
-            msg,
-            msg_size);
+    sr->planchet = *blinded_planchet;
     if (GNUNET_OK !=
         TALER_crypto_helper_send_all (dh->sock,
                                       buf,
@@ -511,24 +498,13 @@ more:
         {
           const struct TALER_CRYPTO_SignResponse *sr =
             (const struct TALER_CRYPTO_SignResponse *) buf;
-          struct GNUNET_CRYPTO_RsaSignature *rsa_signature;
-
-          rsa_signature = GNUNET_CRYPTO_rsa_signature_decode (
-            &sr[1],
-            msize - sizeof (*sr));
-          if (NULL == rsa_signature)
-          {
-            GNUNET_break_op (0);
-            do_disconnect (dh);
-            *ec = TALER_EC_EXCHANGE_DENOMINATION_HELPER_BUG;
-            goto end;
-          }
+          // TODO: add nullcheck
           GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                       "Received signature\n");
           *ec = TALER_EC_NONE;
           finished = true;
-          ds.cipher = TALER_DENOMINATION_RSA;
-          ds.details.blinded_rsa_signature = rsa_signature;
+          ds.cipher = TALER_DENOMINATION_CS;
+          ds.details.blinded_cs_answer = sr->cs_answer;
           break;
         }
       case TALER_HELPER_CS_MT_RES_SIGN_FAILURE:
diff --git a/src/util/taler-exchange-secmod-cs.c 
b/src/util/taler-exchange-secmod-cs.c
index 0df7c3dd..5c567587 100644
--- a/src/util/taler-exchange-secmod-cs.c
+++ b/src/util/taler-exchange-secmod-cs.c
@@ -240,8 +240,6 @@ generate_response (struct DenominationKey *dk)
   void *p;
   size_t tlen;
 
-  // buf_len = GNUNET_CRYPTO_rsa_public_key_encode (dk->denom_pub,
-  //                                                &buf);
   GNUNET_assert (sizeof(dk->denom_pub) < UINT16_MAX);
   GNUNET_assert (nlen < UINT16_MAX);
   tlen = sizeof(dk->denom_pub) + nlen + sizeof (*an);
@@ -284,64 +282,66 @@ static enum GNUNET_GenericReturnValue
 handle_sign_request (struct TES_Client *client,
                      const struct TALER_CRYPTO_CsSignRequest *sr)
 {
-  return GNUNET_OK;
-  // struct DenominationKey *dk;
-  // const void *blinded_msg = &sr[1];
-  // size_t blinded_msg_size = ntohs (sr->header.size) - sizeof (*sr);
-  // struct GNUNET_CRYPTO_RsaSignature *rsa_signature;
-  // struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
-
-  // GNUNET_assert (0 == pthread_mutex_lock (&keys_lock));
-  // dk = GNUNET_CONTAINER_multihashmap_get (keys,
-  //                                         &sr->h_cs.hash);
-  // if (NULL == dk)
-  // {
-  //   struct TALER_CRYPTO_SignFailure sf = {
-  //     .header.size = htons (sizeof (sr)),
-  //     .header.type = htons (TALER_HELPER_CS_MT_RES_SIGN_FAILURE),
-  //     .ec = htonl (TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN)
-  //   };
+  struct DenominationKey *dk;
+  struct GNUNET_CRYPTO_CsRSecret r[2];
 
-  //   GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
-  //   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-  //               "Signing request failed, denomination key %s unknown\n",
-  //               GNUNET_h2s (&sr->h_cs.hash));
-  //   return TES_transmit (client->csock,
-  //                        &sf.header);
-  // }
-  // if (GNUNET_TIME_absolute_is_future (dk->anchor.abs_time))
-  // {
-  //   /* it is too early */
-  //   struct TALER_CRYPTO_SignFailure sf = {
-  //     .header.size = htons (sizeof (sr)),
-  //     .header.type = htons (TALER_HELPER_CS_MT_RES_SIGN_FAILURE),
-  //     .ec = htonl (TALER_EC_EXCHANGE_DENOMINATION_HELPER_TOO_EARLY)
-  //   };
+  struct TALER_BlindedDenominationCsSignAnswer cs_answer;
+  struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
 
-  //   GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
-  //   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-  //               "Signing request failed, denomination key %s is not yet 
valid\n",
-  //               GNUNET_h2s (&sr->h_cs.hash));
-  //   return TES_transmit (client->csock,
-  //                        &sf.header);
-  // }
+  GNUNET_assert (0 == pthread_mutex_lock (&keys_lock));
+  dk = GNUNET_CONTAINER_multihashmap_get (keys,
+                                          &sr->h_cs.hash);
+  if (NULL == dk)
+  {
+    struct TALER_CRYPTO_SignFailure sf = {
+      .header.size = htons (sizeof (sr)),
+      .header.type = htons (TALER_HELPER_CS_MT_RES_SIGN_FAILURE),
+      .ec = htonl (TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN)
+    };
+
+    GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Signing request failed, denomination key %s unknown\n",
+                GNUNET_h2s (&sr->h_cs.hash));
+    return TES_transmit (client->csock,
+                         &sf.header);
+  }
+  if (GNUNET_TIME_absolute_is_future (dk->anchor.abs_time))
+  {
+    /* it is too early */
+    struct TALER_CRYPTO_SignFailure sf = {
+      .header.size = htons (sizeof (sr)),
+      .header.type = htons (TALER_HELPER_CS_MT_RES_SIGN_FAILURE),
+      .ec = htonl (TALER_EC_EXCHANGE_DENOMINATION_HELPER_TOO_EARLY)
+    };
 
-  // GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-  //             "Received request to sign over %u bytes with key %s\n",
-  //             (unsigned int) blinded_msg_size,
-  //             GNUNET_h2s (&sr->h_cs.hash));
-  // GNUNET_assert (dk->rc < UINT_MAX);
-  // dk->rc++;
-  // GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
-  // rsa_signature
-  //   = GNUNET_CRYPTO_rsa_sign_blinded (dk->denom_priv,
-  //                                     blinded_msg,
-  //                                     blinded_msg_size);
-  // GNUNET_assert (0 == pthread_mutex_lock (&keys_lock));
-  // GNUNET_assert (dk->rc > 0);
-  // dk->rc--;
-  // GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
-  // if (NULL == rsa_signature)
+    GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Signing request failed, denomination key %s is not yet 
valid\n",
+                GNUNET_h2s (&sr->h_cs.hash));
+    return TES_transmit (client->csock,
+                         &sf.header);
+  }
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Received request to sign over bytes with key %s\n",
+              GNUNET_h2s (&sr->h_cs.hash));
+  GNUNET_assert (dk->rc < UINT_MAX);
+  dk->rc++;
+  GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
+
+  GNUNET_CRYPTO_cs_r_derive (&sr->planchet.nonce.nonce, &dk->denom_priv, r);
+  cs_answer.b = GNUNET_CRYPTO_cs_sign_derive (&dk->denom_priv,
+                                              r,
+                                              sr->planchet.c,
+                                              &sr->planchet.nonce.nonce,
+                                              &cs_answer.s_scalar);
+
+  GNUNET_assert (0 == pthread_mutex_lock (&keys_lock));
+  GNUNET_assert (dk->rc > 0);
+  dk->rc--;
+  GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock));
+  // if (NULL == cs_answer)
   // {
   //   struct TALER_CRYPTO_SignFailure sf = {
   //     .header.size = htons (sizeof (sf)),
@@ -355,40 +355,32 @@ handle_sign_request (struct TES_Client *client,
   //                        &sf.header);
   // }
 
-  // {
-  //   struct TALER_CRYPTO_SignResponse *sr;
-  //   void *buf;
-  //   size_t buf_size;
-  //   size_t tsize;
-  //   enum GNUNET_GenericReturnValue ret;
-
-  //   buf_size = GNUNET_CRYPTO_rsa_signature_encode (rsa_signature,
-  //                                                  &buf);
-  //   GNUNET_CRYPTO_rsa_signature_free (rsa_signature);
-  //   tsize = sizeof (*sr) + buf_size;
-  //   GNUNET_assert (tsize < UINT16_MAX);
-  //   sr = GNUNET_malloc (tsize);
-  //   sr->header.size = htons (tsize);
-  //   sr->header.type = htons (TALER_HELPER_CS_MT_RES_SIGNATURE);
-  //   memcpy (&sr[1],
-  //           buf,
-  //           buf_size);
-  //   GNUNET_free (buf);
-  //   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-  //               "Sending CS signature after %s\n",
-  //               GNUNET_TIME_relative2s (
-  //                 GNUNET_TIME_absolute_get_duration (now),
-  //                 GNUNET_YES));
-  //   ret = TES_transmit (client->csock,
-  //                       &sr->header);
-  //   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-  //               "Sent CS signature after %s\n",
-  //               GNUNET_TIME_relative2s (
-  //                 GNUNET_TIME_absolute_get_duration (now),
-  //                 GNUNET_YES));
-  //   GNUNET_free (sr);
-  //   return ret;
-  // }
+  {
+    struct TALER_CRYPTO_SignResponse *sr;
+    size_t tsize;
+    enum GNUNET_GenericReturnValue ret;
+
+    tsize = sizeof (*sr) + sizeof(cs_answer);
+    GNUNET_assert (tsize < UINT16_MAX);
+    sr = GNUNET_malloc (tsize);
+    sr->header.size = htons (tsize);
+    sr->header.type = htons (TALER_HELPER_CS_MT_RES_SIGNATURE);
+    sr->cs_answer = cs_answer;
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Sending CS signature after %s\n",
+                GNUNET_TIME_relative2s (
+                  GNUNET_TIME_absolute_get_duration (now),
+                  GNUNET_YES));
+    ret = TES_transmit (client->csock,
+                        &sr->header);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Sent CS signature after %s\n",
+                GNUNET_TIME_relative2s (
+                  GNUNET_TIME_absolute_get_duration (now),
+                  GNUNET_YES));
+    GNUNET_free (sr);
+    return ret;
+  }
 }
 
 
@@ -409,28 +401,11 @@ setup_key (struct DenominationKey *dk,
 
   GNUNET_CRYPTO_cs_private_key_generate (&priv);
   GNUNET_CRYPTO_cs_private_key_get_public (&priv, &pub);
+  // TODO: Add nullcheck?
 
   TALER_cs_pub_hash (&pub,
                      &dk->h_cs);
-  // priv = GNUNET_CRYPTO_rsa_private_key_create (denom->rsa_keysize);
-  // if (NULL == priv)
-  // {
-  //   GNUNET_break (0);
-  //   GNUNET_SCHEDULER_shutdown ();
-  //   global_ret = EXIT_FAILURE;
-  //   return GNUNET_SYSERR;
-  // }
-  // pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv);
-  // if (NULL == pub)
-  // {
-  //   GNUNET_break (0);
-  //   GNUNET_CRYPTO_rsa_private_key_free (priv);
-  //   return GNUNET_SYSERR;
-  // }
-  // buf_size = GNUNET_CRYPTO_rsa_private_key_encode (priv,
-  //                                                  &buf);
-  // TALER_rsa_pub_hash (pub,
-  //                     &dk->h_cs);
+
   GNUNET_asprintf (&dk->filename,
                    "%s/%s/%llu",
                    keydir,
@@ -674,7 +649,7 @@ cs_work_dispatch (struct TES_Client *client,
   switch (ntohs (hdr->type))
   {
   case TALER_HELPER_CS_MT_REQ_SIGN:
-    if (msize <= sizeof (struct TALER_CRYPTO_CsSignRequest))
+    if (msize < sizeof (struct TALER_CRYPTO_CsSignRequest))
     {
       GNUNET_break_op (0);
       return GNUNET_SYSERR;
@@ -1144,17 +1119,9 @@ parse_key (struct Denomination *denom,
     return;
   }
 
+  // TODO: memcpy or cast?
   memcpy (&priv, buf, sizeof(priv));
-  // priv = GNUNET_CRYPTO_rsa_private_key_decode (buf,
-  //                                              buf_size);
-  // if (NULL == priv)
-  // {
-  //   /* Parser failure. */
-  //   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-  //               "File `%s' is malformed, skipping\n",
-  //               filename);
-  //   return;
-  // }
+
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "privkey %zu\n",
               sizeof(priv));
@@ -1167,14 +1134,8 @@ parse_key (struct Denomination *denom,
     struct DenominationKey *dk;
     struct DenominationKey *before;
 
+    // TODO: Add check if pubkey is set?
     GNUNET_CRYPTO_cs_private_key_get_public (&priv, &pub);
-    // pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv);
-    // if (NULL == pub)
-    // {
-    //   GNUNET_break (0);
-    //   GNUNET_CRYPTO_rsa_private_key_free (priv);
-    //   return;
-    // }
     dk = GNUNET_new (struct DenominationKey);
     dk->denom_priv = priv;
     dk->denom = denom;
diff --git a/src/util/taler-exchange-secmod-cs.h 
b/src/util/taler-exchange-secmod-cs.h
index 04178232..121690e3 100644
--- a/src/util/taler-exchange-secmod-cs.h
+++ b/src/util/taler-exchange-secmod-cs.h
@@ -133,7 +133,12 @@ struct TALER_CRYPTO_CsSignRequest
    */
   struct TALER_CsPubHashP h_cs;
 
-  /* followed by message to sign */
+  /**
+   * Planchet containing message to sign
+   * and nonce to derive R from
+   */
+  struct TALER_BlindedCsPlanchet planchet;
+
 };
 
 /**
@@ -200,7 +205,10 @@ struct TALER_CRYPTO_SignResponse
    */
   uint32_t reserved;
 
-  /* followed by CS signature */
+  /**
+   * Contains the blindided s and the chosen b
+   */
+  struct TALER_BlindedDenominationCsSignAnswer cs_answer;
 };
 
 /**
diff --git a/src/util/test_helper_cs.c b/src/util/test_helper_cs.c
index d59c2163..b4a5f54c 100644
--- a/src/util/test_helper_cs.c
+++ b/src/util/test_helper_cs.c
@@ -270,15 +270,15 @@ test_r_derive (struct TALER_CRYPTO_CsDenominationHelper 
*dh)
   struct TALER_PlanchetSecretsP ps;
   struct TALER_CoinPubHash c_hash;
 
-  TALER_planchet_setup_random (&ps, TALER_DENOMINATION_RSA);
+  TALER_planchet_setup_random (&ps, TALER_DENOMINATION_CS);
   for (unsigned int i = 0; i<MAX_KEYS; i++)
   {
+    struct TALER_PlanchetDetail pd;
     if (! keys[i].valid)
       continue;
     // TODO: insert assertion into other checks
     GNUNET_assert (TALER_DENOMINATION_CS == keys[i].denom_pub.cipher);
     {
-      struct TALER_PlanchetDetail pd;
       pd.blinded_planchet.cipher = TALER_DENOMINATION_CS;
 
       TALER_cs_withdraw_nonce_derive (&ps.coin_priv,
@@ -315,11 +315,22 @@ test_r_derive (struct TALER_CRYPTO_CsDenominationHelper 
*dh)
         return 5;
       }
 
-      // since R is part of the signature creation process, it can't be tested 
fully here
-      // instead it will be further tested in the signature creation process
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                   "Received valid R for key %s\n",
                   GNUNET_h2s (&keys[i].h_cs.hash));
+      ps.cs_r_pub = r_pub;
+      TALER_blinding_secret_create (&ps.blinding_key,
+                                    TALER_DENOMINATION_CS,
+                                    &ps.coin_priv,
+                                    &ps.cs_r_pub);
+      // TODO: sometimes the tests fail here in a calculation in gnunet. needs 
to be further analysed.
+      GNUNET_assert (GNUNET_OK ==
+                     TALER_planchet_prepare (&keys[i].denom_pub,
+                                             &ps,
+                                             &c_hash,
+                                             &pd));
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                  "Successfully prepared planchet");
       success = true;
       break;
     case TALER_EC_EXCHANGE_DENOMINATION_HELPER_TOO_EARLY:
@@ -397,36 +408,43 @@ test_signing (struct TALER_CRYPTO_CsDenominationHelper 
*dh)
   struct TALER_PlanchetSecretsP ps;
   struct TALER_CoinPubHash c_hash;
 
-  TALER_planchet_setup_random (&ps, TALER_DENOMINATION_RSA);
+  TALER_planchet_setup_random (&ps, TALER_DENOMINATION_CS);
   for (unsigned int i = 0; i<MAX_KEYS; i++)
   {
     if (! keys[i].valid)
       continue;
     {
       struct TALER_PlanchetDetail pd;
-      pd.blinded_planchet.cipher = TALER_DENOMINATION_RSA;
+      pd.blinded_planchet.cipher = TALER_DENOMINATION_CS;
       // keys[i].denom_pub.cipher = TALER_DENOMINATION_CS;
 
+      TALER_cs_withdraw_nonce_derive (&ps.coin_priv,
+                                      &pd.blinded_planchet.details.
+                                      cs_blinded_planchet.nonce);
+      ps.cs_r_pub = TALER_CRYPTO_helper_cs_r_derive (dh,
+                                                     &keys[i].h_cs,
+                                                     &pd.blinded_planchet.
+                                                     details.
+                                                     cs_blinded_planchet.nonce,
+                                                     &ec);
+      TALER_blinding_secret_create (&ps.blinding_key,
+                                    TALER_DENOMINATION_CS,
+                                    &ps.coin_priv,
+                                    &ps.cs_r_pub);
+
       GNUNET_assert (GNUNET_YES ==
                      TALER_planchet_prepare (&keys[i].denom_pub,
                                              &ps,
                                              &c_hash,
                                              &pd));
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Requesting signature over %u bytes with key %s\n",
-                  (unsigned
-                   int) pd.blinded_planchet.details.rsa_blinded_planchet.
-                  blinded_msg_size,
+                  "Requesting signature with key %s\n",
                   GNUNET_h2s (&keys[i].h_cs.hash));
       ds = TALER_CRYPTO_helper_cs_sign (dh,
                                         &keys[i].h_cs,
-                                        pd.blinded_planchet.details.
-                                        rsa_blinded_planchet.blinded_msg,
-                                        pd.blinded_planchet.details.
-                                        rsa_blinded_planchet.blinded_msg_size,
+                                        &pd.blinded_planchet.details.
+                                        cs_blinded_planchet,
                                         &ec);
-      GNUNET_free (
-        pd.blinded_planchet.details.rsa_blinded_planchet.blinded_msg);
     }
     switch (ec)
     {
@@ -456,7 +474,8 @@ test_signing (struct TALER_CRYPTO_CsDenominationHelper *dh)
             TALER_denom_sig_unblind (&rs,
                                      &ds,
                                      &ps.blinding_key,
-                                     &keys[i].denom_pub))
+                                     &keys[i].denom_pub,
+                                     &ps.cs_r_pub_blinded))
         {
           GNUNET_break (0);
           return 6;
@@ -513,15 +532,23 @@ test_signing (struct TALER_CRYPTO_CsDenominationHelper 
*dh)
 
   /* check signing does not work if the key is unknown */
   {
+    struct TALER_PlanchetDetail pd;
     struct TALER_CsPubHashP rnd;
 
     GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
                                 &rnd,
                                 sizeof (rnd));
+    pd.blinded_planchet.cipher = TALER_DENOMINATION_CS;
+    GNUNET_assert (GNUNET_YES ==
+                   TALER_planchet_prepare (&keys[0].denom_pub,
+                                           &ps,
+                                           &c_hash,
+                                           &pd));
+
     ds = TALER_CRYPTO_helper_cs_sign (dh,
                                       &rnd,
-                                      "Hello",
-                                      strlen ("Hello"),
+                                      &pd.blinded_planchet.details.
+                                      cs_blinded_planchet,
                                       &ec);
     if (TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN != ec)
     {
@@ -553,7 +580,7 @@ perf_signing (struct TALER_CRYPTO_CsDenominationHelper *dh,
   struct GNUNET_TIME_Relative duration;
   struct TALER_PlanchetSecretsP ps;
 
-  TALER_planchet_setup_random (&ps, TALER_DENOMINATION_RSA);
+  TALER_planchet_setup_random (&ps, TALER_DENOMINATION_CS);
   duration = GNUNET_TIME_UNIT_ZERO;
   TALER_CRYPTO_helper_cs_poll (dh);
   for (unsigned int j = 0; j<NUM_SIGN_PERFS;)
@@ -575,6 +602,23 @@ perf_signing (struct TALER_CRYPTO_CsDenominationHelper *dh,
       {
         struct TALER_CoinPubHash c_hash;
         struct TALER_PlanchetDetail pd;
+        pd.blinded_planchet.cipher = TALER_DENOMINATION_CS;
+
+
+        TALER_cs_withdraw_nonce_derive (&ps.coin_priv,
+                                        &pd.blinded_planchet.details.
+                                        cs_blinded_planchet.nonce);
+
+        ps.cs_r_pub = TALER_CRYPTO_helper_cs_r_derive (dh,
+                                                       &keys[i].h_cs,
+                                                       &pd.blinded_planchet.
+                                                       details.
+                                                       
cs_blinded_planchet.nonce,
+                                                       &ec);
+        TALER_blinding_secret_create (&ps.blinding_key,
+                                      TALER_DENOMINATION_CS,
+                                      &ps.coin_priv,
+                                      &ps.cs_r_pub);
 
         GNUNET_assert (GNUNET_YES ==
                        TALER_planchet_prepare (&keys[i].denom_pub,
@@ -589,11 +633,8 @@ perf_signing (struct TALER_CRYPTO_CsDenominationHelper *dh,
 
           ds = TALER_CRYPTO_helper_cs_sign (dh,
                                             &keys[i].h_cs,
-                                            pd.blinded_planchet.details.
-                                            rsa_blinded_planchet.blinded_msg,
-                                            pd.blinded_planchet.details.
-                                            rsa_blinded_planchet.
-                                            blinded_msg_size,
+                                            &pd.blinded_planchet.details.
+                                            cs_blinded_planchet,
                                             &ec);
           if (TALER_EC_NONE != ec)
             break;
@@ -605,8 +646,6 @@ perf_signing (struct TALER_CRYPTO_CsDenominationHelper *dh,
           if (NUM_SIGN_PERFS <= j)
             break;
         }
-        GNUNET_free (
-          pd.blinded_planchet.details.rsa_blinded_planchet.blinded_msg);
       }
     } /* for i */
   } /* for j */
@@ -731,16 +770,15 @@ run_test (void)
     ret = test_revocation (dh);
   if (0 == ret)
     ret = test_r_derive (dh);
-  // TODO: implement other tests
-  // if (0 == ret)
-  //   ret = test_signing (dh);
-  // if (0 == ret)
-  //   ret = perf_signing (dh,
-  //                       "sequential");
+  if (0 == ret)
+    ret = test_signing (dh);
+  if (0 == ret)
+    ret = perf_signing (dh,
+                        "sequential");
   TALER_CRYPTO_helper_cs_disconnect (dh);
   free_keys ();
-  // if (0 == ret)
-  //   ret = par_signing (cfg);
+  if (0 == ret)
+    ret = par_signing (cfg);
   /* clean up our state */
   GNUNET_CONFIGURATION_destroy (cfg);
   return ret;
@@ -814,9 +852,6 @@ main (int argc,
                 (int) code);
     ret = 5;
   }
-  // TODO: remove
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-              "I am here");
   GNUNET_OS_process_destroy (helper);
   return ret;
 }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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