arnaucube
arnaucube/miden-cryptoPublic Self-hosted repository
chore: handle deprecations in winterfell 0.8.3 release
Paul Schoenfelder paulschoenfelder@fastmail.com
Sat, 16 Mar 2024 00:31:12 -0400
commit

999a64fca64d913437ed54812fcb3cdbf9cc8d36

parent

4bc4bea0dbc19841ea1b82a1a5742ab2c54f4de6

M Cargo.toml → Cargo.toml

@@ -38,7 +38,6 @@ serde = ["dep:serde", "serde?/alloc", "winter_math/serde"]

std = [ "blake3/std", "dep:cc", - "dep:libc", "winter_crypto/std", "winter_math/std", "winter_utils/std",

@@ -47,9 +46,10 @@

[dependencies] blake3 = { version = "1.5", default-features = false } clap = { version = "4.5", features = ["derive"], optional = true } -libc = { version = "0.2", default-features = false, optional = true } rand_utils = { version = "0.8", package = "winter-rand-utils", optional = true } -serde = { version = "1.0", features = ["derive"], default-features = false, optional = true } +serde = { version = "1.0", features = [ + "derive", +], default-features = false, optional = true } winter_crypto = { version = "0.8", package = "winter-crypto", default-features = false } winter_math = { version = "0.8", package = "winter-math", default-features = false } winter_utils = { version = "0.8", package = "winter-utils", default-features = false }
M src/dsa/rpo_falcon512/ffi.rs → src/dsa/rpo_falcon512/ffi.rs

@@ -1,4 +1,4 @@

-use libc::c_int; +use core::ffi::c_int; // C IMPLEMENTATION INTERFACE // ================================================================================================

@@ -77,8 +77,11 @@

#[cfg(test)] pub fn rpo128_absorb( sc: *mut Rpo128Context, - data: *const ::std::os::raw::c_void, - len: libc::size_t, + data: *const core::ffi::c_void, + // TODO: When #![feature(c_size_t)] stabilizes, switch this to `core::ffi::size_t` to be + // more accurate. Currently, however, all Rust targets as of this writing are such that + // `core::ffi::size_t` and `usize` are the same size. + len: usize, ); #[cfg(test)]

@@ -96,6 +99,7 @@ // ================================================================================================

#[cfg(all(test, feature = "std"))] mod tests { + use alloc::vec::Vec; use rand_utils::{rand_array, rand_value, rand_vector}; use super::*;
M src/dsa/rpo_falcon512/keys.rs → src/dsa/rpo_falcon512/keys.rs

@@ -1,8 +1,11 @@

-#[cfg(feature = "std")] -use super::{ffi, NonceBytes, NONCE_LEN, PK_LEN, SIG_LEN, SK_LEN}; use super::{ ByteReader, ByteWriter, Deserializable, DeserializationError, FalconError, Polynomial, PublicKeyBytes, Rpo256, SecretKeyBytes, Serializable, Signature, Word, +}; +#[cfg(feature = "std")] +use { + super::{ffi, NonceBytes, NONCE_LEN, PK_LEN, SIG_LEN, SK_LEN}, + alloc::vec::Vec, }; // PUBLIC KEY
M src/dsa/rpo_falcon512/polynomial.rs → src/dsa/rpo_falcon512/polynomial.rs

@@ -1,7 +1,7 @@

+use alloc::vec::Vec; use core::ops::{Add, Mul, Sub}; use super::{FalconError, Felt, LOG_N, MODULUS, MODULUS_MINUS_1_OVER_TWO, N, PK_LEN}; -use crate::utils::collections::*; // FALCON POLYNOMIAL // ================================================================================================
M src/dsa/rpo_falcon512/signature.rs → src/dsa/rpo_falcon512/signature.rs

@@ -1,3 +1,4 @@

+use alloc::string::ToString; use core::cell::OnceCell; use super::{

@@ -5,7 +6,6 @@ ByteReader, ByteWriter, Deserializable, DeserializationError, Felt, NonceBytes, NonceElements,

Polynomial, PublicKeyBytes, Rpo256, Serializable, SignatureBytes, Word, MODULUS, N, SIG_L2_BOUND, ZERO, }; -use crate::utils::string::*; // FALCON SIGNATURE // ================================================================================================

@@ -196,7 +196,7 @@ // ================================================================================================

#[cfg(all(test, feature = "std"))] mod tests { - use libc::c_void; + use core::ffi::c_void; use rand_utils::rand_vector; use super::{

@@ -236,7 +236,10 @@ #[test]

fn test_hash_to_point() { // Create a random message and transform it into a u8 vector let msg_felts: Word = rand_vector::<Felt>(4).try_into().unwrap(); - let msg_bytes = msg_felts.iter().flat_map(|e| e.as_int().to_le_bytes()).collect::<Vec<_>>(); + let msg_bytes = msg_felts + .iter() + .flat_map(|e| e.as_int().to_le_bytes()) + .collect::<alloc::vec::Vec<_>>(); // Create a nonce i.e. a [u8; 40] array and pack into a [Felt; 8] array. let nonce: [u8; 40] = rand_vector::<u8>(40).try_into().unwrap();
M src/hash/blake/mod.rs → src/hash/blake/mod.rs

@@ -1,3 +1,4 @@

+use alloc::string::String; use core::{ mem::{size_of, transmute, transmute_copy}, ops::Deref,

@@ -6,7 +7,7 @@ };

use super::{Digest, ElementHasher, Felt, FieldElement, Hasher}; use crate::utils::{ - bytes_to_hex_string, hex_to_bytes, string::*, ByteReader, ByteWriter, Deserializable, + bytes_to_hex_string, hex_to_bytes, ByteReader, ByteWriter, Deserializable, DeserializationError, HexParseError, Serializable, };
M src/hash/blake/tests.rs → src/hash/blake/tests.rs

@@ -2,7 +2,7 @@ use proptest::prelude::*;

use rand_utils::rand_vector; use super::*; -use crate::utils::collections::*; +use alloc::vec::Vec; #[test] fn blake3_hash_elements() {
M src/hash/rescue/rpo/digest.rs → src/hash/rescue/rpo/digest.rs

@@ -1,10 +1,11 @@

+use alloc::string::String; use core::{cmp::Ordering, fmt::Display, ops::Deref}; use super::{Digest, Felt, StarkField, DIGEST_BYTES, DIGEST_SIZE, ZERO}; use crate::{ rand::Randomizable, utils::{ - bytes_to_hex_string, hex_to_bytes, string::*, ByteReader, ByteWriter, Deserializable, + bytes_to_hex_string, hex_to_bytes, ByteReader, ByteWriter, Deserializable, DeserializationError, HexParseError, Serializable, }, };

@@ -323,10 +324,11 @@ // ================================================================================================

#[cfg(test)] mod tests { + use alloc::string::String; use rand_utils::rand_value; use super::{Deserializable, Felt, RpoDigest, Serializable, DIGEST_BYTES, DIGEST_SIZE}; - use crate::utils::{string::*, SliceReader}; + use crate::utils::SliceReader; #[test] fn digest_serialization() {
M src/hash/rescue/rpo/tests.rs → src/hash/rescue/rpo/tests.rs

@@ -5,7 +5,8 @@ use super::{

super::{apply_inv_sbox, apply_sbox, ALPHA, INV_ALPHA}, Felt, FieldElement, Hasher, Rpo256, RpoDigest, StarkField, ONE, STATE_WIDTH, ZERO, }; -use crate::{utils::collections::*, Word}; +use crate::Word; +use alloc::{collections::BTreeSet, vec::Vec}; #[test] fn test_sbox() {
M src/hash/rescue/rpx/digest.rs → src/hash/rescue/rpx/digest.rs

@@ -1,10 +1,11 @@

+use alloc::string::String; use core::{cmp::Ordering, fmt::Display, ops::Deref}; use super::{Digest, Felt, StarkField, DIGEST_BYTES, DIGEST_SIZE, ZERO}; use crate::{ rand::Randomizable, utils::{ - bytes_to_hex_string, hex_to_bytes, string::*, ByteReader, ByteWriter, Deserializable, + bytes_to_hex_string, hex_to_bytes, ByteReader, ByteWriter, Deserializable, DeserializationError, HexParseError, Serializable, }, };

@@ -312,10 +313,11 @@ // ================================================================================================

#[cfg(test)] mod tests { + use alloc::string::String; use rand_utils::rand_value; use super::{Deserializable, Felt, RpxDigest, Serializable, DIGEST_BYTES, DIGEST_SIZE}; - use crate::utils::{string::*, SliceReader}; + use crate::utils::SliceReader; #[test] fn digest_serialization() {
M src/lib.rs → src/lib.rs

@@ -1,8 +1,10 @@

-#![cfg_attr(not(feature = "std"), no_std)] +#![no_std] -#[cfg(not(feature = "std"))] -#[cfg_attr(test, macro_use)] +#[macro_use] extern crate alloc; + +#[cfg(feature = "std")] +extern crate std; pub mod dsa; pub mod hash;
M src/main.rs → src/main.rs

@@ -74,7 +74,7 @@

println!( "An average insertion time measured by 20 inserts into a SMT with {} key-value pairs is {:.3} milliseconds\n", size, - // calculate the average by dividing by 20 and convert to milliseconds by multiplying by + // calculate the average by dividing by 20 and convert to milliseconds by multiplying by // 1000. As a result, we can only multiply by 50 insertion_times.iter().sum::<f32>() * 50f32, );
M src/merkle/error.rs → src/merkle/error.rs

@@ -1,7 +1,7 @@

+use alloc::vec::Vec; use core::fmt; use super::{smt::SmtLeafError, MerklePath, NodeIndex, RpoDigest}; -use crate::utils::collections::*; #[derive(Clone, Debug, PartialEq, Eq)] pub enum MerkleError {
M src/merkle/merkle_tree.rs → src/merkle/merkle_tree.rs

@@ -1,9 +1,10 @@

+use alloc::{string::String, vec::Vec}; use core::{fmt, ops::Deref, slice}; use winter_math::log2; use super::{InnerNodeInfo, MerkleError, MerklePath, NodeIndex, Rpo256, RpoDigest, Word}; -use crate::utils::{collections::*, string::*, uninit_vector, word_to_hex}; +use crate::utils::{uninit_vector, word_to_hex}; // MERKLE TREE // ================================================================================================
M src/merkle/mmr/delta.rs → src/merkle/mmr/delta.rs

@@ -1,5 +1,5 @@

use super::super::RpoDigest; -use crate::utils::collections::*; +use alloc::vec::Vec; /// Container for the update data of a [super::PartialMmr] #[derive(Debug)]
M src/merkle/mmr/full.rs → src/merkle/mmr/full.rs

@@ -16,7 +16,7 @@ bit::TrueBitPositionIterator,

leaf_to_corresponding_tree, nodes_in_forest, MmrDelta, MmrError, MmrPeaks, MmrProof, Rpo256, RpoDigest, }; -use crate::utils::collections::*; +use alloc::vec::Vec; // MMR // ===============================================================================================
M src/merkle/mmr/partial.rs → src/merkle/mmr/partial.rs

@@ -1,10 +1,11 @@

use super::{MmrDelta, MmrProof, Rpo256, RpoDigest}; -use crate::{ - merkle::{ - mmr::{leaf_to_corresponding_tree, nodes_in_forest}, - InOrderIndex, InnerNodeInfo, MerklePath, MmrError, MmrPeaks, - }, - utils::{collections::*, vec}, +use crate::merkle::{ + mmr::{leaf_to_corresponding_tree, nodes_in_forest}, + InOrderIndex, InnerNodeInfo, MerklePath, MmrError, MmrPeaks, +}; +use alloc::{ + collections::{BTreeMap, BTreeSet}, + vec::Vec, }; // TYPE ALIASES

@@ -616,10 +617,8 @@ use super::{

forest_to_rightmost_index, forest_to_root_index, InOrderIndex, MmrPeaks, PartialMmr, RpoDigest, }; - use crate::{ - merkle::{int_to_node, MerkleStore, Mmr, NodeIndex}, - utils::collections::*, - }; + use crate::merkle::{int_to_node, MerkleStore, Mmr, NodeIndex}; + use alloc::{collections::BTreeSet, vec::Vec}; const LEAVES: [RpoDigest; 7] = [ int_to_node(0),
M src/merkle/mmr/peaks.rs → src/merkle/mmr/peaks.rs

@@ -1,5 +1,5 @@

use super::{super::ZERO, Felt, MmrError, MmrProof, Rpo256, RpoDigest, Word}; -use crate::utils::collections::*; +use alloc::vec::Vec; // MMR PEAKS // ================================================================================================
M src/merkle/mmr/tests.rs → src/merkle/mmr/tests.rs

@@ -6,9 +6,9 @@ leaf_to_corresponding_tree, nodes_in_forest, Mmr, MmrPeaks, PartialMmr,

}; use crate::{ merkle::{int_to_node, InOrderIndex, MerklePath, MerkleTree, MmrProof, NodeIndex}, - utils::collections::*, Felt, Word, }; +use alloc::vec::Vec; #[test] fn test_position_equal_or_higher_than_leafs_is_never_contained() {
M src/merkle/mod.rs → src/merkle/mod.rs

@@ -45,9 +45,6 @@ // HELPER FUNCTIONS

// ================================================================================================ #[cfg(test)] -use crate::utils::collections::*; - -#[cfg(test)] const fn int_to_node(value: u64) -> RpoDigest { RpoDigest::new([Felt::new(value), ZERO, ZERO, ZERO]) }

@@ -58,6 +55,6 @@ [Felt::new(value), ZERO, ZERO, ZERO]

} #[cfg(test)] -fn digests_to_words(digests: &[RpoDigest]) -> Vec<Word> { +fn digests_to_words(digests: &[RpoDigest]) -> alloc::vec::Vec<Word> { digests.iter().map(|d| d.into()).collect() }
M src/merkle/partial_mt/mod.rs → src/merkle/partial_mt/mod.rs

@@ -1,3 +1,8 @@

+use alloc::{ + collections::{BTreeMap, BTreeSet}, + string::String, + vec::Vec, +}; use core::fmt; use super::{

@@ -5,8 +10,7 @@ InnerNodeInfo, MerkleError, MerklePath, NodeIndex, Rpo256, RpoDigest, ValuePath, Word,

EMPTY_WORD, }; use crate::utils::{ - collections::*, format, string::*, vec, word_to_hex, ByteReader, ByteWriter, Deserializable, - DeserializationError, Serializable, + word_to_hex, ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable, }; #[cfg(test)]
M src/merkle/partial_mt/tests.rs → src/merkle/partial_mt/tests.rs

@@ -5,7 +5,7 @@ PartialMerkleTree,

}, Deserializable, InnerNodeInfo, RpoDigest, Serializable, ValuePath, }; -use crate::utils::collections::*; +use alloc::{collections::BTreeMap, vec::Vec}; // TEST DATA // ================================================================================================
M src/merkle/path.rs → src/merkle/path.rs

