diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-05-24 20:13:31 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-05-24 20:13:31 +0200 |
commit | 32bb3b14bf5cd623714985c8ca7fed0c5a923336 (patch) | |
tree | 2438cf9567c4eb755ae6d8882383395fd23e408e /src/exchangedb | |
parent | 8c3ffbf2a356b7c684bb65b8678e819183e52d76 (diff) | |
download | exchange-32bb3b14bf5cd623714985c8ca7fed0c5a923336.tar.xz |
fix #4483
Diffstat (limited to 'src/exchangedb')
-rw-r--r-- | src/exchangedb/perf_taler_exchangedb_init.c | 21 | ||||
-rw-r--r-- | src/exchangedb/plugin_exchangedb_common.c | 2 | ||||
-rw-r--r-- | src/exchangedb/plugin_exchangedb_postgres.c | 94 | ||||
-rw-r--r-- | src/exchangedb/test_exchangedb.c | 59 |
4 files changed, 54 insertions, 122 deletions
diff --git a/src/exchangedb/perf_taler_exchangedb_init.c b/src/exchangedb/perf_taler_exchangedb_init.c index 988014a11..5e98c4f5a 100644 --- a/src/exchangedb/perf_taler_exchangedb_init.c +++ b/src/exchangedb/perf_taler_exchangedb_init.c @@ -573,24 +573,13 @@ struct TALER_EXCHANGEDB_RefreshCommitCoin * PERF_TALER_EXCHANGEDB_refresh_commit_coin_init () { struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coin; - struct TALER_RefreshLinkEncrypted refresh_link; commit_coin = GNUNET_new (struct TALER_EXCHANGEDB_RefreshCommitCoin); - GNUNET_assert (NULL != commit_coin); - {/* refresh_link */ - refresh_link = (struct TALER_RefreshLinkEncrypted) - { - .blinding_key_enc = "blinding_key", - .blinding_key_enc_size = 13 - }; - GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, - &refresh_link.coin_priv_enc, - sizeof(struct TALER_CoinSpendPrivateKeyP)); - } + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, + &commit_coin->refresh_link, + sizeof(struct TALER_RefreshLinkEncryptedP)); commit_coin->coin_ev = "coin_ev"; commit_coin->coin_ev_size = 8; - commit_coin->refresh_link = GNUNET_new (struct TALER_RefreshLinkEncrypted); - *commit_coin->refresh_link = refresh_link; return commit_coin; } @@ -607,8 +596,7 @@ PERF_TALER_EXCHANGEDB_refresh_commit_coin_copy (struct TALER_EXCHANGEDB_RefreshC struct TALER_EXCHANGEDB_RefreshCommitCoin *copy; copy = GNUNET_new (struct TALER_EXCHANGEDB_RefreshCommitCoin); - copy->refresh_link = GNUNET_new (struct TALER_RefreshLinkEncrypted); - *copy->refresh_link = *commit_coin->refresh_link; + *copy = *commit_coin; return copy; } @@ -621,6 +609,5 @@ PERF_TALER_EXCHANGEDB_refresh_commit_coin_copy (struct TALER_EXCHANGEDB_RefreshC void PERF_TALER_EXCHANGEDB_refresh_commit_coin_free (struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coin) { - GNUNET_free (commit_coin->refresh_link); GNUNET_free (commit_coin); } diff --git a/src/exchangedb/plugin_exchangedb_common.c b/src/exchangedb/plugin_exchangedb_common.c index 9b62d688f..16396f0f3 100644 --- a/src/exchangedb/plugin_exchangedb_common.c +++ b/src/exchangedb/plugin_exchangedb_common.c @@ -73,7 +73,6 @@ common_free_link_data_list (void *cls, while (NULL != ldl) { next = ldl->next; - GNUNET_free (ldl->link_data_enc); GNUNET_free (ldl); ldl = next; } @@ -147,7 +146,6 @@ common_free_melt_commitment (void *cls, { /* 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].refresh_link); GNUNET_free_non_null (mc->commit_coins[k][i].coin_ev); } GNUNET_free (mc->commit_coins[k]); diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index e2b158c90..694ab01dc 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -3064,29 +3064,19 @@ postgres_insert_refresh_commit_coins (void *cls, uint16_t num_newcoins, const struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins) { - char *rle; - size_t rle_size; PGresult *result; unsigned int i; uint16_t coin_off; for (i=0;i<(unsigned int) num_newcoins;i++) { - rle = TALER_refresh_link_encrypted_encode (commit_coins[i].refresh_link, - &rle_size); - if (NULL == rle) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } coin_off = (uint16_t) i; { struct GNUNET_PQ_QueryParam params[] = { 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_fixed_size (rle, - rle_size), + GNUNET_PQ_query_param_auto_from_type (&commit_coins[i].refresh_link), GNUNET_PQ_query_param_fixed_size (commit_coins[i].coin_ev, commit_coins[i].coin_ev_size), GNUNET_PQ_query_param_end @@ -3095,7 +3085,6 @@ postgres_insert_refresh_commit_coins (void *cls, "insert_refresh_commit_coin", params); } - GNUNET_free (rle); if (PGRES_COMMAND_OK != PQresultStatus (result)) { BREAK_DB_ERR (result); @@ -3131,8 +3120,6 @@ postgres_free_refresh_commit_coins (void *cls, for (i=0;i<commit_coins_len;i++) { - GNUNET_free (commit_coins[i].refresh_link); - commit_coins[i].refresh_link = NULL; GNUNET_free (commit_coins[i].coin_ev); commit_coins[i].coin_ev = NULL; commit_coins[i].coin_ev_size = 0; @@ -3175,9 +3162,6 @@ postgres_get_refresh_commit_coins (void *cls, }; void *c_buf; size_t c_buf_size; - void *rl_buf; - size_t rl_buf_size; - struct TALER_RefreshLinkEncrypted *rl; PGresult *result; result = GNUNET_PQ_exec_prepared (session->conn, @@ -3198,12 +3182,11 @@ postgres_get_refresh_commit_coins (void *cls, } { struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_variable_size ("link_vector_enc", - &rl_buf, - &rl_buf_size), + GNUNET_PQ_result_spec_auto_from_type ("link_vector_enc", + &commit_coins[i].refresh_link), GNUNET_PQ_result_spec_variable_size ("coin_ev", - &c_buf, - &c_buf_size), + &c_buf, + &c_buf_size), GNUNET_PQ_result_spec_end }; @@ -3216,17 +3199,6 @@ postgres_get_refresh_commit_coins (void *cls, } } PQclear (result); - if (rl_buf_size < sizeof (struct TALER_CoinSpendPrivateKeyP)) - { - GNUNET_free (c_buf); - GNUNET_free (rl_buf); - postgres_free_refresh_commit_coins (cls, i, commit_coins); - return GNUNET_SYSERR; - } - rl = TALER_refresh_link_encrypted_decode (rl_buf, - rl_buf_size); - GNUNET_free (rl_buf); - commit_coins[i].refresh_link = rl; commit_coins[i].coin_ev = c_buf; commit_coins[i].coin_ev_size = c_buf_size; } @@ -3475,7 +3447,6 @@ postgres_get_link_data_list (void *cls, const struct GNUNET_HashCode *session_hash) { struct TALER_EXCHANGEDB_LinkDataList *ldl; - struct TALER_EXCHANGEDB_LinkDataList *pos; int i; int nrows; struct GNUNET_PQ_QueryParam params[] = { @@ -3503,45 +3474,34 @@ postgres_get_link_data_list (void *cls, for (i = 0; i < nrows; i++) { - struct TALER_RefreshLinkEncrypted *link_enc; struct GNUNET_CRYPTO_RsaPublicKey *denom_pub; struct GNUNET_CRYPTO_RsaSignature *sig; - void *ld_buf; - size_t ld_buf_size; - struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_variable_size ("link_vector_enc", - &ld_buf, - &ld_buf_size), - GNUNET_PQ_result_spec_rsa_signature ("ev_sig", - &sig), - GNUNET_PQ_result_spec_rsa_public_key ("denom_pub", - &denom_pub), - GNUNET_PQ_result_spec_end - }; + struct TALER_EXCHANGEDB_LinkDataList *pos; - if (GNUNET_OK != - GNUNET_PQ_extract_result (result, rs, i)) - { - PQclear (result); - GNUNET_break (0); - common_free_link_data_list (cls, - ldl); - return NULL; - } - if (ld_buf_size < sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey)) + pos = GNUNET_new (struct TALER_EXCHANGEDB_LinkDataList); { - PQclear (result); - GNUNET_free (ld_buf); - common_free_link_data_list (cls, - ldl); - return NULL; + struct GNUNET_PQ_ResultSpec rs[] = { + GNUNET_PQ_result_spec_auto_from_type ("link_vector_enc", + &pos->link_data_enc), + GNUNET_PQ_result_spec_rsa_signature ("ev_sig", + &sig), + GNUNET_PQ_result_spec_rsa_public_key ("denom_pub", + &denom_pub), + GNUNET_PQ_result_spec_end + }; + + if (GNUNET_OK != + GNUNET_PQ_extract_result (result, rs, i)) + { + PQclear (result); + GNUNET_break (0); + common_free_link_data_list (cls, + ldl); + GNUNET_free (pos); + return NULL; + } } - link_enc = TALER_refresh_link_encrypted_decode (ld_buf, - ld_buf_size); - GNUNET_free (ld_buf); - pos = GNUNET_new (struct TALER_EXCHANGEDB_LinkDataList); pos->next = ldl; - pos->link_data_enc = link_enc; pos->denom_pub.rsa_public_key = denom_pub; pos->ev_sig.rsa_signature = sig; ldl = pos; diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c index a5530e3cc..d9c04b8c1 100644 --- a/src/exchangedb/test_exchangedb.c +++ b/src/exchangedb/test_exchangedb.c @@ -301,18 +301,13 @@ static struct TALER_Amount amount_with_fee; * @return 0 if they are equal */ static int -refresh_link_encrypted_cmp (struct TALER_RefreshLinkEncrypted *rl1, - struct TALER_RefreshLinkEncrypted *rl2) +refresh_link_encrypted_cmp (struct TALER_RefreshLinkEncryptedP *rl1, + struct TALER_RefreshLinkEncryptedP *rl2) { - if ( (rl1->blinding_key_enc_size == rl2->blinding_key_enc_size) && - (0 == - memcmp (rl1->coin_priv_enc, - rl2->coin_priv_enc, - sizeof (struct TALER_CoinSpendPrivateKeyP))) && - (0 == - memcmp (rl1->blinding_key_enc, - rl2->blinding_key_enc, - rl1->blinding_key_enc_size)) ) + if (0 == + memcmp (rl1, + rl2, + sizeof (struct TALER_RefreshLinkEncryptedP))) return 0; return 1; } @@ -334,8 +329,8 @@ commit_coin_cmp (struct TALER_EXCHANGEDB_RefreshCommitCoin *rc1, rc2->coin_ev, rc2->coin_ev_size)); FAILIF (0 != - refresh_link_encrypted_cmp (rc1->refresh_link, - rc2->refresh_link)); + refresh_link_encrypted_cmp (&rc1->refresh_link, + &rc2->refresh_link)); return 0; drop: return 1; @@ -370,10 +365,9 @@ test_refresh_commit_coins (struct TALER_EXCHANGEDB_Session *session, { struct TALER_EXCHANGEDB_RefreshCommitCoin *ret_commit_coins; struct TALER_EXCHANGEDB_RefreshCommitCoin *a_ccoin; - struct TALER_RefreshLinkEncrypted *a_rlink; + struct TALER_RefreshLinkEncryptedP a_rlink; struct TALER_EXCHANGEDB_RefreshCommitCoin *b_ccoin; - struct TALER_RefreshLinkEncrypted *b_rlink; - size_t size; + struct TALER_RefreshLinkEncryptedP b_rlink; unsigned int cnt; uint16_t cnc_index; int ret; @@ -389,12 +383,12 @@ test_refresh_commit_coins (struct TALER_EXCHANGEDB_Session *session, for (cnt=0; cnt < MELT_NEW_COINS; cnt++) { struct TALER_EXCHANGEDB_RefreshCommitCoin *ccoin; - struct TALER_RefreshLinkEncrypted *rlink; + struct TALER_RefreshLinkEncryptedP rlink; ccoin = &commit_coins[cnc_index][cnt]; - size = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, - COIN_ENC_MAX_SIZE); - rlink = GNUNET_malloc (sizeof (struct TALER_RefreshLinkEncrypted) + size); + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, + &rlink, + sizeof (rlink)); ccoin->refresh_link = rlink; ccoin->coin_ev_size = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, COIN_ENC_MAX_SIZE); @@ -402,12 +396,6 @@ test_refresh_commit_coins (struct TALER_EXCHANGEDB_Session *session, GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ccoin->coin_ev, ccoin->coin_ev_size); - rlink->blinding_key_enc_size = size; - RND_BLK (&rlink->coin_priv_enc); - rlink->blinding_key_enc = (const char *) &rlink[1]; - GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, - (void *)rlink->blinding_key_enc, - rlink->blinding_key_enc_size); } FAILIF (GNUNET_OK != plugin->insert_refresh_commit_coins (plugin->cls, @@ -436,13 +424,12 @@ test_refresh_commit_coins (struct TALER_EXCHANGEDB_Session *session, a_ccoin->coin_ev_size)); a_rlink = a_ccoin->refresh_link; b_rlink = b_ccoin->refresh_link; - FAILIF (a_rlink->blinding_key_enc_size != b_rlink->blinding_key_enc_size); - FAILIF (0 != memcmp (a_rlink->blinding_key_enc, - b_rlink->blinding_key_enc, - a_rlink->blinding_key_enc_size)); - FAILIF (0 != memcmp (a_rlink->coin_priv_enc, - b_rlink->coin_priv_enc, - sizeof (a_rlink->coin_priv_enc))); + FAILIF (0 != memcmp (a_rlink.blinding_key_enc, + b_rlink.blinding_key_enc, + sizeof (a_rlink.blinding_key_enc))); + FAILIF (0 != memcmp (a_rlink.coin_priv_enc, + b_rlink.coin_priv_enc, + sizeof (a_rlink.coin_priv_enc))); } } ret = GNUNET_OK; @@ -745,8 +732,8 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) FAILIF (NULL == ldl); for (ldlp = ldl; NULL != ldlp; ldlp = ldlp->next) { - struct TALER_RefreshLinkEncrypted *r1; - struct TALER_RefreshLinkEncrypted *r2; + struct TALER_RefreshLinkEncryptedP r1; + struct TALER_RefreshLinkEncryptedP r2; int found; found = GNUNET_NO; @@ -762,7 +749,7 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) GNUNET_CRYPTO_rsa_signature_cmp (ldlp->ev_sig.rsa_signature, ev_sigs[cnt].rsa_signature)) && (0 == - refresh_link_encrypted_cmp (r1, r2)) ) + refresh_link_encrypted_cmp (&r1, &r2)) ) { found = GNUNET_YES; break; |