diff options
Diffstat (limited to 'src/exchange-lib')
-rw-r--r-- | src/exchange-lib/exchange_api_refresh.c | 38 | ||||
-rw-r--r-- | src/exchange-lib/exchange_api_reserve.c | 17 |
2 files changed, 42 insertions, 13 deletions
diff --git a/src/exchange-lib/exchange_api_refresh.c b/src/exchange-lib/exchange_api_refresh.c index b86e58362..8331f5e78 100644 --- a/src/exchange-lib/exchange_api_refresh.c +++ b/src/exchange-lib/exchange_api_refresh.c @@ -851,10 +851,18 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr GNUNET_CRYPTO_hash (&coin_pub.eddsa_pub, sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), &coin_hash); - coin_ev_size = GNUNET_CRYPTO_rsa_blind (&coin_hash, - &fc->blinding_key.bks, - md.fresh_pks[j].rsa_public_key, - &coin_ev); + if (GNUNET_YES != + GNUNET_CRYPTO_rsa_blind (&coin_hash, + &fc->blinding_key.bks, + md.fresh_pks[j].rsa_public_key, + &coin_ev, + &coin_ev_size)) + { + GNUNET_break_op (0); + GNUNET_CRYPTO_hash_context_abort (hash_context); + free_melt_data (&md); + return NULL; + } GNUNET_CRYPTO_hash_context_read (hash_context, coin_ev, coin_ev_size); @@ -1378,10 +1386,24 @@ TALER_EXCHANGE_refresh_melt (struct TALER_EXCHANGE_Handle *exchange, GNUNET_CRYPTO_hash (&coin_pub.eddsa_pub, sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), &coin_hash); - coin_ev_size = GNUNET_CRYPTO_rsa_blind (&coin_hash, - &fc->blinding_key.bks, - md->fresh_pks[i].rsa_public_key, - &coin_ev); + if (GNUNET_YES != + GNUNET_CRYPTO_rsa_blind (&coin_hash, + &fc->blinding_key.bks, + md->fresh_pks[i].rsa_public_key, + &coin_ev, + &coin_ev_size)) + { + /* This should have been noticed during the preparation stage. */ + GNUNET_break (0); + json_decref (new_denoms); + json_decref (tmp); + json_decref (coin_evs); + json_decref (melt_coin); + json_decref (transfer_pubs); + json_decref (secret_encs); + json_decref (link_encs); + return NULL; + } json_array_append (tmp, GNUNET_JSON_from_data (coin_ev, coin_ev_size)); diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index 82e602a46..2b07223af 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -784,7 +784,7 @@ handle_reserve_withdraw_finished (void *cls, * caller must have committed this value to disk before the call (with @a pk) * @param res_cb the callback to call when the final result for this request is available * @param res_cb_cls closure for the above callback - * @return #GNUNET_OK on success, #GNUNET_SYSERR + * @return handle for the operation on success, NULL on error, i.e. * if the inputs are invalid (i.e. denomination key not with this exchange). * In this case, the callback is not called. */ @@ -819,10 +819,17 @@ TALER_EXCHANGE_reserve_withdraw (struct TALER_EXCHANGE_Handle *exchange, GNUNET_CRYPTO_hash (&coin_pub.eddsa_pub, sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), &wsh->c_hash); - coin_ev_size = GNUNET_CRYPTO_rsa_blind (&wsh->c_hash, - &blinding_key->bks, - pk->key.rsa_public_key, - &coin_ev); + if (GNUNET_YES != + GNUNET_CRYPTO_rsa_blind (&wsh->c_hash, + &blinding_key->bks, + pk->key.rsa_public_key, + &coin_ev, + &coin_ev_size)) + { + GNUNET_break_op (0); + GNUNET_free (wsh); + return NULL; + } GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv, &wsh->reserve_pub.eddsa_pub); req.purpose.size = htonl (sizeof (struct TALER_WithdrawRequestPS)); |