1
1
Fork 0
mirror of https://github.com/oxen-io/lokinet synced 2023-12-14 06:53:00 +01:00
lokinet/crypto/libntrup/src/ref
2018-10-23 07:29:37 -04:00
..
api.h restructure original code into libntrup 2018-08-13 11:43:27 -04:00
dec.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
enc.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
implementors restructure original code into libntrup 2018-08-13 11:43:27 -04:00
int32_sort.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
int32_sort.h bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
keypair.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
mod3.h bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
modq.h bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
params.h win32 fluff 2018-08-18 21:26:18 -05:00
r3.h restructure original code into libntrup 2018-08-13 11:43:27 -04:00
r3_mult.c restructure original code into libntrup 2018-08-13 11:43:27 -04:00
r3_recip.c useless header is useless ;-; 2018-09-19 19:43:15 -05:00
random32.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
randomsmall.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
randomweightw.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
README restructure original code into libntrup 2018-08-13 11:43:27 -04:00
rq.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
rq.h restructure original code into libntrup 2018-08-13 11:43:27 -04:00
rq_mult.c restructure original code into libntrup 2018-08-13 11:43:27 -04:00
rq_recip3.c useless header is useless ;-; 2018-09-19 19:43:15 -05:00
rq_round3.c restructure original code into libntrup 2018-08-13 11:43:27 -04:00
rq_rounded.c bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
small.c restructure original code into libntrup 2018-08-13 11:43:27 -04:00
small.h bundle relevent libsodium parts 2018-10-23 07:29:37 -04:00
swap.c restructure original code into libntrup 2018-08-13 11:43:27 -04:00
swap.h restructure original code into libntrup 2018-08-13 11:43:27 -04:00

This is a reference implementation of Streamlined NTRU Prime 4591^761.
This implementation is designed primarily for clarity, subject to the
following constraints:

   * The implementation is written in C. The Sage implementation in the
     NTRU Prime paper is considerably more concise (and compatible).

   * The implementation avoids data-dependent branches and array
     indices. For example, conditional swaps are computed by arithmetic
     rather than by branches.

   * The implementation avoids other C operations that often take
     variable time. For example, divisions by 3 are computed via
     multiplications and shifts.
     
This implementation does _not_ sacrifice clarity for speed.

This implementation has not yet been reviewed for correctness or for
constant-time behavior. It does pass various tests and has no known
bugs, but there are at least some platforms where multiplications take
variable time, and fixing this requires platform-specific effort; see
https://www.bearssl.org/ctmul.html and http://repository.tue.nl/800603.

This implementation allows "benign malleability" of ciphertexts, as
defined in http://www.shoup.net/papers/iso-2_1.pdf. Specifically, each
32-bit ciphertext word encodes three integers between 0 and 1530; if
larger integers appear then they are silently reduced modulo 1531.
Similar comments apply to public keys.

There is a separate "avx" implementation where similar comments apply,
except that "avx" _does_ sacrifice clarity for speed on CPUs with AVX2
instructions.