check payback signatures in auditor
This commit is contained in:
parent
4b5efa4e81
commit
930101256e
@ -827,13 +827,36 @@ handle_payback_by_reserve (void *cls,
|
|||||||
struct GNUNET_HashCode key;
|
struct GNUNET_HashCode key;
|
||||||
struct ReserveSummary *rs;
|
struct ReserveSummary *rs;
|
||||||
struct GNUNET_TIME_Absolute expiry;
|
struct GNUNET_TIME_Absolute expiry;
|
||||||
|
struct TALER_PaybackRequestPS pr;
|
||||||
|
|
||||||
/* should be monotonically increasing */
|
/* should be monotonically increasing */
|
||||||
GNUNET_assert (rowid >= pp.last_reserve_payback_serial_id);
|
GNUNET_assert (rowid >= pp.last_reserve_payback_serial_id);
|
||||||
pp.last_reserve_payback_serial_id = rowid + 1;
|
pp.last_reserve_payback_serial_id = rowid + 1;
|
||||||
|
|
||||||
/* TODO: check that coin signature on payback request is valid
|
if (GNUNET_OK !=
|
||||||
and/or that the coin was eligible for payback! #3887!*/
|
TALER_test_coin_valid (coin))
|
||||||
|
{
|
||||||
|
report_row_inconsistency ("payback",
|
||||||
|
rowid,
|
||||||
|
"coin denomination signature invalid");
|
||||||
|
}
|
||||||
|
pr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_PAYBACK);
|
||||||
|
pr.purpose.size = htonl (sizeof (pr));
|
||||||
|
pr.coin_pub = coin->coin_pub;
|
||||||
|
GNUNET_CRYPTO_rsa_public_key_hash (coin->denom_pub.rsa_public_key,
|
||||||
|
&pr.h_denom_pub);
|
||||||
|
pr.coin_blind = *coin_blind;
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_PAYBACK,
|
||||||
|
&pr.purpose,
|
||||||
|
&coin_sig->eddsa_signature,
|
||||||
|
&coin->coin_pub.eddsa_pub))
|
||||||
|
{
|
||||||
|
report_row_inconsistency ("payback",
|
||||||
|
rowid,
|
||||||
|
"coin payback signature invalid");
|
||||||
|
}
|
||||||
|
/* TODO: check that the coin was eligible for payback! #3887!*/
|
||||||
|
|
||||||
GNUNET_CRYPTO_hash (reserve_pub,
|
GNUNET_CRYPTO_hash (reserve_pub,
|
||||||
sizeof (*reserve_pub),
|
sizeof (*reserve_pub),
|
||||||
|
Loading…
Reference in New Issue
Block a user