donau

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

commit 076a32f8e2a660729b32d072b3b7536f45b73e0c
parent 6999614c1ce7a80cff7a0b0b034547868424fa92
Author: Casaburi Johannes <johannes.casaburi@students.bfh.ch>
Date:   Thu,  7 Mar 2024 15:53:45 +0100

working on keys

Diffstat:
Msrc/donau/donau-httpd_keys.c | 95++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/util/donau_crypto.c | 45+++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 93 insertions(+), 47 deletions(-)

diff --git a/src/donau/donau-httpd_keys.c b/src/donau/donau-httpd_keys.c @@ -657,8 +657,8 @@ create_krd (struct DH_KeyStateHandle *ksh, json_t *keys; - GNUNET_assert (! GNUNET_TIME_absolute_is_zero ( - last_cherry_pick_date.abs_time)); + // GNUNET_assert (! GNUNET_TIME_absolute_is_zero ( + // last_cherry_pick_date.abs_time)); // GNUNET_assert (NULL != signkeys); GNUNET_assert (NULL != grouped_donation_units); GNUNET_assert (NULL != DH_currency); @@ -668,8 +668,8 @@ create_krd (struct DH_KeyStateHandle *ksh, // /* Sign hash over master signatures of all denomination keys until this time // (in reverse order). */ - // { - // enum TALER_ErrorCode ec; +// { +// enum TALER_ErrorCode ec; // // if (TALER_EC_NONE != // (ec = @@ -708,9 +708,9 @@ create_krd (struct DH_KeyStateHandle *ksh, // GNUNET_JSON_pack_array_incref ("signkeys", // signkeys), GNUNET_JSON_pack_array_incref ("donation_units", - grouped_donation_units), - GNUNET_JSON_pack_data_auto ("donau_pub", - &donau_pub)); // , + grouped_donation_units)); // , + // GNUNET_JSON_pack_data_auto ("donau_pub", + // &donau_pub)); // , // GNUNET_JSON_pack_data_auto ("donau_sig", // &donau_sig)); GNUNET_assert (NULL != keys); @@ -1058,7 +1058,8 @@ finish_keys_response (struct DH_KeyStateHandle *ksh) } GNUNET_CONTAINER_heap_destroy (heap); - if (! GNUNET_TIME_absolute_is_zero (last_cherry_pick_date.abs_time)) + // if (! GNUNET_TIME_absolute_is_zero (last_cherry_pick_date.abs_time)) + if (true) { struct GNUNET_HashCode hc; @@ -1459,23 +1460,23 @@ helper_rsa_cb ( GNUNET_assert (GNUNET_CRYPTO_BSA_RSA == bs_pub->cipher); hd->donation_unit_pub.bsign_pub_key = GNUNET_CRYPTO_bsign_pub_incref (bs_pub); -// DONAU_Donation_unit_pub_hash(&hd->donation_unit_pub, -// &hd->h_donation_unit_pub); -// hd->section_name = GNUNET_strdup (section_name); -// GNUNET_assert ( -// GNUNET_OK == -// GNUNET_CONTAINER_multihashmap_put ( -// hs->donation_unit, -// &hd->h_donation_unit_pub, -// hd, -// GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); -// GNUNET_assert ( -// GNUNET_OK == -// GNUNET_CONTAINER_multihashmap_put ( -// hs->rsa_keys, -// &hd->h_details.h_rsa.hash, -// hd, -// GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); + DONAU_donation_unit_pub_hash (&hd->donation_unit_pub, + &hd->h_donation_unit_pub); + hd->section_name = GNUNET_strdup (section_name); + GNUNET_assert ( + GNUNET_OK == + GNUNET_CONTAINER_multihashmap_put ( + hs->donation_unit, + &hd->h_donation_unit_pub, + hd, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); + GNUNET_assert ( + GNUNET_OK == + GNUNET_CONTAINER_multihashmap_put ( + hs->rsa_keys, + &hd->h_details.h_rsa.hash, + hd, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); } @@ -1533,23 +1534,23 @@ helper_cs_cb ( GNUNET_assert (GNUNET_CRYPTO_BSA_CS == bs_pub->cipher); hd->donation_unit_pub.bsign_pub_key = GNUNET_CRYPTO_bsign_pub_incref (bs_pub); -// DONAU_donation_unit_pub_hash (&hd->donation_unit_pub, -// &hd->h_donation_unit_pub); -// hd->section_name = GNUNET_strdup (section_name); -// GNUNET_assert ( -// GNUNET_OK == -// GNUNET_CONTAINER_multihashmap_put ( -// hs->donation_unit, -// &hd->h_donation_unit_pub.hash, -// hd, -// GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); -// GNUNET_assert ( -// GNUNET_OK == -// GNUNET_CONTAINER_multihashmap_put ( -// hs->cs_keys, -// &hd->h_details.h_cs.hash, -// hd, -// GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); + DONAU_donation_unit_pub_hash (&hd->donation_unit_pub, + &hd->h_donation_unit_pub); + hd->section_name = GNUNET_strdup (section_name); + GNUNET_assert ( + GNUNET_OK == + GNUNET_CONTAINER_multihashmap_put ( + hs->donation_unit, + &hd->h_donation_unit_pub.hash, + hd, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); + GNUNET_assert ( + GNUNET_OK == + GNUNET_CONTAINER_multihashmap_put ( + hs->cs_keys, + &hd->h_details.h_cs.hash, + hd, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); } @@ -1704,8 +1705,8 @@ donation_unit_info_cb ( // return; // } - // GNUNET_assert (GNUNET_CRYPTO_BSA_INVALID != - // donation_unit_pub->bsign_pub_key->cipher); + GNUNET_assert (GNUNET_CRYPTO_BSA_INVALID != + donation_unit_pub->bsign_pub_key->cipher); // if (GNUNET_TIME_absolute_is_zero (meta->start.abs_time) || // GNUNET_TIME_absolute_is_zero (meta->expire_withdraw.abs_time) || @@ -1954,9 +1955,9 @@ DH_handler_keys (struct DH_RequestContext *rc, GNUNET_assert (NULL != kbc.donation_units); GNUNET_assert (NULL != kbc.signkeys); GNUNET_assert (NULL != DH_currency); - // GNUNET_CONTAINER_multihashmap_iterate (ksh->helpers->donation_unit, - // &insert_donation_unit_cb, - // &kbc); + GNUNET_CONTAINER_multihashmap_iterate (ksh->helpers->donation_unit, + &insert_donation_unit_cb, + &kbc); GNUNET_CONTAINER_multipeermap_iterate (ksh->helpers->esign_keys, &add_signkey_cb, &kbc); reply = GNUNET_JSON_PACK ( diff --git a/src/util/donau_crypto.c b/src/util/donau_crypto.c @@ -98,3 +98,48 @@ DONAU_donation_unit_pub_free (struct donation_unit_pub->bsign_pub_key = NULL; } } + + +void +DONAU_donation_unit_pub_hash (const struct + DONAU_DonationUnitPublicKey *donation_unit_pub, + struct DONAU_DonationUnitHashP *donation_unit_hash) +{ + struct GNUNET_CRYPTO_BlindSignPublicKey *bsp + = donation_unit_pub->bsign_pub_key; + uint32_t opt[1] = { + htonl ((uint32_t) bsp->cipher) + }; + struct GNUNET_HashContext *hc; + + hc = GNUNET_CRYPTO_hash_context_start (); + GNUNET_CRYPTO_hash_context_read (hc, + opt, + sizeof (opt)); + switch (bsp->cipher) + { + case GNUNET_CRYPTO_BSA_RSA: + { + void *buf; + size_t blen; + + blen = GNUNET_CRYPTO_rsa_public_key_encode ( + bsp->details.rsa_public_key, + &buf); + GNUNET_CRYPTO_hash_context_read (hc, + buf, + blen); + GNUNET_free (buf); + } + break; + case GNUNET_CRYPTO_BSA_CS: + GNUNET_CRYPTO_hash_context_read (hc, + &bsp->details.cs_public_key, + sizeof(bsp->details.cs_public_key)); + break; + default: + GNUNET_assert (0); + } + GNUNET_CRYPTO_hash_context_finish (hc, + &donation_unit_hash->hash); +}