summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFournier Nicolas <nicolas.fournier@ensta-paristech.fr>2015-07-09 10:46:33 +0200
committerFournier Nicolas <nicolas.fournier@ensta-paristech.fr>2015-07-09 10:46:33 +0200
commit03452e65804c4f5903ee3d1b0bf6b91442647bd7 (patch)
tree008316d237eec427b9848728e7d05e827f2dff52
parent155d13e417a394e2d16a01578d59e26de4f1ab1d (diff)
downloadexchange-03452e65804c4f5903ee3d1b0bf6b91442647bd7.tar.gz
exchange-03452e65804c4f5903ee3d1b0bf6b91442647bd7.tar.bz2
exchange-03452e65804c4f5903ee3d1b0bf6b91442647bd7.zip
Added new init function
-rw-r--r--src/mintdb/perf_taler_mintdb_init.c129
-rw-r--r--src/mintdb/perf_taler_mintdb_init.h40
-rw-r--r--src/mintdb/perf_taler_mintdb_interpreter.c12
3 files changed, 163 insertions, 18 deletions
diff --git a/src/mintdb/perf_taler_mintdb_init.c b/src/mintdb/perf_taler_mintdb_init.c
index be47f76d4..cff27a2b7 100644
--- a/src/mintdb/perf_taler_mintdb_init.c
+++ b/src/mintdb/perf_taler_mintdb_init.c
@@ -98,18 +98,8 @@ PERF_TALER_MINTDB_denomination_copy (const struct TALER_MINTDB_DenominationKeyIs
GNUNET_assert (NULL !=
(copy = GNUNET_new (struct TALER_MINTDB_DenominationKeyIssueInformation)));
*copy = *dki;
- {
- char *buffer = NULL;
- int size;
- GNUNET_assert (0 <
- (size = GNUNET_CRYPTO_rsa_private_key_encode (
- dki->denom_priv.rsa_private_key,
- &buffer)));
- GNUNET_assert (NULL !=
- (copy->denom_priv.rsa_private_key =
- GNUNET_CRYPTO_rsa_private_key_decode(buffer, size)));
- GNUNET_free (buffer);
- }
+ copy->denom_priv.rsa_private_key =
+ GNUNET_CRYPTO_rsa_private_key_dup (dki->denom_priv.rsa_private_key);
GNUNET_assert (NULL !=
(copy->denom_pub.rsa_public_key =
GNUNET_CRYPTO_rsa_public_key_dup (dki->denom_pub.rsa_public_key)));
@@ -128,7 +118,6 @@ PERF_TALER_MINTDB_denomination_free (struct TALER_MINTDB_DenominationKeyIssueInf
return GNUNET_OK;
GNUNET_CRYPTO_rsa_private_key_free (dki->denom_priv.rsa_private_key);
GNUNET_CRYPTO_rsa_public_key_free (dki->denom_pub.rsa_public_key);
- GNUNET_free (dki);
return GNUNET_OK;
}
@@ -172,6 +161,7 @@ PERF_TALER_MINTDB_reserve_copy (const struct TALER_MINTDB_Reserve *reserve)
return copy;
}
+
/**
* Free memory of a reserve
* @param reserve pointer to the structure to be freed
@@ -181,7 +171,6 @@ PERF_TALER_MINTDB_reserve_free (struct TALER_MINTDB_Reserve *reserve)
{
if (NULL == reserve)
return GNUNET_OK;
- GNUNET_free (reserve);
return GNUNET_OK;
}
@@ -330,7 +319,6 @@ PERF_TALER_MINTDB_deposit_free (struct TALER_MINTDB_Deposit *deposit)
GNUNET_CRYPTO_rsa_public_key_free (deposit->coin.denom_pub.rsa_public_key);
GNUNET_CRYPTO_rsa_signature_free (deposit->coin.denom_sig.rsa_signature);
json_decref (deposit->wire);
- GNUNET_free (deposit);
return GNUNET_OK;
}
@@ -440,6 +428,7 @@ PERF_TALER_MINTDB_collectable_blindcoin_copy (const struct TALER_MINTDB_Collecta
return copy;
}
+
/**
* Liberate memory of @a coin
* @param coin pointer to the structure to free
@@ -452,7 +441,6 @@ PERF_TALER_MINTDB_collectable_blindcoin_free (struct TALER_MINTDB_CollectableBli
GNUNET_CRYPTO_rsa_signature_free (coin->sig.rsa_signature);
GNUNET_CRYPTO_rsa_public_key_free (coin->denom_pub.rsa_public_key);
- GNUNET_free (coin);
return GNUNET_OK;
}
@@ -476,12 +464,25 @@ PERF_TALER_MINTDB_refresh_session_init ()
/**
+ * @return #GNUNET_OK if the copy was successful, #GNUNET_SYSERR if it wasn't
+ */
+int
+PERF_TALER_MINTDB_refresh_session_copy (struct TALER_MINTDB_RefreshSession *session,
+ struct TALER_MINTDB_RefreshSession *copy)
+{
+ *copy = *session;
+ return GNUNET_OK;
+}
+
+
+/**
* Free a refresh session
*/
int
PERF_TALER_MINTDB_refresh_session_free (struct TALER_MINTDB_RefreshSession *refresh_session)
{
- GNUNET_free (refresh_session);
+ if (NULL == refresh_session)
+ return GNUNET_OK;
return GNUNET_OK;
}
@@ -514,14 +515,106 @@ PERF_TALER_MINTDB_coin_public_info_init ()
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);
- GNUNET_free (cpi);
+ return GNUNET_OK;
+}
+
+/**
+ * Create a melt operation
+ *
+ * @param session the refresh session
+ * @param dki the denomination the melted coin uses
+ * @return a pointer to a #TALER_MINTDB_RefreshMelt
+ */
+struct TALER_MINTDB_RefreshMelt *
+PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
+ struct TALER_MINTDB_DenominationKeyIssueInformation *dki)
+{
+ struct TALER_MINTDB_RefreshMelt *melt;
+ struct GNUNET_CRYPTO_EddsaPrivateKey *coin_key;
+ struct TALER_CoinPublicInfo cpi;
+ struct TALER_CoinSpendSignatureP coin_spent;
+ struct TALER_Amount amount;
+ 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 GNUNET_CRYPTO_EccSignaturePurpose purpose;
+ struct GNUNET_HashCode session;
+ } to_sign;
+
+ to_sign.purpose.purpose = GNUNET_SIGNATURE_PURPOSE_TEST;
+ to_sign.purpose.size = htonl (sizeof (to_sign));
+ to_sign.session = *session;
+ GNUNET_CRYPTO_eddsa_sign (coin_key,
+ &to_sign.purpose,
+ &coin_spent.eddsa_signature);
+ }
+ GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":10.0",
+ &amount));
+ GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":0.1",
+ &amount_with_fee));
+ melt = GNUNET_new (struct TALER_MINTDB_RefreshMelt);
+ melt->coin = cpi;
+ melt->coin_sig = coin_spent;
+ melt->session_hash = *session;
+ melt->amount_with_fee = amount;
+ melt->melt_fee = amount_with_fee;
+
+ GNUNET_free (coin_key);
+ return melt;
+}
+
+
+/**
+ * Copies the internals of a #TALER_MINTDB_RefreshMelt
+ *
+ * @param melt the refresh melt to copy
+ * @return an copy of @ melt
+ */
+struct TALER_MINTDB_RefreshMelt *
+PERF_TALER_MINTDB_refresh_melt_copy (const struct TALER_MINTDB_RefreshMelt *melt)
+{
+ struct TALER_MINTDB_RefreshMelt *copy;
+
+ copy = GNUNET_new (struct TALER_MINTDB_RefreshMelt);
+ *copy = *melt;
+ GNUNET_assert (NULL !=
+ (copy->coin.denom_sig.rsa_signature =
+ GNUNET_CRYPTO_rsa_signature_dup (melt->coin.denom_sig.rsa_signature)));
+
+ return copy;
+}
+
+
+/**
+ * Free the internal memory of a #TALER_MINTDB_RefreshMelt
+ *
+ * @param melt the #TALER_MINTDB_RefreshMelt to free
+ * @return #GNUNET_OK if the operation was successful, #GNUNET_SYSERROR
+ */
+int
+PERF_TALER_MINTDB_refresh_melt_free (struct TALER_MINTDB_RefreshMelt *melt)
+{
+ GNUNET_CRYPTO_rsa_signature_free (melt->coin.denom_sig.rsa_signature);
return GNUNET_OK;
}
diff --git a/src/mintdb/perf_taler_mintdb_init.h b/src/mintdb/perf_taler_mintdb_init.h
index 8c49d1a96..75bb9250c 100644
--- a/src/mintdb/perf_taler_mintdb_init.h
+++ b/src/mintdb/perf_taler_mintdb_init.h
@@ -138,6 +138,38 @@ PERF_TALER_MINTDB_collectable_blindcoin_free (
/**
+ * Create a melt operation
+ *
+ * @param session the refresh session
+ * @param dki the denomination the melted coin uses
+ * @return a pointer to a #TALER_MINTDB_RefreshMelt
+ */
+struct TALER_MINTDB_RefreshMelt *
+PERF_TALER_MINTDB_refresh_melt_init (struct GNUNET_HashCode *session,
+ struct TALER_MINTDB_DenominationKeyIssueInformation *dki);
+
+
+/**
+ * Copies the internals of a #TALER_MINTDB_RefreshMelt
+ *
+ * @param melt the refresh melt to copy
+ * @return an copy of @ melt
+ */
+struct TALER_MINTDB_RefreshMelt *
+PERF_TALER_MINTDB_refresh_melt_copy (const struct TALER_MINTDB_RefreshMelt *melt);
+
+
+/**
+ * Free the internal memory of a #TALER_MINTDB_RefreshMelt
+ *
+ * @param melt the #TALER_MINTDB_RefreshMelt to free
+ * @return #GNUNET_OK if the operation was successful, #GNUNET_SYSERROR
+ */
+int
+PERF_TALER_MINTDB_refresh_melt_free (struct TALER_MINTDB_RefreshMelt *melt)
+
+
+/**
* Generate a random CoinPublicInfo
*/
struct TALER_CoinPublicInfo *
@@ -158,6 +190,14 @@ PERF_TALER_MINTDB_refresh_session_init (void);
/**
+ * @return #GNUNET_OK if the copy was successful, #GNUNET_SYSERR if it wasn't
+ */
+int
+PERF_TALER_MINTDB_refresh_session_copy (struct TALER_MINTDB_RefreshSession *session,
+ struct TALER_MINTDB_RefreshSession *copy)
+
+
+/**
* Frees memory of a refresh_session
*/
int
diff --git a/src/mintdb/perf_taler_mintdb_interpreter.c b/src/mintdb/perf_taler_mintdb_interpreter.c
index 0585d16a7..4865e9c2f 100644
--- a/src/mintdb/perf_taler_mintdb_interpreter.c
+++ b/src/mintdb/perf_taler_mintdb_interpreter.c
@@ -62,22 +62,34 @@ data_free (struct PERF_TALER_MINTDB_Data *data)
switch (data->type)
{
case PERF_TALER_MINTDB_DEPOSIT:
+ if (NULL == data->data.deposit)
+ return;
PERF_TALER_MINTDB_deposit_free (data->data.deposit);
+ GNUNET_free (data->data.deposit);
data->data.deposit = NULL;
return;
case PERF_TALER_MINTDB_BLINDCOIN:
+ if (NULL == data->data.blindcoin)
+ return;
PERF_TALER_MINTDB_collectable_blindcoin_free (data->data.blindcoin);
+ GNUNET_free (data->data.blindcoin);
data->data.blindcoin = NULL;
return;
case PERF_TALER_MINTDB_RESERVE:
+ if (NULL == data->data.reserve)
+ return;
PERF_TALER_MINTDB_reserve_free (data->data.reserve);
+ GNUNET_free (data->data.reserve);
data->data.reserve = NULL;
return;
case PERF_TALER_MINTDB_DENOMINATION_INFO:
+ if (NULL == data->data.dki)
+ return;
PERF_TALER_MINTDB_denomination_free (data->data.dki);
+ GNUNET_free (data->data.dki);
data->data.dki = NULL;
return;