This implements additive fast fourier transform for finite binary fields field of size
To do so it uses the following:
We represent the elements of int64. Note that these elements are signed and the first bit is the sign. Therefore the number Int64.min_int represents the element
Addition is just logxor.
Multiplication is done via the core::arch::x86_64::_mm_clmulepi64_si128 in Rust. More precisely we use the following:
We represent elements of int64*innt64. Note that
Note that
Inverses are both computed using the binary algorithm (see for example algorithm 2.49 in Guide to Elliptic Code Cryptography by Hankerson Menezes and Vanstone).
The additive FFT is based on this paper.
Note that two of the three constructions only work on Intel machines that have the _mm_clmulepi64_si128 instruction.
dune exec ./main.exe will compute benchmarks and dune exec test/test_finite_fields.exe will test the field properties and the fact that fft and ifft are inverse to each other.