gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] 01/02: actually look at recoup/revocations in libtalere


From: gnunet
Subject: [taler-exchange] 01/02: actually look at recoup/revocations in libtalerexchange and expose the result to clients; make exchange API follow specification
Date: Tue, 10 Mar 2020 15:28:58 +0100

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

grothoff pushed a commit to branch master
in repository exchange.

commit f6684c1ae3c693df9f88cb347f8afb2748cee17d
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue Mar 10 14:25:57 2020 +0100

    actually look at recoup/revocations in libtalerexchange and expose the 
result to clients; make exchange API follow specification
---
 src/exchange/taler-exchange-httpd_keystate.c | 16 ++++++++---
 src/include/taler_exchange_service.h         |  6 ++++
 src/lib/exchange_api_handle.c                | 42 ++++++++++++++++++++++++++--
 3 files changed, 58 insertions(+), 6 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_keystate.c 
b/src/exchange/taler-exchange-httpd_keystate.c
index 75e20ad0..af0920c5 100644
--- a/src/exchange/taler-exchange-httpd_keystate.c
+++ b/src/exchange/taler-exchange-httpd_keystate.c
@@ -909,10 +909,18 @@ revocations_iter (void *cls,
     handle_signal (SIGTERM);
     return GNUNET_SYSERR;
   }
-  GNUNET_assert (0 ==
-                 json_array_append_new (rfc->recoup_array,
-                                        GNUNET_JSON_from_data_auto (
-                                          denom_hash)));
+
+  {
+    json_t *obj;
+
+    obj = json_pack ("{s:o}",
+                     "h_denom_pub",
+                     GNUNET_JSON_from_data_auto (denom_hash));
+    GNUNET_assert (NULL != obj);
+    GNUNET_assert (0 ==
+                   json_array_append_new (rfc->recoup_array,
+                                          obj));
+  }
   return GNUNET_OK;
 }
 
diff --git a/src/include/taler_exchange_service.h 
b/src/include/taler_exchange_service.h
index 311175e4..47847ce5 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -153,6 +153,12 @@ struct TALER_EXCHANGE_DenomPublicKey
    * The applicable fee to refund a coin of this denomination
    */
   struct TALER_Amount fee_refund;
+
+  /**
+   * Set to #GNUNET_YES if this denomination key has been
+   * revoked by the exchange.
+   */
+  int revoked;
 };
 
 
diff --git a/src/lib/exchange_api_handle.c b/src/lib/exchange_api_handle.c
index ce6ef2e2..3ec3e30b 100644
--- a/src/lib/exchange_api_handle.c
+++ b/src/lib/exchange_api_handle.c
@@ -216,7 +216,7 @@ struct TALER_EXCHANGE_Handle
   enum ExchangeHandleState state;
 
   /**
-   * If GNUNET_YES, use fake now given by the user, in
+   * If #GNUNET_YES, use fake now given by the user, in
    * request of "/keys".
    */
   int with_now;
@@ -977,6 +977,7 @@ decode_keys_json (const json_t *resp_obj,
                                     dk.valid_from);
     };
   }
+
   /* parse the auditor information */
   {
     json_t *auditors_array;
@@ -1038,6 +1039,43 @@ decode_keys_json (const json_t *resp_obj,
     };
   }
 
+  /* parse the revocation/recoup information */
+  {
+    json_t *recoup_array;
+    json_t *recoup_info;
+    unsigned int index;
+
+    EXITIF (NULL == (recoup_array =
+                       json_object_get (resp_obj,
+                                        "recoup")));
+    EXITIF (JSON_ARRAY != json_typeof (recoup_array));
+
+    json_array_foreach (recoup_array, index, recoup_info) {
+      struct GNUNET_HashCode h_denom_pub;
+      struct GNUNET_JSON_Specification spec[] = {
+        GNUNET_JSON_spec_fixed_auto ("h_denom_pub",
+                                     &h_denom_pub),
+        GNUNET_JSON_spec_end ()
+      };
+
+      EXITIF (GNUNET_OK !=
+              GNUNET_JSON_parse (recoup_info,
+                                 spec,
+                                 NULL, NULL));
+      for (unsigned int j = 0;
+           j<key_data->num_denom_keys;
+           j++)
+      {
+        if (0 == GNUNET_memcmp (&h_denom_pub,
+                                &key_data->denom_keys[j].h_key))
+        {
+          key_data->denom_keys[j].revoked = GNUNET_YES;
+          break;
+        }
+      }
+    };
+  }
+
   if (check_sig)
   {
     struct TALER_ExchangeKeySetPS ks;
@@ -1259,7 +1297,7 @@ keys_completed_cb (void *cls,
     for (unsigned int i = 0; i<kd_old.num_denom_keys; i++)
       kd.denom_keys[i].key.rsa_public_key
         = GNUNET_CRYPTO_rsa_public_key_dup (
-            kd_old.denom_keys[i].key.rsa_public_key);
+        kd_old.denom_keys[i].key.rsa_public_key);
 
     kd.num_auditors = kd_old.num_auditors;
     kd.auditors = GNUNET_new_array (kd.num_auditors,

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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