implement #6724
This commit is contained in:
parent
556a7f36b8
commit
9e910cb1b9
@ -41,6 +41,12 @@
|
|||||||
*/
|
*/
|
||||||
#define OP_INPUT_KEYS "auditor-keys-0"
|
#define OP_INPUT_KEYS "auditor-keys-0"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the offline signing key.
|
||||||
|
* The last component --by convention-- identifies the protocol version
|
||||||
|
* and should be incremented whenever the JSON format of the 'argument' changes.
|
||||||
|
*/
|
||||||
|
#define OP_SETUP "auditor-setup-0"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Our private key, initialized in #load_offline_key().
|
* Our private key, initialized in #load_offline_key().
|
||||||
@ -323,10 +329,11 @@ struct UploadHandler
|
|||||||
/**
|
/**
|
||||||
* Load the offline key (if not yet done). Triggers shutdown on failure.
|
* Load the offline key (if not yet done). Triggers shutdown on failure.
|
||||||
*
|
*
|
||||||
|
* @param do_create #GNUNET_YES if the key may be created
|
||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
load_offline_key (void)
|
load_offline_key (int do_create)
|
||||||
{
|
{
|
||||||
static bool done;
|
static bool done;
|
||||||
int ret;
|
int ret;
|
||||||
@ -352,7 +359,7 @@ load_offline_key (void)
|
|||||||
"Auditor private key `%s' does not exist yet, creating it!\n",
|
"Auditor private key `%s' does not exist yet, creating it!\n",
|
||||||
fn);
|
fn);
|
||||||
ret = GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
ret = GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
||||||
GNUNET_YES,
|
do_create,
|
||||||
&auditor_priv.eddsa_priv);
|
&auditor_priv.eddsa_priv);
|
||||||
if (GNUNET_SYSERR == ret)
|
if (GNUNET_SYSERR == ret)
|
||||||
{
|
{
|
||||||
@ -1114,7 +1121,7 @@ do_sign (char *const *args)
|
|||||||
if (NULL == keys)
|
if (NULL == keys)
|
||||||
return;
|
return;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
{
|
{
|
||||||
json_decref (keys);
|
json_decref (keys);
|
||||||
return;
|
return;
|
||||||
@ -1162,11 +1169,58 @@ do_sign (char *const *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup and output offline signing key.
|
||||||
|
*
|
||||||
|
* @param args the array of command-line arguments to process next
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
do_setup (char *const *args)
|
||||||
|
{
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
load_offline_key (GNUNET_YES))
|
||||||
|
{
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (NULL != *args)
|
||||||
|
{
|
||||||
|
output_operation (OP_SETUP,
|
||||||
|
json_pack ("{s:o}",
|
||||||
|
"auditor_pub",
|
||||||
|
GNUNET_JSON_from_data_auto (&auditor_pub)));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *pub_s;
|
||||||
|
|
||||||
|
pub_s = GNUNET_STRINGS_data_to_string_alloc (&auditor_pub,
|
||||||
|
sizeof (auditor_pub));
|
||||||
|
fprintf (stdout,
|
||||||
|
"%s\n",
|
||||||
|
pub_s);
|
||||||
|
GNUNET_free (pub_s);
|
||||||
|
}
|
||||||
|
if ( (NULL != *args) &&
|
||||||
|
(0 == strcmp (*args,
|
||||||
|
"-")) )
|
||||||
|
args++;
|
||||||
|
next (args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
work (void *cls)
|
work (void *cls)
|
||||||
{
|
{
|
||||||
char *const *args = cls;
|
char *const *args = cls;
|
||||||
struct SubCommand cmds[] = {
|
struct SubCommand cmds[] = {
|
||||||
|
{
|
||||||
|
.name = "setup",
|
||||||
|
.help =
|
||||||
|
"setup auditor offline private key and show the public key",
|
||||||
|
.cb = &do_setup
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "download",
|
.name = "download",
|
||||||
.help =
|
.help =
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2020 Taler Systems SA
|
Copyright (C) 2020, 2021 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -86,6 +86,11 @@
|
|||||||
*/
|
*/
|
||||||
#define OP_REVOKE_SIGNKEY "exchange-revoke-signkey-0"
|
#define OP_REVOKE_SIGNKEY "exchange-revoke-signkey-0"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the offline signing key.
|
||||||
|
*/
|
||||||
|
#define OP_SETUP "exchange-setup"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Our private key, initialized in #load_offline_key().
|
* Our private key, initialized in #load_offline_key().
|
||||||
@ -738,10 +743,11 @@ struct UploadHandler
|
|||||||
/**
|
/**
|
||||||
* Load the offline key (if not yet done). Triggers shutdown on failure.
|
* Load the offline key (if not yet done). Triggers shutdown on failure.
|
||||||
*
|
*
|
||||||
|
* @param do_create #GNUNET_YES if the key may be created
|
||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
load_offline_key (void)
|
load_offline_key (int do_create)
|
||||||
{
|
{
|
||||||
static bool done;
|
static bool done;
|
||||||
int ret;
|
int ret;
|
||||||
@ -767,7 +773,7 @@ load_offline_key (void)
|
|||||||
"Exchange master private key `%s' does not exist yet, creating it!\n",
|
"Exchange master private key `%s' does not exist yet, creating it!\n",
|
||||||
fn);
|
fn);
|
||||||
ret = GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
ret = GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
||||||
GNUNET_YES,
|
do_create,
|
||||||
&master_priv.eddsa_priv);
|
&master_priv.eddsa_priv);
|
||||||
if (GNUNET_SYSERR == ret)
|
if (GNUNET_SYSERR == ret)
|
||||||
{
|
{
|
||||||
@ -1828,7 +1834,7 @@ do_revoke_denomination_key (char *const *args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
TALER_exchange_offline_denomination_revoke_sign (&h_denom_pub,
|
TALER_exchange_offline_denomination_revoke_sign (&h_denom_pub,
|
||||||
&master_priv,
|
&master_priv,
|
||||||
@ -1877,7 +1883,7 @@ do_revoke_signkey (char *const *args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
TALER_exchange_offline_signkey_revoke_sign (&exchange_pub,
|
TALER_exchange_offline_signkey_revoke_sign (&exchange_pub,
|
||||||
&master_priv,
|
&master_priv,
|
||||||
@ -1941,7 +1947,7 @@ do_add_auditor (char *const *args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
now = GNUNET_TIME_absolute_get ();
|
now = GNUNET_TIME_absolute_get ();
|
||||||
(void) GNUNET_TIME_round_abs (&now);
|
(void) GNUNET_TIME_round_abs (&now);
|
||||||
@ -2002,7 +2008,7 @@ do_del_auditor (char *const *args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
now = GNUNET_TIME_absolute_get ();
|
now = GNUNET_TIME_absolute_get ();
|
||||||
(void) GNUNET_TIME_round_abs (&now);
|
(void) GNUNET_TIME_round_abs (&now);
|
||||||
@ -2053,7 +2059,7 @@ do_add_wire (char *const *args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
now = GNUNET_TIME_absolute_get ();
|
now = GNUNET_TIME_absolute_get ();
|
||||||
(void) GNUNET_TIME_round_abs (&now);
|
(void) GNUNET_TIME_round_abs (&now);
|
||||||
@ -2123,7 +2129,7 @@ do_del_wire (char *const *args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
now = GNUNET_TIME_absolute_get ();
|
now = GNUNET_TIME_absolute_get ();
|
||||||
(void) GNUNET_TIME_round_abs (&now);
|
(void) GNUNET_TIME_round_abs (&now);
|
||||||
@ -2197,7 +2203,7 @@ do_set_wire_fee (char *const *args)
|
|||||||
args[0]))
|
args[0]))
|
||||||
year = GNUNET_TIME_get_current_year ();
|
year = GNUNET_TIME_get_current_year ();
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
start_time = GNUNET_TIME_year_to_time (year);
|
start_time = GNUNET_TIME_year_to_time (year);
|
||||||
end_time = GNUNET_TIME_year_to_time (year + 1);
|
end_time = GNUNET_TIME_year_to_time (year + 1);
|
||||||
@ -2801,7 +2807,7 @@ do_show (char *const *args)
|
|||||||
if (NULL == keys)
|
if (NULL == keys)
|
||||||
return;
|
return;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
return;
|
return;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_JSON_parse (keys,
|
GNUNET_JSON_parse (keys,
|
||||||
@ -3125,7 +3131,7 @@ do_sign (char *const *args)
|
|||||||
if (NULL == keys)
|
if (NULL == keys)
|
||||||
return;
|
return;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
load_offline_key ())
|
load_offline_key (GNUNET_NO))
|
||||||
{
|
{
|
||||||
json_decref (keys);
|
json_decref (keys);
|
||||||
return;
|
return;
|
||||||
@ -3208,11 +3214,58 @@ do_sign (char *const *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup and output offline signing key.
|
||||||
|
*
|
||||||
|
* @param args the array of command-line arguments to process next
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
do_setup (char *const *args)
|
||||||
|
{
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
load_offline_key (GNUNET_YES))
|
||||||
|
{
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (NULL != *args)
|
||||||
|
{
|
||||||
|
output_operation (OP_SETUP,
|
||||||
|
json_pack ("{s:o}",
|
||||||
|
"exchange_offline_pub",
|
||||||
|
GNUNET_JSON_from_data_auto (&master_pub)));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *pub_s;
|
||||||
|
|
||||||
|
pub_s = GNUNET_STRINGS_data_to_string_alloc (&master_pub,
|
||||||
|
sizeof (master_pub));
|
||||||
|
fprintf (stdout,
|
||||||
|
"%s\n",
|
||||||
|
pub_s);
|
||||||
|
GNUNET_free (pub_s);
|
||||||
|
}
|
||||||
|
if ( (NULL != *args) &&
|
||||||
|
(0 == strcmp (*args,
|
||||||
|
"-")) )
|
||||||
|
args++;
|
||||||
|
next (args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
work (void *cls)
|
work (void *cls)
|
||||||
{
|
{
|
||||||
char *const *args = cls;
|
char *const *args = cls;
|
||||||
struct SubCommand cmds[] = {
|
struct SubCommand cmds[] = {
|
||||||
|
{
|
||||||
|
.name = "setup",
|
||||||
|
.help =
|
||||||
|
"initialize offline key signing material and display public offline key",
|
||||||
|
.cb = &do_setup
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "download",
|
.name = "download",
|
||||||
.help =
|
.help =
|
||||||
|
Loading…
Reference in New Issue
Block a user