blob: 0995489f7e7af92f76f097f71eea2fdbf9e78349 [file] [log] [blame]
David Reid30722b92013-11-07 13:03:39 -08001.. hazmat::
2
3Interfaces
4==========
5
6
7``cryptography`` uses `Abstract Base Classes`_ as interfaces to describe the
David Reidbd18bcd2013-11-07 13:13:30 -08008properties and methods of most primitive constructs. Backends may also use
9this information to influence their operation. Interfaces should also be used
David Reid30722b92013-11-07 13:03:39 -080010to document argument and return types.
11
Alex Gaynore9df2942014-12-12 10:56:26 -080012.. _`Abstract Base Classes`: https://docs.python.org/3/library/abc.html
David Reid30722b92013-11-07 13:03:39 -080013
14
Alex Stapletonc5fffd32014-03-18 15:29:00 +000015Symmetric ciphers
Alex Gaynor645315b2014-06-23 11:55:55 -070016-----------------
David Reid30722b92013-11-07 13:03:39 -080017
18.. currentmodule:: cryptography.hazmat.primitives.interfaces
19
David Reid0a394df2013-11-15 16:19:50 -080020
21.. class:: CipherAlgorithm
22
23 A named symmetric encryption algorithm.
24
25 .. attribute:: name
26
27 :type: str
28
29 The standard name for the mode, for example, "AES", "Camellia", or
30 "Blowfish".
31
32 .. attribute:: key_size
33
34 :type: int
35
36 The number of bits in the key being used.
37
38
David Reid668d4802013-12-17 11:53:43 -080039.. class:: BlockCipherAlgorithm
40
41 A block cipher algorithm.
42
43 .. attribute:: block_size
44
45 :type: int
46
47 The number of bits in a block.
48
49
Alex Stapletonc5fffd32014-03-18 15:29:00 +000050Cipher modes
Alex Gaynor645315b2014-06-23 11:55:55 -070051~~~~~~~~~~~~
David Reid0a394df2013-11-15 16:19:50 -080052
David Reid30722b92013-11-07 13:03:39 -080053Interfaces used by the symmetric cipher modes described in
54:ref:`Symmetric Encryption Modes <symmetric-encryption-modes>`.
55
56.. class:: Mode
57
58 A named cipher mode.
59
60 .. attribute:: name
61
62 :type: str
63
64 This should be the standard shorthand name for the mode, for example
65 Cipher-Block Chaining mode is "CBC".
66
67 The name may be used by a backend to influence the operation of a
68 cipher in conjunction with the algorithm's name.
69
Alex Gaynor9626b5a2013-11-19 16:49:26 -080070 .. method:: validate_for_algorithm(algorithm)
71
72 :param CipherAlgorithm algorithm:
73
74 Checks that the combination of this mode with the provided algorithm
75 meets any necessary invariants. This should raise an exception if they
76 are not met.
77
78 For example, the :class:`~cryptography.hazmat.primitives.modes.CBC`
79 mode uses this method to check that the provided initialization
80 vector's length matches the block size of the algorithm.
81
David Reid30722b92013-11-07 13:03:39 -080082
83.. class:: ModeWithInitializationVector
84
85 A cipher mode with an initialization vector.
86
87 .. attribute:: initialization_vector
88
89 :type: bytes
90
91 Exact requirements of the initialization are described by the
92 documentation of individual modes.
93
94
95.. class:: ModeWithNonce
96
97 A cipher mode with a nonce.
98
99 .. attribute:: nonce
100
101 :type: bytes
102
103 Exact requirements of the nonce are described by the documentation of
104 individual modes.
Paul Kehrerac423232014-01-25 14:13:09 -0600105
Alex Stapletonc5fffd32014-03-18 15:29:00 +0000106Asymmetric interfaces
Alex Gaynor645315b2014-06-23 11:55:55 -0700107---------------------
108
109.. class:: AsymmetricSignatureContext
110
111 .. versionadded:: 0.2
112
113 .. method:: update(data)
114
115 :param bytes data: The data you want to sign.
116
117 .. method:: finalize()
118
119 :return bytes signature: The signature.
120
121
122.. class:: AsymmetricVerificationContext
123
124 .. versionadded:: 0.2
125
126 .. method:: update(data)
127
128 :param bytes data: The data you wish to verify using the signature.
129
130 .. method:: verify()
131
132 :raises cryptography.exceptions.InvalidSignature: If the signature does
133 not validate.
134
135
136.. class:: AsymmetricPadding
137
138 .. versionadded:: 0.2
139
140 .. attribute:: name
141
Paul Kehrerd2fa7d22015-02-12 00:15:02 -0600142DSA
143~~~
144
145In 0.8 the DSA key interfaces were moved to the
146:mod:`cryptography.hazmat.primitives.asymmetric.dsa` module.
147
Alex Gaynor645315b2014-06-23 11:55:55 -0700148
149RSA
150~~~
Paul Kehrerac423232014-01-25 14:13:09 -0600151
Alex Stapletonf79c2312014-12-30 12:50:14 +0000152In 0.8 the RSA key interfaces were moved to the
153:mod:`cryptography.hazmat.primitives.asymmetric.rsa` module.
Paul Kehrerf0a48c62014-06-07 17:04:13 -0500154
Alex Stapleton085f3782014-04-01 16:18:17 +0100155
Alex Gaynor645315b2014-06-23 11:55:55 -0700156Elliptic Curve
157~~~~~~~~~~~~~~
158
Paul Kehrer3bc87ab2015-02-12 00:01:53 -0600159In 0.8 the EC key interfaces were moved to the
160:mod:`cryptography.hazmat.primitives.asymmetric.ec` module.
Paul Kehrere025be22014-09-24 11:26:48 -0500161
162
Alex Stapletonc5fffd32014-03-18 15:29:00 +0000163Hash algorithms
Alex Gaynor645315b2014-06-23 11:55:55 -0700164---------------
Paul Kehrere51a2db2014-01-29 11:49:35 -0600165
166.. class:: HashAlgorithm
167
Paul Kehrere51a2db2014-01-29 11:49:35 -0600168 .. attribute:: name
169
170 :type: str
171
Paul Kehrer4c75a8c2014-01-29 12:20:37 -0600172 The standard name for the hash algorithm, for example: ``"sha256"`` or
173 ``"whirlpool"``.
Paul Kehrere51a2db2014-01-29 11:49:35 -0600174
175 .. attribute:: digest_size
176
177 :type: int
178
179 The size of the resulting digest in bytes.
180
181 .. attribute:: block_size
182
183 :type: int
184
185 The internal block size of the hash algorithm in bytes.
186
187
Ayrxa0f98502014-04-15 19:17:03 +0800188.. class:: HashContext
189
190 .. attribute:: algorithm
191
192 A :class:`~cryptography.hazmat.primitives.interfaces.HashAlgorithm` that
193 will be used by this context.
194
195 .. method:: update(data)
196
Alex Gaynore85e3562014-11-22 23:26:30 -0800197 :param bytes data: The data you want to hash.
Ayrxa0f98502014-04-15 19:17:03 +0800198
199 .. method:: finalize()
200
201 :return: The final digest as bytes.
202
203 .. method:: copy()
204
205 :return: A :class:`~cryptography.hazmat.primitives.interfaces.HashContext`
206 that is a copy of the current context.
207
208
Alex Stapletonc5fffd32014-03-18 15:29:00 +0000209Key derivation functions
Alex Gaynor645315b2014-06-23 11:55:55 -0700210------------------------
Alex Gaynorb2774f52014-01-27 11:05:29 -0800211
212.. class:: KeyDerivationFunction
213
Alex Gaynor8454c512014-01-28 07:01:54 -0800214 .. versionadded:: 0.2
215
Alex Gaynorb2774f52014-01-27 11:05:29 -0800216 .. method:: derive(key_material)
217
Alex Gaynore85e3562014-11-22 23:26:30 -0800218 :param bytes key_material: The input key material. Depending on what
Alex Gaynor5484f722014-01-28 05:46:15 -0800219 key derivation function you are using this
Alex Gaynore85e3562014-11-22 23:26:30 -0800220 could be either random bytes, or a user
Alex Gaynorb2774f52014-01-27 11:05:29 -0800221 supplied password.
Alex Gaynor5484f722014-01-28 05:46:15 -0800222 :return: The new key.
Alex Gaynore19e89f2014-01-28 06:58:43 -0800223 :raises cryptography.exceptions.AlreadyFinalized: This is raised when
224 :meth:`derive` or
225 :meth:`verify` is
226 called more than
227 once.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800228
Alex Gaynor5484f722014-01-28 05:46:15 -0800229 This generates and returns a new key from the supplied key material.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800230
231 .. method:: verify(key_material, expected_key)
232
Alex Gaynore85e3562014-11-22 23:26:30 -0800233 :param bytes key_material: The input key material. This is the same as
Alex Gaynorb2774f52014-01-27 11:05:29 -0800234 ``key_material`` in :meth:`derive`.
Alex Gaynore85e3562014-11-22 23:26:30 -0800235 :param bytes expected_key: The expected result of deriving a new key,
Alex Gaynor5484f722014-01-28 05:46:15 -0800236 this is the same as the return value of
237 :meth:`derive`.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800238 :raises cryptography.exceptions.InvalidKey: This is raised when the
239 derived key does not match
240 the expected key.
Alex Gaynore19e89f2014-01-28 06:58:43 -0800241 :raises cryptography.exceptions.AlreadyFinalized: This is raised when
242 :meth:`derive` or
243 :meth:`verify` is
244 called more than
245 once.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800246
Alex Gaynor5484f722014-01-28 05:46:15 -0800247 This checks whether deriving a new key from the supplied
248 ``key_material`` generates the same key as the ``expected_key``, and
249 raises an exception if they do not match. This can be used for
250 something like checking whether a user's password attempt matches the
251 stored derived key.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800252
Ayrxc8121702014-04-15 19:02:05 +0800253
Terry Chiacc5e4452014-10-12 15:35:21 +0800254`Message Authentication Code`_
255------------------------------
Ayrxc8121702014-04-15 19:02:05 +0800256
257.. class:: CMACContext
258
Alex Gaynor7d156882014-10-20 10:40:34 -0700259 :class:`CMACContext` has been deprecated in favor of :class:`MACContext`.
Terry Chiac7c82f32014-10-20 12:15:22 +0800260
Ayrxc8121702014-04-15 19:02:05 +0800261 .. versionadded:: 0.4
262
263 .. method:: update(data)
264
Alex Gaynore85e3562014-11-22 23:26:30 -0800265 :param bytes data: The data you want to authenticate.
Ayrxc8121702014-04-15 19:02:05 +0800266
267 .. method:: finalize()
268
Ayrx7964c172014-04-15 21:50:58 +0800269 :return: The message authentication code.
Ayrxc8121702014-04-15 19:02:05 +0800270
271 .. method:: copy()
272
273 :return: A :class:`~cryptography.hazmat.primitives.interfaces.CMACContext`
274 that is a copy of the current context.
275
Terry Chiacc5e4452014-10-12 15:35:21 +0800276.. class:: MACContext
277
278 .. versionadded:: 0.7
279
280 .. method:: update(data)
281
Alex Gaynore85e3562014-11-22 23:26:30 -0800282 :param bytes data: The data you want to authenticate.
Terry Chiacc5e4452014-10-12 15:35:21 +0800283
284 .. method:: finalize()
285
286 :return: The message authentication code.
287
288 .. method:: copy()
289
Alex Gaynor7d156882014-10-20 10:40:34 -0700290 :return: A
291 :class:`~cryptography.hazmat.primitives.interfaces.MACContext` that
292 is a copy of the current context.
Terry Chiacc5e4452014-10-12 15:35:21 +0800293
Alex Gaynor7d156882014-10-20 10:40:34 -0700294 .. method:: verify(signature)
Terry Chiacc5e4452014-10-12 15:35:21 +0800295
Alex Gaynore85e3562014-11-22 23:26:30 -0800296 :param bytes signature: The signature to verify.
Terry Chiacc5e4452014-10-12 15:35:21 +0800297
298 :raises cryptography.exceptions.InvalidSignature: This is raised when
299 the provided signature does not match the expected signature.
Ayrxc8121702014-04-15 19:02:05 +0800300
Paul Kehrer05c122b2014-11-24 08:41:05 -1000301
Ayrx83cd3f82014-04-15 21:56:32 +0800302.. _`CMAC`: https://en.wikipedia.org/wiki/CMAC