mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-03 22:33:06 +00:00
wip: start moving starky to no-std
Signed-off-by: Brandon H. Gomes <bhgomes@pm.me>
This commit is contained in:
parent
38e467f1c0
commit
fc3f63398d
@ -3,6 +3,9 @@ name = "plonky2_ecdsa"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
parallel = ["maybe_rayon/parallel", "plonky2/parallel"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = { version = "1.0.40", default-features = false }
|
anyhow = { version = "1.0.40", default-features = false }
|
||||||
itertools = { version = "0.10.0", default-features = false }
|
itertools = { version = "0.10.0", default-features = false }
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use maybe_rayon::{MaybeIntoParIter, MaybeParChunks};
|
use maybe_rayon::*;
|
||||||
use plonky2::field::types::{Field, PrimeField};
|
use plonky2::field::types::{Field, PrimeField};
|
||||||
|
|
||||||
use crate::curve::curve_summation::affine_multisummation_best;
|
use crate::curve::curve_summation::affine_multisummation_best;
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
#![allow(clippy::return_self_not_must_use)]
|
#![allow(clippy::return_self_not_must_use)]
|
||||||
#![feature(generic_const_exprs)]
|
#![feature(generic_const_exprs)]
|
||||||
#![feature(specialization)]
|
#![feature(specialization)]
|
||||||
#![feature(stdsimd)]
|
|
||||||
#![cfg_attr(not(test), no_std)]
|
#![cfg_attr(not(test), no_std)]
|
||||||
|
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
use std::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use std::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use plonky2::field::extension::{Extendable, FieldExtension};
|
use plonky2::field::extension::{Extendable, FieldExtension};
|
||||||
use plonky2::field::types::Field;
|
use plonky2::field::types::Field;
|
||||||
|
|||||||
@ -3,7 +3,6 @@ name = "maybe_rayon"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
||||||
[features]
|
[features]
|
||||||
parallel = ["rayon"]
|
parallel = ["rayon"]
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,16 @@
|
|||||||
#[cfg(not(feature = "parallel"))]
|
#[cfg(not(feature = "parallel"))]
|
||||||
use std::{
|
use core::{
|
||||||
iter::{FlatMap, IntoIterator, Iterator},
|
iter::{FlatMap, IntoIterator, Iterator},
|
||||||
slice::{Chunks, ChunksExact, ChunksExactMut, ChunksMut},
|
slice::{Chunks, ChunksExact, ChunksExactMut, ChunksMut},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "parallel")]
|
#[cfg(feature = "parallel")]
|
||||||
pub use rayon::prelude::{
|
pub use rayon::{
|
||||||
IndexedParallelIterator, ParallelDrainFull, ParallelDrainRange, ParallelExtend,
|
self,
|
||||||
ParallelIterator,
|
prelude::{
|
||||||
|
IndexedParallelIterator, ParallelDrainFull, ParallelDrainRange, ParallelExtend,
|
||||||
|
ParallelIterator,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
#[cfg(feature = "parallel")]
|
#[cfg(feature = "parallel")]
|
||||||
use rayon::{
|
use rayon::{
|
||||||
|
|||||||
@ -41,7 +41,6 @@ num_cpus = { version = "1.14.0", default-features = false }
|
|||||||
plonky2 = { path = "." }
|
plonky2 = { path = "." }
|
||||||
rand = { version = "0.8.4", default-features = false, features = ["getrandom"] }
|
rand = { version = "0.8.4", default-features = false, features = ["getrandom"] }
|
||||||
rand_chacha = { version = "0.3.1", default-features = false }
|
rand_chacha = { version = "0.3.1", default-features = false }
|
||||||
rayon = { version = "1.5.1", default-features = false }
|
|
||||||
serde_cbor = { version = "0.11.2" }
|
serde_cbor = { version = "0.11.2" }
|
||||||
structopt = { version = "0.3.26", default-features = false }
|
structopt = { version = "0.3.26", default-features = false }
|
||||||
tynm = { version = "0.1.6", default-features = false }
|
tynm = { version = "0.1.6", default-features = false }
|
||||||
|
|||||||
@ -1,6 +1,3 @@
|
|||||||
#![allow(incomplete_features)]
|
|
||||||
#![feature(generic_const_exprs)]
|
|
||||||
|
|
||||||
mod allocator;
|
mod allocator;
|
||||||
|
|
||||||
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
|
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
|
||||||
|
|||||||
@ -1,6 +1,3 @@
|
|||||||
#![allow(incomplete_features)]
|
|
||||||
#![feature(generic_const_exprs)]
|
|
||||||
|
|
||||||
mod allocator;
|
mod allocator;
|
||||||
|
|
||||||
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
|
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
|
||||||
@ -14,10 +11,7 @@ use tynm::type_name;
|
|||||||
|
|
||||||
const ELEMS_PER_LEAF: usize = 135;
|
const ELEMS_PER_LEAF: usize = 135;
|
||||||
|
|
||||||
pub(crate) fn bench_merkle_tree<F: RichField, H: Hasher<F>>(c: &mut Criterion)
|
pub(crate) fn bench_merkle_tree<F: RichField, H: Hasher<F>>(c: &mut Criterion) {
|
||||||
where
|
|
||||||
[(); H::HASH_SIZE]:,
|
|
||||||
{
|
|
||||||
let mut group = c.benchmark_group(&format!(
|
let mut group = c.benchmark_group(&format!(
|
||||||
"merkle-tree<{}, {}>",
|
"merkle-tree<{}, {}>",
|
||||||
type_name::<F>(),
|
type_name::<F>(),
|
||||||
|
|||||||
@ -2,8 +2,6 @@
|
|||||||
// custom CLI argument parsing (even with harness disabled). We could also have
|
// custom CLI argument parsing (even with harness disabled). We could also have
|
||||||
// put it in `src/bin/`, but then we wouldn't have access to
|
// put it in `src/bin/`, but then we wouldn't have access to
|
||||||
// `[dev-dependencies]`.
|
// `[dev-dependencies]`.
|
||||||
#![allow(incomplete_features)]
|
|
||||||
#![feature(generic_const_exprs)]
|
|
||||||
|
|
||||||
use core::num::ParseIntError;
|
use core::num::ParseIntError;
|
||||||
use core::ops::RangeInclusive;
|
use core::ops::RangeInclusive;
|
||||||
@ -11,6 +9,7 @@ use core::str::FromStr;
|
|||||||
|
|
||||||
use anyhow::{anyhow, Context as _, Result};
|
use anyhow::{anyhow, Context as _, Result};
|
||||||
use log::{info, Level, LevelFilter};
|
use log::{info, Level, LevelFilter};
|
||||||
|
use maybe_rayon::rayon;
|
||||||
use plonky2::gates::noop::NoopGate;
|
use plonky2::gates::noop::NoopGate;
|
||||||
use plonky2::hash::hash_types::RichField;
|
use plonky2::hash::hash_types::RichField;
|
||||||
use plonky2::iop::witness::{PartialWitness, Witness};
|
use plonky2::iop::witness::{PartialWitness, Witness};
|
||||||
@ -18,7 +17,7 @@ use plonky2::plonk::circuit_builder::CircuitBuilder;
|
|||||||
use plonky2::plonk::circuit_data::{
|
use plonky2::plonk::circuit_data::{
|
||||||
CircuitConfig, CommonCircuitData, VerifierCircuitTarget, VerifierOnlyCircuitData,
|
CircuitConfig, CommonCircuitData, VerifierCircuitTarget, VerifierOnlyCircuitData,
|
||||||
};
|
};
|
||||||
use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, Hasher, PoseidonGoldilocksConfig};
|
use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, PoseidonGoldilocksConfig};
|
||||||
use plonky2::plonk::proof::{CompressedProofWithPublicInputs, ProofWithPublicInputs};
|
use plonky2::plonk::proof::{CompressedProofWithPublicInputs, ProofWithPublicInputs};
|
||||||
use plonky2::plonk::prover::prove;
|
use plonky2::plonk::prover::prove;
|
||||||
use plonky2::util::timing::TimingTree;
|
use plonky2::util::timing::TimingTree;
|
||||||
@ -65,10 +64,7 @@ struct Options {
|
|||||||
fn dummy_proof<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>(
|
fn dummy_proof<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>(
|
||||||
config: &CircuitConfig,
|
config: &CircuitConfig,
|
||||||
log2_size: usize,
|
log2_size: usize,
|
||||||
) -> Result<ProofTuple<F, C, D>>
|
) -> Result<ProofTuple<F, C, D>> {
|
||||||
where
|
|
||||||
[(); C::Hasher::HASH_SIZE]:,
|
|
||||||
{
|
|
||||||
// 'size' is in degree, but we want number of noop gates. A non-zero amount of padding will be added and size will be rounded to the next power of two. To hit our target size, we go just under the previous power of two and hope padding is less than half the proof.
|
// 'size' is in degree, but we want number of noop gates. A non-zero amount of padding will be added and size will be rounded to the next power of two. To hit our target size, we go just under the previous power of two and hope padding is less than half the proof.
|
||||||
let num_dummy_gates = match log2_size {
|
let num_dummy_gates = match log2_size {
|
||||||
0 => return Err(anyhow!("size must be at least 1")),
|
0 => return Err(anyhow!("size must be at least 1")),
|
||||||
@ -106,7 +102,6 @@ fn recursive_proof<
|
|||||||
) -> Result<ProofTuple<F, C, D>>
|
) -> Result<ProofTuple<F, C, D>>
|
||||||
where
|
where
|
||||||
InnerC::Hasher: AlgebraicHasher<F>,
|
InnerC::Hasher: AlgebraicHasher<F>,
|
||||||
[(); C::Hasher::HASH_SIZE]:,
|
|
||||||
{
|
{
|
||||||
let (inner_proof, inner_vd, inner_cd) = inner;
|
let (inner_proof, inner_vd, inner_cd) = inner;
|
||||||
let mut builder = CircuitBuilder::<F, D>::new(config.clone());
|
let mut builder = CircuitBuilder::<F, D>::new(config.clone());
|
||||||
@ -150,10 +145,7 @@ fn test_serialization<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>,
|
|||||||
proof: &ProofWithPublicInputs<F, C, D>,
|
proof: &ProofWithPublicInputs<F, C, D>,
|
||||||
vd: &VerifierOnlyCircuitData<C, D>,
|
vd: &VerifierOnlyCircuitData<C, D>,
|
||||||
cd: &CommonCircuitData<F, D>,
|
cd: &CommonCircuitData<F, D>,
|
||||||
) -> Result<()>
|
) -> Result<()> {
|
||||||
where
|
|
||||||
[(); C::Hasher::HASH_SIZE]:,
|
|
||||||
{
|
|
||||||
let proof_bytes = proof.to_bytes();
|
let proof_bytes = proof.to_bytes();
|
||||||
info!("Proof length: {} bytes", proof_bytes.len());
|
info!("Proof length: {} bytes", proof_bytes.len());
|
||||||
let proof_from_bytes = ProofWithPublicInputs::from_bytes(proof_bytes, cd)?;
|
let proof_from_bytes = ProofWithPublicInputs::from_bytes(proof_bytes, cd)?;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use std::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
use plonky2::field::extension::Extendable;
|
use plonky2::field::extension::Extendable;
|
||||||
use plonky2::field::packed::PackedField;
|
use plonky2::field::packed::PackedField;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use std::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
use plonky2::field::extension::{Extendable, FieldExtension};
|
use plonky2::field::extension::{Extendable, FieldExtension};
|
||||||
use plonky2::field::packed::PackedField;
|
use plonky2::field::packed::PackedField;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use std::iter::once;
|
use core::iter::once;
|
||||||
|
|
||||||
use anyhow::{ensure, Result};
|
use anyhow::{ensure, Result};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use std::iter::once;
|
use core::iter::once;
|
||||||
|
|
||||||
use anyhow::{ensure, Result};
|
use anyhow::{ensure, Result};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use std::iter::once;
|
use core::iter::once;
|
||||||
|
|
||||||
use anyhow::{anyhow, ensure, Result};
|
use anyhow::{anyhow, ensure, Result};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user