pub trait DerOrd<T>:
DerState
+ SpecSerializer<SVal = T::V>
+ SpecByteLen<T = T::V>
+ Consistency<Val = T::V>{
// Required methods
proof fn lemma_der_serialize_len(&self, value: T::V);
spec fn der_remaining(
&self,
value: T::V,
state: <Self as DerState>::State,
) -> Seq<u8>;
spec fn der_state_valid(
&self,
value: T::V,
state: <Self as DerState>::State,
) -> bool;
exec fn der_start(&self, value: &T) -> state : <Self as DerState>::State;
exec fn der_next(
&self,
value: &T,
state: &mut <Self as DerState>::State,
) -> next : Option<u8>;
// Provided method
exec fn der_leq(&self, left: &T, right: &T) -> leq : bool { ... }
}Expand description
A format whose executable values can be traversed in serialization order without producing an intermediate byte buffer.
State contains only traversal state; it must not own a serialization of the value.
Required Methods§
Sourceproof fn lemma_der_serialize_len(&self, value: T::V)
proof fn lemma_der_serialize_len(&self, value: T::V)
self.consistent(value),ensuresself.spec_serialize(value).len() == self.byte_len(value),DER cursors range over the same number of octets as the format’s byte-length model.
Unlike crate::core::spec::GoodSerializer::lemma_serialize_len, this law is
unconditional once the value is consistent.
Sourcespec fn der_remaining(
&self,
value: T::V,
state: <Self as DerState>::State,
) -> Seq<u8>
spec fn der_remaining( &self, value: T::V, state: <Self as DerState>::State, ) -> Seq<u8>
The portion of spec_serialize(value) not yet returned by the cursor.
Sourcespec fn der_state_valid(&self, value: T::V, state: <Self as DerState>::State) -> bool
spec fn der_state_valid(&self, value: T::V, state: <Self as DerState>::State) -> bool
The format-specific cursor invariant.
Sourceexec fn der_start(&self, value: &T) -> state : <Self as DerState>::State
exec fn der_start(&self, value: &T) -> state : <Self as DerState>::State
self.consistent(value.deep_view()),ensuresself.der_state_valid(value.deep_view(), state),self.der_remaining(value.deep_view(), state) == self.spec_serialize(value.deep_view()),Start traversing the encoding of value.
Sourceexec fn der_next(
&self,
value: &T,
state: &mut <Self as DerState>::State,
) -> next : Option<u8>
exec fn der_next( &self, value: &T, state: &mut <Self as DerState>::State, ) -> next : Option<u8>
self.consistent(value.deep_view()),self.der_state_valid(value.deep_view(), *old(state)),ensuresself.der_state_valid(value.deep_view(), *final(state)),match next {
Some(byte) => {
self.der_remaining(value.deep_view(), *old(state))
== seq![byte] + self.der_remaining(value.deep_view(), *final(state))
}
None => (
&&& self.der_remaining(value.deep_view(), *old(state)).len() == 0
&&& self.der_remaining(value.deep_view(), *final(state)).len() == 0
),
},Return the next encoded octet, or None exactly at the end of the encoding.
Provided Methods§
Sourceexec fn der_leq(&self, left: &T, right: &T) -> leq : bool
exec fn der_leq(&self, left: &T, right: &T) -> leq : bool
self.consistent(left.deep_view()),self.consistent(right.deep_view()),ensuresleq
== der_octets_leq(
self.spec_serialize(left.deep_view()),
self.spec_serialize(right.deep_view()),
),Compare two values by the complete DER TLV octets produced by this format.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
impl DerOrd<()> for Empty
impl DerOrd<()> for Eof
impl DerOrd<BmpString> for BmpStringFmt
alloc only.impl DerOrd<ObjectIdentifier> for ObjectIdentifierFmt
alloc only.impl DerOrd<String> for UniversalStringFmt
alloc only.impl DerOrd<Tag> for TagFmt
impl DerOrd<UtcTime> for UtcTimeFmt<true>
impl DerOrd<[u8]> for Tail
impl DerOrd<bool> for BoolFmt<true>
impl DerOrd<i8> for Integer8Fmt
impl DerOrd<i16> for Integer16Fmt
impl DerOrd<u8> for U8
impl DerOrd<u64> for Base128Fmt<true>
impl DerOrd<usize> for LengthFmt<true>
impl<'a> DerOrd<&'a [u8]> for Tail
impl<'a> DerOrd<&'a str> for Utf8StringFmt
impl<'a> DerOrd<Any<'a>> for AnyFmt<true>
impl<'a> DerOrd<BitString<'a>> for BitStringFmt<true>
impl<'a> DerOrd<GeneralizedTime<'a>> for GeneralizedTimeFmt<true>
impl<'a> DerOrd<Ia5String<'a>> for Ia5StringFmt
impl<'a> DerOrd<Integer<'a>> for EnumeratedFmt
impl<'a> DerOrd<Integer<'a>> for IntegerFmt
impl<'a> DerOrd<PrintableString<'a>> for PrintableStringFmt
impl<'a> DerOrd<Real<'a>> for RealFmt<true>
impl<'a> DerOrd<TeletexString<'a>> for TeletexStringFmt
impl<A, B, TA, TB> DerOrd<(Option<TA>, TB)> for Optional<A, B>
impl<A, B, TA, TB> DerOrd<(TA, TB)> for Pair<A, B>
impl<A, B, TA, TB> DerOrd<Sum<TA, TB>> for Choice<A, B>
impl<A, T> DerOrd<Option<T>> for Opt<A>
impl<A, T> DerOrd<Vec<T>> for RepeatTillEnd<A>
alloc only.impl<A, T> DerOrd<Vec<T>> for SetOfFmt<A>
alloc only.impl<A, T> DerOrd<Vec<T>> for Star<A>
alloc only.