Version 0.2 brings FLINT 3, Seeded Sampling, and ML-DSA
qFALL 0.2 of the math-, tools-, and schemes-crate is available on crates.io. It moves qFALL to FLINT 3.6, adds seeded sampling, several convenience functions, a prototype of ML-DSA, and fixes a few bugs.
All three qFALL crates are available in version 0.2 on crates.io.
What’s New
- FLINT 3.6:
qfall-mathnow builds upon FLINT 3.6 viaflint3-sysinstead of FLINT 2.8 viaflint-sys. - Seeded sampling: Every sampling function of
qfall-mathhas a_seededvariant that takes a 256-bit seed and produces reproducible output. This enables reproducible experiments, key generation, and Known Answer Tests (KATs). - Convenience functions: Negation via an implementation of the
Neg-trait. Further, we implemented functions forhamming_weight,norm_euclfor polynomials, least absolute residues for all residue class types, andchange_modulus/change_qto switch the modulus of existing instances. - ML-DSA:
qfall-schemescontains a prototype of the signature scheme behind FIPS 204, including all three parameter sets. - Bug fixes: Among others,
Zq::get_representative_least_absolute_residuenow returns signed representatives, and the discrete Gaussian and binomial samplers ofMatZqreturn properly reduced entries.
All details are listed in the release notes of our tutorial, including the new features and bug fixes.
How to Update
Version 0.2 contains breaking changes. Update all three crates at once and make sure your Rust toolchain is 1.88 or newer:
cargo add qfall-math@0.2 qfall-tools@0.2 qfall-schemes@0.2
Alongside a call to cargo clean, this is all it takes for most projects. If your project accesses FLINT directly, e.g. via the unsafe getters of qfall-math, our transition guide walks you through the migration to FLINT 3 step by step.
As new releases of some dependencies broke our version 0.1 releases, all v0.1 releases have been yanked from crates.io. If you need to reproduce results obtained with them, have a look at Using 0.1 Releases Today.