[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.