@@ -1,8 +1,9 @@

+use alloc::vec::Vec; use core::ops::{Deref, DerefMut}; use super::{InnerNodeInfo, MerkleError, NodeIndex, Rpo256, RpoDigest}; use crate::{ - utils::{collections::*, ByteReader, Deserializable, DeserializationError, Serializable}, + utils::{ByteReader, Deserializable, DeserializationError, Serializable}, Word, };

@@ -128,7 +129,7 @@ }

impl IntoIterator for MerklePath { type Item = RpoDigest; - type IntoIter = vec::IntoIter<RpoDigest>; + type IntoIter = alloc::vec::IntoIter<RpoDigest>; fn into_iter(self) -> Self::IntoIter { self.nodes.into_iter()
M src/merkle/smt/full/error.rs → src/merkle/smt/full/error.rs

@@ -1,9 +1,9 @@

+use alloc::vec::Vec; use core::fmt; use crate::{ hash::rpo::RpoDigest, merkle::{LeafIndex, SMT_DEPTH}, - utils::collections::*, Word, };
M src/merkle/smt/full/leaf.rs → src/merkle/smt/full/leaf.rs

@@ -1,10 +1,8 @@

+use alloc::{string::ToString, vec::Vec}; use core::cmp::Ordering; use super::{Felt, LeafIndex, Rpo256, RpoDigest, SmtLeafError, Word, EMPTY_WORD, SMT_DEPTH}; -use crate::utils::{ - collections::*, string::*, vec, ByteReader, ByteWriter, Deserializable, DeserializationError, - Serializable, -}; +use crate::utils::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable}; #[derive(Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
M src/merkle/smt/full/mod.rs → src/merkle/smt/full/mod.rs

@@ -2,7 +2,7 @@ use super::{

EmptySubtreeRoots, Felt, InnerNode, InnerNodeInfo, LeafIndex, MerkleError, MerklePath, NodeIndex, Rpo256, RpoDigest, SparseMerkleTree, Word, EMPTY_WORD, }; -use crate::utils::collections::*; +use alloc::collections::{BTreeMap, BTreeSet}; mod error; pub use error::{SmtLeafError, SmtProofError};
M src/merkle/smt/full/proof.rs → src/merkle/smt/full/proof.rs

@@ -1,7 +1,6 @@

use super::{MerklePath, RpoDigest, SmtLeaf, SmtProofError, Word, SMT_DEPTH}; -use crate::utils::{ - string::*, ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable, -}; +use crate::utils::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable}; +use alloc::string::ToString; /// A proof which can be used to assert membership (or non-membership) of key-value pairs in a /// [`super::Smt`].
M src/merkle/smt/full/tests.rs → src/merkle/smt/full/tests.rs

