summaryrefslogtreecommitdiff
path: root/src/lib/exchange_api_refund.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-11-06 16:52:14 +0100
committerChristian Grothoff <christian@grothoff.org>2021-11-06 16:52:14 +0100
commit8175fdfa0f47e74e239190e809eff4dda5565a76 (patch)
treeb8d46fe55fc9de418953eae23bc12f35295f4ba1 /src/lib/exchange_api_refund.c
parent938e2ce39c56ae5afc6c12f15be8f49c7edbf2fd (diff)
downloadexchange-8175fdfa0f47e74e239190e809eff4dda5565a76.tar.gz
exchange-8175fdfa0f47e74e239190e809eff4dda5565a76.tar.bz2
exchange-8175fdfa0f47e74e239190e809eff4dda5565a76.zip
introduce TALER_wallet_deposit_verify
Diffstat (limited to 'src/lib/exchange_api_refund.c')
-rw-r--r--src/lib/exchange_api_refund.c58
1 files changed, 33 insertions, 25 deletions
diff --git a/src/lib/exchange_api_refund.c b/src/lib/exchange_api_refund.c
index a73f19fc9..1362a9c26 100644
--- a/src/lib/exchange_api_refund.c
+++ b/src/lib/exchange_api_refund.c
@@ -87,7 +87,7 @@ struct TALER_EXCHANGE_RefundHandle
* @param[out] exchange_sig set to the exchange's signature
* @return #GNUNET_OK if the signature is valid, #GNUNET_SYSERR if not
*/
-static int
+static enum GNUNET_GenericReturnValue
verify_refund_signature_ok (struct TALER_EXCHANGE_RefundHandle *rh,
const json_t *json,
struct TALER_ExchangePublicKeyP *exchange_pub,
@@ -138,7 +138,7 @@ verify_refund_signature_ok (struct TALER_EXCHANGE_RefundHandle *rh,
* @param json json reply with the coin transaction history
* @return #GNUNET_OK if the signature is valid, #GNUNET_SYSERR if not
*/
-static int
+static enum GNUNET_GenericReturnValue
verify_conflict_history_ok (struct TALER_EXCHANGE_RefundHandle *rh,
const json_t *json)
{
@@ -196,29 +196,32 @@ verify_conflict_history_ok (struct TALER_EXCHANGE_RefundHandle *rh,
if (0 == strcasecmp (type,
"DEPOSIT"))
{
- struct TALER_DepositRequestPS dr = {
- .purpose.size = htonl (sizeof (dr)),
- .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT),
- .coin_pub = rh->depconf.coin_pub
- };
+ struct TALER_Amount deposit_fee;
+ struct TALER_MerchantWireHash h_wire;
+ struct TALER_PrivateContractHash h_contract_terms;
+ // struct TALER_ExtensionContractHash h_extensions; // FIXME!
+ struct TALER_DenominationHash h_denom_pub;
+ struct GNUNET_TIME_Absolute wallet_timestamp;
+ struct TALER_MerchantPublicKeyP merchant_pub;
+ struct GNUNET_TIME_Absolute refund_deadline;
struct TALER_CoinSpendSignatureP sig;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("coin_sig",
&sig),
GNUNET_JSON_spec_fixed_auto ("h_contract_terms",
- &dr.h_contract_terms),
+ &h_contract_terms),
GNUNET_JSON_spec_fixed_auto ("h_wire",
- &dr.h_wire),
+ &h_wire),
GNUNET_JSON_spec_fixed_auto ("h_denom_pub",
- &dr.h_denom_pub),
- TALER_JSON_spec_absolute_time_nbo ("timestamp",
- &dr.wallet_timestamp),
- TALER_JSON_spec_absolute_time_nbo ("refund_deadline",
- &dr.refund_deadline),
- TALER_JSON_spec_amount_any_nbo ("deposit_fee",
- &dr.deposit_fee),
+ &h_denom_pub),
+ TALER_JSON_spec_absolute_time ("timestamp",
+ &wallet_timestamp),
+ TALER_JSON_spec_absolute_time ("refund_deadline",
+ &refund_deadline),
+ TALER_JSON_spec_amount_any ("deposit_fee",
+ &deposit_fee),
GNUNET_JSON_spec_fixed_auto ("merchant_pub",
- &dr.merchant),
+ &merchant_pub),
GNUNET_JSON_spec_end ()
};
@@ -230,21 +233,26 @@ verify_conflict_history_ok (struct TALER_EXCHANGE_RefundHandle *rh,
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
- TALER_amount_hton (&dr.amount_with_fee,
- &amount);
if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_DEPOSIT,
- &dr,
- &sig.eddsa_signature,
- &rh->depconf.coin_pub.eddsa_pub))
+ TALER_wallet_deposit_verify (&amount,
+ &deposit_fee,
+ &h_wire,
+ &h_contract_terms,
+ NULL /* h_extensions! */,
+ &h_denom_pub,
+ wallet_timestamp,
+ &merchant_pub,
+ refund_deadline,
+ &rh->depconf.coin_pub,
+ &sig))
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
}
if ( (0 != GNUNET_memcmp (&rh->depconf.h_contract_terms,
- &dr.h_contract_terms)) ||
+ &h_contract_terms)) ||
(0 != GNUNET_memcmp (&rh->depconf.merchant,
- &dr.merchant)) )
+ &merchant_pub)) )
{
/* deposit information is about a different merchant/contract */
GNUNET_break_op (0);