summaryrefslogtreecommitdiff
path: root/src/include/taler_crypto_lib.h
diff options
context:
space:
mode:
authorÖzgür Kesim <oec-taler@kesim.org>2023-03-01 11:11:46 +0100
committerÖzgür Kesim <oec-taler@kesim.org>2023-03-01 11:11:46 +0100
commitb4128c2c2a9df7bf3bacdbbb8e2e9ef250a3382e (patch)
tree44a5cf84176add7a43ca1146d0a797ddff1d8353 /src/include/taler_crypto_lib.h
parent7f518fff1aeedb5e7e52525fd96eb6beee5e6f87 (diff)
downloadexchange-b4128c2c2a9df7bf3bacdbbb8e2e9ef250a3382e.tar.gz
exchange-b4128c2c2a9df7bf3bacdbbb8e2e9ef250a3382e.tar.bz2
exchange-b4128c2c2a9df7bf3bacdbbb8e2e9ef250a3382e.zip
WiP: age-withdraw implementation, part 1/n
Commit phase of the age-withdraw protocol implemented, according to https://docs.taler.net/core/api-exchange.html#withdraw-with-age-restriction
Diffstat (limited to 'src/include/taler_crypto_lib.h')
-rw-r--r--src/include/taler_crypto_lib.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 1a3b40e4d..b6ec2ed8e 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -46,6 +46,7 @@
* fixed and part of the protocol.
*/
#define TALER_CNC_KAPPA 3
+#define TALER_CNC_KAPPA_MINUS_ONE_STR "2"
/* ****************** Coin crypto primitives ************* */
@@ -436,6 +437,15 @@ struct TALER_AgeCommitmentPublicKeyP
};
+/*
+ * @brief Hash to represent the commitment to n*kappa blinded keys during a age-withdrawal.
+ */
+struct TALER_AgeWithdrawCommitmentHashP
+{
+ struct GNUNET_HashCode hash;
+};
+
+
/**
* @brief Type of online public keys used by the wallet to establish a purse and the associated contract meta data.
*/
@@ -3701,6 +3711,42 @@ TALER_wallet_withdraw_verify (
/**
+ * Sign age-withdraw request.
+ *
+ * @param h_commitment hash all n*kappa blinded coins in the commitment for the age-withdraw
+ * @param amount_with_fee amount to debit the reserve for
+ * @param max_age_group maximum age group that the withdrawn coins must be restricted to
+ * @param reserve_priv private key to sign with
+ * @param[out] reserve_sig resulting signature
+ */
+void
+TALER_wallet_age_withdraw_sign (
+ const struct TALER_AgeWithdrawCommitmentHashP *h_commitment,
+ const struct TALER_Amount *amount_with_fee,
+ uint32_t max_age_group,
+ const struct TALER_ReservePrivateKeyP *reserve_priv,
+ struct TALER_ReserveSignatureP *reserve_sig);
+
+/**
+ * Verify an age-withdraw request.
+ *
+ * @param h_commitment hash all n*kappa blinded coins in the commitment for the age-withdraw
+ * @param amount_with_fee amount to debit the reserve for
+ * @param max_age_group maximum age group that the withdrawn coins must be restricted to
+ * @param reserve_pub public key of the reserve
+ * @param reserve_sig resulting signature
+ * @return #GNUNET_OK if the signature is valid
+ */
+enum GNUNET_GenericReturnValue
+TALER_wallet_age_withdraw_verify (
+ const struct TALER_AgeWithdrawCommitmentHashP *h_commitment,
+ const struct TALER_Amount *amount_with_fee,
+ uint32_t max_age_group,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
+ const struct TALER_ReserveSignatureP *reserve_sig);
+
+
+/**
* Verify exchange melt confirmation.
*
* @param rc refresh session this is about
@@ -4789,6 +4835,25 @@ TALER_exchange_online_purse_status_verify (
const struct TALER_ExchangeSignatureP *exchange_sig);
+/**
+ * Create age-withdraw confirmation signature.
+ *
+ * @param scb function to call to create the signature
+ * @param awch age-withdraw commitment that identifies the n*kappa blinded coins
+ * @param noreveal_index gamma cut-and-choose value chosen by the exchange
+ * @param[out] pub where to write the exchange public key
+ * @param[out] sig where to write the exchange signature
+ * @return #TALER_EC_NONE on success
+ */
+enum TALER_ErrorCode
+TALER_exchange_online_age_withdraw_confirmation_sign (
+ TALER_ExchangeSignCallback scb,
+ const struct TALER_AgeWithdrawCommitmentHashP *h_commitment,
+ uint32_t noreveal_index,
+ struct TALER_ExchangePublicKeyP *pub,
+ struct TALER_ExchangeSignatureP *sig);
+
+
/* ********************* offline signing ************************** */