change TEH_keys_denomination_sign message parameter
This commit is contained in:
parent
5b7e8f9ac5
commit
74ce114b83
@ -2410,8 +2410,7 @@ TEH_keys_denomination_by_hash2 (
|
|||||||
|
|
||||||
struct TALER_BlindedDenominationSignature
|
struct TALER_BlindedDenominationSignature
|
||||||
TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||||
const void *msg,
|
const struct TEH_SignDetails *msg,
|
||||||
size_t msg_size,
|
|
||||||
enum TALER_ErrorCode *ec)
|
enum TALER_ErrorCode *ec)
|
||||||
{
|
{
|
||||||
struct TEH_KeyStateHandle *ksh;
|
struct TEH_KeyStateHandle *ksh;
|
||||||
@ -2434,26 +2433,23 @@ TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
|||||||
*ec = TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN;
|
*ec = TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN;
|
||||||
return none;
|
return none;
|
||||||
}
|
}
|
||||||
|
if (msg->cipher != hd->denom_pub.cipher)
|
||||||
|
{
|
||||||
|
*ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||||
|
return none;
|
||||||
|
}
|
||||||
switch (hd->denom_pub.cipher)
|
switch (hd->denom_pub.cipher)
|
||||||
{
|
{
|
||||||
case TALER_DENOMINATION_RSA:
|
case TALER_DENOMINATION_RSA:
|
||||||
return TALER_CRYPTO_helper_rsa_sign (ksh->helpers->rsadh,
|
return TALER_CRYPTO_helper_rsa_sign (ksh->helpers->rsadh,
|
||||||
&hd->h_details.h_rsa,
|
&hd->h_details.h_rsa,
|
||||||
msg,
|
msg->details.rsa_message.msg,
|
||||||
msg_size,
|
msg->details.rsa_message.msg_size,
|
||||||
ec);
|
ec);
|
||||||
case TALER_DENOMINATION_CS:
|
case TALER_DENOMINATION_CS:
|
||||||
if (sizeof (struct TALER_BlindedCsPlanchet) != msg_size)
|
|
||||||
{
|
|
||||||
*ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
|
||||||
return none;
|
|
||||||
}
|
|
||||||
struct TALER_BlindedCsPlanchet *blinded_cs_planchet = ((struct
|
|
||||||
TALER_BlindedCsPlanchet
|
|
||||||
*) msg);
|
|
||||||
return TALER_CRYPTO_helper_cs_sign (ksh->helpers->csdh,
|
return TALER_CRYPTO_helper_cs_sign (ksh->helpers->csdh,
|
||||||
&hd->h_details.h_cs,
|
&hd->h_details.h_cs,
|
||||||
blinded_cs_planchet,
|
&msg->details.cs_message,
|
||||||
ec);
|
ec);
|
||||||
default:
|
default:
|
||||||
*ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
*ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||||
|
@ -82,6 +82,42 @@ struct TEH_DenominationKey
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct TEH_SignDetails_RSA
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* message to sign
|
||||||
|
*/
|
||||||
|
const void *msg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* number of bytes in msg
|
||||||
|
*/
|
||||||
|
size_t msg_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct TEH_SignDetails
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Cipher type of the message
|
||||||
|
*/
|
||||||
|
enum TALER_DenominationCipher cipher;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* If we use #TALER_DENOMINATION_RSA in @a cipher.
|
||||||
|
*/
|
||||||
|
struct TEH_SignDetails_RSA rsa_message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we use #TALER_DENOMINATION_CS in @a cipher.
|
||||||
|
*/
|
||||||
|
struct TALER_BlindedCsPlanchet cs_message;
|
||||||
|
} details;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Snapshot of the (coin and signing) keys (including private keys) of
|
* Snapshot of the (coin and signing) keys (including private keys) of
|
||||||
* the exchange. There can be multiple instances of this struct, as it is
|
* the exchange. There can be multiple instances of this struct, as it is
|
||||||
@ -179,8 +215,7 @@ TEH_keys_denomination_by_hash2 (struct TEH_KeyStateHandle *ksh,
|
|||||||
*/
|
*/
|
||||||
struct TALER_BlindedDenominationSignature
|
struct TALER_BlindedDenominationSignature
|
||||||
TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||||
const void *msg,
|
const struct TEH_SignDetails *msg,
|
||||||
size_t msg_size,
|
|
||||||
enum TALER_ErrorCode *ec);
|
enum TALER_ErrorCode *ec);
|
||||||
|
|
||||||
|
|
||||||
|
@ -507,6 +507,7 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
|||||||
for (unsigned int i = 0; i<rctx->num_fresh_coins; i++)
|
for (unsigned int i = 0; i<rctx->num_fresh_coins; i++)
|
||||||
{
|
{
|
||||||
enum TALER_ErrorCode ec = TALER_EC_NONE;
|
enum TALER_ErrorCode ec = TALER_EC_NONE;
|
||||||
|
//FIXME:
|
||||||
|
|
||||||
rrcs[i].coin_sig
|
rrcs[i].coin_sig
|
||||||
= TEH_keys_denomination_sign (
|
= TEH_keys_denomination_sign (
|
||||||
@ -514,6 +515,15 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
|||||||
rcds[i].coin_ev,
|
rcds[i].coin_ev,
|
||||||
rcds[i].coin_ev_size,
|
rcds[i].coin_ev_size,
|
||||||
&ec);
|
&ec);
|
||||||
|
struct TEH_SignDetails sign_details;
|
||||||
|
|
||||||
|
// FIXME: implement cipher handling
|
||||||
|
sign_details.cipher = TALER_DENOMINATION_RSA;
|
||||||
|
sign_details.details.rsa_message.msg = rctx->rcds[i].coin_ev;
|
||||||
|
sign_details.details.rsa_message.msg_size = rctx->rcds[i].coin_ev_size;
|
||||||
|
rctx->ev_sigs[i] = TEH_keys_denomination_sign (&dk_h[i],
|
||||||
|
&sign_details,
|
||||||
|
&ec);
|
||||||
if (TALER_EC_NONE != ec)
|
if (TALER_EC_NONE != ec)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
|
@ -600,31 +600,35 @@ TEH_handler_withdraw (struct TEH_RequestContext *rc,
|
|||||||
|
|
||||||
/* Sign before transaction! */
|
/* Sign before transaction! */
|
||||||
ec = TALER_EC_NONE;
|
ec = TALER_EC_NONE;
|
||||||
switch (wc.blinded_planchet.cipher)
|
|
||||||
{
|
{
|
||||||
case TALER_DENOMINATION_RSA:
|
struct TEH_SignDetails sign_details;
|
||||||
|
sign_details.cipher = wc.blinded_planchet.cipher;
|
||||||
|
switch (wc.blinded_planchet.cipher)
|
||||||
|
{
|
||||||
|
case TALER_DENOMINATION_RSA:
|
||||||
|
sign_details.details.rsa_message.msg =
|
||||||
|
wc.blinded_planchet.details.rsa_blinded_planchet.blinded_msg;
|
||||||
|
sign_details.details.rsa_message.msg_size =
|
||||||
|
wc.blinded_planchet.details.rsa_blinded_planchet.blinded_msg_size;
|
||||||
|
break;
|
||||||
|
case TALER_DENOMINATION_CS:
|
||||||
|
sign_details.details.cs_message =
|
||||||
|
wc.blinded_planchet.details.cs_blinded_planchet;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GNUNET_break (0);
|
||||||
|
GNUNET_JSON_parse_free (spec);
|
||||||
|
if (NULL != coin_ev_spec)
|
||||||
|
GNUNET_JSON_parse_free (coin_ev_spec);
|
||||||
|
return TALER_MHD_reply_with_error (rc->connection,
|
||||||
|
MHD_HTTP_FORBIDDEN,
|
||||||
|
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
wc.collectable.sig = TEH_keys_denomination_sign (
|
wc.collectable.sig = TEH_keys_denomination_sign (
|
||||||
&wc.collectable.denom_pub_hash,
|
&wc.collectable.denom_pub_hash,
|
||||||
wc.blinded_planchet.details.rsa_blinded_planchet.blinded_msg,
|
&sign_details,
|
||||||
wc.blinded_planchet.details.rsa_blinded_planchet.blinded_msg_size,
|
|
||||||
&ec);
|
&ec);
|
||||||
break;
|
|
||||||
case TALER_DENOMINATION_CS:
|
|
||||||
wc.collectable.sig = TEH_keys_denomination_sign (
|
|
||||||
&wc.collectable.denom_pub_hash,
|
|
||||||
&wc.blinded_planchet.details.cs_blinded_planchet,
|
|
||||||
sizeof (wc.blinded_planchet.details.cs_blinded_planchet),
|
|
||||||
&ec);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
GNUNET_break (0);
|
|
||||||
GNUNET_JSON_parse_free (spec);
|
|
||||||
if (NULL != coin_ev_spec)
|
|
||||||
GNUNET_JSON_parse_free (coin_ev_spec);
|
|
||||||
return TALER_MHD_reply_with_error (rc->connection,
|
|
||||||
MHD_HTTP_FORBIDDEN,
|
|
||||||
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
if (TALER_EC_NONE != ec)
|
if (TALER_EC_NONE != ec)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user