updating DB schema to profit from new KDF-based refresh variant

This commit is contained in:
Christian Grothoff 2016-08-11 23:28:33 +02:00
parent dd724c009d
commit 5a6a3da8e4
8 changed files with 160 additions and 495 deletions

View File

@ -991,7 +991,6 @@ TMH_DB_execute_refresh_melt (struct MHD_Connection *connection,
struct TALER_EXCHANGEDB_RefreshSession refresh_session; struct TALER_EXCHANGEDB_RefreshSession refresh_session;
struct TALER_EXCHANGEDB_Session *session; struct TALER_EXCHANGEDB_Session *session;
int res; int res;
unsigned int i;
if (NULL == (session = TMH_plugin->get_session (TMH_plugin->cls))) if (NULL == (session = TMH_plugin->get_session (TMH_plugin->cls)))
{ {
@ -1064,34 +1063,26 @@ TMH_DB_execute_refresh_melt (struct MHD_Connection *connection,
return TMH_RESPONSE_reply_internal_db_error (connection); return TMH_RESPONSE_reply_internal_db_error (connection);
} }
for (i = 0; i < TALER_CNC_KAPPA; i++) if (GNUNET_OK !=
TMH_plugin->insert_refresh_commit_coins (TMH_plugin->cls,
session,
session_hash,
num_new_denoms,
commit_coin[refresh_session.noreveal_index]))
{ {
if (GNUNET_OK != TMH_plugin->rollback (TMH_plugin->cls,
TMH_plugin->insert_refresh_commit_coins (TMH_plugin->cls, session);
session, return TMH_RESPONSE_reply_internal_db_error (connection);
session_hash,
i,
num_new_denoms,
commit_coin[i]))
{
TMH_plugin->rollback (TMH_plugin->cls,
session);
return TMH_RESPONSE_reply_internal_db_error (connection);
}
} }
for (i = 0; i < TALER_CNC_KAPPA; i++) if (GNUNET_OK !=
TMH_plugin->insert_refresh_transfer_public_key (TMH_plugin->cls,
session,
session_hash,
&transfer_pubs[refresh_session.noreveal_index]))
{ {
if (GNUNET_OK != TMH_plugin->rollback (TMH_plugin->cls,
TMH_plugin->insert_refresh_transfer_public_key (TMH_plugin->cls, session);
session, return TMH_RESPONSE_reply_internal_db_error (connection);
session_hash,
i,
&transfer_pubs[i]))
{
TMH_plugin->rollback (TMH_plugin->cls,
session);
return TMH_RESPONSE_reply_internal_db_error (connection);
}
} }
COMMIT_TRANSACTION (session, connection); COMMIT_TRANSACTION (session, connection);
@ -1101,48 +1092,6 @@ TMH_DB_execute_refresh_melt (struct MHD_Connection *connection,
} }
/**
* Send an error response with the details of the original melt
* commitment and the location of the mismatch.
*
* @param connection the MHD connection to handle
* @param session database connection to use
* @param session_hash hash of session to query
* @param rm details about the original melt
* @return #GNUNET_NO if we generated the error message
* #GNUNET_SYSERR if we could not even generate an error message
*/
static int
send_melt_commitment_error (struct MHD_Connection *connection,
struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash,
const struct TALER_EXCHANGEDB_RefreshMelt *rm)
{
struct TALER_EXCHANGEDB_MeltCommitment *mc;
int ret;
mc = TMH_plugin->get_melt_commitment (TMH_plugin->cls,
session,
session_hash);
if (NULL == mc)
{
GNUNET_break (0);
return (MHD_YES ==
TMH_RESPONSE_reply_internal_error (connection,
"Melt commitment assembly"))
? GNUNET_NO : GNUNET_SYSERR;
}
ret = (MHD_YES ==
TMH_RESPONSE_reply_refresh_reveal_missmatch (connection,
rm,
mc))
? GNUNET_NO : GNUNET_SYSERR;
TMH_plugin->free_melt_commitment (TMH_plugin->cls,
mc);
return ret;
}
/** /**
* Check if the given @a transfer_privs correspond to an honest * Check if the given @a transfer_privs correspond to an honest
* commitment for the given session. * commitment for the given session.
@ -1368,6 +1317,8 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
unsigned int off; unsigned int off;
struct GNUNET_HashContext *hash_context; struct GNUNET_HashContext *hash_context;
struct GNUNET_HashCode sh_check; struct GNUNET_HashCode sh_check;
int ret;
struct TALER_TransferPublicKeyP gamma_tp;
if (NULL == (session = TMH_plugin->get_session (TMH_plugin->cls))) if (NULL == (session = TMH_plugin->get_session (TMH_plugin->cls)))
{ {
@ -1382,7 +1333,8 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
if (GNUNET_NO == res) if (GNUNET_NO == res)
return TMH_RESPONSE_reply_arg_invalid (connection, return TMH_RESPONSE_reply_arg_invalid (connection,
"session_hash"); "session_hash");
if (GNUNET_SYSERR == res) if ( (GNUNET_SYSERR == res) ||
(refresh_session.noreveal_index >= TALER_CNC_KAPPA) )
return TMH_RESPONSE_reply_internal_db_error (connection); return TMH_RESPONSE_reply_internal_db_error (connection);
denom_pubs = GNUNET_new_array (refresh_session.num_newcoins, denom_pubs = GNUNET_new_array (refresh_session.num_newcoins,
struct TALER_DenominationPublicKey); struct TALER_DenominationPublicKey);
@ -1406,18 +1358,15 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
off = 0; off = 0;
for (i=0;i<TALER_CNC_KAPPA;i++) for (i=0;i<TALER_CNC_KAPPA;i++)
{ {
struct TALER_TransferPublicKeyP tp;
if (i == refresh_session.noreveal_index) if (i == refresh_session.noreveal_index)
{ {
off = 1; off = 1;
/* obtain tp from db */ /* obtain gamma_tp from db */
if (GNUNET_OK != if (GNUNET_OK !=
TMH_plugin->get_refresh_transfer_public_key (TMH_plugin->cls, TMH_plugin->get_refresh_transfer_public_key (TMH_plugin->cls,
session, session,
session_hash, session_hash,
i, &gamma_tp))
&tp))
{ {
GNUNET_break (0); GNUNET_break (0);
GNUNET_free (denom_pubs); GNUNET_free (denom_pubs);
@ -1427,16 +1376,21 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
return (MHD_YES == TMH_RESPONSE_reply_internal_db_error (connection)) return (MHD_YES == TMH_RESPONSE_reply_internal_db_error (connection))
? GNUNET_NO : GNUNET_SYSERR; ? GNUNET_NO : GNUNET_SYSERR;
} }
GNUNET_CRYPTO_hash_context_read (hash_context,
&gamma_tp,
sizeof (struct TALER_TransferPublicKeyP));
} }
else else
{ {
/* compute tp from private key */ /* compute tp from private key */
struct TALER_TransferPublicKeyP tp;
GNUNET_CRYPTO_ecdhe_key_get_public (&transfer_privs[i - off].ecdhe_priv, GNUNET_CRYPTO_ecdhe_key_get_public (&transfer_privs[i - off].ecdhe_priv,
&tp.ecdhe_pub); &tp.ecdhe_pub);
GNUNET_CRYPTO_hash_context_read (hash_context,
&tp,
sizeof (struct TALER_TransferPublicKeyP));
} }
GNUNET_CRYPTO_hash_context_read (hash_context,
&tp,
sizeof (struct TALER_TransferPublicKeyP));
} }
/* next, add all of the hashes from the denomination keys to the /* next, add all of the hashes from the denomination keys to the
@ -1501,7 +1455,6 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
TMH_plugin->get_refresh_commit_coins (TMH_plugin->cls, TMH_plugin->get_refresh_commit_coins (TMH_plugin->cls,
session, session,
session_hash, session_hash,
i,
refresh_session.num_newcoins, refresh_session.num_newcoins,
commit_coins)) commit_coins))
{ {
@ -1534,7 +1487,10 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
for (j=0;j<refresh_session.num_newcoins;j++) for (j=0;j<refresh_session.num_newcoins;j++)
{
GNUNET_CRYPTO_rsa_public_key_free (denom_pubs[j].rsa_public_key); GNUNET_CRYPTO_rsa_public_key_free (denom_pubs[j].rsa_public_key);
GNUNET_free (commit_coins[j].coin_ev);
}
GNUNET_free (commit_coins); GNUNET_free (commit_coins);
GNUNET_free (denom_pubs); GNUNET_free (denom_pubs);
GNUNET_CRYPTO_rsa_signature_free (refresh_session.melt.coin.denom_sig.rsa_signature); GNUNET_CRYPTO_rsa_signature_free (refresh_session.melt.coin.denom_sig.rsa_signature);
@ -1552,16 +1508,24 @@ TMH_DB_execute_refresh_reveal (struct MHD_Connection *connection,
sizeof (struct GNUNET_HashCode))) sizeof (struct GNUNET_HashCode)))
{ {
GNUNET_break_op (0); GNUNET_break_op (0);
ret = (MHD_YES ==
TMH_RESPONSE_reply_refresh_reveal_missmatch (connection,
&refresh_session,
commit_coins,
denom_pubs,
&gamma_tp))
? GNUNET_NO : GNUNET_SYSERR;
for (j=0;j<refresh_session.num_newcoins;j++) for (j=0;j<refresh_session.num_newcoins;j++)
{
GNUNET_free (commit_coins[j].coin_ev);
GNUNET_CRYPTO_rsa_public_key_free (denom_pubs[j].rsa_public_key); GNUNET_CRYPTO_rsa_public_key_free (denom_pubs[j].rsa_public_key);
}
GNUNET_free (commit_coins);
GNUNET_free (denom_pubs); GNUNET_free (denom_pubs);
GNUNET_CRYPTO_rsa_signature_free (refresh_session.melt.coin.denom_sig.rsa_signature); GNUNET_CRYPTO_rsa_signature_free (refresh_session.melt.coin.denom_sig.rsa_signature);
GNUNET_CRYPTO_rsa_public_key_free (refresh_session.melt.coin.denom_pub.rsa_public_key); GNUNET_CRYPTO_rsa_public_key_free (refresh_session.melt.coin.denom_pub.rsa_public_key);
return send_melt_commitment_error (connection, return ret;
session,
session_hash,
&refresh_session.melt);
} }
/* Client request OK, start transaction */ /* Client request OK, start transaction */

