From c3a272fb755de55c1e40bae5d13831b969e82b68 Mon Sep 17 00:00:00 2001 From: STEVAN Antoine <antoine.stevan@isae-supaero.fr> Date: Tue, 9 Apr 2024 09:16:45 +0000 Subject: [PATCH] add an example to print the Fq and Fr of all the Arkworks' curves (dragoon/komodo!67) --- Cargo.toml | 26 +++++++++++ examples/curves.rs | 112 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 examples/curves.rs diff --git a/Cargo.toml b/Cargo.toml index bf76cdf2..b79c5b88 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,33 @@ tracing = "0.1.40" tracing-subscriber = "0.3.17" [dev-dependencies] +# all the curve dependencies below are used by the `curves` example +ark-bls12-377 = "0.4.0" +ark-bls12-381 = "0.4.0" +ark-bn254 = "0.4.0" +ark-bw6-761 = "0.4.0" +ark-cp6-782 = "0.4.0" +ark-curve25519 = "0.4.0" +ark-ed-on-bls12-377 = "0.4.0" +ark-ed-on-bls12-381 = "0.4.0" +ark-ed-on-bls12-381-bandersnatch = "0.4.0" +ark-ed-on-bn254 = "0.4.0" +ark-ed-on-bw6-761 = "0.4.0" +ark-ed-on-cp6-782 = "0.4.0" +ark-ed-on-mnt4-298 = "0.4.0" +ark-ed-on-mnt4-753 = "0.4.0" +ark-ed25519 = "0.4.0" +ark-mnt4-298 = "0.4.0" +ark-mnt4-753 = "0.4.0" +ark-mnt6-298 = "0.4.0" +ark-mnt6-753 = "0.4.0" +ark-pallas = "0.4.0" ark-poly-commit = "0.4.0" +ark-secp256k1 = "0.4.0" +ark-secp256r1 = "0.4.0" +ark-secp384r1 = "0.4.0" +ark-secq256k1 = "0.4.0" +ark-vesta = "0.4.0" criterion = "0.3" [[bench]] diff --git a/examples/curves.rs b/examples/curves.rs new file mode 100644 index 00000000..d972fa48 --- /dev/null +++ b/examples/curves.rs @@ -0,0 +1,112 @@ +//! example usage of this example code +//! ```shell +//! cargo run --example curves +//! | lines +//! | parse "{curve}: {fq} -> {fr}" +//! | into int fq fr +//! | insert x { (1 - $in.fr / $in.fq) * 100 | math round --precision 1 } +//! ``` +//! +//! which gives the followin table +//! +//! | curve | fq | fr | x | +//! | -------------------------------- | --- | --- | ---- | +//! | ark_bls12_377 | 377 | 253 | 32.9 | +//! | ark_bls12_381 | 381 | 255 | 33.1 | +//! | ark_bn254 | 254 | 254 | 0 | +//! | ark_bw6_761 | 761 | 377 | 50.5 | +//! | ark_cp6_782 | 782 | 377 | 51.8 | +//! | ark_curve25519 | 255 | 253 | 0.8 | +//! | ark_ed_on_bls12_377 | 253 | 251 | 0.8 | +//! | ark_ed_on_bls12_381 | 255 | 252 | 1.2 | +//! | ark_ed_on_bls12_381_bandersnatch | 255 | 253 | 0.8 | +//! | ark_ed_on_bn254 | 254 | 251 | 1.2 | +//! | ark_ed_on_bw6_761 | 377 | 374 | 0.8 | +//! | ark_ed_on_cp6_782 | 377 | 374 | 0.8 | +//! | ark_ed_on_mnt4_298 | 298 | 296 | 0.7 | +//! | ark_ed_on_mnt4_753 | 753 | 750 | 0.4 | +//! | ark_ed25519 | 255 | 253 | 0.8 | +//! | ark_mnt4_298 | 298 | 298 | 0 | +//! | ark_mnt4_753 | 753 | 753 | 0 | +//! | ark_mnt6_298 | 298 | 298 | 0 | +//! | ark_mnt6_753 | 753 | 753 | 0 | +//! | ark_pallas | 255 | 255 | 0 | +//! | ark_secp256k1 | 256 | 256 | 0 | +//! | ark_secp256r1 | 256 | 256 | 0 | +//! | ark_secp384r1 | 384 | 384 | 0 | +//! | ark_secq256k1 | 256 | 256 | 0 | +//! | ark_vesta | 255 | 255 | 0 | +use ark_ff::PrimeField; + +fn show_curve<Fr: PrimeField, Fq: PrimeField>(name: &str) { + println!( + "{}: {} -> {}", + name, + Fq::MODULUS_BIT_SIZE, + Fr::MODULUS_BIT_SIZE + ); +} + +/// takes a sequence of curve crate names and calls the [`show_curve`] function +/// for you +/// +/// this macro accepts a trailling comma in case you have a big list that spans +/// over multiple lines, e.g. +/// +/// ## examples +/// ```rust +/// show_curve(ark_bls12_381) +/// ``` +/// or +/// ```rust +/// show_curve( +/// ark_bls12_381, +/// ark_bn254, +/// ark_pallas, +/// ark_vesta +/// ) +/// ``` +/// or +/// ```rust +/// show_curve( +/// ark_bls12_381, +/// ark_bn254, +/// ark_pallas, +/// ark_vesta, +/// ) +/// ``` +macro_rules! show_curve { + ($($c:ident),+ $(,)?) => { + $(show_curve::<$c::Fr, $c::Fq>(stringify!($c));)* + } +} + +fn main() { + show_curve!( + ark_bls12_377, + ark_bls12_381, + ark_bn254, + ark_bw6_761, + ark_cp6_782, + ark_curve25519, + ark_ed_on_bls12_377, + ark_ed_on_bls12_381, + ark_ed_on_bls12_381_bandersnatch, + ark_ed_on_bn254, + ark_ed_on_bw6_761, + ark_ed_on_cp6_782, + ark_ed_on_mnt4_298, + ark_ed_on_mnt4_753, + ark_ed25519, + ark_mnt4_298, + ark_mnt4_753, + ark_mnt6_298, + ark_mnt6_753, + ark_pallas, + ark_secp256k1, + ark_secp256r1, + ark_secp384r1, + ark_secq256k1, + ark_vesta, + ); +} -- GitLab