pub struct SafeTypeChip<'a, F: ScalarField> { /* private fields */ }
Expand description
Chip for SafeType
Implementations§
Source§impl<'a, F: ScalarField> SafeTypeChip<'a, F>
impl<'a, F: ScalarField> SafeTypeChip<'a, F>
Sourcepub fn raw_bytes_to<const BYTES_PER_ELE: usize, const TOTAL_BITS: usize>(
&self,
ctx: &mut Context<F>,
inputs: Vec<AssignedValue<F>>,
) -> SafeType<F, BYTES_PER_ELE, TOTAL_BITS>
pub fn raw_bytes_to<const BYTES_PER_ELE: usize, const TOTAL_BITS: usize>( &self, ctx: &mut Context<F>, inputs: Vec<AssignedValue<F>>, ) -> SafeType<F, BYTES_PER_ELE, TOTAL_BITS>
Convert a vector of AssignedValue (treated as little-endian) to a SafeType. The number of bytes of inputs must equal to the number of bytes of outputs. This function also add contraints that a AssignedValue in inputs must be in the range of a byte.
Sourcepub fn unsafe_to_safe_type<const BYTES_PER_ELE: usize, const TOTAL_BITS: usize>(
inputs: Vec<AssignedValue<F>>,
) -> SafeType<F, BYTES_PER_ELE, TOTAL_BITS>
pub fn unsafe_to_safe_type<const BYTES_PER_ELE: usize, const TOTAL_BITS: usize>( inputs: Vec<AssignedValue<F>>, ) -> SafeType<F, BYTES_PER_ELE, TOTAL_BITS>
Sourcepub fn assert_bool(
&self,
ctx: &mut Context<F>,
input: AssignedValue<F>,
) -> SafeBool<F>
pub fn assert_bool( &self, ctx: &mut Context<F>, input: AssignedValue<F>, ) -> SafeBool<F>
Constrains that the input
is a boolean value (either 0 or 1) and wraps it in SafeBool
.
Sourcepub fn load_bool(&self, ctx: &mut Context<F>, input: bool) -> SafeBool<F>
pub fn load_bool(&self, ctx: &mut Context<F>, input: bool) -> SafeBool<F>
Load a boolean value as witness and constrain it is either 0 or 1.
Sourcepub fn unsafe_to_bool(input: AssignedValue<F>) -> SafeBool<F>
pub fn unsafe_to_bool(input: AssignedValue<F>) -> SafeBool<F>
Sourcepub fn assert_byte(
&self,
ctx: &mut Context<F>,
input: AssignedValue<F>,
) -> SafeByte<F>
pub fn assert_byte( &self, ctx: &mut Context<F>, input: AssignedValue<F>, ) -> SafeByte<F>
Constrains that the input
is a byte value and wraps it in SafeByte
.
Sourcepub fn load_byte(&self, ctx: &mut Context<F>, input: u8) -> SafeByte<F>
pub fn load_byte(&self, ctx: &mut Context<F>, input: u8) -> SafeByte<F>
Load a boolean value as witness and constrain it is either 0 or 1.
Sourcepub fn unsafe_to_byte(input: AssignedValue<F>) -> SafeByte<F>
pub fn unsafe_to_byte(input: AssignedValue<F>) -> SafeByte<F>
Sourcepub fn unsafe_to_var_len_bytes<const MAX_LEN: usize>(
inputs: [AssignedValue<F>; MAX_LEN],
len: AssignedValue<F>,
) -> VarLenBytes<F, MAX_LEN>
pub fn unsafe_to_var_len_bytes<const MAX_LEN: usize>( inputs: [AssignedValue<F>; MAX_LEN], len: AssignedValue<F>, ) -> VarLenBytes<F, MAX_LEN>
Unsafe method that directly converts inputs
to VarLenBytes
without any checks.
This should only be used if an external library needs to convert their types to SafeByte
.
Sourcepub fn unsafe_to_var_len_bytes_vec(
inputs: Vec<AssignedValue<F>>,
len: AssignedValue<F>,
max_len: usize,
) -> VarLenBytesVec<F>
pub fn unsafe_to_var_len_bytes_vec( inputs: Vec<AssignedValue<F>>, len: AssignedValue<F>, max_len: usize, ) -> VarLenBytesVec<F>
Unsafe method that directly converts inputs
to VarLenBytesVec
without any checks.
This should only be used if an external library needs to convert their types to SafeByte
.
Sourcepub fn unsafe_to_fix_len_bytes<const MAX_LEN: usize>(
inputs: [AssignedValue<F>; MAX_LEN],
) -> FixLenBytes<F, MAX_LEN>
pub fn unsafe_to_fix_len_bytes<const MAX_LEN: usize>( inputs: [AssignedValue<F>; MAX_LEN], ) -> FixLenBytes<F, MAX_LEN>
Unsafe method that directly converts inputs
to FixLenBytes
without any checks.
This should only be used if an external library needs to convert their types to SafeByte
.
Sourcepub fn unsafe_to_fix_len_bytes_vec(
inputs: Vec<AssignedValue<F>>,
len: usize,
) -> FixLenBytesVec<F>
pub fn unsafe_to_fix_len_bytes_vec( inputs: Vec<AssignedValue<F>>, len: usize, ) -> FixLenBytesVec<F>
Unsafe method that directly converts inputs
to FixLenBytesVec
without any checks.
This should only be used if an external library needs to convert their types to SafeByte
.
Sourcepub fn raw_to_var_len_bytes<const MAX_LEN: usize>(
&self,
ctx: &mut Context<F>,
inputs: [AssignedValue<F>; MAX_LEN],
len: AssignedValue<F>,
) -> VarLenBytes<F, MAX_LEN>
pub fn raw_to_var_len_bytes<const MAX_LEN: usize>( &self, ctx: &mut Context<F>, inputs: [AssignedValue<F>; MAX_LEN], len: AssignedValue<F>, ) -> VarLenBytes<F, MAX_LEN>
Converts a slice of AssignedValue(treated as little-endian) to VarLenBytes.
- inputs: Slice representing the byte array.
- len:
AssignedValue<F>
witness representing the variable length of the byte array. Constrained to be<= MAX_LEN
. - MAX_LEN: usize representing the maximum length of the byte array and the number of elements it must contain.
§Assumptions
MAX_LEN < u64::MAX
to prevent overflow (but you should never make an array this large)ceil((MAX_LEN + 1).bits() / lookup_bits) * lookup_bits <= F::CAPACITY
wherelookup_bits = self.range_chip.lookup_bits
Sourcepub fn raw_to_var_len_bytes_vec(
&self,
ctx: &mut Context<F>,
inputs: Vec<AssignedValue<F>>,
len: AssignedValue<F>,
max_len: usize,
) -> VarLenBytesVec<F>
pub fn raw_to_var_len_bytes_vec( &self, ctx: &mut Context<F>, inputs: Vec<AssignedValue<F>>, len: AssignedValue<F>, max_len: usize, ) -> VarLenBytesVec<F>
Converts a vector of AssignedValue to VarLenBytesVec. Not encouraged to use because MAX_LEN
cannot be verified at compile time.
- inputs: Vector representing the byte array, right padded to
max_len
. See VarLenBytesVec for details about padding. - len:
AssignedValue<F>
witness representing the variable length of the byte array. Constrained to be<= max_len
. - max_len: usize representing the maximum length of the byte array and the number of elements it must contain. We enforce this to be provided explictly to make sure length of
inputs
is determinstic.
§Assumptions
max_len < u64::MAX
to prevent overflow (but you should never make an array this large)ceil((max_len + 1).bits() / lookup_bits) * lookup_bits <= F::CAPACITY
wherelookup_bits = self.range_chip.lookup_bits
Sourcepub fn raw_to_fix_len_bytes<const LEN: usize>(
&self,
ctx: &mut Context<F>,
inputs: [AssignedValue<F>; LEN],
) -> FixLenBytes<F, LEN>
pub fn raw_to_fix_len_bytes<const LEN: usize>( &self, ctx: &mut Context<F>, inputs: [AssignedValue<F>; LEN], ) -> FixLenBytes<F, LEN>
Converts a slice of AssignedValue(treated as little-endian) to FixLenBytes.
- inputs: Slice representing the byte array.
- LEN: length of the byte array.
Sourcepub fn raw_to_fix_len_bytes_vec(
&self,
ctx: &mut Context<F>,
inputs: Vec<AssignedValue<F>>,
len: usize,
) -> FixLenBytesVec<F>
pub fn raw_to_fix_len_bytes_vec( &self, ctx: &mut Context<F>, inputs: Vec<AssignedValue<F>>, len: usize, ) -> FixLenBytesVec<F>
Converts a slice of AssignedValue(treated as little-endian) to FixLenBytesVec.
- inputs: Slice representing the byte array.
- len: length of the byte array. We enforce this to be provided explictly to make sure length of
inputs
is determinstic.
Auto Trait Implementations§
impl<'a, F> Freeze for SafeTypeChip<'a, F>
impl<'a, F> RefUnwindSafe for SafeTypeChip<'a, F>where
F: RefUnwindSafe,
impl<'a, F> Send for SafeTypeChip<'a, F>
impl<'a, F> Sync for SafeTypeChip<'a, F>
impl<'a, F> Unpin for SafeTypeChip<'a, F>
impl<'a, F> UnwindSafe for SafeTypeChip<'a, F>where
F: RefUnwindSafe,
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> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.