gnunet-svn
[Top][All Lists]
Advanced

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

[taler-donau] branch master updated (26a90ba -> 55b5eb6)


From: gnunet
Subject: [taler-donau] branch master updated (26a90ba -> 55b5eb6)
Date: Wed, 27 Mar 2024 10:44:28 +0100

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

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

    from 26a90ba  fix taler amount in db
     new 62a0e09  [donau][donaudb] work on issue receipts
     new 07e16f6  minor change
     new 55b5eb6  merge

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/donau/Makefile.am                      |   2 +-
 src/donau/donau-httpd.c                    |  16 +--
 src/donau/donau-httpd_keys.h               |  20 ++++
 src/donau/donau-httpd_post-batch-issue.c   | 161 ++++++++++++++++++++---------
 src/donaudb/0002-donau_receipts_issued.sql |  25 +++++
 src/donaudb/pg_insert_issued_receipt.c     |  61 +++++++----
 src/donaudb/pg_insert_issued_receipt.h     |  13 ++-
 src/donaudb/pg_lookup_issued_receipts.c    |  14 ++-
 src/donaudb/pg_lookup_issued_receipts.h    |   2 +-
 src/include/donau_crypto_lib.h             |  25 +++--
 src/include/donau_json_lib.h               |  30 ++++++
 src/include/donau_pq_lib.h                 |  39 ++++++-
 src/include/donaudb_plugin.h               |  86 ++++++++-------
 13 files changed, 358 insertions(+), 136 deletions(-)

diff --git a/src/donau/Makefile.am b/src/donau/Makefile.am
index ad3eed3..6e8b3a0 100644
--- a/src/donau/Makefile.am
+++ b/src/donau/Makefile.am
@@ -48,8 +48,8 @@ donau_httpd_SOURCES = \
   donau-httpd_get-charity.c donau-httpd_post-charity.c \
   donau-httpd_get-history.c \
   donau-httpd_post-submit-receipts.c donau_httpd_submit-receipts.h \
-  donau-httpd_post-batch-issue.c donau_httpd_batch-issue.h \
   donau-httpd_terms.c donau-httpd_terms.h
+  #donau-httpd_post-batch-issue.c donau_httpd_batch-issue.h 
 
 # Testcases
 
diff --git a/src/donau/donau-httpd.c b/src/donau/donau-httpd.c
index 21bed5c..74796c4 100644
--- a/src/donau/donau-httpd.c
+++ b/src/donau/donau-httpd.c
@@ -54,7 +54,7 @@
  * Above what request latency do we start to log?
  */
  #define WARN_LATENCY GNUNET_TIME_relative_multiply ( \
-           GNUNET_TIME_UNIT_MILLISECONDS, 500)
+    GNUNET_TIME_UNIT_MILLISECONDS, 500)
 
 /**
  * Are clients allowed to request /keys for times other than the
@@ -498,13 +498,13 @@ handle_mhd_request (void *cls,
       .nargs_is_upper_bound = true
     },
     /* POST batch issue receipts */
-    {
-      .url = "batch-issue",
-      .method = MHD_HTTP_METHOD_POST,
-      .handler.post = &DH_handler_issue_receipts_post,
-      .nargs = 1,
-      .nargs_is_upper_bound = true
-    },
+    // {
+    //   .url = "batch-issue",
+    //   .method = MHD_HTTP_METHOD_POST,
+    //   .handler.post = &DH_handler_issue_receipts_post,
+    //   .nargs = 1,
+    //   .nargs_is_upper_bound = true
+    // },
     /**
     etc
 
diff --git a/src/donau/donau-httpd_keys.h b/src/donau/donau-httpd_keys.h
index c978765..09de95e 100644
--- a/src/donau/donau-httpd_keys.h
+++ b/src/donau/donau-httpd_keys.h
@@ -173,6 +173,26 @@ MHD_RESULT
 DH_handler_keys (struct DH_RequestContext *rc,
                  const char *const args[]);
 
+
+// TODO: Implement
+/**
+ * Look up the issue for a donation unit public key.  Note that the result
+ * must only be used in this thread and only until another key or
+ * key state is resolved.
+ *
+ * @param h_du_pub hash of donation unit public key
+ * @param[in,out] conn used to return status message if NULL is returned
+ * @param[out] mret set to the MHD status if NULL is returned
+ * @return the donation unit key issue,
+ *         or NULL if @a h_du_pub could not be found
+ */
+struct DH_DonationUnitKey *
+DH_keys_donation_unit_by_hash (
+  const struct DONAU_DonationUnitHashP *h_du_pub,
+  struct MHD_Connection *conn,
+  MHD_RESULT *mret);
+
+
 /**
  * Initialize keys subsystem.
  *
diff --git a/src/donau/donau-httpd_post-batch-issue.c 
b/src/donau/donau-httpd_post-batch-issue.c
index 217d247..2be89eb 100644
--- a/src/donau/donau-httpd_post-batch-issue.c
+++ b/src/donau/donau-httpd_post-batch-issue.c
@@ -31,6 +31,8 @@
 #include "donau-httpd_batch-issue.h"
 #include "donau-httpd_db.h"
 #include "donau-httpd_metrics.h"
+#include "donau_json_lib.h"
+#include "donau-httpd_keys.h"
 
 
 /**
@@ -59,7 +61,7 @@ parse_json_bkp (struct 
DONAU_BlindedUniqueDonationIdentifierKeyPair *bkp,
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_fixed_auto ("h_du_pub",
                                  &bkp->h_donation_unit_pub),
-    GNUNET_JSON_spec_fixed_auto ("blinded_udi",
+    DONAU_JSON_spec_blinded_udi ("blinded_udi",
                                  &bkp->blinded_udi),
     GNUNET_JSON_spec_end ()
   };
@@ -72,9 +74,11 @@ parse_json_bkp (struct 
DONAU_BlindedUniqueDonationIdentifierKeyPair *bkp,
     GNUNET_break_op (0);
     return GNUNET_SYSERR;
   }
+  /* TODO: Check for duplicate blinded UDIs.*/
   return GNUNET_OK;
 }
 
