Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test and reject multimodular arithmetic #9

Merged
merged 31 commits into from
Jul 28, 2024
Merged

Test and reject multimodular arithmetic #9

merged 31 commits into from
Jul 28, 2024

Conversation

aszepieniec
Copy link
Owner

This branch records a historical multi-modular / residue number system implementation. In the end it was rejected because 99% of the performance boost came from doing NTT-based came from doing the cyclotomic multiplication using NTT over a u32 field (larger than Falcon's field). The extra 1% does not justify the code complexity nor the compile time.

Also:
 - Upgrade test from pseudorandom to proptest
 - Add method `bits` which returns bitsize
Anticipates faster reduction modulo multimodular primes.
`MASTER_TREE` is populated from a rust expression inside a
`lazy_static!` declaration, meaning that it is computed from
native rust (so fast) once per thread in which it is needed.
This allows faster reduction of large integers modulo up to
`N = 512` thirty-two-bit primes.
Specifically, `modular_inverses_sequence` and `product_tree` need to
be separate from `multimod`, but depend on the `MODULI` static ref.
Solved by introducing `residue_number_system.rs` which contains
`MODULI` and associated logic. Now `multimod.rs` depends on all
three and adds logic for dealing with multimodular integers.
Specifically: `MODULAR_INVERSES_SEQUENCE`.
SHAKE makes the PRNG expansion deterministic and comparable across
implementations.
In the given context, the operands can be assumed to have compatible
capacities already.
Also: drop bit capacity tracker. For every multimod arithmetic, the
available capacity is assumed to be enough.
@aszepieniec aszepieniec merged commit fb1bcf7 into master Jul 28, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant