utility functions

This commit is contained in:
Gian Demarmels 2021-12-27 20:02:54 +01:00
parent ca247f6f58
commit 4bcbd704df
No known key found for this signature in database
GPG Key ID: 030CEDDCCC92D778
2 changed files with 51 additions and 22 deletions

View File

@ -918,7 +918,7 @@ TALER_cs_withdraw_nonce_derive (const struct
* @param[out] bs blinding secret to initialize
* @param cipher algorithm to use (CS or RSA)
* @param ... If CS signature, R_0 and R_1 (TALER_DenominationCsPublicR)
* and the coins private key is needed
* and the coins private key (TALER_CoinSpendPrivateKeyP) is needed
*/
void
TALER_blinding_secret_create (union TALER_DenominationBlindingKeyP *bs,
@ -936,7 +936,7 @@ TALER_blinding_secret_create (union TALER_DenominationBlindingKeyP *bs,
* @param[out] denom_priv where to write the private key
* @param[out] deonm_pub where to write the public key
* @param cipher which type of cipher to use
* @param ... cipher-specific parameters
* @param ... RSA key size (eg. 2048/3072/4096)
* @return #GNUNET_OK on success, #GNUNET_NO if parameters were invalid
*/
enum GNUNET_GenericReturnValue
@ -990,7 +990,8 @@ TALER_denom_cs_derive_r_public (const struct TALER_WithdrawNonce *nonce,
* @param[out] c_hash resulting hashed coin
* @param[out] coin_ev blinded coin to submit
* @param[out] coin_ev_size number of bytes in @a coin_ev
* @param ... cipher-specific parameters
* @param ... if CS algorithm, r_pub (TALER_DenominationCsPublicR) is needed to blind and
* r_pub_blind (TALER_DenominationCsPublicR) is an additional out parameter.
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
@ -1026,7 +1027,7 @@ TALER_denom_sign_blinded (struct TALER_BlindedDenominationSignature *denom_sig,
* @param bdenom_sig the blinded signature
* @param bks blinding secret to use
* @param denom_pub public key used for signing
* @param ... cipher-specific parameters
* @param ... If CS algorithm, r_pub_blind (TALER_DenominationCsPublicR) is an additional param
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
@ -1405,7 +1406,8 @@ TALER_planchet_setup_random (struct TALER_PlanchetSecretsP *ps,
* @param[out] c_hash set to the hash of the public key of the coin (needed later)
* @param[out] pd set to the planchet detail for TALER_MERCHANT_tip_pickup() and
* other withdraw operations
* @param ... cipher-specific parameters
* @param ... if CS algorithm, r_pub (TALER_DenominationCsPublicR) is needed to blind and
* r_pub_blind (TALER_DenominationCsPublicR) is an additional out parameter.
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue
@ -1425,7 +1427,8 @@ TALER_planchet_prepare (const struct TALER_DenominationPublicKey *dk,
* @param ps secrets from #TALER_planchet_prepare()
* @param c_hash hash of the coin's public key for verification of the signature
* @param[out] coin set to the details of the fresh coin
* @param ... cipher-specific parameters
* @param ... If CS algorithm, r_pub_blind (TALER_DenominationCsPublicR) is an additional param
* @return #GNUNET_OK on success
*/
enum GNUNET_GenericReturnValue

View File

@ -35,9 +35,6 @@ TALER_denom_priv_create (struct TALER_DenominationPrivateKey *denom_priv,
0,
sizeof (*denom_pub));
denom_priv->cipher = cipher;
denom_pub->cipher = cipher;
switch (cipher)
{
case TALER_DENOMINATION_INVALID:
@ -67,12 +64,16 @@ TALER_denom_priv_create (struct TALER_DenominationPrivateKey *denom_priv,
denom_pub->details.rsa_public_key
= GNUNET_CRYPTO_rsa_private_key_get_public (
denom_priv->details.rsa_private_key);
denom_priv->cipher = TALER_DENOMINATION_RSA;
denom_pub->cipher = TALER_DENOMINATION_RSA;
return GNUNET_OK;
case TALER_DENOMINATION_CS:
GNUNET_CRYPTO_cs_private_key_generate (&denom_priv->details.cs_private_key);
GNUNET_CRYPTO_cs_private_key_get_public (
&denom_priv->details.cs_private_key,
&denom_pub->details.cs_public_key);
denom_priv->cipher = TALER_DENOMINATION_CS;
denom_pub->cipher = TALER_DENOMINATION_CS;
return GNUNET_OK;
default:
GNUNET_break (0);
@ -296,7 +297,13 @@ TALER_denom_priv_to_pub (const struct TALER_DenominationPrivateKey *denom_priv,
= GNUNET_CRYPTO_rsa_private_key_get_public (
denom_priv->details.rsa_private_key);
return;
// TODO: add case for Clause-Schnorr
case TALER_DENOMINATION_CS:
denom_pub->cipher = TALER_DENOMINATION_CS;
denom_pub->age_mask = age_mask;
GNUNET_CRYPTO_cs_private_key_get_public (
&denom_priv->details.cs_private_key,
&denom_pub->details.cs_public_key);
return;
default:
GNUNET_assert (0);
}
@ -312,13 +319,14 @@ TALER_denom_blind (const struct TALER_DenominationPublicKey *dk,
struct TALER_BlindedPlanchet *blinded_planchet,
...)
{
blinded_planchet->cipher = dk->cipher;
TALER_coin_pub_hash (coin_pub,
age_commitment_hash,
c_hash);
switch (dk->cipher)
{
case TALER_DENOMINATION_RSA:
blinded_planchet->cipher = dk->cipher;
if (GNUNET_YES !=
GNUNET_CRYPTO_rsa_blind (&c_hash->hash,
&coin_bks->rsa_bks,
@ -334,6 +342,7 @@ TALER_denom_blind (const struct TALER_DenominationPublicKey *dk,
return GNUNET_OK;
case TALER_DENOMINATION_CS:
{
blinded_planchet->cipher = dk->cipher;
va_list ap;
va_start (ap, blinded_planchet);
struct TALER_DenominationCsPublicR *r_pub;
@ -399,7 +408,6 @@ TALER_denom_pub_verify (const struct TALER_DenominationPublicKey *denom_pub,
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Coin signature is invalid\n");
// return GNUNET_YES;
return GNUNET_NO;
}
return GNUNET_YES;
@ -425,7 +433,7 @@ TALER_denom_pub_free (struct TALER_DenominationPublicKey *denom_pub)
denom_pub->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
// TODO: ATM nothing needs to be freed, but check again after implementation.
// ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@ -449,7 +457,7 @@ TALER_denom_priv_free (struct TALER_DenominationPrivateKey *denom_priv)
denom_priv->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
// TODO: ATM nothing needs to be freed, but check again after implementation.
// ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@ -473,7 +481,7 @@ TALER_denom_sig_free (struct TALER_DenominationSignature *denom_sig)
denom_sig->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
// TODO: ATM nothing needs to be freed, but check again after implementation.
// ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@ -499,7 +507,7 @@ TALER_blinded_denom_sig_free (
denom_sig->cipher = TALER_DENOMINATION_INVALID;
return;
case TALER_DENOMINATION_CS:
// TODO: ATM nothing needs to be freed, but check again after implementation.
// ATM nothing needs to be freed, but check again after implementation.
return;
default:
GNUNET_assert (0);
@ -526,7 +534,9 @@ TALER_denom_pub_deep_copy (struct TALER_DenominationPublicKey *denom_dst,
= GNUNET_CRYPTO_rsa_public_key_dup (
denom_src->details.rsa_public_key);
return;
// TODO: add case for Clause-Schnorr
case TALER_DENOMINATION_CS:
// In Case of CS, the above is already a deep copy *denom_dst = *denom_src;
return;
default:
GNUNET_assert (0);
}
@ -547,7 +557,9 @@ TALER_denom_sig_deep_copy (struct TALER_DenominationSignature *denom_dst,
= GNUNET_CRYPTO_rsa_signature_dup (
denom_src->details.rsa_signature);
return;
// TODO: add case for Clause-Schnorr
case TALER_DENOMINATION_CS:
// In Case of CS, the above is already a deep copy *denom_dst = *denom_src;
return;
default:
GNUNET_assert (0);
}
@ -569,7 +581,9 @@ TALER_blinded_denom_sig_deep_copy (
= GNUNET_CRYPTO_rsa_signature_dup (
denom_src->details.blinded_rsa_signature);
return;
// TODO: add case for Clause-Schnorr
case TALER_DENOMINATION_CS:
// In Case of CS, the above is already a deep copy *denom_dst = *denom_src;
return;
default:
GNUNET_assert (0);
}
@ -591,7 +605,11 @@ TALER_denom_pub_cmp (const struct TALER_DenominationPublicKey *denom1,
case TALER_DENOMINATION_RSA:
return GNUNET_CRYPTO_rsa_public_key_cmp (denom1->details.rsa_public_key,
denom2->details.rsa_public_key);
// TODO: add case for Clause-Schnorr
case TALER_DENOMINATION_CS:
return 0 == GNUNET_memcmp (&denom1->details.cs_public_key,
&denom2->details.cs_public_key)
? GNUNET_OK
: GNUNET_SYSERR;
default:
GNUNET_assert (0);
}
@ -612,7 +630,11 @@ TALER_denom_sig_cmp (const struct TALER_DenominationSignature *sig1,
case TALER_DENOMINATION_RSA:
return GNUNET_CRYPTO_rsa_signature_cmp (sig1->details.rsa_signature,
sig2->details.rsa_signature);
// TODO: add case for Clause-Schnorr
case TALER_DENOMINATION_CS:
return 0 == GNUNET_memcmp (&sig1->details.cs_signature,
&sig2->details.cs_signature)
? GNUNET_OK
: GNUNET_SYSERR;
default:
GNUNET_assert (0);
}
@ -634,7 +656,11 @@ TALER_blinded_denom_sig_cmp (
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
case TALER_DENOMINATION_CS:
return 0 == GNUNET_memcmp (&sig1->details.blinded_cs_answer,
&sig2->details.blinded_cs_answer)
? GNUNET_OK
: GNUNET_SYSERR;
default:
GNUNET_assert (0);
}