-fix more FTBFS issues

This commit is contained in:
Christian Grothoff 2022-02-06 19:53:23 +01:00
parent 66abbcac3f
commit 62d8368b1b
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 59 additions and 28 deletions

View File

@ -1021,10 +1021,10 @@ TALER_planchet_setup_coin_priv (
/** /**
* @brief Method to derive withdraw nonce * @brief Method to derive withdraw /csr nonce
* *
* @param coin_priv private key of the coin * @param ps planchet secrets of the coin
* @param nonce withdraw nonce included in the request to generate R_0 and R_1 * @param[out] nonce withdraw nonce included in the request to generate R_0 and R_1
*/ */
void void
TALER_cs_withdraw_nonce_derive ( TALER_cs_withdraw_nonce_derive (
@ -1032,6 +1032,21 @@ TALER_cs_withdraw_nonce_derive (
struct TALER_CsNonce *nonce); struct TALER_CsNonce *nonce);
/**
* @brief Method to derive /csr nonce
* to be used during refresh/melt operation.
*
* @param coin_priv private key of the coin
* @param idx index of the fresh coin
* @param[out] nonce set to nonce included in the request to generate R_0 and R_1
*/
void
TALER_cs_refresh_nonce_derive (
const struct TALER_PlanchetSecretsP *ps,
uint32_t idx,
struct TALER_CsNonce *nonce);
/** /**
* Initialize denomination public-private key pair. * Initialize denomination public-private key pair.
* *

View File

@ -104,7 +104,7 @@ struct TALER_EXCHANGE_MeltHandle
/** /**
* @brief Public information about the coin's denomination key * @brief Public information about the coin's denomination key
*/ */
struct TALER_EXCHANGE_DenomPublicKey dki; const struct TALER_EXCHANGE_DenomPublicKey *dki;
}; };
@ -206,8 +206,8 @@ verify_melt_signature_denom_conflict (struct TALER_EXCHANGE_MeltHandle *mh,
history = json_object_get (json, history = json_object_get (json,
"history"); "history");
if (GNUNET_OK != if (GNUNET_OK !=
TALER_EXCHANGE_verify_coin_history (&mh->dki, TALER_EXCHANGE_verify_coin_history (mh->dki,
mh->dki.value.currency, mh->dki->value.currency,
&mh->coin_pub, &mh->coin_pub,
history, history,
&h_denom_pub, &h_denom_pub,
@ -216,7 +216,7 @@ verify_melt_signature_denom_conflict (struct TALER_EXCHANGE_MeltHandle *mh,
GNUNET_break_op (0); GNUNET_break_op (0);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
if (0 != GNUNET_memcmp (&mh->dki.h_key, if (0 != GNUNET_memcmp (&mh->dki->h_key,
&h_denom_pub)) &h_denom_pub))
return GNUNET_OK; /* indeed, proof with different denomination key provided */ return GNUNET_OK; /* indeed, proof with different denomination key provided */
/* invalid proof provided */ /* invalid proof provided */
@ -266,7 +266,7 @@ verify_melt_signature_spend_conflict (struct TALER_EXCHANGE_MeltHandle *mh,
history = json_object_get (json, history = json_object_get (json,
"history"); "history");
if (GNUNET_OK != if (GNUNET_OK !=
TALER_EXCHANGE_verify_coin_history (&mh->dki, TALER_EXCHANGE_verify_coin_history (mh->dki,
mc->original_value.currency, mc->original_value.currency,
&mh->coin_pub, &mh->coin_pub,
history, history,
@ -305,7 +305,7 @@ verify_melt_signature_spend_conflict (struct TALER_EXCHANGE_MeltHandle *mh,
/* everything OK, valid proof of double-spending was provided */ /* everything OK, valid proof of double-spending was provided */
return GNUNET_OK; return GNUNET_OK;
case TALER_EC_EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY: case TALER_EC_EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY:
if (0 != GNUNET_memcmp (&mh->dki.h_key, if (0 != GNUNET_memcmp (&mh->dki->h_key,
&h_denom_pub)) &h_denom_pub))
return GNUNET_OK; /* indeed, proof with different denomination key provided */ return GNUNET_OK; /* indeed, proof with different denomination key provided */
/* invalid proof provided */ /* invalid proof provided */
@ -461,7 +461,6 @@ static enum GNUNET_GenericReturnValue
start_melt (struct TALER_EXCHANGE_MeltHandle *mh) start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
{ {
const struct TALER_EXCHANGE_Keys *key_state; const struct TALER_EXCHANGE_Keys *key_state;
const struct TALER_EXCHANGE_DenomPublicKey *dki;
json_t *melt_obj; json_t *melt_obj;
CURL *eh; CURL *eh;
struct GNUNET_CURL_Context *ctx; struct GNUNET_CURL_Context *ctx;
@ -518,8 +517,8 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
ctx = TEAH_handle_to_context (mh->exchange); ctx = TEAH_handle_to_context (mh->exchange);
key_state = TALER_EXCHANGE_get_keys (mh->exchange); key_state = TALER_EXCHANGE_get_keys (mh->exchange);
dki = TALER_EXCHANGE_get_denomination_key (key_state, mh->dki = TALER_EXCHANGE_get_denomination_key (key_state,
&mh->md.melted_coin.pub_key); &mh->md.melted_coin.pub_key);
/* and now we can at last begin the actual request handling */ /* and now we can at last begin the actual request handling */
@ -659,12 +658,9 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,
case TALER_DENOMINATION_CS: case TALER_DENOMINATION_CS:
wv->cipher = TALER_DENOMINATION_CS; wv->cipher = TALER_DENOMINATION_CS;
nks[nks_off].pk = fresh_pk; nks[nks_off].pk = fresh_pk;
// derive nonce for refresh by index and ps; TALER_cs_refresh_nonce_derive (ps,
// FIXME: include fresh_pk or not? i,
TALER_CRYPTO_XXX (ps, &nks[nks_off].nonce);
fresh_pk,
i,
&nks[nks_off].nonce);
nks_off++; nks_off++;
break; break;
} }

View File

@ -195,16 +195,36 @@ TALER_cs_withdraw_nonce_derive (const struct
struct TALER_CsNonce *nonce) struct TALER_CsNonce *nonce)
{ {
GNUNET_assert (GNUNET_YES == GNUNET_assert (GNUNET_YES ==
GNUNET_CRYPTO_hkdf (nonce, GNUNET_CRYPTO_kdf (nonce,
sizeof (*nonce), sizeof (*nonce),
GCRY_MD_SHA512, "n",
GCRY_MD_SHA256, strlen ("n"),
"n", ps,
strlen ("n"), sizeof(*ps),
ps, NULL,
sizeof(*ps), 0));
NULL, }
0));
void
TALER_cs_refresh_nonce_derive (
const struct TALER_PlanchetSecretsP *ps,
uint32_t coin_num_salt,
struct TALER_CsNonce *nonce)
{
uint32_t be_salt = htonl (coin_num_salt);
GNUNET_assert (GNUNET_YES ==
GNUNET_CRYPTO_kdf (nonce,
sizeof (*nonce),
&be_salt,
sizeof (be_salt),
"refresh-n", // FIXME: value used in spec?
strlen ("refresh-n"),
ps,
sizeof(*ps),
NULL,
0));
} }