gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: add additinal signature


From: gnunet
Subject: [taler-exchange] branch master updated: add additinal signature
Date: Sat, 02 Apr 2022 17:25:24 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 6f027fc1 add additinal signature
6f027fc1 is described below

commit 6f027fc13099f870e359aaf295f5e4051801c321
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Sat Apr 2 17:25:04 2022 +0200

    add additinal signature
---
 src/include/taler_crypto_lib.h | 37 +++++++++++++++++++
 src/include/taler_signatures.h |  4 +++
 src/util/wallet_signatures.c   | 81 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 122 insertions(+)

diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 6b554dfb..5f425341 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -2726,6 +2726,43 @@ TALER_wallet_purse_create_verify (
   const struct TALER_PurseContractSignatureP *purse_sig);
 
 
+/**
+ * Sign a request to upload an encrypted contract.
+ *
+ * @param econtract encrypted contract
+ * @param econtract_size number of bytes in @a econtract
+ * @param contract_pub public key for the DH-encryption
+ * @param purse_priv key identifying the purse
+ * @param[out] purse_sig resulting signature
+ */
+void
+TALER_wallet_econtract_upload_sign (
+  const void *econtract,
+  size_t econtract_size,
+  const struct TALER_ContractDiffiePublicP *contract_pub,
+  const struct TALER_PurseContractPrivateKeyP *purse_priv,
+  struct TALER_PurseContractSignatureP *purse_sig);
+
+
+/**
+ * Verify a signature over encrypted contract.
+ *
+ * @param econtract encrypted contract
+ * @param econtract_size number of bytes in @a econtract
+ * @param contract_pub public key for the DH-encryption
+ * @param purse_pub purse’s public key
+ * @param purse_sig the signature made with purpose 
#TALER_SIGNATURE_WALLET_PURSE_CREATE
+ * @return #GNUNET_OK if the signature is valid
+ */
+enum GNUNET_GenericReturnValue
+TALER_wallet_econtract_upload_verify (
+  const void *econtract,
+  size_t econtract_size,
+  const struct TALER_ContractDiffiePublicP *contract_pub,
+  const struct TALER_PurseContractPublicKeyP *purse_pub,
+  const struct TALER_PurseContractSignatureP *purse_sig);
+
+
 /**
  * Sign a request to inquire about a purse's status.
  *
diff --git a/src/include/taler_signatures.h b/src/include/taler_signatures.h
index 70c917b6..d3e70a9e 100644
--- a/src/include/taler_signatures.h
+++ b/src/include/taler_signatures.h
@@ -316,6 +316,10 @@
  */
 #define TALER_SIGNATURE_WALLET_RESERVE_CLOSE 1215
 
+/**
+ * Associates encrypted contract with a purse.
+ */
+#define TALER_SIGNATURE_WALLET_PURSE_ECONTRACT 1216
 
 /******************************/
 /* Security module signatures */
diff --git a/src/util/wallet_signatures.c b/src/util/wallet_signatures.c
index 756856d2..4b2ddb6c 100644
--- a/src/util/wallet_signatures.c
+++ b/src/util/wallet_signatures.c
@@ -1177,4 +1177,85 @@ TALER_wallet_account_close_verify (
 }
 
 
+/**
+ * Message signed by purse to associate an encrypted contract.
+ */
+struct TALER_PurseContractPS
+{
+
+  /**
+   * Purpose is #TALER_SIGNATURE_WALLET_PURSE_ECONTRACT
+   */
+  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
+
+  /**
+   * Hash over the encrypted contract.
+   */
+  struct GNUNET_HashCode h_econtract;
+
+  /**
+   * Public key to decrypt the contract.
+   */
+  struct TALER_ContractDiffiePublicP contract_pub;
+};
+
+
+void
+TALER_wallet_econtract_upload_sign (
+  const void *econtract,
+  size_t econtract_size,
+  const struct TALER_ContractDiffiePublicP *contract_pub,
+  const struct TALER_PurseContractPrivateKeyP *purse_priv,
+  struct TALER_PurseContractSignatureP *purse_sig)
+{
+  struct TALER_PurseContractPS pc = {
+    .purpose.size = htonl (sizeof (pc)),
+    .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_PURSE_ECONTRACT),
+    .contract_pub = *contract_pub
+  };
+
+  GNUNET_CRYPTO_hash (econtract,
+                      econtract_size,
+                      &pc.h_econtract);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CRYPTO_eddsa_sign_ (&purse_priv->eddsa_priv,
+                                            &pc.purpose,
+                                            &purse_sig->eddsa_signature));
+}
+
+
+/**
+ * Verify a signature over encrypted contract.
+ *
+ * @param econtract encrypted contract
+ * @param econtract_size number of bytes in @a econtract
+ * @param contract_pub public key for the DH-encryption
+ * @param purse_pub purse’s public key
+ * @param purse_sig the signature made with purpose 
#TALER_SIGNATURE_WALLET_PURSE_CREATE
+ * @return #GNUNET_OK if the signature is valid
+ */
+enum GNUNET_GenericReturnValue
+TALER_wallet_econtract_upload_verify (
+  const void *econtract,
+  size_t econtract_size,
+  const struct TALER_ContractDiffiePublicP *contract_pub,
+  const struct TALER_PurseContractPublicKeyP *purse_pub,
+  const struct TALER_PurseContractSignatureP *purse_sig)
+{
+  struct TALER_PurseContractPS pc = {
+    .purpose.size = htonl (sizeof (pc)),
+    .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_PURSE_ECONTRACT),
+    .contract_pub = *contract_pub
+  };
+
+  GNUNET_CRYPTO_hash (econtract,
+                      econtract_size,
+                      &pc.h_econtract);
+  return GNUNET_CRYPTO_eddsa_verify_ (TALER_SIGNATURE_WALLET_RESERVE_CLOSE,
+                                      &pc.purpose,
+                                      &purse_sig->eddsa_signature,
+                                      &purse_pub->eddsa_pub);
+}
+
+
 /* end of wallet_signatures.c */

-- 
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]