Skip to content
Open
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
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 10 additions & 4 deletions crates/hypercube/src/logup_gkr/prover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,12 @@ impl<GC: IopCtx, SC: ShardContext<GC>> GkrProverImpl<GC, SC> {
let host_numerator = numerator.to_host().unwrap();
let host_denominator = denominator.to_host().unwrap();

challenger.observe_variable_length_extension_slice(host_numerator.guts().as_slice());
challenger.observe_variable_length_extension_slice(host_denominator.guts().as_slice());
challenger
.observe_variable_length_extension_slice(host_numerator.guts().as_slice())
.unwrap();
challenger
.observe_variable_length_extension_slice(host_denominator.guts().as_slice())
.unwrap();
let output_host =
LogUpGkrOutput { numerator: host_numerator, denominator: host_denominator };

Expand Down Expand Up @@ -201,9 +205,11 @@ impl<GC: IopCtx, SC: ShardContext<GC>> GkrProverImpl<GC, SC> {
};
// Observe the openings.
if let Some(prep_eval) = openings.preprocessed_trace_evaluations.as_ref() {
challenger.observe_variable_length_extension_slice(prep_eval);
challenger.observe_variable_length_extension_slice(prep_eval).unwrap();
}
challenger.observe_variable_length_extension_slice(&openings.main_trace_evaluations);
challenger
.observe_variable_length_extension_slice(&openings.main_trace_evaluations)
.unwrap();

chip_evaluations.insert(name.to_string(), openings);
}
Expand Down
12 changes: 8 additions & 4 deletions crates/hypercube/src/logup_gkr/verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use itertools::Itertools;
use slop_air::BaseAir;
use slop_algebra::AbstractField;
use slop_challenger::GrindingChallenger;
use slop_challenger::USizeOutOfFieldBounds;
use slop_challenger::{CanObserve, FieldChallenger, IopCtx, VariableLengthChallenger};
use slop_multilinear::{
full_geq, partial_lagrange_blocking, Mle, MleEval, MultilinearPcsChallenger, Point,
Expand Down Expand Up @@ -63,6 +64,9 @@ pub enum LogupGkrVerificationError<EF> {
/// The public values verification failed.
#[error("public values verification failed")]
InvalidPublicValues,
/// A variable length slice observation can produce this error.
#[error("slice length out of field bounds")]
SliceLengthOutOfFieldBounds(#[from] USizeOutOfFieldBounds),
}

/// Verifier for `LogUp` GKR.
Expand Down Expand Up @@ -157,8 +161,8 @@ impl<GC: IopCtx, SC: ShardContext<GC>> LogUpGkrVerifier<GC, SC> {
}

// Observe the output claims.
challenger.observe_variable_length_extension_slice(numerator.guts().as_slice());
challenger.observe_variable_length_extension_slice(denominator.guts().as_slice());
challenger.observe_variable_length_extension_slice(numerator.guts().as_slice())?;
challenger.observe_variable_length_extension_slice(denominator.guts().as_slice())?;

if denominator.guts().as_slice().iter().any(slop_algebra::Field::is_zero) {
return Err(LogupGkrVerificationError::ZeroDenominator);
Expand Down Expand Up @@ -277,14 +281,14 @@ impl<GC: IopCtx, SC: ShardContext<GC>> LogUpGkrVerifier<GC, SC> {
{
// Observe the opening
if let Some(prep_eval) = openings.preprocessed_trace_evaluations.as_ref() {
challenger.observe_variable_length_extension_slice(prep_eval);
challenger.observe_variable_length_extension_slice(prep_eval)?;
if prep_eval.evaluations().sizes() != [chip.air.preprocessed_width()] {
return Err(LogupGkrVerificationError::InvalidShape);
}
} else if chip.air.preprocessed_width() != 0 {
return Err(LogupGkrVerificationError::InvalidShape);
}
challenger.observe_variable_length_extension_slice(&openings.main_trace_evaluations);
challenger.observe_variable_length_extension_slice(&openings.main_trace_evaluations)?;
if openings.main_trace_evaluations.evaluations().sizes() != [chip.air.width()] {
return Err(LogupGkrVerificationError::InvalidShape);
}
Expand Down
4 changes: 2 additions & 2 deletions crates/hypercube/src/prover/shard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -622,8 +622,8 @@ impl<GC: IopCtx, SC: ShardContext<GC>, C: DefaultJaggedProver<GC, SC::Config>>
let (preprocessed_evals, main_evals) = evals.split_at(air.preprocessed_width());

// Observe the openings
challenger.observe_variable_length_extension_slice(preprocessed_evals);
challenger.observe_variable_length_extension_slice(main_evals);
challenger.observe_variable_length_extension_slice(preprocessed_evals).unwrap();
challenger.observe_variable_length_extension_slice(main_evals).unwrap();

let preprocessed = AirOpenedValues { local: preprocessed_evals.to_vec() };

Expand Down
13 changes: 9 additions & 4 deletions crates/hypercube/src/verifier/shard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ use std::{
use itertools::Itertools;
use slop_air::{Air, BaseAir};
use slop_algebra::{AbstractField, PrimeField32, TwoAdicField};
use slop_challenger::{CanObserve, FieldChallenger, IopCtx, VariableLengthChallenger};
use slop_challenger::{
CanObserve, FieldChallenger, IopCtx, USizeOutOfFieldBounds, VariableLengthChallenger,
};
use slop_commit::Rounds;
use slop_jagged::{JaggedPcsVerifier, JaggedPcsVerifierError};
use slop_matrix::dense::RowMajorMatrixView;
Expand Down Expand Up @@ -115,6 +117,9 @@ pub enum ShardVerifierError<EF, PcsError> {
/// The height is larger than `1 << max_log_row_count`.
#[error("height is larger than maximum possible value")]
HeightTooLarge,
/// Observing variable length slices can produce this error.
#[error("slice length out of field bounds")]
SliceLengthOutOfFieldBounds(#[from] USizeOutOfFieldBounds),
}

/// Derive the error type from the jagged config.
Expand Down Expand Up @@ -425,8 +430,8 @@ where {
let len = shard_chips.len();
challenger.observe(GC::F::from_canonical_usize(len));
for (_, opening) in opened_values.chips.iter() {
challenger.observe_variable_length_extension_slice(&opening.preprocessed.local);
challenger.observe_variable_length_extension_slice(&opening.main.local);
challenger.observe_variable_length_extension_slice(&opening.preprocessed.local)?;
challenger.observe_variable_length_extension_slice(&opening.main.local)?;
}

Ok(())
Expand Down Expand Up @@ -775,7 +780,7 @@ where
/// Create a shard verifier from basefold parameters.
#[must_use]
pub fn from_config(
config: &WhirProofShape<GC::F>,
config: &WhirProofShape<GC::F, GC::EF>,
max_log_row_count: usize,
machine: Machine<GC::F, A>,
num_expected_commitments: usize,
Expand Down
Loading
Loading