@@ -1,9 +1,10 @@

use super::{Felt, LeafIndex, NodeIndex, Rpo256, RpoDigest, Smt, SmtLeaf, EMPTY_WORD, SMT_DEPTH}; use crate::{ merkle::{EmptySubtreeRoots, MerkleStore}, - utils::{collections::*, Deserializable, Serializable}, + utils::{Deserializable, Serializable}, Word, ONE, WORD_SIZE, }; +use alloc::vec::Vec; // SMT // --------------------------------------------------------------------------------------------
M src/merkle/smt/mod.rs → src/merkle/smt/mod.rs

@@ -1,9 +1,9 @@

use super::{EmptySubtreeRoots, InnerNodeInfo, MerkleError, MerklePath, NodeIndex}; use crate::{ hash::rpo::{Rpo256, RpoDigest}, - utils::collections::*, Felt, Word, EMPTY_WORD, }; +use alloc::vec::Vec; mod full; pub use full::{Smt, SmtLeaf, SmtLeafError, SmtProof, SmtProofError, SMT_DEPTH};
M src/merkle/smt/simple/mod.rs → src/merkle/smt/simple/mod.rs

@@ -3,7 +3,7 @@ super::ValuePath, EmptySubtreeRoots, InnerNode, InnerNodeInfo, LeafIndex, MerkleError,

