Struct miden_processor::QuadExtension
#[repr(C)]pub struct QuadExtension<B>(_, _)
where
B: ExtensibleField<2>;
Expand description
Represents an element in a quadratic extension of a StarkField.
The extension element is defined as α + β * φ, where φ is a root of in irreducible polynomial defined by the implementation of the [ExtensibleField] trait, and α and β are base field elements.
Implementations§
§impl<B> QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> QuadExtension<B>where B: ExtensibleField<2>,
pub const fn new(a: B, b: B) -> QuadExtension<B>
pub const fn new(a: B, b: B) -> QuadExtension<B>
Returns a new extension element instantiated from the provided base elements.
pub fn is_supported() -> bool
pub fn is_supported() -> bool
Returns true if the base field specified by B type parameter supports quadratic extensions.
pub const fn to_base_elements(self) -> [B; 2]
pub const fn to_base_elements(self) -> [B; 2]
Returns an array of base field elements comprising this extension field element.
The order of abase elements in the returned array is the same as the order in which the elements are provided to the QuadExtension::new() constructor.
Trait Implementations§
§impl<B> Add<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Add<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§type Output = QuadExtension<B>
type Output = QuadExtension<B>
+
operator.§fn add(self, rhs: QuadExtension<B>) -> QuadExtension<B>
fn add(self, rhs: QuadExtension<B>) -> QuadExtension<B>
+
operation. Read more§impl<B> AddAssign<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> AddAssign<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§fn add_assign(&mut self, rhs: QuadExtension<B>)
fn add_assign(&mut self, rhs: QuadExtension<B>)
+=
operation. Read more§impl<B> AsBytes for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> AsBytes for QuadExtension<B>where B: ExtensibleField<2>,
§impl<B> Clone for QuadExtension<B>where
B: Clone + ExtensibleField<2>,
impl<B> Clone for QuadExtension<B>where B: Clone + ExtensibleField<2>,
§fn clone(&self) -> QuadExtension<B>
fn clone(&self) -> QuadExtension<B>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<B> Debug for QuadExtension<B>where
B: Debug + ExtensibleField<2>,
impl<B> Debug for QuadExtension<B>where B: Debug + ExtensibleField<2>,
§impl<B> Default for QuadExtension<B>where
B: Default + ExtensibleField<2>,
impl<B> Default for QuadExtension<B>where B: Default + ExtensibleField<2>,
§fn default() -> QuadExtension<B>
fn default() -> QuadExtension<B>
§impl<B> Deserializable for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Deserializable for QuadExtension<B>where B: ExtensibleField<2>,
§fn read_from<R>(
source: &mut R
) -> Result<QuadExtension<B>, DeserializationError>where
R: ByteReader,
fn read_from<R>( source: &mut R ) -> Result<QuadExtension<B>, DeserializationError>where R: ByteReader,
source
, attempts to deserialize these bytes
into Self
, and returns the result. Read more§fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
§fn read_batch_from<R>(
source: &mut R,
num_elements: usize
) -> Result<Vec<Self, Global>, DeserializationError>where
R: ByteReader,
fn read_batch_from<R>( source: &mut R, num_elements: usize ) -> Result<Vec<Self, Global>, DeserializationError>where R: ByteReader,
source
, attempts to deserialize these bytes
into a vector with the specified number of Self
elements, and returns the result. Read more§impl<B> Display for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Display for QuadExtension<B>where B: ExtensibleField<2>,
§impl<B> Div<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Div<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§type Output = QuadExtension<B>
type Output = QuadExtension<B>
/
operator.§fn div(self, rhs: QuadExtension<B>) -> QuadExtension<B>
fn div(self, rhs: QuadExtension<B>) -> QuadExtension<B>
/
operation. Read more§impl<B> DivAssign<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> DivAssign<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§fn div_assign(&mut self, rhs: QuadExtension<B>)
fn div_assign(&mut self, rhs: QuadExtension<B>)
/=
operation. Read more§impl<B> ExtensionOf<B> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> ExtensionOf<B> for QuadExtension<B>where B: ExtensibleField<2>,
fn mul_base(self, other: B) -> QuadExtension<B>
§impl<B> FieldElement for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> FieldElement for QuadExtension<B>where B: ExtensibleField<2>,
§type PositiveInteger = <B as FieldElement>::PositiveInteger
type PositiveInteger = <B as FieldElement>::PositiveInteger
Self::BaseField
with no loss of precision.§type BaseField = B
type BaseField = B
BaseField
should be set
to Self
.§const EXTENSION_DEGREE: usize = 2usize
const EXTENSION_DEGREE: usize = 2usize
Self::BaseField
. For prime fields,
extension degree should be set to 1.§const ELEMENT_BYTES: usize = B::ELEMENT_BYTES * Self::EXTENSION_DEGREE
const ELEMENT_BYTES: usize = B::ELEMENT_BYTES * Self::EXTENSION_DEGREE
§const IS_CANONICAL: bool = B::IS_CANONICAL
const IS_CANONICAL: bool = B::IS_CANONICAL
§const ZERO: QuadExtension<B> = Self(B::ZERO, B::ZERO)
const ZERO: QuadExtension<B> = Self(B::ZERO, B::ZERO)
§const ONE: QuadExtension<B> = Self(B::ONE, B::ZERO)
const ONE: QuadExtension<B> = Self(B::ONE, B::ZERO)
§fn double(self) -> QuadExtension<B>
fn double(self) -> QuadExtension<B>
§fn square(self) -> QuadExtension<B>
fn square(self) -> QuadExtension<B>
§fn inv(self) -> QuadExtension<B>
fn inv(self) -> QuadExtension<B>
§fn conjugate(&self) -> QuadExtension<B>
fn conjugate(&self) -> QuadExtension<B>
§fn base_element(
&self,
i: usize
) -> <QuadExtension<B> as FieldElement>::BaseField
fn base_element( &self, i: usize ) -> <QuadExtension<B> as FieldElement>::BaseField
i
. Read more§fn slice_as_base_elements(
elements: &[QuadExtension<B>]
) -> &[<QuadExtension<B> as FieldElement>::BaseField]
fn slice_as_base_elements( elements: &[QuadExtension<B>] ) -> &[<QuadExtension<B> as FieldElement>::BaseField]
§fn slice_from_base_elements(
elements: &[<QuadExtension<B> as FieldElement>::BaseField]
) -> &[QuadExtension<B>]
fn slice_from_base_elements( elements: &[<QuadExtension<B> as FieldElement>::BaseField] ) -> &[QuadExtension<B>]
§fn elements_as_bytes(elements: &[QuadExtension<B>]) -> &[u8] ⓘ
fn elements_as_bytes(elements: &[QuadExtension<B>]) -> &[u8] ⓘ
§unsafe fn bytes_as_elements(
bytes: &[u8]
) -> Result<&[QuadExtension<B>], DeserializationError>
unsafe fn bytes_as_elements( bytes: &[u8] ) -> Result<&[QuadExtension<B>], DeserializationError>
§fn zeroed_vector(n: usize) -> Vec<QuadExtension<B>, Global>
fn zeroed_vector(n: usize) -> Vec<QuadExtension<B>, Global>
n
initialized with all ZERO elements. Read more§fn exp(self, power: Self::PositiveInteger) -> Self
fn exp(self, power: Self::PositiveInteger) -> Self
power
parameter.§fn exp_vartime(self, power: Self::PositiveInteger) -> Self
fn exp_vartime(self, power: Self::PositiveInteger) -> Self
power
parameter.
This function is expressly variable time, to speed-up verifier computations.§impl<B> From<B> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> From<B> for QuadExtension<B>where B: ExtensibleField<2>,
§fn from(value: B) -> QuadExtension<B>
fn from(value: B) -> QuadExtension<B>
§impl<B> From<u128> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> From<u128> for QuadExtension<B>where B: ExtensibleField<2>,
§fn from(value: u128) -> QuadExtension<B>
fn from(value: u128) -> QuadExtension<B>
§impl<B> From<u16> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> From<u16> for QuadExtension<B>where B: ExtensibleField<2>,
§fn from(value: u16) -> QuadExtension<B>
fn from(value: u16) -> QuadExtension<B>
§impl<B> From<u32> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> From<u32> for QuadExtension<B>where B: ExtensibleField<2>,
§fn from(value: u32) -> QuadExtension<B>
fn from(value: u32) -> QuadExtension<B>
§impl<B> From<u64> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> From<u64> for QuadExtension<B>where B: ExtensibleField<2>,
§fn from(value: u64) -> QuadExtension<B>
fn from(value: u64) -> QuadExtension<B>
§impl<B> From<u8> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> From<u8> for QuadExtension<B>where B: ExtensibleField<2>,
§fn from(value: u8) -> QuadExtension<B>
fn from(value: u8) -> QuadExtension<B>
§impl<B> Mul<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Mul<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§type Output = QuadExtension<B>
type Output = QuadExtension<B>
*
operator.§fn mul(self, rhs: QuadExtension<B>) -> QuadExtension<B>
fn mul(self, rhs: QuadExtension<B>) -> QuadExtension<B>
*
operation. Read more§impl<B> MulAssign<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> MulAssign<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§fn mul_assign(&mut self, rhs: QuadExtension<B>)
fn mul_assign(&mut self, rhs: QuadExtension<B>)
*=
operation. Read more§impl<B> Neg for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Neg for QuadExtension<B>where B: ExtensibleField<2>,
§type Output = QuadExtension<B>
type Output = QuadExtension<B>
-
operator.§fn neg(self) -> QuadExtension<B>
fn neg(self) -> QuadExtension<B>
-
operation. Read more§impl<B> PartialEq<QuadExtension<B>> for QuadExtension<B>where
B: PartialEq<B> + ExtensibleField<2>,
impl<B> PartialEq<QuadExtension<B>> for QuadExtension<B>where B: PartialEq<B> + ExtensibleField<2>,
§fn eq(&self, other: &QuadExtension<B>) -> bool
fn eq(&self, other: &QuadExtension<B>) -> bool
self
and other
values to be equal, and is used
by ==
.§impl<B> Randomizable for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Randomizable for QuadExtension<B>where B: ExtensibleField<2>,
§const VALUE_SIZE: usize = Self::ELEMENT_BYTES
const VALUE_SIZE: usize = Self::ELEMENT_BYTES
Self
in bytes. Read more§fn from_random_bytes(bytes: &[u8]) -> Option<QuadExtension<B>>
fn from_random_bytes(bytes: &[u8]) -> Option<QuadExtension<B>>
Self
if the set of bytes forms a valid value, otherwise returns None.§impl<B> Serializable for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Serializable for QuadExtension<B>where B: ExtensibleField<2>,
§fn write_into<W>(&self, target: &mut W)where
W: ByteWriter,
fn write_into<W>(&self, target: &mut W)where W: ByteWriter,
self
into bytes and writes these bytes into the target
.§fn write_batch_into<W>(source: &[Self], target: &mut W)where
W: ByteWriter,
fn write_batch_into<W>(source: &[Self], target: &mut W)where W: ByteWriter,
§fn get_size_hint(&self) -> usize
fn get_size_hint(&self) -> usize
§impl<B> Sub<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> Sub<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§type Output = QuadExtension<B>
type Output = QuadExtension<B>
-
operator.§fn sub(self, rhs: QuadExtension<B>) -> QuadExtension<B>
fn sub(self, rhs: QuadExtension<B>) -> QuadExtension<B>
-
operation. Read more§impl<B> SubAssign<QuadExtension<B>> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<B> SubAssign<QuadExtension<B>> for QuadExtension<B>where B: ExtensibleField<2>,
§fn sub_assign(&mut self, rhs: QuadExtension<B>)
fn sub_assign(&mut self, rhs: QuadExtension<B>)
-=
operation. Read more§impl<'a, B> TryFrom<&'a [u8]> for QuadExtension<B>where
B: ExtensibleField<2>,
impl<'a, B> TryFrom<&'a [u8]> for QuadExtension<B>where B: ExtensibleField<2>,
§fn try_from(
bytes: &[u8]
) -> Result<QuadExtension<B>, <QuadExtension<B> as TryFrom<&'a [u8]>>::Error>
fn try_from( bytes: &[u8] ) -> Result<QuadExtension<B>, <QuadExtension<B> as TryFrom<&'a [u8]>>::Error>
Converts a slice of bytes into a field element; returns error if the value encoded in bytes is not a valid field element. The bytes are assumed to be in little-endian byte order.