implement #3739 (properly)
This commit is contained in:
parent
32f9c81ec9
commit
6b64ad261e
@ -62,6 +62,12 @@ struct TMH_KS_StateHandle
|
|||||||
*/
|
*/
|
||||||
struct GNUNET_CONTAINER_MultiHashMap *denomkey_map;
|
struct GNUNET_CONTAINER_MultiHashMap *denomkey_map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash context we used to combine the hashes of all denomination
|
||||||
|
* keys into one big hash.
|
||||||
|
*/
|
||||||
|
struct GNUNET_HashContext *hash_context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When did we initiate the key reloading?
|
* When did we initiate the key reloading?
|
||||||
*/
|
*/
|
||||||
@ -221,6 +227,10 @@ reload_keys_denom_iter (void *cls,
|
|||||||
|
|
||||||
GNUNET_CRYPTO_rsa_public_key_hash (dki->denom_pub.rsa_public_key,
|
GNUNET_CRYPTO_rsa_public_key_hash (dki->denom_pub.rsa_public_key,
|
||||||
&denom_key_hash);
|
&denom_key_hash);
|
||||||
|
GNUNET_CRYPTO_hash_context_read (ctx->hash_context,
|
||||||
|
&denom_key_hash,
|
||||||
|
sizeof (struct GNUNET_HashCode));
|
||||||
|
|
||||||
d2 = GNUNET_memdup (dki,
|
d2 = GNUNET_memdup (dki,
|
||||||
sizeof (struct TALER_MINTDB_DenominationKeyIssueInformation));
|
sizeof (struct TALER_MINTDB_DenominationKeyIssueInformation));
|
||||||
res = GNUNET_CONTAINER_multihashmap_put (ctx->denomkey_map,
|
res = GNUNET_CONTAINER_multihashmap_put (ctx->denomkey_map,
|
||||||
@ -385,7 +395,6 @@ TMH_KS_acquire (void)
|
|||||||
struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
|
struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
|
||||||
struct TMH_KS_StateHandle *key_state;
|
struct TMH_KS_StateHandle *key_state;
|
||||||
json_t *keys;
|
json_t *keys;
|
||||||
char *inner;
|
|
||||||
struct TALER_MintKeySetPS ks;
|
struct TALER_MintKeySetPS ks;
|
||||||
struct TALER_MintSignatureP sig;
|
struct TALER_MintSignatureP sig;
|
||||||
|
|
||||||
@ -398,6 +407,7 @@ TMH_KS_acquire (void)
|
|||||||
if (NULL == internal_key_state)
|
if (NULL == internal_key_state)
|
||||||
{
|
{
|
||||||
key_state = GNUNET_new (struct TMH_KS_StateHandle);
|
key_state = GNUNET_new (struct TMH_KS_StateHandle);
|
||||||
|
key_state->hash_context = GNUNET_CRYPTO_hash_context_start ();
|
||||||
key_state->denom_keys_array = json_array ();
|
key_state->denom_keys_array = json_array ();
|
||||||
GNUNET_assert (NULL != key_state->denom_keys_array);
|
GNUNET_assert (NULL != key_state->denom_keys_array);
|
||||||
key_state->sign_keys_array = json_array ();
|
key_state->sign_keys_array = json_array ();
|
||||||
@ -411,31 +421,26 @@ TMH_KS_acquire (void)
|
|||||||
TALER_MINTDB_signing_keys_iterate (TMH_mint_directory,
|
TALER_MINTDB_signing_keys_iterate (TMH_mint_directory,
|
||||||
&reload_keys_sign_iter,
|
&reload_keys_sign_iter,
|
||||||
key_state);
|
key_state);
|
||||||
|
ks.purpose.size = htonl (sizeof (ks));
|
||||||
|
ks.purpose.purpose = htonl (TALER_SIGNATURE_MINT_KEY_SET);
|
||||||
|
ks.list_issue_date = GNUNET_TIME_absolute_hton (key_state->reload_time);
|
||||||
|
GNUNET_CRYPTO_hash_context_finish (key_state->hash_context,
|
||||||
|
&ks.hc);
|
||||||
|
key_state->hash_context = NULL;
|
||||||
|
TMH_KS_sign (&ks.purpose,
|
||||||
|
&sig);
|
||||||
key_state->next_reload = GNUNET_TIME_absolute_ntoh (key_state->current_sign_key_issue.issue.expire);
|
key_state->next_reload = GNUNET_TIME_absolute_ntoh (key_state->current_sign_key_issue.issue.expire);
|
||||||
if (0 == key_state->next_reload.abs_value_us)
|
if (0 == key_state->next_reload.abs_value_us)
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||||
"No valid signing key found!\n");
|
"No valid signing key found!\n");
|
||||||
|
|
||||||
keys = json_pack ("{s:o, s:o, s:o, s:o}",
|
keys = json_pack ("{s:o, s:o, s:o, s:o, s:o}",
|
||||||
"master_public_key",
|
"master_public_key",
|
||||||
TALER_json_from_data (&TMH_master_public_key,
|
TALER_json_from_data (&TMH_master_public_key,
|
||||||
sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)),
|
sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)),
|
||||||
"signkeys", key_state->sign_keys_array,
|
"signkeys", key_state->sign_keys_array,
|
||||||
"denoms", key_state->denom_keys_array,
|
"denoms", key_state->denom_keys_array,
|
||||||
"list_issue_date", TALER_json_from_abs (key_state->reload_time));
|
"list_issue_date", TALER_json_from_abs (key_state->reload_time),
|
||||||
inner = json_dumps (keys,
|
|
||||||
JSON_INDENT(2));
|
|
||||||
ks.purpose.size = htonl (sizeof (ks));
|
|
||||||
ks.purpose.purpose = htonl (TALER_SIGNATURE_MINT_KEY_SET);
|
|
||||||
ks.list_issue_date = GNUNET_TIME_absolute_hton (key_state->reload_time);
|
|
||||||
GNUNET_CRYPTO_hash (inner,
|
|
||||||
strlen (inner),
|
|
||||||
&ks.hc);
|
|
||||||
GNUNET_free (inner);
|
|
||||||
TMH_KS_sign (&ks.purpose,
|
|
||||||
&sig);
|
|
||||||
keys = json_pack ("{s:o, s:o}",
|
|
||||||
"keys", keys,
|
|
||||||
"eddsa_sig", TALER_json_from_eddsa_sig (&ks.purpose,
|
"eddsa_sig", TALER_json_from_eddsa_sig (&ks.purpose,
|
||||||
&sig.eddsa_signature));
|
&sig.eddsa_signature));
|
||||||
key_state->keys_json = json_dumps (keys,
|
key_state->keys_json = json_dumps (keys,
|
||||||
|
Loading…
Reference in New Issue
Block a user