gnunet-svn
[Top][All Lists]
Advanced

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

[taler-donau] 03/05: [lib] implementation key api roughly completed


From: gnunet
Subject: [taler-donau] 03/05: [lib] implementation key api roughly completed
Date: Sun, 07 Jan 2024 18:14:36 +0100

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

lukas-matyja pushed a commit to branch master
in repository donau.

commit 76fa63265e0b90a7e10120a7605d8a749b9e6230
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
AuthorDate: Sun Jan 7 17:35:25 2024 +0100

    [lib] implementation key api roughly completed
---
 src/include/donau_crypto_lib.h |  11 ++
 src/lib/donau_api_handle.c     | 299 ++++-------------------------------------
 src/util/donau_crypto.c        |  36 +++++
 3 files changed, 71 insertions(+), 275 deletions(-)

diff --git a/src/include/donau_crypto_lib.h b/src/include/donau_crypto_lib.h
index 7a12a6b..66bfb45 100644
--- a/src/include/donau_crypto_lib.h
+++ b/src/include/donau_crypto_lib.h
@@ -333,6 +333,17 @@ struct DONAU_DonationUnitGroup
 
 };
 
+/**
+ * Compute a unique key for the meta data of a donation unit group.
+ *
+ * @param dg donation unit group to evaluate
+ * @param[out] key key to set
+ */
+void
+DONAU_donation_unit_group_get_key (
+  const struct DONAU_DonationUnitGroup *dg,
+  struct GNUNET_HashCode *key);
+
 /**
  * @brief Inputs needed from the donau for blind signing.
  */
