Skip to main content

Eidos

Struct Eidos 

Source
pub struct Eidos;
Expand description

Eidos hash construction.

Byte strings and field-element strings use distinct typed, registered domains. Both constructions bind the exact input length into the initial chaining value. The fixed two-to-one Merkle compression exposed by Self::merge is the sole reserved zero-tag construction and is deliberately distinct from ordinary Felt-sequence hashing. The CryptographicHasher<u64, _> implementations are bit-level adapters for the generic Felt-sequence construction. Canonical Goldilocks encodings produce exactly the same digest as their Felt counterparts. Other u64 values are split into their two limbs without reduction; this deterministic extension is not a separate registered message domain.

Digests occupy a 252-bit packed subspace and therefore provide at most 126 bits of generic collision resistance. Digest coordinates are below 2^63; use crate::rand::EidosRandomCoin when uniform field samples are required. See the module documentation for the output contract.

Implementations§

Source§

impl Eidos

Source

pub fn compress(cv: Word, block: [Felt; 8]) -> Word

Compress one complete block under a caller-supplied chaining value.

This is the raw compression layer underlying the Eidos hash construction. It does not add domain separation, length binding, padding, or any other message framing. The input CV may contain arbitrary canonical field elements; only the output CV is restricted to Eidos’s 252-bit packed subspace.

Source

pub fn compress_packed( cv: [[Felt; 16]; 4], block: [[Felt; 16]; 8], ) -> [[Felt; 16]; 4]

Compress one complete block in each packed lane.

Each lane is independent. Like Self::compress, this adds no message framing.

Source

pub fn compress_xof(cv: Word, block: [Felt; 8]) -> [Felt; 16]

Return all sixteen raw XOF output lanes for one complete block.

Each u32 lane is embedded as one field element. This is raw XOF material for a caller-supplied CV, not an Eidos digest, and no message framing is added.

Source

pub fn transcript_init_cv<D>(domain: D) -> Word
where D: EidosDomain<Encoding = Transcript>,

Construct the framed initial CV used by a Fiat-Shamir challenger.

The registered transcript tag occupies the domain lane and all three parameter lanes are zero. The transcript’s subsequent absorb and squeeze schedule is defined by its domain.

Source

pub fn init_chaining_word<D>(domain: D, param0: u32) -> Word
where D: EidosDomain,

Construct an initial chaining word with param0 in the first parameter lane.

The remaining two parameter lanes are zero. Standard Felt- and byte-sequence domains use param0 for the complete logical input length; custom domains define it in their registry schema.

Source

pub fn init_chaining_word_with_params<D>(_: D, params: [u32; 3]) -> Word
where D: EidosDomain,

Construct an initial chaining value from a registered domain tag and three parameters.

The domain defines the construction and the meaning of its parameters. Every supplied value occupies one complete low u32 lane; the corresponding high lane is a fixed IV word.

Source

pub fn init_chaining_word_with_tag(tag: DomainTag, params: [u32; 3]) -> Word

Construct an initial chaining value from a structurally valid runtime tag and three parameters.

This is the dynamic counterpart of Self::init_chaining_word_with_params for registries such as deferred precompiles, where the concrete domain is selected at runtime. Constructing a super::DomainTag establishes only its structural and namespace rules; the caller remains responsible for checking membership in the relevant owner registry and enforcing that domain’s parameter and payload schema.

Source

pub fn init_packed_chaining_word<D>(_: D, param0: u32) -> [[Felt; 16]; 4]
where D: EidosDomain,

Construct the same one-parameter initial chaining word in every packed lane.

The interpretation of param0 is defined by the registered domain.

Source

pub fn hash(bytes: &[u8]) -> Word

Hash a byte string with the registered generic byte-string domain.

§Panics

Panics if the byte length does not fit in u32.

Source

pub fn hash_in_domain<D>(bytes: &[u8], _: D) -> Word
where D: EidosDomain<Encoding = ByteString>,

Hash a byte string under a typed byte-string domain.

