donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit f0426eae184cea17d8076bc5f2cd9160123f2046
parent 7504a5a6b4c82f35d43216a243817ccbf1ca1686
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date:   Tue,  9 Apr 2024 00:19:16 +0200

work on issue receipts

Diffstat:
Msrc/donau/donau-httpd_post-batch-issue.c | 20++++++++++----------
Msrc/include/donau_service.h | 1+
Msrc/lib/donau_api_batch_issue_receipts.c | 14+++++++++++++-
Msrc/pq/pq_query_helper.c | 20++++++++++----------
Msrc/testing/testing_api_cmd_issue_receipts.c | 7++++++-
Msrc/util/charity_signatures.c | 2+-
6 files changed, 41 insertions(+), 23 deletions(-)

diff --git a/src/donau/donau-httpd_post-batch-issue.c b/src/donau/donau-httpd_post-batch-issue.c @@ -167,7 +167,7 @@ DH_handler_issue_receipts_post (struct DH_RequestContext *rc, } GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "parse some values!"); + "parse some values!\n"); /* parse the budikeypairs array */ const size_t num_bkp = json_array_size (budikeypairs); @@ -195,7 +195,7 @@ DH_handler_issue_receipts_post (struct DH_RequestContext *rc, else { GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "empty array of budi key pairs!"); + "empty array of budi key pairs!\n"); return TALER_MHD_reply_with_error (rc->connection, MHD_HTTP_BAD_REQUEST, TALER_EC_GENERIC_PARAMETER_MALFORMED, @@ -203,7 +203,7 @@ DH_handler_issue_receipts_post (struct DH_RequestContext *rc, } GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "budi key pairs array is parsed!"); + "budi key pairs array is parsed!\n"); // Get charity pub struct DONAUDB_CharityMetaData charity_meta; enum GNUNET_DB_QueryStatus qs_charity; @@ -232,7 +232,7 @@ DH_handler_issue_receipts_post (struct DH_RequestContext *rc, } GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "got charity from db!"); + "got charity from db!\n"); /* verify charity signature */ if (GNUNET_OK != DONAU_charity_budi_key_pair_verify (num_bkp, irc.bkp, @@ -248,7 +248,7 @@ DH_handler_issue_receipts_post (struct DH_RequestContext *rc, } GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "charity signature valid!"); + "charity signature valid!\n"); /* request already made? -> idempotent */ enum GNUNET_DB_QueryStatus qs_check_receipts; struct DONAUDB_IssuedReceiptsMetaData check_receipts_meta; @@ -289,11 +289,11 @@ start: NULL); case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "request have not been made yet (first time)!"); + "request have not been made yet (first time)!\n"); break; // it's the first request from the charity, we can proceed case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "request have been made already!"); + "request have been made already!\n"); signatures_to_JSON (num_bkp, check_receipts_meta.blinded_sig, blind_signatures); return TALER_MHD_REPLY_JSON_PACK ( @@ -328,7 +328,7 @@ start: TALER_EC_GENERIC_PARAMETER_MALFORMED,// TODO: other EC "budikeypairs"); GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "calculated the new receipts to date amount"); + "calculated the new receipts to date amount\n"); /* sign budis and send the signatures back */ struct DONAU_BlindedDonationUnitSignature *du_sigs = {0}; @@ -352,7 +352,7 @@ start: } } GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "made blind signatures!"); + "made blind signatures!\n"); } /* save new receipts to date and save receipts Request (blinded signatures, * charity id, amount, hash over bkps) to make it idempotent*/ @@ -382,7 +382,7 @@ start: break; } GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "issue receipts request is saved! (idempotent)"); + "issue receipts request is saved! (idempotent)\n"); signatures_to_JSON (num_bkp, du_sigs, blind_signatures); return TALER_MHD_REPLY_JSON_PACK ( diff --git a/src/include/donau_service.h b/src/include/donau_service.h @@ -535,6 +535,7 @@ DONAU_charity_issue_receipt ( struct GNUNET_CURL_Context *ctx, const char *url, const struct DONAU_CharityPrivateKeyP *charity_priv, + const struct DONAU_CharityPublicKeyP *charity_pub, const uint64_t charity_id, const uint64_t year, const size_t num_bkp, diff --git a/src/lib/donau_api_batch_issue_receipts.c b/src/lib/donau_api_batch_issue_receipts.c @@ -181,6 +181,7 @@ DONAU_charity_issue_receipt ( struct GNUNET_CURL_Context *ctx, const char *url, const struct DONAU_CharityPrivateKeyP *charity_priv, + const struct DONAU_CharityPublicKeyP *charity_pub, const uint64_t charity_id, const uint64_t year, const size_t num_bkp, @@ -196,7 +197,18 @@ DONAU_charity_issue_receipt ( // make signature over budi-key-pair DONAU_charity_budi_key_pair_sign (num_bkp, bkp, charity_priv, &birh->charity_sig); - + /* FIXME temporary test */ + if (GNUNET_OK != + DONAU_charity_budi_key_pair_verify (num_bkp, bkp, + charity_pub, + &birh->charity_sig)) + { + GNUNET_break_op (0); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "signature or verification function(s) not ok\n"); + } + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "signature and verification functions ok\n"); TALER_LOG_DEBUG ("Connecting to the donau (%s)\n", url); birh->url = GNUNET_strdup (url); diff --git a/src/pq/pq_query_helper.c b/src/pq/pq_query_helper.c @@ -225,16 +225,16 @@ DONAU_PQ_query_param_donation_unit_pub ( // GNUNET_assert (NULL != dst); // *((void **) dst) = NULL; - -// #define FAIL_IF(cond) \ -// do { \ -// if ((cond)) \ -// { \ -// GNUNET_break (! (cond)); \ -// goto FAIL; \ -// } \ -// } while (0) - +/** + #define FAIL_IF(cond) \ + do { \ + if ((cond)) \ + { \ + GNUNET_break (! (cond)); \ + goto FAIL; \ + } \ + } while (0) +**/ // col_num = PQfnumber (result, fname); // FAIL_IF (0 > col_num); diff --git a/src/testing/testing_api_cmd_issue_receipts.c b/src/testing/testing_api_cmd_issue_receipts.c @@ -135,11 +135,13 @@ status_run (void *cls, ss->is = is; /* Get charity id and the charity private key from trait */ + const struct DONAU_CharityPublicKeyP *charity_pub; { const struct TALER_TESTING_Command *charity_post_cmd; const unsigned long long *charity_id; const struct DONAU_CharityPrivateKeyP *charity_priv; + charity_post_cmd = TALER_TESTING_interpreter_lookup_command (is, ss-> charity_reference); @@ -147,7 +149,9 @@ status_run (void *cls, if (GNUNET_OK != TALER_TESTING_get_trait_charity_id (charity_post_cmd, &charity_id) || GNUNET_OK != TALER_TESTING_get_trait_charity_priv (charity_post_cmd, - &charity_priv)) + &charity_priv) || + GNUNET_OK != TALER_TESTING_get_trait_charity_pub (charity_post_cmd, + &charity_pub)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (is); @@ -205,6 +209,7 @@ status_run (void *cls, TALER_TESTING_interpreter_get_context (is), TALER_TESTING_get_donau_url (is), &ss->charity_priv, + charity_pub, ss->charity_id, ss->year, ss->num_bkp, diff --git a/src/util/charity_signatures.c b/src/util/charity_signatures.c @@ -87,8 +87,8 @@ DONAU_charity_budi_key_pair_verify ( const struct DONAU_CharitySignatureP *charity_sig) { struct DONAU_BudiKeyPairTrackPS tps = { - .purpose.size = htonl (sizeof (bkp[0]) * num_bkp), .purpose.purpose = htonl (DONAU_SIGNATURE_CHARITY_DONATION_CONFIRMATION), + .purpose.size = htonl (sizeof (tps)), .num_bkp = htonl (num_bkp) };