fix use of signature for noreveal index, needs to be tied to session hash
This commit is contained in:
parent
ce8272446e
commit
8eaeda9958
@ -320,6 +320,11 @@ struct RefreshCommitResponseSignatureBody
|
|||||||
*/
|
*/
|
||||||
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash of the refresh session.
|
||||||
|
*/
|
||||||
|
struct GNUNET_HashCode session_hash;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Index that the client will not have to reveal.
|
* Index that the client will not have to reveal.
|
||||||
*/
|
*/
|
||||||
|
@ -444,6 +444,12 @@ struct RefreshSession
|
|||||||
*/
|
*/
|
||||||
struct GNUNET_CRYPTO_EddsaSignature commit_sig;
|
struct GNUNET_CRYPTO_EddsaSignature commit_sig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash over coins to melt and coins to create of the
|
||||||
|
* refresh session.
|
||||||
|
*/
|
||||||
|
struct GNUNET_HashCode session_hash;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Signature over the melt by the client.
|
* Signature over the melt by the client.
|
||||||
*/
|
*/
|
||||||
|
@ -588,6 +588,7 @@ TALER_MINT_db_execute_refresh_melt (struct MHD_Connection *connection,
|
|||||||
|
|
||||||
/* store 'global' session data */
|
/* store 'global' session data */
|
||||||
session.melt_sig = *client_signature;
|
session.melt_sig = *client_signature;
|
||||||
|
session.session_hash = *melt_hash;
|
||||||
session.num_oldcoins = coin_count;
|
session.num_oldcoins = coin_count;
|
||||||
session.num_newcoins = num_new_denoms;
|
session.num_newcoins = num_new_denoms;
|
||||||
session.kappa = KAPPA;
|
session.kappa = KAPPA;
|
||||||
@ -691,7 +692,8 @@ TALER_MINT_db_execute_refresh_commit (struct MHD_Connection *connection,
|
|||||||
{
|
{
|
||||||
TALER_MINT_DB_rollback (db_conn);
|
TALER_MINT_DB_rollback (db_conn);
|
||||||
res = TALER_MINT_reply_refresh_commit_success (connection,
|
res = TALER_MINT_reply_refresh_commit_success (connection,
|
||||||
&refresh_session);
|
&refresh_session.session_hash,
|
||||||
|
refresh_session.noreveal_index);
|
||||||
return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES;
|
return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES;
|
||||||
}
|
}
|
||||||
for (i = 0; i < kappa; i++)
|
for (i = 0; i < kappa; i++)
|
||||||
@ -749,7 +751,9 @@ TALER_MINT_db_execute_refresh_commit (struct MHD_Connection *connection,
|
|||||||
return TALER_MINT_reply_commit_error (connection);
|
return TALER_MINT_reply_commit_error (connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TALER_MINT_reply_refresh_commit_success (connection, &refresh_session);
|
return TALER_MINT_reply_refresh_commit_success (connection,
|
||||||
|
&refresh_session.session_hash,
|
||||||
|
refresh_session.noreveal_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,6 +179,7 @@ handle_refresh_melt_binary (struct MHD_Connection *connection,
|
|||||||
|
|
||||||
/* check that signature from the session public key is ok */
|
/* check that signature from the session public key is ok */
|
||||||
hash_context = GNUNET_CRYPTO_hash_context_start ();
|
hash_context = GNUNET_CRYPTO_hash_context_start ();
|
||||||
|
/* FIXME: also hash session public key here!? */
|
||||||
for (i = 0; i < num_new_denoms; i++)
|
for (i = 0; i < num_new_denoms; i++)
|
||||||
{
|
{
|
||||||
buf_size = GNUNET_CRYPTO_rsa_public_key_encode (denom_pubs[i],
|
buf_size = GNUNET_CRYPTO_rsa_public_key_encode (denom_pubs[i],
|
||||||
|
@ -631,15 +631,15 @@ TALER_MINT_reply_refresh_melt_success (struct MHD_Connection *connection,
|
|||||||
/**
|
/**
|
||||||
* Send a response to a "/refresh/commit" request.
|
* Send a response to a "/refresh/commit" request.
|
||||||
*
|
*
|
||||||
* FIXME: maybe not the ideal argument type for @a refresh_session here.
|
|
||||||
*
|
|
||||||
* @param connection the connection to send the response to
|
* @param connection the connection to send the response to
|
||||||
* @param refresh_session the refresh session
|
* @param session_hash hash of the refresh session
|
||||||
|
* @param noreveal_index which index will the client not have to reveal
|
||||||
* @return a MHD status code
|
* @return a MHD status code
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
||||||
const struct RefreshSession *refresh_session)
|
const struct GNUNET_HashCode *session_hash,
|
||||||
|
uint16_t noreveal_index)
|
||||||
{
|
{
|
||||||
struct RefreshCommitResponseSignatureBody body;
|
struct RefreshCommitResponseSignatureBody body;
|
||||||
struct GNUNET_CRYPTO_EddsaSignature sig;
|
struct GNUNET_CRYPTO_EddsaSignature sig;
|
||||||
@ -648,15 +648,17 @@ TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
|||||||
|
|
||||||
body.purpose.size = htonl (sizeof (struct RefreshCommitResponseSignatureBody));
|
body.purpose.size = htonl (sizeof (struct RefreshCommitResponseSignatureBody));
|
||||||
body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_COMMIT_RESPONSE);
|
body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_COMMIT_RESPONSE);
|
||||||
body.noreveal_index = htons (refresh_session->noreveal_index);
|
body.session_hash = *session_hash;
|
||||||
|
body.noreveal_index = htons (noreveal_index);
|
||||||
TALER_MINT_keys_sign (&body.purpose,
|
TALER_MINT_keys_sign (&body.purpose,
|
||||||
&sig);
|
&sig);
|
||||||
sig_json = TALER_JSON_from_eddsa_sig (&body.purpose, &sig);
|
sig_json = TALER_JSON_from_eddsa_sig (&body.purpose,
|
||||||
|
&sig);
|
||||||
GNUNET_assert (NULL != sig_json);
|
GNUNET_assert (NULL != sig_json);
|
||||||
ret = TALER_MINT_reply_json_pack (connection,
|
ret = TALER_MINT_reply_json_pack (connection,
|
||||||
MHD_HTTP_OK,
|
MHD_HTTP_OK,
|
||||||
"{s:i, s:o}",
|
"{s:i, s:o}",
|
||||||
"noreveal_index", (int) refresh_session->noreveal_index,
|
"noreveal_index", (int) noreveal_index,
|
||||||
"signature", sig_json);
|
"signature", sig_json);
|
||||||
json_decref (sig_json);
|
json_decref (sig_json);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -249,15 +249,15 @@ TALER_MINT_reply_withdraw_sign_success (struct MHD_Connection *connection,
|
|||||||
/**
|
/**
|
||||||
* Send a response to a "/refresh/commit" request.
|
* Send a response to a "/refresh/commit" request.
|
||||||
*
|
*
|
||||||
* FIXME: maybe not the ideal argument type for @a refresh_session here.
|
|
||||||
*
|
|
||||||
* @param connection the connection to send the response to
|
* @param connection the connection to send the response to
|
||||||
* @param refresh_session the refresh session
|
* @param session_hash hash of the refresh session
|
||||||
|
* @param noreveal_index which index will the client not have to reveal
|
||||||
* @return a MHD status code
|
* @return a MHD status code
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
||||||
const struct RefreshSession *refresh_session);
|
const struct GNUNET_HashCode *session_hash,
|
||||||
|
uint16_t noreveal_index);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user