mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
31 lines
954 B
Rust
31 lines
954 B
Rust
|
|
use rand_core::{RngCore, OsRng};
|
||
|
|
|
||
|
|
use multiexp::BatchVerifier;
|
||
|
|
use group::ff::Field;
|
||
|
|
use dalek_ff_group::{Scalar, EdwardsPoint};
|
||
|
|
|
||
|
|
use crate::{
|
||
|
|
Commitment,
|
||
|
|
ringct::bulletproofs::plus::aggregate_range_proof::{
|
||
|
|
AggregateRangeStatement, AggregateRangeWitness,
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
#[test]
|
||
|
|
fn test_aggregate_range_proof() {
|
||
|
|
let mut verifier = BatchVerifier::new(16);
|
||
|
|
for m in 1 ..= 16 {
|
||
|
|
let mut commitments = vec![];
|
||
|
|
for _ in 0 .. m {
|
||
|
|
commitments.push(Commitment::new(*Scalar::random(&mut OsRng), OsRng.next_u64()));
|
||
|
|
}
|
||
|
|
let commitment_points = commitments.iter().map(|com| EdwardsPoint(com.calculate())).collect();
|
||
|
|
let statement = AggregateRangeStatement::new(commitment_points).unwrap();
|
||
|
|
let witness = AggregateRangeWitness::new(&commitments).unwrap();
|
||
|
|
|
||
|
|
let proof = statement.clone().prove(&mut OsRng, witness).unwrap();
|
||
|
|
statement.verify(&mut OsRng, &mut verifier, (), proof);
|
||
|
|
}
|
||
|
|
assert!(verifier.verify_vartime());
|
||
|
|
}
|