swiftness_stark/
verify.rs1use alloc::borrow::ToOwned;
2use starknet_crypto::Felt;
3use swiftness_air::{domains::StarkDomains, layout::LayoutTrait, public_memory::PublicInput};
4use swiftness_commitment::table::decommit::table_decommit;
5use swiftness_fri::{
6 fri::{self, fri_verify},
7 types,
8};
9
10use crate::{
11 oods::{eval_oods_boundary_poly_at_points, OodsEvaluationInfo},
12 queries::queries_to_points,
13 types::{StarkCommitment, StarkWitness},
14};
15
16pub fn stark_verify<Layout: LayoutTrait>(
18 n_original_columns: u32,
19 n_interaction_columns: u32,
20 public_input: &PublicInput,
21 queries: &[Felt],
22 commitment: StarkCommitment<Layout::InteractionElements>,
23 witness: &StarkWitness,
24 stark_domains: &StarkDomains,
25) -> Result<(), Error> {
26 Layout::traces_decommit(
28 queries,
29 commitment.traces,
30 witness.traces_decommitment.to_owned(),
31 witness.traces_witness.to_owned(),
32 )?;
33
34 table_decommit(
35 commitment.composition,
36 queries,
37 witness.composition_decommitment.to_owned(),
38 witness.composition_witness.to_owned(),
39 )?;
40
41 let points = queries_to_points(queries, stark_domains);
43
44 let eval_info = OodsEvaluationInfo {
46 oods_values: commitment.oods_values,
47 oods_point: commitment.interaction_after_composition,
48 trace_generator: stark_domains.trace_generator,
49 constraint_coefficients: commitment.interaction_after_oods,
50 };
51 let oods_poly_evals = eval_oods_boundary_poly_at_points::<Layout>(
52 n_original_columns,
53 n_interaction_columns,
54 public_input,
55 &eval_info,
56 &points,
57 &witness.traces_decommitment,
58 &witness.composition_decommitment,
59 );
60
61 let fri_decommitment = types::Decommitment { values: oods_poly_evals, points };
63 Ok(fri_verify(queries, commitment.fri, fri_decommitment, witness.fri_witness.to_owned())?)
64}
65
66#[cfg(feature = "std")]
67use thiserror::Error;
68
69#[cfg(feature = "std")]
70#[derive(Error, Debug)]
71pub enum Error {
72 #[error("Fri Error")]
73 FriError(#[from] fri::Error),
74
75 #[error("TraceDecommit Error")]
76 TraceDecommitError(#[from] swiftness_air::trace::decommit::Error),
77
78 #[error("TableDecommit Error")]
79 TableDecommitError(#[from] swiftness_commitment::table::decommit::Error),
80}
81
82#[cfg(not(feature = "std"))]
83use thiserror_no_std::Error;
84
85#[cfg(not(feature = "std"))]
86#[derive(Error, Debug)]
87pub enum Error {
88 #[error("Fri Error")]
89 FriError(#[from] fri::Error),
90
91 #[error("TraceDecommit Error")]
92 TraceDecommitError(#[from] swiftness_air::trace::decommit::Error),
93
94 #[error("TableDecommit Error")]
95 TableDecommitError(#[from] swiftness_commitment::table::decommit::Error),
96}