2022-06-30 05:42:29 -04:00
|
|
|
use rand_core::OsRng;
|
|
|
|
|
|
2022-07-07 07:30:10 -04:00
|
|
|
use group::{ff::{Field, PrimeFieldBits}, prime::PrimeGroup};
|
|
|
|
|
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-07 07:30:10 -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);
|
|
|
|
|
SchnorrPoK::prove(
|
|
|
|
|
&mut OsRng,
|
|
|
|
|
&mut transcript.clone(),
|
|
|
|
|
G::generator(),
|
|
|
|
|
private
|
|
|
|
|
).verify(
|
|
|
|
|
&mut OsRng,
|
|
|
|
|
&mut transcript.clone(),
|
|
|
|
|
G::generator(),
|
|
|
|
|
G::generator() * private,
|
|
|
|
|
&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>();
|
|
|
|
|
}
|