gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: recoup support for coin history


From: gnunet
Subject: [taler-exchange] branch master updated: recoup support for coin history
Date: Thu, 09 Nov 2023 21:48:17 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new e8a77bdb recoup support for coin history
     new 4cafd404 Merge branch 'master' of git+ssh://git.taler.net/exchange
e8a77bdb is described below

commit e8a77bdbac3cad62e018810c4c0cc06ba6c096b3
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Thu Nov 9 21:48:07 2023 +0100

    recoup support for coin history
---
 src/testing/testing_api_cmd_coin_history.c   |  11 +--
 src/testing/testing_api_cmd_recoup_refresh.c | 100 ++++++++++++++++++++++++++-
 2 files changed, 105 insertions(+), 6 deletions(-)

diff --git a/src/testing/testing_api_cmd_coin_history.c 
b/src/testing/testing_api_cmd_coin_history.c
index 703465ab..23903745 100644
--- a/src/testing/testing_api_cmd_coin_history.c
+++ b/src/testing/testing_api_cmd_coin_history.c
@@ -155,14 +155,15 @@ history_entry_cmp (
     if (0 != GNUNET_memcmp (&h1->details.recoup_refresh.coin_sig,
                             &h2->details.recoup_refresh.coin_sig))
       return 1;
-    if (0 != GNUNET_memcmp (&h1->details.recoup_refresh.exchange_sig,
-                            &h2->details.recoup_refresh.exchange_sig))
-      return 1;
+    /* Note: exchange_sig, exchange_pub and timestamp are
+       fundamentally not available in the initiating command */
     return 0;
   case TALER_EXCHANGE_CTT_OLD_COIN_RECOUP:
-    if (0 != GNUNET_memcmp (&h1->details.old_coin_recoup.exchange_sig,
-                            &h2->details.old_coin_recoup.exchange_sig))
+    if (0 != GNUNET_memcmp (&h1->details.old_coin_recoup.new_coin_pub,
+                            &h2->details.old_coin_recoup.new_coin_pub))
       return 1;
+    /* Note: exchange_sig, exchange_pub and timestamp are
+       fundamentally not available in the initiating command */
     return 0;
   case TALER_EXCHANGE_CTT_PURSE_DEPOSIT:
     if (0 != GNUNET_memcmp (&h1->details.purse_deposit.coin_sig,
diff --git a/src/testing/testing_api_cmd_recoup_refresh.c 
b/src/testing/testing_api_cmd_recoup_refresh.c
index f2fc3b6c..68d267be 100644
--- a/src/testing/testing_api_cmd_recoup_refresh.c
+++ b/src/testing/testing_api_cmd_recoup_refresh.c
@@ -43,6 +43,26 @@ struct RecoupRefreshState
    */
   const char *coin_reference;
 
+  /**
+   * Entry in the old coin's history generated by this operation.
+   */
+  struct TALER_EXCHANGE_CoinHistoryEntry che_old;
+
+  /**
+   * Entry in the recouped coin's history generated by this operation.
+   */
+  struct TALER_EXCHANGE_CoinHistoryEntry che_new;
+
+  /**
+   * Public key of the refunded coin.
+   */
+  struct TALER_CoinSpendPublicKeyP coin_pub_old;
+
+  /**
+   * Public key of the refunded coin.
+   */
+  struct TALER_CoinSpendPublicKeyP coin_pub_new;
+
   /**
    * Amount to be recouped.
    */
@@ -178,6 +198,7 @@ recoup_refresh_run (void *cls,
   const struct TALER_TESTING_Command *coin_cmd;
   const struct TALER_TESTING_Command *melt_cmd;
   const struct TALER_CoinSpendPrivateKeyP *coin_priv;
+  const struct TALER_CoinSpendPrivateKeyP *coin_priv_old;
   const struct TALER_EXCHANGE_DenomPublicKey *denom_pub;
   const struct TALER_DenominationSignature *coin_sig;
   const struct TALER_RefreshMasterSecretP *rplanchet;
@@ -185,6 +206,7 @@ recoup_refresh_run (void *cls,
   const struct TALER_ExchangeWithdrawValues *ewv;
   char *cref;
   unsigned int idx;
+  struct TALER_DenominationHashP h_denom_pub;
 
   rrs->is = is;
   if (GNUNET_OK !=
@@ -223,6 +245,22 @@ recoup_refresh_run (void *cls,
     TALER_TESTING_interpreter_fail (is);
     return;
   }
+  if (GNUNET_OK !=
+      TALER_TESTING_get_trait_coin_priv (melt_cmd,
+                                         0,
+                                         &coin_priv_old))
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+  GNUNET_CRYPTO_eddsa_key_get_public (
+    &coin_priv->eddsa_priv,
+    &rrs->coin_pub_new.eddsa_pub);
+  GNUNET_CRYPTO_eddsa_key_get_public (
+    &coin_priv_old->eddsa_priv,
+    &rrs->coin_pub_old.eddsa_pub);
+
   if (GNUNET_OK !=
       TALER_TESTING_get_trait_exchange_wd_value (melt_cmd,
                                                  idx,
@@ -270,6 +308,29 @@ recoup_refresh_run (void *cls,
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Trying to recoup_refresh denomination '%s'\n",
               TALER_B2S (&denom_pub->h_key));
+  rrs->che_old.type
+    = TALER_EXCHANGE_CTT_OLD_COIN_RECOUP;
+  rrs->che_old.amount
+    = rrs->amount;
+  rrs->che_old.details.old_coin_recoup.new_coin_pub
+    = rrs->coin_pub_new;
+  rrs->che_new.type
+    = TALER_EXCHANGE_CTT_RECOUP_REFRESH;
+  rrs->che_new.amount
+    = rrs->amount;
+  rrs->che_new.details.recoup_refresh.old_coin_pub
+    = rrs->coin_pub_old;
+  TALER_planchet_blinding_secret_create (
+    planchet,
+    ewv,
+    &rrs->che_new.details.recoup_refresh.coin_bks);
+  TALER_denom_pub_hash (&denom_pub->key,
+                        &h_denom_pub);
+  TALER_wallet_recoup_refresh_sign (
+    &h_denom_pub,
+    &rrs->che_new.details.recoup_refresh.coin_bks,
+    coin_priv,
+    &rrs->che_new.details.recoup_refresh.coin_sig);
   rrs->ph = TALER_EXCHANGE_recoup_refresh (
     TALER_TESTING_interpreter_get_context (is),
     TALER_TESTING_get_exchange_url (is),
@@ -307,6 +368,42 @@ recoup_refresh_cleanup (void *cls,
 }
 
 
+/**
+ * Offer internal data from a "recoup-refresh" CMD state to other
+ * commands.
+ *
+ * @param cls closure
+ * @param[out] ret result (could be anything)
+ * @param trait name of the trait
+ * @param index index number of the object to offer.
+ * @return #GNUNET_OK on success
+ */
+static enum GNUNET_GenericReturnValue
+recoup_refresh_traits (void *cls,
+                       const void **ret,
+                       const char *trait,
+                       unsigned int index)
+{
+  struct RecoupRefreshState *rrs = cls;
+  struct TALER_TESTING_Trait traits[] = {
+    TALER_TESTING_make_trait_coin_history (0,
+                                           &rrs->che_old),
+    TALER_TESTING_make_trait_coin_pub (0,
+                                       &rrs->coin_pub_old),
+    TALER_TESTING_make_trait_coin_history (1,
+                                           &rrs->che_new),
+    TALER_TESTING_make_trait_coin_pub (1,
+                                       &rrs->coin_pub_new),
+    TALER_TESTING_trait_end ()
+  };
+
+  return TALER_TESTING_get_trait (traits,
+                                  ret,
+                                  trait,
+                                  index);
+}
+
+
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_recoup_refresh (const char *label,
                                   unsigned int expected_response_code,
@@ -335,7 +432,8 @@ TALER_TESTING_cmd_recoup_refresh (const char *label,
       .cls = rrs,
       .label = label,
       .run = &recoup_refresh_run,
-      .cleanup = &recoup_refresh_cleanup
+      .cleanup = &recoup_refresh_cleanup,
+      .traits = &recoup_refresh_traits
     };
 
     return cmd;

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]