libpqcrypto
is
a new cryptographic software library
produced by the PQCRYPTO project.
PQCRYPTO,
working jointly with many other researchers around the world,
submitted 22 proposals
to NIST's ongoing post-quantum standardization project.
Each submission specifies a family of cryptographic systems,
offering various tradeoffs between performance and security.
Each submission includes software:
a (portable) reference C implementation,
and in many cases additional (not necessarily portable)
implementations providing better performance
(often using assembly language or "intrinsics").
libpqcrypto
includes software for
the following 77 cryptographic systems
(50 signature systems and 27 encryption systems)
from 19 of the 22 PQCRYPTO submissions:
- BIG QUAKE:
crypto_kem_bigquake{1,3,5}
- Classic McEliece:
crypto_kem_mceliece{6960119,8192128}
- CRYSTALS-DILITHIUM:
crypto_sign_dilithium{2,3,4}
- CRYSTALS-KYBER:
crypto_kem_kyber{512,768,1024}
- DAGS:
crypto_kem_dags{3,5}
- FrodoKEM:
crypto_kem_frodokem{640,976}
- Gui:
crypto_sign_gui{184,312,448}
- KINDI:
crypto_kem_kindi{256342,256522,512222,512241,512321}
- LUOV:
crypto_sign_luov{863256,890351,8117404,4849242,6468330,8086399}
- MQDSS:
crypto_sign_mqdss{48,64}
- NewHope:
crypto_kem_newhope{512,1024}cca
- NTRU-HRSS-KEM:
crypto_kem_ntruhrss701
- NTRU Prime:
crypto_kem_{ntrulpr,sntrup}4591761
- Picnic:
crypto_sign_picnicl{1,3,5}{fs,ur}
- qTESLA:
crypto_sign_qtesla{128,192,256}
- Rainbow:
crypto_sign_rainbow{1a,1b,1c,3b,3c,4a,5c,6a,6b}
- Ramstake:
crypto_kem_ramstakers{216091,756839}
- SABER:
crypto_kem_{firesaber,lightsaber,saber}
- SPHINCS+:
crypto_sign_sphincs{f,s}{128,192,256}{haraka,sha256,shake256}
libpqcrypto
collects this software into an integrated library, with
- a unified compilation framework,
- an automatic test framework,
- automatic selection of the fastest implementation of each system,
- a unified C interface following the NaCl/TweetNaCl/SUPERCOP/libsodium API,
- a unified Python interface,
- command-line signature/verification/encryption/decryption tools, and
- command-line benchmarking tools.
libpqcrypto
also integrates
some symmetric-crypto software from SUPERCOP,
including the AES-256-CTR stream cipher
(an OpenSSL wrapper and a separate implementation from Romain Dolbeau),
the Salsa20-256 and ChaCha20-256 stream ciphers
(implementations from
Daniel J. Bernstein, Romain Dolbeau, Martin Goll, Shay Gueron,
Ted Krovetz, Tanja Lange, Andrew Moon, Samuel Neves, and Peter Schwabe),
the Poly1305 MAC
(implementations from
Daniel J. Bernstein, Billy Brumley, Andrew Moon, and Peter Schwabe),
the SHA-512 hash function
(an OpenSSL wrapper, a separate implementation from Daniel J. Bernstein,
and a separate implementation from Thomas Pornin via sphlib
),
portions of the Keccak Code Package
(from Guido Bertoni, Joan Daemen, Michaƫl Peeters, Gilles Van Assche, and Ronny Van Keer),
and the SHAKE256 hash function
(a KCP wrapper and implementations from David Leon Gil).
For credits regarding the public-key software,
see the individual submission packages to NIST.
Beware that the components of libpqcrypto
vary in licenses.
Some parts are in the public domain, but others are not.
Mailing list
To join the libpqcrypto
mailing list,
send an empty message to
libpqcrypto-subscribe@list.cr.yp.to
.
Version: This is version 2018.03.23 of the "Intro" web page.