change TEH_keys_denomination_sign message parameter

This commit is contained in:
Lucien Heuzeveldt 2022-01-11 21:16:47 +01:00 committed by Gian Demarmels
parent 5b7e8f9ac5
commit 74ce114b83
No known key found for this signature in database
GPG Key ID: 030CEDDCCC92D778
4 changed files with 81 additions and 36 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -600,21 +600,20 @@ TEH_handler_withdraw (struct TEH_RequestContext *rc,
/* Sign before transaction! */ /* Sign before transaction! */
ec = TALER_EC_NONE; ec = TALER_EC_NONE;
{
struct TEH_SignDetails sign_details;
sign_details.cipher = wc.blinded_planchet.cipher;
switch (wc.blinded_planchet.cipher) switch (wc.blinded_planchet.cipher)
{ {
case TALER_DENOMINATION_RSA: case TALER_DENOMINATION_RSA:
wc.collectable.sig = TEH_keys_denomination_sign ( sign_details.details.rsa_message.msg =
&wc.collectable.denom_pub_hash, wc.blinded_planchet.details.rsa_blinded_planchet.blinded_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, wc.blinded_planchet.details.rsa_blinded_planchet.blinded_msg_size;
&ec);
break; break;
case TALER_DENOMINATION_CS: case TALER_DENOMINATION_CS:
wc.collectable.sig = TEH_keys_denomination_sign ( sign_details.details.cs_message =
&wc.collectable.denom_pub_hash, wc.blinded_planchet.details.cs_blinded_planchet;
&wc.blinded_planchet.details.cs_blinded_planchet,
sizeof (wc.blinded_planchet.details.cs_blinded_planchet),
&ec);
break; break;
default: default:
GNUNET_break (0); GNUNET_break (0);
@ -626,6 +625,11 @@ TEH_handler_withdraw (struct TEH_RequestContext *rc,
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE, TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
NULL); NULL);
} }
wc.collectable.sig = TEH_keys_denomination_sign (
&wc.collectable.denom_pub_hash,
&sign_details,
&ec);
}
if (TALER_EC_NONE != ec) if (TALER_EC_NONE != ec)
{ {
GNUNET_break (0); GNUNET_break (0);