MerklePath, NodeIndex, RpoDigest, SparseMerkleTree, Word, EMPTY_WORD, SMT_MAX_DEPTH, SMT_MIN_DEPTH, }; -use crate::utils::collections::*; +use alloc::collections::{BTreeMap, BTreeSet}; #[cfg(test)] mod tests;
M src/merkle/smt/simple/tests.rs → src/merkle/smt/simple/tests.rs

@@ -8,9 +8,9 @@ merkle::{

digests_to_words, int_to_leaf, int_to_node, smt::SparseMerkleTree, EmptySubtreeRoots, InnerNodeInfo, LeafIndex, MerkleTree, }, - utils::collections::*, Word, EMPTY_WORD, }; +use alloc::vec::Vec; // TEST DATA // ================================================================================================
M src/merkle/store/mod.rs → src/merkle/store/mod.rs

@@ -1,3 +1,4 @@

+use alloc::{collections::BTreeMap, vec::Vec}; use core::borrow::Borrow; use super::{

@@ -5,7 +6,8 @@ mmr::Mmr, EmptySubtreeRoots, InnerNodeInfo, MerkleError, MerklePath, MerkleTree, NodeIndex,

PartialMerkleTree, RootPath, Rpo256, RpoDigest, SimpleSmt, Smt, ValuePath, }; use crate::utils::{ - collections::*, ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable, + collections::{KvMap, RecordingMap}, + ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable, }; #[cfg(test)]
M src/merkle/store/tests.rs → src/merkle/store/tests.rs

