summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFournier Nicolas <nicolas.fournier@ensta-paristech.fr>2015-07-23 16:10:49 +0200
committerFournier Nicolas <nicolas.fournier@ensta-paristech.fr>2015-07-23 16:10:49 +0200
commit663fa898f5a94c19e702a1263af85dd7d84f31f6 (patch)
tree47fc8c0d4ff0daf1da05b026bca094199cc08c9f /src
parent00fb066842c8413aa343777eb320c6d011b9080a (diff)
downloadexchange-663fa898f5a94c19e702a1263af85dd7d84f31f6.tar.gz
exchange-663fa898f5a94c19e702a1263af85dd7d84f31f6.tar.bz2
exchange-663fa898f5a94c19e702a1263af85dd7d84f31f6.zip
Initial work for more commands
Diffstat (limited to 'src')
-rw-r--r--src/mintdb/perf_taler_mintdb_init.c50
-rw-r--r--src/mintdb/perf_taler_mintdb_interpreter.c87
-rw-r--r--src/mintdb/perf_taler_mintdb_interpreter.h151
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
@@ -485,47 +485,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
*
* @param session the refresh session
@@ -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
@@ -322,6 +322,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
*
* @exposes #PERF_TALER_MINTDB_COIN
@@ -367,11 +382,27 @@
* @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
*/
enum PERF_TALER_MINTDB_Type
@@ -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,
+
+ /**
+ * 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_INSERT_REFRESH_OUT
+ 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