+
 /**
  * Parse signatures to JSON.
  *
@@ -85,23 +89,25 @@ parse_json_bkp (struct 
DONAU_BlindedUniqueDonationIdentifierKeyPair *bkp,
  * is malformed.
  */
 void
-signatures_to_JSON(const unsigned int num_sig,
-                          struct DONAU_BlindedDonationUnitSignature* 
signatures[num_sig],
-                                  json_t *j_signatures)
+signatures_to_JSON (const unsigned int num_sig,
+                    struct DONAU_BlindedDonationUnitSignature*signatures,
+                    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++;
-       }
+  int i = 0;
+  while (i < num_sig)
+  {
+    struct DONAU_BlindedDonationUnitSignature*signature = &signatures[i];
+    GNUNET_assert (
+      0 == json_array_append (
+        j_signatures,
+        GNUNET_JSON_PACK (
+          DONAU_JSON_pack_blinded_donation_unit_sig ("blinded_signatures",
+                                                     signature))));
+    i++;
+  }
 }
 
+
 MHD_RESULT
 DH_handler_issue_receipts_post (struct DH_RequestContext *rc,
                                 const json_t *root,
@@ -160,7 +166,7 @@ DH_handler_issue_receipts_post (struct DH_RequestContext 
*rc,
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "parse some values!");
   /* parse the budikeypairs array */
-  const uint64_t num_bkp
+  const size_t num_bkp
     = json_array_size (budikeypairs);
   if (0 != num_bkp)
   {
@@ -243,15 +249,19 @@ DH_handler_issue_receipts_post (struct DH_RequestContext 
*rc,
   /* request already made? -> idempotent */
   enum GNUNET_DB_QueryStatus qs_check_receipts;
   struct DONAUDB_IssuedReceiptsMetaData check_receipts_meta;
-  struct DONAU_BudiKeyPairsHashP bkp_hash;
+  struct DONAU_DonationReceiptHashP h_receipts = {0};
   json_t *blind_signatures = json_array ();
 
-  GNUNET_CRYPTO_hash (irc.bkp,
-                      sizeof (irc.bkp[0]) * num_bkp,
-                      &bkp_hash.hash);
-
+  for (int i = 0; i < num_bkp; i++)
+  {
+    struct GNUNET_HashCode temp_hash;
+    GNUNET_CRYPTO_hash (irc.bkp,
+                        sizeof (irc.bkp[0].blinded_udi) * num_bkp,
+                        &temp_hash);
+    GNUNET_CRYPTO_hash_xor (&h_receipts.hash, &temp_hash, &h_receipts.hash);
+  }
   qs_check_receipts = DH_plugin->lookup_issued_receipts (DH_plugin->cls,
-                                                         bkp_hash,
+                                                         h_receipts,
                                                          &check_receipts_meta);
   switch (qs_check_receipts)
   {
@@ -269,39 +279,96 @@ 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!");
-    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;
+    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));
   }
-  /* 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;
-  struct DONAU_BlindedDonationUnitSignature **du_sig;
-  while(i < num_bkp)
+  /* calculate new receipts to date and check annual limit */
+  struct TALER_Amount receipts_sum;
+  for (int i = 0; i < num_bkp; i++)
   {
-    // 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[i], 
&du_priv, &
-                                                         budi)) {
-      GNUNET_break (0);
+    MHD_RESULT mret;
+    struct DH_DonationUnitKey *dk;
+    dk = DH_keys_donation_unit_by_hash (&irc.bkp[i].h_donation_unit_pub,
+                                        rc->connection,
+                                        &mret);
+    if (NULL == dk || 0 >= TALER_amount_add (&receipts_sum, &receipts_sum,
+                                             &dk->value))
       return TALER_MHD_reply_with_error (rc->connection,
+                                         MHD_HTTP_BAD_REQUEST,
+                                         TALER_EC_GENERIC_PARAMETER_MALFORMED,
+                                         "budikeypairs");
+  }
+  struct TALER_Amount new_receipts_to_date;
+  TALER_amount_add (&new_receipts_to_date, &receipts_sum,
+                    &charity_meta.receipts_to_date);
+  // new_receipts_to_date has to be smaller or equal as max_per_year
+  if (0 > TALER_amount_cmp (&new_receipts_to_date, &charity_meta.max_per_year))
+    return TALER_MHD_reply_with_error (rc->connection,
+                                       MHD_HTTP_BAD_REQUEST,
+                                       TALER_EC_GENERIC_PARAMETER_MALFORMED,// 
TODO: other EC
+                                       "budikeypairs");
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "calculated the new receipts to date amount");
+
+  /* sign budis and send the signatures back */
+  struct DONAU_BlindedDonationUnitSignature *du_sigs = {0};
+  {
+    int i = 0;
+    while (i < num_bkp)
+    {
+      // TODO: get donation unit private key
+      const struct DONAU_DonationUnitPrivateKey du_priv;
+      const struct DONAU_BlindedUniqueDonationIdentifier budi = irc.bkp[i].
+                                                                blinded_udi;
+      struct DONAU_BlindedDonationUnitSignature *du_sig = &du_sigs[i];
+      if (GNUNET_SYSERR == TALER_donation_unit_sign_blinded (du_sig, &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, 
// TODO:other EC
+                                           NULL);
+
+      }
+      i++;
+    }
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "made blind signatures!");
+  }
+  /* save new receipts to date and save receipts Request (blinded signatures,
+   * charity id, amount, hash over bkps) to make it idempotent*/
+  enum GNUNET_DB_QueryStatus qs_insert_ir;
+  qs_insert_ir = DH_plugin->insert_issued_receipt (
+    DH_plugin->cls,
+    num_bkp,
+    du_sigs,
+    (uint64_t) charity_id,
+    &h_receipts,
+    &receipts_sum,
+    &new_receipts_to_date);
+  switch (qs_insert_ir)
+  {
+  case GNUNET_DB_STATUS_HARD_ERROR:
+  case GNUNET_DB_STATUS_SOFT_ERROR:
+    GNUNET_break (0);
+    return TALER_MHD_reply_with_error (rc->connection,
                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
                                        TALER_EC_GENERIC_DB_FETCH_FAILED,
                                        NULL);
-
-    }
-    i++;
+  case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+  case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+    break;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "made blind signatures!");
-  signatures_to_JSON(num_bkp, du_sig, blind_signatures);
+              "issue receipts request is saved! (idempotent)");
+
+  signatures_to_JSON (num_bkp, du_sigs, 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 2b5a1db..f8f8ecd 100644
--- a/src/donaudb/0002-donau_receipts_issued.sql
+++ b/src/donaudb/0002-donau_receipts_issued.sql
@@ -27,3 +27,28 @@ COMMENT ON COLUMN receipts_issued.blinded_sig
   IS 'Signature from the charity.';
 COMMENT ON COLUMN receipts_issued.receipt_hash
   IS 'Hash value over all the blinded donation receipt received plus the hash 
of the donation units public key.';
+
+
+CREATE FUNCTION 
transaction_update_current_amount_receipts_save_issue_receipts_request(
+   IN blinded_sig BYTEA[] NOT NULL -- blinded signatures
+  ,IN charity_id BIGINT NOT NULL -- charity id which made the issue receitps 
request
+  ,IN receipt_hash BYTEA NOT NULL-- hash over all budi key pairs (primary key)
+  ,IN amount taler_amount NOT NULL -- total amount of the requested receipts
+  ,IN new_total_amount NOT NULL -- new total amount of a charity
+)
+RETURNS VOID
+--LANGUAGE plpgsql
+AS $$
+BEGIN;
+
+-- Update table charity
+UPDATE charity SET receipts_to_date = new_total_amount;
+-- Insert into the table receipts_issued
+INSERT INTO receipts_issued (blinded_sig, charity_id, receipt_hash, amount) 
VALUES ('blinded_sig', 'charity_id', 'receipts_hash', 'amount');
+
+-- Commit the transaction if everything is successful
+COMMIT;
+END $$;
+
+COMMENT ON FUNCTION transaction_save_issue_receipts_request
+  IS 'This is a transaction for updating the current amount of receipts of a 
year of a charity and saves the receipts request what makes it idempotent';
diff --git a/src/donaudb/pg_insert_issued_receipt.c 
b/src/donaudb/pg_insert_issued_receipt.c
index fbcb45a..c1f3b29 100644
--- a/src/donaudb/pg_insert_issued_receipt.c
+++ b/src/donaudb/pg_insert_issued_receipt.c
@@ -17,7 +17,9 @@
  * @file donaudb/pg_insert_issed_receipt.c
  * @brief Implementation of the insert_issued_receipt function for Postgres
  * @author Johannes Casaburi
+ * @author Lukas Matyja
  */
+#include <gnunet/gnunet_pq_lib.h>
 #include <taler/platform.h>
 #include <taler/taler_error_codes.h>
 #include <taler/taler_dbevents.h>
@@ -25,34 +27,53 @@
 #include "pg_insert_issued_receipt.h"
 #include "pg_helper.h"
 #include "donau_service.h"
+#include "donau_pq_lib.h"
 
 enum GNUNET_DB_QueryStatus
 DH_PG_insert_issued_receipt (void *cls,
-                             const struct DONAU_CharitySignatureP *charity_sig,
+                             const size_t num_blinded_sig,
+                             const struct
+                             DONAU_BlindedDonationUnitSignature *signatures,
                              const uint64_t charity_id,
                              const struct DONAU_DonationReceiptHashP 
*h_receipt,
-                             const struct TALER_Amount *amount)
+                             const struct TALER_Amount 
*amount_receipts_request,
+                             const struct TALER_Amount *charity_new_amount)
 {
-  struct PostgresClosure *pg = cls;
+  struct PostgresClosure *pc = cls;
+  enum GNUNET_GenericReturnValue ret = GNUNET_OK;
+  // struct GNUNET_PQ_Context *conn;
   struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (charity_sig),
+    DONAU_PQ_query_param_array_blinded_donation_unit_sig (num_blinded_sig,
+                                                          signatures, 
pc->conn),
     GNUNET_PQ_query_param_uint64 (&charity_id),
-    GNUNET_PQ_query_param_auto_from_type (h_receipt),
-    TALER_PQ_query_param_amount (pg->conn,
-                                 amount),
+    GNUNET_PQ_query_param_fixed_size (&h_receipt->hash, sizeof(struct
+                                                               
DONAU_DonationReceiptHashP)),
+    TALER_PQ_query_param_amount_with_currency (pc->conn,
+                                               amount_receipts_request),
+    TALER_PQ_query_param_amount_with_currency (pc->conn, charity_new_amount),
     GNUNET_PQ_query_param_end
   };
