Struct ark_r1cs_std::bits::uint8::UInt8 [−][src]
Represents an interpretation of 8 Boolean objects as an
unsigned integer.
Implementations
impl<F: Field> UInt8<F>[src]
pub fn constant_vec(values: &[u8]) -> Vec<Self>[src]
Construct a constant vector of UInt8 from a vector of u8
This does not create any new variables or constraints.
// We'll use the BLS12-381 scalar field for our constraints. use ark_test_curves::bls12_381::Fr; use ark_relations::r1cs::*; use ark_r1cs_std::prelude::*; let cs = ConstraintSystem::<Fr>::new_ref(); let var = vec![UInt8::new_witness(cs.clone(), || Ok(2))?]; let constant = UInt8::constant_vec(&[2]); var.enforce_equal(&constant)?; assert!(cs.is_satisfied().unwrap());
pub fn constant(value: u8) -> Self[src]
Construct a constant UInt8 from a u8
This does not create new variables or constraints.
// We'll use the BLS12-381 scalar field for our constraints. use ark_test_curves::bls12_381::Fr; use ark_relations::r1cs::*; use ark_r1cs_std::prelude::*; let cs = ConstraintSystem::<Fr>::new_ref(); let var = UInt8::new_witness(cs.clone(), || Ok(2))?; let constant = UInt8::constant(2); var.enforce_equal(&constant)?; assert!(cs.is_satisfied().unwrap());
pub fn new_witness_vec(
cs: impl Into<Namespace<F>>,
values: &[impl Into<Option<u8>> + Copy]
) -> Result<Vec<Self>, SynthesisError>[src]
cs: impl Into<Namespace<F>>,
values: &[impl Into<Option<u8>> + Copy]
) -> Result<Vec<Self>, SynthesisError>
Allocates a slice of u8’s as private witnesses.
pub fn new_input_vec(
cs: impl Into<Namespace<F>>,
values: &[u8]
) -> Result<Vec<Self>, SynthesisError> where
F: PrimeField, [src]
cs: impl Into<Namespace<F>>,
values: &[u8]
) -> Result<Vec<Self>, SynthesisError> where
F: PrimeField,
Allocates a slice of u8’s as public inputs by first packing them into
elements of F, (thus reducing the number of input allocations),
allocating these elements as public inputs, and then converting
these field variables FpVar<F> variables back into bytes.
From a user perspective, this trade-off adds constraints, but improves verifier time and verification key size.
// We'll use the BLS12-381 scalar field for our constraints. use ark_test_curves::bls12_381::Fr; use ark_relations::r1cs::*; use ark_r1cs_std::prelude::*; let cs = ConstraintSystem::<Fr>::new_ref(); let two = UInt8::new_witness(cs.clone(), || Ok(2))?; let var = vec![two.clone(); 32]; let c = UInt8::new_input_vec(cs.clone(), &[2; 32])?; var.enforce_equal(&c)?; assert!(cs.is_satisfied().unwrap());
pub fn from_bits_le(bits: &[Boolean<F>]) -> Self[src]
Converts a little-endian byte order representation of bits into a
UInt8.
// We'll use the BLS12-381 scalar field for our constraints. use ark_test_curves::bls12_381::Fr; use ark_relations::r1cs::*; use ark_r1cs_std::prelude::*; let cs = ConstraintSystem::<Fr>::new_ref(); let var = UInt8::new_witness(cs.clone(), || Ok(128))?; let f = Boolean::FALSE; let t = Boolean::TRUE; // Construct [0, 0, 0, 0, 0, 0, 0, 1] let mut bits = vec![f.clone(); 7]; bits.push(t); let mut c = UInt8::from_bits_le(&bits); var.enforce_equal(&c)?; assert!(cs.is_satisfied().unwrap());
pub fn xor(&self, other: &Self) -> Result<Self, SynthesisError>[src]
Outputs self ^ other.
If at least one of self and other are constants, then this method
does not create any constraints or variables.
// We'll use the BLS12-381 scalar field for our constraints. use ark_test_curves::bls12_381::Fr; use ark_relations::r1cs::*; use ark_r1cs_std::prelude::*; let cs = ConstraintSystem::<Fr>::new_ref(); let a = UInt8::new_witness(cs.clone(), || Ok(16))?; let b = UInt8::new_witness(cs.clone(), || Ok(17))?; let c = UInt8::new_witness(cs.clone(), || Ok(1))?; a.xor(&b)?.enforce_equal(&c)?; assert!(cs.is_satisfied().unwrap());
Trait Implementations
impl<ConstraintF: Field> AllocVar<u8, ConstraintF> for UInt8<ConstraintF>[src]
fn new_variable<T: Borrow<u8>>(
cs: impl Into<Namespace<ConstraintF>>,
f: impl FnOnce() -> Result<T, SynthesisError>,
mode: AllocationMode
) -> Result<Self, SynthesisError>[src]
cs: impl Into<Namespace<ConstraintF>>,
f: impl FnOnce() -> Result<T, SynthesisError>,
mode: AllocationMode
) -> Result<Self, SynthesisError>
fn new_constant(
cs: impl Into<Namespace<F>>,
t: impl Borrow<V>
) -> Result<Self, SynthesisError>[src]
cs: impl Into<Namespace<F>>,
t: impl Borrow<V>
) -> Result<Self, SynthesisError>
fn new_input<T: Borrow<V>>(
cs: impl Into<Namespace<F>>,
f: impl FnOnce() -> Result<T, SynthesisError>
) -> Result<Self, SynthesisError>[src]
cs: impl Into<Namespace<F>>,
f: impl FnOnce() -> Result<T, SynthesisError>
) -> Result<Self, SynthesisError>
fn new_witness<T: Borrow<V>>(
cs: impl Into<Namespace<F>>,
f: impl FnOnce() -> Result<T, SynthesisError>
) -> Result<Self, SynthesisError>[src]
cs: impl Into<Namespace<F>>,
f: impl FnOnce() -> Result<T, SynthesisError>
) -> Result<Self, SynthesisError>
impl<F: Clone + Field> Clone for UInt8<F>[src]
impl<ConstraintF: Field> CondSelectGadget<ConstraintF> for UInt8<ConstraintF>[src]
fn conditionally_select(
cond: &Boolean<ConstraintF>,
true_value: &Self,
false_value: &Self
) -> Result<Self, SynthesisError>[src]
cond: &Boolean<ConstraintF>,
true_value: &Self,
false_value: &Self
) -> Result<Self, SynthesisError>
fn conditionally_select_power_of_two_vector(
position: &[Boolean<ConstraintF>],
values: &[Self]
) -> Result<Self, SynthesisError>[src]
position: &[Boolean<ConstraintF>],
values: &[Self]
) -> Result<Self, SynthesisError>
impl<F: Debug + Field> Debug for UInt8<F>[src]
impl<ConstraintF: Field> EqGadget<ConstraintF> for UInt8<ConstraintF>[src]
fn is_eq(&self, other: &Self) -> Result<Boolean<ConstraintF>, SynthesisError>[src]
fn conditional_enforce_equal(
&self,
other: &Self,
condition: &Boolean<ConstraintF>
) -> Result<(), SynthesisError>[src]
&self,
other: &Self,
condition: &Boolean<ConstraintF>
) -> Result<(), SynthesisError>
fn conditional_enforce_not_equal(
&self,
other: &Self,
condition: &Boolean<ConstraintF>
) -> Result<(), SynthesisError>[src]
&self,
other: &Self,
condition: &Boolean<ConstraintF>
) -> Result<(), SynthesisError>
fn is_neq(&self, other: &Self) -> Result<Boolean<F>, SynthesisError>[src]
fn enforce_equal(&self, other: &Self) -> Result<(), SynthesisError>[src]
fn enforce_not_equal(&self, other: &Self) -> Result<(), SynthesisError>[src]
impl<F: Field> R1CSVar<F> for UInt8<F>[src]
type Value = u8
The type of the “native” value that Self represents in the constraint
system. Read more
fn cs(&self) -> ConstraintSystemRef<F>[src]
fn value(&self) -> Result<Self::Value, SynthesisError>[src]
fn is_constant(&self) -> bool[src]
impl<F: Field> ToBitsGadget<F> for UInt8<F>[src]
fn to_bits_le(&self) -> Result<Vec<Boolean<F>>, SynthesisError>[src]
fn to_non_unique_bits_le(&self) -> Result<Vec<Boolean<F>>, SynthesisError>[src]
fn to_bits_be(&self) -> Result<Vec<Boolean<F>>, SynthesisError>[src]
fn to_non_unique_bits_be(&self) -> Result<Vec<Boolean<F>>, SynthesisError>[src]
Auto Trait Implementations
impl<F> !RefUnwindSafe for UInt8<F>
impl<F> !Send for UInt8<F>
impl<F> !Sync for UInt8<F>
impl<F> Unpin for UInt8<F>
impl<F> !UnwindSafe for UInt8<F>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T> Instrument for T[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>[src]
pub fn in_current_span(self) -> Instrumented<Self>[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,