Releases: 0xMiden/crypto
Releases · 0xMiden/crypto
v0.26.0
- [BREAKING] Extracted
BackendReader, allowingLargeSmtForest<S>to work with read-only storage backends (#986). - Optimized prover quotient evaluation by evaluating each AIR's quotient on its native coset (size
n_j · D_j) and lifting per-AIR, instead of always on the global maximum coset; constraint division is fused into the constraint evaluation loop (#991). - [BREAKING] Replaced the per-AIR witness/aux-builder proving model (
AirInstance,AirWitness,AuxBuilder,prove_multi/verify_multi) with aMultiAirtrait that owns its AIRs (each builds its own aux trace viaLiftedAir::build_aux_trace), plus validatedStatement/ProverStatementstructs carried byProverInstance/VerifierInstance.LiftedAir::reduced_aux_valuesandnum_var_len_public_inputsare replaced byMultiAir::eval_external, which returns the cross-AIR external assertions as a flat list of extension-field values that must equal zero, fed by anaux_inputsslice whose schema eachMultiAirowns and validates (#992). - [BREAKING] Refactored
miden-lifted-stark::domainaround a uniformCosettrait shared byTwoAdicSubgroupandTwoAdicCoset, slimmed theLiftedDomainsurface (drops dead getters, removes silently-dispatchedpoints/bit_reversed_points/vanishing_atin favour of explicittrace_subgroup()/lde_coset()access), madeLiftedDomainconstructors fallible, moved selector logic ontoLiftedDomain, and changedlog_blowupto returnu8(#993). - [BREAKING] Upgraded direct
randdependencies to 0.10, updating RNG trait bounds and removing directrand_hcusage (#995). - [BREAKING] Reorganized
miden-lifted-starkinternals: consolidatedalign,bitrev,horner, andpackinghelpers under a newutilmodule; removed the legacyfri::*re-export facade (#1000). - perf: fuse per-group accumulator and defer allocations (#1008).
- [BREAKING] Reduced
LargeSmt<S>cache depth from 24 to 16 levels (#1011). - [BREAKING] Implemented two-phase commit_mutations() / apply_mutations()-style API for
LargeSmtForest(#1018). - [BREAKING] Tightened the
miden-lifted-starkpublic API surface: dropped the wide crate-root re-export list (callers now import frommiden_lifted_stark::airandmiden_lifted_stark::{lmcs, pcs, proof, prover, verifier}directly), demoted internal submodules topub(crate)/pub(super), and folded thetranscriptmodule intoproof(TranscriptChallenger/TranscriptData/TranscriptErrorare re-exported there). Renamed the proof artifact types —StarkProof→StarkProofData(wire artifact) andStarkTranscript→StarkProof(parsed view, built viaStarkProof::from_data) — and*::from_verifier_channel→*::read_from_channelon the PCS sub-proofs. Dropped the panicking domain constructors (TwoAdicCoset::unshifted,LiftedDomain::{canonical, sub_domain}) in favour of the fallibletry_*variants (#1020). - [BREAKING] Added reusable preprocessed trace setup artifacts for Lifted STARKs: AIRs can declare fixed preprocessed columns, provers build and reuse a
Preprocessedcommitment bundle, and verifier instances receive the trusted preprocessed commitment (#1021). - [BREAKING] Fixed RocksDB CLI safety, non-canonical serde input handling, and qualified
WordWrapperderive paths (#1022). - [BREAKING] Simplify
LargeSmtForestbackend API (#1030). - [BREAKING] Made
LargeSmtleaf/entry/inner node iterators fallible (#1032).
v0.25.1
v0.25.0
- [BREAKING] Changed the serialization format of
PartialSmtto be more compact on the wire (#957). - [BREAKING] Changed
SmtLeaf::hashto perform domain-separated hashing, reducing the risk of a collision with the hash of an inner node. (#962). - [BREAKING] Extracted
SmtStorageReaderandSparseMerkleTreeReader, allowingLargeSmt<S>to work with read-only storage backends (#967). - Added domain-separated hashing support for elements to
AlgebraicSpoongeashash_elements_in_domain(...)(#978). - Added
Signature::from_der()for EdDSA signatures (#979). - Fixed
SimpleSmt::set_subtree()to clear stale leaves and inner nodes in the replaced subtree region (#981). - Fixed
SliceReaderbounds checking to reject overflowing read lengths (#987).
v0.24.0
- [BREAKING] Removed
AlgebraicSponge::merge_with_int()method (#894). - [BREAKING] Updated
Poseidon2instance to match Plonky3 one (#905). - Added
LargeSmtForest::add_lineageswhich provides an efficient means of adding multiple new lineages at once (#910). - Added the ability to configure the sync-to-disk behavior of the persistent backend using its config (#912).
- [BREAKING] Removed
WORD_SIZE_FELTSandWORD_SIZE_BYTESfrommiden-fieldin favor ofWord::NUM_ELEMENTSandWord::SERIALIZED_SIZE, respectively. The values remain the same (#917). - [BREAKING] Removed
WORD_SIZEfrommiden-cryptoin favor ofWord::NUM_ELEMENTS. Clients will need to update references to the constant, butWordwill already be in scope as it is re-exported frommiden-crypto(#917). - [BREAKING] Removed
LexicographicWordasWorditself now implements the correct comparison behavior. Any place where the former is used should be able to seamlessly swap to the latter (#918). - [BREAKING] Removed implementations of
DerefandDerefMutforFelt(#919). - Added
SerializableandDeserializableinstances forArc<str>(#920). - Optimized batch inversion to use per-chunk scratch space (#933).
- [BREAKING] Changed the signature of
Felt::newto perform reduction, and raise an error if the input is invalid. Retained the old behavior asFelt::new_unchecked, as its usage may lead to incorrect results (#924). - Optimized field operations for
Goldilocks(#926). - [BREAKING] Moved per-instance log trace heights from
AirInstanceintoStarkProof;prove_multi/verify_multinow observe them into the Fiat-Shamir challenger internally (#956). Consumers on the temporary(log_trace_height, proof)serialization path must drop the wrapper and stop pre-observing the height, or it will be bound twice.StarkProofno longer exposes per-instance heights directly — parse the proof withStarkTranscript::from_proofto read them;num_traces()is available for the count. - [BREAKING]
prove_multi/verify_multino longer require instances in ascending trace-height order; the prover sorts internally and the proof carries anair_orderpermutation (#941).InstanceShapes::from_trace_heightsnow sorts internally and embeds the AIR ordering.InstanceShapes::observerenamed toobserve_heights. TheNotAscendingerror variant is removed;InvalidAirOrderandAirOrderLengthMismatchare added.AirWitnessnow derivesClone + Copy. Callers must bind AIR configurations andair_orderinto the Fiat-Shamir challenger — see the prover module-level docs. - [BREAKING] Split the
SecretKeytype for both ECDSA-k256 and EdDSA-25519 intoSigningKeyandKeyExchangeKeyto help enforce better practices around key reuse.SecretKeyis no longer available in the public API; all usages should be moved to one of the new key types (#965). - Reduce repeated history scans in historical
LargeSmtForest::open()queries (#971).
v0.22.6
v0.22.5
v0.23.0
- Replaced
Subtreeinternal storage with bitmask layout (#784). - [BREAKING]
PartialMmr::open()now returnsOption<MmrProof>instead ofOption<MmrPath>(#787). - [BREAKING] Refactored BLAKE3 to use
Digest<N>struct, addedDigest192type alias (#811). - [BREAKING] Added validation to
PartialMmr::from_parts()andDeserializableimplementation, addedfrom_parts_unchecked()for performance-critical code (#812). - [BREAKING] Removed
hashbrowndependency andhashmapsfeature;Map/Settype aliases are now tied to thestdfeature (#813). - [BREAKING] Renamed
NodeIndex::value()toNodeIndex::position(),NodeIndex::is_value_odd()toNodeIndex::is_position_odd(), andLeafIndex::value()toLeafIndex::position()(#814). - Fixed
LargeSmtForest::truncateto remove emptied lineages fromnon_empty_histories(#818). - [BREAKING] Fixed OOMs in Merkle/SMT deserialization (#820).
- Fixed
SmtForestto remove nodes with zero reference count from store (#821). - Cross-checked RPO test vectors against the Python reference implementation after state layout change (#822).
- Fixed tuple
min_serialized_size()to exclude alignment padding, fixingBudgetedReaderrejecting valid data (#827). - Fixed possible panic in
XChaCha::decrypt_bytes_with_associated_dataand harden deserialization with fuzzing across 7 new targets (#836). - Added
Signature::from_der()for ECDSA signatures over secp256k1 (#842). - [BREAKING] Added info context field to secret box, bind IES HKDF info to a stable context string, scheme identifier, and ephemeral public key bytes. (#843).
- Use
read_from_bytes_with_budget()instead of read_from_bytes for deserialization from untrusted sources, setting the budget to the actual input byte slice length. (#846). - [BREAKING] Removed
PartialEq/Eqfor AEADSecretKeyin non-test builds, fix various hygiene issues in dealing with secret keys (#849). - Added
PublicKey::from_der()for ECDSA public keys over secp256k1 (#855). - [BREAKING] Fixed
NodeIndex::to_scalar_index()overflow at depth 64 by returningResult<u64, MerkleError>(#865). - [BREAKING] Removed
RpoRandomCoinandRpxRandomCoinand introduced a Poseidon2-basedRandomCoin(#871). - Hardened MerkleStore deserialization and fuzz coverage (#878).
- [BREAKING] Upgraded Plonky3 from 0.4.2 to 0.5.0 and replaced
p3-miden-air,p3-miden-fri, andp3-miden-proverwith the unifiedp3-miden-lifted-starkcrate. Thestarkmodule now re-exports the Lifted STARK proving system from p3-miden.