2022-06-30 05:42:29 -04:00
|
|
|
use rand_core::OsRng;
|
|
|
|
|
|
2022-07-15 01:26:07 -04:00
|
|
|
use group::{
|
|
|
|
|
ff::{Field, PrimeFieldBits},
|
|
|
|
|
prime::PrimeGroup,
|
|
|
|
|
};
|
2022-07-07 07:30:10 -04:00
|
|
|
use multiexp::BatchVerifier;
|
2022-06-30 05:42:29 -04:00
|
|
|
|
2022-07-12 03:38:59 -04:00
|
|
|
use transcript::{Transcript, RecommendedTranscript};
|
2022-06-30 05:42:29 -04:00
|
|
|
|
|
|
|
|
use crate::cross_group::schnorr::SchnorrPoK;
|
|
|
|
|
|
2022-07-15 01:26:07 -04:00
|
|
|
fn test_schnorr<G: PrimeGroup>()
|
|
|
|
|
where
|
|
|
|
|
G::Scalar: PrimeFieldBits,
|
|
|
|
|
{
|
2022-06-30 05:42:29 -04:00
|
|
|
let private = G::Scalar::random(&mut OsRng);
|
|
|
|
|
|
|
|
|
|
let transcript = RecommendedTranscript::new(b"Schnorr Test");
|
2022-07-07 07:30:10 -04:00
|
|
|
let mut batch = BatchVerifier::new(3);
|
2022-07-15 01:26:07 -04:00
|
|
|
SchnorrPoK::prove(&mut OsRng, &mut transcript.clone(), G::generator(), private).verify(
|
2022-07-07 07:30:10 -04:00
|
|
|
&mut OsRng,
|
|
|
|
|
&mut transcript.clone(),
|
|
|
|
|
G::generator(),
|
|
|
|
|
G::generator() * private,
|
2022-07-15 01:26:07 -04:00
|
|
|
&mut batch,
|
2022-06-30 05:42:29 -04:00
|
|
|
);
|
2022-07-07 07:30:10 -04:00
|
|
|
assert!(batch.verify_vartime());
|
2022-06-30 05:42:29 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_secp256k1() {
|
|
|
|
|
test_schnorr::<k256::ProjectivePoint>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_ed25519() {
|
|
|
|
|
test_schnorr::<dalek_ff_group::EdwardsPoint>();
|
|
|
|
|
}
|