blob: c96b6d89d3f75ad07b7afa1af76c9193918b711d [file] [log] [blame]
Paul Kehrer1681a692014-02-11 23:43:51 -06001Test Vectors
2============
3
4Testing the correctness of the primitives implemented in each ``cryptography``
5backend requires trusted test vectors. Where possible these vectors are obtained
6from official sources such as `NIST`_ or `IETF`_ RFCs. When this is not possible
7``cryptography`` has chosen to create a set of custom vectors using an official
8vector file as input to verify consistency between implemented backends.
9
10Sources
11-------
12
13Asymmetric Ciphers
14~~~~~~~~~~~~~~~~~~
15
Alex Stapletonabec8a12014-02-22 16:33:24 +000016* RSA PKCS #1 from the RSA FTP site (ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/
Paul Kehrer1681a692014-02-11 23:43:51 -060017 and ftp://ftp.rsa.com/pub/rsalabs/tmp/).
Alex Stapleton58db1542014-02-19 21:18:15 +000018* OpenSSL PEM serialization vectors from the `OpenSSL test suite`_ and `GnuTLS test suite`_.
Alex Stapletonabec8a12014-02-22 16:33:24 +000019* PKCS #8 PEM serialization vectors from
20
21 * GnuTLS: `encpkcs8.pem`_, `enc2pkcs8.pem`_, `unencpkcs8.pem`_, `pkcs12_s2k_pem.c`_.
22 * `Botan's ECC private keys`_.
Paul Kehrer1681a692014-02-11 23:43:51 -060023
24Hashes
25~~~~~~
26
27* MD5 from :rfc:`1321`.
28* RIPEMD160 from the `RIPEMD website`_.
29* SHA1 from `NIST CAVP`_.
30* SHA2 (224, 256, 384, 512) from `NIST CAVP`_.
31* Whirlpool from the `Whirlpool website`_.
32
33HMAC
34~~~~
35
36* HMAC-MD5 from :rfc:`2202`.
37* HMAC-SHA1 from :rfc:`2202`.
38* HMAC-RIPEMD160 from :rfc:`2286`.
39* HMAC-SHA2 (224, 256, 384, 512) from :rfc:`4231`.
40
41Key Derivation Functions
42~~~~~~~~~~~~~~~~~~~~~~~~
43
44* HKDF (SHA1, SHA256) from :rfc:`5869`.
45* PBKDF2 (HMAC-SHA1) from :rfc:`6070`.
46
47Recipes
48~~~~~~~
49
50* Fernet from its `specification repository`_.
51
52Symmetric Ciphers
53~~~~~~~~~~~~~~~~~
54
Paul Kehrere547d8f2014-02-15 21:37:52 -060055* AES (CBC, CFB, ECB, GCM, OFB) from `NIST CAVP`_.
56* AES CTR from :rfc:`3686`.
Paul Kehrer1681a692014-02-11 23:43:51 -060057* 3DES (CBC, CFB, ECB, OFB) from `NIST CAVP`_.
58* ARC4 from :rfc:`6229`.
59* Blowfish (CBC, CFB, ECB, OFB) from `Bruce Schneier's vectors`_.
60* Camellia (ECB) from NTT's `Camellia page`_ as linked by `CRYPTREC`_.
61* Camellia (CBC, CFB, OFB) from `OpenSSL's test vectors`_.
62* CAST5 (ECB) from :rfc:`2144`.
Paul Kehrercf6ffb52014-02-12 16:17:04 -060063* CAST5 (CBC, CFB, OFB) generated by this project.
64 See: :doc:`/development/custom-vectors/cast5`
Paul Kehrer1681a692014-02-11 23:43:51 -060065
Ayrx933dd682014-02-18 23:26:11 +080066Two Factor Authentication
67~~~~~~~~~~~~~~~~~~~~~~~~~
68
69* HOTP from :rfc:`4226`
70* TOTP from :rfc:`6238` (Note that an `errata`_ for the test vectors in RFC 6238 exists)
71
Paul Kehrer1681a692014-02-11 23:43:51 -060072
Paul Kehrercf6ffb52014-02-12 16:17:04 -060073Creating Test Vectors
74---------------------
75
76When official vectors are unavailable ``cryptography`` may choose to build
77its own using existing vectors as source material. Current custom vectors:
78
79.. toctree::
80 :maxdepth: 1
81
82 custom-vectors/cast5
83
84If official test vectors appear in the future the custom generated vectors
85should be discarded.
86
87Any vectors generated by this method must also be prefixed with the following
88header format (substituting the correct information):
89
90.. code-block:: python
91
92 # CAST5 CBC vectors built for https://github.com/pyca/cryptography
93 # Derived from the AESVS MMT test data for CBC
94 # Verified against the CommonCrypto and Go crypto packages
95 # Key Length : 128
96
Paul Kehrer1681a692014-02-11 23:43:51 -060097.. _`NIST`: http://www.nist.gov/
98.. _`IETF`: https://www.ietf.org/
99.. _`NIST CAVP`: http://csrc.nist.gov/groups/STM/cavp/
100.. _`Bruce Schneier's vectors`: https://www.schneier.com/code/vectors.txt
101.. _`Camellia page`: http://info.isl.ntt.co.jp/crypt/eng/camellia/
102.. _`CRYPTREC`: http://www.cryptrec.go.jp
103.. _`OpenSSL's test vectors`: https://github.com/openssl/openssl/blob/97cf1f6c2854a3a955fd7dd3a1f113deba00c9ef/crypto/evp/evptests.txt#L232
104.. _`RIPEMD website`: http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
105.. _`Whirlpool website`: http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html
106.. _`Specification repository`: https://github.com/fernet/spec
Ayrx933dd682014-02-18 23:26:11 +0800107.. _`errata`: http://www.rfc-editor.org/errata_search.php?rfc=6238
Alex Stapleton58db1542014-02-19 21:18:15 +0000108.. _`OpenSSL test suite`: http://git.openssl.org/gitweb/?p=openssl.git;a=blob;f=test/testrsa.pem;h=aad21067a8f7cb93a52a511eb9162fd83be39135;hb=66e8211c0b1347970096e04b18aa52567c325200
109.. _`GnuTLS test suite`: https://gitorious.org/gnutls/gnutls/commit/f16ef39ef0303b02d7fa590a37820440c466ce8d
Alex Stapletonabec8a12014-02-22 16:33:24 +0000110.. _`encpkcs8.pem`: https://gitorious.org/gnutls/gnutls/source/f8d943b38bf74eaaa11d396112daf43cb8aa82ae:tests/pkcs8-decode/encpkcs8.pem
111.. _`enc2pkcs8.pem`: https://gitorious.org/gnutls/gnutls/source/f8d943b38bf74eaaa11d396112daf43cb8aa82ae:tests/pkcs8-decode/enc2pkcs8.pem
112.. _`unencpkcs8.pem`: https://gitorious.org/gnutls/gnutls/source/f8d943b38bf74eaaa11d396112daf43cb8aa82ae:tests/pkcs8-decode/unencpkcs8.pem
113.. _`pkcs12_s2k_pem.c`: https://gitorious.org/gnutls/gnutls/source/f8d943b38bf74eaaa11d396112daf43cb8aa82ae:tests/pkcs12_s2k_pem.c
114.. _`Botan's ECC private keys`: https://github.com/randombit/botan/tree/4917f26a2b154e841cd27c1bcecdd41d2bdeb6ce/src/tests/data/ecc