Releases: ingonyama-zk/icicle
Release v4.0.0
ICICLE v4.0.0 Release Notes
🎉 Major Release: ICICLE v4.0.0
We're excited to announce the release of ICICLE v4.0.0! This major version introduces significant improvements to the API design, making it more intuitive, object-oriented, and developer-friendly across all supported languages.
🚀 Key Highlights
- Object-Oriented Field API: Complete redesign of field operations from static methods to instance methods
- Method Chaining Support: Write more concise and expressive code with method chaining
- Improved Rust API: Better trait design with standard operator overloading
- Enhanced Program API: Reorganized Program module with better type safety
- Backward Compatibility: Comprehensive migration guides for v3 to v4 transition
- Post Quantum: Implemented a NIST FIPS203 (ML-KEM) protocol on CUDA, fully open-source
- Lattice Based Cryptography: Add support for Lattice based cryptography, with integer ring support and a full LaBRADOR prover (soon announced)
🔄 Breaking Changes
C++ API Changes
Field Arithmetic Operations
All field operations have been converted from static methods to instance methods
Check the migration page for more details
Rust API Changes
Arithmetic Trait Redesign
The FieldImpl
trait has been deprecated and split into focused, orthogonal traits
What's Changed
- Negacyclic NTT for polynomial rings by @yshekel in #930
- Update README.md by @Shalmoni in #931
- Fixed devdocs link licensing by @Shalmoni in #933
- Fix collab instructions for version mismatch error by @jeremyfelder in #935
- Feat: generate JL-projection matrix rows by @yshekel in #936
- Curve Montgomery Conversion Fix for Host Memory by @emirsoyturk in #938
- [FIX] Invalid memory access causes hang by @jeremyfelder in #939
- PQC ML-KEM by @nonam3e and @dorshmil in #932
- Add PQC documentation to 3.9.0 by @LeonHibnik in #940
- Changed broken link on readme by @Shalmoni in #942
- [FEAT] Rust Polynomial-Ring trait and NegacyclicNTT by @yshekel in #943
- [FEAT] Decompose Polynomial-rings by @yshekel in #945
- [FEAT] JL-projection Rust wrapper by @yshekel in #949
- [FEAT] MatMul API by @lnm-at-work in #871
- [FEAT] Expose Sumcheck protocol challenge vector by @LeonHibnik in #946
- Timur/pqc go wrappers by @nonam3e in #944
- [FEAT] Add flattening utilities for polynomial slices into scalar slices by @yshekel in #952
- [CI] Separate testing by feature by @jeremyfelder in #913
- [FEAT] Add reinterpretation utilities and polynomial vector operations by @yshekel in #954
- [FIX] typo in ci.yml by @yshekel in #959
- [REFACTOR] move matrix transpose to matrix_ops, add PolyRing support and tests by @yshekel in #961
- [CI] Fix Go tests and Rust bn254 by @jeremyfelder in #960
- [CI] Move merkle test to hash crate by @jeremyfelder in #963
- Determine the scalar size according to configuration if provided by @mickeyasa in #955
- [FEATURE] Pseudorandom field element sampling from seed by @ChickenLover in #950
- Validate JL projection consistency across backends by @dorshmil in #956
- devdocs: June 15 Update by @Shalmoni in #947
- consistent norm check by @emirsoyturk in #967
- Devdocs quick fix by @Shalmoni in #969
- [FIX] fix int devision bug in MSM by @idanfr-ingo in #970
- [Feat] matrix ops rust by @lnm-at-work in #957
- [FIX] Matmul rust wrappers identify device memory and assert sizes by @yshekel in #977
- [FIX] Unify Zq and Rq Balanced Base-b Decomposition Using Digit-Major Layout by @yshekel in #979
- [FIX] Replace
dependent_option
with regularoption
by @jeremyfelder in #976 - [FEATURE] Add matrix transpose support to Rust matrix_ops wrapper by @yshekel in #984
- Add manual trigger for full test suite by @jeremyfelder in #987
- Feat/challenge space sampling by @ChickenLover in #966
- fix random sampling small size bug by @ChickenLover in #994
- Relax norm bound API: support size > 2¹⁶ and full-range L∞ values by @yshekel in #998
- [FEAT] Allow disabling features from rust bindings by @jeremyfelder in #978
- V4 Rust wrapper redesign by @ChickenLover, @nonam3e, @vhnatyk, @LeonHibnik in #990
- ICICLE V4 by @ChickenLover, @LeonHibnik in #982
- [Feat] matmul + transpose fusion by @lnm-at-work in #1000
- [EXAMPLE] Add Rust example showcasing icicle-lattice APIs by @yshekel in #965
- [FIX] compilation for arm by @yshekel in #1001
- Some more changes to devdocs by @Shalmoni in #981
- ICICLE V4 documentation update by @LeonHibnik in #999
- [FIX] Enable and fix examples by @jeremyfelder in #972
- Update release workflow to use examples as reusable workflow by @jeremyfelder in #1004
- Remove
-q
from Rust examples to show output by @yshekel in #1003 - Rename labrador to babykoala by @yshekel in #1005
- Fix lattice-snark example import by @LeonHibnik in #1006
New Contributors
- @lnm-at-work made their first contribution in #871
Full Changelog: v3.9.2...v4.0.0
Release v3.9.2
What's Changed
- Fix compilation for g++14.2.0 by @ChickenLover in #924
- [FEAT] add method to get challenges from sumcheck's Fiat-Shamir by @idanfr-ingo in #921
- Feat: balanced decomposition for Rq polynomials by @yshekel in #922
- Added Darkmode, Benchmarks update, fixed mobile display bug, added la… by @Shalmoni in #927
- fri final polynomial degree check by @krakhit in #928
- [FIX] Go runtime, hash, and merkle tree package tests for metal by @jeremyfelder in #925
Full Changelog: v3.9.1...v3.9.2
Release v3.9.1
What's Changed
- [FIX] Docs deployment by @jeremyfelder in #903
- Yshekel/jl projection by @yshekel in #907
- DevDocs Version 2 by @Shalmoni in #906
- quickfix by @Shalmoni in #910
- 2 more broken references fixed by @Shalmoni in #911
- fix merkle-tree default config and test for segfault by @yshekel in #915
- Norm API for Lattice by @emirsoyturk in #877
- [FEAT] Add ext field support to sumcheck by @idanfr-ingo in #917
- fix Merkle-Tree rust wrapper get_proof() for device-mem by @yshekel in #918
Full Changelog: v3.9.0...v3.9.1
Release v3.9.0
What's Changed
🔥 New Features 🔥
- [FEAT] Add Golang support for more fields by @jeremyfelder in #882
- Add Goldilocks Ext by @ChickenLover in #892
- Feat/fri poseidon by @ChickenLover in #896
🚀 Performance 🚀
- G2 multiplier optimization by @mickeyasa in #897
- Miki/msm-optimiations by @mickeyasa in #794
📝 Docs 📝
- [DOCS] Fix broken FRI documentation link by @LeonHibnik in #876
- sidebars by @nonam3e in #878
- Update libraries.md by @ShaniBabayoff in #901
- changed sm preview by @Otsar-Raikou in #899
Misc
- Add cla workflow; Update docs workflow to be reusable by @jeremyfelder in #880
- [FIX] Metal CI to skip FRI by @jeremyfelder in #881
- [FEAT] Download taskflow if not found on system by @jeremyfelder in #893
- Reduce FRI test sizes by @ChickenLover in #891
- [FIX] Correctly link already installed taskflow by @jeremyfelder in #894
- [FIX] cuda branch output for ring and runtime build/tests by @jeremyfelder in #895
- [CI] Fix deploy-docs workflow by @jeremyfelder in #902
Full Changelog: v3.8.0...v3.9.0
Release v3.8.0
What's Changed
- [FEAT] Release ubuntu and build for RTX 40XX,50XX by @LeonHibnik in #868
- fix: stream type consistency with
IcicleStreamHandle
alias by @mdqst in #858 - Danny/poseidon2 consolidate kernels by @danny-shterman in #866
- fix: resolve compiler warnings across the codebase by @yshekel in #870
- Add generator functions for projective points in FFI and Rust bindings by @LeonHibnik in #869
- Serialization by @nonam3e in #861
- rust docs by @nonam3e in #874
- FRI rust wrappers by @nonam3e in #813
- Sha3Large test + bigger batch sizes by @dorshmil in #847
- [FEAT] Add Metal backend CI by @LeonHibnik in #786
New Contributors
Full Changelog: v3.7.1...v3.8.0
Release v3.7.1
V3.7.1
BUG FIX: Memory leak in Sumcheck-cuda
What's Changed
- Update install_gpu_backend.md by @ShaniBabayoff in #856
- Update install_gpu_backend.md by @ShaniBabayoff in #854
- Update libraries.md by @ShaniBabayoff in #857
- Update sidebars.ts by @ShaniBabayoff in #859
- Update libraries.md by @ShaniBabayoff in #855
- Update Docusaurus configuration to include Google Analytics tracking ID by @LeonHibnik in #862
Full Changelog: v3.7.0...v3.7.1
Release v3.7.0
ICICLE v3.7.0
Main updates
This version of ICICLE introduces:
- Goldilocks field support
- Curve pairings
What's Changed
- Added the new logo by @Otsar-Raikou in #808
- Update grants.md by @Otsar-Raikou in #810
- [DOCS] Fix rendering italics from dollar sign by @jeremyfelder in #811
- format rust code by @yshekel in #814
- Implement rust wrapper for rns conversions by @yshekel in #815
- Fix batch for rns conversions by @yshekel in #816
- Update docs with metal backend installation and licensing by @ShaniBabayoff in #818
- feat: FRI merkle tree API + CPU Backend by @ShanieWinitz in #795
- feat: balanced decomposition API by @yshekel in #823
- [Feat] Rust curves and fields to build with HASH by @LeonHibnik in #828
- [FEAT] sumcheck rust example fix by @LeonHibnik in #824
- Update introduction.md by @ElanZK in #830
- Adding Goldilocks Field by @HadarIngonyama in #837
- Implement Goldilocks on top of icicle-math for backend-specific optimizations by @HadarIngonyama in #838
- Accessing ICICLE with MCP by @ShaniBabayoff in #842
- sum and product scalar operations for golang by @emirsoyturk in #831
- Fixing bug in the from function in goldilocks and fixing the test for this function by @HadarIngonyama in #845
- copy | rust by @emirsoyturk in #836
- python script for generation params for from(bytes) function by @HadarIngonyama in #846
- Update arch_overview.md by @ElanZK in #841
- Update grants.md by @ElanZK in #843
- Update overview.md by @ElanZK in #844
- Update hash.md by @ShaniBabayoff in #832
- [FEAT] Rust memset by @LeonHibnik in #849
- Update install_gpu_backend.md by @ShaniBabayoff in #852
- inverse cpu and rust wrappers by @emirsoyturk in #747
- Make Go bindings work with Metal backend by @jeremyfelder in #825
- [FEAT] Curve Pairings by @ChickenLover in #829
- [FEAT] Add goldilocks constants for poseidon2 by @danny-shterman in #840
Full Changelog: v3.6.0...v3.7.0
Release v3.6.0
ICICLE v3.6.0
- Introducing a
METAL
backend! - At this release the backend is operable with cpp and Rust frontends.
- Usage: same as
CUDA
backend, download, extract and setICICLE_BACKEND_INSTALL_DIR
env var - This version also add support for user-defined program to use with sumcheck, faster cpu sumcheck and infrastructure for integer rings
Known Issues
- Metal backend is missing API implementations for Poseidon and Poseidon2 hashes, Merkle tree, Sumcheck and G2 montgomery conversions
- Batch
msm
is only supported in shared-bases mode (where all msms reuse the same bases).
What's Changed
- Fix release script by @jeremyfelder in #775
- Feat - batch hashing with multi-threading by @aviadingo in #764
- Remove MerkleTreeBasic test by @Koren-Brand in #780
- fix polynomial divide_by_vanishing_general_case() invalid config for … by @yshekel in #783
- Integer rings (Zq and instantiation for Labrador protocol) by @yshekel in #769
- Poseidon2 perf improvement by @danny-shterman in #758
- Example/sumcheck by @krakhit in #781
- Handle rou errors on the Rust side by @nonam3e in #784
- [Fix] ModArith neg when b is u32 by @LeonHibnik in #785
- Improve sumcheck docs by @idanfr-ingo in #778
- Make sumcheck tests able to run without cuda backend by @idanfr-ingo in #790
- Fix/pow misaligned by @nonam3e in #791
- Fix poseidon2 example to support any backend by @yshekel in #792
- Parallelize-sumcheck by @mickeyasa in #789
- docs: fix broken links in libraries and poseidon sections by @youyyytrok in #752
- Feat/func univariatepolytrait by @krakhit in #793
- Rust wrapper for porgram functionality by @Koren-Brand in #771
- Implement Integer Rings in RNS Representation by @yshekel in #787
- Custom combine functions for sumcheck (ReturningValueProgram) in rust by @Koren-Brand in #798
- fix sumcheck transcript-config copy rather than move by @yshekel in #799
- Refactor hash names by @LeonHibnik in #801
- Rust wrappers for labrador ring by @yshekel in #797
- [DOCS] Update Overview by @ElanZK in #804
- Update overview.md by @ElanZK in #805
- Idan/add sumcheck tests by @idanfr-ingo in #800
New Contributors
- @youyyytrok made their first contribution in #752
Full Changelog: v3.5.0...v3.6.0
Release v3.5.0
What's Changed
- Update sidebars.ts by @ShaniBabayoff in #729
- Update documentation for v3.4 by @ShaniBabayoff in #738
- Deprecated icicle/api headers and updated examples/docs by @yshekel in #740
- msm-avoid-double-thread-launch-on-phase1 by @mickeyasa in #737
- Fix get_device_count() in Rust release mode by @yshekel in #739
- Update to the new 2025 grants by @Otsar-Raikou in #726
- Hadar/base math by @HadarIngonyama in #734
- Vecops's Rust wrapper fix for batch>1 by @Koren-Brand in #741
- add sumcheck frontend by @mickeyasa in #692
- remove submodule by @emirsoyturk in #744
- Move initialization of the bucket_busy vectors to threads by @mickeyasa in #742
- Danny/poseidon2 sponge by @danny-shterman in #743
- fix host-math inv2() by disabling no-aliasing optimization by @yshekel in #755
- Hadar/reduction from storage by @HadarIngonyama in #745
- Change constant data of some poseidon2 tests to be random. by @danny-shterman in #753
- adding mersenne support for reduction function by @HadarIngonyama in #757
- Support G2 point conversion in Rust example by @LeonHibnik in #749
- Use Field::from function for hash results by @mickeyasa in #756
- Allow loaded backend to override default device for all threads by @yshekel in #760
- uninitialized variable warning fix in M31 by @mickeyasa in #759
- move cpu_sumcheck_transcript to frontend by @mickeyasa in #762
- Idan/sumcheck test by @idanfr-ingo in #761
- tests for single poly input by @idanfr-ingo in #772
- Feat/blake pow by @nonam3e in #766
- Fix incorrect clang-format flag by @brawncode in #767
- add "release" tag to Release CI workflow by @LeonHibnik in #774
- Update integrations.md by @ElanZK in #727
- Expose sumcheck API to Rust by @jeremyfelder in #770
New Contributors
- @brawncode made their first contribution in #767
- @ElanZK made their first contribution in #727
Full Changelog: v3.4.0...v3.5.0
Release v3.4.0
ICICLE v3.4.0
- Improved CPU MSM Performance
- Blake 3 CPU + CUDA
Known issues
- Blake3 CUDA version currently supports input sizes up to 2kb
What's Changed
- Update docusaurus.config.ts by @ShaniBabayoff in #720
- Add capability to set a default device for all threads by @jeremyfelder in #699
- Hadar/b const mult by @HadarIngonyama in #723
- Support vulkan backend in build system by @yshekel in #703
- Redesign CPU MSM with taskflow by @mickeyasa in #718
- Fix/release script by @LeonHibnik in #721
- fix bug in CPU vec ops regarding nof workers by @yshekel in #731
- Support android and vulkan by @yshekel in #735
- Parallelize-vecop-program-execution by @mickeyasa in #736
- Create docs for program & program execution by @idanfr-ingo in #722
- Blake3 CPU support by @aviadingo in #733
Full Changelog: v3.3.0...v3.4.0