You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Thom Wiggers 630ae782fd
Make sure python3-pip is installed
преди 5 години
common Add travis config преди 5 години
crypto_kem/kyber768 Ensure Python3.5 compatibility преди 5 години
crypto_sign/dilithium-iii Ensure Python3.5 compatibility преди 5 години
test Ensure Python3.5 compatibility преди 5 години
.clang-format Normalize whitespace преди 5 години
.clang-tidy Add travis config преди 5 години
.gitattributes Fix tidy for signing преди 5 години
.gitignore Add more binary noise to .gitignore преди 5 години
.travis.yml Make sure python3-pip is installed преди 5 години
Makefile Add debugging symbols for Valgrind преди 5 години
README.md Update checked boxes преди 5 години
requirements.txt Don't specify PyYAML version and just get the latest one преди 5 години

README.md

PQClean

Build Status

PQClean, in short, is an effort to collect clean implementations of the post-quantum schemes that are in the NIST post-quantum project. The goal of PQClean is to provide standalone implementations that

  • can easily be integrated into libraries such as liboqs or libpqcrypto;
  • can efficiently upstream into higher-level protocol integration efforts such as Open Quantum Safe;
  • can easily be integrated into benchmarking frameworks such as SUPERCOP;
  • can easily be integrated into frameworks targeting embedded platforms such as pqm4;
  • are suitable starting points for architecture-specific optimized implementations;
  • are suitable starting points for evaluation of implementation security; and
  • are suitable targets for formal verification.

What PQClean is not aiming for is

  • a build system producing an integrated library of all schemes;
  • including benchmarking of implementations; and
  • including integration into higher-level applications or protocols.

As a first main target, we are collecting C implementations that fulfill the requirements listed below.

Requirements on C implementations that are automatically checked

The checking of items on this list is still being developed. Checked items should be working.

Requirements on C implementations that are manually checked

  • Makefiles without explicit rules (rely on implicit, built-in rules)
  • #ifdefs only for header encapsulation
  • No stringification macros
  • Output-parameter pointers in functions are on the left
  • const arguments are labeled as const
  • All exported symbols are namespaced in place
  • All integer types are of fixed size, using stdint.h types (including uint8_t instead of unsigned char)
  • Integers used for indexing are of size size_t
  • variable declarations at the beginning (except in for (size_t i=...)

Clean C implementations currently in PQClean

Currently, the continuous-integration and testing environment of PQClean is still work in progress and as a consequence PQClean does not yet have many implementations.

API used by PQClean

PQClean is essentially using the same API as required for the NIST reference implementations, which is also used by SUPERCOP and by libpqcrypto. The only two differences to that API are the following:

  • 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:
int crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk);
int crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk);

License

Each subdirectory containing implementations contains a LICENSE file stating under what license that specific implementation is released. All other code for testing etc. in this repository is released under the conditions of CC0.