diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/taler_crypto_lib.h | 27 | ||||
| -rw-r--r-- | src/lib/exchange_api_melt.c | 12 | ||||
| -rw-r--r-- | src/lib/exchange_api_recoup.c | 12 | ||||
| -rw-r--r-- | src/lib/exchange_api_refresh_common.c | 8 | ||||
| -rw-r--r-- | src/lib/exchange_api_refreshes_reveal.c | 30 | ||||
| -rw-r--r-- | src/lib/exchange_api_refund.c | 2 | ||||
| -rw-r--r-- | src/lib/exchange_api_transfers_get.c | 2 | ||||
| -rw-r--r-- | src/lib/exchange_api_withdraw.c | 16 | ||||
| -rw-r--r-- | src/lib/exchange_api_withdraw2.c | 2 | ||||
| -rw-r--r-- | src/util/crypto.c | 21 | ||||
| -rw-r--r-- | src/util/crypto_wire.c | 2 | 
11 files changed, 89 insertions, 45 deletions
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h index 3507ebe5..266ab728 100644 --- a/src/include/taler_crypto_lib.h +++ b/src/include/taler_crypto_lib.h @@ -603,7 +603,7 @@ struct TALER_TrackTransferDetails    /**     * Hash of the proposal data.     */ -  struct GNUNET_HashCode h_contract_terms; +  struct TALER_PrivateContractHash h_contract_terms;    /**     * Which coin was deposited? @@ -728,6 +728,31 @@ TALER_test_coin_valid (const struct TALER_CoinPublicInfo *coin_public_info,                         const struct TALER_DenominationPublicKey *denom_pub); +/** + * Compute the hash of a blinded coin. + * + * @param coin_ev blinded coin + * @param coin_ev_size number of bytes in @a coin_ev + * @param[out] bch where to write the hash + */ +void +TALER_coin_ev_hash (const void *coin_ev, +                    size_t coin_ev_size, +                    struct TALER_BlindedCoinHash *bch); + + +/** + * Compute the hash of a coin. + * FIXME-Oec: add age restriction hash here! + * + * @param coin_pub public key of the coin + * @param[out] coin_h where to write the hash + */ +void +TALER_coin_pub_hash (const struct TALER_CoinSpendPublicKeyP *coin_pub, +                     struct TALER_CoinPubHash *coin_h); + +  GNUNET_NETWORK_STRUCT_BEGIN  /** diff --git a/src/lib/exchange_api_melt.c b/src/lib/exchange_api_melt.c index 56475bf2..5b6dd96e 100644 --- a/src/lib/exchange_api_melt.c +++ b/src/lib/exchange_api_melt.c @@ -226,7 +226,7 @@ verify_melt_signature_spend_conflict (struct TALER_EXCHANGE_MeltHandle *mh,    };    const struct MeltedCoin *mc;    enum TALER_ErrorCode ec; -  struct GNUNET_HashCode h_denom_pub; +  struct TALER_DenominationHash h_denom_pub;    /* parse JSON reply */    if (GNUNET_OK != @@ -486,8 +486,8 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,                       &md->melted_coin.fee_melt);    GNUNET_CRYPTO_eddsa_key_get_public (&md->melted_coin.coin_priv.eddsa_priv,                                        &melt.coin_pub.eddsa_pub); -  GNUNET_CRYPTO_rsa_public_key_hash (md->melted_coin.pub_key.rsa_public_key, -                                     &melt.h_denom_pub); +  TALER_denom_pub_hash (&md->melted_coin.pub_key, +                        &melt.h_denom_pub);    GNUNET_CRYPTO_eddsa_sign (&md->melted_coin.coin_priv.eddsa_priv,                              &melt,                              &confirm_sig.eddsa_signature); @@ -529,8 +529,10 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,    mh->exchange = exchange;    mh->coin_pub = melt.coin_pub;    mh->dki = *dki; -  mh->dki.key.rsa_public_key = NULL; /* lifetime not warranted, so better -                                         not copy the pointer */ +  memset (&mh->dki.key, +          0, +          sizeof (mh->dki.key)); /* lifetime not warranted, so better +                                    not copy the pointers */    mh->melt_cb = melt_cb;    mh->melt_cb_cls = melt_cb_cls;    mh->md = md; diff --git a/src/lib/exchange_api_recoup.c b/src/lib/exchange_api_recoup.c index 09d99b23..3a6fd87f 100644 --- a/src/lib/exchange_api_recoup.c +++ b/src/lib/exchange_api_recoup.c @@ -187,7 +187,7 @@ handle_recoup_finished (void *cls,        /* Insufficient funds, proof attached */        json_t *history;        struct TALER_Amount total; -      struct GNUNET_HashCode h_denom_pub; +      struct TALER_DenominationHash h_denom_pub;        const struct TALER_EXCHANGE_DenomPublicKey *dki;        enum TALER_ErrorCode ec; @@ -313,7 +313,7 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,    struct GNUNET_CURL_Context *ctx;    struct TALER_RecoupRequestPS pr;    struct TALER_CoinSpendSignatureP coin_sig; -  struct GNUNET_HashCode h_denom_pub; +  struct TALER_DenominationHash h_denom_pub;    json_t *recoup_obj;    CURL *eh;    char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32]; @@ -324,8 +324,8 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,    pr.purpose.size = htonl (sizeof (struct TALER_RecoupRequestPS));    GNUNET_CRYPTO_eddsa_key_get_public (&ps->coin_priv.eddsa_priv,                                        &pr.coin_pub.eddsa_pub); -  GNUNET_CRYPTO_rsa_public_key_hash (pk->key.rsa_public_key, -                                     &h_denom_pub); +  TALER_denom_pub_hash (&pk->key, +                        &h_denom_pub);    pr.h_denom_pub = pk->h_key;    pr.coin_blind = ps->blinding_key;    GNUNET_CRYPTO_eddsa_sign (&ps->coin_priv.eddsa_priv, @@ -362,7 +362,9 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,    ph->coin_pub = pr.coin_pub;    ph->exchange = exchange;    ph->pk = *pk; -  ph->pk.key.rsa_public_key = NULL; /* zero out, as lifetime cannot be warranted */ +  memset (&ph->pk.key, +          0, +          sizeof (ph->pk.key)); /* zero out, as lifetime cannot be warranted */    ph->cb = recoup_cb;    ph->cb_cls = recoup_cb_cls;    ph->url = TEAH_path_to_url (exchange, diff --git a/src/lib/exchange_api_refresh_common.c b/src/lib/exchange_api_refresh_common.c index 048cf60e..8f350dc9 100644 --- a/src/lib/exchange_api_refresh_common.c +++ b/src/lib/exchange_api_refresh_common.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -32,10 +32,8 @@  static void  free_melted_coin (struct MeltedCoin *mc)  { -  if (NULL != mc->pub_key.rsa_public_key) -    GNUNET_CRYPTO_rsa_public_key_free (mc->pub_key.rsa_public_key); -  if (NULL != mc->sig.rsa_signature) -    GNUNET_CRYPTO_rsa_signature_free (mc->sig.rsa_signature); +  TALER_denom_pub_free (&mc->pub_key); +  TALER_denom_sig_free (&mc->sig);  } diff --git a/src/lib/exchange_api_refreshes_reveal.c b/src/lib/exchange_api_refreshes_reveal.c index f54487ae..1cb9eada 100644 --- a/src/lib/exchange_api_refreshes_reveal.c +++ b/src/lib/exchange_api_refreshes_reveal.c @@ -98,14 +98,15 @@ struct TALER_EXCHANGE_RefreshesRevealHandle   * @param[out] sigs array of length `num_fresh_coins`, initialized to contain RSA signatures   * @return #GNUNET_OK on success, #GNUNET_SYSERR on errors   */ -static int +static enum GNUNET_GenericReturnValue  refresh_reveal_ok (struct TALER_EXCHANGE_RefreshesRevealHandle *rrh,                     const json_t *json,                     struct TALER_DenominationSignature *sigs)  {    json_t *jsona;    struct GNUNET_JSON_Specification outer_spec[] = { -    GNUNET_JSON_spec_json ("ev_sigs", &jsona), +    GNUNET_JSON_spec_json ("ev_sigs", +                           &jsona),      GNUNET_JSON_spec_end ()    }; @@ -138,9 +139,10 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshesRevealHandle *rrh,      json_t *jsonai;      struct GNUNET_CRYPTO_RsaSignature *blind_sig;      struct TALER_CoinSpendPublicKeyP coin_pub; -    struct GNUNET_HashCode coin_hash; +    struct TALER_CoinPubHash coin_hash;      struct GNUNET_JSON_Specification spec[] = { -      GNUNET_JSON_spec_rsa_signature ("ev_sig", &blind_sig), +      GNUNET_JSON_spec_rsa_signature ("ev_sig", +                                      &blind_sig),        GNUNET_JSON_spec_end ()      };      struct TALER_FreshCoin coin; @@ -164,9 +166,8 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshesRevealHandle *rrh,         hence recomputing it here... */      GNUNET_CRYPTO_eddsa_key_get_public (&fc->coin_priv.eddsa_priv,                                          &coin_pub.eddsa_pub); -    GNUNET_CRYPTO_hash (&coin_pub.eddsa_pub, -                        sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), -                        &coin_hash); +    TALER_coin_pub_hash (&coin_pub, +                         &coin_hash);      if (GNUNET_OK !=          TALER_planchet_to_coin (pk,                                  blind_sig, @@ -218,7 +219,9 @@ handle_refresh_reveal_finished (void *cls,        struct TALER_DenominationSignature sigs[rrh->md->num_fresh_coins];        int ret; -      memset (sigs, 0, sizeof (sigs)); +      memset (sigs, +              0, +              sizeof (sigs));        ret = refresh_reveal_ok (rrh,                                 j,                                 sigs); @@ -237,8 +240,7 @@ handle_refresh_reveal_finished (void *cls,          rrh->reveal_cb = NULL;        }        for (unsigned int i = 0; i<rrh->md->num_fresh_coins; i++) -        if (NULL != sigs[i].rsa_signature) -          GNUNET_CRYPTO_rsa_signature_free (sigs[i].rsa_signature); +        TALER_denom_sig_free (&sigs[i]);        TALER_EXCHANGE_refreshes_reveal_cancel (rrh);        return;      } @@ -342,12 +344,12 @@ TALER_EXCHANGE_refreshes_reveal (    GNUNET_assert (NULL != (link_sigs = json_array ()));    for (unsigned int i = 0; i<md->num_fresh_coins; i++)    { -    struct GNUNET_HashCode denom_hash; +    struct TALER_DenominationHash denom_hash;      struct TALER_PlanchetDetail pd; -    struct GNUNET_HashCode c_hash; +    struct TALER_CoinPubHash c_hash; -    GNUNET_CRYPTO_rsa_public_key_hash (md->fresh_pks[i].rsa_public_key, -                                       &denom_hash); +    TALER_denom_pub_hash (&md->fresh_pks[i], +                          &denom_hash);      GNUNET_assert (0 ==                     json_array_append_new (new_denoms_h,                                            GNUNET_JSON_from_data_auto ( diff --git a/src/lib/exchange_api_refund.c b/src/lib/exchange_api_refund.c index f83a2985..a73f19fc 100644 --- a/src/lib/exchange_api_refund.c +++ b/src/lib/exchange_api_refund.c @@ -638,7 +638,7 @@ handle_refund_finished (void *cls,  struct TALER_EXCHANGE_RefundHandle *  TALER_EXCHANGE_refund (struct TALER_EXCHANGE_Handle *exchange,                         const struct TALER_Amount *amount, -                       const struct GNUNET_HashCode *h_contract_terms, +                       const struct TALER_PrivateContractHash *h_contract_terms,                         const struct TALER_CoinSpendPublicKeyP *coin_pub,                         uint64_t rtransaction_id,                         const struct TALER_MerchantPrivateKeyP *merchant_priv, diff --git a/src/lib/exchange_api_transfers_get.c b/src/lib/exchange_api_transfers_get.c index 1f6e419c..0002d6af 100644 --- a/src/lib/exchange_api_transfers_get.c +++ b/src/lib/exchange_api_transfers_get.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014-2020 Taler Systems SA +  Copyright (C) 2014-2021 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 diff --git a/src/lib/exchange_api_withdraw.c b/src/lib/exchange_api_withdraw.c index 85b7e7db..8e00cfcd 100644 --- a/src/lib/exchange_api_withdraw.c +++ b/src/lib/exchange_api_withdraw.c @@ -71,7 +71,7 @@ struct TALER_EXCHANGE_WithdrawHandle    /**     * Hash of the public key of the coin we are signing.     */ -  struct GNUNET_HashCode c_hash; +  struct TALER_CoinPubHash c_hash;  }; @@ -142,7 +142,7 @@ handle_reserve_withdraw_finished (    wh->cb (wh->cb_cls,            &wr);    if (MHD_HTTP_OK == hr->http_status) -    GNUNET_CRYPTO_rsa_signature_free (wr.details.success.sig.rsa_signature); +    TALER_denom_sig_free (&wr.details.success.sig);    TALER_EXCHANGE_withdraw_cancel (wh);  } @@ -193,8 +193,8 @@ TALER_EXCHANGE_withdraw (      GNUNET_free (wh);      return NULL;    } -  wh->pk.key.rsa_public_key -    = GNUNET_CRYPTO_rsa_public_key_dup (pk->key.rsa_public_key); +  TALER_denom_pub_deep_copy (&wh->pk.key, +                             &pk->key);    wh->wh2 = TALER_EXCHANGE_withdraw2 (exchange,                                        &pd,                                        reserve_priv, @@ -205,12 +205,6 @@ TALER_EXCHANGE_withdraw (  } -/** - * Cancel a withdraw status request.  This function cannot be used - * on a request handle if a response is already served for it. - * - * @param wh the withdraw sign request handle - */  void  TALER_EXCHANGE_withdraw_cancel (struct TALER_EXCHANGE_WithdrawHandle *wh)  { @@ -219,6 +213,6 @@ TALER_EXCHANGE_withdraw_cancel (struct TALER_EXCHANGE_WithdrawHandle *wh)      TALER_EXCHANGE_withdraw2_cancel (wh->wh2);      wh->wh2 = NULL;    } -  GNUNET_CRYPTO_rsa_public_key_free (wh->pk.key.rsa_public_key); +  TALER_denom_pub_free (&wh->pk.key);    GNUNET_free (wh);  } diff --git a/src/lib/exchange_api_withdraw2.c b/src/lib/exchange_api_withdraw2.c index 330f93d7..e001a315 100644 --- a/src/lib/exchange_api_withdraw2.c +++ b/src/lib/exchange_api_withdraw2.c @@ -437,7 +437,7 @@ TALER_EXCHANGE_withdraw2 (      TALER_amount_hton (&req.amount_with_fee,                         &wh->requested_amount); -    GNUNET_CRYPTO_hash (pd->coin_ev, +    TALER_coin_ev_hash (pd->coin_ev,                          pd->coin_ev_size,                          &req.h_coin_envelope);      GNUNET_CRYPTO_eddsa_sign (&reserve_priv->eddsa_priv, diff --git a/src/util/crypto.c b/src/util/crypto.c index 5d1f0d08..c7b45945 100644 --- a/src/util/crypto.c +++ b/src/util/crypto.c @@ -339,4 +339,25 @@ TALER_rsa_unblind (const struct GNUNET_CRYPTO_RsaSignature *sig,  } +void +TALER_coin_ev_hash (const void *coin_ev, +                    size_t coin_ev_size, +                    struct TALER_BlindedCoinHash *bch) +{ +  GNUNET_CRYPTO_hash (coin_ev, +                      coin_ev_size, +                      &bch->hash); +} + + +void +TALER_coin_pub_hash (const struct TALER_CoinSpendPublicKeyP *coin_pub, +                     struct TALER_CoinPubHash *coin_h) +{ +  GNUNET_CRYPTO_hash (&coin_pub->eddsa_pub, +                      sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), +                      &coin_h->hash); +} + +  /* end of crypto.c */ diff --git a/src/util/crypto_wire.c b/src/util/crypto_wire.c index 8560aaf3..1975b518 100644 --- a/src/util/crypto_wire.c +++ b/src/util/crypto_wire.c @@ -19,7 +19,7 @@   * @author Christian Grothoff <christian@grothoff.org>   */  #include "platform.h" -#include "taler_crypto_lib.h" +#include "taler_util.h"  #include "taler_signatures.h"  | 
