using coin to create deposit

This commit is contained in:
Fournier Nicolas 2015-07-15 18:06:50 +02:00
parent f696b737d0
commit 747d083279
4 changed files with 13 additions and 35 deletions

View File

@ -197,10 +197,9 @@ PERF_TALER_MINTDB_reserve_free (struct PERF_TALER_MINTDB_Reserve *reserve)
* @param dki the denomination key used to sign the key * @param dki the denomination key used to sign the key
*/ */
struct TALER_MINTDB_Deposit * struct TALER_MINTDB_Deposit *
PERF_TALER_MINTDB_deposit_init (const struct TALER_MINTDB_DenominationKeyIssueInformation *dki) PERF_TALER_MINTDB_deposit_init (const struct PERF_TALER_MINTDB_Coin *coin)
{ {
struct TALER_MINTDB_Deposit *deposit; struct TALER_MINTDB_Deposit *deposit;
struct TALER_CoinPublicInfo coin;
struct TALER_CoinSpendSignatureP csig; struct TALER_CoinSpendSignatureP csig;
struct TALER_MerchantPublicKeyP merchant_pub; struct TALER_MerchantPublicKeyP merchant_pub;
struct GNUNET_HashCode h_contract; struct GNUNET_HashCode h_contract;
@ -219,42 +218,21 @@ PERF_TALER_MINTDB_deposit_init (const struct TALER_MINTDB_DenominationKeyIssueIn
GNUNET_assert (NULL != GNUNET_assert (NULL !=
(deposit = GNUNET_malloc (sizeof (struct TALER_MINTDB_Deposit) + sizeof (wire)))); (deposit = GNUNET_malloc (sizeof (struct TALER_MINTDB_Deposit) + sizeof (wire))));
{ // coin
struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_prvt;
GNUNET_assert (NULL !=
(eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create ()));
GNUNET_CRYPTO_eddsa_key_get_public (eddsa_prvt,
&coin.coin_pub.eddsa_pub);
GNUNET_assert (NULL !=
(coin.denom_pub.rsa_public_key =
GNUNET_CRYPTO_rsa_public_key_dup (dki->denom_pub.rsa_public_key)));
GNUNET_assert (NULL !=
(coin.denom_sig.rsa_signature =
GNUNET_CRYPTO_rsa_sign (dki->denom_priv.rsa_private_key,
&coin.coin_pub.eddsa_pub,
sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))));
GNUNET_free (eddsa_prvt);
}
{ //csig { //csig
struct u32_presign struct u32_presign
{ {
struct GNUNET_CRYPTO_EccSignaturePurpose purpose; struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
uint32_t data; uint32_t data;
} unsigned_data; } unsigned_data;
struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_prvt;
GNUNET_assert (NULL !=
(eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create ()));
unsigned_data.data = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, unsigned_data.data = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
UINT32_MAX); UINT32_MAX);
unsigned_data.purpose.size = htonl (sizeof (struct u32_presign)); unsigned_data.purpose.size = htonl (sizeof (struct u32_presign));
unsigned_data.purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST); unsigned_data.purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
GNUNET_CRYPTO_eddsa_sign (eddsa_prvt, GNUNET_CRYPTO_eddsa_sign (&coin->priv,
&unsigned_data.purpose, &unsigned_data.purpose,
&csig.eddsa_signature)); &csig.eddsa_signature));
GNUNET_free (eddsa_prvt);
} }
{ //merchant_pub { //merchant_pub
struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_prv; struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_prv;
@ -278,7 +256,7 @@ PERF_TALER_MINTDB_deposit_init (const struct TALER_MINTDB_DenominationKeyIssueIn
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":0.1", TALER_string_to_amount (CURRENCY ":0.1",
&deposit_fee)); &deposit_fee));
deposit->coin = coin; deposit->coin = coin->public_info;
deposit->csig = csig; deposit->csig = csig;
deposit->h_contract = h_contract; deposit->h_contract = h_contract;
deposit->h_wire = h_wire; deposit->h_wire = h_wire;

View File

@ -123,7 +123,7 @@ PERF_TALER_MINTDB_reserve_free (struct PERF_TALER_MINTDB_Reserve *reserve);
*/ */
struct TALER_MINTDB_Deposit * struct TALER_MINTDB_Deposit *
PERF_TALER_MINTDB_deposit_init ( PERF_TALER_MINTDB_deposit_init (
const struct TALER_MINTDB_DenominationKeyIssueInformation *dki); const struct PERF_TALER_MINTDB_Coin *coin);
/** /**

View File

@ -497,14 +497,14 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state)
case PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT: case PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT:
{ {
int dki_index; int coin_index;
struct TALER_MINTDB_Deposit *deposit; struct TALER_MINTDB_Deposit *deposit;
GNUNET_assert (GNUNET_SYSERR != GNUNET_assert (GNUNET_SYSERR !=
(dki_index = cmd_find (state->cmd, (coin_index = cmd_find (state->cmd,
state->cmd[state->i].details.insert_deposit.label_dki))); state->cmd[state->i].details.insert_deposit.label_coin)));
GNUNET_assert (NULL != GNUNET_assert (NULL !=
(deposit = PERF_TALER_MINTDB_deposit_init (state->cmd[dki_index].exposed.data.dki))); (deposit = PERF_TALER_MINTDB_deposit_init (state->cmd[coin_index].exposed.data.coin)));
GNUNET_assert ( GNUNET_assert (
state->plugin->insert_deposit (state->plugin->cls, state->plugin->insert_deposit (state->plugin->cls,
@ -974,7 +974,7 @@ PERF_TALER_MINTDB_check (const struct PERF_TALER_MINTDB_Cmd *cmd)
case PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT: case PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT:
ret_loc = find_test (cmd, ret_loc = find_test (cmd,
cmd[i].details.insert_deposit.label_dki, cmd[i].details.insert_deposit.label_coin,
i, i,
"label_dki"); "label_dki");
break; break;

View File

@ -293,14 +293,14 @@
* @exposes #PERF_TALER_MINTDB_DEPOSIT * @exposes #PERF_TALER_MINTDB_DEPOSIT
* *
* @param _label the label of this command * @param _label the label of this command
* @param _label_dki source to use for the denomination key * @param _label_coin source of the coin used to pay
*/ */
#define PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT(_label, _label_dki) \ #define PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT(_label, _label_coin) \
{ \ { \
.command = PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT,\ .command = PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT,\
.label = _label, \ .label = _label, \
.exposed.type = PERF_TALER_MINTDB_DEPOSIT, \ .exposed.type = PERF_TALER_MINTDB_DEPOSIT, \
.details.insert_deposit.label_dki = _label_dki, \ .details.insert_deposit.label_coin = _label_coin, \
} }
@ -732,7 +732,7 @@ union PERF_TALER_MINTDB_CMD_Details
/** /**
* Label of the source where the reserve used to create the coin is * Label of the source where the reserve used to create the coin is
*/ */
const char *label_dki; const char *label_coin;
} insert_deposit; } insert_deposit;