#![allow(non_snake_case)]
extern crate zerocaf;
extern crate rand;
use zerocaf::field::FieldElement;
use zerocaf::scalar::Scalar;
use zerocaf::edwards::EdwardsPoint;
use rand::{Rng, thread_rng};
fn main() -> () {
let G: EdwardsPoint = EdwardsPoint {
X: FieldElement([23, 0, 0, 0, 0]),
Y: FieldElement([1664892896009688, 132583819244870, 812547420185263, 637811013879057, 13284180325998]),
Z: FieldElement([1, 0, 0, 0, 0]),
T: FieldElement([4351986304670635, 4020128726404030, 674192131526433, 1158854437106827, 6468984742885])
};
let scalar: Scalar = rand_scalar_generation();
println!("{:?}", scalar);
let P = &G * &scalar;
println!("{:?}", P);
}
pub fn rand_scalar_generation() -> Scalar {
let mut bytes = [0u8;32];
thread_rng().try_fill(&mut bytes[..31]).expect("Error getting the random bytes");
Scalar::from_bytes(&bytes)
}