To download and unpack the latest version of libmceliece:

    wget -m
    wget -m$version.tar.gz
    tar -xzf$version.tar.gz
    cd libmceliece-$version

Then install.

Archives and changelog (reverse chronological)

libmceliece-20230612.tar.gz browse

In */avx/pk_gen.c, use merge exchange in sort_rows() and slightly reduce the number of lines of minmax_rows().

Rename encrypt() as pke_encrypt(), to more portably avoid name collision with POSIX encrypt().

Add more 0-initialization in the to_bitslicing functions. This doesn't help a full correctness proof, but it does make it easier to see that undefined data is not used. Thanks to Thom Wiggers for the suggestion.

For MacOS portability, move #include "encrypt.h" after other inclusions, and change .hidden to .private_extern (via a new ASM_HIDDEN) if __APPLE__ is defined. Thanks to Thom Wiggers for the suggestions.

Specify 32-byte alignment for some arrays passed to .S files in the avx implementations. The .S files use movdqu instead of movdqa, so they don't need alignment, but the alignment could avoid warnings from a compiler that checks for potentially inadequate alignment. Thanks to Thom Wiggers for the suggestion.

Remove an unused pointer increment at the end of benes.c. Thanks to Thom Wiggers for the suggestion.

Add various linker lines in .c files and .S files; split operations.c into kem_{keypair,enc,dec}.c and wrap_{keypair,enc,dec}.c; and split big constant arrays from fft.c, fft_tr.c into separate shared-*.c files. The linker lines trigger an infrastructure mechanism to unify compiled code across implementations, reducing .so size; the splits improve the effectiveness of this mechanism, and reduce the amount of code linked into programs that use only one or two of {keypair,enc,dec}. Further changes to the infrastructure may remove the need for wrap*.c.

Add const to prototypes for input pointers for some functions. More can be done here.

Change prototypes from * and [] to, e.g., [GFBITS] when necessary to eliminate compiler warnings.

Move gf_mul2 to crypto_kem/6688128/avx/gf.h from gf.c.

Consistently define nBlocksI as a macro rather than a const. This is a step towards portability to compilers that fail to support C99.

Extend information in architectures files. This supports libmceliece's run-time selection of implementations.

Switch from CRYPTO_NAMESPACE to CRYPTO_SHARED_NAMESPACE for symbols defined in .S files.

Rename crypto_hash.h as hash.h, and rewrite hash.h as a wrapper around crypto_xof_shake256().

Switch keypair return value to void.

Remove namespacing files, goal-* files, and api.h.

Rename kem/mceliece* as kem/*.

Starting point: vec and avx implementations from official round-4 software release (in supercop-20221025), plus crypto_sort/int32 and crypto_xof/shake256, plus infrastructure based on lib25519 infrastructure.

Version: This is version 2023.06.07 of the "Download" web page.