-
-  PREPARE (pg,
-           "insert_issued_receipts",
-           "INSERT INTO receipts_issued "
-           "(charity_sig"
-           ",charity_id"
-           ",h_receipt"
-           ",amount"
-           ") VALUES "
-           "($1, $2, $3, $4);");
-  return GNUNET_PQ_eval_prepared_non_select (pg->conn,
-                                             "insert_issued_receipt",
-                                             params);
+  PREPARE (pc,
+           "donation_unit_insert",
+           "SELECT"
+           " 
receipts_issued.transaction_update_current_amount_receipts_save_issue_receipts_request"
+           " ($1, $2, $3, $4, $5);");
+  if (0 >
+      GNUNET_PQ_eval_prepared_non_select (pc->conn,
+                                          
"transaction_update_current_amount_receipts_save_issue_receipts_request",
+                                          params))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Failed to run 
'transaction_update_current_amount_receipts_save_issue_receipts_request' 
prepared statement\n");
+    ret = GNUNET_SYSERR;
+  }
+  if (GNUNET_OK == ret)
+  {
+    ret = GNUNET_PQ_exec_sql (pc->conn,
+                              "procedures");
+    if (GNUNET_OK != ret)
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "Failed to load stored procedures\n");
+  }
+  return ret;
 }
diff --git a/src/donaudb/pg_insert_issued_receipt.h 
b/src/donaudb/pg_insert_issued_receipt.h
index 781f283..4089e1d 100644
--- a/src/donaudb/pg_insert_issued_receipt.h
+++ b/src/donaudb/pg_insert_issued_receipt.h
@@ -29,17 +29,22 @@
  * Insert issued blinded donation receipt to the charity.
  *
  * @param cls closure
