diff options
author | Christian Grothoff <grothoff@gnunet.org> | 2021-11-05 14:00:10 +0100 |
---|---|---|
committer | Christian Grothoff <grothoff@gnunet.org> | 2021-11-05 14:00:10 +0100 |
commit | 32da809fd665f1ac19210bf48952f1988f417fb8 (patch) | |
tree | eebd61cf482dddf83c1ce530f3aca0c045a33591 /src/util/denom.c | |
parent | 766922f7e9bd5570fd12b663e61f8bd622e51c78 (diff) | |
download | exchange-32da809fd665f1ac19210bf48952f1988f417fb8.tar.xz |
abstract denomination keys a bit more
Diffstat (limited to 'src/util/denom.c')
-rw-r--r-- | src/util/denom.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/util/denom.c b/src/util/denom.c index 15ba1c1ae..f251d9052 100644 --- a/src/util/denom.c +++ b/src/util/denom.c @@ -22,6 +22,93 @@ #include "taler_util.h" +enum GNUNET_GenericReturnValue +TALER_denom_priv_create (struct TALER_DenominationPrivateKey *denom_priv, + struct TALER_DenominationPublicKey *denom_pub, + enum TALER_DenominationCipher cipher, + ...) +{ + memset (denom_priv, + 0, + sizeof (*denom_priv)); + memset (denom_pub, + 0, + sizeof (*denom_pub)); + switch (cipher) + { + case TALER_DENOMINATION_INVALID: + GNUNET_break (0); + return GNUNET_SYSERR; + case TALER_DENOMINATION_RSA: + { + va_list ap; + unsigned int bits; + + va_start (ap, cipher); + bits = va_arg (ap, unsigned int); + va_end (ap); + if (bits < 512) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + denom_priv->details.rsa_private_key + = GNUNET_CRYPTO_rsa_private_key_create (bits); + } + if (NULL == denom_priv->details.rsa_private_key) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + denom_pub->details.rsa_public_key + = GNUNET_CRYPTO_rsa_private_key_get_public ( + denom_priv->details.rsa_private_key); + denom_priv->cipher = cipher; + denom_pub->cipher = cipher; + return GNUNET_OK; + // TODO: add case for Clause-Schnorr + default: + GNUNET_break (0); + } + return GNUNET_SYSERR; +} + + +enum GNUNET_GenericReturnValue +TALER_denom_sign_blinded (struct TALER_BlindedDenominationSignature *denom_sig, + const struct TALER_DenominationPrivateKey *denom_priv, + void *blinded_msg, + size_t blinded_msg_size) +{ + memset (denom_sig, + 0, + sizeof (*denom_sig)); + switch (denom_priv->cipher) + { + case TALER_DENOMINATION_INVALID: + GNUNET_break (0); + return GNUNET_SYSERR; + case TALER_DENOMINATION_RSA: + denom_sig->details.blinded_rsa_signature + = GNUNET_CRYPTO_rsa_sign_blinded ( + denom_priv->details.rsa_private_key, + blinded_msg, + blinded_msg_size); + if (NULL == denom_sig->details.blinded_rsa_signature) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + denom_sig->cipher = TALER_DENOMINATION_RSA; + return GNUNET_OK; + // TODO: add case for Clause-Schnorr + default: + GNUNET_break (0); + } + return GNUNET_SYSERR; +} + + void TALER_denom_pub_hash (const struct TALER_DenominationPublicKey *denom_pub, struct TALER_DenominationHash *denom_hash) |