aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2023-09-24 19:03:30 +0200
committerChristian Grothoff <christian@grothoff.org>2023-09-24 19:03:30 +0200
commitc6f7bd46fe73236dd3464cc6d87a5bce92c1ef16 (patch)
tree9eb74c5348ffefac412c3adcbc0e2e1d81c5d217 /src/include
parentcb60a5695d330de0feea2fb4800ca853a8ffe0ed (diff)
downloadexchange-c6f7bd46fe73236dd3464cc6d87a5bce92c1ef16.tar.xz
combine deposit confirmation signatures into one big signature
Diffstat (limited to 'src/include')
-rw-r--r--src/include/taler_auditor_service.h18
-rw-r--r--src/include/taler_auditordb_plugin.h21
-rw-r--r--src/include/taler_crypto_lib.h20
-rw-r--r--src/include/taler_exchange_service.h9
-rw-r--r--src/include/taler_testing_lib.h17
5 files changed, 48 insertions, 37 deletions
diff --git a/src/include/taler_auditor_service.h b/src/include/taler_auditor_service.h
index 3d8ca9efb..409faca7d 100644
--- a/src/include/taler_auditor_service.h
+++ b/src/include/taler_auditor_service.h
@@ -226,11 +226,11 @@ TALER_AUDITOR_get_config (struct GNUNET_CURL_Context *ctx,
/**
* Cancel auditor config request.
*
- * @param auditor the auditor handle
+ * @param[in] auditor the auditor handle
*/
void
-TALER_AUDITOR_get_config_cancel (struct
- TALER_AUDITOR_GetConfigHandle *auditor);
+TALER_AUDITOR_get_config_cancel (
+ struct TALER_AUDITOR_GetConfigHandle *auditor);
/**
@@ -284,8 +284,10 @@ typedef void
* @param exchange_timestamp timestamp when the contract was finalized, must not be too far in the future
* @param wire_deadline date until which the exchange should wire the funds
* @param refund_deadline date until which the merchant can issue a refund to the customer via the auditor (can be zero if refunds are not allowed); must not be after the @a wire_deadline
- * @param amount_without_fee the amount confirmed to be wired by the exchange to the merchant
- * @param coin_pub coin’s public key
+ * @param total_without_fee the amount confirmed to be wired by the exchange to the merchant
+ * @param num_coins number of coins involved in the batch deposit
+ * @param coin_pubs array of the coin’s public keys
+ * @param coin_sigs array of the original deposit signatures of the coins in the batch
* @param merchant_pub the public key of the merchant (used to identify the merchant for refund requests)
* @param exchange_sig the signature made with purpose #TALER_SIGNATURE_EXCHANGE_CONFIRM_DEPOSIT
* @param exchange_pub the public key of the exchange that matches @a exchange_sig
@@ -309,8 +311,10 @@ TALER_AUDITOR_deposit_confirmation (
struct GNUNET_TIME_Timestamp exchange_timestamp,
struct GNUNET_TIME_Timestamp wire_deadline,
struct GNUNET_TIME_Timestamp refund_deadline,
- const struct TALER_Amount *amount_without_fee,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_Amount *total_without_fee,
+ unsigned int num_coins,
+ const struct TALER_CoinSpendPublicKeyP *coin_pubs[static num_coins],
+ const struct TALER_CoinSpendSignatureP *coin_sigs[static num_coins],
const struct TALER_MerchantPublicKeyP *merchant_pub,
const struct TALER_ExchangePublicKeyP *exchange_pub,
const struct TALER_ExchangeSignatureP *exchange_sig,
diff --git a/src/include/taler_auditordb_plugin.h b/src/include/taler_auditordb_plugin.h
index eebb31e06..31e6723a5 100644
--- a/src/include/taler_auditordb_plugin.h
+++ b/src/include/taler_auditordb_plugin.h
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014-2022 Taler Systems SA
+ Copyright (C) 2014-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -421,14 +421,23 @@ struct TALER_AUDITORDB_DepositConfirmation
* Amount to be deposited, excluding fee. Calculated from the
* amount with fee and the fee from the deposit request.
*/
- struct TALER_Amount amount_without_fee;
+ struct TALER_Amount total_without_fee;
/**
- * The coin's public key. This is the value that must have been
- * signed (blindly) by the Exchange. The deposit request is to be
- * signed by the corresponding private key (using EdDSA).
+ * Length of the @e coin_pubs and @e coin_sigs arrays.
*/
- struct TALER_CoinSpendPublicKeyP coin_pub;
+ unsigned int num_coins;
+
+ /**
+ * Array of the coin public keys involved in the
+ * batch deposit operation.
+ */
+ const struct TALER_CoinSpendPublicKeyP *coin_pubs;
+
+ /**
+ * Array of coin deposit signatures from the deposit operation.
+ */
+ const struct TALER_CoinSpendSignatureP *coin_sigs;
/**
* The Merchant's public key. Allows the merchant to later refund
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index b7666610e..cef8f55a5 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -4045,8 +4045,9 @@ typedef enum TALER_ErrorCode
* @param exchange_timestamp timestamp when the contract was finalized, must not be too far off
* @param wire_deadline date until which the exchange should wire the funds
* @param refund_deadline date until which the merchant can issue a refund to the customer via the exchange (can be zero if refunds are not allowed); must not be after the @a wire_deadline
- * @param amount_without_fee the amount to be deposited after fees
- * @param coin_pub public key of the deposited coin
+ * @param total_without_fee the total amount to be deposited after fees over all coins
+ * @param num_coins length of @a coin_sigs array
+ * @param coin_sigs signatures of the deposited coins
* @param merchant_pub the public key of the merchant (used to identify the merchant for refund requests)
* @param[out] pub where to write the public key
* @param[out] sig where to write the signature
@@ -4061,8 +4062,9 @@ TALER_exchange_online_deposit_confirmation_sign (
struct GNUNET_TIME_Timestamp exchange_timestamp,
struct GNUNET_TIME_Timestamp wire_deadline,
struct GNUNET_TIME_Timestamp refund_deadline,
- const struct TALER_Amount *amount_without_fee,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_Amount *total_without_fee,
+ unsigned int num_coins,
+ const struct TALER_CoinSpendSignatureP *coin_sigs[static num_coins],
const struct TALER_MerchantPublicKeyP *merchant_pub,
struct TALER_ExchangePublicKeyP *pub,
struct TALER_ExchangeSignatureP *sig);
@@ -4077,8 +4079,9 @@ TALER_exchange_online_deposit_confirmation_sign (
* @param exchange_timestamp timestamp when the contract was finalized, must not be too far off
* @param wire_deadline date until which the exchange should wire the funds
* @param refund_deadline date until which the merchant can issue a refund to the customer via the exchange (can be zero if refunds are not allowed); must not be after the @a wire_deadline
- * @param amount_without_fee the amount to be deposited after fees
- * @param coin_pub public key of the deposited coin
+ * @param total_without_fee the total amount to be deposited after fees over all coins
+ * @param num_coins length of @a coin_sigs array
+ * @param coin_sigs signatures of the deposited coins
* @param merchant_pub the public key of the merchant (used to identify the merchant for refund requests)
* @param pub where to write the public key
* @param sig where to write the signature
@@ -4092,8 +4095,9 @@ TALER_exchange_online_deposit_confirmation_verify (
struct GNUNET_TIME_Timestamp exchange_timestamp,
struct GNUNET_TIME_Timestamp wire_deadline,
struct GNUNET_TIME_Timestamp refund_deadline,
- const struct TALER_Amount *amount_without_fee,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_Amount *total_without_fee,
+ unsigned int num_coins,
+ const struct TALER_CoinSpendSignatureP *coin_sigs[static num_coins],
const struct TALER_MerchantPublicKeyP *merchant_pub,
const struct TALER_ExchangePublicKeyP *pub,
const struct TALER_ExchangeSignatureP *sig);
diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h
index c344a93ae..662700d48 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -1143,9 +1143,9 @@ struct TALER_EXCHANGE_BatchDepositResult
struct GNUNET_TIME_Timestamp deposit_timestamp;
/**
- * Array of signatures provided by the exchange
+ * Deposit confirmation signature provided by the exchange
*/
- const struct TALER_ExchangeSignatureP *exchange_sigs;
+ const struct TALER_ExchangeSignatureP *exchange_sig;
/**
* exchange key used to sign @a exchange_sig.
@@ -1158,11 +1158,6 @@ struct TALER_EXCHANGE_BatchDepositResult
*/
const char *transaction_base_url;
- /**
- * Length of the @e exchange_sigs array.
- */
- unsigned int num_signatures;
-
} ok;
/**
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 5506f025c..026798027 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -811,20 +811,18 @@ TALER_TESTING_cmd_exec_auditor_dbinit (const char *label,
* @param label command label.
* @param deposit_reference reference to any operation that can
* provide a coin.
- * @param coin_index if @a deposit_reference offers an array of
- * coins, this parameter selects which one in that array.
- * This value is currently ignored, as only one-coin
- * deposits are implemented.
+ * @param num_coins number of coins expected in the batch deposit
* @param amount_without_fee deposited amount without the fee
* @param expected_response_code expected HTTP response code.
* @return the command.
*/
struct TALER_TESTING_Command
-TALER_TESTING_cmd_deposit_confirmation (const char *label,
- const char *deposit_reference,
- unsigned int coin_index,
- const char *amount_without_fee,
- unsigned int expected_response_code);
+TALER_TESTING_cmd_deposit_confirmation (
+ const char *label,
+ const char *deposit_reference,
+ unsigned int num_coins,
+ const char *amount_without_fee,
+ unsigned int expected_response_code);
/**
@@ -2729,6 +2727,7 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits,
op (exchange_wd_value, const struct TALER_ExchangeWithdrawValues) \
op (coin_priv, const struct TALER_CoinSpendPrivateKeyP) \
op (coin_pub, const struct TALER_CoinSpendPublicKeyP) \
+ op (coin_sig, const struct TALER_CoinSpendSignatureP) \
op (absolute_time, const struct GNUNET_TIME_Absolute) \
op (timestamp, const struct GNUNET_TIME_Timestamp) \
op (wire_deadline, const struct GNUNET_TIME_Timestamp) \