@@ -14,6 +14,7 @@

#[cfg(feature = "std")] use { super::{Deserializable, Serializable}, + alloc::boxed::Box, std::error::Error, };
M src/rand/rpo.rs → src/rand/rpo.rs

@@ -1,11 +1,9 @@

use super::{Felt, FeltRng, FieldElement, RandomCoin, RandomCoinError, Word, ZERO}; use crate::{ hash::rpo::{Rpo256, RpoDigest}, - utils::{ - collections::*, string::*, vec, ByteReader, ByteWriter, Deserializable, - DeserializationError, Serializable, - }, + utils::{ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable}, }; +use alloc::{string::ToString, vec::Vec}; // CONSTANTS // ================================================================================================
M src/utils/kv_map.rs → src/utils/kv_map.rs

@@ -1,9 +1,8 @@

+use alloc::{ + boxed::Box, + collections::{BTreeMap, BTreeSet}, +}; use core::cell::RefCell; - -use super::{ - boxed::*, - collections::{btree_map::*, *}, -}; // KEY-VALUE MAP TRAIT // ================================================================================================

@@ -202,7 +201,7 @@ }

impl<K: Clone + Ord, V: Clone> IntoIterator for RecordingMap<K, V> { type Item = (K, V); - type IntoIter = IntoIter<K, V>; + type IntoIter = alloc::collections::btree_map::IntoIter<K, V>; fn into_iter(self) -> Self::IntoIter { self.data.into_iter()
M src/utils/mod.rs → src/utils/mod.rs

@@ -1,15 +1,9 @@

//! Utilities used in this crate which can also be generally useful downstream. +use alloc::string::String; use core::fmt::{self, Display, Write}; -#[cfg(feature = "std")] -pub use std::{format, vec}; - -#[cfg(not(feature = "std"))] -pub use alloc::{format, vec}; - use super::Word; -use crate::utils::string::*; mod kv_map;

@@ -21,8 +15,6 @@ DeserializationError, Serializable, SliceReader,

}; pub mod collections { - pub use winter_utils::collections::*; - pub use super::kv_map::*; }

@@ -102,12 +94,11 @@ _ => Err(HexParseError::InvalidChar),

}); let mut decoded = [0u8; N]; - #[allow(clippy::needless_range_loop)] - for pos in 0..N { + for byte in decoded.iter_mut() { // These `unwrap` calls are okay because the length was checked above let high: u8 = data.next().unwrap()?; let low: u8 = data.next().unwrap()?; - decoded[pos] = (high << 4) + low; + *byte = (high << 4) + low; } Ok(decoded)