cryptix-bn254 0.1.0

A library for bn254 elliptic curve related algorithms
Documentation
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]

use cryptix_bigint::bigint;
use cryptix_ecc::CurvePoint;
use cryptix_bn254::galoisfield::U256;
use cryptix_bn254::pairing::e1::BN254Fp;

#[test]
fn test_e1_point() {
    let p = BN254Fp::GENERATOR;
    assert!(p.on_curve(), "P not on curve");
    
    let p2 = p.double();
    let two = bigint!(U256, "02");
    let p2m = p.scalar_mul(two);
    assert!(p2m.on_curve());
    
    assert!(p2.on_curve(), "2P Jacobian not on curve");
    let q = p2.normalize();
    assert!(q.on_curve(), "2P Affine not on curve");
    // assert_eq!(p2a, p2);
    // assert_eq!(p2ma, p2);
    // assert_eq!(p2m, p2);

    let r = q + p;
    println!("{r:?}");
    assert!(r.on_curve(), "3P Jacobian not on curve");
    let r = r.normalize();
    assert!(r.on_curve(), "3P Affine not on curve");

    let s = r.mix_add(p);
    assert!(s.on_curve(), "4P Jacobian not on curve");
    let s = s.normalize();
    assert!(s.on_curve(), "4P Affine not on curve");
}

#[test]
fn test_e1_mul() {
    let k = bigint!(U256, "2123432234324423423434243432");

    let p = BN254Fp::GENERATOR.scalar_mul(k);
    assert!(p.on_curve());
}