aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-10-31 18:12:54 +0100
committerChristian Grothoff <christian@grothoff.org>2021-10-31 18:12:54 +0100
commit783d07b4765aabee529f889b55f4fb5a27efaa44 (patch)
tree7d83bb5ae4035f304e476d0eeab0d261ee2f1980 /src
parentb1197c16a4f1034cd4d46902f6a20327ac7a52c4 (diff)
consistently distinguish blinded/unblinded denomination sigs
Diffstat (limited to 'src')
-rw-r--r--src/exchange/taler-exchange-httpd_link.c4
-rw-r--r--src/exchangedb/irbt_callbacks.c4
-rw-r--r--src/exchangedb/lrbt_callbacks.c4
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c6
-rw-r--r--src/exchangedb/test_exchangedb.c34
-rw-r--r--src/include/taler_crypto_lib.h13
-rw-r--r--src/include/taler_exchangedb_plugin.h6
-rw-r--r--src/util/denom.c20
8 files changed, 65 insertions, 26 deletions
diff --git a/src/exchange/taler-exchange-httpd_link.c b/src/exchange/taler-exchange-httpd_link.c
index 19a03595f..3393e0683 100644
--- a/src/exchange/taler-exchange-httpd_link.c
+++ b/src/exchange/taler-exchange-httpd_link.c
@@ -84,8 +84,8 @@ handle_link_data (void *cls,
obj = GNUNET_JSON_PACK (
TALER_JSON_pack_denom_pub ("denom_pub",
&pos->denom_pub),
- TALER_JSON_pack_denom_sig ("ev_sig",
- &pos->ev_sig),
+ TALER_JSON_pack_blinded_denom_sig ("ev_sig",
+ &pos->ev_sig),
GNUNET_JSON_pack_data_auto ("link_sig",
&pos->orig_coin_link_sig));
if ( (NULL == obj) ||
diff --git a/src/exchangedb/irbt_callbacks.c b/src/exchangedb/irbt_callbacks.c
index 756d755e2..20f25686c 100644
--- a/src/exchangedb/irbt_callbacks.c
+++ b/src/exchangedb/irbt_callbacks.c
@@ -230,7 +230,7 @@ irbt_cb_table_reserves_out (struct PostgresClosure *pg,
&td->details.reserves_out.h_blind_ev),
GNUNET_PQ_query_param_uint64 (
&td->details.reserves_out.denominations_serial),
- TALER_PQ_query_param_denom_sig (
+ TALER_PQ_query_param_blinded_denom_sig (
&td->details.reserves_out.denom_sig),
GNUNET_PQ_query_param_uint64 (
&td->details.reserves_out.reserve_uuid),
@@ -437,7 +437,7 @@ irbt_cb_table_refresh_revealed_coins (
td->details.refresh_revealed_coins.
coin_ev_size),
GNUNET_PQ_query_param_auto_from_type (&h_coin_ev),
- TALER_PQ_query_param_denom_sig (
+ TALER_PQ_query_param_blinded_denom_sig (
&td->details.refresh_revealed_coins.ev_sig),
GNUNET_PQ_query_param_uint64 (
&td->details.refresh_revealed_coins.denominations_serial),
diff --git a/src/exchangedb/lrbt_callbacks.c b/src/exchangedb/lrbt_callbacks.c
index 481ee3783..8aa0a0833 100644
--- a/src/exchangedb/lrbt_callbacks.c
+++ b/src/exchangedb/lrbt_callbacks.c
@@ -405,7 +405,7 @@ lrbt_cb_table_reserves_out (void *cls,
GNUNET_PQ_result_spec_uint64 (
"denominations_serial",
&td.details.reserves_out.denominations_serial),
- TALER_PQ_result_spec_denom_sig (
+ TALER_PQ_result_spec_blinded_denom_sig (
"denom_sig",
&td.details.reserves_out.denom_sig),
GNUNET_PQ_result_spec_uint64 (
@@ -787,7 +787,7 @@ lrbt_cb_table_refresh_revealed_coins (void *cls,
"coin_ev",
(void **) &td.details.refresh_revealed_coins.coin_ev,
&td.details.refresh_revealed_coins.coin_ev_size),
- TALER_PQ_result_spec_denom_sig (
+ TALER_PQ_result_spec_blinded_denom_sig (
"ev_sig",
&td.details.refresh_revealed_coins.ev_sig),
GNUNET_PQ_result_spec_uint64 (
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index 85550e980..219ea0647 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -6367,7 +6367,7 @@ free_link_data_list (void *cls,
{
next = ldl->next;
TALER_denom_pub_free (&ldl->denom_pub);
- TALER_denom_sig_free (&ldl->ev_sig);
+ TALER_blinded_denom_sig_free (&ldl->ev_sig);
GNUNET_free (ldl);
ldl = next;
}
@@ -6401,8 +6401,8 @@ add_ldl (void *cls,
&transfer_pub),
GNUNET_PQ_result_spec_auto_from_type ("link_sig",
&pos->orig_coin_link_sig),
- TALER_PQ_result_spec_denom_sig ("ev_sig",
- &pos->ev_sig),
+ TALER_PQ_result_spec_blinded_denom_sig ("ev_sig",
+ &pos->ev_sig),
TALER_PQ_result_spec_denom_pub ("denom_pub",
&pos->denom_pub),
GNUNET_PQ_result_spec_end
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index 817dcbbca..9b8d1a6d3 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -262,8 +262,8 @@ create_denom_key_pair (unsigned int size,
TALER_denom_pub_hash (&dkp->pub,
&dki.issue.properties.denom_hash);
- dki.issue.properties.purpose.size = htonl (sizeof (struct
- TALER_DenominationKeyValidityPS));
+ dki.issue.properties.purpose.size
+ = htonl (sizeof (struct TALER_DenominationKeyValidityPS));
dki.issue.properties.purpose.purpose = htonl (
TALER_SIGNATURE_MASTER_DENOMINATION_KEY_VALIDITY);
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
@@ -479,8 +479,8 @@ handle_link_data_cb (void *cls,
TALER_denom_pub_cmp (&ldlp->denom_pub,
&new_dkp[cnt]->pub)) &&
(0 ==
- TALER_denom_sig_cmp (&ldlp->ev_sig,
- &revealed_coins[cnt].coin_sig)) )
+ TALER_blinded_denom_sig_cmp (&ldlp->ev_sig,
+ &revealed_coins[cnt].coin_sig)) )
{
found = GNUNET_YES;
break;
@@ -623,7 +623,7 @@ test_melting (void)
RND_BLK (&hc);
ccoin->denom_pub = new_dkp[cnt]->pub;
ccoin->coin_sig.cipher = TALER_DENOMINATION_RSA;
- ccoin->coin_sig.details.rsa_signature
+ ccoin->coin_sig.details.blinded_rsa_signature
= GNUNET_CRYPTO_rsa_sign_fdh (new_dkp[cnt]->priv.details.rsa_private_key,
&hc.hash);
}
@@ -675,7 +675,7 @@ drop:
{
for (unsigned int cnt = 0; cnt < MELT_NEW_COINS; cnt++)
{
- TALER_denom_sig_free (&revealed_coins[cnt].coin_sig);
+ TALER_blinded_denom_sig_free (&revealed_coins[cnt].coin_sig);
GNUNET_free (revealed_coins[cnt].coin_ev);
}
GNUNET_free (revealed_coins);
@@ -1593,7 +1593,7 @@ run (void *cls)
RND_BLK (&cbc.reserve_sig);
cbc.denom_pub_hash = dkp_pub_hash;
cbc.sig.cipher = TALER_DENOMINATION_RSA;
- cbc.sig.details.rsa_signature
+ cbc.sig.details.blinded_rsa_signature
= GNUNET_CRYPTO_rsa_sign_fdh (dkp->priv.details.rsa_private_key,
&cbc.h_coin_envelope.hash);
cbc.reserve_pub = reserve_pub;
@@ -1620,12 +1620,14 @@ run (void *cls)
plugin->get_withdraw_info (plugin->cls,
&cbc.h_coin_envelope,
&cbc2));
- FAILIF (0 != GNUNET_memcmp (&cbc2.reserve_sig, &cbc.reserve_sig));
- FAILIF (0 != GNUNET_memcmp (&cbc2.reserve_pub, &cbc.reserve_pub));
+ FAILIF (0 != GNUNET_memcmp (&cbc2.reserve_sig,
+ &cbc.reserve_sig));
+ FAILIF (0 != GNUNET_memcmp (&cbc2.reserve_pub,
+ &cbc.reserve_pub));
result = 6;
FAILIF (GNUNET_OK !=
GNUNET_CRYPTO_rsa_verify (&cbc.h_coin_envelope.hash,
- cbc2.sig.details.rsa_signature,
+ cbc2.sig.details.blinded_rsa_signature,
dkp->pub.details.rsa_public_key));
@@ -1634,7 +1636,9 @@ run (void *cls)
RND_BLK (&deposit.coin.coin_pub);
TALER_denom_pub_hash (&dkp->pub,
&deposit.coin.denom_pub_hash);
- deposit.coin.denom_sig = cbc.sig;
+ deposit.coin.denom_sig.cipher = TALER_DENOMINATION_RSA;
+ deposit.coin.denom_sig.details.rsa_signature =
+ cbc.sig.details.blinded_rsa_signature;
deadline = GNUNET_TIME_absolute_get ();
(void) GNUNET_TIME_round_abs (&deadline);
FAILIF (TALER_EXCHANGEDB_CKS_ADDED !=
@@ -1792,7 +1796,9 @@ run (void *cls)
RND_BLK (&deposit.coin.coin_pub);
TALER_denom_pub_hash (&dkp->pub,
&deposit.coin.denom_pub_hash);
- deposit.coin.denom_sig = cbc.sig;
+ deposit.coin.denom_sig.cipher = TALER_DENOMINATION_RSA;
+ deposit.coin.denom_sig.details.rsa_signature =
+ cbc.sig.details.blinded_rsa_signature;
RND_BLK (&deposit.csig);
RND_BLK (&deposit.merchant_pub);
RND_BLK (&deposit.h_contract_terms);
@@ -2126,8 +2132,8 @@ drop:
plugin->drop_tables (plugin->cls));
if (NULL != dkp)
destroy_denom_key_pair (dkp);
- TALER_denom_sig_free (&cbc.sig);
- TALER_denom_sig_free (&cbc2.sig);
+ TALER_blinded_denom_sig_free (&cbc.sig);
+ TALER_blinded_denom_sig_free (&cbc2.sig);
dkp = NULL;
TALER_EXCHANGEDB_plugin_unload (plugin);
plugin = NULL;
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 69acfa0b3..f63b7dcae 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -773,6 +773,19 @@ TALER_denom_sig_cmp (const struct TALER_DenominationSignature *sig1,
/**
+ * Compare two blinded denomination signatures.
+ *
+ * @param sig1 first signature
+ * @param sig2 second signature
+ * @return 0 if the keys are equal, otherwise -1 or 1
+ */
+int
+TALER_blinded_denom_sig_cmp (
+ const struct TALER_BlindedDenominationSignature *sig1,
+ const struct TALER_BlindedDenominationSignature *sig2);
+
+
+/**
* Obtain denomination public key from a denomination private key.
*
* @param denom_priv private key to convert
diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h
index 17df75281..c278aa40b 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -239,7 +239,7 @@ struct TALER_EXCHANGEDB_TableData
{
struct TALER_BlindedCoinHash h_blind_ev;
uint64_t denominations_serial;
- struct TALER_DenominationSignature denom_sig;
+ struct TALER_BlindedDenominationSignature denom_sig;
uint64_t reserve_uuid;
struct TALER_ReserveSignatureP reserve_sig;
struct GNUNET_TIME_Absolute execution_date;
@@ -301,7 +301,7 @@ struct TALER_EXCHANGEDB_TableData
void *coin_ev;
size_t coin_ev_size;
// h_coin_ev omitted, to be recomputed!
- struct TALER_DenominationSignature ev_sig;
+ struct TALER_BlindedDenominationSignature ev_sig;
} refresh_revealed_coins;
struct
@@ -1334,7 +1334,7 @@ struct TALER_EXCHANGEDB_LinkList
/**
* Signature over the blinded envelope.
*/
- struct TALER_DenominationSignature ev_sig;
+ struct TALER_BlindedDenominationSignature ev_sig;
/**
* Signature of the original coin being refreshed over the
diff --git a/src/util/denom.c b/src/util/denom.c
index 8d6ddd5e7..e623a6354 100644
--- a/src/util/denom.c
+++ b/src/util/denom.c
@@ -295,4 +295,24 @@ TALER_denom_sig_cmp (const struct TALER_DenominationSignature *sig1,
}
+int
+TALER_blinded_denom_sig_cmp (
+ const struct TALER_BlindedDenominationSignature *sig1,
+ const struct TALER_BlindedDenominationSignature *sig2)
+{
+ if (sig1->cipher != sig2->cipher)
+ return (sig1->cipher > sig2->cipher) ? 1 : -1;
+ switch (sig1->cipher)
+ {
+ case TALER_DENOMINATION_RSA:
+ return GNUNET_CRYPTO_rsa_signature_cmp (sig1->details.blinded_rsa_signature,
+ sig2->details.blinded_rsa_signature);
+ // TODO: add case for Clause-Schnorr
+ default:
+ GNUNET_assert (0);
+ }
+ return -2;
+}
+
+
/* end of denom.c */