[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-exchange] 09/37: utility functions
From: |
gnunet |
Subject: |
[taler-exchange] 09/37: utility functions |
Date: |
Fri, 04 Feb 2022 16:53:39 +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 4bcbd704df54515789239962ffe6d09864c285b0
Author: Gian Demarmels <gian@demarmels.org>
AuthorDate: Mon Dec 27 20:02:54 2021 +0100
utility functions
---
src/include/taler_crypto_lib.h | 15 ++++++-----
src/util/denom.c | 58 ++++++++++++++++++++++++++++++------------
2 files changed, 51 insertions(+), 22 deletions(-)
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 3de843a2..850d259a 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -918,7 +918,7 @@ TALER_cs_withdraw_nonce_derive (const struct
* @param[out] bs blinding secret to initialize
* @param cipher algorithm to use (CS or RSA)
* @param ... If CS signature, R_0 and R_1 (TALER_DenominationCsPublicR)
- * and the coins private key is needed
+ * and the coins private key (TALER_CoinSpendPrivateKeyP) is needed
*/
void
TALER_blinding_secret_create (union TALER_DenominationBlindingKeyP *bs,
@@ -936,7 +936,7 @@ TALER_blinding_secret_create (union
TALER_DenominationBlindingKeyP *bs,
* @param[out] denom_priv where to write the private key
* @param[out] deonm_pub where to write the public key
* @param cipher which type of cipher to use
- * @param ... cipher-specific parameters
+ * @param ... RSA key size (eg. 2048/3072/4096)
* @return #GNUNET_OK on success, #GNUNET_NO if parameters were invalid
*/
enum GNUNET_GenericReturnValue
@@ -990,7 +990,8 @@ TALER_denom_cs_derive_r_public (const struct
TALER_WithdrawNonce *nonce,
* @param[out] c_hash resulting hashed coin
* @param[out] coin_ev blinded coin to submit
* @param[out] coin_ev_size number of bytes in @a coin_ev
- * @param ... cipher-specific parameters
+ * @param ... if CS algorithm, r_pub (TALER_DenominationCsPublicR) is needed
to blind and
+ * r_pub_blind (TALER_DenominationCsPublicR) is an additional out parameter.
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
@@ -1026,7 +1027,7 @@ TALER_denom_sign_blinded (struct
TALER_BlindedDenominationSignature *denom_sig,
* @param bdenom_sig the blinded signature
* @param bks blinding secret to use
* @param denom_pub public key used for signing
- * @param ... cipher-specific parameters
+ * @param ... If CS algorithm, r_pub_blind (TALER_DenominationCsPublicR) is an
additional param
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
@@ -1405,7 +1406,8 @@ TALER_planchet_setup_random (struct
TALER_PlanchetSecretsP *ps,
* @param[out] c_hash set to the hash of the public key of the coin (needed
later)
* @param[out] pd set to the planchet detail for TALER_MERCHANT_tip_pickup()
and
* other withdraw operations
- * @param ... cipher-specific parameters
+ * @param ... if CS algorithm, r_pub (TALER_DenominationCsPublicR) is needed
to blind and
+ * r_pub_blind (TALER_DenominationCsPublicR) is an additional out parameter.
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
@@ -1425,7 +1427,8 @@ TALER_planchet_prepare (const struct
TALER_DenominationPublicKey *dk,
* @param ps secrets from #TALER_planchet_prepare()
* @param c_hash hash of the coin's public key for verification of the
signature
* @param[out] coin set to the details of the fresh coin
- * @param ... cipher-specific parameters
+ * @param ... If CS algorithm, r_pub_blind (TALER_DenominationCsPublicR) is an
additional param
+
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
diff --git a/src/util/denom.c b/src/util/denom.c
index 12b499aa..4b62f4cc 100644
--- a/src/util/denom.c
+++ b/src/util/denom.c
@@ -35,9 +35,6 @@ TALER_denom_priv_create (struct TALER_DenominationPrivateKey
*denom_priv,
0,
sizeof (*denom_pub));
- denom_priv->cipher = cipher;
- denom_pub->cipher = cipher;
-
switch (cipher)
{
case TALER_DENOMINATION_INVALID:
@@ -67,12 +64,16 @@ TALER_denom_priv_create (struct
TALER_DenominationPrivateKey *denom_priv,
denom_pub->details.rsa_public_key
= GNUNET_CRYPTO_rsa_private_key_get_public (
denom_priv->details.rsa_private_key);
+ denom_priv->cipher = TALER_DENOMINATION_RSA;
+ denom_pub->cipher = TALER_DENOMINATION_RSA;
return GNUNET_OK;
case TALER_DENOMINATION_CS:
GNUNET_CRYPTO_cs_private_key_generate
(&denom_priv->details.cs_private_key);
GNUNET_CRYPTO_cs_private_key_get_public (
&denom_priv->details.cs_private_key,
&denom_pub->details.cs_public_key);
+ denom_priv->cipher = TALER_DENOMINATION_CS;
+ denom_pub->cipher = TALER_DENOMINATION_CS;
return GNUNET_OK;
default:
GNUNET_break (0);
@@ -296,7 +297,13 @@ TALER_denom_priv_to_pub (const struct
TALER_DenominationPrivateKey *denom_priv,
= GNUNET_CRYPTO_rsa_private_key_get_public (
denom_priv->details.rsa_private_key);
return;
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ denom_pub->cipher = TALER_DENOMINATION_CS;
+ denom_pub->age_mask = age_mask;
+ GNUNET_CRYPTO_cs_private_key_get_public (
+ &denom_priv->details.cs_private_key,
+ &denom_pub->details.cs_public_key);
+ return;
default:
GNUNET_assert (0);
}
@@ -312,13 +319,14 @@ TALER_denom_blind (const struct
TALER_DenominationPublicKey *dk,
struct TALER_BlindedPlanchet *blinded_planchet,
...)
{
- blinded_planchet->cipher = dk->cipher;
TALER_coin_pub_hash (coin_pub,
age_commitment_hash,
c_hash);
switch (dk->cipher)
{
case TALER_DENOMINATION_RSA:
+ blinded_planchet->cipher = dk->cipher;
+
if (GNUNET_YES !=
GNUNET_CRYPTO_rsa_blind (&c_hash->hash,
&coin_bks->rsa_bks,
@@ -334,6 +342,7 @@ TALER_denom_blind (const struct TALER_DenominationPublicKey
*dk,
return GNUNET_OK;
case TALER_DENOMINATION_CS:
{
+ blinded_planchet->cipher = dk->cipher;
va_list ap;
va_start (ap, blinded_planchet);
struct TALER_DenominationCsPublicR *r_pub;
@@ -399,7 +408,6 @@ TALER_denom_pub_verify (const struct
TALER_DenominationPublicKey *denom_pub,
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Coin signature is invalid\n");
- // return GNUNET_YES;
return GNUNET_NO;
}
return GNUNET_YES;
@@ -425,7 +433,7 @@ TALER_denom_pub_free (struct TALER_DenominationPublicKey
*denom_pub)
denom_pub->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
- // TODO: ATM nothing needs to be freed, but check again after
implementation.
+ // ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@@ -449,7 +457,7 @@ TALER_denom_priv_free (struct TALER_DenominationPrivateKey
*denom_priv)
denom_priv->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
- // TODO: ATM nothing needs to be freed, but check again after
implementation.
+ // ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@@ -473,7 +481,7 @@ TALER_denom_sig_free (struct TALER_DenominationSignature
*denom_sig)
denom_sig->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
- // TODO: ATM nothing needs to be freed, but check again after
implementation.
+ // ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@@ -499,7 +507,7 @@ TALER_blinded_denom_sig_free (
denom_sig->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
- // TODO: ATM nothing needs to be freed, but check again after
implementation.
+ // ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@@ -526,7 +534,9 @@ TALER_denom_pub_deep_copy (struct
TALER_DenominationPublicKey *denom_dst,
= GNUNET_CRYPTO_rsa_public_key_dup (
denom_src->details.rsa_public_key);
return;
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ // In Case of CS, the above is already a deep copy *denom_dst = *denom_src;
+ return;
default:
GNUNET_assert (0);
}
@@ -547,7 +557,9 @@ TALER_denom_sig_deep_copy (struct
TALER_DenominationSignature *denom_dst,
= GNUNET_CRYPTO_rsa_signature_dup (
denom_src->details.rsa_signature);
return;
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ // In Case of CS, the above is already a deep copy *denom_dst = *denom_src;
+ return;
default:
GNUNET_assert (0);
}
@@ -569,7 +581,9 @@ TALER_blinded_denom_sig_deep_copy (
= GNUNET_CRYPTO_rsa_signature_dup (
denom_src->details.blinded_rsa_signature);
return;
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ // In Case of CS, the above is already a deep copy *denom_dst = *denom_src;
+ return;
default:
GNUNET_assert (0);
}
@@ -591,7 +605,11 @@ TALER_denom_pub_cmp (const struct
TALER_DenominationPublicKey *denom1,
case TALER_DENOMINATION_RSA:
return GNUNET_CRYPTO_rsa_public_key_cmp (denom1->details.rsa_public_key,
denom2->details.rsa_public_key);
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ return 0 == GNUNET_memcmp (&denom1->details.cs_public_key,
+ &denom2->details.cs_public_key)
+ ? GNUNET_OK
+ : GNUNET_SYSERR;
default:
GNUNET_assert (0);
}
@@ -612,7 +630,11 @@ TALER_denom_sig_cmp (const struct
TALER_DenominationSignature *sig1,
case TALER_DENOMINATION_RSA:
return GNUNET_CRYPTO_rsa_signature_cmp (sig1->details.rsa_signature,
sig2->details.rsa_signature);
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ return 0 == GNUNET_memcmp (&sig1->details.cs_signature,
+ &sig2->details.cs_signature)
+ ? GNUNET_OK
+ : GNUNET_SYSERR;
default:
GNUNET_assert (0);
}
@@ -634,7 +656,11 @@ TALER_blinded_denom_sig_cmp (
case TALER_DENOMINATION_RSA:
return GNUNET_CRYPTO_rsa_signature_cmp
(sig1->details.blinded_rsa_signature,
sig2->details.blinded_rsa_signature);
- // TODO: add case for Clause-Schnorr
+ case TALER_DENOMINATION_CS:
+ return 0 == GNUNET_memcmp (&sig1->details.blinded_cs_answer,
+ &sig2->details.blinded_cs_answer)
+ ? GNUNET_OK
+ : GNUNET_SYSERR;
default:
GNUNET_assert (0);
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-exchange] branch master updated (0a459aeb -> a6778607), gnunet, 2022/02/04
- [taler-exchange] 03/37: added CS get R functionality and planchet setup, gnunet, 2022/02/04
- [taler-exchange] 01/37: added CS data structures, implemented CS keypair, gnunet, 2022/02/04
- [taler-exchange] 04/37: implemented planchet_prepare for CS, gnunet, 2022/02/04
- [taler-exchange] 05/37: sign_blinded implementation, gnunet, 2022/02/04
- [taler-exchange] 09/37: utility functions,
gnunet <=
- [taler-exchange] 02/37: CS planchet create and withdraw create, gnunet, 2022/02/04
- [taler-exchange] 12/37: fix const due to changes in TALER_planchet_prepare, gnunet, 2022/02/04
- [taler-exchange] 18/37: implement TALER_CRYPTO_helper_cs_r_derive and related tests, gnunet, 2022/02/04
- [taler-exchange] 06/37: add sign and verify implementation, gnunet, 2022/02/04
- [taler-exchange] 07/37: implement exchange_api_csr, gnunet, 2022/02/04
- [taler-exchange] 13/37: secmod cs signatures implementation, gnunet, 2022/02/04
- [taler-exchange] 11/37: clean up cs implementation, gnunet, 2022/02/04
- [taler-exchange] 16/37: revocation, gnunet, 2022/02/04
- [taler-exchange] 17/37: implement secmod cs derive R, gnunet, 2022/02/04
- [taler-exchange] 08/37: fixed CS signatures and cleanup/refactoring, gnunet, 2022/02/04