use mcl::{init, bn::*, traits::*, common::Base};
fn main() {
init::init_curve(init::Curve::Bls12_381);
let g = G1::hash_and_map(b"something").unwrap();
let g2 = G2::hash_and_map(b"something else").unwrap();
let a = Fr::from_csprng();
let A = &g2 * &a;
let x = Fr::from_csprng();
let X = &g2 * &x;
let c = Fr::from_csprng();
let mut U = X.get_str(Base::Dec);
U.push_str(&c.get_str(Base::Dec));
let U = G1::hash_and_map(U.as_bytes()).unwrap();
let s = x + &a * &c;
let S = &U * s;
let e1 = GT::from_pairing(&U, &(X + A * c));
let e2 = GT::from_pairing(&S, &g2);
assert_eq!(e1, e2);
}