- * @param charity_sig signature from the charity
+ * @param num_blinded_sig
+ * @param signatures blinded signatures
  * @param charity_id identifier of the charity
  * @param h_receipt hash of the donation receipt
- * @param amount donation amount
+ * @param amount_receipts_request donation amount
+ * @param charity_new_amount new current receipts amount of the charity
  * @return transaction status code
  */
 enum GNUNET_DB_QueryStatus
 DH_PG_insert_issued_receipt (void *cls,
-                             const struct DONAU_CharitySignatureP *charity_sig,
+                             const size_t num_blinded_sig,
+                             const struct
+                             DONAU_BlindedDonationUnitSignature *signatures,
                              const uint64_t charity_id,
                              const struct DONAU_DonationReceiptHashP 
*h_receipt,
-                             const struct TALER_Amount *amount);
+                             const struct TALER_Amount 
*amount_receipts_request,
+                             const struct TALER_Amount *charity_new_amount);
 
 #endif
diff --git a/src/donaudb/pg_lookup_issued_receipts.c 
b/src/donaudb/pg_lookup_issued_receipts.c
index 3e341ff..8d77448 100644
--- a/src/donaudb/pg_lookup_issued_receipts.c
+++ b/src/donaudb/pg_lookup_issued_receipts.c
@@ -24,21 +24,25 @@
 #include <taler/taler_pq_lib.h>
 #include "pg_lookup_issued_receipts.h"
 #include "pg_helper.h"
