added new commands for melting
This commit is contained in:
parent
cb37f25146
commit
3e8a837a07
@ -534,24 +534,13 @@ PERF_TALER_MINTDB_coin_public_info_free (struct TALER_CoinPublicInfo *cpi)
|
|||||||
*/
|
*/
|
||||||
struct TALER_MINTDB_RefreshMelt *
|
struct TALER_MINTDB_RefreshMelt *
|
||||||
PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
|
PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
|
||||||
struct TALER_MINTDB_DenominationKeyIssueInformation *dki)
|
struct PERF_TALER_MINTDB_Coin *coin)
|
||||||
{
|
{
|
||||||
struct TALER_MINTDB_RefreshMelt *melt;
|
struct TALER_MINTDB_RefreshMelt *melt;
|
||||||
struct GNUNET_CRYPTO_EddsaPrivateKey *coin_key;
|
struct TALER_CoinSpendSignatureP coin_sig;
|
||||||
struct TALER_CoinPublicInfo cpi;
|
|
||||||
struct TALER_CoinSpendSignatureP coin_spent;
|
|
||||||
struct TALER_Amount amount;
|
struct TALER_Amount amount;
|
||||||
struct TALER_Amount amount_with_fee;
|
struct TALER_Amount amount_with_fee;
|
||||||
|
|
||||||
coin_key = GNUNET_CRYPTO_eddsa_key_create ();
|
|
||||||
cpi.denom_pub = dki->denom_pub;
|
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (coin_key,
|
|
||||||
&cpi.coin_pub.eddsa_pub);
|
|
||||||
GNUNET_assert (NULL !=
|
|
||||||
(cpi.denom_sig.rsa_signature =
|
|
||||||
GNUNET_CRYPTO_rsa_sign (dki->denom_priv.rsa_private_key,
|
|
||||||
&cpi.coin_pub.eddsa_pub,
|
|
||||||
sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))));
|
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -562,22 +551,21 @@ PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
|
|||||||
to_sign.purpose.purpose = GNUNET_SIGNATURE_PURPOSE_TEST;
|
to_sign.purpose.purpose = GNUNET_SIGNATURE_PURPOSE_TEST;
|
||||||
to_sign.purpose.size = htonl (sizeof (to_sign));
|
to_sign.purpose.size = htonl (sizeof (to_sign));
|
||||||
to_sign.session = *session;
|
to_sign.session = *session;
|
||||||
GNUNET_CRYPTO_eddsa_sign (coin_key,
|
GNUNET_CRYPTO_eddsa_sign (&coin->priv,
|
||||||
&to_sign.purpose,
|
&to_sign.purpose,
|
||||||
&coin_spent.eddsa_signature);
|
&coin_sig.eddsa_signature);
|
||||||
}
|
}
|
||||||
GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":10.0",
|
GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":1.1",
|
||||||
&amount));
|
&amount));
|
||||||
GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":0.1",
|
GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":0.1",
|
||||||
&amount_with_fee));
|
&amount_with_fee));
|
||||||
melt = GNUNET_new (struct TALER_MINTDB_RefreshMelt);
|
melt = GNUNET_new (struct TALER_MINTDB_RefreshMelt);
|
||||||
melt->coin = cpi;
|
melt->coin = coin->public_info;
|
||||||
melt->coin_sig = coin_spent;
|
melt->coin_sig = coin_sig;
|
||||||
melt->session_hash = *session;
|
melt->session_hash = *session;
|
||||||
melt->amount_with_fee = amount;
|
melt->amount_with_fee = amount;
|
||||||
melt->melt_fee = amount_with_fee;
|
melt->melt_fee = amount_with_fee;
|
||||||
|
|
||||||
GNUNET_free (coin_key);
|
|
||||||
return melt;
|
return melt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ PERF_TALER_MINTDB_coin_free (
|
|||||||
*/
|
*/
|
||||||
struct TALER_MINTDB_RefreshMelt *
|
struct TALER_MINTDB_RefreshMelt *
|
||||||
PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
|
PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
|
||||||
struct TALER_MINTDB_DenominationKeyIssueInformation *dki);
|
struct PERF_TALER_MINTDB_Coin *coin);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -678,7 +678,100 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
case PERF_TALER_MINTDB_CMD_GET_COIN_TRANSACTION:
|
||||||
|
{
|
||||||
|
int coin_index;
|
||||||
|
struct PERF_TALER_MINTDB_Coin *coin;
|
||||||
|
struct TALER_MINTDB_TransactionList *transactions;
|
||||||
|
|
||||||
|
coin_index = cmd_find (state->cmd,
|
||||||
|
state->cmd[state->i].details.get_coin_transaction.label_coin);
|
||||||
|
GNUNET_assert (GNUNET_SYSERR != coin_index);
|
||||||
|
coin = state->cmd[coin_index].exposed.data.coin;
|
||||||
|
transactions = state->plugin->get_coin_transactions (state->plugin->cls,
|
||||||
|
state->session,
|
||||||
|
&coin->public_info.coin_pub);
|
||||||
|
state->plugin->free_coin_transaction_list (state->plugin->cls,
|
||||||
|
transactions);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PERF_TALER_MINTDB_CMD_CREATE_REFRESH_SESSION:
|
||||||
|
{
|
||||||
|
struct GNUNET_HashCode hash;
|
||||||
|
struct TALER_MINTDB_RefreshSession *refresh_session;
|
||||||
|
|
||||||
|
refresh_session = PERF_TALER_MINTDB_refresh_session_init ();
|
||||||
|
GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK,
|
||||||
|
&hash);
|
||||||
|
state->plugin->create_refresh_session (state->session,
|
||||||
|
state->session,
|
||||||
|
&hash,
|
||||||
|
refresh_session);
|
||||||
|
state->cmd[state->i].exposed.data.session_hash = hash;
|
||||||
|
PERF_TALER_MINTDB_refresh_session_free (refresh_session);
|
||||||
|
GNUNET_free (refresh_session);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PERF_TALER_MINTDB_CMD_GET_REFRESH_SESSION:
|
||||||
|
{
|
||||||
|
int hash_index;
|
||||||
|
struct GNUNET_HashCode hash;
|
||||||
|
struct TALER_MINTDB_RefreshSession refresh;
|
||||||
|
|
||||||
|
hash_index = cmd_find (state->cmd,
|
||||||
|
state->cmd[state->i].details.get_refresh_session.label_hash);
|
||||||
|
hash = state->cmd[hash_index].exposed.data.session_hash;
|
||||||
|
state->plugin->get_refresh_session (state->session,
|
||||||
|
state->session,
|
||||||
|
&hash,
|
||||||
|
&refresh);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PERF_TALER_MINTDB_CMD_INSERT_REFRESH_MELT:
|
||||||
|
{
|
||||||
|
int hash_index;
|
||||||
|
int coin_index;
|
||||||
|
struct GNUNET_HashCode hash;
|
||||||
|
struct TALER_MINTDB_RefreshMelt *melt;
|
||||||
|
struct PERF_TALER_MINTDB_Coin *coin;
|
||||||
|
|
||||||
|
hash_index = cmd_find (state->cmd,
|
||||||
|
state->cmd[state->i].details.insert_refresh_melt.label_hash);
|
||||||
|
coin_index = cmd_find (state->cmd,
|
||||||
|
state->cmd[state->i].details.insert_refresh_melt.label_coin);
|
||||||
|
hash = state->cmd[hash_index].exposed.data.session_hash;
|
||||||
|
coin = state->cmd[coin_index].exposed.data.coin;
|
||||||
|
melt = PERF_TALER_MINTDB_refresh_melt_init (&hash,
|
||||||
|
coin);
|
||||||
|
state->plugin->insert_refresh_melt (state->plugin->cls,
|
||||||
|
state->session,
|
||||||
|
1,
|
||||||
|
melt);
|
||||||
|
state->cmd[state->i].exposed.data.session_hash = hash;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PERF_TALER_MINTDB_CMD_GET_REFRESH_MELT:
|
||||||
|
{
|
||||||
|
int hash_index;
|
||||||
|
struct GNUNET_HashCode hash;
|
||||||
|
struct TALER_MINTDB_RefreshMelt melt;
|
||||||
|
|
||||||
|
hash_index = cmd_find (state->cmd,
|
||||||
|
state->cmd[state->i].details.get_refresh_melt.label_hash);
|
||||||
|
hash = state->cmd[hash_index].exposed.data.session_hash;
|
||||||
|
state->plugin->get_refresh_melt (state->plugin->cls,
|
||||||
|
state->session,
|
||||||
|
&hash,
|
||||||
|
1,
|
||||||
|
&melt);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user