bn/oldsrc/groups/tests.rs

77 lines
1.9 KiB
Rust

use super::*;
use ::Fr;
use fields::Field;
use rand::Rng;
pub fn group_trials<P: GroupParams>() {
fn test_doubling<P: GroupParams>() {
type G<P> = Jacobian<P>;
let one = G::<P>::one();
let two = one.add(&one);
let three = two.add(&one);
let four = three.add(&one);
assert_eq!(one.double(), two);
assert_eq!(two.double(), four);
}
fn random_test_addition<P: GroupParams, R: Rng>(rng: &mut R) {
type G<P> = Jacobian<P>;
for _ in 0..50 {
let r1 = &G::<P>::random(rng);
let r2 = &G::<P>::random(rng);
let r3 = &G::<P>::random(rng);
let s1 = (r1 + r2) + r3;
let s2 = (r2 + r3) + r1;
assert_eq!(s1, s2);
}
}
fn random_test_doubling<P: GroupParams, R: Rng>(rng: &mut R) {
type G<P> = Jacobian<P>;
for _ in 0..50 {
let r1 = &G::<P>::random(rng);
let r2 = &G::<P>::random(rng);
let a = (r1 + r2) + r1;
let b = r1.double() + r2;
assert!(a.eq(&b));
}
}
fn random_test_dh<P: GroupParams, R: Rng>(rng: &mut R) {
type G<P> = Jacobian<P>;
for _ in 0..50 {
let alice_sk = Fr::random(rng);
let bob_sk = Fr::random(rng);
let alice_pk = G::<P>::one() * &alice_sk;
let bob_pk = G::<P>::one() * &bob_sk;
let alice_shared = &bob_pk * &alice_sk;
let bob_shared = &alice_pk * &bob_sk;
assert_eq!(alice_shared, bob_shared);
}
}
test_doubling::<P>();
use rand::{SeedableRng,StdRng};
let seed: [usize; 4] = [103245, 191922, 1293, 192103];
let mut rng = StdRng::from_seed(&seed);
random_test_addition::<P, _>(&mut rng);
random_test_doubling::<P, _>(&mut rng);
random_test_dh::<P, _>(&mut rng);
}