pub struct PermutationCheckSpec {
pub kind: BusKind,
pub sources: Vec<(Source, ChallengeLabel)>,
pub selector: Option<usize>,
pub recv_selector: Option<usize>,
pub clock_waiver: Option<String>,
}Expand description
One endpoint of a LogUp bus.
Per row i:
h(i) = s(i) / (γ + Σ β^j · source_j(i)).
The endpoint contributes claimed_sum = Σ_i h(i)
(Permutation) or Σ_i Eq(r_bus, i) · h(i) (Lookup)
to the cross-bus check.
§Security
Permutation kind cancels in char-2 by
multiset parity, so endpoints with even
per-key multiplicity collapse silently.
Use Source::RowIndexLeBytes in the key
to force per-row uniqueness, or switch to
BusKind::Lookup for positional binding.
Fields§
§kind: BusKind§sources: Vec<(Source, ChallengeLabel)>Key sources stitched via the global
β schedule using each label.
selector: Option<usize>Selector column gating the row’s h.
None means the row is unconditionally active.
recv_selector: Option<usize>Receive-side selector for paired buses.
AIR must enforce s_send · s_recv = 0 (char-2 mutex).
clock_waiver: Option<String>Audited carve-out citation for Permutation
specs that intentionally omit a row-index source.
Implementations§
Source§impl PermutationCheckSpec
impl PermutationCheckSpec
pub fn new( sources: Vec<(Source, ChallengeLabel)>, selector: Option<usize>, ) -> Self
Sourcepub fn new_lookup(
sources: Vec<(Source, ChallengeLabel)>,
selector: Option<usize>,
) -> Self
pub fn new_lookup( sources: Vec<(Source, ChallengeLabel)>, selector: Option<usize>, ) -> Self
Endpoints on a Lookup bus must be
pointwise-equal on the padded hypercube;
use only when positional binding holds.
Sourcepub fn new_paired(
sources: Vec<(Source, ChallengeLabel)>,
s_send: usize,
s_recv: usize,
kind: BusKind,
) -> Self
pub fn new_paired( sources: Vec<(Source, ChallengeLabel)>, s_send: usize, s_recv: usize, kind: BusKind, ) -> Self
Caller must enforce s_send · s_recv = 0 in the AIR;
without it, rows with both selectors high collapse to
zero in char-2 and slip past cross-bus cancellation.
Sourcepub fn with_clock_waiver(self, reason: impl Into<String>) -> Self
pub fn with_clock_waiver(self, reason: impl Into<String>) -> Self
Audited escape hatch. reason must start
with "see " and cite the load-bearing AIR
constraint (see <path>:<line>: <argument>).
pub fn num_sources(&self) -> usize
pub fn has_selector(&self) -> bool
pub fn has_paired(&self) -> bool
Sourcepub fn shift_column_indices(&mut self, offset: usize)
pub fn shift_column_indices(&mut self, offset: usize)
Reindexes column references when the chiplet is embedded into a wider trace.
Sourcepub fn has_real_clock_source(&self) -> bool
pub fn has_real_clock_source(&self) -> bool
Only structural guarantor of per-row uniqueness; label-only stitching is forgeable.
pub fn has_request_idx_column(&self) -> bool
Sourcepub fn validate_clock_stitching(&self, _bus_id: &str) -> Result<()>
pub fn validate_clock_stitching(&self, _bus_id: &str) -> Result<()>
Per-spec only. validate_bus_set runs the
cross-endpoint check that closes label spoofing.
Trait Implementations§
Source§impl Clone for PermutationCheckSpec
impl Clone for PermutationCheckSpec
Source§fn clone(&self) -> PermutationCheckSpec
fn clone(&self) -> PermutationCheckSpec
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for PermutationCheckSpec
impl RefUnwindSafe for PermutationCheckSpec
impl Send for PermutationCheckSpec
impl Sync for PermutationCheckSpec
impl Unpin for PermutationCheckSpec
impl UnsafeUnpin for PermutationCheckSpec
impl UnwindSafe for PermutationCheckSpec
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more