diff options
Diffstat (limited to 'src/exchange-lib')
| -rw-r--r-- | src/exchange-lib/exchange_api_payback.c | 14 | ||||
| -rw-r--r-- | src/exchange-lib/exchange_api_refresh.c | 119 | ||||
| -rw-r--r-- | src/exchange-lib/exchange_api_reserve.c | 82 | ||||
| -rw-r--r-- | src/exchange-lib/test_exchange_api.c | 46 | 
4 files changed, 97 insertions, 164 deletions
| diff --git a/src/exchange-lib/exchange_api_payback.c b/src/exchange-lib/exchange_api_payback.c index 40b71385..ec0cda15 100644 --- a/src/exchange-lib/exchange_api_payback.c +++ b/src/exchange-lib/exchange_api_payback.c @@ -260,8 +260,7 @@ handle_payback_finished (void *cls,   * @param exchange the exchange handle; the exchange must be ready to operate   * @param pk kind of coin to pay back   * @param denom_sig signature over the coin by the exchange using @a pk - * @param coin_priv the coin's private key, - * @param blinding_key where to fetch the coin's blinding key + * @param ps secret internals of the original planchet   * @param payback_cb the callback to call when the final result for this request is available   * @param payback_cb_cls closure for @a payback_cb   * @return NULL @@ -272,8 +271,7 @@ struct TALER_EXCHANGE_PaybackHandle *  TALER_EXCHANGE_payback (struct TALER_EXCHANGE_Handle *exchange,                          const struct TALER_EXCHANGE_DenomPublicKey *pk,                          const struct TALER_DenominationSignature *denom_sig, -                        const struct TALER_CoinSpendPrivateKeyP *coin_priv, -                        const struct TALER_DenominationBlindingKeyP *blinding_key, +                        const struct TALER_PlanchetSecretsP *ps,                          TALER_EXCHANGE_PaybackResultCallback payback_cb,                          void *payback_cb_cls)  { @@ -288,12 +286,12 @@ TALER_EXCHANGE_payback (struct TALER_EXCHANGE_Handle *exchange,  		 MAH_handle_is_ready (exchange));    pr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_PAYBACK);    pr.purpose.size = htonl (sizeof (struct TALER_PaybackRequestPS)); -  GNUNET_CRYPTO_eddsa_key_get_public (&coin_priv->eddsa_priv, +  GNUNET_CRYPTO_eddsa_key_get_public (&ps->coin_priv.eddsa_priv,                                        &pr.coin_pub.eddsa_pub);    pr.h_denom_pub = pk->h_key; -  pr.coin_blind = *blinding_key; +  pr.coin_blind = ps->blinding_key;    GNUNET_assert (GNUNET_OK == -                 GNUNET_CRYPTO_eddsa_sign (&coin_priv->eddsa_priv, +                 GNUNET_CRYPTO_eddsa_sign (&ps->coin_priv.eddsa_priv,                                             &pr.purpose,                                             &coin_sig.eddsa_signature)); @@ -304,7 +302,7 @@ TALER_EXCHANGE_payback (struct TALER_EXCHANGE_Handle *exchange,                             "denom_sig", GNUNET_JSON_from_rsa_signature (denom_sig->rsa_signature),                             "coin_pub", GNUNET_JSON_from_data_auto (&pr.coin_pub),                             "coin_sig", GNUNET_JSON_from_data_auto (&coin_sig), -                           "coin_blind_key_secret", GNUNET_JSON_from_data_auto (blinding_key) +                           "coin_blind_key_secret", GNUNET_JSON_from_data_auto (&ps->blinding_key)  			  );    if (NULL == payback_obj)    { diff --git a/src/exchange-lib/exchange_api_refresh.c b/src/exchange-lib/exchange_api_refresh.c index 510b6e40..305747f6 100644 --- a/src/exchange-lib/exchange_api_refresh.c +++ b/src/exchange-lib/exchange_api_refresh.c @@ -236,18 +236,16 @@ free_melted_coin (struct MeltedCoin *mc)  static void  free_melt_data (struct MeltData *md)  { -  unsigned int i; -    free_melted_coin (&md->melted_coin);    if (NULL != md->fresh_pks)    { -    for (i=0;i<md->num_fresh_coins;i++) +    for (unsigned int i=0;i<md->num_fresh_coins;i++)        if (NULL != md->fresh_pks[i].rsa_public_key)          GNUNET_CRYPTO_rsa_public_key_free (md->fresh_pks[i].rsa_public_key);      GNUNET_free (md->fresh_pks);    } -  for (i=0;i<TALER_CNC_KAPPA;i++) +  for (unsigned int i=0;i<TALER_CNC_KAPPA;i++)      GNUNET_free (md->fresh_coins[i]);    /* Finally, clean up a bit...       (NOTE: compilers might optimize this away, so this is @@ -600,8 +598,6 @@ deserialize_melt_data (const char *buf,  {    struct MeltData *md;    struct MeltDataP mdp; -  unsigned int i; -  unsigned int j;    size_t off;    int ok; @@ -615,7 +611,7 @@ deserialize_melt_data (const char *buf,    md->num_fresh_coins = ntohs (mdp.num_fresh_coins);    md->fresh_pks = GNUNET_new_array (md->num_fresh_coins,                                      struct TALER_DenominationPublicKey); -  for (i=0;i<TALER_CNC_KAPPA;i++) +  for (unsigned int i=0;i<TALER_CNC_KAPPA;i++)      md->fresh_coins[i] = GNUNET_new_array (md->num_fresh_coins,                                             struct TALER_PlanchetSecretsP);    off = sizeof (struct MeltDataP); @@ -624,14 +620,14 @@ deserialize_melt_data (const char *buf,                                    &buf[off],                                    buf_size - off,                                    &ok); -  for (i=0;(i<md->num_fresh_coins)&&(GNUNET_YES == ok);i++) +  for (unsigned int i=0;(i<md->num_fresh_coins)&&(GNUNET_YES == ok);i++)      off += deserialize_denomination_key (&md->fresh_pks[i],                                           &buf[off],                                           buf_size - off,                                           &ok); -  for (i=0;i<TALER_CNC_KAPPA;i++) -    for(j=0;(j<md->num_fresh_coins)&&(GNUNET_YES == ok);j++) +  for (unsigned int i=0;i<TALER_CNC_KAPPA;i++) +    for (unsigned int j=0;(j<md->num_fresh_coins)&&(GNUNET_YES == ok);j++)        off += deserialize_fresh_coin (&md->fresh_coins[i][j],                                       &buf[off],                                       buf_size - off, @@ -704,8 +700,6 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr  {    struct MeltData md;    char *buf; -  unsigned int i; -  unsigned int j;    struct GNUNET_HashContext *hash_context;    struct TALER_Amount total;    struct TALER_CoinSpendPublicKeyP coin_pub; @@ -715,7 +709,7 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr                                        &coin_pub.eddsa_pub);    hash_context = GNUNET_CRYPTO_hash_context_start ();    /* build up melt data structure */ -  for (i=0;i<TALER_CNC_KAPPA;i++) +  for (unsigned int i=0;i<TALER_CNC_KAPPA;i++)    {      struct GNUNET_CRYPTO_EcdhePrivateKey *tpk;      struct TALER_TransferPublicKeyP tp; @@ -747,18 +741,18 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr      = GNUNET_CRYPTO_rsa_signature_dup (melt_sig->rsa_signature);    md.fresh_pks = GNUNET_new_array (fresh_pks_len,                                     struct TALER_DenominationPublicKey); -  for (i=0;i<fresh_pks_len;i++) +  for (unsigned int i=0;i<fresh_pks_len;i++)      md.fresh_pks[i].rsa_public_key        = GNUNET_CRYPTO_rsa_public_key_dup (fresh_pks[i].key.rsa_public_key); -  for (i=0;i<TALER_CNC_KAPPA;i++) +  for (unsigned int i=0;i<TALER_CNC_KAPPA;i++)    {      md.fresh_coins[i] = GNUNET_new_array (fresh_pks_len,                                            struct TALER_PlanchetSecretsP); -    for (j=0;j<fresh_pks_len;j++) +    for (unsigned int j=0;j<fresh_pks_len;j++)      {        TALER_planchet_setup_refresh (&trans_sec[i], -                              j, -                              &md.fresh_coins[i][j]); +                                    j, +                                    &md.fresh_coins[i][j]);      }    } @@ -766,7 +760,7 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr    GNUNET_assert (GNUNET_OK ==  		 TALER_amount_get_zero (melt_amount->currency,  					&total)); -  for (j=0;j<fresh_pks_len;j++) +  for (unsigned int j=0;j<fresh_pks_len;j++)    {      if ( (GNUNET_OK !=  	  TALER_amount_add (&total, @@ -795,7 +789,7 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr    /* next, add all of the hashes from the denomination keys to the       hash_context */ -  for (i=0;i<fresh_pks_len;i++) +  for (unsigned int i=0;i<fresh_pks_len;i++)    {      char *buf;      size_t buf_size; @@ -820,28 +814,18 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr                                       sizeof (struct TALER_AmountNBO));    } -  for (i = 0; i < TALER_CNC_KAPPA; i++) +  for (unsigned int i = 0; i < TALER_CNC_KAPPA; i++)    { -    for (j = 0; j < fresh_pks_len; j++) +    for (unsigned int j = 0; j < fresh_pks_len; j++)      {        const struct TALER_PlanchetSecretsP *fc; /* coin this is about */ -      struct TALER_CoinSpendPublicKeyP coin_pub; -      struct GNUNET_HashCode coin_hash; -      char *coin_ev; /* blinded message to be signed (in envelope) for each coin */ -      size_t coin_ev_size; +      struct TALER_PlanchetDetail pd;        fc = &md.fresh_coins[i][j]; -      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); -      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)) +      if (GNUNET_OK != +          TALER_planchet_prepare (&md.fresh_pks[j], +                                  fc, +                                  &pd))        {          GNUNET_break_op (0);          GNUNET_CRYPTO_hash_context_abort (hash_context); @@ -849,9 +833,9 @@ TALER_EXCHANGE_refresh_prepare (const struct TALER_CoinSpendPrivateKeyP *melt_pr          return NULL;        }        GNUNET_CRYPTO_hash_context_read (hash_context, -                                       coin_ev, -                                       coin_ev_size); -      GNUNET_free (coin_ev); +                                       pd.coin_ev, +                                       pd.coin_ev_size); +      GNUNET_free (pd.coin_ev);      }    }    GNUNET_CRYPTO_hash_context_finish (hash_context, @@ -1294,22 +1278,12 @@ TALER_EXCHANGE_refresh_melt (struct TALER_EXCHANGE_Handle *exchange,      for (i=0;i<md->num_fresh_coins;i++)      {        const struct TALER_PlanchetSecretsP *fc = &md->fresh_coins[j][i]; -      struct TALER_CoinSpendPublicKeyP coin_pub; -      struct GNUNET_HashCode coin_hash; -      char *coin_ev; /* blinded message to be signed (in envelope) for each coin */ -      size_t coin_ev_size; - -      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); -      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)) +      struct TALER_PlanchetDetail pd; + +      if (GNUNET_OK != +          TALER_planchet_prepare (&md->fresh_pks[i], +                                  fc, +                                  &pd))        {          /* This should have been noticed during the preparation stage. */          GNUNET_break (0); @@ -1322,9 +1296,9 @@ TALER_EXCHANGE_refresh_melt (struct TALER_EXCHANGE_Handle *exchange,        }        GNUNET_assert (0 ==                       json_array_append_new (tmp, -                                            GNUNET_JSON_from_data (coin_ev, -                                                                   coin_ev_size))); -      GNUNET_free (coin_ev); +                                            GNUNET_JSON_from_data (pd.coin_ev, +                                                                   pd.coin_ev_size))); +      GNUNET_free (pd.coin_ev);      }      GNUNET_assert (0 ==                     json_array_append_new (coin_evs, @@ -1510,13 +1484,13 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh,      struct TALER_DenominationPublicKey *pk;      json_t *jsonai;      struct GNUNET_CRYPTO_RsaSignature *blind_sig; -    struct GNUNET_CRYPTO_RsaSignature *sig;      struct TALER_CoinSpendPublicKeyP coin_pub;      struct GNUNET_HashCode coin_hash;      struct GNUNET_JSON_Specification spec[] = {        GNUNET_JSON_spec_rsa_signature ("ev_sig", &blind_sig),        GNUNET_JSON_spec_end()      }; +    struct TALER_FreshCoin coin;      fc = &rrh->md->fresh_coins[rrh->noreveal_index][i];      pk = &rrh->md->fresh_pks[i]; @@ -1533,31 +1507,28 @@ refresh_reveal_ok (struct TALER_EXCHANGE_RefreshRevealHandle *rrh,        return GNUNET_SYSERR;      } -    /* unblind the signature */ -    sig = GNUNET_CRYPTO_rsa_unblind (blind_sig, -				     &fc->blinding_key.bks, -                                     pk->rsa_public_key); -    GNUNET_CRYPTO_rsa_signature_free (blind_sig); - -    /* verify the signature */ +    /* needed to verify the signature, and we didn't store it earlier, +       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); -      if (GNUNET_OK != -        GNUNET_CRYPTO_rsa_verify (&coin_hash, -                                  sig, -                                  pk->rsa_public_key)) +        TALER_planchet_to_coin (pk, +                                blind_sig, +                                fc, +                                &coin_hash, +                                &coin))      {        GNUNET_break_op (0); -      GNUNET_CRYPTO_rsa_signature_free (sig); +      GNUNET_CRYPTO_rsa_signature_free (blind_sig);        GNUNET_JSON_parse_free (outer_spec);        return GNUNET_SYSERR;      } -    coin_privs[i] = fc->coin_priv; -    sigs[i].rsa_signature = sig; +    GNUNET_CRYPTO_rsa_signature_free (blind_sig); +    coin_privs[i] = coin.coin_priv; +    sigs[i] = coin.sig;    }    GNUNET_JSON_parse_free (outer_spec);    return GNUNET_OK; diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index 22e0e3d2..ef505d87 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -693,9 +693,9 @@ struct TALER_EXCHANGE_ReserveWithdrawHandle    TALER_EXCHANGE_ReserveWithdrawResultCallback cb;    /** -   * Key used to blind the value. +   * Secrets of the planchet.     */ -  struct TALER_DenominationBlindingKeyP blinding_key; +  struct TALER_PlanchetSecretsP ps;    /**     * Denomination key we are withdrawing. @@ -739,8 +739,7 @@ reserve_withdraw_ok (struct TALER_EXCHANGE_ReserveWithdrawHandle *wsh,                       const json_t *json)  {    struct GNUNET_CRYPTO_RsaSignature *blind_sig; -  struct GNUNET_CRYPTO_RsaSignature *sig; -  struct TALER_DenominationSignature dsig; +  struct TALER_FreshCoin fc;    struct GNUNET_JSON_Specification spec[] = {      GNUNET_JSON_spec_rsa_signature ("ev_sig", &blind_sig),      GNUNET_JSON_spec_end() @@ -754,29 +753,28 @@ reserve_withdraw_ok (struct TALER_EXCHANGE_ReserveWithdrawHandle *wsh,      GNUNET_break_op (0);      return GNUNET_SYSERR;    } -  sig = GNUNET_CRYPTO_rsa_unblind (blind_sig, -                                   &wsh->blinding_key.bks, -                                   wsh->pk->key.rsa_public_key); -  GNUNET_CRYPTO_rsa_signature_free (blind_sig);    if (GNUNET_OK != -      GNUNET_CRYPTO_rsa_verify (&wsh->c_hash, -                                sig, -                                wsh->pk->key.rsa_public_key)) +      TALER_planchet_to_coin (&wsh->pk->key, +                              blind_sig, +                              &wsh->ps, +                              &wsh->c_hash, +                              &fc))    {      GNUNET_break_op (0); -    GNUNET_CRYPTO_rsa_signature_free (sig); +    GNUNET_JSON_parse_free (spec);      return GNUNET_SYSERR;    } +  GNUNET_JSON_parse_free (spec); +    /* signature is valid, return it to the application */ -  dsig.rsa_signature = sig;    wsh->cb (wsh->cb_cls,             MHD_HTTP_OK,  	   TALER_EC_NONE, -           &dsig, +           &fc.sig,             json);    /* make sure callback isn't called again after return */    wsh->cb = NULL; -  GNUNET_CRYPTO_rsa_signature_free (sig); +  GNUNET_CRYPTO_rsa_signature_free (fc.sig.rsa_signature);    return GNUNET_OK;  } @@ -978,9 +976,7 @@ handle_reserve_withdraw_finished (void *cls,   * @param exchange the exchange handle; the exchange must be ready to operate   * @param pk kind of coin to create   * @param reserve_priv private key of the reserve to withdraw from - * @param coin_priv where to fetch the coin's private key, - *        caller must have committed this value to disk before the call (with @a pk) - * @param blinding_key where to fetch the coin's blinding key + * @param ps secrets of the planchet   *        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 @@ -992,44 +988,33 @@ struct TALER_EXCHANGE_ReserveWithdrawHandle *  TALER_EXCHANGE_reserve_withdraw (struct TALER_EXCHANGE_Handle *exchange,                                   const struct TALER_EXCHANGE_DenomPublicKey *pk,                                   const struct TALER_ReservePrivateKeyP *reserve_priv, -                                 const struct TALER_CoinSpendPrivateKeyP *coin_priv, -                                 const struct TALER_DenominationBlindingKeyP *blinding_key, +                                 const struct TALER_PlanchetSecretsP *ps,                                   TALER_EXCHANGE_ReserveWithdrawResultCallback res_cb,                                   void *res_cb_cls)  {    struct TALER_EXCHANGE_ReserveWithdrawHandle *wsh;    struct TALER_WithdrawRequestPS req;    struct TALER_ReserveSignatureP reserve_sig; -  struct TALER_CoinSpendPublicKeyP coin_pub;    struct GNUNET_CURL_Context *ctx;    struct TALER_Amount amount_with_fee; -  char *coin_ev; -  size_t coin_ev_size;    json_t *withdraw_obj;    CURL *eh; +  struct TALER_PlanchetDetail pd; +  if (GNUNET_OK != +      TALER_planchet_prepare (&pk->key, +                              ps, +                              &pd)) +  { +    GNUNET_break_op (0); +    return NULL; +  }    wsh = GNUNET_new (struct TALER_EXCHANGE_ReserveWithdrawHandle);    wsh->exchange = exchange;    wsh->cb = res_cb;    wsh->cb_cls = res_cb_cls;    wsh->pk = pk; - -  GNUNET_CRYPTO_eddsa_key_get_public (&coin_priv->eddsa_priv, -                                      &coin_pub.eddsa_pub); -  GNUNET_CRYPTO_hash (&coin_pub.eddsa_pub, -                      sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), -                      &wsh->c_hash); -  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; -  } +  wsh->c_hash = pd.c_hash;    GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv,                                        &wsh->reserve_pub.eddsa_pub);    req.purpose.size = htonl (sizeof (struct TALER_WithdrawRequestPS)); @@ -1042,7 +1027,7 @@ TALER_EXCHANGE_reserve_withdraw (struct TALER_EXCHANGE_Handle *exchange,    {      /* exchange gave us denomination keys that overflow like this!? */      GNUNET_break_op (0); -    GNUNET_free (coin_ev); +    GNUNET_free (pd.coin_ev);      GNUNET_free (wsh);      return NULL;    } @@ -1050,10 +1035,9 @@ TALER_EXCHANGE_reserve_withdraw (struct TALER_EXCHANGE_Handle *exchange,                       &amount_with_fee);    TALER_amount_hton (&req.withdraw_fee,                       &pk->fee_withdraw); -  GNUNET_CRYPTO_rsa_public_key_hash (pk->key.rsa_public_key, -                                     &req.h_denomination_pub); -  GNUNET_CRYPTO_hash (coin_ev, -                      coin_ev_size, +  req.h_denomination_pub = pd.denom_pub_hash; +  GNUNET_CRYPTO_hash (pd.coin_ev, +                      pd.coin_ev_size,                        &req.h_coin_envelope);    GNUNET_assert (GNUNET_OK ==                   GNUNET_CRYPTO_eddsa_sign (&reserve_priv->eddsa_priv, @@ -1062,11 +1046,11 @@ TALER_EXCHANGE_reserve_withdraw (struct TALER_EXCHANGE_Handle *exchange,    withdraw_obj = json_pack ("{s:o, s:o," /* denom_pub and coin_ev */                              " s:o, s:o}",/* reserve_pub and reserve_sig */                              "denom_pub", GNUNET_JSON_from_rsa_public_key (pk->key.rsa_public_key), -                            "coin_ev", GNUNET_JSON_from_data (coin_ev, -                                                              coin_ev_size), +                            "coin_ev", GNUNET_JSON_from_data (pd.coin_ev, +                                                              pd.coin_ev_size),                              "reserve_pub", GNUNET_JSON_from_data_auto (&wsh->reserve_pub),                              "reserve_sig", GNUNET_JSON_from_data_auto (&reserve_sig)); -  GNUNET_free (coin_ev); +  GNUNET_free (pd.coin_ev);    if (NULL == withdraw_obj)    {      GNUNET_break (0); @@ -1074,7 +1058,7 @@ TALER_EXCHANGE_reserve_withdraw (struct TALER_EXCHANGE_Handle *exchange,    } -  wsh->blinding_key = *blinding_key; +  wsh->ps = *ps;    wsh->url = MAH_path_to_url (exchange, "/reserve/withdraw");    eh = curl_easy_init (); diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c index 70fb3ffd..7c0dfa98 100644 --- a/src/exchange-lib/test_exchange_api.c +++ b/src/exchange-lib/test_exchange_api.c @@ -341,14 +341,9 @@ struct Command        struct TALER_DenominationSignature sig;        /** -       * Set (by the interpreter) to the coin's private key. +       * Private key material of the coin, set by the interpreter.         */ -      struct TALER_CoinSpendPrivateKeyP coin_priv; - -      /** -       * Blinding key used for the operation. -       */ -      struct TALER_DenominationBlindingKeyP blinding_key; +      struct TALER_PlanchetSecretsP ps;        /**         * Withdraw handle (while operation is running). @@ -1984,7 +1979,7 @@ get_public_key_from_coin_command (const struct Command *coin,    switch (coin->oc)    {    case OC_WITHDRAW_SIGN: -    GNUNET_CRYPTO_eddsa_key_get_public (&coin->details.reserve_withdraw.coin_priv.eddsa_priv, +    GNUNET_CRYPTO_eddsa_key_get_public (&coin->details.reserve_withdraw.ps.coin_priv.eddsa_priv,                                          &coin_pub->eddsa_pub);      break;    case OC_REFRESH_REVEAL: @@ -2016,7 +2011,6 @@ interpreter_run (void *cls)    struct Command *cmd = &is->commands[is->ip];    const struct Command *ref;    struct TALER_ReservePublicKeyP reserve_pub; -  struct TALER_CoinSpendPublicKeyP coin_pub;    struct TALER_Amount amount;    struct GNUNET_TIME_Absolute execution_date;    json_t *sender_details; @@ -2165,27 +2159,14 @@ interpreter_run (void *cls)        return;      } -    /* create coin's private key */ -    { -      struct GNUNET_CRYPTO_EddsaPrivateKey *priv; - -      priv = GNUNET_CRYPTO_eddsa_key_create (); -      cmd->details.reserve_withdraw.coin_priv.eddsa_priv = *priv; -      GNUNET_free (priv); -    } -    GNUNET_CRYPTO_eddsa_key_get_public (&cmd->details.reserve_withdraw.coin_priv.eddsa_priv, -                                        &coin_pub.eddsa_pub); -    GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, -				&cmd->details.reserve_withdraw.blinding_key, -				sizeof (cmd->details.reserve_withdraw.blinding_key)); +    TALER_planchet_setup_random (&cmd->details.reserve_withdraw.ps);      cmd->details.reserve_withdraw.wsh        = TALER_EXCHANGE_reserve_withdraw (exchange, -                                     cmd->details.reserve_withdraw.pk, -                                     &ref->details.admin_add_incoming.reserve_priv, -                                     &cmd->details.reserve_withdraw.coin_priv, -                                     &cmd->details.reserve_withdraw.blinding_key, -                                     &reserve_withdraw_cb, -                                     is); +                                         cmd->details.reserve_withdraw.pk, +                                         &ref->details.admin_add_incoming.reserve_priv, +                                         &cmd->details.reserve_withdraw.ps, +                                         &reserve_withdraw_cb, +                                         is);      if (NULL == cmd->details.reserve_withdraw.wsh)      {        GNUNET_break (0); @@ -2217,7 +2198,7 @@ interpreter_run (void *cls)        switch (ref->oc)        {        case OC_WITHDRAW_SIGN: -        coin_priv = &ref->details.reserve_withdraw.coin_priv; +        coin_priv = &ref->details.reserve_withdraw.ps.coin_priv;          coin_pk = ref->details.reserve_withdraw.pk;          coin_pk_sig = &ref->details.reserve_withdraw.sig;          break; @@ -2376,7 +2357,7 @@ interpreter_run (void *cls)          GNUNET_assert (NULL != ref);          GNUNET_assert (OC_WITHDRAW_SIGN == ref->oc); -        melt_priv = ref->details.reserve_withdraw.coin_priv; +        melt_priv = ref->details.reserve_withdraw.ps.coin_priv;          if (GNUNET_OK !=              TALER_string_to_amount (md->amount,                                      &melt_amount)) @@ -2478,7 +2459,7 @@ interpreter_run (void *cls)      /* finally, use private key from withdraw sign command */      cmd->details.refresh_link.rlh        = TALER_EXCHANGE_refresh_link (exchange, -                                     &ref->details.reserve_withdraw.coin_priv, +                                     &ref->details.reserve_withdraw.ps.coin_priv,                                       &link_cb,                                       is);      if (NULL == cmd->details.refresh_link.rlh) @@ -2745,8 +2726,7 @@ interpreter_run (void *cls)          = TALER_EXCHANGE_payback (exchange,                                    ref->details.reserve_withdraw.pk,                                    &ref->details.reserve_withdraw.sig, -                                  &ref->details.reserve_withdraw.coin_priv, -                                  &ref->details.reserve_withdraw.blinding_key, +                                  &ref->details.reserve_withdraw.ps,                                    &payback_cb,                                    is);        return; | 
