-rw-r--r-- 1932 libmceliece-20240726/doc/people.md raw
libmceliece is based on the official Classic McEliece software, which
was written by Tung Chou. See the following papers for the major
algorithms used for speed inside that software:
* Daniel J. Bernstein, Tung Chou, Peter Schwabe. "McBits: fast
constant-time code-based cryptography." CHES 2013.
[https://tungchou.github.io/papers/mcbits.pdf](https://tungchou.github.io/papers/mcbits.pdf)
* Tung Chou. "McBits revisited." CHES 2017.
[https://tungchou.github.io/papers/mcbits_revisited.pdf](https://tungchou.github.io/papers/mcbits_revisited.pdf)
The official Classic McEliece software includes `ref`, `vec`, `sse`, and
`avx` implementations; libmceliece includes only `vec` and `avx`.
The following components of libmceliece are from Daniel J. Bernstein:
* Small [changes](download.html#changelog)
for namespacing, portability, etc.
* Software to compute control bits (also used in the official software).
See the following paper: Daniel J. Bernstein. "Verified fast formulas
for control bits for permutation networks." 2020.
[https://cr.yp.to/papers.html#controlbits](https://cr.yp.to/papers.html#controlbits)
* Infrastructure to build a library with automatic run-time selection of
implementations based on the run-time CPU and a database of
benchmarks. This infrastructure was introduced in
[`lib25519`](https://lib25519.cr.yp.to), with some extensions and
adaptations in libmceliece.
* Various software for tests and benchmarks. This is based on
public-domain code in the SUPERCOP benchmarking framework.
* The underlying subroutines
`crypto_sort`
(based on [https://sorting.cr.yp.to](https://sorting.cr.yp.to)),
`crypto_xof/bitwrite16`,
and `crypto_xof/shake256/unrollround`.
A separate SHAKE256 implementation,
`crypto_xof/shake256/tweet`,
is based on
[https://twitter.com/tweetfips202](https://twitter.com/tweetfips202)
by Daniel J. Bernstein, Peter Schwabe, and Gilles Van Assche.