A Felt-sequence or custom-schedule domain cannot be passed to this function.

§Panics

Panics if the byte length does not fit in u32.

Source

pub fn hash_elements<E>(elements: &[E]) -> Word

Hash a field-element sequence under the registered generic Felt-sequence domain.

§Panics

Panics if the flattened Felt length overflows usize or does not fit in u32.

Source

pub fn hash_elements_in_domain<E, D>(elements: &[E], _: D) -> Word
where E: BasedVectorSpace<Felt>, D: EidosDomain<Encoding = FeltSequence>,

Hash a field-element sequence under a typed Felt-sequence domain.

A byte-string or custom-schedule domain cannot be passed to this function.

§Panics

Panics if the flattened Felt length overflows usize or does not fit in u32.

ⓘ
use miden_crypto::{Felt, hash::eidos::{Eidos, domains::GENERIC_BYTE_STRING}};

let values = [Felt::ZERO];
let _ = Eidos::hash_elements_in_domain(&values, GENERIC_BYTE_STRING);

Raw field elements are not domain declarations either:

ⓘ
use miden_crypto::{Felt, hash::eidos::Eidos};

let values = [Felt::ZERO];
let byte_tag = Felt::new_unchecked(0x0000_0301);
let _ = Eidos::hash_elements_in_domain(&values, byte_tag);
Source

pub fn merge(values: &[Word; 2]) -> Word

Compress two digest words as one reserved Merkle inner node.

This fixed, one-block construction uses the reserved all-zero framing tuple and is intentionally not equivalent to Self::hash_elements over the same eight Felts.

Source

pub fn merkle_node_init_chaining_word() -> Word

Return the initial chaining word reserved for Merkle inner-node compression.

Its four injected framing lanes are all zero. It is exposed for implementations which schedule Self::merge through a separate compression engine; ordinary callers should use Self::merge directly.

Source

pub fn merge_packed(values: &[[[Felt; 16]; 4]; 2]) -> [[Felt; 16]; 4]

Compress two packed digest words as reserved Merkle inner nodes in every packed lane.

This is the packed equivalent of Self::merge.

Source

pub fn hash_double_word(values: &[Word; 2]) -> Word

Hash two words as one generic eight-Felt sequence.

Source

pub fn hash_double_word_packed(values: &[[[Felt; 16]; 4]; 2]) -> [[Felt; 16]; 4]

Hash packed pairs of words as generic eight-Felt sequences.

Source

pub fn hash_double_word_in_domain<D>(values: &[Word; 2], _: D) -> Word
where D: EidosDomain<Encoding = FeltSequence>,

Hash two words as one eight-Felt sequence under a typed Felt-sequence domain.

Source

pub fn hash_words(values: &[Word]) -> Word

Hash a sequence of words under the generic Felt-sequence domain.

§Panics

Panics if the flattened Felt length does not fit in u32.

Trait Implementations§

Source§

impl Clone for Eidos

Source§

fn clone(&self) -> Eidos

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Eidos

Source§

impl CryptographicHasher<Felt, [Felt; 4]> for Eidos

Source§

fn hash_iter<I>(&self, input: I) -> [Felt; 4]
where I: IntoIterator<Item = Felt>,

Hash an iterator of input items. Read more
Source§

fn hash_slice(&self, input: &[Felt]) -> [Felt; 4]

Hash a single slice of items. Read more
Source§

const LANES: usize = 1

Number of equal-length messages this implementation hashes most efficiently in one call. Read more
Source§

const PREFER_CONTIGUOUS_INPUT: bool = false

Whether materializing a compound input iterator can improve hashing throughput. Read more
Source§

fn hash_iter_slices<'a, I>(&self, input: I) -> Out
where I: IntoIterator<Item = &'a [Item]>, Item: 'a,

Hash an iterator of slices, by flattening it into a single stream of items. Read more
Source§

fn hash_item(&self, input: Item) -> Out

Hash a single item. Read more
Source§

fn hash_many(&self, input: &[Item], out: &mut [Out])