diff --git a/src/lib/donau_api_handle.c b/src/lib/donau_api_handle.c
index 288cbd8..d8f2d99 100644
--- a/src/lib/donau_api_handle.c
+++ b/src/lib/donau_api_handle.c
@@ -205,7 +205,7 @@ decode_keys_json (const json_t *resp_obj,
                   struct DONAU_Keys *key_data,
                   enum DONAU_VersionCompatibility *vc)
 {
-  //struct DONAU_DonauPublicKeyP pub;
+  //struct DONAU_SigningPublicKeyAndValidity donau_pub;
   const json_t *sign_keys_array;
   const json_t *donation_units_by_group;
 
@@ -269,9 +269,9 @@ decode_keys_json (const json_t *resp_obj,
   {
     const char *currency;
     struct GNUNET_JSON_Specification mspec[] = {
-      // GNUNET_JSON_spec_fixed_auto (
-      //   "eddsa_pub",
-      //   &pub),
+      // GNUNET_JSON_spec_fixed_auto ( // already in signkeys?
+      //   "donau_pub",
+      //   &donau_pub),
       GNUNET_JSON_spec_array_const (
         "signkeys", // naming convention?
         &sign_keys_array),
@@ -288,7 +288,7 @@ decode_keys_json (const json_t *resp_obj,
 
     if (GNUNET_OK !=
         GNUNET_JSON_parse (resp_obj,
-                           mspec, // ask how this is done
+                           mspec,
                            &emsg,
                            &eline))
     {
@@ -326,7 +326,7 @@ decode_keys_json (const json_t *resp_obj,
 
     key_data->sign_keys
       = GNUNET_new_array (key_data->num_sign_keys,
-                          struct DONAU_SigningPublicKey);
+                          struct DONAU_SigningPublicKeyAndValidity);
     json_array_foreach (sign_keys_array, index, sign_key_obj) {
       EXITIF (GNUNET_SYSERR ==
               parse_json_signkey (&key_data->sign_keys[index],
@@ -350,13 +350,13 @@ decode_keys_json (const json_t *resp_obj,
     {
       /* First, parse { cipher, value, hash } of the current
          group. */
-      struct DONAU_DonationUnitGroup group = {0};
+      struct DONAU_DonationUnitGroup group = {0}; // what must be given to be 
a part of a group?
       const json_t *donation_unit_keys_array;
       struct GNUNET_JSON_Specification group_spec[] = {
-        TALER_JSON_spec_denomination_group (NULL,  // TODO: check method
+        TALER_JSON_spec_denomination_group (NULL,  // TODO: write method
                                             key_data->currency,
                                             &group),
-        GNUNET_JSON_spec_array_const ("donation_units", // TODO: check method
+        GNUNET_JSON_spec_array_const ("donation_units",
                                       &donation_unit_keys_array),
         GNUNET_JSON_spec_end ()
       };
@@ -836,21 +836,19 @@ add_grp (void *cls,
   switch (gd->meta.cipher)
   {
   case GNUNET_CRYPTO_BSA_RSA:
-    cipher = age_restricted ? "RSA+age_restricted" : "RSA";
+    cipher = "RSA";
     break;
   case GNUNET_CRYPTO_BSA_CS:
-    cipher = age_restricted ? "CS+age_restricted" : "CS";
+    cipher = "CS";
     break;
   default:
     GNUNET_assert (false);
   }
 
   ge = GNUNET_JSON_PACK (
-    GNUNET_JSON_pack_data_auto ("hash",
-                                &gd->meta.hash),
     GNUNET_JSON_pack_string ("cipher",
                              cipher),
-    GNUNET_JSON_pack_array_steal ("denoms",
+    GNUNET_JSON_pack_array_steal ("donation_units",
                                   gd->json),
     TALER_JSON_pack_amount ("value",
                             &gd->meta.value));
@@ -862,80 +860,18 @@ add_grp (void *cls,
 }
 
 
-/**
- * Convert array of account restrictions @a ars to JSON.
- *
- * @param ar_len length of @a ars
- * @param ars account restrictions to convert
- * @return JSON representation
- */
-static json_t *
-ar_to_json (unsigned int ar_len,
-            const struct TALER_DONAU_AccountRestriction ars[static ar_len])
-{
-  json_t *rval;
-
-  rval = json_array ();
-  GNUNET_assert (NULL != rval);
-  for (unsigned int i = 0; i<ar_len; i++)
-  {
-    const struct TALER_DONAU_AccountRestriction *ar = &ars[i];
-
-    switch (ar->type)
-    {
-    case TALER_DONAU_AR_INVALID:
-      GNUNET_break (0);
-      json_decref (rval);
-      return NULL;
-    case TALER_DONAU_AR_DENY:
-      GNUNET_assert (
-        0 ==
-        json_array_append_new (
-          rval,
-          GNUNET_JSON_PACK (
-            GNUNET_JSON_pack_string ("type",
-                                     "deny"))));
-      break;
-    case TALER_DONAU_AR_REGEX:
-      GNUNET_assert (
-        0 ==
-        json_array_append_new (
-          rval,
-          GNUNET_JSON_PACK (
-            GNUNET_JSON_pack_string (
-              "type",
-              "regex"),
-            GNUNET_JSON_pack_string (
-              "regex",
-              ar->details.regex.posix_egrep),
-            GNUNET_JSON_pack_string (
-              "human_hint",
-              ar->details.regex.human_hint),
-            GNUNET_JSON_pack_object_incref (
-              "human_hint_i18n",
-              (json_t *) ar->details.regex.human_hint_i18n)
-            )));
-      break;
-    }
-  }
-  return rval;
-}
-
-
 json_t *
 DONAU_keys_to_json (const struct DONAU_Keys *kd)
 {
   json_t *keys;
   json_t *signkeys;
   json_t *donation_units;
-  json_t *accounts;
 
-  now = GNUNET_TIME_timestamp_get ();
   signkeys = json_array ();
   GNUNET_assert (NULL != signkeys);
   for (unsigned int i = 0; i<kd->num_sign_keys; i++)
   {
-    const struct TALER_DONAU_SigningPublicKey *sk = &kd->sign_keys[i];
+    const struct DONAU_SigningPublicKeyAndValidity *sk = &kd->sign_keys[i];
     json_t *signkey;
 
     signkey = GNUNET_JSON_PACK (
@@ -954,24 +890,22 @@ DONAU_keys_to_json (const struct DONAU_Keys *kd)
   {
     struct GNUNET_CONTAINER_MultiHashMap *dbg;
 
-    dbg = GNUNET_CONTAINER_multihashmap_create (128,
+    dbg = GNUNET_CONTAINER_multihashmap_create (128, // why 128 and why do we 
need a multihashmap (remove doubles?), why are the timestamps not included?
                                                 false);
     for (unsigned int i = 0; i<kd->num_donation_unit_keys; i++)
     {
       const struct DONAU_DonationUnitInformation *dk = 
&kd->donation_unit_keys[i];
-      struct TALER_DenominationGroup meta = {
-        .cipher = dk->key.cipher,
-        .value = dk->value,
-        .year = dk->year
+      struct DONAU_DonationUnitGroup meta = {
+        .cipher = dk->key.bsign_pub_key->cipher,
+        .value = dk->value
+        //.year = dk->year ??
       };
       struct GNUNET_HashCode key;
       struct GroupData *gd;
       json_t *donation_unit;
       struct GNUNET_JSON_PackSpec key_spec;
 
-      //TODO: check year
-
-      TALER_donation_unit_group_get_key (&meta,
+      DONAU_donation_unit_group_get_key (&meta,
                                         &key);
       gd = GNUNET_CONTAINER_multihashmap_get (dbg,
                                               &key);
@@ -1009,16 +943,8 @@ DONAU_keys_to_json (const struct DONAU_Keys *kd)
         GNUNET_assert (false);
       }
       donation_unit = GNUNET_JSON_PACK (
-        GNUNET_JSON_pack_timestamp ("stamp_expire_deposit",
-                                    dk->expire_deposit),
-        GNUNET_JSON_pack_timestamp ("stamp_expire_withdraw",
-                                    dk->withdraw_valid_until),
-        GNUNET_JSON_pack_timestamp ("stamp_start",
-                                    dk->valid_from),
-        GNUNET_JSON_pack_timestamp ("stamp_expire_legal",
-                                    dk->expire_legal),
-        GNUNET_JSON_pack_data_auto ("master_sig",
-                                    &dk->master_sig),
+        GNUNET_JSON_pack_data_varsize ("year",
+                                       dk->year),
         key_spec
         );
       GNUNET_assert (0 ==
@@ -1031,191 +957,14 @@ DONAU_keys_to_json (const struct DONAU_Keys *kd)
     GNUNET_CONTAINER_multihashmap_destroy (dbg);
   }
 
-  auditors = json_array ();
-  GNUNET_assert (NULL != auditors);
-  for (unsigned int i = 0; i<kd->num_auditors; i++)
-  {
-    const struct TALER_DONAU_AuditorInformation *ai = &kd->auditors[i];
-    json_t *a;
-    json_t *adenoms;
-
-    adenoms = json_array ();
-    GNUNET_assert (NULL != adenoms);
-    for (unsigned int j = 0; j<ai->num_donation_unit_keys; j++)
-    {
-      const struct TALER_DONAU_AuditorDenominationInfo *adi =
-        &ai->donation_unit_keys[j];
-      const struct DONAU_DonationUnitInformation *dk =
-        &kd->donation_unit_keys[adi->denom_key_offset];
-      json_t *k;
-
-      GNUNET_assert (adi->denom_key_offset < kd->num_donation_unit_keys);
-      if (GNUNET_TIME_timestamp_cmp (now,
-                                     >,
-                                     dk->expire_deposit))
-        continue; /* skip auditor signatures for donation unit keys that have 
expired */
-      GNUNET_assert (adi->denom_key_offset < kd->num_donation_unit_keys);
-      k = GNUNET_JSON_PACK (
-        GNUNET_JSON_pack_data_auto ("denom_pub_h",
-                                    &dk->h_key),
-        GNUNET_JSON_pack_data_auto ("auditor_sig",
-                                    &adi->auditor_sig));
-      GNUNET_assert (0 ==
-                     json_array_append_new (adenoms,
-                                            k));
-    }
-
-    a = GNUNET_JSON_PACK (
-      GNUNET_JSON_pack_data_auto ("auditor_pub",
-                                  &ai->auditor_pub),
-      GNUNET_JSON_pack_string ("auditor_url",
-                               ai->auditor_url),
-      GNUNET_JSON_pack_array_steal ("donation_unit_keys",
-                                    adenoms));
-    GNUNET_assert (0 ==
-                   json_array_append_new (auditors,
-                                          a));
-  }
-
-  global_fees = json_array ();
-  GNUNET_assert (NULL != global_fees);
-  for (unsigned int i = 0; i<kd->num_global_fees; i++)
-  {
-    const struct TALER_DONAU_GlobalFee *gf
-      = &kd->global_fees[i];
-
-    if (GNUNET_TIME_absolute_is_past (gf->end_date.abs_time))
-      continue;
-    GNUNET_assert (
-      0 ==
-      json_array_append_new (
-        global_fees,
-        GNUNET_JSON_PACK (
-          GNUNET_JSON_pack_timestamp ("start_date",
-                                      gf->start_date),
-          GNUNET_JSON_pack_timestamp ("end_date",
-                                      gf->end_date),
-          TALER_JSON_PACK_GLOBAL_FEES (&gf->fees),
-          GNUNET_JSON_pack_time_rel ("history_expiration",
-                                     gf->history_expiration),
-          GNUNET_JSON_pack_time_rel ("purse_timeout",
-                                     gf->purse_timeout),
-          GNUNET_JSON_pack_uint64 ("purse_account_limit",
-                                   gf->purse_account_limit),
-          GNUNET_JSON_pack_data_auto ("master_sig",
-                                      &gf->master_sig))));
-  }
-
-  accounts = json_array ();
-  GNUNET_assert (NULL != accounts);
-  for (unsigned int i = 0; i<kd->accounts_len; i++)
-  {
-    const struct TALER_DONAU_WireAccount *acc
-      = &kd->accounts[i];
-    json_t *credit_restrictions;
-    json_t *debit_restrictions;
-
-    credit_restrictions
-      = ar_to_json (acc->credit_restrictions_length,
-                    acc->credit_restrictions);
-    GNUNET_assert (NULL != credit_restrictions);
-    debit_restrictions
-      = ar_to_json (acc->debit_restrictions_length,
-                    acc->debit_restrictions);
-    GNUNET_assert (NULL != debit_restrictions);
-    GNUNET_assert (
-      0 ==
-      json_array_append_new (
-        accounts,
-        GNUNET_JSON_PACK (
-          GNUNET_JSON_pack_string ("payto_uri",
-                                   acc->payto_uri),
-          GNUNET_JSON_pack_allow_null (
-            GNUNET_JSON_pack_string ("conversion_url",
-                                     acc->conversion_url)),
-          GNUNET_JSON_pack_array_steal ("debit_restrictions",
-                                        debit_restrictions),
-          GNUNET_JSON_pack_array_steal ("credit_restrictions",
-                                        credit_restrictions),
-          GNUNET_JSON_pack_data_auto ("master_sig",
-                                      &acc->master_sig))));
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Serialized %u/%u wire accounts to JSON\n",
-              (unsigned int) json_array_size (accounts),
-              kd->accounts_len);
-
-  wire_fees = json_object ();
-  GNUNET_assert (NULL != wire_fees);
-  for (unsigned int i = 0; i<kd->fees_len; i++)
-  {
-    const struct TALER_DONAU_WireFeesByMethod *fbw
-      = &kd->fees[i];
-    json_t *wf;
-
-    wf = json_array ();
-    GNUNET_assert (NULL != wf);
-    for (struct TALER_DONAU_WireAggregateFees *p = fbw->fees_head;
-         NULL != p;
-         p = p->next)
-    {
-      GNUNET_assert (
-        0 ==
-        json_array_append_new (
-          wf,
-          GNUNET_JSON_PACK (
-            TALER_JSON_pack_amount ("wire_fee",
-                                    &p->fees.wire),
-            TALER_JSON_pack_amount ("closing_fee",
-                                    &p->fees.closing),
-            GNUNET_JSON_pack_timestamp ("start_date",
-                                        p->start_date),
-            GNUNET_JSON_pack_timestamp ("end_date",
-                                        p->end_date),
-            GNUNET_JSON_pack_data_auto ("sig",
-                                        &p->master_sig))));
-    }
-    GNUNET_assert (0 ==
-                   json_object_set_new (wire_fees,
-                                        fbw->method,
-                                        wf));
-  }
-
-  recoup = json_array ();
-  GNUNET_assert (NULL != recoup);
-  for (unsigned int i = 0; i<kd->num_donation_unit_keys; i++)
-  {
-    const struct DONAU_DonationUnitInformation *dk
-      = &kd->donation_unit_keys[i];
-    if (! dk->revoked)
-      continue;
-    GNUNET_assert (0 ==
-                   json_array_append_new (
-                     recoup,
-                     GNUNET_JSON_PACK (
-                       GNUNET_JSON_pack_data_auto ("h_denom_pub",
-                                                   &dk->h_key))));
-  }
-
-  wblwk = json_array ();
-  GNUNET_assert (NULL != wblwk);
-  for (unsigned int i = 0; i<kd->wblwk_length; i++)
-  {
-    const struct TALER_Amount *a = &kd->wallet_balance_limit_without_kyc[i];
-
-    GNUNET_assert (0 ==
-                   json_array_append_new (
-                     wblwk,
-                     TALER_JSON_from_amount (a)));
-  }
-
   keys = GNUNET_JSON_PACK (
     GNUNET_JSON_pack_string ("version",
                              kd->version),
     GNUNET_JSON_pack_string ("currency",
                              kd->currency),
-    GNUNET_JSON_pack_uint64 ("currency_fraction_digits",
-                             kd->currency_fraction_digits),
+    GNUNET_JSON_pack_object_steal ("currency_specification",
+                                   TALER_CONFIG_currency_specs_to_json (
+                                     &kd->currency_specification)),
     GNUNET_JSON_pack_array_steal ("signkeys",
                                   signkeys),
     GNUNET_JSON_pack_array_steal ("donation_units",
diff --git a/src/util/donau_crypto.c b/src/util/donau_crypto.c
index 9c8edaa..8afd373 100644
--- a/src/util/donau_crypto.c
+++ b/src/util/donau_crypto.c
@@ -90,4 +90,40 @@ DONAU_donation_unit_pub_free (struct 
DONAU_DonationUnitPublicKey *donation_unit_
     GNUNET_CRYPTO_blind_sign_pub_decref (donation_unit_pub->bsign_pub_key);
     donation_unit_pub->bsign_pub_key = NULL;
   }
+}
+
+
+GNUNET_NETWORK_STRUCT_BEGIN
+/**
+ * Structure we hash to compute the group key for
+ * a donation unit group.
+ */
+struct DonationUnitGroupP
+{
+  /**
+   * Value of coins in this donation unit group.
+   */
+  struct TALER_AmountNBO value;
+
+  /**
+   * Cipher used for the denomination, in NBO.
+   */
+  uint32_t cipher GNUNET_PACKED;
+};
+GNUNET_NETWORK_STRUCT_END
+
+void
+DONAU_donatin_unit_group_get_key (
+  const struct DONAU_DonationUnitGroup *dg,
+  struct GNUNET_HashCode *key)
+{
+  struct DonationUnitGroupP dgp = {
+    .cipher = htonl (dg->cipher)
+  };
+
+  TALER_amount_hton (&dgp.value,
+                     &dg->value);
+  GNUNET_CRYPTO_hash (&dgp,
+                      sizeof (dgp),
+                      key);
 }
\ No newline at end of file

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