From 663fa898f5a94c19e702a1263af85dd7d84f31f6 Mon Sep 17 00:00:00 2001 From: Fournier Nicolas Date: Thu, 23 Jul 2015 16:10:49 +0200 Subject: [PATCH] Initial work for more commands --- src/mintdb/perf_taler_mintdb_init.c | 50 +------ src/mintdb/perf_taler_mintdb_interpreter.c | 87 ++++++++++++ src/mintdb/perf_taler_mintdb_interpreter.h | 151 ++++++++++++++++++++- 3 files changed, 239 insertions(+), 49 deletions(-) diff --git a/src/mintdb/perf_taler_mintdb_init.c b/src/mintdb/perf_taler_mintdb_init.c index 5c18c664e..081875769 100644 --- a/src/mintdb/perf_taler_mintdb_init.c +++ b/src/mintdb/perf_taler_mintdb_init.c @@ -484,47 +484,6 @@ PERF_TALER_MINTDB_refresh_session_free (struct TALER_MINTDB_RefreshSession *refr } -/** - * Generate a random CoinPublicInfo - */ -struct TALER_CoinPublicInfo * -PERF_TALER_MINTDB_coin_public_info_init () -{ - struct GNUNET_CRYPTO_EddsaPrivateKey *coin_spent_prv; - struct GNUNET_CRYPTO_rsa_PrivateKey *denom_prv; - struct TALER_CoinPublicInfo *cpi; - - GNUNET_assert (NULL != - (denom_prv = GNUNET_CRYPTO_rsa_private_key_create (PERF_TALER_MINTDB_RSA_SIZE))); - GNUNET_assert (NULL != - (coin_spent_prv = GNUNET_CRYPTO_eddsa_key_create ())); - GNUNET_assert (NULL != - (cpi = GNUNET_new (struct TALER_CoinPublicInfo))); - GNUNET_CRYPTO_eddsa_key_get_public (coin_spent_prv, &cpi->coin_pub.eddsa_pub); - GNUNET_assert (NULL != - (cpi->denom_pub.rsa_public_key = GNUNET_CRYPTO_rsa_private_key_get_public (denom_prv))); - GNUNET_assert (NULL != - (cpi->denom_sig.rsa_signature = GNUNET_CRYPTO_rsa_sign (denom_prv, - &cpi->coin_pub, - sizeof (struct TALER_CoinSpendPublicKeyP)))); - GNUNET_free (coin_spent_prv); - GNUNET_CRYPTO_rsa_private_key_free (denom_prv); - return cpi; -} - - -/** - * Free a CoinPublicInfo - */ -int -PERF_TALER_MINTDB_coin_public_info_free (struct TALER_CoinPublicInfo *cpi) -{ - - GNUNET_CRYPTO_rsa_signature_free (cpi->denom_sig.rsa_signature); - GNUNET_CRYPTO_rsa_public_key_free (cpi->denom_pub.rsa_public_key); - return GNUNET_OK; -} - /** * Create a melt operation * @@ -560,12 +519,17 @@ PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session, GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":0.1", &amount_with_fee)); melt = GNUNET_new (struct TALER_MINTDB_RefreshMelt); - melt->coin = coin->public_info; + melt->coin.coin_pub = coin->public_info.coin_pub; + melt->coin.denom_sig.rsa_signature = + GNUNET_CRYPTO_rsa_signature_dup (coin->public_info.denom_sig.rsa_signature); + melt->coin.denom_pub.rsa_public_key = + GNUNET_CRYPTO_rsa_public_key_dup (coin->public_info.denom_pub.rsa_public_key); + GNUNET_assert (NULL != melt->coin.denom_pub.rsa_public_key); + GNUNET_assert (NULL != melt->coin.denom_sig.rsa_signature); melt->coin_sig = coin_sig; melt->session_hash = *session; melt->amount_with_fee = amount; melt->melt_fee = amount_with_fee; - return melt; } diff --git a/src/mintdb/perf_taler_mintdb_interpreter.c b/src/mintdb/perf_taler_mintdb_interpreter.c index 30403a628..87bc1c4c7 100644 --- a/src/mintdb/perf_taler_mintdb_interpreter.c +++ b/src/mintdb/perf_taler_mintdb_interpreter.c @@ -770,6 +770,93 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state) } break; + case PERF_TALER_MINTDB_CMD_INSERT_REFRESH_ORDER: + { + int hash_index; + int denom_index; + struct GNUNET_HashCode session_hash; + struct TALER_MINTDB_DenominationKeyIssueInformation *denom; + + hash_index = cmd_find (state->cmd, + state->cmd[state->i].details.insert_refresh_order.label_hash); + GNUNET_assert (GNUNET_SYSERR != hash_index); + denom_index = cmd_find (state->cmd, + state->cmd[state->i].details.insert_refresh_order.label_denom); + GNUNET_assert (GNUNET_SYSERR != denom_index); + session_hash = state->cmd[hash_index].exposed.data.session_hash; + denom = state->cmd[denom_index].exposed.data.dki; + state->plugin->insert_refresh_order (state->plugin->cls, + state->session, + &session_hash, + 1, + &denom->denom_pub); + + } + break; + + case PERF_TALER_MINTDB_CMD_GET_REFRESH_ORDER: + { + int hash_index; + struct GNUNET_HashCode hash; + struct TALER_DenominationPublicKey denom_pub; + + hash_index = cmd_find (state->cmd, + state->cmd[state->i].details.get_refresh_order.label_hash); + GNUNET_assert (GNUNET_SYSERR != hash_index); + hash = state->cmd[hash_index].exposed.data.session_hash; + state->plugin->get_refresh_order (state->plugin->cls, + state->session, + &hash, + 1, + &denom_pub); + } + break; + + case PERF_TALER_MINTDB_CMD_INSERT_REFRESH_COMMIT_COIN: + { + int hash_index; + + hash_index = cmd_find (state->cmd, + state->cmd[state->i].details.insert_refresh_commit_coin.label_hash); + GNUNET_assert (GNUNET_SYSERR != hash_index); + } + break; + + case PERF_TALER_MINTDB_CMD_GET_REFRESH_COMMIT_COIN: + { + int hash_index; + + hash_index = cmd_find (state->cmd, + state->cmd[state->i].details.insert_refresh_commit_coin.label_hash); + GNUNET_assert (GNUNET_SYSERR != hash_index); + } + break; + + case PERF_TALER_MINTDB_CMD_INSERT_REFRESH_COMMIT_LINK: + { + int hash_index; + + hash_index = cmd_find (state->cmd, + state->cmd[state->i].details.insert_refresh_commit_link.label_hash); + GNUNET_assert (GNUNET_SYSERR != hash_index); + } + break; + + case PERF_TALER_MINTDB_CMD_GET_REFRESH_COMMIT_LINK: + break; + + case PERF_TALER_MINTDB_CMD_GET_MELT_COMMITMENT: + break; + + case PERF_TALER_MINTDB_CMD_INSERT_REFRESH_OUT: + break; + + case PERF_TALER_MINTDB_CMD_GET_LINK_DATA_LIST: + break; + + case PERF_TALER_MINTDB_CMD_GET_TRANSFER: + break; + default: break; } diff --git a/src/mintdb/perf_taler_mintdb_interpreter.h b/src/mintdb/perf_taler_mintdb_interpreter.h index f530f3081..29398ab2c 100644 --- a/src/mintdb/perf_taler_mintdb_interpreter.h +++ b/src/mintdb/perf_taler_mintdb_interpreter.h @@ -321,6 +321,21 @@ } +/** + * Access the transactioj history of a coin + * + * @param _label the label of the command + * @param _label_coin the coin which history is checked + */ +#define PERF_TALER_MINTDB_INIT_CMD_GET_COIN_TRANSACTION(_label, _label_coin) \ +{ \ + .command = PERF_TALER_MINTDB_CMD_GET_COIN_TRANSACTION, \ + .label = _label, \ + .exposed.type = PERF_TALER_MINTDB_NONE, \ + .details.get_coin_trancaction.label_coin = _label_coin \ +} + + /** * Inserts informations about a withdrawal in the database * @@ -367,10 +382,26 @@ * @param _label_reserve the reserve used to provide currency */ #define PERF_TALER_MINTDB_INIT_CMD_WITHDRAW_SIGN(_label, _label_dki, _label_reserve) \ - PERF_TALER_MINTDB_CMD_GET_RESERVE_HISTORY("", _label_reserve), \ - PERF_TALER_MINTDB_CMD_INSERT_WITHDRAW(_label, _label_dki, _label_reserve), + PERF_TALER_MINTDB_INIT_CMD_GET_RESERVE_HISTORY(_label "reserve_history", \ + _label_reserve), \ + PERF_TALER_MINTDB_INIT_CMD_INSERT_WITHDRAW(_label "insert withdraw", \ + _label_dki, \ + _label_reserve), +/** + * The /deposit api call + * + * @param _label the label of the command + * @param _label_coin the coin used for the deposit + */ +#define PERF_TALER_MINTDB_INIT_CMD_deposit(_label, _label_coin) \ + PERF_TALER_MINTDB_INIT_CMD_GET_COIN_TRANSACTION (_label "coin history", \ + _label_coin), \ + PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT (_label "deposit", \ + _label_coin), + + /** * The type of data stored in #PERF_TALER_MINTDB_Memory */ @@ -570,12 +601,12 @@ enum PERF_TALER_MINTDB_CMD_Name /** * Insert refresh commit coin */ - PERF_TALER_MINTDB_CMD_INSERT_COMMIT_COIN, + PERF_TALER_MINTDB_CMD_INSERT_REFRESH_COMMIT_COIN, /** * Get refresh commit coin */ - PERF_TALER_MINTDB_CMD_GET_COMMIT_COIN, + PERF_TALER_MINTDB_CMD_GET_REFRESH_COMMIT_COIN, /** * Insert refresh commit link @@ -593,9 +624,20 @@ enum PERF_TALER_MINTDB_CMD_Name PERF_TALER_MINTDB_CMD_GET_MELT_COMMITMENT, /** - * + * Insert a new coin into the database after a melt operation */ - PERF_TALER_MINTDB_CMD_INSERT_REFRESH_OUT + PERF_TALER_MINTDB_CMD_INSERT_REFRESH_OUT, + + /** + * Get the link data list of a coin + */ + PERF_TALER_MINTDB_CMD_GET_LINK_DATA_LIST, + + /** + * Get the shared secret and the transfere public key + */ + PERF_TALER_MINTDB_CMD_GET_TRANSFER + }; @@ -876,7 +918,103 @@ union PERF_TALER_MINTDB_CMD_Details * The refresh session hash */ const char *label_hash; + + /** + * The new coin denomination + */ + const char *label_denom; } insert_refresh_order; + + /** + * Data requiered for the #PERF_TALER_MINTDB_CMD_GET_REFRESH_ORDER command + */ + struct PERF_TALER_MINTDB_CMD_getRefreshOrderDetails + { + /** + * The session hash + */ + const char *label_hash; + + } get_refresh_order; + + /** + * Data requiered for the #PERF_TALER_MINTDB_CMD_INSERT_REFRESH_COMMIT_COIN command + */ + struct PERF_TALER_MINTDB_CMD_insertRefreshCommitCoinDetails + { + /** + * The refresh session hash + */ + const char *label_hash; + } insert_refresh_commit_coin; + + /** + * Data requiered for the #PERF_TALER_MINTDB_CMD_INSERT_REFRESH_COMMIT_LINK command + */ + struct PERF_TALER_MINTDB_CMD_insertRefreshCommitLinkDetails + { + /** + * The refresh session hash + */ + const char *label_hash; + + } insert_refresh_commit_link; + + /** + * Data requiered by the #PERF_TALER_MINTDB_CMD_GET_REFRESH_COMMIT_LINK command + */ + struct PERF_TALER_MINTB_CMD_getRefreshCommitLinkDetails + { + /** + * The refresh session hash + */ + const char *label_hash; + } get_refresh_commit_link; + + /** + * Data requiered for the #PERF_TALER_MINTDB_CMD_GET_MELT_COMMITMENT command + */ + struct PERF_TALER_MINTDB_CMD_getMeltCommitmentDaetails + { + /** + * The refresh session hash + */ + const char *label_hash; + } get_melt_commitment; + + /** + * Data requiered by the #PERF_TALER_MINTDB_CMD_INSERT_REFRESH_OUT command + */ + struct PERF_TALER_MINTDB_CMD_insertRefreshOutDetails + { + /** + * The refresh session hash + */ + const char *label_hash; + } insert_refresh_out; + + /** + * Data requiered by the #PERF_TALER_MINTDB_CMD_GET_LINK_DATA_LIST command + */ + struct PERF_TALER_MINTDB_CMD_getLinkDataListDetails + { + /** + * The refresh session hash + */ + const char *label_hash; + } get_link_datat_list; + + /** + * Data requiered by the #PERF_TALER_MINTDB_CMD_GET_TRANSFER command + */ + struct PERF_TALER_MINTDB_CMD_getTransferDetails + { + /** + * The refresh session hash + */ + const char *label_hash; + } get_transfer; + }; @@ -908,6 +1046,7 @@ struct PERF_TALER_MINTDB_Cmd /** + * Run a benchmark * * @param benchmark_name the name of the benchmark, displayed in the logs * @param configuration_file path to the taler configuration file to use