Hash a batch of equal-length messages, one digest per message. Read more
Source§

impl CryptographicHasher<[Felt; 16], [[Felt; 16]; 4]> for Eidos

Source§

fn hash_iter<I>(&self, input: I) -> [[Felt; 16]; 4]
where I: IntoIterator<Item = [Felt; 16]>,

Hash an iterator of input items. Read more
Source§

fn hash_slice(&self, input: &[[Felt; 16]]) -> [[Felt; 16]; 4]

Hash a single slice of items. Read more
Source§

const LANES: usize = 1

Number of equal-length messages this implementation hashes most efficiently in one call. Read more
Source§

const PREFER_CONTIGUOUS_INPUT: bool = false

Whether materializing a compound input iterator can improve hashing throughput. Read more
Source§

fn hash_iter_slices<'a, I>(&self, input: I) -> Out
where I: IntoIterator<Item = &'a [Item]>, Item: 'a,

Hash an iterator of slices, by flattening it into a single stream of items. Read more
Source§

fn hash_item(&self, input: Item) -> Out

Hash a single item. Read more
Source§

fn hash_many(&self, input: &[Item], out: &mut [Out])

Hash a batch of equal-length messages, one digest per message. Read more
Source§

impl CryptographicHasher<[u64; 16], [[u64; 16]; 4]> for Eidos

Source§

fn hash_iter<I>(&self, input: I) -> [[u64; 16]; 4]
where I: IntoIterator<Item = [u64; 16]>,

Hash an iterator of input items. Read more
Source§

fn hash_slice(&self, input: &[[u64; 16]]) -> [[u64; 16]; 4]

Hash a single slice of items. Read more
Source§

const LANES: usize = 1

Number of equal-length messages this implementation hashes most efficiently in one call. Read more
Source§

const PREFER_CONTIGUOUS_INPUT: bool = false

Whether materializing a compound input iterator can improve hashing throughput. Read more
Source§

fn hash_iter_slices<'a, I>(&self, input: I) -> Out
where I: IntoIterator<Item = &'a [Item]>, Item: 'a,

Hash an iterator of slices, by flattening it into a single stream of items. Read more
Source§

fn hash_item(&self, input: Item) -> Out

Hash a single item. Read more
Source§

fn hash_many(&self, input: &[Item], out: &mut [Out])

Hash a batch of equal-length messages, one digest per message. Read more
Source§

impl CryptographicHasher<u64, [u64; 4]> for Eidos

Source§

fn hash_iter<I>(&self, input: I) -> [u64; 4]
where I: IntoIterator<Item = u64>,

Hash an iterator of input items. Read more
Source§

fn hash_slice(&self, input: &[u64]) -> [u64; 4]

Hash a single slice of items. Read more
Source§

const LANES: usize = 1

Number of equal-length messages this implementation hashes most efficiently in one call. Read more
Source§

const PREFER_CONTIGUOUS_INPUT: bool = false

Whether materializing a compound input iterator can improve hashing throughput. Read more
Source§

fn hash_iter_slices<'a, I>(&self, input: I) -> Out
where I: IntoIterator<Item = &'a [Item]>, Item: 'a,

Hash an iterator of slices, by flattening it into a single stream of items. Read more
Source§

fn hash_item(&self, input: Item) -> Out

Hash a single item. Read more
Source§

fn hash_many(&self, input: &[Item], out: &mut [Out])

Hash a batch of equal-length messages, one digest per message. Read more
Source§

impl Debug for Eidos

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Eq for Eidos

Source§

impl PartialEq for Eidos

Source§

fn eq(&self, other: &Eidos) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Eidos

Auto Trait Implementations§

§

impl Freeze for Eidos

§

impl RefUnwindSafe for Eidos

§

impl Send for Eidos

§

impl Sync for Eidos

§

impl Unpin for Eidos

§

impl UnsafeUnpin for Eidos

§

impl UnwindSafe for Eidos

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Dup for T
where T: Copy + Clone,

Source§

fn dup(&self) -> T

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

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
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more