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; }