aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2023-10-28 02:01:35 +0200
committerChristian Grothoff <christian@grothoff.org>2023-10-28 02:01:35 +0200
commit58783a8f2859f1bffc48a3417e6d66f76774a896 (patch)
treed9aa739294a7ff8c8af6fd57afc532d0be788f09
parent9c730063ee7f622a4908f7d78f618a3e24040fb2 (diff)
downloadexchange-58783a8f2859f1bffc48a3417e6d66f76774a896.tar.xz
more BS bugfixes
-rw-r--r--src/lib/exchange_api_age_withdraw.c54
-rw-r--r--src/lib/exchange_api_batch_withdraw.c97
-rw-r--r--src/lib/exchange_api_refreshes_reveal.c10
-rw-r--r--src/testing/testing_api_cmd_withdraw.c4
4 files changed, 74 insertions, 91 deletions
diff --git a/src/lib/exchange_api_age_withdraw.c b/src/lib/exchange_api_age_withdraw.c
index 6c6460b2b..5111a56a9 100644
--- a/src/lib/exchange_api_age_withdraw.c
+++ b/src/lib/exchange_api_age_withdraw.c
@@ -813,7 +813,9 @@ csr_withdraw_done (
{
bool success = false;
/* Complete the initialization of the coin with CS denomination */
- can->details.alg_values = csrr->details.ok.alg_values;
+
+ TALER_denom_ewv_deep_copy (&can->details.alg_values,
+ &csrr->details.ok.alg_values);
GNUNET_assert (can->details.alg_values.blinding_inputs->cipher
== GNUNET_CRYPTO_BSA_CS);
TALER_planchet_setup_coin_priv (&can->secret,
@@ -863,7 +865,6 @@ csr_withdraw_done (
default:
break;
}
-
TALER_EXCHANGE_age_withdraw_cancel (awh);
}
@@ -907,11 +908,10 @@ prepare_coins (
{
struct CoinData *cd = &awh->coin_data[i];
const struct TALER_EXCHANGE_AgeWithdrawCoinInput *input = &coin_inputs[i];
- cd->denom_pub = *input->denom_pub;
+ cd->denom_pub = *input->denom_pub;
/* The mask must be the same for all coins */
FAIL_IF (awh->age_mask.bits != input->denom_pub->key.age_mask.bits);
-
TALER_denom_pub_deep_copy (&cd->denom_pub.key,
&input->denom_pub->key);
@@ -935,28 +935,28 @@ prepare_coins (
switch (input->denom_pub->key.bsign_pub_key->cipher)
{
case GNUNET_CRYPTO_BSA_RSA:
- {
- TALER_planchet_setup_coin_priv (&can->secret,
- &can->details.alg_values,
- &can->details.coin_priv);
- TALER_planchet_blinding_secret_create (&can->secret,
- &can->details.alg_values,
- &can->details.blinding_key);
- FAIL_IF (GNUNET_OK !=
- TALER_planchet_prepare (&cd->denom_pub.key,
- NULL,
- &can->details.blinding_key,
- NULL,
- &can->details.coin_priv,
- &can->details.h_age_commitment,
- &can->details.h_coin_pub,
- planchet));
- FAIL_IF (GNUNET_OK !=
- TALER_coin_ev_hash (&planchet->blinded_planchet,
- &planchet->denom_pub_hash,
- &can->blinded_coin_h));
- break;
- }
+ TALER_denom_ewv_deep_copy (&can->details.alg_values,
+ TALER_denom_ewv_rsa_singleton ());
+ TALER_planchet_setup_coin_priv (&can->secret,
+ &can->details.alg_values,
+ &can->details.coin_priv);
+ TALER_planchet_blinding_secret_create (&can->secret,
+ &can->details.alg_values,
+ &can->details.blinding_key);
+ FAIL_IF (GNUNET_OK !=
+ TALER_planchet_prepare (&cd->denom_pub.key,
+ NULL,
+ &can->details.blinding_key,
+ NULL,
+ &can->details.coin_priv,
+ &can->details.h_age_commitment,
+ &can->details.h_coin_pub,
+ planchet));
+ FAIL_IF (GNUNET_OK !=
+ TALER_coin_ev_hash (&planchet->blinded_planchet,
+ &planchet->denom_pub_hash,
+ &can->blinded_coin_h));
+ break;
case GNUNET_CRYPTO_BSA_CS:
{
struct CSRClosure *cls = &cd->csr_cls[k];
@@ -1052,6 +1052,7 @@ TALER_EXCHANGE_age_withdraw_cancel (
{
struct TALER_PlanchetDetail *planchet = &cd->planchet_details[k];
struct CSRClosure *cls = &cd->csr_cls[k];
+ struct CoinCandidate *can = &cd->coin_candidates[k];
if (NULL != cls->csr_withdraw_handle)
{
@@ -1059,6 +1060,7 @@ TALER_EXCHANGE_age_withdraw_cancel (
cls->csr_withdraw_handle = NULL;
}
TALER_blinded_planchet_free (&planchet->blinded_planchet);
+ TALER_denom_ewv_free (&can->details.alg_values);
}
TALER_denom_pub_free (&cd->denom_pub.key);
}
diff --git a/src/lib/exchange_api_batch_withdraw.c b/src/lib/exchange_api_batch_withdraw.c
index b8d40ef77..cd3286f3c 100644
--- a/src/lib/exchange_api_batch_withdraw.c
+++ b/src/lib/exchange_api_batch_withdraw.c
@@ -192,10 +192,6 @@ handle_reserve_batch_withdraw_finished (
struct CoinData *cd = &wh->coins[i];
struct TALER_EXCHANGE_PrivateCoinDetails *coin = &coins[i];
struct TALER_FreshCoin fc;
- const struct TALER_ExchangeWithdrawValues *alg_values
- = (GNUNET_CRYPTO_BSA_RSA != cd->pk.key.bsign_pub_key->cipher)
- ? &cd->alg_values
- : TALER_denom_ewv_rsa_singleton ();
if (GNUNET_OK !=
TALER_planchet_to_coin (&cd->pk.key,
@@ -204,7 +200,7 @@ handle_reserve_batch_withdraw_finished (
&cd->priv,
cd->ach,
&cd->c_hash,
- alg_values,
+ &cd->alg_values,
&fc))
{
wr.hr.http_status = 0;
@@ -308,9 +304,8 @@ withdraw_cs_stage_two_callback (
switch (csrr->hr.http_status)
{
case MHD_HTTP_OK:
- cd->alg_values.blinding_inputs
- = GNUNET_CRYPTO_blinding_input_values_incref (
- csrr->details.ok.alg_values.blinding_inputs);
+ TALER_denom_ewv_deep_copy (&cd->alg_values,
+ &csrr->details.ok.alg_values);
TALER_planchet_setup_coin_priv (&cd->ps,
&cd->alg_values,
&cd->priv);
@@ -380,53 +375,48 @@ TALER_EXCHANGE_batch_withdraw (
switch (wci->pk->key.bsign_pub_key->cipher)
{
case GNUNET_CRYPTO_BSA_RSA:
+ TALER_denom_ewv_deep_copy (&cd->alg_values,
+ TALER_denom_ewv_rsa_singleton ());
+ TALER_planchet_setup_coin_priv (&cd->ps,
+ &cd->alg_values,
+ &cd->priv);
+ TALER_planchet_blinding_secret_create (&cd->ps,
+ &cd->alg_values,
+ &cd->bks);
+ if (GNUNET_OK !=
+ TALER_planchet_prepare (&cd->pk.key,
+ &cd->alg_values,
+ &cd->bks,
+ NULL,
+ &cd->priv,
+ cd->ach,
+ &cd->c_hash,
+ &cd->pd))
{
- const struct TALER_ExchangeWithdrawValues *alg_values
- = TALER_denom_ewv_rsa_singleton ();
-
- TALER_planchet_setup_coin_priv (&cd->ps,
- alg_values,
- &cd->priv);
- TALER_planchet_blinding_secret_create (&cd->ps,
- alg_values,
- &cd->bks);
- if (GNUNET_OK !=
- TALER_planchet_prepare (&cd->pk.key,
- alg_values,
- &cd->bks,
- NULL,
- &cd->priv,
- cd->ach,
- &cd->c_hash,
- &cd->pd))
- {
- GNUNET_break (0);
- TALER_EXCHANGE_batch_withdraw_cancel (wh);
- return NULL;
- }
- break;
+ GNUNET_break (0);
+ TALER_EXCHANGE_batch_withdraw_cancel (wh);
+ return NULL;
}
+ break;
case GNUNET_CRYPTO_BSA_CS:
+ TALER_cs_withdraw_nonce_derive (
+ &cd->ps,
+ &cd->nonce.cs_nonce);
+ cd->csrh = TALER_EXCHANGE_csr_withdraw (
+ curl_ctx,
+ exchange_url,
+ &cd->pk,
+ &cd->nonce.cs_nonce,
+ &withdraw_cs_stage_two_callback,
+ cd);
+ if (NULL == cd->csrh)
{
- TALER_cs_withdraw_nonce_derive (
- &cd->ps,
- &cd->nonce.cs_nonce);
- cd->csrh = TALER_EXCHANGE_csr_withdraw (
- curl_ctx,
- exchange_url,
- &cd->pk,
- &cd->nonce.cs_nonce,
- &withdraw_cs_stage_two_callback,
- cd);
- if (NULL == cd->csrh)
- {
- GNUNET_break (0);
- TALER_EXCHANGE_batch_withdraw_cancel (wh);
- return NULL;
- }
- wh->cs_pending++;
- break;
+ GNUNET_break (0);
+ TALER_EXCHANGE_batch_withdraw_cancel (wh);
+ return NULL;
}
+ wh->cs_pending++;
+ break;
default:
GNUNET_break (0);
TALER_EXCHANGE_batch_withdraw_cancel (wh);
@@ -452,12 +442,7 @@ TALER_EXCHANGE_batch_withdraw_cancel (
TALER_EXCHANGE_csr_withdraw_cancel (cd->csrh);
cd->csrh = NULL;
}
- if (NULL != cd->alg_values.blinding_inputs)
- {
- GNUNET_CRYPTO_blinding_input_values_decref (
- cd->alg_values.blinding_inputs);
- cd->alg_values.blinding_inputs = NULL;
- }
+ TALER_denom_ewv_free (&cd->alg_values);
TALER_blinded_planchet_free (&cd->pd.blinded_planchet);
TALER_denom_pub_free (&cd->pk.key);
}
diff --git a/src/lib/exchange_api_refreshes_reveal.c b/src/lib/exchange_api_refreshes_reveal.c
index 9161ac3df..7eadab228 100644
--- a/src/lib/exchange_api_refreshes_reveal.c
+++ b/src/lib/exchange_api_refreshes_reveal.c
@@ -144,17 +144,13 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshesRevealHandle *rrh,
rci->ps = fcd->ps[rrh->noreveal_index];
rci->bks = fcd->bks[rrh->noreveal_index];
rci->age_commitment_proof = NULL;
-
pk = &fcd->fresh_pk;
jsonai = json_array_get (jsona, i);
-
GNUNET_assert (NULL != jsonai);
-
if (NULL != rrh->md.melted_coin.age_commitment_proof)
{
- rci->age_commitment_proof =
- fcd->age_commitment_proofs[rrh->noreveal_index];
-
+ rci->age_commitment_proof
+ = fcd->age_commitment_proofs[rrh->noreveal_index];
TALER_age_commitment_hash (&rci->age_commitment_proof->commitment,
&rci->h_age_commitment);
pah = &rci->h_age_commitment;
@@ -474,10 +470,8 @@ TALER_EXCHANGE_refreshes_reveal (
= GNUNET_new_array (md.num_fresh_coins,
struct TALER_ExchangeWithdrawValues);
for (unsigned int i = 0; i<md.num_fresh_coins; i++)
- {
TALER_denom_ewv_deep_copy (&rrh->alg_values[i],
&alg_values[i]);
- }
rrh->url = TALER_url_join (url,
arg_str,
NULL);
diff --git a/src/testing/testing_api_cmd_withdraw.c b/src/testing/testing_api_cmd_withdraw.c
index b9fde7ef0..13162a34a 100644
--- a/src/testing/testing_api_cmd_withdraw.c
+++ b/src/testing/testing_api_cmd_withdraw.c
@@ -297,7 +297,8 @@ reserve_withdraw_cb (void *cls,
&wr->details.ok.coins[0].sig);
ws->coin_priv = wr->details.ok.coins[0].coin_priv;
ws->bks = wr->details.ok.coins[0].bks;
- ws->exchange_vals = wr->details.ok.coins[0].exchange_vals;
+ TALER_denom_ewv_deep_copy (&ws->exchange_vals,
+ &wr->details.ok.coins[0].exchange_vals);
if (0 != ws->total_backoff.rel_value_us)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -489,6 +490,7 @@ withdraw_cleanup (void *cls,
ws->retry_task = NULL;
}
TALER_denom_sig_free (&ws->sig);
+ TALER_denom_ewv_free (&ws->exchange_vals);
if (NULL != ws->pk)
{
TALER_EXCHANGE_destroy_denomination_key (ws->pk);