blob: 0cf09c625850389769c5a2f14df0f3b64f265503 [file] [log] [blame]
Alex Gaynor1abfac72013-08-07 12:59:04 -07001Welcome to ``cryptography``
2===========================
3
Alex Gaynor66ba6012013-10-28 10:11:21 -07004``cryptography`` is a Python library which exposes cryptographic recipes and
Alex Gaynor872cd972014-02-10 18:52:47 -08005primitives. Our goal is for it to be your "cryptographic standard library".
Alex Gaynor31df5352013-12-12 18:03:26 -08006
skeuomorfb0293bf2014-01-29 21:41:02 +02007Installation
8------------
9You can install ``cryptography`` with ``pip``:
10
11.. code-block:: console
12
13 $ pip install cryptography
14
Paul Kehrerf3b57e32014-01-29 14:45:10 -060015See :doc:`Installation <installation>` for more information.
skeuomorfb0293bf2014-01-29 21:41:02 +020016
Alex Gaynor9f3468d2013-08-11 08:17:48 -040017Why a new crypto library for Python?
18------------------------------------
19
Alex Gaynor31df5352013-12-12 18:03:26 -080020If you've done cryptographic work in Python before, you've probably seen some
21other libraries in Python, such as *M2Crypto*, *PyCrypto*, or *PyOpenSSL*. In
22building ``cryptography`` we wanted to address a few issues we observed in the
23existing libraries:
Alex Gaynor9f3468d2013-08-11 08:17:48 -040024
Alex Gaynord8d91d42013-08-12 09:33:18 -040025* Lack of PyPy and Python 3 support.
Alex Gaynord6bef562013-08-11 09:09:28 -040026* Lack of maintenance.
Alex Gaynorec4ba732013-08-11 08:19:05 -040027* Use of poor implementations of algorithms (i.e. ones with known side-channel
Alex Gaynord6bef562013-08-11 09:09:28 -040028 attacks).
29* Lack of high level, "Cryptography for humans", APIs.
Alex Gaynor7ba13922014-02-03 15:00:48 -080030* Absence of algorithms such as
31 :class:`AES-GCM <cryptography.hazmat.primitives.ciphers.modes.GCM>` and
32 :class:`~cryptography.hazmat.primitives.kdf.hkdf.HKDF`.
Alex Gaynord6bef562013-08-11 09:09:28 -040033* Poor introspectability, and thus poor testability.
Alex Gaynorf0d139a2013-08-11 09:13:27 -040034* Extremely error prone APIs, and bad defaults.
Alex Gaynor9f3468d2013-08-11 08:17:48 -040035
Alex Gaynor7c067462013-12-16 10:11:00 -080036Layout
37------
Alex Gaynor9f3468d2013-08-11 08:17:48 -040038
Alex Gaynor7c067462013-12-16 10:11:00 -080039``cryptography`` is broadly divided into two levels. One with safe
40cryptographic recipes, "cryptography for humans" if you will. These are safe
41and easy to use and don't require developers to make many decisions.
42
43The other level is low-level cryptographic primitives. These are often
44dangerous and can be used incorrectly. They require making decisions and having
45an in-depth knowledge of the cryptographic concepts at work. Because of the
Alex Gaynordf8bfea2013-12-16 10:17:48 -080046potential danger in working at this level, this is referred to as the
Alex Gaynor77762bc2014-01-01 07:53:48 -080047"hazardous materials" or "hazmat" layer. These live in the
Alex Gaynord8614a22014-01-01 08:22:40 -080048``cryptography.hazmat`` package, and their documentation will always contain an
Alex Gaynor77762bc2014-01-01 07:53:48 -080049admonition at the top.
Alex Gaynor7c067462013-12-16 10:11:00 -080050
51We recommend using the recipes layer whenever possible, and falling back to the
52hazmat layer only when necessary.
53
54The recipes layer
55~~~~~~~~~~~~~~~~~
Alex Gaynorc62e91f2013-08-06 19:25:52 -070056
57.. toctree::
Alex Gaynor1abfac72013-08-07 12:59:04 -070058 :maxdepth: 2
59
Alex Gaynor333fb102013-10-31 10:27:35 -070060 fernet
Alex Gaynor2a70f912014-02-06 09:47:07 -080061 random-numbers
Alex Gaynorf1a3fc02013-11-02 14:03:34 -070062 exceptions
Alex Gaynorde06b292014-02-18 16:40:09 -080063 faq
Alex Gaynor8c9dcb32013-11-03 13:10:57 -080064 glossary
Donald Stufftf04317a2013-10-27 16:44:30 -040065
Alex Gaynor2cfbc122013-12-16 10:19:00 -080066The hazardous materials layer
67~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Donald Stufftf04317a2013-10-27 16:44:30 -040068
69.. toctree::
70 :maxdepth: 2
71
72 hazmat/primitives/index
Alex Gaynorf8796b12013-12-13 20:28:55 -080073 hazmat/backends/index
Alex Stapletonc368ac22013-12-31 13:43:38 +000074 hazmat/bindings/index
Alex Gaynor7c067462013-12-16 10:11:00 -080075
Alex Gaynor7c067462013-12-16 10:11:00 -080076The ``cryptography`` open source project
77~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78
79.. toctree::
80 :maxdepth: 2
81
skeuomorfb0293bf2014-01-29 21:41:02 +020082 installation
Paul Kehrer0839aa82014-02-11 22:36:51 -060083 development/index
Alex Gaynor7c067462013-12-16 10:11:00 -080084 security
Alex Gaynor1a9bbf22013-12-24 10:59:50 -080085 api-stability
Alex Gaynor89063f62014-01-06 15:52:38 -080086 doing-a-release
Alex Gaynor3f230402014-01-08 09:21:57 -080087 changelog
Alex Gaynor7c067462013-12-16 10:11:00 -080088 community
Alex Gaynora8fc6f32014-01-23 10:48:16 -060089
90
Alex Gaynore7651de2014-01-23 11:34:35 -060091.. _`pre-compiled binaries`: https://www.openssl.org/related/binaries.html