From 36f551ff33ac0974788aff28d4b19390ca484f4b Mon Sep 17 00:00:00 2001 From: Lucien Heuzeveldt Date: Tue, 4 Jan 2022 17:46:36 +0100 Subject: [PATCH] set planchet detail cipher, add cipher checks --- src/include/taler_crypto_lib.h | 3 ++- src/util/crypto.c | 7 +++++++ src/util/denom.c | 8 ++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h index a20e51204..295d0e7be 100644 --- a/src/include/taler_crypto_lib.h +++ b/src/include/taler_crypto_lib.h @@ -1444,7 +1444,8 @@ TALER_planchet_setup_random (struct TALER_PlanchetSecretsP *ps, * @param ps secret planchet internals (for #TALER_planchet_to_coin) * @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 + * other withdraw operations, pd->blinded_planchet.cipher will be set + * to cipher from dk * @return #GNUNET_OK on success */ enum GNUNET_GenericReturnValue diff --git a/src/util/crypto.c b/src/util/crypto.c index 84d20d6ba..445b820aa 100644 --- a/src/util/crypto.c +++ b/src/util/crypto.c @@ -319,6 +319,7 @@ TALER_planchet_prepare (const struct TALER_DenominationPublicKey *dk, return GNUNET_SYSERR; } + pd->blinded_planchet.cipher = dk->cipher; TALER_denom_pub_hash (dk, &pd->denom_pub_hash); return GNUNET_OK; @@ -335,6 +336,12 @@ TALER_planchet_to_coin (const struct TALER_DenominationPublicKey *dk, { struct TALER_DenominationSignature sig; + if (dk->cipher != blind_sig->cipher) + { + GNUNET_break_op (0); + return GNUNET_SYSERR; + } + switch (dk->cipher) { case TALER_DENOMINATION_RSA: diff --git a/src/util/denom.c b/src/util/denom.c index 908302600..a4965c050 100644 --- a/src/util/denom.c +++ b/src/util/denom.c @@ -112,6 +112,13 @@ TALER_denom_sign_blinded (struct TALER_BlindedDenominationSignature *denom_sig, memset (denom_sig, 0, sizeof (*denom_sig)); + + if (blinded_planchet->cipher != denom_priv->cipher) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + switch (denom_priv->cipher) { case TALER_DENOMINATION_INVALID: @@ -394,6 +401,7 @@ TALER_denom_pub_verify (const struct TALER_DenominationPublicKey *denom_pub, GNUNET_break (0); return GNUNET_SYSERR; } + switch (denom_pub->cipher) { case TALER_DENOMINATION_INVALID: