aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/taler_crypto_lib.h3
-rw-r--r--src/util/crypto.c7
-rw-r--r--src/util/denom.c8
3 files changed, 17 insertions, 1 deletions
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: