gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: work on 'show' command for taler


From: gnunet
Subject: [taler-exchange] branch master updated: work on 'show' command for taler-exchange-offline
Date: Sat, 05 Dec 2020 20:06:06 +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 71977957 work on 'show' command for taler-exchange-offline
71977957 is described below

commit 719779577a4c336126f0bbb77f947ea892a3cdd3
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Dec 5 20:06:03 2020 +0100

    work on 'show' command for taler-exchange-offline
---
 src/exchange-tools/taler-exchange-offline.c | 106 +++++++++++++++++++++++++---
 1 file changed, 98 insertions(+), 8 deletions(-)

diff --git a/src/exchange-tools/taler-exchange-offline.c 
b/src/exchange-tools/taler-exchange-offline.c
index dc7b1409..c4804fea 100644
--- a/src/exchange-tools/taler-exchange-offline.c
+++ b/src/exchange-tools/taler-exchange-offline.c
@@ -1593,16 +1593,17 @@ tofu_check (const struct TALER_SecurityModulePublicKeyP 
secm[2])
 /**
  * Output @a signkeys for human consumption.
  *
+ * @param secm_pub security module public key used to sign the denominations
  * @param signkeys keys to output
  * @return #GNUNET_OK on success
  */
 static int
-show_signkeys (const json_t *signkeys)
+show_signkeys (const struct TALER_SecurityModulePublicKeyP *secm_pub,
+               const json_t *signkeys)
 {
   size_t index;
   json_t *value;
 
-
   json_array_foreach (signkeys, index, value) {
     const char *err_name;
     unsigned int err_line;
@@ -1611,6 +1612,7 @@ show_signkeys (const json_t *signkeys)
     struct GNUNET_TIME_Absolute start_time;
     struct GNUNET_TIME_Absolute sign_end;
     struct GNUNET_TIME_Absolute legal_end;
+    struct GNUNET_TIME_Relative duration;
     struct GNUNET_JSON_Specification spec[] = {
       GNUNET_JSON_spec_absolute_time ("stamp_start",
                                       &start_time),
@@ -1640,8 +1642,35 @@ show_signkeys (const json_t *signkeys)
       test_shutdown ();
       return GNUNET_SYSERR;
     }
-
-    // FIXME: print
+    duration = GNUNET_TIME_absolute_get_difference (start_time,
+                                                    sign_end);
+    if (GNUNET_OK !=
+        TALER_exchange_secmod_eddsa_verify (&exchange_pub,
+                                            start_time,
+                                            duration,
+                                            secm_pub,
+                                            &secm_sig))
+    {
+      fprintf (stderr,
+               "Invalid security module signature for key %s (aborting)\n",
+               TALER_B2S (&exchange_pub));
+      global_ret = 9;
+      test_shutdown ();
+      return GNUNET_SYSERR;
+    }
+    {
+      char *legal_end_s;
+
+      legal_end_s = GNUNET_strdup (
+        GNUNET_STRINGS_absolute_time_to_string (legal_end));
+      printf ("EXCHANGE-KEY %s starting at %s (used for: %s, legal end: %s)\n",
+              TALER_B2S (&exchange_pub),
+              GNUNET_STRINGS_absolute_time_to_string (start_time),
+              GNUNET_STRINGS_relative_time_to_string (duration,
+                                                      GNUNET_NO),
+              legal_end_s);
+      GNUNET_free (legal_end_s);
+    }
   }
   return GNUNET_OK;
 }
@@ -1650,11 +1679,13 @@ show_signkeys (const json_t *signkeys)
 /**
  * Output @a denomkeys for human consumption.
  *
+ * @param secm_pub security module public key used to sign the denominations
  * @param denomkeys keys to output
  * @return #GNUNET_OK on success
  */
 static int
-show_denomkeys (const json_t *denomkeys)
+show_denomkeys (const struct TALER_SecurityModulePublicKeyP *secm_pub,
+                const json_t *denomkeys)
 {
   size_t index;
   json_t *value;
@@ -1662,10 +1693,44 @@ show_denomkeys (const json_t *denomkeys)
   json_array_foreach (denomkeys, index, value) {
     const char *err_name;
     unsigned int err_line;
+    const char *section_name;
+    struct TALER_DenominationPublicKey denom_pub;
+    struct GNUNET_TIME_Absolute stamp_start;
+    struct GNUNET_TIME_Absolute stamp_expire_withdraw;
+    struct GNUNET_TIME_Absolute stamp_expire_legal;
+    struct TALER_Amount coin_value;
+    struct TALER_Amount fee_withdraw;
+    struct TALER_Amount fee_deposit;
+    struct TALER_Amount fee_refresh;
+    struct TALER_Amount fee_refund;
+    struct TALER_SecurityModuleSignatureP secm_sig;
     struct GNUNET_JSON_Specification spec[] = {
-      // FIXME!
+      GNUNET_JSON_spec_string ("section_name",
+                               &section_name),
+      GNUNET_JSON_spec_rsa_public_key ("denom_pub",
+                                       &denom_pub.rsa_public_key),
+      TALER_JSON_spec_amount ("value",
+                              &coin_value),
+      TALER_JSON_spec_amount ("fee_withdraw",
+                              &fee_withdraw),
+      TALER_JSON_spec_amount ("fee_deposit",
+                              &fee_deposit),
+      TALER_JSON_spec_amount ("fee_refresh",
+                              &fee_refresh),
+      TALER_JSON_spec_amount ("fee_refund",
+                              &fee_refund),
+      GNUNET_JSON_spec_absolute_time ("stamp_start",
+                                      &stamp_start),
+      GNUNET_JSON_spec_absolute_time ("stamp_expire_withdraw",
+                                      &stamp_expire_withdraw),
+      GNUNET_JSON_spec_absolute_time ("stamp_expire_legal",
+                                      &stamp_expire_legal),
+      GNUNET_JSON_spec_fixed_auto ("denom_secmod_sig",
+                                   &secm_sig),
       GNUNET_JSON_spec_end ()
     };
+    struct GNUNET_TIME_Relative duration;
+    struct GNUNET_HashCode h_denom_pub;
 
     if (GNUNET_OK !=
         GNUNET_JSON_parse (value,
@@ -1678,11 +1743,34 @@ show_denomkeys (const json_t *denomkeys)
                err_name,
                err_line,
                (unsigned int) index);
+      GNUNET_JSON_parse_free (spec);
       global_ret = 7;
       test_shutdown ();
       return GNUNET_SYSERR;
     }
+    duration = GNUNET_TIME_absolute_get_difference (stamp_start,
+                                                    stamp_expire_withdraw);
+    GNUNET_CRYPTO_rsa_public_key_hash (denom_pub.rsa_public_key,
+                                       &h_denom_pub);
+    if (GNUNET_OK !=
+        TALER_exchange_secmod_rsa_verify (&h_denom_pub,
+                                          section_name,
+                                          stamp_start,
+                                          duration,
+                                          secm_pub,
+                                          &secm_sig))
+    {
+      fprintf (stderr,
+               "Invalid security module signature for key %s (aborting)\n",
+               TALER_B2S (&h_denom_pub));
+      global_ret = 9;
+      test_shutdown ();
+      return GNUNET_SYSERR;
+    }
+
     // FIXME: print
+
+    GNUNET_JSON_parse_free (spec);
   }
   return GNUNET_OK;
 }
@@ -1774,9 +1862,11 @@ do_show (char *const *args)
       return;
     }
     if ( (GNUNET_OK !=
-          show_signkeys (signkeys)) ||
+          show_signkeys (&secm[0],
+                         signkeys)) ||
          (GNUNET_OK !=
-          show_denomkeys (denomkeys)) )
+          show_denomkeys (&secm[1],
+                          denomkeys)) )
     {
       global_ret = 8;
       test_shutdown ();

-- 
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]