2021-03-03 06:50:25 +00:00
# PQ Crypto Catalog
2019-01-11 00:05:16 +00:00
2021-03-03 06:50:25 +00:00
This is a repository of post-quantum schemes coppied from the submission to the NIST Post-Quantum Standarization. The sources were cloned from the PQClean project to form new library. The goal of the library is mainly experimentation.
2020-10-11 12:20:15 +01:00
2021-03-03 06:50:25 +00:00
## Schemes
2019-01-11 00:05:16 +00:00
2020-03-13 20:15:12 +00:00
### Key Encapsulation Mechanisms
2019-01-11 00:05:16 +00:00
2020-07-25 05:46:58 +01:00
**Finalists:**
2020-03-13 20:15:12 +00:00
* Classic McEliece
* Kyber
* NTRU
* SABER
2020-07-25 05:46:58 +01:00
**Alternate candidates:**
* FrodoKEM
* HQC
2019-01-11 00:05:16 +00:00
2020-03-13 20:15:12 +00:00
### Signature schemes
2019-01-11 00:05:16 +00:00
2020-07-25 05:46:58 +01:00
**Finalists:**
2020-03-13 20:15:12 +00:00
* Dilithium
* Falcon
* Rainbow
2020-07-25 05:46:58 +01:00
**Alternate candidates:**
2020-03-13 20:15:12 +00:00
* SPHINCS+
2019-01-11 00:05:16 +00:00
2020-07-25 05:46:58 +01:00
Implementations previously available in PQClean and dropped in Round 3 of the NIST standardization effort are available in the [`round2` tag ](https://github.com/PQClean/PQClean/releases/tag/round2 ).
2019-01-11 00:05:16 +00:00
## API used by PQClean
2019-02-08 15:02:24 +00:00
PQClean is essentially using the same API as required for the NIST reference implementations,
2020-03-13 20:15:12 +00:00
which is also used by SUPERCOP and by libpqcrypto. The only differences to that API are
2019-01-11 00:05:16 +00:00
the following:
2020-03-13 20:15:12 +00:00
* All functions are namespaced;
2019-01-11 00:05:16 +00:00
* All lengths are passed as type `size_t` instead of `unsigned long long` ; and
* Signatures offer two additional functions that follow the "traditional" approach used
in most software stacks of computing and verifying signatures instead of producing and
recovering signed messages. Specifically, those functions have the following name and signature:
2020-03-13 20:15:12 +00:00
```c
int PQCLEAN_SCHEME_IMPL_crypto_sign_signature(
uint8_t *sig, size_t *siglen,
const uint8_t *m, size_t mlen,
const uint8_t *sk);
int PQCLEAN_SCHEME_IMPL_crypto_sign_verify(
const uint8_t *sig, size_t siglen,
const uint8_t *m, size_t mlen,
const uint8_t *pk);
2019-01-11 00:05:16 +00:00
```