starting to refactor refresh code, moving response generation logic to response generation file
This commit is contained in:
parent
ed51946442
commit
93a98f8091
@ -512,4 +512,28 @@ read_again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sign the message in @a purpose with the mint's signing
|
||||||
|
* key.
|
||||||
|
*
|
||||||
|
* @param purpose the message to sign
|
||||||
|
* @param[OUT] sig signature over purpose using current signing key
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
TALER_MINT_keys_sign (const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
|
||||||
|
struct GNUNET_CRYPTO_EddsaSignature *sig)
|
||||||
|
|
||||||
|
{
|
||||||
|
struct MintKeyState *key_state;
|
||||||
|
|
||||||
|
key_state = TALER_MINT_key_state_acquire ();
|
||||||
|
GNUNET_assert (GNUNET_OK ==
|
||||||
|
GNUNET_CRYPTO_eddsa_sign (&key_state->current_sign_key_issue.signkey_priv,
|
||||||
|
purpose,
|
||||||
|
sig));
|
||||||
|
|
||||||
|
TALER_MINT_key_state_release (key_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* end of taler-mint-httpd_keys.c */
|
/* end of taler-mint-httpd_keys.c */
|
||||||
|
@ -152,4 +152,17 @@ TALER_MINT_handler_keys (struct RequestHandler *rh,
|
|||||||
const char *upload_data,
|
const char *upload_data,
|
||||||
size_t *upload_data_size);
|
size_t *upload_data_size);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sign the message in @a purpose with the mint's signing
|
||||||
|
* key.
|
||||||
|
*
|
||||||
|
* @param purpose the message to sign
|
||||||
|
* @param[OUT] sig signature over purpose using current signing key
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
TALER_MINT_keys_sign (const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
|
||||||
|
struct GNUNET_CRYPTO_EddsaSignature *sig);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,38 +41,6 @@
|
|||||||
#include "taler-mint-httpd_responses.h"
|
#include "taler-mint-httpd_responses.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sign the message in @a purpose with the mint's signing
|
|
||||||
* key and encode the signature as a JSON object.
|
|
||||||
*
|
|
||||||
* @param purpose the message to sign
|
|
||||||
* @return signature as JSON object
|
|
||||||
*/
|
|
||||||
static json_t *
|
|
||||||
sign_as_json (struct GNUNET_CRYPTO_EccSignaturePurpose *purpose)
|
|
||||||
{
|
|
||||||
json_t *sig_json;
|
|
||||||
struct GNUNET_CRYPTO_EddsaSignature sig;
|
|
||||||
struct MintKeyState *key_state;
|
|
||||||
|
|
||||||
key_state = TALER_MINT_key_state_acquire ();
|
|
||||||
|
|
||||||
sig_json = json_object ();
|
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_eddsa_sign (&key_state->current_sign_key_issue.signkey_priv,
|
|
||||||
purpose,
|
|
||||||
&sig));
|
|
||||||
|
|
||||||
TALER_MINT_key_state_release (key_state);
|
|
||||||
|
|
||||||
json_object_set (sig_json, "sig", TALER_JSON_from_data (&sig, sizeof (struct GNUNET_CRYPTO_EddsaSignature)));
|
|
||||||
json_object_set (sig_json, "purpose", json_integer (ntohl (purpose->purpose)));
|
|
||||||
json_object_set (sig_json, "size", json_integer (ntohl (purpose->size)));
|
|
||||||
|
|
||||||
return sig_json;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXME: document!
|
* FIXME: document!
|
||||||
*/
|
*/
|
||||||
@ -184,8 +152,7 @@ refresh_accept_denoms (struct MHD_Connection *connection,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an amount in the mint's currency
|
* Get an amount in the mint's currency that is zero.
|
||||||
* that is zero.
|
|
||||||
*
|
*
|
||||||
* @return zero amount in the mint's currency
|
* @return zero amount in the mint's currency
|
||||||
*/
|
*/
|
||||||
@ -479,12 +446,15 @@ helper_refresh_send_melt_response (struct MHD_Connection *connection,
|
|||||||
|
|
||||||
{
|
{
|
||||||
struct RefreshMeltResponseSignatureBody body;
|
struct RefreshMeltResponseSignatureBody body;
|
||||||
|
struct GNUNET_CRYPTO_EddsaSignature sig;
|
||||||
json_t *sig_json;
|
json_t *sig_json;
|
||||||
|
|
||||||
body.purpose.size = htonl (sizeof (struct RefreshMeltResponseSignatureBody));
|
body.purpose.size = htonl (sizeof (struct RefreshMeltResponseSignatureBody));
|
||||||
body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT_RESPONSE);
|
body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT_RESPONSE);
|
||||||
GNUNET_CRYPTO_hash_context_finish (hash_context, &body.melt_response_hash);
|
GNUNET_CRYPTO_hash_context_finish (hash_context, &body.melt_response_hash);
|
||||||
sig_json = sign_as_json (&body.purpose);
|
TALER_MINT_keys_sign (&body.purpose,
|
||||||
|
&sig);
|
||||||
|
sig_json = TALER_JSON_from_sig (&body.purpose, &sig);
|
||||||
GNUNET_assert (NULL != sig_json);
|
GNUNET_assert (NULL != sig_json);
|
||||||
json_object_set (root, "signature", sig_json);
|
json_object_set (root, "signature", sig_json);
|
||||||
}
|
}
|
||||||
@ -502,9 +472,9 @@ helper_refresh_send_melt_response (struct MHD_Connection *connection,
|
|||||||
* @param root the JSON object with the signature
|
* @param root the JSON object with the signature
|
||||||
* @param the public key that the signature was created with
|
* @param the public key that the signature was created with
|
||||||
* @param purpose the signed message
|
* @param purpose the signed message
|
||||||
* @return GNUNET_YES if the signature was valid
|
* @return #GNUNET_YES if the signature was valid
|
||||||
* GNUNET_NO if the signature was invalid
|
* #GNUNET_NO if the signature was invalid
|
||||||
* GNUNET_SYSERR on internal error
|
* #GNUNET_SYSERR on internal error
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
request_json_check_signature (struct MHD_Connection *connection,
|
request_json_check_signature (struct MHD_Connection *connection,
|
||||||
@ -774,35 +744,6 @@ TALER_MINT_handler_refresh_melt (struct RequestHandler *rh,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a response to a "/refresh/commit" request.
|
|
||||||
*
|
|
||||||
* @param connection the connection to send the response to
|
|
||||||
* @param db_conn the mint database
|
|
||||||
* @param refresh_session the refresh session
|
|
||||||
* @return a MHD status code
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
refresh_send_commit_response (struct MHD_Connection *connection,
|
|
||||||
PGconn *db_conn,
|
|
||||||
struct RefreshSession *refresh_session)
|
|
||||||
{
|
|
||||||
struct RefreshCommitResponseSignatureBody body;
|
|
||||||
json_t *sig_json;
|
|
||||||
|
|
||||||
body.purpose.size = htonl (sizeof (struct RefreshCommitResponseSignatureBody));
|
|
||||||
body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_COMMIT_RESPONSE);
|
|
||||||
body.noreveal_index = htons (refresh_session->noreveal_index);
|
|
||||||
sig_json = sign_as_json (&body.purpose);
|
|
||||||
GNUNET_assert (NULL != sig_json);
|
|
||||||
return TALER_MINT_reply_json_pack (connection,
|
|
||||||
MHD_HTTP_OK,
|
|
||||||
"{s:i, s:o}",
|
|
||||||
"noreveal_index", (int) refresh_session->noreveal_index,
|
|
||||||
"signature", sig_json);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle a "/refresh/commit" request
|
* Handle a "/refresh/commit" request
|
||||||
*
|
*
|
||||||
@ -868,8 +809,7 @@ TALER_MINT_handler_refresh_commit (struct RequestHandler *rh,
|
|||||||
{
|
{
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"sending cached commit response\n");
|
"sending cached commit response\n");
|
||||||
res = refresh_send_commit_response (connection,
|
res = TALER_MINT_reply_refresh_commit_success (connection,
|
||||||
db_conn,
|
|
||||||
&refresh_session);
|
&refresh_session);
|
||||||
GNUNET_break (res != GNUNET_SYSERR);
|
GNUNET_break (res != GNUNET_SYSERR);
|
||||||
return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES;
|
return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES;
|
||||||
@ -1072,7 +1012,7 @@ TALER_MINT_handler_refresh_commit (struct RequestHandler *rh,
|
|||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return refresh_send_commit_response (connection, db_conn, &refresh_session);
|
return TALER_MINT_reply_refresh_commit_success (connection, &refresh_session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -290,5 +290,39 @@ TALER_MINT_reply_withdraw_sign_success (struct MHD_Connection *connection,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 refresh_session the refresh session
|
||||||
|
* @return a MHD status code
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
||||||
|
struct RefreshSession *refresh_session)
|
||||||
|
{
|
||||||
|
struct RefreshCommitResponseSignatureBody body;
|
||||||
|
struct GNUNET_CRYPTO_EddsaSignature sig;
|
||||||
|
json_t *sig_json;
|
||||||
|
|
||||||
|
body.purpose.size = htonl (sizeof (struct RefreshCommitResponseSignatureBody));
|
||||||
|
body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_COMMIT_RESPONSE);
|
||||||
|
body.noreveal_index = htons (refresh_session->noreveal_index);
|
||||||
|
TALER_MINT_keys_sign (&body.purpose,
|
||||||
|
&sig);
|
||||||
|
sig_json = TALER_JSON_from_sig (&body.purpose, &sig);
|
||||||
|
GNUNET_assert (NULL != sig_json);
|
||||||
|
return TALER_MINT_reply_json_pack (connection,
|
||||||
|
MHD_HTTP_OK,
|
||||||
|
"{s:i, s:o}",
|
||||||
|
"noreveal_index", (int) refresh_session->noreveal_index,
|
||||||
|
"signature", sig_json);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* end of taler-mint-httpd_responses.c */
|
/* end of taler-mint-httpd_responses.c */
|
||||||
|
@ -159,4 +159,22 @@ TALER_MINT_reply_withdraw_sign_success (struct MHD_Connection *connection,
|
|||||||
const struct CollectableBlindcoin *collectable);
|
const struct CollectableBlindcoin *collectable);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 refresh_session the refresh session
|
||||||
|
* @return a MHD status code
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
TALER_MINT_reply_refresh_commit_success (struct MHD_Connection *connection,
|
||||||
|
struct RefreshSession *refresh_session);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user