donau

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

commit 4e29b2f7cb88d3601d22c2c2fee0bf26a8bc6fe4
parent 98126ee23565052938235f7a7cbfc7a532df605b
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date:   Tue, 31 Oct 2023 00:26:14 +0100

[lib] some deletions

Diffstat:
Msrc/include/taler_donau_crypto_lib.h | 13+++++++++++++
Msrc/include/taler_donau_service.h | 12------------
Msrc/lib/donau_api_handle.c | 335+------------------------------------------------------------------------------
3 files changed, 16 insertions(+), 344 deletions(-)

diff --git a/src/include/taler_donau_crypto_lib.h b/src/include/taler_donau_crypto_lib.h @@ -15,6 +15,7 @@ */ /** * @file include/taler_crypto_lib.h + * @file include/gnunet_crypto_lib.h * @brief taler-specific crypto functions * @author Sree Harsha Totakura <sreeharsha@totakura.in> * @author Christian Grothoff <christian@grothoff.org> @@ -38,6 +39,18 @@ /* ****************** donau crypto primitives ************* */ /** + * Regular online message signing key used by Donau. + */ +struct TALER_DONAU_EddsaPublicKeyP +{ + /** + * Donau uses EdDSA for online signing. + */ + struct GNUNET_CRYPTO_EddsaPublicKey eddsa_pub; + +}; + +/** * Hash of a donation unit public key */ struct TALER_DonationUnitHashP diff --git a/src/include/taler_donau_service.h b/src/include/taler_donau_service.h @@ -34,18 +34,6 @@ /* ********************* /keys *********************** */ -/** - * Regular online message signing key used by Donau. - */ -struct TALER_DONAU_EddsaPublicKeyP -{ - /** - * Donau uses EdDSA for online signing. - */ - struct GNUNET_CRYPTO_EddsaPublicKey eddsa_pub; - -}; - /** * @brief Donau's statement signing public key diff --git a/src/lib/donau_api_handle.c b/src/lib/donau_api_handle.c @@ -28,9 +28,7 @@ #include <gnunet/gnunet_curl_lib.h> #include "taler_json_lib.h" #include "taler_donau_service.h" -#include "taler_auditor_service.h" #include "taler_signatures.h" -#include "taler_extensions.h" #include "donau_api_handle.h" #include "donau_api_curl_defaults.h" #include "backoff.h" @@ -40,7 +38,7 @@ * Which version of the Taler protocol is implemented * by this library? Used to determine compatibility. */ -#define DONAU_PROTOCOL_CURRENT 17 +#define DONAU_PROTOCOL_CURRENT 0 /** * How many versions are we backwards compatible with? @@ -123,143 +121,6 @@ struct TALER_DONAU_GetKeysHandle }; -/** - * Frees @a wfm array. - * - * @param wfm fee array to release - * @param wfm_len length of the @a wfm array - */ -static void -free_fees (struct TALER_DONAU_WireFeesByMethod *wfm, - unsigned int wfm_len) -{ - for (unsigned int i = 0; i<wfm_len; i++) - { - struct TALER_DONAU_WireFeesByMethod *wfmi = &wfm[i]; - - while (NULL != wfmi->fees_head) - { - struct TALER_DONAU_WireAggregateFees *fe - = wfmi->fees_head; - - wfmi->fees_head = fe->next; - GNUNET_free (fe); - } - GNUNET_free (wfmi->method); - } - GNUNET_free (wfm); -} - - -/** - * Parse wire @a fees and return array. - * - * @param master_pub master public key to use to check signatures - * @param currency currency amounts are expected in - * @param fees json AggregateTransferFee to parse - * @param[out] fees_len set to length of returned array - * @return NULL on error - */ -static struct TALER_DONAU_WireFeesByMethod * -parse_fees (const struct TALER_MasterPublicKeyP *master_pub, - const char *currency, - const json_t *fees, - unsigned int *fees_len) -{ - struct TALER_DONAU_WireFeesByMethod *fbm; - unsigned int fbml = json_object_size (fees); - unsigned int i = 0; - const char *key; - const json_t *fee_array; - - fbm = GNUNET_new_array (fbml, - struct TALER_DONAU_WireFeesByMethod); - *fees_len = fbml; - json_object_foreach ((json_t *) fees, key, fee_array) { - struct TALER_DONAU_WireFeesByMethod *fe = &fbm[i++]; - unsigned int idx; - json_t *fee; - - fe->method = GNUNET_strdup (key); - fe->fees_head = NULL; - json_array_foreach (fee_array, idx, fee) - { - struct TALER_DONAU_WireAggregateFees *wa - = GNUNET_new (struct TALER_DONAU_WireAggregateFees); - struct GNUNET_JSON_Specification spec[] = { - GNUNET_JSON_spec_fixed_auto ("sig", - &wa->master_sig), - TALER_JSON_spec_amount ("wire_fee", - currency, - &wa->fees.wire), - TALER_JSON_spec_amount ("closing_fee", - currency, - &wa->fees.closing), - GNUNET_JSON_spec_timestamp ("start_date", - &wa->start_date), - GNUNET_JSON_spec_timestamp ("end_date", - &wa->end_date), - GNUNET_JSON_spec_end () - }; - - wa->next = fe->fees_head; - fe->fees_head = wa; - if (GNUNET_OK != - GNUNET_JSON_parse (fee, - spec, - NULL, - NULL)) - { - GNUNET_break_op (0); - free_fees (fbm, - i); - return NULL; - } - if (GNUNET_OK != - TALER_donau_offline_wire_fee_verify ( - key, - wa->start_date, - wa->end_date, - &wa->fees, - master_pub, - &wa->master_sig)) - { - GNUNET_break_op (0); - free_fees (fbm, - i); - return NULL; - } - } /* for all fees over time */ - } /* for all methods */ - GNUNET_assert (i == fbml); - return fbm; -} - - -void -TEAH_get_auditors_for_dc ( - struct TALER_DONAU_Keys *keys, - TEAH_AuditorCallback ac, - void *ac_cls) -{ - if (0 == keys->num_auditors) - { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "No auditor available. Not submitting deposit confirmations.\n"); - return; - } - for (unsigned int i = 0; i<keys->num_auditors; i++) - { - const struct TALER_DONAU_AuditorInformation *auditor - = &keys->auditors[i]; - - ac (ac_cls, - auditor->auditor_url, - &auditor->auditor_pub); - } -} - - #define EXITIF(cond) \ do { \ if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ @@ -270,17 +131,13 @@ TEAH_get_auditors_for_dc ( * Parse a donau's signing key encoded in JSON. * * @param[out] sign_key where to return the result - * @param check_sigs should we check signatures? * @param sign_key_obj json to parse - * @param master_key master key to use to verify signature * @return #GNUNET_OK if all is fine, #GNUNET_SYSERR if the signature is * invalid or the @a sign_key_obj is malformed. */ static enum GNUNET_GenericReturnValue -parse_json_signkey (struct TALER_DONAU_SigningPublicKey *sign_key, - bool check_sigs, - const json_t *sign_key_obj, - const struct TALER_MasterPublicKeyP *master_key) +parse_json_signkey (struct TALER_DONAU_SigningPublicKeyAndValidity *sign_key, + const json_t *sign_key_obj) { struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_fixed_auto ("master_sig", @@ -408,192 +265,6 @@ EXITIF_exit: /** - * Parse a donau's auditor information encoded in JSON. - * - * @param[out] auditor where to return the result - * @param check_sigs should we check signatures - * @param auditor_obj json to parse - * @param key_data information about denomination keys - * @return #GNUNET_OK if all is fine, #GNUNET_SYSERR if the signature is - * invalid or the json malformed. - */ -static enum GNUNET_GenericReturnValue -parse_json_auditor (struct TALER_DONAU_AuditorInformation *auditor, - bool check_sigs, - const json_t *auditor_obj, - const struct TALER_DONAU_Keys *key_data) -{ - const json_t *keys; - json_t *key; - unsigned int off; - unsigned int pos; - const char *auditor_url; - struct GNUNET_JSON_Specification spec[] = { - GNUNET_JSON_spec_fixed_auto ("auditor_pub", - &auditor->auditor_pub), - GNUNET_JSON_spec_string ("auditor_url", - &auditor_url), - GNUNET_JSON_spec_array_const ("denomination_keys", - &keys), - GNUNET_JSON_spec_end () - }; - - if (GNUNET_OK != - GNUNET_JSON_parse (auditor_obj, - spec, - NULL, NULL)) - { - GNUNET_break_op (0); -#if DEBUG - json_dumpf (auditor_obj, - stderr, - JSON_INDENT (2)); -#endif - return GNUNET_SYSERR; - } - auditor->auditor_url = GNUNET_strdup (auditor_url); - auditor->denom_keys - = GNUNET_new_array (json_array_size (keys), - struct TALER_DONAU_AuditorDenominationInfo); - pos = 0; - json_array_foreach (keys, off, key) { - struct TALER_AuditorSignatureP auditor_sig; - struct TALER_DenominationHashP denom_h; - const struct TALER_DONAU_DenomPublicKey *dk = NULL; - unsigned int dk_off = UINT_MAX; - struct GNUNET_JSON_Specification kspec[] = { - GNUNET_JSON_spec_fixed_auto ("auditor_sig", - &auditor_sig), - GNUNET_JSON_spec_fixed_auto ("denom_pub_h", - &denom_h), - GNUNET_JSON_spec_end () - }; - - if (GNUNET_OK != - GNUNET_JSON_parse (key, - kspec, - NULL, NULL)) - { - GNUNET_break_op (0); - continue; - } - for (unsigned int j = 0; j<key_data->num_denom_keys; j++) - { - if (0 == GNUNET_memcmp (&denom_h, - &key_data->denom_keys[j].h_key)) - { - dk = &key_data->denom_keys[j]; - dk_off = j; - break; - } - } - if (NULL == dk) - { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "Auditor signed denomination %s, which we do not know. Ignoring signature.\n", - GNUNET_h2s (&denom_h.hash)); - continue; - } - if (check_sigs) - { - if (GNUNET_OK != - TALER_auditor_denom_validity_verify ( - auditor_url, - &dk->h_key, - &key_data->master_pub, - dk->valid_from, - dk->withdraw_valid_until, - dk->expire_deposit, - dk->expire_legal, - &dk->value, - &dk->fees, - &auditor->auditor_pub, - &auditor_sig)) - { - GNUNET_break_op (0); - return GNUNET_SYSERR; - } - } - auditor->denom_keys[pos].denom_key_offset = dk_off; - auditor->denom_keys[pos].auditor_sig = auditor_sig; - pos++; - } - auditor->num_denom_keys = pos; - return GNUNET_OK; -} - - -/** - * Parse a donau's global fee information encoded in JSON. - * - * @param[out] gf where to return the result - * @param check_sigs should we check signatures - * @param fee_obj json to parse - * @param key_data already parsed information about the donau - * @return #GNUNET_OK if all is fine, #GNUNET_SYSERR if the signature is - * invalid or the json malformed. - */ -static enum GNUNET_GenericReturnValue -parse_global_fee (struct TALER_DONAU_GlobalFee *gf, - bool check_sigs, - const json_t *fee_obj, - const struct TALER_DONAU_Keys *key_data) -{ - struct GNUNET_JSON_Specification spec[] = { - GNUNET_JSON_spec_timestamp ("start_date", - &gf->start_date), - GNUNET_JSON_spec_timestamp ("end_date", - &gf->end_date), - GNUNET_JSON_spec_relative_time ("purse_timeout", - &gf->purse_timeout), - GNUNET_JSON_spec_relative_time ("history_expiration", - &gf->history_expiration), - GNUNET_JSON_spec_uint32 ("purse_account_limit", - &gf->purse_account_limit), - TALER_JSON_SPEC_GLOBAL_FEES (key_data->currency, - &gf->fees), - GNUNET_JSON_spec_fixed_auto ("master_sig", - &gf->master_sig), - GNUNET_JSON_spec_end () - }; - - if (GNUNET_OK != - GNUNET_JSON_parse (fee_obj, - spec, - NULL, NULL)) - { - GNUNET_break_op (0); -#if DEBUG - json_dumpf (fee_obj, - stderr, - JSON_INDENT (2)); -#endif - return GNUNET_SYSERR; - } - if (check_sigs) - { - if (GNUNET_OK != - TALER_donau_offline_global_fee_verify ( - gf->start_date, - gf->end_date, - &gf->fees, - gf->purse_timeout, - gf->history_expiration, - gf->purse_account_limit, - &key_data->master_pub, - &gf->master_sig)) - { - GNUNET_break_op (0); - GNUNET_JSON_parse_free (spec); - return GNUNET_SYSERR; - } - } - GNUNET_JSON_parse_free (spec); - return GNUNET_OK; -} - - -/** * Compare two denomination keys. Ignores revocation data. * * @param denom1 first denomination key