summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2020-07-10 22:37:11 -0400
committerJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2020-07-10 22:37:11 -0400
commit136e9accf6933a00cd4e59fbb2ddac8667d2be02 (patch)
treeb8fd562a7604968e747bdfebaf2bb3d16c2a48fe /src/lib
parenta043ee5eed5eae2d1629fe7fd7546767b74bf586 (diff)
downloadmerchant-136e9accf6933a00cd4e59fbb2ddac8667d2be02.tar.gz
merchant-136e9accf6933a00cd4e59fbb2ddac8667d2be02.tar.bz2
merchant-136e9accf6933a00cd4e59fbb2ddac8667d2be02.zip
use h_denom_pub when signing deposits
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/merchant_api_post_order_pay.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/lib/merchant_api_post_order_pay.c b/src/lib/merchant_api_post_order_pay.c
index 27f380f8..78fe3080 100644
--- a/src/lib/merchant_api_post_order_pay.c
+++ b/src/lib/merchant_api_post_order_pay.c
@@ -119,12 +119,15 @@ check_coin_history (const struct TALER_MERCHANT_PaidCoin *pc,
{
struct TALER_Amount spent;
struct TALER_Amount spent_plus_contrib;
+ struct GNUNET_HashCode h_denom_pub;
+ struct GNUNET_HashCode h_denom_pub_pc;
if (GNUNET_OK !=
TALER_EXCHANGE_verify_coin_history (NULL, /* do not verify fees */
pc->amount_with_fee.currency,
&pc->coin_pub,
json,
+ &h_denom_pub,
&spent))
{
/* Exchange's history fails to verify */
@@ -148,6 +151,15 @@ check_coin_history (const struct TALER_MERCHANT_PaidCoin *pc,
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
+ GNUNET_CRYPTO_rsa_public_key_hash (pc->denom_pub.rsa_public_key,
+ &h_denom_pub_pc);
+ if (0 != GNUNET_memcmp (&h_denom_pub,
+ &h_denom_pub_pc))
+ {
+ /* Hash of denom pub doesn't match. */
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Accepting proof of double-spending\n");
return GNUNET_OK;
@@ -671,6 +683,8 @@ TALER_MERCHANT_order_pay (struct GNUNET_CURL_Context *ctx,
}
TALER_amount_hton (&dr.deposit_fee,
&fee);
+ GNUNET_CRYPTO_rsa_public_key_hash (coin->denom_pub.rsa_public_key,
+ &dr.h_denom_pub);
GNUNET_CRYPTO_eddsa_sign (&coin->coin_priv.eddsa_priv,
&dr,
&p->coin_sig.eddsa_signature);