Struct Fr
pub struct Fr(pub(crate) [u64; 4]);Expand description
This represents an element of $\mathbb{F}_r$ where
r = 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001
is the scalar field of the BN254 curve.
Tuple Fields§
§0: [u64; 4]Implementations§
§impl Fr
impl Fr
pub fn invert(&self) -> CtOption<Fr>
pub fn invert(&self) -> CtOption<Fr>
Returns the multiplicative inverse of the element. If it is zero, the method fails.
pub fn jacobi(&self) -> i64
pub const fn from_raw(val: [u64; 4]) -> Fr
pub const fn from_raw(val: [u64; 4]) -> Fr
Converts from an integer represented in little endian
into its (congruent) $field representation.
pub fn from_bytes(bytes: &[u8; 32]) -> CtOption<Fr>
pub fn from_bytes(bytes: &[u8; 32]) -> CtOption<Fr>
Attempts to convert a little-endian byte representation of
a scalar into a Fr, failing if the input is not canonical.
Trait Implementations§
§impl<'b> AddAssign<&'b Fr> for Fr
impl<'b> AddAssign<&'b Fr> for Fr
§fn add_assign(&mut self, rhs: &'b Fr)
fn add_assign(&mut self, rhs: &'b Fr)
Performs the
+= operation. Read more§impl ConditionallySelectable for Fr
impl ConditionallySelectable for Fr
Source§fn conditional_assign(&mut self, other: &Self, choice: Choice)
fn conditional_assign(&mut self, other: &Self, choice: Choice)
Source§fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)
fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)
Conditionally swap
self and other if choice == 1; otherwise,
reassign both unto themselves. Read more§impl ConstantTimeEq for Fr
impl ConstantTimeEq for Fr
§impl<'de> Deserialize<'de> for Fr
impl<'de> Deserialize<'de> for Fr
§fn deserialize<D>(
deserializer: D,
) -> Result<Fr, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<Fr, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
§impl FromUniformBytes<64> for Fr
impl FromUniformBytes<64> for Fr
§fn from_uniform_bytes(bytes: &[u8; 64]) -> Fr
fn from_uniform_bytes(bytes: &[u8; 64]) -> Fr
Converts a 512-bit little endian integer into
an Fr by reducing by the modulus.
§impl HasByteRepresentation for Fr
TODO(ryancao): Test these implementations!
impl HasByteRepresentation for Fr
TODO(ryancao): Test these implementations!
§const REPR_NUM_BYTES: usize = 32
const REPR_NUM_BYTES: usize = 32
Number of bytes within the element’s representation.
§fn from_bytes_le(bytes: &[u8]) -> Fr
fn from_bytes_le(bytes: &[u8]) -> Fr
Constructor which creates an instance of the element from a vec of
less than or equal to length
REPR_NUM_BYTES.
If length less than REPR_NUM_BYTES, pads the most significant
bits with 0s until it is of equal length to REPR_NUM_BYTES.§fn to_bytes_le(&self) -> Vec<u8> ⓘ
fn to_bytes_le(&self) -> Vec<u8> ⓘ
Function which creates an equivalent representation of the element
in a byte array of length
REPR_NUM_BYTES.§fn to_u64s_le(&self) -> Vec<u64>
fn to_u64s_le(&self) -> Vec<u64>
Similar to
to_bytes_le but returns chunks of u64s.§fn from_u64s_le(words: Vec<u64>) -> Fr
fn from_u64s_le(words: Vec<u64>) -> Fr
Similar to
from_bytes_le but takes chunks of u64s.§impl Legendre for Fr
impl Legendre for Fr
fn legendre(&self) -> i64
fn ct_quadratic_non_residue(&self) -> Choice
fn ct_quadratic_residue(&self) -> Choice
§impl<'b> MulAssign<&'b Fr> for Fr
impl<'b> MulAssign<&'b Fr> for Fr
§fn mul_assign(&mut self, rhs: &'b Fr)
fn mul_assign(&mut self, rhs: &'b Fr)
Performs the
*= operation. Read more§impl Ord for Fr
impl Ord for Fr
§impl PartialOrd for Fr
impl PartialOrd for Fr
§impl PrimeField for Fr
impl PrimeField for Fr
§const CAPACITY: u32 = 253
const CAPACITY: u32 = 253
How many bits of information can be reliably stored in the field element. Read more
§const MODULUS: &'static str = MODULUS_STR
const MODULUS: &'static str = MODULUS_STR
Modulus of the field written as a string for debugging purposes. Read more
§const MULTIPLICATIVE_GENERATOR: Fr = GENERATOR
const MULTIPLICATIVE_GENERATOR: Fr = GENERATOR
A fixed multiplicative generator of
modulus - 1 order. This element must also be
a quadratic nonresidue. Read more§const ROOT_OF_UNITY: Fr = ROOT_OF_UNITY
const ROOT_OF_UNITY: Fr = ROOT_OF_UNITY
The
2^s root of unity. Read more§const ROOT_OF_UNITY_INV: Fr = ROOT_OF_UNITY_INV
const ROOT_OF_UNITY_INV: Fr = ROOT_OF_UNITY_INV
Inverse of [
Self::ROOT_OF_UNITY].§type Repr = [u8; 32]
type Repr = [u8; 32]
The prime field can be converted back and forth into this binary
representation.
§fn from_repr(repr: <Fr as PrimeField>::Repr) -> CtOption<Fr>
fn from_repr(repr: <Fr as PrimeField>::Repr) -> CtOption<Fr>
Attempts to convert a byte representation of a field element into an element of
this prime field, failing if the input is not canonical (is not smaller than the
field’s modulus). Read more
§fn to_repr(&self) -> <Fr as PrimeField>::Repr
fn to_repr(&self) -> <Fr as PrimeField>::Repr
Converts an element of the prime field into the standard byte representation for
this field. Read more
§fn from_str_vartime(s: &str) -> Option<Self>
fn from_str_vartime(s: &str) -> Option<Self>
Interpret a string of numbers as a (congruent) prime field element.
Does not accept unnecessary leading zeroes or a blank string. Read more
§fn from_repr_vartime(repr: Self::Repr) -> Option<Self>
fn from_repr_vartime(repr: Self::Repr) -> Option<Self>
Attempts to convert a byte representation of a field element into an element of
this prime field, failing if the input is not canonical (is not smaller than the
field’s modulus). Read more
§impl PrimeFieldBits for Fr
Available on crate feature bits only.
impl PrimeFieldBits for Fr
Available on crate feature
bits only.§fn to_le_bits(&self) -> BitArray<<Fr as PrimeFieldBits>::ReprBits>
fn to_le_bits(&self) -> BitArray<<Fr as PrimeFieldBits>::ReprBits>
Converts an element of the prime field into a little-endian sequence of bits.
§fn char_le_bits() -> BitArray<<Fr as PrimeFieldBits>::ReprBits>
fn char_le_bits() -> BitArray<<Fr as PrimeFieldBits>::ReprBits>
Returns the bits of the field characteristic (the modulus) in little-endian order.
§impl SerdeObject for Fr
impl SerdeObject for Fr
§fn from_raw_bytes_unchecked(bytes: &[u8]) -> Fr
fn from_raw_bytes_unchecked(bytes: &[u8]) -> Fr
The purpose of unchecked functions is to read the internal memory representation
of a type from bytes as quickly as possible. No sanitization checks are performed
to ensure the bytes represent a valid object. As such this function should only be
used internally as an extension of machine memory. It should not be used to deserialize
externally provided data.
fn from_raw_bytes(bytes: &[u8]) -> Option<Fr>
fn to_raw_bytes(&self) -> Vec<u8> ⓘ
§fn read_raw_unchecked<R>(reader: &mut R) -> Frwhere
R: Read,
fn read_raw_unchecked<R>(reader: &mut R) -> Frwhere
R: Read,
The purpose of unchecked functions is to read the internal memory representation
of a type from disk as quickly as possible. No sanitization checks are performed
to ensure the bytes represent a valid object. This function should only be used
internally when some machine state cannot be kept in memory (e.g., between runs)
and needs to be reloaded as quickly as possible.
fn read_raw<R>(reader: &mut R) -> Result<Fr, Error>where
R: Read,
fn write_raw<W>(&self, writer: &mut W) -> Result<(), Error>where
W: Write,
§impl Serialize for Fr
impl Serialize for Fr
§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Serialize this value into the given Serde serializer. Read more
§impl<'b> SubAssign<&'b Fr> for Fr
impl<'b> SubAssign<&'b Fr> for Fr
§fn sub_assign(&mut self, rhs: &'b Fr)
fn sub_assign(&mut self, rhs: &'b Fr)
Performs the
-= operation. Read more§impl Field for Fr
impl Field for Fr
§fn invert(&self) -> CtOption<Fr>
fn invert(&self) -> CtOption<Fr>
Returns the multiplicative inverse of the element. If it is zero, the method fails.
§fn random(rng: impl RngCore) -> Fr
fn random(rng: impl RngCore) -> Fr
Returns an element chosen uniformly at random using a user-provided RNG.
§fn sqrt(&self) -> CtOption<Fr>
fn sqrt(&self) -> CtOption<Fr>
Returns the square root of the field element, if it is
quadratic residue. Read more
§fn is_zero_vartime(&self) -> bool
fn is_zero_vartime(&self) -> bool
Returns true iff this element is zero. Read more
§fn pow_vartime<S>(&self, exp: S) -> Self
fn pow_vartime<S>(&self, exp: S) -> Self
impl Copy for Fr
impl Eq for Fr
impl StructuralPartialEq for Fr
Auto Trait Implementations§
impl Freeze for Fr
impl RefUnwindSafe for Fr
impl Send for Fr
impl Sync for Fr
impl Unpin for Fr
impl UnwindSafe for Fr
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ConditionallyNegatable for T
impl<T> ConditionallyNegatable for T
Source§fn conditional_negate(&mut self, choice: Choice)
fn conditional_negate(&mut self, choice: Choice)
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Formats each item in a sequence. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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> ⓘ
Converts
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> ⓘ
Converts
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§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
§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,
Borrows
self and passes that borrow into the pipe function. Read more§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,
Mutably borrows
self and passes that borrow into the pipe function. Read more§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
§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
§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
Borrows
self, then passes self.as_ref() into the pipe function.§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
Mutably borrows
self, then passes self.as_mut() into the pipe
function.§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
Borrows
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<F> PoseidonFieldHash for Fwhere
F: Field,
impl<F> PoseidonFieldHash for Fwhere
F: Field,
§fn digest_update<D>(&self, d: &mut D)where
D: FieldHashFnDigest<F>,
fn digest_update<D>(&self, d: &mut D)where
D: FieldHashFnDigest<F>,
Update the digest
d with the self (since self should already be a field element)§fn transcript_update(&self, t: &mut impl TranscriptSponge<F>, _l: &'static str)
fn transcript_update(&self, t: &mut impl TranscriptSponge<F>, _l: &'static str)
Update the [TranscriptSponge] with label
l and element self§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.§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
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.§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
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.