From 3eae999efc0cb923aebd2bf7214c5f4093217d4f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 31 Oct 2021 17:56:56 +0100 Subject: distinguish between blind and non-blind denomination signatures --- src/util/crypto.c | 16 ++++++++------ src/util/crypto_helper_denom.c | 8 +++---- src/util/denom.c | 48 ++++++++++++++++++++++++++++++++++++------ 3 files changed, 54 insertions(+), 18 deletions(-) (limited to 'src/util') diff --git a/src/util/crypto.c b/src/util/crypto.c index c7b459450..99744304b 100644 --- a/src/util/crypto.c +++ b/src/util/crypto.c @@ -212,21 +212,23 @@ TALER_planchet_prepare (const struct TALER_DenominationPublicKey *dk, enum GNUNET_GenericReturnValue -TALER_planchet_to_coin (const struct TALER_DenominationPublicKey *dk, - const struct GNUNET_CRYPTO_RsaSignature *blind_sig, - const struct TALER_PlanchetSecretsP *ps, - const struct TALER_CoinPubHash *c_hash, - struct TALER_FreshCoin *coin) +TALER_planchet_to_coin ( + const struct TALER_DenominationPublicKey *dk, + const struct TALER_BlindedDenominationSignature *blind_sig, + const struct TALER_PlanchetSecretsP *ps, + const struct TALER_CoinPubHash *c_hash, + struct TALER_FreshCoin *coin) { struct TALER_DenominationSignature sig; - // FIXME-Gian/Lucien: this will be the bigger + // FIXME-Gian/Lucien: this may need a bigger // change, as you have the extra round trip // => to be discussed! GNUNET_assert (TALER_DENOMINATION_RSA == dk->cipher); + GNUNET_assert (TALER_DENOMINATION_RSA == blind_sig->cipher); sig.cipher = TALER_DENOMINATION_RSA; sig.details.rsa_signature - = TALER_rsa_unblind (blind_sig, + = TALER_rsa_unblind (blind_sig->details.blinded_rsa_signature, &ps->blinding_key.bks, dk->details.rsa_public_key); if (GNUNET_OK != diff --git a/src/util/crypto_helper_denom.c b/src/util/crypto_helper_denom.c index ba56a4e71..4dfd32fbd 100644 --- a/src/util/crypto_helper_denom.c +++ b/src/util/crypto_helper_denom.c @@ -541,7 +541,7 @@ TALER_CRYPTO_helper_denom_poll (struct TALER_CRYPTO_DenominationHelper *dh) } -struct TALER_DenominationSignature +struct TALER_BlindedDenominationSignature TALER_CRYPTO_helper_denom_sign ( struct TALER_CRYPTO_DenominationHelper *dh, const struct TALER_DenominationHash *h_denom_pub, @@ -549,8 +549,8 @@ TALER_CRYPTO_helper_denom_sign ( size_t msg_size, enum TALER_ErrorCode *ec) { - struct TALER_DenominationSignature ds = { - .details.rsa_signature = NULL + struct TALER_BlindedDenominationSignature ds = { + .details.blinded_rsa_signature = NULL }; { char buf[sizeof (struct TALER_CRYPTO_SignRequest) + msg_size]; @@ -652,7 +652,7 @@ TALER_CRYPTO_helper_denom_sign ( } *ec = TALER_EC_NONE; ds.cipher = TALER_DENOMINATION_RSA; - ds.details.rsa_signature = rsa_signature; + ds.details.blinded_rsa_signature = rsa_signature; return ds; } case TALER_HELPER_RSA_MT_RES_SIGN_FAILURE: diff --git a/src/util/denom.c b/src/util/denom.c index 33b507639..8d6ddd5e7 100644 --- a/src/util/denom.c +++ b/src/util/denom.c @@ -169,6 +169,27 @@ TALER_denom_sig_free (struct TALER_DenominationSignature *denom_sig) } +void +TALER_blinded_denom_sig_free ( + struct TALER_BlindedDenominationSignature *denom_sig) +{ + switch (denom_sig->cipher) + { + case TALER_DENOMINATION_RSA: + if (NULL != denom_sig->details.blinded_rsa_signature) + { + GNUNET_CRYPTO_rsa_signature_free ( + denom_sig->details.blinded_rsa_signature); + denom_sig->details.blinded_rsa_signature = NULL; + } + return; + // TODO: add case for Clause-Schnorr + default: + GNUNET_assert (0); + } +} + + /** * Make a (deep) copy of the given @a denom_src to * @a denom_dst. @@ -214,13 +235,26 @@ TALER_denom_sig_deep_copy (struct TALER_DenominationSignature *denom_dst, } -/** - * Compare two denomination public keys. - * - * @param denom1 first key - * @param denom2 second key - * @return 0 if the keys are equal, otherwise -1 or 1 - */ +void +TALER_blinded_denom_sig_deep_copy ( + struct TALER_BlindedDenominationSignature *denom_dst, + const struct TALER_BlindedDenominationSignature *denom_src) +{ + *denom_dst = *denom_src; /* shallow copy */ + switch (denom_src->cipher) + { + case TALER_DENOMINATION_RSA: + denom_dst->details.blinded_rsa_signature + = GNUNET_CRYPTO_rsa_signature_dup ( + denom_src->details.blinded_rsa_signature); + return; + // TODO: add case for Clause-Schnorr + default: + GNUNET_assert (0); + } +} + + int TALER_denom_pub_cmp (const struct TALER_DenominationPublicKey *denom1, const struct TALER_DenominationPublicKey *denom2) -- cgit v1.2.3