From ddf95c491af05732220ac35c6fb1bea48e6f4050 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 10 Jul 2020 22:33:04 +0200 Subject: remove unused/unusable coin_sig, return correct coin_pub in recoup-reveal failure context --- src/exchange/taler-exchange-httpd_responses.c | 6 +-- src/exchangedb/plugin_exchangedb_postgres.c | 11 ++++ src/include/taler_exchangedb_plugin.h | 2 +- src/include/taler_signatures.h | 2 +- src/lib/exchange_api_common.c | 12 +++-- src/testing/test_exchange_api.c | 77 +++++++++++++++++++-------- 6 files changed, 78 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/exchange/taler-exchange-httpd_responses.c b/src/exchange/taler-exchange-httpd_responses.c index 444729a25..4bcb9e7a5 100644 --- a/src/exchange/taler-exchange-httpd_responses.c +++ b/src/exchange/taler-exchange-httpd_responses.c @@ -250,7 +250,7 @@ TEH_RESPONSE_compile_transaction_history ( TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH), .purpose.size = htonl (sizeof (pc)), .timestamp = GNUNET_TIME_absolute_hton (pr->timestamp), - .coin_pub = *coin_pub, + .coin_pub = pr->coin.coin_pub, .old_coin_pub = pr->old_coin_pub }; @@ -273,7 +273,7 @@ TEH_RESPONSE_compile_transaction_history ( if (0 != json_array_append_new ( history, - json_pack ("{s:s, s:o, s:o, s:o, s:o, s:o, s:o}", + json_pack ("{s:s, s:o, s:o, s:o, s:o, s:o}", "type", "OLD-COIN-RECOUP", "amount", @@ -284,8 +284,6 @@ TEH_RESPONSE_compile_transaction_history ( GNUNET_JSON_from_data_auto (&epub), "coin_pub", GNUNET_JSON_from_data_auto (&pr->coin.coin_pub), - "coin_sig", - GNUNET_JSON_from_data_auto (&pr->coin_sig), "timestamp", GNUNET_JSON_from_time_abs (pr->timestamp)))) { diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index 8e45d6711..7934639b0 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -4553,6 +4553,11 @@ postgres_get_coin_transactions ( params, work[i].cb, &chc); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Coin %s yielded %d transactions of type %s\n", + TALER_B2S (coin_pub), + qs, + work[i].statement); if ( (0 > qs) || (chc.failed) ) { @@ -6913,6 +6918,9 @@ postgres_insert_recoup_request ( GNUNET_break (0); return GNUNET_DB_STATUS_HARD_ERROR; } + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Inserting recoup for coin %s\n", + TALER_B2S (&coin->coin_pub)); expiry = GNUNET_TIME_absolute_add (timestamp, pg->legal_reserve_expiration_time); reserve.gc = GNUNET_TIME_absolute_max (expiry, @@ -6976,6 +6984,9 @@ postgres_insert_recoup_refresh_request ( (void) cls; /* now store actual recoup information */ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Inserting recoup-refresh for coin %s\n", + TALER_B2S (&coin->coin_pub)); qs = GNUNET_PQ_eval_prepared_non_select (session->conn, "recoup_refresh_insert", params); diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h index 8b4e63cd7..f5e5dccc9 100644 --- a/src/include/taler_exchangedb_plugin.h +++ b/src/include/taler_exchangedb_plugin.h @@ -373,7 +373,7 @@ struct TALER_EXCHANGEDB_RecoupRefreshListEntry /** * Blinding factor supplied to prove to the exchange that - * the coin came from this reserve. + * the coin came from this @e old_coin_pub. */ struct TALER_DenominationBlindingKeyP coin_blind; diff --git a/src/include/taler_signatures.h b/src/include/taler_signatures.h index 3e4b893f8..4e24c5196 100644 --- a/src/include/taler_signatures.h +++ b/src/include/taler_signatures.h @@ -1219,7 +1219,7 @@ struct TALER_RecoupRequestPS struct TALER_CoinSpendPublicKeyP coin_pub; /** - * Hash of the denomination public key of the coin. + * Hash of the (revoked) denomination public key of the coin. */ struct GNUNET_HashCode h_denom_pub; diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c index feaef7b3d..743adb0ff 100644 --- a/src/lib/exchange_api_common.c +++ b/src/lib/exchange_api_common.c @@ -876,10 +876,11 @@ TALER_EXCHANGE_verify_coin_history ( TALER_amount_hton (&pc.recoup_amount, &amount); if (GNUNET_OK != - GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP, - &pc, - &exchange_sig.eddsa_signature, - &exchange_pub.eddsa_pub)) + GNUNET_CRYPTO_eddsa_verify ( + TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH, + &pc, + &exchange_sig.eddsa_signature, + &exchange_pub.eddsa_pub)) { GNUNET_break_op (0); return GNUNET_SYSERR; @@ -890,6 +891,9 @@ TALER_EXCHANGE_verify_coin_history ( { /* signature not supported, new version on server? */ GNUNET_break_op (0); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Unexpected type `%s' in response\n", + type); GNUNET_assert (GNUNET_SYSERR == add); return GNUNET_SYSERR; } diff --git a/src/testing/test_exchange_api.c b/src/testing/test_exchange_api.c index b8ec36996..410c1a492 100644 --- a/src/testing/test_exchange_api.c +++ b/src/testing/test_exchange_api.c @@ -675,28 +675,61 @@ run (void *cls, "recoup-reveal-coin-1b", "recoup-melt-coin-1b", "EUR:5"), -#if 1 - /* "over-spend" 10 EUR recoup-refreshed coin */ - TALER_TESTING_cmd_deposit ("recoup-refresh-deposit-failing", - "recoup-withdraw-coin-1b", - 0, - bc.user42_payto, - "{\"items\":[{\"name\":\"more ice cream\",\"value\":1}]}", - GNUNET_TIME_UNIT_ZERO, - "EUR:11.5", - MHD_HTTP_OK), - // FIXME: yes, we expect 'CONFLICT', but the - // coin history we get is totally wrong! - /* "spend" 10 EUR recoup-refreshed coin */ - TALER_TESTING_cmd_deposit ("recoup-refresh-deposit-ok", - "recoup-withdraw-coin-1b", - 0, - bc.user42_payto, - "{\"items\":[{\"name\":\"more ice cream\",\"value\":1}]}", - GNUNET_TIME_UNIT_ZERO, - "EUR:9.5", /* FIXME: pick 'right' amount! */ - MHD_HTTP_OK), -#endif + /* melt 10 EUR coin *again* to get 1 EUR refreshed coin */ + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1a", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_refresh_reveal ("recoup-reveal-coin-1a", + "recoup-remelt-coin-1a", + MHD_HTTP_OK), + /* Try melting for more than the residual value to provoke an error */ + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1b", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1c", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1d", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1e", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1f", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1g", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1h", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1i", + "recoup-withdraw-coin-1b", + MHD_HTTP_OK, + "EUR:1", + NULL), + TALER_TESTING_cmd_melt ("recoup-remelt-coin-1b-failing", + "recoup-withdraw-coin-1b", + MHD_HTTP_CONFLICT, + "EUR:1", + NULL), /* Re-withdraw from this reserve */ TALER_TESTING_cmd_withdraw_amount ("recoup-withdraw-coin-2", "recoup-create-reserve-1", -- cgit v1.2.3