All notable changes are documented in this file. Lines marked “(!)” indicate a breaking change.
0.43.0 – 2024-10-29
- Generalize polynomial multiplication (4235a802)
- Generalize polynomial scalar multiplication (e71b2662)
- Easily construct polynomials
x^n
(2c1c08d8) - Allow evaluating polynomials in “value form” (b1baee8a)
- Fast modular interpolate and extrapolate on coset (2c491342)
- Batch and parallel versions of coset extrapolate (9e7585d3)
- Convert BFieldElement from {u, i}size (30c24c3b)
- Implement
BFieldCodec
foru8
andu16
(8ec5f680) - Add conversions from and to
BFieldElement
(8e403080) - Implement
Const{Zero, One}
for xfe (50a9fb3a) - (!) Use
num_traits::Const{Zero, One}
(60ed2b2b) - Introduce struct to help prove MMR succession (0f521bb5)
- Implement
{Lower, Upper}Hex
forDigest
(65dc94d3)
Digest::try_from()
returnsNotCanonical
error (a4daa23f)- Fix edge-case failure in
fast_interpolate
(04ff58a2) - (!) Add field-length indicator to encoding of polynomial (585b4a31)
- (mmr) Don't panic on out-of-bounds MMR membership proof (45dcedcb)
- (!) Fix platform-dependent digest encoding bug (6e2c0127)
- Fix
structured_multiple_of_degree
(4d867366) - Fix MMR membership proof crash if peak list is too short (52034e2e)
- Various edge case bugs exposed (5c30ef45)
- Fast reduce with preprocessing (10e763ec)
- Integrate fast reduction into batch evaluate dispatcher (7818ebe3)
- Use separate dispatcher threshold for
par_interpolate
(3589b5e2) - In
par_interpolate
, recurse to parallel version (95a1f5a0) - (!) (polynomial) Optionally borrow coefficients (8ed2445f)
- Add docstrings to some MMR methods (b7244744)
- Improve some MMR-related documentation (382fa32d)
- Conform to clippy v1.80.0 indentation rules in doc strings (eaa0a991)
- Drop instructions for installing leveldb (938141e6)
- (
MmrSuccessorProof
) Add panics disclaimer (9560c99a)
- Add ZerofierTree (5be2c43a)
- Work around
nextest
bug (0a71c3e7) - Conform to new rust version (v1.80.0) linting rules
- Update perflog (4e0d872c)
- (Makefile) Use
nextest
for better timing results (638b0ae3) - Canonicalize
use
statements (920c5db5) - Move blake3 crate to dev-dependencies (d3d76616)
- (!) Remove
tree_m_ary.rs
(b9264abb) - Separate parallel from sequential interpolate functions (a0a4cc0e)
- Separate parallel from sequential
zerofier
methods (881d4411) - Drop
fast_divide
(3e978b61) - (!) Make
Digest::LEN
an associated const (cb53ad64) - (!) Use
Const…
overBFIELD_{ONE, ZERO}
(6210f44c) - (!) Use
Const{Zero, One}
inFiniteField
(a84927d4) - (!) Drop generic type argument from MMR fn's and structs (06f2c06d)
- (!) Copy (don't point to) auth path in
LeafMutation
(07e423bc) - (!) Rename
MmrAccumulator
'snew
tonew_from_leafs
(750c057c) - (!) Drop unused
get_height_from_leaf_index
(38d78358) - (!) Remove generic type from
MerkleTree
(aa340ff6) - (polynomial) Disallow negative exponents (5f81f862)
- (!) (polynomial) Generalize
evaluate()
(8482f939) - (!) Move canon check to
BFieldElement
(7dafa32e) - (!) Simplify interfaces of
ntt
andintt
(051fbfd0) - (!) Simplify interfaces of
{i}ntt_noswap
(4af2ffa3) - (!) (polynomial) Make
coefficients
private (65914d5a)
- Ensure public types implement auto traits (516ff9a7)
- Add tests for mismatching lengths in leaf index lists
- (
MmrAccumulator
) MakeArbitrary
impl consistent (18a2ff86) - Add tests for edge cases (5c30ef45)
- Add positive and negative tests for
MmrSuccessorProof
- (mmra_with_mps) Replace slow sanity checks with a test (eac5e7ac)
- Reduce test runtimes for slow tests (cbdaede2)
- Add benchmark for polynomial modular reduction (290a2f8a)
- Benchmark
par_interpolate
- Formal power series inverse (83a35ff6)
- Benchmark coset extrapolate (3b909945)
- Reintroduce perflog-bench for evaluation (80a5bec4)
0.41.0 – 2024-04-24
- Add hex encoding and decoding for Digest (0f649786)
- Implement
BFieldCodec
forPolynomial<FF>
(3d994271)
- Provide example for
Polynomial::zerofier
(0278f560) - Document coefficient order of
Polynomial
(c237e859) - Motivate Merkle tree's constants (53522191)
- (!) Don't return root hash on MMR's verify (2a331dd3)
- Avoid environment variable collisions (0340bf54)
- (!) Make Merkle tree's
ROOT_INDEX
private (d0dddeb5)
0.40.0 – 2024-04-16
- Make fast polynomial division complete (0edb2902)
- Add fast polynomial modulo for x^n (21411be3)
- Add fast method for clean divisions (f4a43450)
- (test) Avoid test failure in edge case (c7f753f0)
- Parallelize
fast_evaluate
(601ba840) - Parallelize
fast_zerofier_inner
(f0fdf92f) - Use
zerofier
withoutfast
(a9823c97) - (!) Remove special cases (20242688)
- Use fastest interpolation technique (90c9cc89)
- Use fastest evaluation technique (7a91f776)
- Speed up
fast_evaluate
by smarter division (d7edc17c) - Use fastest field mul for polynomial “scale” (d89da0da)
- Reduce polynomial long divisions in xgcd (ca4995fe)
- Make
Polynomial::scale
faster (408838e7) - Benchmark coset evaluate and interpolate (070e6133)
- Collapse loops in Lagrange interpolation (71c892f2)
- Parallelize
Polynomial::fast_interpolate
(504633c4) - Add makefile
bench
target for publishing (43c4d645) - Avoid allocation for scalar·polynomial (87a21ee7)
- Speed up polynomial operations (69a55edb)
- (bench) Reduce sample size of some benchmarks (bafe3620)
- Document polynomial's
leading_coefficient()
(0124d0bd) - Explain extension field's “Shah polynomial” (e9813ea4)
- Describe performance critical arguments (9be21d6f)
- Add publishing instructions to README (d8cd0465)
- (bench) Remove oranges from comparison (4f2fbd49)
- (!) Remove deprecated functions (0ec7453a)
- (bench) Simplify zerofier cutoff search (aaefc79f)
- (!) (bench) Add “smart” zerofier (c56eb5e8)
- (!) Improve polynomial multiplication names (48370ec6)
- (test) Use property test framework more (bde30c79)
- Remove superfluous threshold constants (00be8309)
- (!) Don't “ref”
Copy
arg inevaluate
(5700e50b)
- Add “evaluation” benchmark (478d4c5b)
- Benchmark polynomial multiplication (37902ebc)
- Other
evaluate
parallelization to bench (e6454ed4) - Add property test for polynomial division (524d11b7)
- Benchmark polynomial “scale” (4a7f89c0)
- Poly scale is equivalent in extension field (d738d9b5)
- Un-ignore ignored tests (ac9e5b96)
- Use
proptest
framework more (ec5b4943)
- Improve code style of polynomial division (9110c732)
- Improve code to convert to
XFieldElement
(9af85baf)
0.39.0 – 2024-04-08
- Add method
new
forMerkleTree
(50c634ef) - Make get_direct_path_indices() pub (4f5f46b3)
- Simplify construction of polynomials (065dd753)
- Add
bfe_vec!
andbfe_array!
macros (d6bb353d) - Add
xfe_vec!
andxfe_array!
macros (578b6472) - Generalize
Polynomial::scale
's offset (ce4047b8) - Make
{bfe, xfe}_{vec, array}
more powerful (33a2003c)
- Remove
.clone()
in extended gcd (b9a9e4af)
- Add example to extended Euclidean algorithm (5936c57b)
- Remove unused rusty_leveldb_vec* files (890c451e)
- Remove
storage
andsync
modules (3775c51b) - Removed benches and unused dependencies (57ce4535)
- Clean up
polynomial.rs
(8ca79022) - Simplify case handling for root of unity (cca92f74)
- Collect code coverage (e0f32e0e)
- Use
nextest
to test more things (62088fda) - Add code coverage badge (6b33124e)
- Clean up
XFieldElement
(84a4176f) - (!) Remove constraint circuits (0c757258)
- Remove unused dependencies (0e3b8c98)
- Mmr tests no longer depend on storage layer (#189) (c4c0502f)
- Move mmra_with_mps into mmr_accumulator::util (81573735)
- (!) Simplify interface for evaluation (a4641d35)
- (!) Simplify interface for interpolation (a321587e)
- (!) Simplify interface of fast division (6113875a)
- (!) Simplify interface for fast poly mul (5fde6ccd)
- (!) Use
prelude
inBFieldCodec
derive (a3109fda) - (!) Remove multivariate polynomial support (89c7cf54)
- (!) Remove timing reporter (84b6e29c)
- Remove
utils
module (e701395e) - (!) Remove Blake3 (e51c4afd)
- (!) Remove emojihash implementations (94162f5f)
- (!) Move de-facto MMR functionality there (46531c4a)
- (!) Remove unused helper methods (4c22abee)
- Deprecated methods mimicking built-ins (e8c5b528)
- (!) Remove unused or shallow rng-methods (547b7e51)
- (!) Remove dyadic rationals (c3584153)
- (!) Remove trait
FromVecu8
(d041424f) - (!) Rename
shared_math
intomath
(ec87ee5e) - (!) Remove trait
New
(e8d0c7e4) - (!) Remove Sha3 implementation (7175f7dd)
- Deprecate
log_2_ceil
(42b2ca10) - De-duplicate
BFieldCodec
test setup (0dba559e)
- Add tests for
BFieldCodec
derive macro (56cc6ce3) - Corrupting digest always corrupts digest (db86606f)
- Tip5's trace is equivalent to permutation (b548159d)
- Remove superfluous parentheses (13feb388)
0.38.0 – 2024-02-28
- (!) Use custom errors for fallible conversions (8be60133)
- Simplify field element construction (b974d1e3)
0.37.0 – 2024-02-15
- Allow (read-only) access to nodes of Merkle tree (61e697c7)
- Derive
Eq
forMerkleTree
(1010d29e) - Optionally set parallelization cutoff through environment variable (350cd8f5)
- Atomic lock event notification (df8e99e8)
- Make use of lock events in storage (7e64e05b)
- Implement
BFieldCodec
forBox<_>
(8bee834e) - Remove dependency
anyhow
, use custom errors instead (01ddae66)
- Add StorageSetter::index() method (#170) (5797095d)
- Make clippy v1.75 happy (0374ce54)
- Implement, don't derive
Arbitrary
for Merkle tree (6c3f7be7) - Don't panic, return error if specified tree height is too large (2bcdaf7a)
- Don't panic constructing Merkle tree with wrong number of leaves (f584a611)
- Remove DB file on Drop, for windows. (#176) (d13af81e)
- Document method
inclusion_proof_for_leaf_indices
(dd7af2b9) - Document new structs and constants (035f08a7)
- Fix restore_or_new() placement in doctests (#178) (892015c2)
- Document
MerkleTree
building errors (9f7ad17c) - Add changelog (b765d144)
- Add
git-cliff
config file (544ffae0)
- (doc) Make doc-strings use and adhere to max line length (5bd3dd36)
- Introduce struct
MerkleTreeInclusionProof
(c4bd2bf0) - Add windows, mac to github CI tasks (03cde76c)
- Re-export bfieldcodec_derive (10afd069)
- Bump
bfieldcodec_derive
version (a97464b8) - (!) Improve
SpongeHasher
trait (5eb5dd39)
- Remove prefix
get_
from method's names (cbf8ae5b) - Move test-helper method to corresponding test module (51c75f94)
- Don't panic when requesting out-of-bounds leaf (4e60a245)
- (test) Turn ad-hoc property tests into
proptest
(4bfdb2e9, 46b30c67, b546dffc) - (test) Translate more tests into
proptest
s (b46307d2, f403dade) - Avoid collecting into vector where only iterator is needed (26a2dd35)
- Check all authentication paths for small trees (cee2a9bf)
- (test) Remove randomness from static tests (ad75bab3)
- De-duplicate generation of static test Merkle trees (d0e382f4)
- (test) Root from arbitrary number of digests belongs to MMR (7d4121dc)
- (!) Improve
MerkleTree
implementation (844f8723) - Make leveldb::DB take &mut self (2e984fe2)
- Add
prelude
to simplifyuse
s downstream (95d52acc) - Allow repeated sponge-absorption without mutating a list (59944288)
- Use
thiserror
to deriveBFieldCodecError
(f0c5bf13) - (!) Integrate
Tip5State
intoTip5
(8300e6af)
- Add
proptest
for verifying honestly generated inclusion proof (54e606c7) - Add
proptest
for potential panics in.height()
,.num_leafs()
(b61a1007) - Add
proptest
for verification failure against incorrect root (e69d74f5) - Add
proptest
verifying failure when supplying too many indices (86238f47) - Add
proptest
verifying failure when supplying too few indices (3b01c4a0) - Test height and number of leaves for tree with one leaf (55ef8463)
0.36.0 – 2023-12-22
- Fix edge case bug in extended euclidean algorithm (321b1948)
- Switch
LevelDB
dependency, refactor storage API (#167) (cf0a2040) - (!) (de)serialize
BFieldElement
in canonical representation (4accb46a)
- Use property testing framework
proptest
more extensively (78b6993d)
0.34.0 – 2023-10-05
- Implement & derive
Arbitrary
for variousstruct
s (811b5131)
- Add batch getters for database wrappers (2bde8567)
- Upgrade dependencies (5fd0ca71)
- (!) Require trait bound
Debug
forSpongeState
(e8ee9036)
0.33.0 – 2023-09-25
- Fix edge case bugs in (i)NTT (d1389a32, 904339d2)
- Fix bug in
BFieldCodec
derive, allowing empty structs (164bdcf1)
- Use
proptest
framework for testingBFieldElement
(5670887b)
0.32.1 – 2023-08-02
BFieldCodec
derive: ignore types of ignored fields (40e75f3e)
0.32.0 – 2023-08-01
- Derive
BFieldCodec
forMmrMembershipProof
(c8c8992b)
0.31.0 – 2023-08-01
- New version of
BFieldCodec
and derive macro (v0.4.0) - Depend on new version of RustyLevelDB
0.30.0 – 2023-07-04
- Use compact Merkle tree authentication structure (40b0925b)
- Add method to construct Merkle authentication paths from auth structure (a51eac2e)
0.28.0 – 2023-06-13
- Improve on the derive macro for
BFieldCodec
- Use von Neumann sampling for perfect uniformity in
sample_indices()
0.27.0 – 2023-06-05
- Update dependency
BFieldCodec
0.26.0 – 2023-06-02
- Add derive macro for
BFieldCodec
- Use use overwrite mode in Tip5 absorbing
0.25.1 – 2023-05-24
BFieldCodec
stuff- Vector analogue of
decode_field_length_prepended
0.25.0 – 2023-05-23
- Implement
BFieldCodec
for various structs
- (!) Kill Rescue-Prime (Regular and Optimized)
0.24.0 – 2023-05-22
- Implement codecs and other conversions
- (!) Kill
Hashable
- (!) Remove old stark crates
0.23.0 – 2023-05-22
- Implement
PartialOrd
andOrd
forDigest
- Pull
bfield_codec
from Triton VM
- (!) Rename
Digest::vmhash()
tohash()
- (!) Drop Poseidon
0.22.0 – 2023-05-17
- Implement VM-Hashing for
Digest
s - Derive convenient traits for structs
- (!) Rename
Digest
namespace
0.21.3 – 2023-05-03
- Make
Digest::new
const (6c374ec6)
0.21.2 – 2023-05-03
- Add
Debug
,Serialize
, andDeserialize
to lattice kem types (64835126)
0.21.1 – 2023-05-02
- Tolerate duplicate indices in Merkle authentication paths (6fc0a982)
0.21.0 – 2023-05-02
- Implement zero trait for module element (00d6aa9e)
- Fix generation of partial authentication paths
- (!) Speed up & simplify Merkle tree verification (6575492f)
- Improve generation and verification of partial authentication paths.
- Add benchmark for verifying partial Merkle authentication paths
- Make overflowing adds, subs, and muls explicit (33eb39bd)
- Update dependencies
- (!) Remove salted Merkle trees (275f20b3)
- (!) Drop generic type parameter maker from Merkle tree (4ee8f753)
0.20.1 – 2023-04-26
- Convert between arrays of
BFieldElement
s and ciphertexts (2e6ce1b7)
v0.20.0 – 2023-04-25
- (!) Provide randomness explicitly for lattice kem (667c88f2)
0.19.3 – 2023-04-13
- Make RustyReader struct and its DB public
0.19.2 – 2023-04-11
- Add canonical conversion between
XFieldElement
s andDigest
s (3b9586d7) - Make Tip5 serializable (8495d36f)
- Add simple storage reader for generic databases (c43b0278)
- Circuit with auto-generated mds matrix multiplication procedure (#105)
0.19.1 – 2023-03-17
- Add abstract Storage schema functionality for simulating containers
0.19.0 – 2023-03-10
- Abstract out the data structure where the archival MMR's list of digests are stored:
StorageVec
- Implement
StorageVec
for rusty-leveldb
- Panic when trying to invert 0 in extension field
- Optimize + restructure some MMR helper functions
- (!) Change MMR indices from
u128
tou64
0.18.0 – 2023-03-01
- New functionality for databse vector
- Scalar and index sampling from sponges
0.17.0 – 2023-02-24
- Lattice-based crypto routines
- New MDS matrix for Tip5
0.16.0 – 2023-02-10
- (!) Fix
Tip5
's split_and_lookup (#88)
- Fix linter error: zero_prefixed_literal (ce74205)
- Add fixme/type hint to prevent LSP from jerking out (7ffc187)
- (!) Move
SpongeHasher
'ssample_indices()
andsample_weights()
to Triton VM (8c45dc2) - (!) Change
SpongeHasher
'sabsorb_init()
toinit()
(#89)
0.15.0 – 2023-01-31
- Standardize
Hashable
forbool
,u32
,u64
,u128
,BFE
,XFE
,Digest
(ae1a837)
- (!) Make domain separation for hash10 apply to all capacity elements (#86, 7abb3f6)
- (!) Replace old
AlgebraicHasher
withAlgebraicHasher: SpongeHasher
(#84, #85, 174a4da) - (!) Remove references to
self
from Tip5's implementation (518bd70)
0.14.1 – 2023-01-20
RescuePrimeRegularState::new()
does not usestate
(868854a)
0.14.0 – 2023-01-18
- Add
SpongeHasher
andAlgebraicHasherNew
(#83)
0.11.0 – 2023-01-12
- Tip5 hash function (#72)
- Allow for generating random U32ss (#80)
- Add a leaf_index -> Merkle tree index function (5e5b863)
- Add Right Lineage Length function (#76)
- Add MMR helper function right_ancestor_count (139e462)
- Inline tip5-related functions for a small speedup (#79)
- Optimize non_leaf_nodes_left (4c0739d, 77092c8)
- Reduce time it takes to run all benchmarks (1c8a768)
- Rewrite some MMR functions to be mode TASM-friendly (df81f4b)
- (!) Update MMR's leaf index -> MT index conversion function (b097ce2)
- Change MMR functions to use Merkle tree index logic (c4a1b8b, 1651035)
- Make non_leaf_nodes_left more friendly to a TASM compilation (a31cc70)
- (!) Delete deprecated right_child_and_height (b55fcad)
- Remove all use of deprecated is_right_child_and_height (65318d0)
- Simplify node-traversal logic for MMR (5b2e93e)
- (!) Change height of MMRs to be of type u32 (8eeb800)
- Adapt MMR function for TASM snippet implementation (2fb0ec9)
- (!) Move STARK tutorial-only code into 'stark-shared' crate (#82)
- (!) Minor improvements (#77, e3a2855, 87947f8, 9304558)
- Remove custom
Hash
andPartialEq
implementations (5b6649e) - (!) Remove deprecated MMR helper function to find peak index (71ec7a6)
0.10.0 – 2022-12-22
- Avoid all branching when adding
BFieldElement
s (#70)
- (!) Make the Rescue Prime round constants and matrices
const BFieldElement
0.9.0 – 2022-12-20
- Add
raw
andfrom_raw
methods toBFieldElement
- Switch to Montgomery representation for
BFieldElement
- Add tests for
BFieldElement
0.8.0 – 2022-12-19
- Add
::sample_weights()
to AlgebraicHasher, implement with::hash_pair()
(#66)
- Make
sample_weights()
faster in tasm by changingXFieldElement::sample()
(#66)
0.7.2 – 2022-11-23
- Emojihash trait (#64)
0.7.1 – 2022-11-22
- Add batch-version of fast_interpolate,
batch_fast_interpolate
- Make existing
fast_interpolate
slightly faster
0.7.0 – 2022-11-22
- Add
impl AsRef<[u32; N]> for U32s<N>
(#59) - Add
Digest::emojihash(&self)
(#62) - Add
impl TryFrom<&[BFieldElement]> for Digest, XFieldElement
(#61)
- Add notes on how to get started working on repo (97cb44f9)
- (!) Remove
impl From<Digest> for [u8; MSG_DIGEST_SIZE_IN_BYTES]
(#62) - (!) Remove
BFieldElement::from_byte_array()
(#62) - (!) Remove
impl Default for XFieldElement
(#62)
0.6.0 – 2022-11-17
- (!) Parameterise
MerkleTree
withM: MerkleTreeMaker<H>
(#57)
- (!) Remove
simple_hasher.rs
(#58) - (!) Remove deprecated auxiliary functions
0.5.0 – 2022-11-15
- Add
transpose()
(#55)
- (!) Remove unused functions (#55)
0.4.0 – 2022-11-14
XFieldElement
: AddEXTENSION_DEGREE
constant (#54)XFieldElement
,BFieldElement
: ImplementAdd
,Mul
,Sub
(#54)TimingReporter
: Make measurements easier to read (#49)
0.3.2 – 2022-11-09
- Implement
Hash
forMPolynomial
structs to be hashed
0.3.1 – 2022-10-21
- Implement
From<BFieldElement>
forXFieldElement
- Rename
PFElem
type parameter intoFF
0.3.0 – 2022-10-20
- Add
.inverse_or_zero()
to {B, X}FieldElement (#35) - Add
.emojihash()
for {B, X}FieldElement - Implement
xgcd()
generically (#40) - Add
Digest
struct (#44) - Make
blake3::Hasher
an instance ofAlgebraicHasher
(#44)
- (!) Add
+ MulAssign<BFieldElement>
tontt()
/intt()
(#41)
- Speed up NTT for XFieldElements (#41)
- Add release protocol, library overview to README.md
- Add
.mailmap
for cleaner git logs - Remove
split-debuginfo = '...'
- Lots of cleaning up code
- Add various trait instances (#42)
- Move stark-brainfuck and stark-rescue-prime to separate crates (#38)
- (!) Remove
GetRandomElements
in favor of standard library (#42) - (!) Remove
GetGeneratorDomain
trait (it was already unused) (#42) - (!) Change some MMR batch functions to take
&mut
membership proofs (#43) - (!) Replace
simple_hasher::Hasher
withAlgebraicHasher
(#44) - (!) Simplify
Hashable
so its parameters are more fixed (#44)
0.2.0 – 2022-09-13
- (!) Fix Rescue-Prime (#25)
0.1.5 – 2022-09-13
- (!) Simplify Lagrange interpolation function interface
- Add faster Lagrange interpolation and benchmarks