mirror of
https://github.com/arnaucube/ark-r1cs-std.git
synced 2026-01-12 00:41:32 +01:00
crypto-primitives no-std (#96)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use algebra::Field;
|
||||
use std::hash::Hash;
|
||||
use core::hash::Hash;
|
||||
|
||||
use crate::crh::{
|
||||
bowe_hopwood::{BoweHopwoodPedersenCRH, BoweHopwoodPedersenParameters, CHUNK_SIZE},
|
||||
@@ -10,8 +10,8 @@ use algebra::groups::Group;
|
||||
use r1cs_core::{ConstraintSystem, SynthesisError};
|
||||
use r1cs_std::{alloc::AllocGadget, groups::GroupGadget, uint8::UInt8};
|
||||
|
||||
use core::{borrow::Borrow, marker::PhantomData};
|
||||
use r1cs_std::bits::boolean::Boolean;
|
||||
use std::{borrow::Borrow, marker::PhantomData};
|
||||
|
||||
#[derive(Derivative)]
|
||||
#[derivative(Clone(
|
||||
@@ -125,20 +125,21 @@ impl<G: Group, W: PedersenWindow, ConstraintF: Field, GG: GroupGadget<G, Constra
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use algebra::fields::sw6::fr::Fr;
|
||||
use rand::{thread_rng, Rng};
|
||||
|
||||
use crate::crh::{
|
||||
bowe_hopwood::{constraints::BoweHopwoodPedersenCRHGadget, BoweHopwoodPedersenCRH},
|
||||
pedersen::PedersenWindow,
|
||||
FixedLengthCRH, FixedLengthCRHGadget,
|
||||
};
|
||||
use algebra::{curves::edwards_sw6::EdwardsProjective as Edwards, ProjectiveCurve};
|
||||
use algebra::{
|
||||
curves::edwards_sw6::EdwardsProjective as Edwards, fields::sw6::fr::Fr, test_rng,
|
||||
ProjectiveCurve,
|
||||
};
|
||||
use r1cs_core::ConstraintSystem;
|
||||
use r1cs_std::{
|
||||
alloc::AllocGadget, groups::curves::twisted_edwards::edwards_sw6::EdwardsSWGadget,
|
||||
test_constraint_system::TestConstraintSystem, uint8::UInt8,
|
||||
};
|
||||
use rand::Rng;
|
||||
|
||||
type TestCRH = BoweHopwoodPedersenCRH<Edwards, Window>;
|
||||
type TestCRHGadget = BoweHopwoodPedersenCRHGadget<Edwards, Fr, EdwardsSWGadget>;
|
||||
@@ -168,7 +169,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn crh_primitive_gadget_test() {
|
||||
let rng = &mut thread_rng();
|
||||
let rng = &mut test_rng();
|
||||
let mut cs = TestConstraintSystem::<Fr>::new();
|
||||
|
||||
let (input, input_bytes) = generate_input(&mut cs, rng);
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
use crate::Error;
|
||||
use rand::Rng;
|
||||
use rayon::prelude::*;
|
||||
use std::{
|
||||
use crate::{Error, Vec};
|
||||
use core::{
|
||||
fmt::{Debug, Formatter, Result as FmtResult},
|
||||
marker::PhantomData,
|
||||
};
|
||||
use rand::Rng;
|
||||
#[cfg(feature = "parallel")]
|
||||
use rayon::prelude::*;
|
||||
|
||||
use super::pedersen::{bytes_to_bits, PedersenCRH, PedersenWindow};
|
||||
use crate::crh::FixedLengthCRH;
|
||||
use algebra::{biginteger::BigInteger, fields::PrimeField, groups::Group};
|
||||
use ff_fft::cfg_chunks;
|
||||
|
||||
#[cfg(feature = "r1cs")]
|
||||
pub mod constraints;
|
||||
@@ -126,12 +128,11 @@ impl<G: Group, W: PedersenWindow> FixedLengthCRH for BoweHopwoodPedersenCRH<G, W
|
||||
// (1-2*c_{i,j,2})*(1+c_{i,j,0}+2*c_{i,j,1})*2^{4*(j-1)} for all j in segment}
|
||||
// for all i. Described in section 5.4.1.7 in the Zcash protocol
|
||||
// specification.
|
||||
let result = padded_input
|
||||
.par_chunks(W::WINDOW_SIZE * CHUNK_SIZE)
|
||||
|
||||
let result = cfg_chunks!(padded_input, W::WINDOW_SIZE * CHUNK_SIZE)
|
||||
.zip(¶meters.generators)
|
||||
.map(|(segment_bits, segment_generators)| {
|
||||
segment_bits
|
||||
.par_chunks(CHUNK_SIZE)
|
||||
cfg_chunks!(segment_bits, CHUNK_SIZE)
|
||||
.zip(segment_generators)
|
||||
.map(|(chunk_bits, generator)| {
|
||||
let mut encoded = generator.clone();
|
||||
@@ -146,9 +147,10 @@ impl<G: Group, W: PedersenWindow> FixedLengthCRH for BoweHopwoodPedersenCRH<G, W
|
||||
}
|
||||
encoded
|
||||
})
|
||||
.reduce(G::zero, |a, b| a + &b)
|
||||
.sum::<G>()
|
||||
})
|
||||
.reduce(G::zero, |a, b| a + &b);
|
||||
.sum::<G>();
|
||||
|
||||
end_timer!(eval_time);
|
||||
|
||||
Ok(result)
|
||||
@@ -171,8 +173,7 @@ mod test {
|
||||
crh::{bowe_hopwood::BoweHopwoodPedersenCRH, pedersen::PedersenWindow},
|
||||
FixedLengthCRH,
|
||||
};
|
||||
use algebra::curves::edwards_sw6::EdwardsProjective;
|
||||
use rand::thread_rng;
|
||||
use algebra::{curves::edwards_sw6::EdwardsProjective, test_rng};
|
||||
|
||||
#[test]
|
||||
fn test_simple_bh() {
|
||||
@@ -183,7 +184,7 @@ mod test {
|
||||
const NUM_WINDOWS: usize = 8;
|
||||
}
|
||||
|
||||
let rng = &mut thread_rng();
|
||||
let rng = &mut test_rng();
|
||||
let params =
|
||||
<BoweHopwoodPedersenCRH<EdwardsProjective, TestWindow> as FixedLengthCRH>::setup(rng)
|
||||
.unwrap();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use algebra::Field;
|
||||
use std::fmt::Debug;
|
||||
use core::fmt::Debug;
|
||||
|
||||
use crate::crh::FixedLengthCRH;
|
||||
use r1cs_core::{ConstraintSystem, SynthesisError};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use std::{fmt::Debug, marker::PhantomData};
|
||||
use core::{fmt::Debug, marker::PhantomData};
|
||||
|
||||
use crate::crh::{
|
||||
injective_map::{InjectiveMap, PedersenCRHCompressor, TECompressor},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::{CryptoError, Error};
|
||||
use algebra::bytes::ToBytes;
|
||||
use core::{fmt::Debug, hash::Hash, marker::PhantomData};
|
||||
use rand::Rng;
|
||||
use std::{fmt::Debug, hash::Hash, marker::PhantomData};
|
||||
|
||||
use super::{
|
||||
pedersen::{PedersenCRH, PedersenParameters, PedersenWindow},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use algebra::bytes::ToBytes;
|
||||
use core::hash::Hash;
|
||||
use rand::Rng;
|
||||
use std::hash::Hash;
|
||||
|
||||
pub mod bowe_hopwood;
|
||||
pub mod injective_map;
|
||||
|
||||
@@ -6,7 +6,7 @@ use algebra::{Field, Group};
|
||||
use r1cs_core::{ConstraintSystem, SynthesisError};
|
||||
use r1cs_std::prelude::*;
|
||||
|
||||
use std::{borrow::Borrow, marker::PhantomData};
|
||||
use core::{borrow::Borrow, marker::PhantomData};
|
||||
|
||||
#[derive(Derivative)]
|
||||
#[derivative(Clone(
|
||||
@@ -114,19 +114,21 @@ impl<G: Group, W: PedersenWindow, ConstraintF: Field, GG: GroupGadget<G, Constra
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use algebra::fields::bls12_381::fr::Fr;
|
||||
use rand::{thread_rng, Rng};
|
||||
|
||||
use crate::crh::{
|
||||
pedersen::{constraints::PedersenCRHGadget, PedersenCRH, PedersenWindow},
|
||||
FixedLengthCRH, FixedLengthCRHGadget,
|
||||
};
|
||||
use algebra::curves::{jubjub::JubJubProjective as JubJub, ProjectiveCurve};
|
||||
use algebra::{
|
||||
curves::{jubjub::JubJubProjective as JubJub, ProjectiveCurve},
|
||||
fields::bls12_381::fr::Fr,
|
||||
test_rng,
|
||||
};
|
||||
use r1cs_core::ConstraintSystem;
|
||||
use r1cs_std::{
|
||||
groups::curves::twisted_edwards::jubjub::JubJubGadget, prelude::*,
|
||||
test_constraint_system::TestConstraintSystem,
|
||||
};
|
||||
use rand::Rng;
|
||||
|
||||
type TestCRH = PedersenCRH<JubJub, Window>;
|
||||
type TestCRHGadget = PedersenCRHGadget<JubJub, Fr, JubJubGadget>;
|
||||
@@ -156,7 +158,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn crh_primitive_gadget_test() {
|
||||
let rng = &mut thread_rng();
|
||||
let rng = &mut test_rng();
|
||||
let mut cs = TestConstraintSystem::<Fr>::new();
|
||||
|
||||
let (input, input_bytes) = generate_input(&mut cs, rng);
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
use crate::Error;
|
||||
use rand::Rng;
|
||||
use rayon::prelude::*;
|
||||
use std::{
|
||||
use crate::{Error, Vec};
|
||||
use core::{
|
||||
fmt::{Debug, Formatter, Result as FmtResult},
|
||||
marker::PhantomData,
|
||||
};
|
||||
use rand::Rng;
|
||||
#[cfg(feature = "parallel")]
|
||||
use rayon::prelude::*;
|
||||
|
||||
use crate::crh::FixedLengthCRH;
|
||||
use algebra::{groups::Group, Field, ToConstraintField};
|
||||
use ff_fft::cfg_chunks;
|
||||
|
||||
#[cfg(feature = "r1cs")]
|
||||
pub mod constraints;
|
||||
@@ -99,8 +101,8 @@ impl<G: Group, W: PedersenWindow> FixedLengthCRH for PedersenCRH<G, W> {
|
||||
);
|
||||
|
||||
// Compute sum of h_i^{m_i} for all i.
|
||||
let result = bytes_to_bits(input)
|
||||
.par_chunks(W::WINDOW_SIZE)
|
||||
let bits = bytes_to_bits(input);
|
||||
let result = cfg_chunks!(bits, W::WINDOW_SIZE)
|
||||
.zip(¶meters.generators)
|
||||
.map(|(bits, generator_powers)| {
|
||||
let mut encoded = G::zero();
|
||||
@@ -111,7 +113,8 @@ impl<G: Group, W: PedersenWindow> FixedLengthCRH for PedersenCRH<G, W> {
|
||||
}
|
||||
encoded
|
||||
})
|
||||
.reduce(G::zero, |a, b| a + &b);
|
||||
.sum::<G>();
|
||||
|
||||
end_timer!(eval_time);
|
||||
|
||||
Ok(result)
|
||||
|
||||
Reference in New Issue
Block a user