gnunet-svn
[Top][All Lists]
Advanced

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

[taler-donau] 01/03: [donau] work on issue receipts


From: gnunet
Subject: [taler-donau] 01/03: [donau] work on issue receipts
Date: Thu, 21 Mar 2024 01:39:43 +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 b2db2cbcdcdccaa22ac88659a32c9981ec68906c
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
AuthorDate: Thu Mar 21 00:53:36 2024 +0100

    [donau] work on issue receipts
---
 src/donau/donau-httpd_post-batch-issue.c   | 64 +++++++++++++++++++++---------
 src/donaudb/0002-donau_receipts_issued.sql |  4 +-
 src/donaudb/pg_lookup_issued_receipts.c    |  6 +--
 src/include/donaudb_plugin.h               |  7 +++-
 src/testing/test_donau_api.c               |  6 +--
 src/testing/testing_api_cmd_get_donau.c    | 10 ++---
 6 files changed, 64 insertions(+), 33 deletions(-)

diff --git a/src/donau/donau-httpd_post-batch-issue.c 
b/src/donau/donau-httpd_post-batch-issue.c
index c170739..217d247 100644
--- a/src/donau/donau-httpd_post-batch-issue.c
+++ b/src/donau/donau-httpd_post-batch-issue.c
@@ -75,6 +75,32 @@ parse_json_bkp (struct 
DONAU_BlindedUniqueDonationIdentifierKeyPair *bkp,
   return GNUNET_OK;
 }
 
