Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 43 additions & 1 deletion crates/crypto/src/fiat_shamir/default_transcript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,13 @@ mod tests {
use super::*;

use alloc::vec::Vec;
use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::default_types::FrField;
use lambdaworks_math::{
elliptic_curve::short_weierstrass::curves::bls12_381::default_types::FrField,
field::fields::fft_friendly::{
babybear_u32::Babybear31PrimeField,
quartic_babybear_u32::Degree4BabyBearU32ExtensionField,
},
};

#[test]
fn basic_challenge() {
Expand Down Expand Up @@ -116,4 +122,40 @@ mod tests {
]
);
}

type FE = FieldElement<Babybear31PrimeField>;
type Fp4E = FieldElement<Degree4BabyBearU32ExtensionField>;

#[test]
fn quartic_baby_bear_transcript_distinguish_different_fe() {
let mut transcript_1 = DefaultTranscript::<Degree4BabyBearU32ExtensionField>::default();
transcript_1.append_field_element(&Fp4E::new([
FE::one(),
FE::zero(),
FE::zero(),
FE::zero(),
]));
let sample_1 = transcript_1.sample_field_element();

let mut transcript_2 = DefaultTranscript::<Degree4BabyBearU32ExtensionField>::default();
transcript_2.append_field_element(&Fp4E::new([
FE::zero(),
FE::zero(),
FE::zero(),
FE::one(),
]));
let sample_2 = transcript_2.sample_field_element();

let mut transcript_3 = DefaultTranscript::<Degree4BabyBearU32ExtensionField>::default();
transcript_3.append_field_element(&Fp4E::new([
FE::one(),
FE::zero(),
FE::zero(),
FE::zero(),
]));
let sample_3 = transcript_3.sample_field_element();

assert!(sample_1 != sample_2);
assert!(sample_1 == sample_3);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::field::{
element::FieldElement,
errors::FieldError,
fields::fft_friendly::babybear_u32::Babybear31PrimeField,
traits::{IsFFTField, IsField, IsSubFieldOf},
traits::{HasDefaultTranscript, IsFFTField, IsField, IsSubFieldOf},
};

use crate::traits::ByteConversion;
Expand Down Expand Up @@ -342,6 +342,39 @@ impl IsFFTField for Degree4BabyBearU32ExtensionField {
];
}

impl HasDefaultTranscript for Degree4BabyBearU32ExtensionField {
fn get_random_field_element_from_rng(rng: &mut impl rand::Rng) -> FieldElement<Self> {
//Babybear Prime p = 2^31 - 2^27 + 1
const MODULUS: u32 = 2013265921;

//Babybear prime needs 31 bits and is represented with 32 bits.
//The mask is used to remove the first bit.
const MASK: u32 = 0x7FFF_FFFF;

let mut sample = [0u8; 4];

let mut coeffs = [
FieldElement::zero(),
FieldElement::zero(),
FieldElement::zero(),
FieldElement::zero(),
];

for coeff in &mut coeffs {
loop {
rng.fill(&mut sample);
let int_sample = u32::from_be_bytes(sample) & MASK;
if int_sample < MODULUS {
*coeff = FieldElement::from(&int_sample);
break;
}
}
}

FieldElement::<Self>::new(coeffs)
}
}

#[cfg(test)]
mod tests {
use super::*;
Expand Down
8 changes: 3 additions & 5 deletions crates/provers/stark/src/examples/fibonacci_rap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -305,11 +305,9 @@ pub fn fibonacci_rap_trace<F: IsFFTField>(
let mut trace_cols = vec![fib_seq, fib_permuted];
resize_to_next_power_of_two(&mut trace_cols);

let mut trace = TraceTable::allocate_with_zeros(trace_cols[0].len(), 2, 1, 1);
for i in 0..trace.num_rows() {
trace.set_main(i, 0, trace_cols[0][i].clone());
trace.set_main(i, 1, trace_cols[1][i].clone());
}
let aux_columns = vec![vec![FieldElement::<F>::zero(); trace_cols[0].len()]];

let trace: TraceTable<F, F> = TraceTable::from_columns(trace_cols, aux_columns, 1);

trace
}
Expand Down
Loading