-refactoring in preparation of fixing #7272
This commit is contained in:
parent
d876a95073
commit
053faa252c
@ -422,10 +422,13 @@ prepare_transaction (const struct TEH_RequestContext *rc,
|
|||||||
{
|
{
|
||||||
struct PlanchetContext *pc = &wc->planchets[i];
|
struct PlanchetContext *pc = &wc->planchets[i];
|
||||||
enum TALER_ErrorCode ec;
|
enum TALER_ErrorCode ec;
|
||||||
|
struct TEH_CoinSignData csds = {
|
||||||
|
.h_denom_pub = &pc->collectable.denom_pub_hash,
|
||||||
|
.bp = &pc->blinded_planchet
|
||||||
|
};
|
||||||
|
|
||||||
ec = TEH_keys_denomination_sign_withdraw (
|
ec = TEH_keys_denomination_sign_withdraw (
|
||||||
&pc->collectable.denom_pub_hash,
|
&csds,
|
||||||
&pc->blinded_planchet,
|
|
||||||
&pc->collectable.sig);
|
&pc->collectable.sig);
|
||||||
if (TALER_EC_NONE != ec)
|
if (TALER_EC_NONE != ec)
|
||||||
{
|
{
|
||||||
|
@ -2747,12 +2747,13 @@ TEH_keys_denomination_by_hash2 (
|
|||||||
|
|
||||||
enum TALER_ErrorCode
|
enum TALER_ErrorCode
|
||||||
TEH_keys_denomination_sign_withdraw (
|
TEH_keys_denomination_sign_withdraw (
|
||||||
const struct TALER_DenominationHashP *h_denom_pub,
|
const struct TEH_CoinSignData *csd,
|
||||||
const struct TALER_BlindedPlanchet *bp,
|
|
||||||
struct TALER_BlindedDenominationSignature *bs)
|
struct TALER_BlindedDenominationSignature *bs)
|
||||||
{
|
{
|
||||||
struct TEH_KeyStateHandle *ksh;
|
struct TEH_KeyStateHandle *ksh;
|
||||||
struct HelperDenomination *hd;
|
struct HelperDenomination *hd;
|
||||||
|
const struct TALER_DenominationHashP *h_denom_pub = csd->h_denom_pub;
|
||||||
|
const struct TALER_BlindedPlanchet *bp = csd->bp;
|
||||||
|
|
||||||
ksh = TEH_keys_get_state ();
|
ksh = TEH_keys_get_state ();
|
||||||
if (NULL == ksh)
|
if (NULL == ksh)
|
||||||
@ -2797,12 +2798,67 @@ TEH_keys_denomination_sign_withdraw (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
enum TALER_ErrorCode
|
||||||
|
TEH_keys_denomination_batch_sign_withdraw (
|
||||||
|
const struct TEH_CoinSignData *csds,
|
||||||
|
unsigned int csds_length,
|
||||||
|
struct TALER_BlindedDenominationSignature *bss)
|
||||||
|
{
|
||||||
|
struct TEH_KeyStateHandle *ksh;
|
||||||
|
struct HelperDenomination *hd;
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
ksh = TEH_keys_get_state ();
|
||||||
|
if (NULL == ksh)
|
||||||
|
return TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING;
|
||||||
|
hd = GNUNET_CONTAINER_multihashmap_get (ksh->helpers->denom_keys,
|
||||||
|
&h_denom_pub->hash);
|
||||||
|
if (NULL == hd)
|
||||||
|
return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN;
|
||||||
|
if (bp->cipher != hd->denom_pub.cipher)
|
||||||
|
return TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||||
|
switch (hd->denom_pub.cipher)
|
||||||
|
{
|
||||||
|
case TALER_DENOMINATION_RSA:
|
||||||
|
TEH_METRICS_num_signatures[TEH_MT_SIGNATURE_RSA]++;
|
||||||
|
{
|
||||||
|
struct TALER_CRYPTO_RsaSignRequest rsr = {
|
||||||
|
.h_rsa = &hd->h_details.h_rsa,
|
||||||
|
.msg = bp->details.rsa_blinded_planchet.blinded_msg,
|
||||||
|
.msg_size = bp->details.rsa_blinded_planchet.blinded_msg_size
|
||||||
|
};
|
||||||
|
|
||||||
|
return TALER_CRYPTO_helper_rsa_sign (
|
||||||
|
ksh->helpers->rsadh,
|
||||||
|
&rsr,
|
||||||
|
bs);
|
||||||
|
}
|
||||||
|
case TALER_DENOMINATION_CS:
|
||||||
|
TEH_METRICS_num_signatures[TEH_MT_SIGNATURE_CS]++;
|
||||||
|
{
|
||||||
|
struct TALER_CRYPTO_CsSignRequest csr;
|
||||||
|
|
||||||
|
csr.h_cs = &hd->h_details.h_cs;
|
||||||
|
csr.blinded_planchet = &bp->details.cs_blinded_planchet;
|
||||||
|
return TALER_CRYPTO_helper_cs_sign_withdraw (
|
||||||
|
ksh->helpers->csdh,
|
||||||
|
&csr,
|
||||||
|
bs);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
enum TALER_ErrorCode
|
enum TALER_ErrorCode
|
||||||
TEH_keys_denomination_sign_melt (
|
TEH_keys_denomination_sign_melt (
|
||||||
const struct TALER_DenominationHashP *h_denom_pub,
|
const struct TEH_CoinSignData *csd,
|
||||||
const struct TALER_BlindedPlanchet *bp,
|
|
||||||
struct TALER_BlindedDenominationSignature *bs)
|
struct TALER_BlindedDenominationSignature *bs)
|
||||||
{
|
{
|
||||||
|
const struct TALER_DenominationHashP *h_denom_pub = csd->h_denom_pub;
|
||||||
|
const struct TALER_BlindedPlanchet *bp = csd->bp;
|
||||||
struct TEH_KeyStateHandle *ksh;
|
struct TEH_KeyStateHandle *ksh;
|
||||||
struct HelperDenomination *hd;
|
struct HelperDenomination *hd;
|
||||||
|
|
||||||
|
@ -246,39 +246,79 @@ TEH_keys_denomination_by_hash2 (
|
|||||||
struct MHD_Connection *conn,
|
struct MHD_Connection *conn,
|
||||||
MHD_RESULT *mret);
|
MHD_RESULT *mret);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information needed to create a blind signature.
|
||||||
|
*/
|
||||||
|
struct TEH_CoinSignData
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Hash of key to sign with.
|
||||||
|
*/
|
||||||
|
const struct TALER_DenominationHashP *h_denom_pub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blinded planchet to sign over.
|
||||||
|
*/
|
||||||
|
const struct TALER_BlindedPlanchet *bp;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request to sign @a msg using the public key corresponding to
|
* Request to sign @a csd for regular withdrawing.
|
||||||
* @a h_denom_pub during a withdraw operation.
|
|
||||||
*
|
*
|
||||||
* @param h_denom_pub hash of the public key to use to sign
|
* @param csd identifies data to blindly sign and key to sign with
|
||||||
* @param bp blinded planchet to sign
|
|
||||||
* @param[out] bs set to the blind signature on success
|
* @param[out] bs set to the blind signature on success
|
||||||
* @return #TALER_EC_NONE on success
|
* @return #TALER_EC_NONE on success
|
||||||
*/
|
*/
|
||||||
enum TALER_ErrorCode
|
enum TALER_ErrorCode
|
||||||
TEH_keys_denomination_sign_withdraw (
|
TEH_keys_denomination_sign_withdraw (
|
||||||
const struct TALER_DenominationHashP *h_denom_pub,
|
const struct TEH_CoinSignData *csd,
|
||||||
const struct TALER_BlindedPlanchet *bp,
|
|
||||||
struct TALER_BlindedDenominationSignature *bs);
|
struct TALER_BlindedDenominationSignature *bs);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request to sign @a msg using the public key corresponding to
|
* Request to sign @a csds for regular withdrawing.
|
||||||
* @a h_denom_pub during a refresh operation.
|
|
||||||
*
|
*
|
||||||
* @param h_denom_pub hash of the public key to use to sign
|
* @param csds array with data to blindly sign (and keys to sign with)
|
||||||
* @param bp blinded planchet to sign
|
* @param csds_length length of @a csds array
|
||||||
|
* @param[out] bss array set to the blind signature on success; must be of length @a csds_length
|
||||||
|
* @return #TALER_EC_NONE on success
|
||||||
|
*/
|
||||||
|
enum TALER_ErrorCode
|
||||||
|
TEH_keys_denomination_batch_sign_withdraw (
|
||||||
|
const struct TEH_CoinSignData *csds,
|
||||||
|
unsigned int csds_length,
|
||||||
|
struct TALER_BlindedDenominationSignature *bss);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request to sign @a csd for melting.
|
||||||
|
*
|
||||||
|
* @param csd identifies data to blindly sign and key to sign with
|
||||||
* @param[out] bs set to the blind signature on success
|
* @param[out] bs set to the blind signature on success
|
||||||
* @return #TALER_EC_NONE on success
|
* @return #TALER_EC_NONE on success
|
||||||
*/
|
*/
|
||||||
enum TALER_ErrorCode
|
enum TALER_ErrorCode
|
||||||
TEH_keys_denomination_sign_melt (
|
TEH_keys_denomination_sign_melt (
|
||||||
const struct TALER_DenominationHashP *h_denom_pub,
|
const struct TEH_CoinSignData *csd,
|
||||||
const struct TALER_BlindedPlanchet *bp,
|
|
||||||
struct TALER_BlindedDenominationSignature *bs);
|
struct TALER_BlindedDenominationSignature *bs);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request to sign @a csds for melting.
|
||||||
|
*
|
||||||
|
* @param csds array with data to blindly sign (and keys to sign with)
|
||||||
|
* @param csds_length length of @a csds array
|
||||||
|
* @param[out] bss array set to the blind signature on success; must be of length @a csds_length
|
||||||
|
* @return #TALER_EC_NONE on success
|
||||||
|
*/
|
||||||
|
enum TALER_ErrorCode
|
||||||
|
TEH_keys_denomination_batch_sign_melt (
|
||||||
|
const struct TEH_CoinSignData *csds,
|
||||||
|
unsigned int csds_length,
|
||||||
|
struct TALER_BlindedDenominationSignature *bss);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request to derive CS @a r_pub using the denomination corresponding to @a h_denom_pub
|
* Request to derive CS @a r_pub using the denomination corresponding to @a h_denom_pub
|
||||||
* and @a nonce for withdrawing.
|
* and @a nonce for withdrawing.
|
||||||
|
@ -749,12 +749,15 @@ clean_age:
|
|||||||
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;
|
enum TALER_ErrorCode ec;
|
||||||
|
struct TEH_CoinSignData csd = {
|
||||||
|
.h_denom_pub = &rrcs[i].h_denom_pub,
|
||||||
|
.bp = &rcds[i].blinded_planchet
|
||||||
|
};
|
||||||
|
|
||||||
// FIXME #7272: replace with a batch call that
|
// FIXME #7272: replace with a batch call that
|
||||||
// passes all coins in once go!
|
// passes all coins in once go!
|
||||||
ec = TEH_keys_denomination_sign_melt (
|
ec = TEH_keys_denomination_sign_melt (
|
||||||
&rrcs[i].h_denom_pub,
|
&csd,
|
||||||
&rcds[i].blinded_planchet,
|
|
||||||
&rrcs[i].coin_sig);
|
&rrcs[i].coin_sig);
|
||||||
if (TALER_EC_NONE != ec)
|
if (TALER_EC_NONE != ec)
|
||||||
{
|
{
|
||||||
|
@ -448,11 +448,17 @@ TEH_handler_withdraw (struct TEH_RequestContext *rc,
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sign before transaction! */
|
{
|
||||||
ec = TEH_keys_denomination_sign_withdraw (
|
struct TEH_CoinSignData csd = {
|
||||||
&wc.collectable.denom_pub_hash,
|
.h_denom_pub = &wc.collectable.denom_pub_hash,
|
||||||
&wc.blinded_planchet,
|
.bp = &wc.blinded_planchet
|
||||||
&wc.collectable.sig);
|
};
|
||||||
|
|
||||||
|
/* Sign before transaction! */
|
||||||
|
ec = TEH_keys_denomination_sign_withdraw (
|
||||||
|
&csd,
|
||||||
|
&wc.collectable.sig);
|
||||||
|
}
|
||||||
if (TALER_EC_NONE != ec)
|
if (TALER_EC_NONE != ec)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
|
Loading…
Reference in New Issue
Block a user