+/**
+ * Parse signatures to JSON.
+ *
+ * @param[out] sign_arr_obj JSON object
+ * @param signatures
+ * @param num_sig number of signatures
+ * @return #GNUNET_OK if all is fine, #GNUNET_SYSERR if we could not parse
+ * is malformed.
+ */
+void
+signatures_to_JSON(const unsigned int num_sig,
+                          struct DONAU_BlindedDonationUnitSignature* 
signatures[num_sig],
+                                  json_t *j_signatures)
+{
+       int i = 0;
+       while (i < num_sig)
+       {
+         GNUNET_assert (
+           0 == json_array_append (
+                       j_signatures,
+             GNUNET_JSON_PACK (
+               GNUNET_JSON_pack_data_auto ("du_sig",
+                                             signatures[i]))));
+         i++;
+       }
+}
 
 MHD_RESULT
 DH_handler_issue_receipts_post (struct DH_RequestContext *rc,
@@ -218,6 +244,8 @@ DH_handler_issue_receipts_post (struct DH_RequestContext 
*rc,
   enum GNUNET_DB_QueryStatus qs_check_receipts;
   struct DONAUDB_IssuedReceiptsMetaData check_receipts_meta;
   struct DONAU_BudiKeyPairsHashP bkp_hash;
+  json_t *blind_signatures = json_array ();
+
   GNUNET_CRYPTO_hash (irc.bkp,
                       sizeof (irc.bkp[0]) * num_bkp,
                       &bkp_hash.hash);
@@ -241,41 +269,39 @@ DH_handler_issue_receipts_post (struct DH_RequestContext 
*rc,
   case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "request have been made already!");
-    // A request was already made. We do not change the annual limit
+    signatures_to_JSON(num_bkp, check_receipts_meta.blinded_sig, 
blind_signatures);
+//    return TALER_MHD_REPLY_JSON_PACK (
+//      rc->connection,
+//      MHD_HTTP_OK,
+//      GNUNET_JSON_pack_array_steal ("blind_signatures",
+//                                    blind_signatures));
     break;
   }
   /* check annual limit and change it -> Rollback if we could not save the 
request*/
   /* save Request (charity signature, charity id, amount, hash over bkps) and 
make it idempotent*/
   /* sign budis and send the signatures back */
   int i = 0;
-  json_t *blind_signatures;
-  blind_signatures = json_array ();
-  while (i < num_bkp)
+  struct DONAU_BlindedDonationUnitSignature **du_sig;
+  while(i < num_bkp)
   {
-    struct DONAU_BlindedDonationUnitSignature du_sig;
     // TODO: get donation unit private key
     const struct DONAU_DonationUnitPrivateKey du_priv;
     const struct DONAU_BlindedUniqueDonationIdentifier budi = irc.bkp[i].
-                                                              blinded_udi;
-    if (GNUNET_SYSERR == TALER_donation_unit_sign_blinded (&du_sig, &du_priv, &
-                                                           budi))
-    {
+                                                            blinded_udi;
+    if (GNUNET_SYSERR == TALER_donation_unit_sign_blinded (du_sig[i], 
&du_priv, &
+                                                         budi)) {
       GNUNET_break (0);
       return TALER_MHD_reply_with_error (rc->connection,
-                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                         TALER_EC_GENERIC_DB_FETCH_FAILED,
-                                         NULL);
+                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                       TALER_EC_GENERIC_DB_FETCH_FAILED,
+                                       NULL);
+
     }
-    GNUNET_assert (
-      0 == json_array_append (
-        blind_signatures,
-        GNUNET_JSON_PACK (
-          GNUNET_JSON_pack_data_auto ("du_sig",
-                                      &du_sig))));
+    i++;
   }
-
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "made blind signatures!");
+  signatures_to_JSON(num_bkp, du_sig, blind_signatures);
   return TALER_MHD_REPLY_JSON_PACK (
     rc->connection,
     MHD_HTTP_OK,
diff --git a/src/donaudb/0002-donau_receipts_issued.sql 
b/src/donaudb/0002-donau_receipts_issued.sql
index b54b5c8..4f76fdb 100644
--- a/src/donaudb/0002-donau_receipts_issued.sql
+++ b/src/donaudb/0002-donau_receipts_issued.sql
@@ -16,9 +16,9 @@
 
 CREATE TABLE receipts_issued
   (receipt_id BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE
-  ,charity_sig BYTEA CHECK (LENGTH(charity_sig)=64)
+  ,blinded_sig BYTEA[] NOT NULL
   ,charity_id BIGINT NOT NULL REFERENCES charities (charity_id) ON DELETE 
CASCADE
-  ,receipt_hash BYTEA NOT NULL CHECK (LENGTH(receipt_hash)=64)
+  ,receipt_hash BYTEA PRIMARY KEY CHECK (LENGTH(receipt_hash)=64)
   ,amount taler_amount NOT NULL
   );
 COMMENT ON TABLE receipts_issued
diff --git a/src/donaudb/pg_lookup_issued_receipts.c 
b/src/donaudb/pg_lookup_issued_receipts.c
index 131b4a1..3e341ff 100644
--- a/src/donaudb/pg_lookup_issued_receipts.c
+++ b/src/donaudb/pg_lookup_issued_receipts.c
@@ -37,8 +37,8 @@ DH_PG_lookup_issued_receipts (
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-    GNUNET_PQ_result_spec_auto_from_type ("charity_sig",
-                                          &meta->charity_sig),
+//    GNUNET_PQ_result_spec_auto_from_type ("blinded_sig",
+//                                          &meta->blinded_sig),
     TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                  &meta->amount),
     GNUNET_PQ_result_spec_uint64 ("charity_id",
@@ -49,7 +49,7 @@ DH_PG_lookup_issued_receipts (
   PREPARE (pg,
            "lookup_issued_receipts",
            "SELECT "
-           " charity_sig"
+           /*" charity_sig"*/
            " ,amount"
            " ,charity_id"
            " FROM receipts_issued"
diff --git a/src/include/donaudb_plugin.h b/src/include/donaudb_plugin.h
index b5e257f..c9028e2 100644
--- a/src/include/donaudb_plugin.h
+++ b/src/include/donaudb_plugin.h
@@ -104,10 +104,15 @@ struct DONAUDB_IssuedReceiptsMetaData
    */
   struct TALER_Amount amount;
 
+  /**
+   * number of signatures
+   */
+  unsigned int num_sig;
+
     /**
    * Charity signature
    */
-  struct DONAU_CharitySignatureP charity_sig;
+  struct DONAU_BlindedDonationUnitSignature **blinded_sig;
 
 };
 
diff --git a/src/testing/test_donau_api.c b/src/testing/test_donau_api.c
index 208da36..e553351 100644
--- a/src/testing/test_donau_api.c
+++ b/src/testing/test_donau_api.c
@@ -73,9 +73,9 @@ run (void *cls,
                                       config_file,
                                       "-D",
                                       "NULL"),
-      TALER_TESTING_cmd_get_donau ("get-donau",
-                                      cred.cfg,
-                                      true),
+//      TALER_TESTING_cmd_get_donau ("get-donau",
+//                                      cred.cfg,
+//                                      true),
          TALER_TESTING_cmd_charity_post ("post-charity",
                                                                          
"example",
                                                                          
"example.com",
diff --git a/src/testing/testing_api_cmd_get_donau.c 
b/src/testing/testing_api_cmd_get_donau.c
index 3d1d736..5192101 100644
--- a/src/testing/testing_api_cmd_get_donau.c
+++ b/src/testing/testing_api_cmd_get_donau.c
@@ -132,11 +132,11 @@ get_donau_run (void *cls,
   }
 
   ges->is = is;
-  ges->donau
-    = DONAU_get_keys (TALER_TESTING_interpreter_get_context (is),
-                      ges->donau_url,
-                      &cert_cb,
-                      ges);
+//  ges->donau
+//    = DONAU_get_keys (TALER_TESTING_interpreter_get_context (is),
+//                      ges->donau_url,
+//                      &cert_cb,
+//                      ges);
   if (NULL == ges->donau)
   {
     GNUNET_break (0);

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