View File

@ -972,92 +972,55 @@ TMH_RESPONSE_reply_refresh_reveal_success (struct MHD_Connection *connection,
* revealed value(s) do not match the original commitment. * revealed value(s) do not match the original commitment.
* *
* @param connection the connection to send the response to * @param connection the connection to send the response to
* @param rm details about the original melt * @param session info about session
* @param mc all information about the original commitment * @param commit_coins array of @a num_newcoins committed envelopes at offset @a gamma
* @param denom_pubs array of @a num_newcoins denomination keys for the new coins
* @param gamma_tp transfer public key at offset @a gamma
* @return a MHD result code * @return a MHD result code
*/ */
int int
TMH_RESPONSE_reply_refresh_reveal_missmatch (struct MHD_Connection *connection, TMH_RESPONSE_reply_refresh_reveal_missmatch (struct MHD_Connection *connection,
const struct TALER_EXCHANGEDB_RefreshMelt *rm, const struct TALER_EXCHANGEDB_RefreshSession *session,
const struct TALER_EXCHANGEDB_MeltCommitment *mc) const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins,
const struct TALER_DenominationPublicKey *denom_pubs,
const struct TALER_TransferPublicKeyP *gamma_tp)
{ {
json_t *info_new; json_t *info_new;
json_t *info_commit; json_t *info_commit_k;
json_t *info_links;
unsigned int i; unsigned int i;
unsigned int k;
json_t *rm_json;
rm_json = json_object ();
json_object_set_new (rm_json,
"coin_sig",
GNUNET_JSON_from_data_auto (&rm->coin_sig));
json_object_set_new (rm_json,
"coin_pub",
GNUNET_JSON_from_data_auto (&rm->coin.coin_pub));
json_object_set_new (rm_json,
"melt_amount_with_fee",
TALER_JSON_from_amount (&rm->amount_with_fee));
json_object_set_new (rm_json,
"melt_fee",
TALER_JSON_from_amount (&rm->melt_fee));
info_new = json_array (); info_new = json_array ();
for (i=0;i<mc->num_newcoins;i++) info_commit_k = json_array ();
for (i=0;i<session->num_newcoins;i++)
{ {
const struct TALER_DenominationPublicKey *pk; const struct TALER_EXCHANGEDB_RefreshCommitCoin *cc;
json_t *cc_json;
pk = &mc->denom_pubs[i];
GNUNET_assert (0 == GNUNET_assert (0 ==
json_array_append_new (info_new, json_array_append_new (info_new,
GNUNET_JSON_from_rsa_public_key (pk->rsa_public_key))); GNUNET_JSON_from_rsa_public_key (denom_pubs[i].rsa_public_key)));
} cc = &commit_coins[i];
info_commit = json_array (); cc_json = json_pack ("{s:o}",
info_links = json_array (); "coin_ev",
for (k=0;k<TALER_CNC_KAPPA;k++) GNUNET_JSON_from_data (cc->coin_ev,
{ cc->coin_ev_size));
json_t *info_commit_k;
json_t *info_link_k;
const struct TALER_TransferPublicKeyP *transfer_pub;
info_commit_k = json_array ();
for (i=0;i<mc->num_newcoins;i++)
{
const struct TALER_EXCHANGEDB_RefreshCommitCoin *cc;
json_t *cc_json;
cc = &mc->commit_coins[k][i];
cc_json = json_object ();
json_object_set_new (cc_json,
"coin_ev",
GNUNET_JSON_from_data (cc->coin_ev,
cc->coin_ev_size));
GNUNET_assert (0 ==
json_array_append_new (info_commit_k,
cc_json));
}
GNUNET_assert (0 == GNUNET_assert (0 ==
json_array_append_new (info_commit, json_array_append_new (info_commit_k,
info_commit_k)); cc_json));
info_link_k = json_object ();
transfer_pub = &mc->transfer_pubs[k];
json_object_set_new (info_link_k,
"transfer_pub",
GNUNET_JSON_from_data_auto (transfer_pub));
GNUNET_assert (0 ==
json_array_append_new (info_links,
info_link_k));
} }
return TMH_RESPONSE_reply_json_pack (connection, return TMH_RESPONSE_reply_json_pack (connection,
MHD_HTTP_CONFLICT, MHD_HTTP_CONFLICT,
"{s:s, s:o, s:o, s:o, s:o}", "{s:s, s:o, s:o, s:o, s:o, s:o, s:o, s:o, s:i}",
"error", "commitment violation", "error", "commitment violation",
"refresh_melt_info", rm_json, "coin_sig", GNUNET_JSON_from_data_auto (&session->melt.coin_sig),
"coin_pub", GNUNET_JSON_from_data_auto (&session->melt.coin.coin_pub),
"melt_amount_with_fee", TALER_JSON_from_amount (&session->melt.amount_with_fee),
"melt_fee", TALER_JSON_from_amount (&session->melt.melt_fee),
"newcoin_infos", info_new, "newcoin_infos", info_new,
"commit_infos", info_commit, "commit_infos", info_commit_k,
"link_infos", info_links); "gamma_tp", GNUNET_JSON_from_data_auto (gamma_tp),
"gamma", (int) session->noreveal_index);
} }

View File

@ -492,14 +492,18 @@ TMH_RESPONSE_reply_refresh_reveal_success (struct MHD_Connection *connection,
* revealed value(s) do not match the original commitment. * revealed value(s) do not match the original commitment.
* *
* @param connection the connection to send the response to * @param connection the connection to send the response to
* @param rm details about the original melt * @param session info about session
* @param mc all information about the original commitment * @param commit_coins array of @a num_newcoins committed envelopes at offset @a gamma
* @param denom_pubs array of @a num_newcoins denomination keys for the new coins
* @param gamma_tp transfer public key at offset @a gamma
* @return a MHD result code * @return a MHD result code
*/ */
int int
TMH_RESPONSE_reply_refresh_reveal_missmatch (struct MHD_Connection *connection, TMH_RESPONSE_reply_refresh_reveal_missmatch (struct MHD_Connection *connection,
const struct TALER_EXCHANGEDB_RefreshMelt *rm, const struct TALER_EXCHANGEDB_RefreshSession *session,
const struct TALER_EXCHANGEDB_MeltCommitment *mc); const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins,
const struct TALER_DenominationPublicKey *denom_pubs,
const struct TALER_TransferPublicKeyP *gamma_tp);
/** /**

View File

@ -1620,7 +1620,6 @@ interpret (struct PERF_TALER_EXCHANGEDB_interpreter_state *state)
state->session, state->session,
state->cmd[hash_index].exposed.data.session_hash, state->cmd[hash_index].exposed.data.session_hash,
1, 1,
1,
refresh_commit); refresh_commit);
GNUNET_assert (GNUNET_OK == ret); GNUNET_assert (GNUNET_OK == ret);
} }
@ -1636,7 +1635,6 @@ interpret (struct PERF_TALER_EXCHANGEDB_interpreter_state *state)
state->session, state->session,
state->cmd[hash_index].exposed.data.session_hash, state->cmd[hash_index].exposed.data.session_hash,
1, 1,
1,
&refresh_commit); &refresh_commit);
} }
@ -1656,12 +1654,12 @@ interpret (struct PERF_TALER_EXCHANGEDB_interpreter_state *state)
unsigned int hash_index; unsigned int hash_index;
struct TALER_EXCHANGEDB_RefreshCommitCoin commit_coin; struct TALER_EXCHANGEDB_RefreshCommitCoin commit_coin;
// FIXME: this should go after the public key!
hash_index = state->cmd[state->i].details.get_refresh_commit_link.index_hash; hash_index = state->cmd[state->i].details.get_refresh_commit_link.index_hash;
ret = state->plugin->get_refresh_commit_coins(state->plugin->cls, ret = state->plugin->get_refresh_commit_coins(state->plugin->cls,
state->session, state->session,
state->cmd[hash_index].exposed.data.session_hash, state->cmd[hash_index].exposed.data.session_hash,
1, 1,
1,
&commit_coin); &commit_coin);
GNUNET_assert (GNUNET_SYSERR != ret); GNUNET_assert (GNUNET_SYSERR != ret);
} }

View File

@ -132,40 +132,4 @@ common_free_coin_transaction_list (void *cls,
} }
/**
* Free melt commitment data.
*
* @param cls the @e cls of this struct with the plugin-specific state (unused)
* @param mc data structure to free
*/
static void
common_free_melt_commitment (void *cls,
struct TALER_EXCHANGEDB_MeltCommitment *mc)
{
unsigned int i;
unsigned int k;
if (NULL != mc->denom_pubs)
{
for (i=0;i<mc->num_newcoins;i++)
if (NULL != mc->denom_pubs[i].rsa_public_key)
GNUNET_CRYPTO_rsa_public_key_free (mc->denom_pubs[i].rsa_public_key);
GNUNET_free (mc->denom_pubs);
}
for (k=0;k<TALER_CNC_KAPPA;k++)
{
if (NULL != mc->commit_coins[k])
{
for (i=0;i<mc->num_newcoins;i++)
{
/* NOTE: 'non_null' because this API is used also
internally to clean up the struct on failures! */
GNUNET_free_non_null (mc->commit_coins[k][i].coin_ev);
}
GNUNET_free (mc->commit_coins[k]);
}
}
GNUNET_free (mc);
}
/* end of plugin_exchangedb_common.c */ /* end of plugin_exchangedb_common.c */

View File

@ -386,29 +386,24 @@ postgres_create_tables (void *cls)
as well as the actual link data (the transfer public key and the encrypted as well as the actual link data (the transfer public key and the encrypted
link secret) */ link secret) */
SQLEXEC("CREATE TABLE IF NOT EXISTS refresh_transfer_public_key " SQLEXEC("CREATE TABLE IF NOT EXISTS refresh_transfer_public_key "
"(session_hash BYTEA NOT NULL REFERENCES refresh_sessions (session_hash) ON DELETE CASCADE" "(session_hash BYTEA NOT NULL PRIMARY KEY REFERENCES refresh_sessions (session_hash) ON DELETE CASCADE"
",transfer_pub BYTEA NOT NULL CHECK(LENGTH(transfer_pub)=32)" ",transfer_pub BYTEA NOT NULL CHECK(LENGTH(transfer_pub)=32)"
",cnc_index INT2 NOT NULL"
",UNIQUE (session_hash, cnc_index)"
")"); ")");
SQLEXEC_INDEX("CREATE INDEX refresh_transfer_public_key_index "
"ON refresh_transfer_public_key(session_hash, cnc_index)");
/* Table with the commitments for the new coins that are to be created /* Table with the commitments for the new coins that are to be created
during a melting session. Includes the session, the cut-and-choose during a melting session. Includes the session, the cut-and-choose
index and the index of the new coin, and the envelope of the new index and the index of the new coin, and the envelope of the new
coin to be signed, as well as the encrypted information about the coin to be signed, as well as the encrypted information about the
private key and the blinding factor for the coin (for verification private key and the blinding factor for the coin (for verification
in case this cnc_index is chosen to be revealed) */ in case this newcoin_index is chosen to be revealed) */
SQLEXEC("CREATE TABLE IF NOT EXISTS refresh_commit_coin " SQLEXEC("CREATE TABLE IF NOT EXISTS refresh_commit_coin "
"(session_hash BYTEA NOT NULL REFERENCES refresh_sessions (session_hash) ON DELETE CASCADE" "(session_hash BYTEA NOT NULL REFERENCES refresh_sessions (session_hash) ON DELETE CASCADE"
",cnc_index INT2 NOT NULL"
",newcoin_index INT2 NOT NULL" ",newcoin_index INT2 NOT NULL"
",coin_ev BYTEA NOT NULL" ",coin_ev BYTEA NOT NULL"
",UNIQUE (session_hash, cnc_index, newcoin_index)" ",UNIQUE (session_hash, newcoin_index)"
")"); ")");
SQLEXEC_INDEX("CREATE INDEX refresh_commit_coin_session_hash_index " SQLEXEC_INDEX("CREATE INDEX refresh_commit_coin_session_hash_index "
"ON refresh_commit_coin(session_hash, cnc_index, newcoin_index)"); "ON refresh_commit_coin(session_hash, newcoin_index)");
/* Table with the signatures over coins generated during a refresh /* Table with the signatures over coins generated during a refresh
@ -831,9 +826,8 @@ postgres_prepare (PGconn *db_conn)
"INSERT INTO refresh_transfer_public_key " "INSERT INTO refresh_transfer_public_key "
"(session_hash" "(session_hash"
",transfer_pub" ",transfer_pub"
",cnc_index"
") VALUES " ") VALUES "
"($1, $2, $3);", "($1, $2);",
3, NULL); 3, NULL);
/* Used in #postgres_get_refresh_transfer_public_key() to /* Used in #postgres_get_refresh_transfer_public_key() to
@ -842,20 +836,19 @@ postgres_prepare (PGconn *db_conn)
"SELECT" "SELECT"
" transfer_pub" " transfer_pub"
" FROM refresh_transfer_public_key" " FROM refresh_transfer_public_key"
" WHERE session_hash=$1 AND cnc_index=$2", " WHERE session_hash=$1",
2, NULL); 1, NULL);
/* Used in #postgres_insert_refresh_commit_coins() to /* Used in #postgres_insert_refresh_commit_coins() to
store coin commitments. */ store coin commitments. */
PREPARE ("insert_refresh_commit_coin", PREPARE ("insert_refresh_commit_coin",
"INSERT INTO refresh_commit_coin " "INSERT INTO refresh_commit_coin "
"(session_hash" "(session_hash"
",cnc_index"
",newcoin_index" ",newcoin_index"
",coin_ev" ",coin_ev"
") VALUES " ") VALUES "
"($1, $2, $3, $4);", "($1, $2, $3);",
4, NULL); 3, NULL);
/* Used in #postgres_get_refresh_commit_coins() to /* Used in #postgres_get_refresh_commit_coins() to
retrieve the original coin envelopes, to either be retrieve the original coin envelopes, to either be
@ -864,8 +857,8 @@ postgres_prepare (PGconn *db_conn)
"SELECT" "SELECT"
" coin_ev" " coin_ev"
" FROM refresh_commit_coin" " FROM refresh_commit_coin"
" WHERE session_hash=$1 AND cnc_index=$2 AND newcoin_index=$3", " WHERE session_hash=$1 AND newcoin_index=$2",
3, NULL); 2, NULL);
/* Store information about a /deposit the exchange is to execute. /* Store information about a /deposit the exchange is to execute.
Used in #postgres_insert_deposit(). */ Used in #postgres_insert_deposit(). */
@ -1081,8 +1074,7 @@ postgres_prepare (PGconn *db_conn)
" JOIN refresh_out rc USING (session_hash)" " JOIN refresh_out rc USING (session_hash)"
" WHERE ro.session_hash=$1" " WHERE ro.session_hash=$1"
" AND ro.newcoin_index=rcc.newcoin_index" " AND ro.newcoin_index=rcc.newcoin_index"
" AND ro.newcoin_index=rc.newcoin_index" " AND ro.newcoin_index=rc.newcoin_index",
" AND rcc.cnc_index=rs.noreveal_index",
1, NULL); 1, NULL);
/* Used in #postgres_get_transfer(). Given the public key of a /* Used in #postgres_get_transfer(). Given the public key of a
@ -1096,8 +1088,7 @@ postgres_prepare (PGconn *db_conn)
"SELECT transfer_pub,session_hash" "SELECT transfer_pub,session_hash"
" FROM refresh_sessions rs" " FROM refresh_sessions rs"
" JOIN refresh_transfer_public_key rcl USING (session_hash)" " JOIN refresh_transfer_public_key rcl USING (session_hash)"
" WHERE rs.old_coin_pub=$1" " WHERE rs.old_coin_pub=$1",
" AND rcl.cnc_index=rs.noreveal_index",
1, NULL); 1, NULL);
/* Used in #postgres_lookup_wire_transfer */ /* Used in #postgres_lookup_wire_transfer */
@ -3045,7 +3036,6 @@ postgres_get_refresh_order (void *cls,
* @param cls the `struct PostgresClosure` with the plugin-specific state * @param cls the `struct PostgresClosure` with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose index (1st dimension)
* @param num_newcoins coin index size of the @a commit_coins array * @param num_newcoins coin index size of the @a commit_coins array
* @param commit_coins array of coin commitments to store * @param commit_coins array of coin commitments to store
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
@ -3055,7 +3045,6 @@ static int
postgres_insert_refresh_commit_coins (void *cls, postgres_insert_refresh_commit_coins (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
uint16_t num_newcoins, uint16_t num_newcoins,
const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins) const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins)
{ {
@ -3069,7 +3058,6 @@ postgres_insert_refresh_commit_coins (void *cls,
{ {
struct GNUNET_PQ_QueryParam params[] = { struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (session_hash), GNUNET_PQ_query_param_auto_from_type (session_hash),
GNUNET_PQ_query_param_uint16 (&cnc_index),
GNUNET_PQ_query_param_uint16 (&coin_off), GNUNET_PQ_query_param_uint16 (&coin_off),
GNUNET_PQ_query_param_fixed_size (commit_coins[i].coin_ev, GNUNET_PQ_query_param_fixed_size (commit_coins[i].coin_ev,
commit_coins[i].coin_ev_size), commit_coins[i].coin_ev_size),
@ -3128,7 +3116,6 @@ postgres_free_refresh_commit_coins (void *cls,
* @param cls the `struct PostgresClosure` with the plugin-specific state * @param cls the `struct PostgresClosure` with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index set index (1st dimension)
* @param num_newcoins size of the @a commit_coins array * @param num_newcoins size of the @a commit_coins array
* @param[out] commit_coins array of coin commitments to return * @param[out] commit_coins array of coin commitments to return
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
@ -3139,7 +3126,6 @@ static int
postgres_get_refresh_commit_coins (void *cls, postgres_get_refresh_commit_coins (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
uint16_t num_newcoins, uint16_t num_newcoins,
struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins) struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins)
{ {
@ -3150,7 +3136,6 @@ postgres_get_refresh_commit_coins (void *cls,
uint16_t newcoin_off = (uint16_t) i; uint16_t newcoin_off = (uint16_t) i;
struct GNUNET_PQ_QueryParam params[] = { struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (session_hash), GNUNET_PQ_query_param_auto_from_type (session_hash),
GNUNET_PQ_query_param_uint16 (&cnc_index),
GNUNET_PQ_query_param_uint16 (&newcoin_off), GNUNET_PQ_query_param_uint16 (&newcoin_off),
GNUNET_PQ_query_param_end GNUNET_PQ_query_param_end
}; };
@ -3205,7 +3190,6 @@ postgres_get_refresh_commit_coins (void *cls,
* @param cls the `struct PostgresClosure` with the plugin-specific state * @param cls the `struct PostgresClosure` with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose index (1st dimension)
* @param tp transfer public key to store * @param tp transfer public key to store
* @return #GNUNET_SYSERR on internal error, #GNUNET_OK on success * @return #GNUNET_SYSERR on internal error, #GNUNET_OK on success
*/ */
@ -3213,13 +3197,11 @@ static int
postgres_insert_refresh_transfer_public_key (void *cls, postgres_insert_refresh_transfer_public_key (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
const struct TALER_TransferPublicKeyP *tp) const struct TALER_TransferPublicKeyP *tp)
{ {
struct GNUNET_PQ_QueryParam params[] = { struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (session_hash), GNUNET_PQ_query_param_auto_from_type (session_hash),
GNUNET_PQ_query_param_auto_from_type (tp), GNUNET_PQ_query_param_auto_from_type (tp),
GNUNET_PQ_query_param_uint16 (&cnc_index),
GNUNET_PQ_query_param_end GNUNET_PQ_query_param_end
}; };
@ -3252,7 +3234,6 @@ postgres_insert_refresh_transfer_public_key (void *cls,
* @param cls the `struct PostgresClosure` with the plugin-specific state * @param cls the `struct PostgresClosure` with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose index (1st dimension)
* @param[out] tp information to return * @param[out] tp information to return
* @return #GNUNET_SYSERR on internal error, * @return #GNUNET_SYSERR on internal error,
* #GNUNET_NO if commitment was not found * #GNUNET_NO if commitment was not found
@ -3262,12 +3243,10 @@ static int
postgres_get_refresh_transfer_public_key (void *cls, postgres_get_refresh_transfer_public_key (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
struct TALER_TransferPublicKeyP *tp) struct TALER_TransferPublicKeyP *tp)
{ {
struct GNUNET_PQ_QueryParam params[] = { struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (session_hash), GNUNET_PQ_query_param_auto_from_type (session_hash),
GNUNET_PQ_query_param_uint16 (&cnc_index),
GNUNET_PQ_query_param_end GNUNET_PQ_query_param_end
}; };
PGresult *result; PGresult *result;
@ -3305,83 +3284,6 @@ postgres_get_refresh_transfer_public_key (void *cls,
} }
/**
* Get all of the information from the given melt commit operation.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session database connection to use
* @param session_hash hash to identify refresh session
* @return NULL if the @a session_hash does not correspond to any known melt
* operation
*/
static struct TALER_EXCHANGEDB_MeltCommitment *
postgres_get_melt_commitment (void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash)
{
struct TALER_EXCHANGEDB_RefreshSession rs;
struct TALER_EXCHANGEDB_MeltCommitment *mc;
uint16_t cnc_index;
if (GNUNET_OK !=
postgres_get_refresh_session (cls,
session,
session_hash,
&rs))
return NULL;
/* we don't care about most of 'rs' */
GNUNET_CRYPTO_rsa_public_key_free (rs.melt.coin.denom_pub.rsa_public_key);
GNUNET_CRYPTO_rsa_signature_free (rs.melt.coin.denom_sig.rsa_signature);
mc = GNUNET_new (struct TALER_EXCHANGEDB_MeltCommitment);
mc->num_newcoins = rs.num_newcoins;
mc->denom_pubs = GNUNET_new_array (mc->num_newcoins,
struct TALER_DenominationPublicKey);
if (GNUNET_OK !=
postgres_get_refresh_order (cls,
session,
session_hash,
mc->num_newcoins,
mc->denom_pubs))
{
GNUNET_break (0);
goto cleanup;
}
for (cnc_index=0;cnc_index<TALER_CNC_KAPPA;cnc_index++)
{
mc->commit_coins[cnc_index]
= GNUNET_new_array (mc->num_newcoins,
struct TALER_EXCHANGEDB_RefreshCommitCoin);
if (GNUNET_OK !=
postgres_get_refresh_commit_coins (cls,
session,
session_hash,
cnc_index,
mc->num_newcoins,
mc->commit_coins[cnc_index]))
{
GNUNET_break (0);
goto cleanup;
}
if (GNUNET_OK !=
postgres_get_refresh_transfer_public_key (cls,
session,
session_hash,
cnc_index,
&mc->transfer_pubs[cnc_index]))
{
GNUNET_break (0);
goto cleanup;
}
}
return mc;
cleanup:
common_free_melt_commitment (cls, mc);
GNUNET_break (0);
return NULL;
}
/** /**
* Insert signature of a new coin generated during refresh into * Insert signature of a new coin generated during refresh into
* the database indexed by the refresh session and the index * the database indexed by the refresh session and the index
@ -4410,8 +4312,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
plugin->free_refresh_commit_coins = &postgres_free_refresh_commit_coins; plugin->free_refresh_commit_coins = &postgres_free_refresh_commit_coins;
plugin->insert_refresh_transfer_public_key = &postgres_insert_refresh_transfer_public_key; plugin->insert_refresh_transfer_public_key = &postgres_insert_refresh_transfer_public_key;
plugin->get_refresh_transfer_public_key = &postgres_get_refresh_transfer_public_key; plugin->get_refresh_transfer_public_key = &postgres_get_refresh_transfer_public_key;
plugin->get_melt_commitment = &postgres_get_melt_commitment;
plugin->free_melt_commitment = &common_free_melt_commitment;
plugin->insert_refresh_out = &postgres_insert_refresh_out; plugin->insert_refresh_out = &postgres_insert_refresh_out;
plugin->get_link_data_list = &postgres_get_link_data_list; plugin->get_link_data_list = &postgres_get_link_data_list;
plugin->free_link_data_list = &common_free_link_data_list; plugin->free_link_data_list = &common_free_link_data_list;

View File

@ -297,28 +297,6 @@ static struct TALER_Amount fee_refund;
static struct TALER_Amount amount_with_fee; static struct TALER_Amount amount_with_fee;
/**
* Compare two coin commitments.
*
* @param rc1 first commitment
* @param rc2 second commitment
* @return 0 if they are equal
*/
static int
commit_coin_cmp (struct TALER_EXCHANGEDB_RefreshCommitCoin *rc1,
struct TALER_EXCHANGEDB_RefreshCommitCoin *rc2)
{
FAILIF (rc1->coin_ev_size != rc2->coin_ev_size);
FAILIF (0 != memcmp (rc1->coin_ev,
rc2->coin_ev,
rc2->coin_ev_size));
return 0;
drop:
GNUNET_break (0);
return 1;
}
/** /**
* Number of newly minted coins to use in the test. * Number of newly minted coins to use in the test.
*/ */
@ -330,7 +308,7 @@ commit_coin_cmp (struct TALER_EXCHANGEDB_RefreshCommitCoin *rc1,
#define MELT_NOREVEAL_INDEX 1 #define MELT_NOREVEAL_INDEX 1
static struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins[TALER_CNC_KAPPA]; static struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins;
/** /**
* Test APIs related to the "insert_refresh_commit_coins" function. * Test APIs related to the "insert_refresh_commit_coins" function.
@ -349,61 +327,54 @@ test_refresh_commit_coins (struct TALER_EXCHANGEDB_Session *session,
struct TALER_EXCHANGEDB_RefreshCommitCoin *a_ccoin; struct TALER_EXCHANGEDB_RefreshCommitCoin *a_ccoin;
struct TALER_EXCHANGEDB_RefreshCommitCoin *b_ccoin; struct TALER_EXCHANGEDB_RefreshCommitCoin *b_ccoin;
unsigned int cnt; unsigned int cnt;
uint16_t cnc_index;
int ret; int ret;
#define COIN_ENC_MAX_SIZE 512 #define COIN_ENC_MAX_SIZE 512
ret = GNUNET_SYSERR; ret = GNUNET_SYSERR;
ret_commit_coins = NULL; ret_commit_coins = NULL;
for (cnc_index=0;cnc_index < TALER_CNC_KAPPA; cnc_index++) commit_coins
= GNUNET_new_array (MELT_NEW_COINS,
struct TALER_EXCHANGEDB_RefreshCommitCoin);
for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
{ {
commit_coins[cnc_index] struct TALER_EXCHANGEDB_RefreshCommitCoin *ccoin;
= GNUNET_new_array (MELT_NEW_COINS,
struct TALER_EXCHANGEDB_RefreshCommitCoin);
for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
{
struct TALER_EXCHANGEDB_RefreshCommitCoin *ccoin;
ccoin = &commit_coins[cnc_index][cnt]; ccoin = &commit_coins[cnt];
ccoin->coin_ev_size = GNUNET_CRYPTO_random_u64 ccoin->coin_ev_size = GNUNET_CRYPTO_random_u64
(GNUNET_CRYPTO_QUALITY_WEAK, COIN_ENC_MAX_SIZE); (GNUNET_CRYPTO_QUALITY_WEAK, COIN_ENC_MAX_SIZE);
ccoin->coin_ev = GNUNET_malloc (ccoin->coin_ev_size); ccoin->coin_ev = GNUNET_malloc (ccoin->coin_ev_size);
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
ccoin->coin_ev, ccoin->coin_ev,
ccoin->coin_ev_size); ccoin->coin_ev_size);
}
FAILIF (GNUNET_OK !=
plugin->insert_refresh_commit_coins (plugin->cls,
session,
session_hash,
cnc_index,
MELT_NEW_COINS,
commit_coins[cnc_index]));
ret_commit_coins = GNUNET_new_array (MELT_NEW_COINS,
struct TALER_EXCHANGEDB_RefreshCommitCoin);
FAILIF (GNUNET_OK !=
plugin->get_refresh_commit_coins (plugin->cls,
session,
session_hash,
cnc_index,
MELT_NEW_COINS,
ret_commit_coins));
/* compare the refresh commit coin arrays */
for (cnt = 0; cnt < MELT_NEW_COINS; cnt++)
{
a_ccoin = &commit_coins[cnc_index][cnt];
b_ccoin = &ret_commit_coins[cnt];
FAILIF (a_ccoin->coin_ev_size != b_ccoin->coin_ev_size);
FAILIF (0 != memcmp (a_ccoin->coin_ev,
a_ccoin->coin_ev,
a_ccoin->coin_ev_size));
GNUNET_free (ret_commit_coins[cnt].coin_ev);
}
GNUNET_free (ret_commit_coins);
ret_commit_coins = NULL;
} }
FAILIF (GNUNET_OK !=
plugin->insert_refresh_commit_coins (plugin->cls,
session,
session_hash,
MELT_NEW_COINS,
commit_coins));
ret_commit_coins = GNUNET_new_array (MELT_NEW_COINS,
struct TALER_EXCHANGEDB_RefreshCommitCoin);
FAILIF (GNUNET_OK !=
plugin->get_refresh_commit_coins (plugin->cls,
session,
session_hash,
MELT_NEW_COINS,
ret_commit_coins));
/* compare the refresh commit coin arrays */
for (cnt = 0; cnt < MELT_NEW_COINS; cnt++)
{
a_ccoin = &commit_coins[cnt];
b_ccoin = &ret_commit_coins[cnt];
FAILIF (a_ccoin->coin_ev_size != b_ccoin->coin_ev_size);
FAILIF (0 != memcmp (a_ccoin->coin_ev,
a_ccoin->coin_ev,
a_ccoin->coin_ev_size));
GNUNET_free (ret_commit_coins[cnt].coin_ev);
}
GNUNET_free (ret_commit_coins);
ret_commit_coins = NULL;
ret = GNUNET_OK; ret = GNUNET_OK;
drop: drop:
if (NULL != ret_commit_coins) if (NULL != ret_commit_coins)
{ {
@ -433,37 +404,31 @@ test_refresh_commit_links (struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash) const struct GNUNET_HashCode *session_hash)
{ {
int ret; int ret;
unsigned int i;
struct TALER_TransferPublicKeyP tp; struct TALER_TransferPublicKeyP tp;
unsigned int i;
ret = GNUNET_SYSERR; ret = GNUNET_SYSERR;
FAILIF (GNUNET_NO != FAILIF (GNUNET_NO !=
plugin->get_refresh_transfer_public_key (plugin->cls, plugin->get_refresh_transfer_public_key (plugin->cls,
session, session,
session_hash, session_hash,
MELT_NOREVEAL_INDEX,
&tp)); &tp));
for (i=0;i<TALER_CNC_KAPPA;i++) for (i=0;i<TALER_CNC_KAPPA;i++)
{
RND_BLK (&rctp[i]); RND_BLK (&rctp[i]);
FAILIF (GNUNET_OK != FAILIF (GNUNET_OK !=
plugin->insert_refresh_transfer_public_key (plugin->cls, plugin->insert_refresh_transfer_public_key (plugin->cls,
session, session,
session_hash, session_hash,
i, &rctp[MELT_NOREVEAL_INDEX]));
&rctp[i])); FAILIF (GNUNET_OK !=
plugin->get_refresh_transfer_public_key (plugin->cls,
FAILIF (GNUNET_OK != session,
plugin->get_refresh_transfer_public_key (plugin->cls, session_hash,
session, &tp));
session_hash, FAILIF (0 !=
i, memcmp (&rctp[MELT_NOREVEAL_INDEX],
&tp)); &tp,
FAILIF (0 != sizeof (struct TALER_TransferPublicKeyP)));
memcmp (&rctp[i],
&tp,
sizeof (struct TALER_TransferPublicKeyP)));
}
ret = GNUNET_OK; ret = GNUNET_OK;
drop: drop:
return ret; return ret;
@ -519,12 +484,10 @@ test_melting (struct TALER_EXCHANGEDB_Session *session)
struct TALER_EXCHANGEDB_RefreshMelt *meltp; struct TALER_EXCHANGEDB_RefreshMelt *meltp;
struct TALER_DenominationPublicKey *new_denom_pubs; struct TALER_DenominationPublicKey *new_denom_pubs;
struct TALER_DenominationPublicKey *ret_denom_pubs; struct TALER_DenominationPublicKey *ret_denom_pubs;
struct TALER_EXCHANGEDB_MeltCommitment *mc;
struct TALER_EXCHANGEDB_LinkDataList *ldl; struct TALER_EXCHANGEDB_LinkDataList *ldl;
struct TALER_EXCHANGEDB_LinkDataList *ldlp; struct TALER_EXCHANGEDB_LinkDataList *ldlp;
struct TALER_DenominationSignature ev_sigs[MELT_NEW_COINS]; struct TALER_DenominationSignature ev_sigs[MELT_NEW_COINS];
unsigned int cnt; unsigned int cnt;
unsigned int i;
int ret; int ret;
ret = GNUNET_SYSERR; ret = GNUNET_SYSERR;
@ -648,34 +611,6 @@ test_melting (struct TALER_EXCHANGEDB_Session *session)
&refresh_session, &refresh_session,
&session_hash)); &session_hash));
/* checking 'get_melt_commitment' API */
mc = plugin->get_melt_commitment (plugin->cls,
session,
&session_hash);
FAILIF (NULL == mc);
FAILIF (MELT_NEW_COINS != mc->num_newcoins);
for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
{
FAILIF (0 !=
GNUNET_CRYPTO_rsa_public_key_cmp (new_dkp[cnt]->pub.rsa_public_key,
mc->denom_pubs[cnt].rsa_public_key));
for (i=0;i<TALER_CNC_KAPPA;i++)
{
FAILIF (0 !=
commit_coin_cmp (&mc->commit_coins[i][cnt],
&commit_coins[i][cnt]));
}
}
for (i=0;i<TALER_CNC_KAPPA;i++)
{
FAILIF (0 !=
memcmp (&rctp[i],
&mc->transfer_pubs[i],
sizeof (struct TALER_TransferPublicKeyP)));
}
plugin->free_melt_commitment (plugin->cls,
mc);
for (cnt=0; cnt < MELT_NEW_COINS; cnt++) for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
{ {
struct GNUNET_HashCode hc; struct GNUNET_HashCode hc;
@ -738,15 +673,14 @@ test_melting (struct TALER_EXCHANGEDB_Session *session)
drop: drop:
for (cnt=0; cnt < MELT_NEW_COINS; cnt++) for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
GNUNET_CRYPTO_rsa_signature_free (ev_sigs[cnt].rsa_signature); GNUNET_CRYPTO_rsa_signature_free (ev_sigs[cnt].rsa_signature);
for (cnt=0;cnt<TALER_CNC_KAPPA;cnt++) if (NULL != commit_coins)
if (NULL != commit_coins[cnt]) {
{ plugin->free_refresh_commit_coins (plugin->cls,
plugin->free_refresh_commit_coins (plugin->cls, MELT_NEW_COINS,
MELT_NEW_COINS, commit_coins);
commit_coins[cnt]); GNUNET_free (commit_coins);
GNUNET_free (commit_coins[cnt]); commit_coins = NULL;
commit_coins[cnt] = NULL; }
}
destroy_denom_key_pair (dkp); destroy_denom_key_pair (dkp);
GNUNET_CRYPTO_rsa_signature_free (meltp->coin.denom_sig.rsa_signature); GNUNET_CRYPTO_rsa_signature_free (meltp->coin.denom_sig.rsa_signature);
for (cnt = 0; for (cnt = 0;

View File

@ -545,34 +545,6 @@ struct TALER_EXCHANGEDB_TransactionList
}; };
/**
* @brief All of the information from a /refresh/melt commitment.
*/
struct TALER_EXCHANGEDB_MeltCommitment
{
/**
* Number of new coins we are creating.
*/
uint16_t num_newcoins;
/**
* Array of @e num_newcoins denomination keys
*/
struct TALER_DenominationPublicKey *denom_pubs;
/**
* 2D-Array of #TALER_CNC_KAPPA and @e num_newcoins commitments.
*/
struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins[TALER_CNC_KAPPA];
/**
* Array of #TALER_CNC_KAPPA transfer public keys.
*/
struct TALER_TransferPublicKeyP transfer_pubs[TALER_CNC_KAPPA];
};
/** /**
* @brief Handle for a database session (per-thread, for transactions). * @brief Handle for a database session (per-thread, for transactions).
*/ */
@ -1146,7 +1118,6 @@ struct TALER_EXCHANGEDB_Plugin
* @param cls the @e cls of this struct with the plugin-specific state * @param cls the @e cls of this struct with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose index (1st dimension), relating to #TALER_CNC_KAPPA
* @param num_newcoins coin index size of the @a commit_coins array * @param num_newcoins coin index size of the @a commit_coins array
* @param commit_coin array of coin commitments to store * @param commit_coin array of coin commitments to store
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
@ -1156,7 +1127,6 @@ struct TALER_EXCHANGEDB_Plugin
(*insert_refresh_commit_coins) (void *cls, (*insert_refresh_commit_coins) (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
uint16_t num_newcoins, uint16_t num_newcoins,
const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins); const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins);
@ -1168,7 +1138,6 @@ struct TALER_EXCHANGEDB_Plugin
* @param cls the @e cls of this struct with the plugin-specific state * @param cls the @e cls of this struct with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose set index (1st dimension)
* @param num_coins size of the @a commit_coins array * @param num_coins size of the @a commit_coins array
* @param[out] commit_coins array of coin commitments to return * @param[out] commit_coins array of coin commitments to return
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
@ -1179,7 +1148,6 @@ struct TALER_EXCHANGEDB_Plugin
(*get_refresh_commit_coins) (void *cls, (*get_refresh_commit_coins) (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
uint16_t num_coins, uint16_t num_coins,
struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins); struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins);
@ -1203,7 +1171,6 @@ struct TALER_EXCHANGEDB_Plugin
* @param cls the @e cls of this struct with the plugin-specific state * @param cls the @e cls of this struct with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose index, relating to #TALER_CNC_KAPPA
* @param tp public key to store * @param tp public key to store
* @return #GNUNET_SYSERR on internal error, #GNUNET_OK on success * @return #GNUNET_SYSERR on internal error, #GNUNET_OK on success
*/ */
@ -1211,7 +1178,6 @@ struct TALER_EXCHANGEDB_Plugin
(*insert_refresh_transfer_public_key) (void *cls, (*insert_refresh_transfer_public_key) (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
const struct TALER_TransferPublicKeyP *tp); const struct TALER_TransferPublicKeyP *tp);
/** /**
@ -1221,7 +1187,6 @@ struct TALER_EXCHANGEDB_Plugin
* @param cls the @e cls of this struct with the plugin-specific state * @param cls the @e cls of this struct with the plugin-specific state
* @param session database connection to use * @param session database connection to use
* @param session_hash hash to identify refresh session * @param session_hash hash to identify refresh session
* @param cnc_index cut and choose index (1st dimension)
* @param[out] tp information to return * @param[out] tp information to return
* @return #GNUNET_SYSERR on internal error, * @return #GNUNET_SYSERR on internal error,
* #GNUNET_NO if commitment was not found * #GNUNET_NO if commitment was not found
@ -1231,36 +1196,9 @@ struct TALER_EXCHANGEDB_Plugin
(*get_refresh_transfer_public_key) (void *cls, (*get_refresh_transfer_public_key) (void *cls,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash, const struct GNUNET_HashCode *session_hash,
uint16_t cnc_index,
struct TALER_TransferPublicKeyP *tp); struct TALER_TransferPublicKeyP *tp);
/**
* Get all of the information from the given melt commit operation.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session database connection to use
* @param session_hash hash to identify refresh session
* @return NULL if the @a session_hash does not correspond to any known melt
* operation
*/
struct TALER_EXCHANGEDB_MeltCommitment *
(*get_melt_commitment) (void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *session_hash);
/**
* Free information about a melt commitment.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param mc melt commitment data to free
*/
void
(*free_melt_commitment) (void *cls,
struct TALER_EXCHANGEDB_MeltCommitment *mc);
/** /**
* Insert signature of a new coin generated during refresh into * Insert signature of a new coin generated during refresh into
* the database indexed by the refresh session and the index * the database indexed by the refresh session and the index