#[cfg(test)]
mod test {
use std::sync::Arc;
use curve25519_dalek::{RistrettoPoint, Scalar};
use merlin::Transcript;
use rand_chacha::ChaCha12Rng;
use rand_core::SeedableRng;
use triptych::parallel::*;
#[allow(non_snake_case)]
#[test]
fn ringct() {
let mut rng = ChaCha12Rng::seed_from_u64(8675309);
let n = 2;
let m = 4;
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
let number_outputs = params.get_N();
let H = RistrettoPoint::random(&mut rng);
let mut output_keys = (0..number_outputs)
.map(|_| RistrettoPoint::random(&mut rng))
.collect::<Vec<RistrettoPoint>>();
let mut value_commitments = (0..number_outputs)
.map(|_| RistrettoPoint::random(&mut rng))
.collect::<Vec<RistrettoPoint>>();
let index: u32 = 7;
let signing_key = Scalar::random(&mut rng);
output_keys[index as usize] = signing_key * params.get_G();
let commitment_value = Scalar::from(12345u32);
let commitment_mask = Scalar::random(&mut rng);
value_commitments[index as usize] = commitment_value * H + commitment_mask * params.get_G1();
let offset_mask = Scalar::random(&mut rng);
let offset = commitment_value * H + offset_mask * params.get_G1();
let witness = TriptychWitness::new(¶ms, index, &signing_key, &(commitment_mask - offset_mask)).unwrap();
let input_set = Arc::new(TriptychInputSet::new(&output_keys, &value_commitments).unwrap());
let statement = TriptychStatement::new(¶ms, &input_set, &offset, &witness.compute_linking_tag()).unwrap();
let mut transcript = Transcript::new(b"An example of RingCT with Triptych");
let proof = TriptychProof::prove_with_rng(&witness, &statement, &mut rng, &mut transcript.clone()).unwrap();
assert!(proof.verify(&statement, &mut transcript).is_ok());
}
}