dragan2234 / banderwagon-cairo

Project for OnlyDust contributors - creating banderwagon scalar multiplication and point addition in cairo
MIT License
3 stars 1 forks source link

test point addition on bandersnatch #11

Open dragan2234 opened 6 months ago

dragan2234 commented 6 months ago

make few tests against either https://github.com/lambdaclass/lambdaworks/ or https://github.com/arkworks-rs/algebra/tree/master/curves/ed_on_bls12_381_bandersnatch or https://github.com/asanso/Bandersnatch

Examples from halo2curves, short weistrass form:

Projective:

5*G : Bandersnatch { x: 0x40956ab9e05451df8707992c91c4526a54d02f225ff92e05a3b8c842d2cd0cd0, y: 0x5f05e6a170a9d5d572fb739c4cab0b6ec4c083e9a4ff8882c6ff416963675941, z: 0x2489b407cd5d8a99dd70915afcaace836e003cff1985af40023e96ecb9179036 }
2*G : Bandersnatch { x: 0x0f94cf9c0036db4ff4890d9daeb6c1a4fde0a78fb505384776b31615cb94792c, y: 0x43f9bee793deed4fb50d2e38a4725873aa341bfb65bb054379282d434ed1afbe, z: 0x226302ac7f5507697fbc8ad4afef7797d29c996fcdc6d3088d62dbf1af0bb3e2 }
2G + 5G: Bandersnatch { x: 0x45a7102e26c2e7743145bcb5df6e1744c70574ae0f863ce453737062702242dc, y: 0x0b81bb642ec0eb759edc14c4eddd5fa0cb3b8669098f831d183e530d450220f7, z: 0x043e5c60e3d3b937e8ee2210849cc97a9ad299aff8742d1fb7bf0e668a89f16e }

Affine:

5*G : (0x402277ef8f68c3ef7aa3ac158567d930f12600386c527ea5d9398a50a0a197fd, 0x0bc423a33becdbc7e918b77e23faa3e762604d1b6811ff72c45089bf8a87af3c)
2*G : (0x46a3f84b1dd3df190f41bb5d19e7f116b0ddff87ce93610540ecb074d5ddb41c, 0x6148debcf8f22830d30438153c7fadf4a3ea0064ce8dcd6856122a66445b5fd2)
2G + 5G: (0x1ff379836cf53e576ca118cd1ec5b7575364df3a771ca9a79b4b04e1cbae4b15, 0x1b77173b983fccfd6b187122254b23b02d0383a0d4b447d8e4ac55d9094b6dde)
MatteoMer commented 6 months ago

With this code:

use ark_std::str::FromStr;
use std::env;

use ark_ec::{CurveGroup, VariableBaseMSM};

use ark_ed_on_bls12_381_bandersnatch::SWAffine;
use ark_ed_on_bls12_381_bandersnatch::SWProjective;
use ark_ed_on_bls12_381_bandersnatch::{Fq, Fr as ScalarField};

fn main() {
    let args: Vec<String> = env::args().collect();

    if args.len() == 1 {
        return;
    }

    if args[1] == "addFr" {
        let lhs = ScalarField::from_str(&args[2]).unwrap();
        let rhs = ScalarField::from_str(&args[3]).unwrap();
        println!("{}", lhs + rhs);
    } else if args[1] == "mulFr" {
        let lhs = ScalarField::from_str(&args[2]).unwrap();
        let rhs = ScalarField::from_str(&args[3]).unwrap();
        println!("{}", lhs * rhs);
    } else if args[1] == "addSW" {
        /*
        let x_a = Fq::from_str(&args[2]).unwrap();
        let y_a = Fq::from_str(&args[2]).unwrap();
        let x_b = Fq::from_str(&args[2]).unwrap();
        let y_b = Fq::from_str(&args[2]).unwrap();
        let point_a = SWAffine::new(x_a, y_a, false);
        let point_b = SWAffine::new(x_b, y_b, false);
        */

        let generator_x = Fq::from_str(
            "30900340493481298850216505686589334086208278925799850409469406976849338430199",
        )
        .unwrap();
        let generator_y = Fq::from_str(
            "12663882780877899054958035777720958383845500985908634476792678820121468453298",
        )
        .unwrap();

        let generator = SWAffine::new(generator_x, generator_y);
        // i want to do 5G here print it so we can get the values
        //
        // also i need to get the args in a good way (two dif points)
        let scalar = ScalarField::from_str("5").unwrap();
        let res = SWProjective::msm(&[generator], &[scalar]);
        let r = res.unwrap().into_affine();
        println!("{}", r);
    } else if args[1] == "mulSw" {
    }
}

I'm having different results for 5*G

(8768738582522594538485122038190459677397928262526825851355323624315152110043, 8208364587749463077245963347730518467382014917786377188869948942465072180633)

It's in decimal. but still different after conversion

MatteoMer commented 6 months ago

Using this tutorial for MSM https://github.com/arkworks-rs/algebra/tree/3a6156785e12eeb9083a7a402ac037de01f6c069/ec#scalar-multiplication

MatteoMer commented 6 months ago

So idk where the results are coming :D

dragan2234 commented 6 months ago

Thanks @MatteoMer ! just added affine results too in the description. I'll double-check halo2 implementation maybe it's wrong

dragan2234 commented 6 months ago

explanation for parameters confusion: https://github.com/arkworks-rs/curves/pull/158#discussion_r1323172895