From 17f13dbe9f20b26774c80a3e17617f0e69ee952d Mon Sep 17 00:00:00 2001 From: Al-Kindi-0 <82364884+Al-Kindi-0@users.noreply.github.com> Date: Wed, 19 Oct 2022 09:25:02 +0200 Subject: [PATCH] fix nits --- crypto/Cargo.toml | 14 ++++++++++--- crypto/src/hash/mod.rs | 31 ++++++++++++++++++++++++++++ crypto/src/merkle/merkle_path_set.rs | 5 +++-- crypto/src/merkle/merkle_tree.rs | 7 ++----- crypto/src/merkle/mod.rs | 22 +------------------- 5 files changed, 48 insertions(+), 31 deletions(-) diff --git a/crypto/Cargo.toml b/crypto/Cargo.toml index 1fd2fc2..4980086 100644 --- a/crypto/Cargo.toml +++ b/crypto/Cargo.toml @@ -1,12 +1,20 @@ [package] name = "crypto" version = "0.1.0" +description="Miden Cryptographic primitives" +authors = ["miden contributors"] +readme="README.md" +license = "MIT" +repository = "https://github.com/0xPolygonMiden/crypto" +categories = ["cryptography", "no-std"] +keywords = ["miden", "crypto", "hash", "merkle"] edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] winterfell = { git = "https://github.com/novifinancial/winterfell"} winter_utils = { version = "0.4", package = "winter-utils" } rand_utils = { version = "0.4", package = "winter-rand-utils" } -proptest = "1.0.0" + + +[dev-dependencies] +proptest = "1.0.0" \ No newline at end of file diff --git a/crypto/src/hash/mod.rs b/crypto/src/hash/mod.rs index 8b13789..6be9cfb 100644 --- a/crypto/src/hash/mod.rs +++ b/crypto/src/hash/mod.rs @@ -1 +1,32 @@ +use winterfell::crypto::{ElementHasher}; +use winterfell::math::StarkField; +use winterfell::crypto::Hasher as HashFn; +use winterfell::crypto::hashers::Rp64_256 as Hasher; +mod rpo; +pub use rpo::Rpo; + + +// TYPE ALIASES +// ================================================================================================ + +pub type Digest = ::Digest; + + +// HELPER FUNCTIONS +// ================================================================================================ + +#[inline(always)] +fn exp_acc(base: [B; N], tail: [B; N]) -> [B; N] { + let mut result = base; + for _ in 0..M { + result.iter_mut().for_each(|r| *r = r.square()); + } + result.iter_mut().zip(tail).for_each(|(r, t)| *r *= t); + result +} + +#[inline(always)] +pub fn merge(values: &[Digest; 2]) -> Digest { + Hasher::merge(values) +} \ No newline at end of file diff --git a/crypto/src/merkle/merkle_path_set.rs b/crypto/src/merkle/merkle_path_set.rs index eae03fa..72f705d 100644 --- a/crypto/src/merkle/merkle_path_set.rs +++ b/crypto/src/merkle/merkle_path_set.rs @@ -1,6 +1,7 @@ -use std::collections::BTreeMap; +use winter_utils::collections::BTreeMap; -use super::{merge, Felt, FieldElement, MerkleError, Word}; +use super::{Felt, FieldElement, MerkleError, Word}; +use crate::hash::merge; // MERKLE PATH SET // ================================================================================================ diff --git a/crypto/src/merkle/merkle_tree.rs b/crypto/src/merkle/merkle_tree.rs index 2abf82f..daa289b 100644 --- a/crypto/src/merkle/merkle_tree.rs +++ b/crypto/src/merkle/merkle_tree.rs @@ -1,12 +1,9 @@ use core::slice; - -use super::Digest; use winter_utils::uninit_vector; use winterfell::math::log2; -use crate::{Felt, FieldElement, Word}; - -use super::{merge, MerkleError}; +use crate::{Felt, FieldElement, Word, hash::{merge,Digest}}; +use super::MerkleError; // MERKLE TREE // ================================================================================================ diff --git a/crypto/src/merkle/mod.rs b/crypto/src/merkle/mod.rs index 0e7f778..9851c2a 100644 --- a/crypto/src/merkle/mod.rs +++ b/crypto/src/merkle/mod.rs @@ -1,28 +1,8 @@ pub mod merkle_path_set; pub mod merkle_tree; -use winterfell::crypto::Hasher as HashFn; +use crate::{Felt, FieldElement, Word}; -pub use winterfell::crypto::hashers::Rp64_256 as Hasher; -pub use winterfell::math::{ - fields::{f64::BaseElement as Felt, QuadExtension}, - ExtensionOf, FieldElement, StarkField, -}; - -// TYPE ALIASES -// ================================================================================================ - -pub type Word = [Felt; 4]; -pub type Digest = ::Digest; - -// PASS-THROUGH FUNCTIONS -// ================================================================================================ - -/// Returns a hash of two digests. This method is intended for use in construction of Merkle trees. -#[inline(always)] -pub fn merge(values: &[Digest; 2]) -> Digest { - Hasher::merge(values) -} // ERRORS // ================================================================================================