+#include "donau_pq_lib.h"
 
 enum GNUNET_DB_QueryStatus
 DH_PG_lookup_issued_receipts (
   void *cls,
-  struct DONAU_BudiKeyPairsHashP bkp_hash,
+  struct DONAU_DonationReceiptHashP h_receipts,
   struct DONAUDB_IssuedReceiptsMetaData *meta)
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (&bkp_hash),
+    GNUNET_PQ_query_param_auto_from_type (&h_receipts),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
-//    GNUNET_PQ_result_spec_auto_from_type ("blinded_sig",
-//                                          &meta->blinded_sig),
+    DONAU_PQ_result_spec_array_blinded_donation_unit_sig (
+      pg->conn,
+      "blinded_sig",
+      &meta->num_sig,
+      &meta->blinded_sig),
     TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
                                  &meta->amount),
     GNUNET_PQ_result_spec_uint64 ("charity_id",
@@ -49,7 +53,7 @@ DH_PG_lookup_issued_receipts (
   PREPARE (pg,
            "lookup_issued_receipts",
            "SELECT "
-           /*" charity_sig"*/
+           " blinded_sig"
            " ,amount"
            " ,charity_id"
            " FROM receipts_issued"
diff --git a/src/donaudb/pg_lookup_issued_receipts.h 
b/src/donaudb/pg_lookup_issued_receipts.h
index a527ea5..a23c071 100644
--- a/src/donaudb/pg_lookup_issued_receipts.h
+++ b/src/donaudb/pg_lookup_issued_receipts.h
@@ -34,6 +34,6 @@
 enum GNUNET_DB_QueryStatus
 DH_PG_lookup_issued_receipts (
   void *cls,
-  struct DONAU_BudiKeyPairsHashP bkp_hash,
+  struct DONAU_DonationReceiptHashP h_receipts,
   struct DONAUDB_IssuedReceiptsMetaData *meta);
 #endif
diff --git a/src/include/donau_crypto_lib.h b/src/include/donau_crypto_lib.h
index 36373be..59d424d 100644
--- a/src/include/donau_crypto_lib.h
+++ b/src/include/donau_crypto_lib.h
@@ -279,10 +279,10 @@ struct DONAU_BlindedUniqueDonationIdentifierKeyPair
 /**
  * Hash of a budikeypair array
  */
-struct DONAU_BudiKeyPairsHashP
-{
-  struct GNUNET_HashCode hash;
-};
+// struct DONAU_BudiKeyPairsHashP
+// {
+//   struct GNUNET_HashCode hash;
+// };
 
 /**
  * Hash of a budikeypair array
@@ -393,9 +393,12 @@ DONAU_blinded_donation_unit_sig_free (
  * @return #GNUNET_OK on success
  */
 enum GNUNET_GenericReturnValue
-TALER_donation_unit_sign_blinded (struct DONAU_BlindedDonationUnitSignature 
*du_sig,
-                          const struct DONAU_DonationUnitPrivateKey *du_priv,
-                          const struct DONAU_BlindedUniqueDonationIdentifier 
*budi);
+TALER_donation_unit_sign_blinded (struct
+                                  DONAU_BlindedDonationUnitSignature *du_sig,
+                                  const struct
+                                  DONAU_DonationUnitPrivateKey *du_priv,
+                                  const struct
+                                  DONAU_BlindedUniqueDonationIdentifier *budi);
 
 
 /**
@@ -408,9 +411,11 @@ TALER_donation_unit_sign_blinded (struct 
DONAU_BlindedDonationUnitSignature *du_
  * @return #GNUNET_OK if the signature is valid
  */
 enum GNUNET_GenericReturnValue
-TALER_donation_unit_pub_verify (const struct DONAU_DonationUnitPublicKey 
*du_pub,
-                        const struct DONAU_DonationUnitSignature *du_sig,
-                        const struct DONAU_BudiHashP *budi_hash);
+TALER_donation_unit_pub_verify (const struct
+                                DONAU_DonationUnitPublicKey *du_pub,
+                                const struct
+                                DONAU_DonationUnitSignature *du_sig,
+                                const struct DONAU_BudiHashP *budi_hash);
 
 
 // FIXME: Copied from taler_crypto_lib.h, is anything of this necessary?
diff --git a/src/include/donau_json_lib.h b/src/include/donau_json_lib.h
index 7d8f7d1..43503b9 100644
--- a/src/include/donau_json_lib.h
+++ b/src/include/donau_json_lib.h
@@ -59,6 +59,21 @@ DONAU_JSON_spec_donation_unit_group (const char *field,
                                      const char *currency,
                                      struct DONAU_DonationUnitGroup *group);
 
+// TODO: Implement (like exchange TALER_JSON_spec_blinded_planchet method)
+/**
+ * Generate line in parser specification for a
+ * blinded unique identifier.
+ *
+ * @param field name of the field
+ * @param[out] blinded_udi the blinded unique identifier to initialize
+ * @return corresponding field spec
+ */
+struct GNUNET_JSON_Specification
+DONAU_JSON_spec_blinded_udi (const char *field,
+                             struct DONAU_BlindedUniqueDonationIdentifier *
+                             blinded_udi);
+
+
 /**
  * Generate packer instruction for a JSON field of type
  * unsigned integer.
@@ -84,4 +99,19 @@ DONAU_JSON_pack_donation_unit_pub (
   const char *name,
   const struct DONAU_DonationUnitPublicKey *pk);
 
+// TODO: implement
+/**
+ * Generate packer instruction for a JSON field of type
+ * blinded donation unit signature (that needs to be
+ * unblinded before it becomes valid).
+ *
+ * @param name name of the field to add to the object
+ * @param sig signature
+ * @return json pack specification
+ */
+struct GNUNET_JSON_PackSpec
+DONAU_JSON_pack_blinded_donation_unit_sig (
+  const char *name,
+  const struct DONAU_BlindedDonationUnitSignature *sig);
+
 #endif
diff --git a/src/include/donau_pq_lib.h b/src/include/donau_pq_lib.h
index 6a6399e..a11412e 100644
--- a/src/include/donau_pq_lib.h
+++ b/src/include/donau_pq_lib.h
@@ -16,7 +16,8 @@
 /**
  * @file include/donau_pq_lib.h
  * @brief helper functions for DB interactions
- * @author Johannes Casaburi>
+ * @author Johannes Casaburi
+ * @author Lukas Matyja
  */
 #ifndef DONAU_PQ_LIB_H_
 #define DONAU_PQ_LIB_H_
@@ -37,6 +38,23 @@ struct GNUNET_PQ_QueryParam
 DONAU_PQ_query_param_donation_unit_pub (
   const struct DONAU_DonationUnitPublicKey *donation_unit_pub);
 
+
+// TODO: implement
+/**
+ * Generate query parameter for an array of blinded donation unit signatures
+ *
+ * @param num number of elements in @e du_sigs
+ * @param du_sigs array of blinded denomination signatures
+ * @param db context for the db-connection
+ */
+struct GNUNET_PQ_QueryParam
+DONAU_PQ_query_param_array_blinded_donation_unit_sig (
+  size_t num,
+  const struct DONAU_BlindedDonationUnitSignature *du_sigs,
+  struct GNUNET_PQ_Context *db
+  );
+
+
 /**
  * Denomination public key expected.
  *
@@ -46,8 +64,25 @@ DONAU_PQ_query_param_donation_unit_pub (
  */
 struct GNUNET_PQ_ResultSpec
 DONAU_PQ_result_spec_donation_unit_pub (const char *name,
-                                        struct DONAU_DonationUnitPublicKey 
*donation_unit_pub);
+                                        struct DONAU_DonationUnitPublicKey *
+                                        donation_unit_pub);
 
+// TODO: implement
+/**
+ * Array of blinded donation unit signature expected
+ *
+ * @param db context of the database connection
+ * @param name name of the field in the table
+ * @param[out] num number of elements in @e denomdu_sigs_sigs
+ * @param[out] du_sigs where to store the result
+ * @return array entry for the result specification to use
+ */
+struct GNUNET_PQ_ResultSpec
+DONAU_PQ_result_spec_array_blinded_donation_unit_sig (
+  struct GNUNET_PQ_Context *db,
+  const char *name,
+  size_t *num,
+  struct DONAU_BlindedDonationUnitSignature **du_sigs);
 #endif  /* DONAU_PQ_LIB_H_ */
 
 /* end of include/donau_pq_lib.h */
\ No newline at end of file
diff --git a/src/include/donaudb_plugin.h b/src/include/donaudb_plugin.h
index 3324637..91cf068 100644
--- a/src/include/donaudb_plugin.h
+++ b/src/include/donaudb_plugin.h
@@ -107,12 +107,18 @@ struct DONAUDB_IssuedReceiptsMetaData
   /**
    * number of signatures
    */
-  unsigned int num_sig;
+  size_t num_sig;
 
   /**
- * Charity signature
- */
-  struct DONAU_BlindedDonationUnitSignature **blinded_sig;
+<<<<<<< HEAD
+   * Array of blinded signatures
+   */
+  struct DONAU_BlindedDonationUnitSignature *blinded_sig;
+  ====== =
+    *Charity signature
+    *
+    / struct DONAU_BlindedDonationUnitSignature **blinded_sig;
+  >> >> >> > refs / remotes / origin / master
 
 };
 
@@ -216,7 +222,7 @@ struct DONAUDB_Plugin
    * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
    */
   enum GNUNET_GenericReturnValue
-    (*drop_tables)(void *cls);
+  (*drop_tables)(void *cls);
 
   /**
    * Create the necessary tables if they are not present
@@ -229,9 +235,9 @@ struct DONAUDB_Plugin
    * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
    */
   enum GNUNET_GenericReturnValue
-    (*create_tables)(void *cls,
-                     bool support_partitions,
-                     uint32_t num_partitions);
+  (*create_tables)(void *cls,
+                   bool support_partitions,
+                   uint32_t num_partitions);
 
 
   /**
@@ -243,8 +249,8 @@ struct DONAUDB_Plugin
    * @return #GNUNET_OK on success
    */
   enum GNUNET_GenericReturnValue
-    (*start)(void *cls,
-             const char *name);
+  (*start)(void *cls,
+           const char *name);
 
 
   /**
@@ -256,8 +262,8 @@ struct DONAUDB_Plugin
    * @return #GNUNET_OK on success
    */
   enum GNUNET_GenericReturnValue
-    (*start_read_committed)(void *cls,
-                            const char *name);
+  (*start_read_committed)(void *cls,
+                          const char *name);
 
   /**
    * Start a READ ONLY serializable transaction.
@@ -268,8 +274,8 @@ struct DONAUDB_Plugin
    * @return #GNUNET_OK on success
    */
   enum GNUNET_GenericReturnValue
-    (*start_read_only)(void *cls,
-                       const char *name);
+  (*start_read_only)(void *cls,
+                     const char *name);
 
 
   /**
@@ -279,7 +285,7 @@ struct DONAUDB_Plugin
    * @return transaction status
    */
   enum GNUNET_DB_QueryStatus
-    (*commit)(void *cls);
+  (*commit)(void *cls);
 
 
   /**
@@ -293,7 +299,7 @@ struct DONAUDB_Plugin
    *         #GNUNET_SYSERR on hard errors
    */
   enum GNUNET_GenericReturnValue
-    (*preflight)(void *cls);
+  (*preflight)(void *cls);
 
 
   /**
@@ -314,7 +320,7 @@ struct DONAUDB_Plugin
    *         #GNUNET_SYSERR on DB errors
    */
   enum GNUNET_GenericReturnValue
-    (*gc)(void *cls);
+  (*gc)(void *cls);
 
 
   /**
@@ -369,7 +375,7 @@ struct DONAUDB_Plugin
    * @return database transaction status
    */
   enum GNUNET_DB_QueryStatus
-    (*lookup_charity)(
+  (*lookup_charity)(
     void *cls,
     uint64_t charity_id,
     struct DONAUDB_CharityMetaData *meta);
@@ -384,7 +390,7 @@ struct DONAUDB_Plugin
    * @return database transaction status
    */
   enum GNUNET_DB_QueryStatus
-    (*do_charity_delete)(
+  (*do_charity_delete)(
     void *cls,
     uint64_t charity_id);
 
@@ -397,7 +403,7 @@ struct DONAUDB_Plugin
    * @return database transaction status
    */
   enum GNUNET_DB_QueryStatus
-    (*get_charities)(
+  (*get_charities)(
     void *cls,
     DONAUDB_GetCharitiesCallback cb,
     void *cb_cls);
@@ -411,7 +417,7 @@ struct DONAUDB_Plugin
    * @return database transaction status
    */
   enum GNUNET_DB_QueryStatus
-    (*insert_charity)(
+  (*insert_charity)(
     void *cls,
     const struct DONAU_CharityPublicKeyP *charity_pub,
     const char *charity_name,
@@ -430,7 +436,7 @@ struct DONAUDB_Plugin
     * @return database transaction status
     */
   enum GNUNET_DB_QueryStatus
-    (*iterate_donation_units)(
+  (*iterate_donation_units)(
     void *cls,
     DONAUDB_IterateDonationUnitsCallback cb,
     void *cb_cls);
@@ -444,7 +450,7 @@ struct DONAUDB_Plugin
     * @return database transaction status
     */
   enum GNUNET_DB_QueryStatus
-    (*get_history)(
+  (*get_history)(
     void *cls,
     DONAUDB_GetHistoryCallback cb,
     void *cb_cls);
@@ -458,7 +464,7 @@ struct DONAUDB_Plugin
     * @return database transaction status
     */
   enum GNUNET_DB_QueryStatus
-    (*lookup_history_entry)(
+  (*lookup_history_entry)(
     void *cls,
     const unsigned long long charity_id,
     const struct TALER_Amount *final_amount,
@@ -472,7 +478,7 @@ struct DONAUDB_Plugin
     * @return database transaction status
     */
   enum GNUNET_DB_QueryStatus
-    (*insert_donation_unit)(
+  (*insert_donation_unit)(
     void *cls,
     const struct DONAU_DonationUnitHashP *h_donation_unit_pub,
     const struct DONAU_DonationUnitPublicKey *donation_unit_pub,
@@ -489,7 +495,7 @@ struct DONAUDB_Plugin
     * @return transaction status code
     */
   enum GNUNET_DB_QueryStatus
-    (*insert_history_entry) (
+  (*insert_history_entry)(
     void *cls,
     const uint64_t charity_id,
     const struct TALER_Amount *final_amount,
@@ -499,19 +505,23 @@ struct DONAUDB_Plugin
     * Insert issued blinded donation receipt to the charity.
     *
     * @param cls closure
-    * @param charity_sig signature from the charity
+    * @param num_blinded_sig
+    * @param signatures blinded signatures
     * @param charity_id identifier of the charity
     * @param h_receipt hash of the donation receipt
-    * @param amount donation amount
+    * @param amount_receipts_request donation amount
+    * @param charity_new_amount new current receipts amount of the charity
     * @return transaction status code
     */
   enum GNUNET_DB_QueryStatus
-    (*insert_issued_receipt) (
+  (*insert_issued_receipt)(
     void *cls,
-    const struct DONAU_CharitySignatureP *charity_sig,
+    const size_t num_blinded_sig,
+    const struct DONAU_BlindedDonationUnitSignature *signatures,
     const uint64_t charity_id,
     const struct DONAU_DonationReceiptHashP *h_receipt,
-    const struct TALER_Amount *amount);
+    const struct TALER_Amount *amount_receipts_request,
+    const struct TALER_Amount *charity_new_amount);
 
   /**
     * Insert submitted donation receipt from the donor.
@@ -525,7 +535,7 @@ struct DONAUDB_Plugin
     * @return transaction status code
     */
   enum GNUNET_DB_QueryStatus
-    (*insert_submitted_receipt) (
+  (*insert_submitted_receipt)(
     void *cls,
     const struct DONAU_HashDonorTaxId *h_tax_number,
     const union GNUNET_CRYPTO_BlindSessionNonce *nonce,
@@ -537,14 +547,14 @@ struct DONAUDB_Plugin
   * Lookup issued receipts from the charity.
   *
   * @param cls closure
-  * @param bkp_hash the hash over the budi-key-pairs
+  * @param h_receipts the hash over the blinded unique identifiers
   * @param meta meta data about an issued request
   * @return transaction status code
   */
   enum GNUNET_DB_QueryStatus
-    (*lookup_issued_receipts) (
+  (*lookup_issued_receipts)(
     void *cls,
-    struct DONAU_BudiKeyPairsHashP bkp_hash,
+    struct DONAU_DonationReceiptHashP h_receitps,
     struct DONAUDB_IssuedReceiptsMetaData *meta);
 
   /**
@@ -556,7 +566,7 @@ struct DONAUDB_Plugin
     * @return transaction status code
     */
   enum GNUNET_DB_QueryStatus
-    (*insert_signing_key) (
+  (*insert_signing_key)(
     void *cls,
     const struct DONAU_DonauPublicKeyP *donau_pub,
     struct DONAUDB_SignkeyMetaData *meta);
@@ -570,7 +580,7 @@ struct DONAUDB_Plugin
     * @return transaction status code
     */
   enum GNUNET_DB_QueryStatus
-    (*lookup_signing_key) (
+  (*lookup_signing_key)(
     void *cls,
     const struct DONAU_DonauPublicKeyP *donau_pub,
     struct DONAUDB_SignkeyMetaData *meta);
@@ -584,7 +594,7 @@ struct DONAUDB_Plugin
     * @return database transaction status
     */
   enum GNUNET_DB_QueryStatus
-    (*iterate_active_signing_keys)(
+  (*iterate_active_signing_keys)(
     void *cls,
     DONAUDB_IterateActiveSigningKeysCallback cb,
     void *cb_cls);

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