summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2023-09-11 13:22:15 +0200
committerChristian Grothoff <christian@grothoff.org>2023-09-11 13:22:15 +0200
commit3b99f24648f477a2b7afd890657bb2675e211d31 (patch)
tree5c611d850e6d6d31868f17fc37ddfcf875c132d5 /src
parente967208e8c01af28e2ebde34c8deea326f09e5e3 (diff)
downloadexchange-3b99f24648f477a2b7afd890657bb2675e211d31.tar.gz
exchange-3b99f24648f477a2b7afd890657bb2675e211d31.tar.bz2
exchange-3b99f24648f477a2b7afd890657bb2675e211d31.zip
add support for wallet_data_hash in API
Diffstat (limited to 'src')
-rw-r--r--src/bank-lib/bank_api_common.h2
-rw-r--r--src/exchange/taler-exchange-httpd_batch-deposit.c9
-rw-r--r--src/exchangedb/pg_do_deposit.c2
-rw-r--r--src/include/taler_exchange_service.h48
-rw-r--r--src/include/taler_exchangedb_plugin.h102
-rw-r--r--src/lib/exchange_api_batch_deposit.c20
-rw-r--r--src/lib/exchange_api_common.c2
-rw-r--r--src/testing/testing_api_cmd_batch_deposit.c2
-rw-r--r--src/testing/testing_api_cmd_deposit.c3
9 files changed, 107 insertions, 83 deletions
diff --git a/src/bank-lib/bank_api_common.h b/src/bank-lib/bank_api_common.h
index ac059e9ed..e288a7e6f 100644
--- a/src/bank-lib/bank_api_common.h
+++ b/src/bank-lib/bank_api_common.h
@@ -36,7 +36,7 @@
* @param auth authentication data to use
* @return #GNUNET_OK in success
*/
-int
+enum GNUNET_GenericReturnValue
TALER_BANK_setup_auth_ (CURL *easy,
const struct TALER_BANK_AuthenticationData *auth);
diff --git a/src/exchange/taler-exchange-httpd_batch-deposit.c b/src/exchange/taler-exchange-httpd_batch-deposit.c
index ca206d23c..e2aac1f2a 100644
--- a/src/exchange/taler-exchange-httpd_batch-deposit.c
+++ b/src/exchange/taler-exchange-httpd_batch-deposit.c
@@ -153,9 +153,8 @@ again:
GNUNET_memcmp (&pub,
&pubi))
{
- /* note: in the future, maybe have batch
- sign API to avoid having to handle
- key rollover... */
+ /* note: in the future, maybe have batch sign API to avoid having to
+ handle key rollover... */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Exchange public key changed during batch deposit, trying again\n");
json_decref (arr);
@@ -511,6 +510,10 @@ TEH_handler_batch_deposit (struct TEH_RequestContext *rc,
&bd->merchant_pub),
GNUNET_JSON_spec_fixed_auto ("h_contract_terms",
&bd->h_contract_terms),
+ GNUNET_JSON_spec_mark_optional (
+ GNUNET_JSON_spec_fixed_auto ("wallet_data_hash",
+ &bd->wallet_data_hash),
+ &bd->no_wallet_data_hash),
GNUNET_JSON_spec_array_const ("coins",
&coins),
GNUNET_JSON_spec_mark_optional (
diff --git a/src/exchangedb/pg_do_deposit.c b/src/exchangedb/pg_do_deposit.c
index 3513ba2b5..1e2d1c3c6 100644
--- a/src/exchangedb/pg_do_deposit.c
+++ b/src/exchangedb/pg_do_deposit.c
@@ -50,7 +50,7 @@ TEH_PG_do_deposit (
GNUNET_PQ_query_param_timestamp (&bd->refund_deadline),
GNUNET_PQ_query_param_timestamp (&bd->wire_deadline),
GNUNET_PQ_query_param_auto_from_type (&bd->h_contract_terms),
- (0 == bd->has_wallet_data_hash)
+ (bd->no_wallet_data_hash)
? GNUNET_PQ_query_param_null ()
: GNUNET_PQ_query_param_auto_from_type (&bd->wallet_data_hash),
GNUNET_PQ_query_param_auto_from_type (&bd->wire_salt),
diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h
index a1a1e3997..31f41e178 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -1054,18 +1054,16 @@ struct TALER_EXCHANGE_DepositContractDetail
{
/**
- * Execution date, until which the merchant would like the exchange to
- * settle the balance (advisory, the exchange cannot be forced to settle in
- * the past or upon very short notice, but of course a well-behaved exchange
- * will limit aggregation based on the advice received).
+ * Hash of the contact of the merchant with the customer (further details
+ * are never disclosed to the exchange)
*/
- struct GNUNET_TIME_Timestamp wire_deadline;
+ struct TALER_PrivateContractHashP h_contract_terms;
/**
- * The merchant’s account details, in the payto://-format supported by the
- * exchange.
+ * The public key of the merchant (used to identify the merchant for refund
+ * requests).
*/
- const char *merchant_payto_uri;
+ struct TALER_MerchantPublicKeyP merchant_pub;
/**
* Salt used to hash the @e merchant_payto_uri.
@@ -1073,34 +1071,42 @@ struct TALER_EXCHANGE_DepositContractDetail
struct TALER_WireSaltP wire_salt;
/**
- * Hash of the contact of the merchant with the customer (further details
- * are never disclosed to the exchange)
+ * Hash over data provided by the wallet to customize the contract.
+ * All zero if not used.
*/
- struct TALER_PrivateContractHashP h_contract_terms;
+ struct GNUNET_HashCode wallet_data_hash;
/**
- * Policy extension specific details about the deposit relevant to the exchange.
+ * 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
+ * @e wire_deadline.
*/
- json_t *policy_details;
+ struct GNUNET_TIME_Timestamp refund_deadline;
+
+ /**
+ * Execution date, until which the merchant would like the exchange to
+ * settle the balance (advisory, the exchange cannot be forced to settle in
+ * the past or upon very short notice, but of course a well-behaved exchange
+ * will limit aggregation based on the advice received).
+ */
+ struct GNUNET_TIME_Timestamp wire_deadline;
/**
* Timestamp when the contract was finalized, must match approximately the
* current time of the exchange.
*/
- struct GNUNET_TIME_Timestamp timestamp;
+ struct GNUNET_TIME_Timestamp wallet_timestamp;
/**
- * The public key of the merchant (used to identify the merchant for refund
- * requests).
+ * The merchant’s account details, in the payto://-format supported by the
+ * exchange.
*/
- struct TALER_MerchantPublicKeyP merchant_pub;
+ const char *merchant_payto_uri;
/**
- * 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
- * @e wire_deadline.
+ * Policy extension specific details about the deposit relevant to the exchange.
*/
- struct GNUNET_TIME_Timestamp refund_deadline;
+ const json_t *policy_details;
};
diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h
index 36ce74745..c3be78b4b 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -1727,15 +1727,6 @@ struct TALER_EXCHANGEDB_CoinDepositInformation
*/
struct TALER_EXCHANGEDB_BatchDeposit
{
- /**
- * Array about the coins that are being deposited.
- */
- const struct TALER_EXCHANGEDB_CoinDepositInformation *cdis;
-
- /**
- * Length of the @e cdis array.
- */
- unsigned int num_cdis;
/**
* Public key of the merchant. Enables later identification
@@ -1750,20 +1741,19 @@ struct TALER_EXCHANGEDB_BatchDeposit
struct TALER_PrivateContractHashP h_contract_terms;
/**
- * Salt used by the merchant to compute "h_wire".
+ * Hash over additional inputs by the wallet.
*/
- struct TALER_WireSaltP wire_salt;
+ struct GNUNET_HashCode wallet_data_hash;
/**
- * Information about the receiver for executing the transaction. URI in
- * payto://-format.
+ * Unsalted hash over @e receiver_wire_account.
*/
- const char *receiver_wire_account;
+ struct TALER_PaytoHashP wire_target_h_payto;
/**
- * Unsalted hash over @e receiver_wire_account.
+ * Salt used by the merchant to compute "h_wire".
*/
- struct TALER_PaytoHashP wire_target_h_payto;
+ struct TALER_WireSaltP wire_salt;
/**
* Time when this request was generated. Used, for example, to
@@ -1796,19 +1786,30 @@ struct TALER_EXCHANGEDB_BatchDeposit
struct GNUNET_TIME_Timestamp wire_deadline;
/**
- * Hash over additional inputs by the wallet.
+ * Row ID of the policy details; 0 if no policy applies.
*/
- struct GNUNET_HashCode wallet_data_hash;
+ uint64_t policy_details_serial_id;
/**
- * Row ID of the policy details; 0 if no policy applies.
+ * Information about the receiver for executing the transaction. URI in
+ * payto://-format.
*/
- uint64_t policy_details_serial_id;
+ const char *receiver_wire_account;
+
+ /**
+ * Array about the coins that are being deposited.
+ */
+ const struct TALER_EXCHANGEDB_CoinDepositInformation *cdis;
/**
- * True if @e wallet_data_hash was provided
+ * Length of the @e cdis array.
+ */
+ unsigned int num_cdis;
+
+ /**
+ * False if @e wallet_data_hash was provided
*/
- bool has_wallet_data_hash;
+ bool no_wallet_data_hash;
/**
* True if further processing is blocked by policy.
@@ -1861,10 +1862,10 @@ struct TALER_EXCHANGEDB_Deposit
struct TALER_WireSaltP wire_salt;
/**
- * Information about the receiver for executing the transaction. URI in
- * payto://-format.
+ * Hash over the policy data for this deposit (remains unknown to the
+ * Exchange). Needed for the verification of the deposit's signature
*/
- char *receiver_wire_account;
+ struct TALER_ExtensionPolicyHashP h_policy;
/**
* Time when this request was generated. Used, for example, to
@@ -1907,16 +1908,17 @@ struct TALER_EXCHANGEDB_Deposit
*/
struct TALER_Amount deposit_fee;
- /*
- * True if @e policy_json was provided
+ /**
+ * Information about the receiver for executing the transaction. URI in
+ * payto://-format.
*/
- bool has_policy;
+ char *receiver_wire_account;
/**
- * Hash over the policy data for this deposit (remains unknown to the
- * Exchange). Needed for the verification of the deposit's signature
+ * True if @e policy_json was provided
*/
- struct TALER_ExtensionPolicyHashP h_policy;
+ bool has_policy;
+
};
@@ -1959,20 +1961,26 @@ struct TALER_EXCHANGEDB_DepositListEntry
struct TALER_AgeCommitmentHash h_age_commitment;
/**
- * true, if age commitment is not applicable
+ * Salt used to compute h_wire from the @e receiver_wire_account.
*/
- bool no_age_commitment;
+ struct TALER_WireSaltP wire_salt;
/**
- * Detailed information about the receiver for executing the transaction.
- * URL in payto://-format.
+ * Hash over the policy data for this deposit (remains unknown to the
+ * Exchange). Needed for the verification of the deposit's signature
*/
- char *receiver_wire_account;
+ struct TALER_ExtensionPolicyHashP h_policy;
/**
- * Salt used to compute h_wire from the @e receiver_wire_account.
+ * Fraction of the coin's remaining value to be deposited, including
+ * depositing fee (if any). The coin is identified by @e coin_pub.
*/
- struct TALER_WireSaltP wire_salt;
+ struct TALER_Amount amount_with_fee;
+
+ /**
+ * Depositing fee.
+ */
+ struct TALER_Amount deposit_fee;
/**
* Time when this request was generated. Used, for example, to
@@ -2005,28 +2013,22 @@ struct TALER_EXCHANGEDB_DepositListEntry
struct GNUNET_TIME_Timestamp wire_deadline;
/**
- * Fraction of the coin's remaining value to be deposited, including
- * depositing fee (if any). The coin is identified by @e coin_pub.
+ * Detailed information about the receiver for executing the transaction.
+ * URL in payto://-format.
*/
- struct TALER_Amount amount_with_fee;
+ char *receiver_wire_account;
/**
- * Depositing fee.
+ * true, if age commitment is not applicable
*/
- struct TALER_Amount deposit_fee;
+ bool no_age_commitment;
- /*
+ /**
* True if a policy was provided with the deposit request
*/
bool has_policy;
/**
- * Hash over the policy data for this deposit (remains unknown to the
- * Exchange). Needed for the verification of the deposit's signature
- */
- struct TALER_ExtensionPolicyHashP h_policy;
-
- /**
* Has the deposit been wired?
*/
bool done;
diff --git a/src/lib/exchange_api_batch_deposit.c b/src/lib/exchange_api_batch_deposit.c
index 1fc9c44d1..3aea22b64 100644
--- a/src/lib/exchange_api_batch_deposit.c
+++ b/src/lib/exchange_api_batch_deposit.c
@@ -569,6 +569,7 @@ TALER_EXCHANGE_batch_deposit (
json_t *deposits;
CURL *eh;
struct TALER_Amount amount_without_fee;
+ const struct GNUNET_HashCode *wallet_data_hashp;
if (GNUNET_TIME_timestamp_cmp (dcd->refund_deadline,
>,
@@ -599,6 +600,7 @@ TALER_EXCHANGE_batch_deposit (
{
const struct TALER_EXCHANGE_CoinDepositDetail *cdd = &cdds[i];
const struct TALER_EXCHANGE_DenomPublicKey *dki;
+ const struct TALER_AgeCommitmentHash *h_age_commitmentp;
dki = TALER_EXCHANGE_get_denomination_key_by_hash (keys,
&cdd->h_denom_pub);
@@ -639,6 +641,10 @@ TALER_EXCHANGE_batch_deposit (
GNUNET_free (dh);
return NULL;
}
+ if (GNUNET_is_zero (&cdd->h_age_commitment))
+ h_age_commitmentp = NULL;
+ else
+ h_age_commitmentp = &cdd->h_age_commitment;
GNUNET_assert (
0 ==
json_array_append_new (
@@ -654,7 +660,7 @@ TALER_EXCHANGE_batch_deposit (
&cdd->coin_pub),
GNUNET_JSON_pack_allow_null (
GNUNET_JSON_pack_data_auto ("h_age_commitment",
- &cdd->h_age_commitment)),
+ h_age_commitmentp)),
GNUNET_JSON_pack_data_auto ("coin_sig",
&cdd->coin_sig)
)));
@@ -672,6 +678,11 @@ TALER_EXCHANGE_batch_deposit (
return NULL;
}
+ if (GNUNET_is_zero (&dcd->wallet_data_hash))
+ wallet_data_hashp = NULL;
+ else
+ wallet_data_hashp = &dcd->wallet_data_hash;
+
deposit_obj = GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("merchant_payto_uri",
dcd->merchant_payto_uri),
@@ -682,10 +693,13 @@ TALER_EXCHANGE_batch_deposit (
GNUNET_JSON_pack_array_steal ("coins",
deposits),
GNUNET_JSON_pack_allow_null (
+ GNUNET_JSON_pack_data_auto ("wallet_data_hash",
+ wallet_data_hashp)),
+ GNUNET_JSON_pack_allow_null (
GNUNET_JSON_pack_object_steal ("policy_details",
- dcd->policy_details)),
+ (json_t *) dcd->policy_details)),
GNUNET_JSON_pack_timestamp ("timestamp",
- dcd->timestamp),
+ dcd->wallet_timestamp),
GNUNET_JSON_pack_data_auto ("merchant_pub",
&dcd->merchant_pub),
GNUNET_JSON_pack_allow_null (
diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c
index 08ca4b4e5..ac0c46174 100644
--- a/src/lib/exchange_api_common.c
+++ b/src/lib/exchange_api_common.c
@@ -2148,7 +2148,7 @@ TALER_EXCHANGE_verify_deposit_signature_ (
&cdd->h_age_commitment,
ech,
&cdd->h_denom_pub,
- dcd->timestamp,
+ dcd->wallet_timestamp,
&dcd->merchant_pub,
dcd->refund_deadline,
&cdd->coin_pub,
diff --git a/src/testing/testing_api_cmd_batch_deposit.c b/src/testing/testing_api_cmd_batch_deposit.c
index 77bfd4d59..c1e973cb7 100644
--- a/src/testing/testing_api_cmd_batch_deposit.c
+++ b/src/testing/testing_api_cmd_batch_deposit.c
@@ -382,7 +382,7 @@ batch_deposit_run (void *cls,
.wire_salt = wire_salt,
.h_contract_terms = h_contract_terms,
.policy_details = NULL /* FIXME #7270-OEC */,
- .timestamp = ds->wallet_timestamp,
+ .wallet_timestamp = ds->wallet_timestamp,
.merchant_pub = merchant_pub,
.refund_deadline = ds->refund_deadline
};
diff --git a/src/testing/testing_api_cmd_deposit.c b/src/testing/testing_api_cmd_deposit.c
index 5c98f91a1..0e17dc2ff 100644
--- a/src/testing/testing_api_cmd_deposit.c
+++ b/src/testing/testing_api_cmd_deposit.c
@@ -465,8 +465,7 @@ deposit_run (void *cls,
.merchant_payto_uri = payto_uri,
.wire_salt = wire_salt,
.h_contract_terms = h_contract_terms,
- .policy_details = NULL /* FIXME #7270-OEC */,
- .timestamp = ds->wallet_timestamp,
+ .wallet_timestamp = ds->wallet_timestamp,
.merchant_pub = merchant_pub,
.refund_deadline = ds->refund_deadline
};