diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/exchange_api_melt.c | 15 | ||||
-rw-r--r-- | src/lib/exchange_api_refresh_common.c | 14 | ||||
-rw-r--r-- | src/lib/exchange_api_refreshes_reveal.c | 13 |
3 files changed, 30 insertions, 12 deletions
diff --git a/src/lib/exchange_api_melt.c b/src/lib/exchange_api_melt.c index 906772767..24b064476 100644 --- a/src/lib/exchange_api_melt.c +++ b/src/lib/exchange_api_melt.c @@ -308,7 +308,13 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh) struct TALER_ExchangeWithdrawValues alg_values[mh->rd->fresh_pks_len]; for (unsigned int i = 0; i<mh->rd->fresh_pks_len; i++) - alg_values[i] = mh->mbds[i].alg_value; + { + if (GNUNET_CRYPTO_BSA_RSA == + mh->rd->fresh_pks[i].key.bsign_pub_key->cipher) + alg_values[i] = *TALER_denom_ewv_rsa_singleton (); + else + alg_values[i] = mh->mbds[i].alg_value; + } if (GNUNET_OK != TALER_EXCHANGE_get_melt_data_ (&mh->rms, mh->rd, @@ -470,7 +476,8 @@ csr_cb (void *cls, case GNUNET_CRYPTO_BSA_RSA: break; case GNUNET_CRYPTO_BSA_CS: - *wv = csrr->details.ok.alg_values[nks_off]; + TALER_denom_ewv_deep_copy (wv, + &csrr->details.ok.alg_values[nks_off]); nks_off++; break; } @@ -528,6 +535,8 @@ TALER_EXCHANGE_melt ( GNUNET_free (mh); return NULL; case GNUNET_CRYPTO_BSA_RSA: + TALER_denom_ewv_deep_copy (&mh->mbds[i].alg_value, + TALER_denom_ewv_rsa_singleton ()); break; case GNUNET_CRYPTO_BSA_CS: nks[nks_off].pk = fresh_pk; @@ -568,6 +577,8 @@ TALER_EXCHANGE_melt ( void TALER_EXCHANGE_melt_cancel (struct TALER_EXCHANGE_MeltHandle *mh) { + for (unsigned int i = 0; i<mh->rd->fresh_pks_len; i++) + TALER_denom_ewv_free (&mh->mbds[i].alg_value); if (NULL != mh->job) { GNUNET_CURL_job_cancel (mh->job); diff --git a/src/lib/exchange_api_refresh_common.c b/src/lib/exchange_api_refresh_common.c index 2e92807b3..652581d8e 100644 --- a/src/lib/exchange_api_refresh_common.c +++ b/src/lib/exchange_api_refresh_common.c @@ -102,6 +102,13 @@ TALER_EXCHANGE_get_melt_data_ ( TALER_denom_pub_deep_copy (&fcd->fresh_pk, &rd->fresh_pks[j].key); GNUNET_assert (NULL != fcd->fresh_pk.bsign_pub_key); + if (alg_values[j].blinding_inputs->cipher != + fcd->fresh_pk.bsign_pub_key->cipher) + { + GNUNET_break (0); + TALER_EXCHANGE_free_melt_data_ (md); + return GNUNET_SYSERR; + } switch (fcd->fresh_pk.bsign_pub_key->cipher) { case GNUNET_CRYPTO_BSA_INVALID: @@ -111,13 +118,6 @@ TALER_EXCHANGE_get_melt_data_ ( case GNUNET_CRYPTO_BSA_RSA: break; case GNUNET_CRYPTO_BSA_CS: - if (alg_values[j].blinding_inputs->cipher != - fcd->fresh_pk.bsign_pub_key->cipher) - { - GNUNET_break (0); - TALER_EXCHANGE_free_melt_data_ (md); - return GNUNET_SYSERR; - } uses_cs = true; TALER_cs_refresh_nonce_derive (rms, j, diff --git a/src/lib/exchange_api_refreshes_reveal.c b/src/lib/exchange_api_refreshes_reveal.c index a4ea47763..9161ac3df 100644 --- a/src/lib/exchange_api_refreshes_reveal.c +++ b/src/lib/exchange_api_refreshes_reveal.c @@ -420,6 +420,7 @@ TALER_EXCHANGE_refreshes_reveal ( for (size_t i = 0; i < rd->melt_age_commitment_proof->commitment.num; i++) { enum GNUNET_GenericReturnValue ret; + ret = json_array_append_new ( old_age_commitment, GNUNET_JSON_from_data_auto ( @@ -470,9 +471,13 @@ TALER_EXCHANGE_refreshes_reveal ( rrh->reveal_cb_cls = reveal_cb_cls; rrh->md = md; rrh->alg_values - = GNUNET_memdup (alg_values, - md.num_fresh_coins - * sizeof (struct TALER_ExchangeWithdrawValues)); + = 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); @@ -521,6 +526,8 @@ TALER_EXCHANGE_refreshes_reveal_cancel ( GNUNET_CURL_job_cancel (rrh->job); rrh->job = NULL; } + for (unsigned int i = 0; i<rrh->md.num_fresh_coins; i++) + TALER_denom_ewv_free (&rrh->alg_values[i]); GNUNET_free (rrh->alg_values); GNUNET_free (rrh->url); TALER_curl_easy_post_finished (&rrh->ctx); |