Struct triton_vm::prelude::BFieldElement
source · pub struct BFieldElement(/* private fields */);Expand description
Base field element ∈ ℤ_{2^64 - 2^32 + 1}.
In Montgomery representation. This implementation follows https://eprint.iacr.org/2022/274.pdf and https://github.com/novifinancial/winterfell/pull/101/files.
Implementations§
source§impl BFieldElement
impl BFieldElement
pub const BYTES: usize = 8usize
sourcepub const P: u64 = 18_446_744_069_414_584_321u64
pub const P: u64 = 18_446_744_069_414_584_321u64
The base field’s prime, i.e., 2^64 - 2^32 + 1.
pub const MAX: u64 = 18_446_744_069_414_584_320u64
pub const fn new(value: u64) -> BFieldElement
pub const fn value(&self) -> u64
sourcepub const fn power_accumulator<const N: usize, const M: usize>(
base: [BFieldElement; N],
tail: [BFieldElement; N]
) -> [BFieldElement; N]
pub const fn power_accumulator<const N: usize, const M: usize>( base: [BFieldElement; N], tail: [BFieldElement; N] ) -> [BFieldElement; N]
Square the base M times and multiply the result by the tail value
sourcepub const fn generator() -> BFieldElement
pub const fn generator() -> BFieldElement
Get a generator for the entire field
pub const fn lift(&self) -> XFieldElement
pub fn increment(&mut self)
pub fn decrement(&mut self)
pub const fn mod_pow(&self, exp: u64) -> BFieldElement
sourcepub fn from_ne_bytes(bytes: &[u8]) -> BFieldElement
pub fn from_ne_bytes(bytes: &[u8]) -> BFieldElement
Convert a BFieldElement from a byte slice in native endianness.
sourcepub const fn raw_bytes(&self) -> [u8; 8]
pub const fn raw_bytes(&self) -> [u8; 8]
Return the raw bytes or 8-bit chunks of the Montgomery representation, in little-endian byte order
sourcepub const fn from_raw_bytes(bytes: &[u8; 8]) -> BFieldElement
pub const fn from_raw_bytes(bytes: &[u8; 8]) -> BFieldElement
Take a slice of 8 bytes and interpret it as an integer in little-endian byte order, and cast it to a BFieldElement in Montgomery representation
sourcepub const fn raw_u16s(&self) -> [u16; 4]
pub const fn raw_u16s(&self) -> [u16; 4]
Return the raw 16-bit chunks of the Montgomery representation, in little-endian chunk order
sourcepub const fn from_raw_u16s(chunks: &[u16; 4]) -> BFieldElement
pub const fn from_raw_u16s(chunks: &[u16; 4]) -> BFieldElement
Take a slice of 4 16-bit chunks and interpret it as an integer in little-endian chunk order, and cast it to a BFieldElement in Montgomery representation
pub fn raw_u128(&self) -> u128
pub const fn from_raw_u64(e: u64) -> BFieldElement
pub fn raw_u64(&self) -> u64
Trait Implementations§
source§impl Add<BFieldElement> for XFieldElement
impl Add<BFieldElement> for XFieldElement
§type Output = XFieldElement
type Output = XFieldElement
+ operator.source§fn add(self, other: BFieldElement) -> XFieldElement
fn add(self, other: BFieldElement) -> XFieldElement
+ operation. Read moresource§impl Add<XFieldElement> for BFieldElement
impl Add<XFieldElement> for BFieldElement
The bfe + xfe -> xfe instance belongs to BFieldElement.
§type Output = XFieldElement
type Output = XFieldElement
+ operator.source§fn add(self, other: XFieldElement) -> XFieldElement
fn add(self, other: XFieldElement) -> XFieldElement
+ operation. Read moresource§impl Add for BFieldElement
impl Add for BFieldElement
§type Output = BFieldElement
type Output = BFieldElement
+ operator.source§fn add(self, rhs: BFieldElement) -> BFieldElement
fn add(self, rhs: BFieldElement) -> BFieldElement
+ operation. Read moresource§impl AddAssign<BFieldElement> for XFieldElement
impl AddAssign<BFieldElement> for XFieldElement
source§fn add_assign(&mut self, rhs: BFieldElement)
fn add_assign(&mut self, rhs: BFieldElement)
+= operation. Read moresource§impl AddAssign for BFieldElement
impl AddAssign for BFieldElement
source§fn add_assign(&mut self, rhs: BFieldElement)
fn add_assign(&mut self, rhs: BFieldElement)
+= operation. Read moresource§impl<'a> Arbitrary<'a> for BFieldElement
impl<'a> Arbitrary<'a> for BFieldElement
source§fn arbitrary(u: &mut Unstructured<'a>) -> Result<BFieldElement, Error>
fn arbitrary(u: &mut Unstructured<'a>) -> Result<BFieldElement, Error>
Self from the given unstructured data. Read moresource§fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>
fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>
Self from the entirety of the given
unstructured data. Read moresource§impl BFieldCodec for BFieldElement
impl BFieldCodec for BFieldElement
type Error = BFieldCodecError
fn decode( sequence: &[BFieldElement] ) -> Result<Box<BFieldElement>, <BFieldElement as BFieldCodec>::Error>
fn encode(&self) -> Vec<BFieldElement>
source§fn static_length() -> Option<usize>
fn static_length() -> Option<usize>
source§impl Clone for BFieldElement
impl Clone for BFieldElement
source§fn clone(&self) -> BFieldElement
fn clone(&self) -> BFieldElement
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl CyclicGroupGenerator for BFieldElement
impl CyclicGroupGenerator for BFieldElement
fn get_cyclic_group_elements(&self, max: Option<usize>) -> Vec<BFieldElement>
source§impl Debug for BFieldElement
impl Debug for BFieldElement
source§impl Default for BFieldElement
impl Default for BFieldElement
source§fn default() -> BFieldElement
fn default() -> BFieldElement
source§impl<'de> Deserialize<'de> for BFieldElement
impl<'de> Deserialize<'de> for BFieldElement
source§fn deserialize<D>(
deserializer: D
) -> Result<BFieldElement, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D
) -> Result<BFieldElement, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
source§impl Display for BFieldElement
impl Display for BFieldElement
source§impl Div for BFieldElement
impl Div for BFieldElement
§type Output = BFieldElement
type Output = BFieldElement
/ operator.source§fn div(self, other: BFieldElement) -> BFieldElement
fn div(self, other: BFieldElement) -> BFieldElement
/ operation. Read moresource§impl Evaluable<BFieldElement> for MasterExtTable
impl Evaluable<BFieldElement> for MasterExtTable
source§fn evaluate_initial_constraints(
base_row: ArrayView1<'_, BFieldElement>,
ext_row: ArrayView1<'_, XFieldElement>,
challenges: &Challenges
) -> Vec<XFieldElement>
fn evaluate_initial_constraints( base_row: ArrayView1<'_, BFieldElement>, ext_row: ArrayView1<'_, XFieldElement>, challenges: &Challenges ) -> Vec<XFieldElement>
cargo run --bin constraint-evaluation-generatorsource§fn evaluate_consistency_constraints(
base_row: ArrayView1<'_, BFieldElement>,
ext_row: ArrayView1<'_, XFieldElement>,
challenges: &Challenges
) -> Vec<XFieldElement>
fn evaluate_consistency_constraints( base_row: ArrayView1<'_, BFieldElement>, ext_row: ArrayView1<'_, XFieldElement>, challenges: &Challenges ) -> Vec<XFieldElement>
cargo run --bin constraint-evaluation-generatorsource§fn evaluate_transition_constraints(
current_base_row: ArrayView1<'_, BFieldElement>,
current_ext_row: ArrayView1<'_, XFieldElement>,
next_base_row: ArrayView1<'_, BFieldElement>,
next_ext_row: ArrayView1<'_, XFieldElement>,
challenges: &Challenges
) -> Vec<XFieldElement>
fn evaluate_transition_constraints( current_base_row: ArrayView1<'_, BFieldElement>, current_ext_row: ArrayView1<'_, XFieldElement>, next_base_row: ArrayView1<'_, BFieldElement>, next_ext_row: ArrayView1<'_, XFieldElement>, challenges: &Challenges ) -> Vec<XFieldElement>
cargo run --bin constraint-evaluation-generatorsource§fn evaluate_terminal_constraints(
base_row: ArrayView1<'_, BFieldElement>,
ext_row: ArrayView1<'_, XFieldElement>,
challenges: &Challenges
) -> Vec<XFieldElement>
fn evaluate_terminal_constraints( base_row: ArrayView1<'_, BFieldElement>, ext_row: ArrayView1<'_, XFieldElement>, challenges: &Challenges ) -> Vec<XFieldElement>
cargo run --bin constraint-evaluation-generatorsource§impl FiniteField for BFieldElement
impl FiniteField for BFieldElement
source§impl From<&NumberOfWords> for BFieldElement
impl From<&NumberOfWords> for BFieldElement
source§fn from(num_words: &NumberOfWords) -> Self
fn from(num_words: &NumberOfWords) -> Self
source§impl From<&OpStackElement> for BFieldElement
impl From<&OpStackElement> for BFieldElement
source§fn from(stack_element: &OpStackElement) -> Self
fn from(stack_element: &OpStackElement) -> Self
source§impl From<BFieldElement> for [u8; 8]
impl From<BFieldElement> for [u8; 8]
Convert a B-field element to a byte array. The client uses this for its database.
source§impl From<HashTableMode> for BFieldElement
impl From<HashTableMode> for BFieldElement
source§fn from(mode: HashTableMode) -> Self
fn from(mode: HashTableMode) -> Self
source§impl From<NumberOfWords> for BFieldElement
impl From<NumberOfWords> for BFieldElement
source§fn from(num_words: NumberOfWords) -> Self
fn from(num_words: NumberOfWords) -> Self
source§impl From<OpStackElement> for BFieldElement
impl From<OpStackElement> for BFieldElement
source§fn from(stack_element: OpStackElement) -> Self
fn from(stack_element: OpStackElement) -> Self
source§impl From<i32> for BFieldElement
impl From<i32> for BFieldElement
source§fn from(value: i32) -> BFieldElement
fn from(value: i32) -> BFieldElement
source§impl From<u16> for BFieldElement
impl From<u16> for BFieldElement
source§fn from(value: u16) -> BFieldElement
fn from(value: u16) -> BFieldElement
source§impl From<u32> for BFieldElement
impl From<u32> for BFieldElement
source§fn from(value: u32) -> BFieldElement
fn from(value: u32) -> BFieldElement
source§impl From<u64> for BFieldElement
impl From<u64> for BFieldElement
source§fn from(value: u64) -> BFieldElement
fn from(value: u64) -> BFieldElement
source§impl From<u8> for BFieldElement
impl From<u8> for BFieldElement
source§fn from(value: u8) -> BFieldElement
fn from(value: u8) -> BFieldElement
source§impl FromStr for BFieldElement
impl FromStr for BFieldElement
§type Err = ParseBFieldElementError
type Err = ParseBFieldElementError
source§fn from_str(s: &str) -> Result<BFieldElement, <BFieldElement as FromStr>::Err>
fn from_str(s: &str) -> Result<BFieldElement, <BFieldElement as FromStr>::Err>
s to return a value of this type. Read moresource§impl GetSize for BFieldElement
impl GetSize for BFieldElement
source§fn get_stack_size() -> usize
fn get_stack_size() -> usize
source§fn get_heap_size(&self) -> usize
fn get_heap_size(&self) -> usize
source§impl Hash for BFieldElement
impl Hash for BFieldElement
source§impl Inverse for BFieldElement
impl Inverse for BFieldElement
fn inverse(&self) -> BFieldElement
fn inverse_or_zero(&self) -> Self
source§impl MasterTable<BFieldElement> for MasterBaseTable
impl MasterTable<BFieldElement> for MasterBaseTable
fn trace_domain(&self) -> ArithmeticDomain
fn randomized_trace_domain(&self) -> ArithmeticDomain
fn quotient_domain(&self) -> ArithmeticDomain
fn fri_domain(&self) -> ArithmeticDomain
source§fn trace_table(&self) -> ArrayView2<'_, BFieldElement>
fn trace_table(&self) -> ArrayView2<'_, BFieldElement>
source§fn trace_table_mut(&mut self) -> ArrayViewMut2<'_, BFieldElement>
fn trace_table_mut(&mut self) -> ArrayViewMut2<'_, BFieldElement>
fn randomized_trace_table(&self) -> ArrayView2<'_, BFieldElement>
fn randomized_trace_table_mut(&mut self) -> ArrayViewMut2<'_, BFieldElement>
source§fn quotient_domain_table(&self) -> ArrayView2<'_, BFieldElement>
fn quotient_domain_table(&self) -> ArrayView2<'_, BFieldElement>
low_degree_extend_all_columns first.source§fn fri_domain_table(&self) -> ArrayView2<'_, BFieldElement>
fn fri_domain_table(&self) -> ArrayView2<'_, BFieldElement>
low_degree_extend_all_columns first.source§fn memoize_low_degree_extended_table(
&mut self,
low_degree_extended_columns: Array2<BFieldElement>
)
fn memoize_low_degree_extended_table( &mut self, low_degree_extended_columns: Array2<BFieldElement> )
Self::low_degree_extend_all_columns.source§fn low_degree_extended_table(&self) -> ArrayView2<'_, BFieldElement>
fn low_degree_extended_table(&self) -> ArrayView2<'_, BFieldElement>
low_degree_extend_all_columns first.source§fn memoize_interpolation_polynomials(
&mut self,
interpolation_polynomials: Array1<Polynomial<BFieldElement>>
)
fn memoize_interpolation_polynomials( &mut self, interpolation_polynomials: Array1<Polynomial<BFieldElement>> )
Self::low_degree_extend_all_columns.source§fn interpolation_polynomials(&self) -> ArrayView1<'_, Polynomial<XFieldElement>>
fn interpolation_polynomials(&self) -> ArrayView1<'_, Polynomial<XFieldElement>>
low_degree_extend_all_columns first. source§fn row(&self, row_index: XFieldElement) -> Array1<XFieldElement>
fn row(&self, row_index: XFieldElement) -> Array1<XFieldElement>
low_degree_extend_all_columns first.
Does not include randomizer polynomials.fn hash_one_row(row: ArrayView1<'_, BFieldElement>) -> Digest
source§fn randomize_trace(&mut self)
fn randomize_trace(&mut self)
source§fn low_degree_extend_all_columns(&mut self)
fn low_degree_extend_all_columns(&mut self)
quotient_domain_table and
fri_domain_table.source§fn merkle_tree(
&self,
maybe_profiler: &mut Option<TritonProfiler>
) -> MerkleTree<Tip5>
fn merkle_tree( &self, maybe_profiler: &mut Option<TritonProfiler> ) -> MerkleTree<Tip5>
hash_row is used to hash each row.fn hash_all_fri_domain_rows(&self) -> Vec<Digest>
source§impl ModPowU32 for BFieldElement
impl ModPowU32 for BFieldElement
fn mod_pow_u32(&self, exp: u32) -> BFieldElement
source§impl ModPowU64 for BFieldElement
impl ModPowU64 for BFieldElement
fn mod_pow_u64(&self, pow: u64) -> BFieldElement
source§impl Mul<BFieldElement> for XFieldElement
impl Mul<BFieldElement> for XFieldElement
XField * BField means scalar multiplication of the BFieldElement onto each coefficient of the XField.
§type Output = XFieldElement
type Output = XFieldElement
* operator.source§fn mul(self, other: BFieldElement) -> XFieldElement
fn mul(self, other: BFieldElement) -> XFieldElement
* operation. Read moresource§impl Mul<XFieldElement> for BFieldElement
impl Mul<XFieldElement> for BFieldElement
§type Output = XFieldElement
type Output = XFieldElement
* operator.source§fn mul(self, other: XFieldElement) -> XFieldElement
fn mul(self, other: XFieldElement) -> XFieldElement
* operation. Read moresource§impl Mul for BFieldElement
impl Mul for BFieldElement
§type Output = BFieldElement
type Output = BFieldElement
* operator.source§fn mul(self, rhs: BFieldElement) -> BFieldElement
fn mul(self, rhs: BFieldElement) -> BFieldElement
* operation. Read moresource§impl MulAssign<BFieldElement> for XFieldElement
impl MulAssign<BFieldElement> for XFieldElement
source§fn mul_assign(&mut self, rhs: BFieldElement)
fn mul_assign(&mut self, rhs: BFieldElement)
*= operation. Read moresource§impl MulAssign for BFieldElement
impl MulAssign for BFieldElement
source§fn mul_assign(&mut self, rhs: BFieldElement)
fn mul_assign(&mut self, rhs: BFieldElement)
*= operation. Read moresource§impl Neg for BFieldElement
impl Neg for BFieldElement
§type Output = BFieldElement
type Output = BFieldElement
- operator.source§fn neg(self) -> BFieldElement
fn neg(self) -> BFieldElement
- operation. Read moresource§impl One for BFieldElement
impl One for BFieldElement
source§impl PartialEq for BFieldElement
impl PartialEq for BFieldElement
source§fn eq(&self, other: &BFieldElement) -> bool
fn eq(&self, other: &BFieldElement) -> bool
self and other values to be equal, and is used
by ==.source§impl PrimitiveRootOfUnity for BFieldElement
impl PrimitiveRootOfUnity for BFieldElement
fn primitive_root_of_unity(n: u64) -> Option<BFieldElement>
source§impl Serialize for BFieldElement
impl Serialize for BFieldElement
source§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,
source§impl Sub<BFieldElement> for XFieldElement
impl Sub<BFieldElement> for XFieldElement
§type Output = XFieldElement
type Output = XFieldElement
- operator.source§fn sub(self, other: BFieldElement) -> XFieldElement
fn sub(self, other: BFieldElement) -> XFieldElement
- operation. Read moresource§impl Sub<XFieldElement> for BFieldElement
impl Sub<XFieldElement> for BFieldElement
§type Output = XFieldElement
type Output = XFieldElement
- operator.source§fn sub(self, other: XFieldElement) -> XFieldElement
fn sub(self, other: XFieldElement) -> XFieldElement
- operation. Read moresource§impl Sub for BFieldElement
impl Sub for BFieldElement
§type Output = BFieldElement
type Output = BFieldElement
- operator.source§fn sub(self, rhs: BFieldElement) -> BFieldElement
fn sub(self, rhs: BFieldElement) -> BFieldElement
- operation. Read moresource§impl SubAssign<BFieldElement> for XFieldElement
impl SubAssign<BFieldElement> for XFieldElement
source§fn sub_assign(&mut self, rhs: BFieldElement)
fn sub_assign(&mut self, rhs: BFieldElement)
-= operation. Read moresource§impl SubAssign for BFieldElement
impl SubAssign for BFieldElement
source§fn sub_assign(&mut self, rhs: BFieldElement)
fn sub_assign(&mut self, rhs: BFieldElement)
-= operation. Read moresource§impl Sum for BFieldElement
impl Sum for BFieldElement
source§fn sum<I>(iter: I) -> BFieldElementwhere
I: Iterator<Item = BFieldElement>,
fn sum<I>(iter: I) -> BFieldElementwhere
I: Iterator<Item = BFieldElement>,
Self from the elements by
“summing up” the items.source§impl TryFrom<&BFieldElement> for NumberOfWords
impl TryFrom<&BFieldElement> for NumberOfWords
§type Error = NumberOfWordsError
type Error = NumberOfWordsError
source§fn try_from(index: &BFieldElement) -> Result<Self, NumberOfWordsError>
fn try_from(index: &BFieldElement) -> Result<Self, NumberOfWordsError>
source§impl TryFrom<BFieldElement> for Instruction
impl TryFrom<BFieldElement> for Instruction
§type Error = InstructionError
type Error = InstructionError
source§fn try_from(opcode: BFieldElement) -> Result<Self, InstructionError>
fn try_from(opcode: BFieldElement) -> Result<Self, InstructionError>
source§impl TryFrom<BFieldElement> for NumberOfWords
impl TryFrom<BFieldElement> for NumberOfWords
§type Error = NumberOfWordsError
type Error = NumberOfWordsError
source§fn try_from(index: BFieldElement) -> Result<Self, NumberOfWordsError>
fn try_from(index: BFieldElement) -> Result<Self, NumberOfWordsError>
source§impl TryFrom<BFieldElement> for OpStackElement
impl TryFrom<BFieldElement> for OpStackElement
§type Error = OpStackElementError
type Error = OpStackElementError
source§fn try_from(stack_index: BFieldElement) -> Result<Self, OpStackElementError>
fn try_from(stack_index: BFieldElement) -> Result<Self, OpStackElementError>
source§impl Zero for BFieldElement
impl Zero for BFieldElement
impl Copy for BFieldElement
impl Eq for BFieldElement
impl StructuralPartialEq for BFieldElement
Auto Trait Implementations§
impl Freeze for BFieldElement
impl RefUnwindSafe for BFieldElement
impl Send for BFieldElement
impl Sync for BFieldElement
impl Unpin for BFieldElement
impl UnwindSafe for BFieldElement
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> 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