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_optionwith regularoptionby @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
-qfrom 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