Skip to content
Snippets Groups Projects
Commit c3a272fb authored by STEVAN Antoine's avatar STEVAN Antoine :crab:
Browse files

add an example to print the Fq and Fr of all the Arkworks' curves (!67)

parent a130ef98
No related branches found
No related tags found
1 merge request!67add an example to print the Fq and Fr of all the Arkworks' curves
Pipeline #4721 passed
......@@ -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]]
......
//! 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,
);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment