From 7a5ba6f56a307dd3e0013564dd32b2eebdcc7c85 Mon Sep 17 00:00:00 2001 From: arnaucube Date: Tue, 29 Nov 2022 16:38:59 +0100 Subject: [PATCH] Add BlindSignatureScheme trait abstraction --- src/lib.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index bacfbda..073a8ba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,58 @@ +use ark_std::rand::Rng; + pub mod mala_nezhadansari; pub mod schnorr_blind; + +use ark_ff::PrimeField; +use arkworks_native_gadgets::poseidon; + +pub trait BlindSignatureScheme { + type Parameters; + type Fq; + type Fr; + type ConstraintF: PrimeField; + type PointAffine; + type SecretKey; + type PublicKey; + type BlindedSignature; + type Signature; + type UserSecretData; + + fn setup(hash: &poseidon::Poseidon) -> Self::Parameters; + + fn keygen( + parameters: &Self::Parameters, + rng: &mut R, + ) -> (Self::PublicKey, Self::SecretKey); + + fn new_request_params( + parameters: &Self::Parameters, + rng: &mut R, + ) -> (Self::Fr, Self::PointAffine); + + fn blind_sign(sk: Self::SecretKey, r: Self::Fr, m_blinded: Self::Fr) -> Self::BlindedSignature; + + fn unblind(s_blinded: Self::Fr, u: &Self::UserSecretData) -> Self::Signature; + + fn non_blind_sign( + parameters: &Self::Parameters, + rng: &mut R, + sk: Self::SecretKey, + m: &[Self::ConstraintF], + ) -> Result; + + fn blind( + parameters: &Self::Parameters, + rng: &mut R, + m: &[Self::ConstraintF], + signer_pk: Self::PublicKey, + signer_r: Self::PointAffine, + ) -> Result<(Self::Fr, Self::UserSecretData), ark_crypto_primitives::Error>; + + fn verify( + parameters: &Self::Parameters, + m: &[Self::ConstraintF], + s: Self::Signature, + q: Self::PublicKey, + ) -> bool; +}