check currencies match first

This commit is contained in:
Christian Grothoff 2020-01-17 20:20:28 +01:00
parent 6c5155ca74
commit a064ca705e
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 42 additions and 10 deletions

View File

@ -139,9 +139,12 @@ TALER_EXCHANGE_verify_coin_history (const struct
/* check that deposit fee matches our expectations from /keys! */
TALER_amount_ntoh (&fee,
&dr.deposit_fee);
if (0 !=
TALER_amount_cmp (&fee,
&dk->fee_deposit))
if ( (GNUNET_YES !=
TALER_amount_cmp_currency (&fee,
&dki->fee_deposit)) ||
(0 !=
TALER_amount_cmp (&fee,
&dk->fee_deposit)) )
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
@ -188,9 +191,12 @@ TALER_EXCHANGE_verify_coin_history (const struct
/* check that melt fee matches our expectations from /keys! */
TALER_amount_ntoh (&fee,
&rm.melt_fee);
if (0 !=
TALER_amount_cmp (&fee,
&dk->fee_refresh))
if ( (GNUNET_YES !=
TALER_amount_cmp_currency (&fee,
&dki->fee_refresh)) ||
(0 !=
TALER_amount_cmp (&fee,
&dk->fee_refresh)) )
{
GNUNET_break_op (0);
return GNUNET_SYSERR;
@ -249,9 +255,12 @@ TALER_EXCHANGE_verify_coin_history (const struct
/* check that refund fee matches our expectations from /keys! */
TALER_amount_ntoh (&fee,
&rr.refund_fee);
if (0 !=
TALER_amount_cmp (&fee,
&dk->fee_refund))
if ( (GNUNET_YES !=
TALER_amount_cmp_currency (&fee,
&dki->fee_refund)) ||
(0 !=
TALER_amount_cmp (&fee,
&dk->fee_refund)) )
{
GNUNET_break_op (0);
return GNUNET_SYSERR;

View File

@ -224,7 +224,30 @@ parse_reserve_history (struct TALER_EXCHANGE_Handle *exchange,
GNUNET_JSON_parse_free (withdraw_spec);
return GNUNET_SYSERR;
}
/* TODO: check that withdraw fee matches expectations! */
/* check that withdraw fee matches expectations! */
{
const struct TALER_EXCHANGE_Keys *key_state;
const struct TALER_EXCHANGE_DenomPublicKey *dki;
struct TALER_Amount fee;
key_state = TALER_EXCHANGE_get_keys (exchange);
dki = TALER_EXCHANGE_get_denomination_key_by_hash (key_state,
&withdraw_purpose.
h_denomination_pub);
TALER_amount_ntoh (&fee,
&withdraw_purpose.withdraw_fee);
if ( (GNUNET_YES !=
TALER_amount_cmp_currency (&fee,
&dki->fee_withdraw)) ||
(0 !=
TALER_amount_cmp (&fee,
&dki->fee_withdraw)) )
{
GNUNET_break_op (0);
GNUNET_JSON_parse_free (withdraw_spec);
return GNUNET_SYSERR;
}
}
rhistory[off].details.out_authorization_sig
= json_object_get (transaction,
"signature");