sp1_recursion_circuit/machine/
root.rs1use std::marker::PhantomData;
2
3use super::PublicValuesOutputDigest;
4use crate::{
5 machine::{SP1CompressWithVKeyVerifier, SP1CompressWithVKeyWitnessVariable},
6 shard::RecursiveShardVerifier,
7 zerocheck::RecursiveVerifierConstraintFolder,
8 CircuitConfig,
9};
10use slop_air::Air;
11use slop_algebra::AbstractField;
12use sp1_hypercube::air::MachineAir;
13use sp1_primitives::{SP1Field, SP1GlobalContext};
14use sp1_recursion_compiler::ir::{Builder, Felt};
15
16#[derive(Debug, Clone, Copy)]
21pub struct SP1CompressRootVerifierWithVKey<C, A> {
22 _phantom: PhantomData<(C, A)>,
23}
24
25impl<C, A> SP1CompressRootVerifierWithVKey<C, A>
26where
27 C: CircuitConfig<Bit = Felt<SP1Field>>,
28 A: MachineAir<SP1Field> + for<'a> Air<RecursiveVerifierConstraintFolder<'a>>,
29{
30 pub fn verify(
31 builder: &mut Builder<C>,
32 machine: &RecursiveShardVerifier<SP1GlobalContext, A, C>,
33 input: SP1CompressWithVKeyWitnessVariable<C, SP1GlobalContext>,
34 value_assertions: bool,
35 kind: PublicValuesOutputDigest,
36 ) {
37 builder.assert_felt_eq(input.compress_var.is_complete, SP1Field::one());
39 SP1CompressWithVKeyVerifier::<C, SP1GlobalContext, _>::verify(
41 builder,
42 machine,
43 input,
44 value_assertions,
45 kind,
46 );
47 }
48}