blob: c0ddd79c3cfada128118091b2dc8d7c325b4f7f8 [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
David Reid9ed25e42013-11-07 13:15:27 -080012.. _`Abstract Base Classes`: http://docs.python.org/3.2/library/abc.html
David Reid30722b92013-11-07 13:03:39 -080013
14
David Reid0a394df2013-11-15 16:19:50 -080015Symmetric Ciphers
16~~~~~~~~~~~~~~~~~
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
David Reid0a394df2013-11-15 16:19:50 -080050Cipher Modes
51------------
52
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
106Asymmetric Interfaces
107~~~~~~~~~~~~~~~~~~~~~
108
109.. class:: RSAPrivateKey
110
Paul Kehrer46688b12014-01-26 13:23:13 -0600111 .. versionadded:: 0.2
Paul Kehrer82629f42014-01-26 12:25:02 -0600112
Paul Kehrerac423232014-01-25 14:13:09 -0600113 An `RSA`_ private key.
114
Paul Kehrer0e94fbe2014-01-26 11:47:21 -0600115 .. method:: public_key()
Paul Kehrerac423232014-01-25 14:13:09 -0600116
Paul Kehrer359b9462014-01-26 12:03:05 -0600117 :return: :class:`~cryptography.hazmat.primitives.interfaces.RSAPublicKey`
Paul Kehrerac423232014-01-25 14:13:09 -0600118
119 An RSA public key object corresponding to the values of the private key.
120
121 .. attribute:: modulus
122
Paul Kehrerd527b302014-01-26 11:41:38 -0600123 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600124
Paul Kehrer0e94fbe2014-01-26 11:47:21 -0600125 The public modulus.
Paul Kehrerac423232014-01-25 14:13:09 -0600126
127 .. attribute:: public_exponent
128
129 :type: int
130
Paul Kehrer0e94fbe2014-01-26 11:47:21 -0600131 The public exponent.
Paul Kehrerac423232014-01-25 14:13:09 -0600132
Alex Gaynor2649a692014-02-03 07:14:16 -0800133 .. attribute:: private_exponent
134
135 :type: int
136
137 The private exponent.
138
Alex Stapletonee3e6bf2014-02-02 21:13:48 +0000139 .. attribute:: key_size
Paul Kehrerac423232014-01-25 14:13:09 -0600140
141 :type: int
142
143 The bit length of the modulus.
144
145 .. attribute:: p
146
Paul Kehrerd527b302014-01-26 11:41:38 -0600147 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600148
Alex Gaynor2a918742014-01-26 16:53:44 -0600149 ``p``, one of the two primes composing the :attr:`modulus`.
Paul Kehrerac423232014-01-25 14:13:09 -0600150
151 .. attribute:: q
152
Paul Kehrerd527b302014-01-26 11:41:38 -0600153 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600154
Alex Gaynor2a918742014-01-26 16:53:44 -0600155 ``q``, one of the two primes composing the :attr:`modulus`.
Paul Kehrerac423232014-01-25 14:13:09 -0600156
157 .. attribute:: d
158
Paul Kehrerd527b302014-01-26 11:41:38 -0600159 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600160
Alex Gaynor2649a692014-02-03 07:14:16 -0800161 The private exponent. Alias for :attr:`private_exponent`.
Paul Kehrerac423232014-01-25 14:13:09 -0600162
Paul Kehrer8e9c9842014-02-13 12:23:27 -0600163 .. attribute:: dmp1
164
165 :type: int
166
167 A `Chinese remainder theorem`_ coefficient used to speed up RSA
168 operations. Calculated as: d mod (p-1)
169
170 .. attribute:: dmq1
171
172 :type: int
173
174 A `Chinese remainder theorem`_ coefficient used to speed up RSA
175 operations. Calculated as: d mod (q-1)
176
177 .. attribute:: iqmp
178
179 :type: int
180
181 A `Chinese remainder theorem`_ coefficient used to speed up RSA
182 operations. Calculated as: q\ :sup:`-1` mod p
183
Paul Kehrerac423232014-01-25 14:13:09 -0600184 .. attribute:: n
185
Paul Kehrerd527b302014-01-26 11:41:38 -0600186 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600187
Alex Gaynor2a918742014-01-26 16:53:44 -0600188 The public modulus. Alias for :attr:`modulus`.
Paul Kehrerac423232014-01-25 14:13:09 -0600189
190 .. attribute:: e
191
192 :type: int
193
Alex Gaynor2a918742014-01-26 16:53:44 -0600194 The public exponent. Alias for :attr:`public_exponent`.
Paul Kehrerac423232014-01-25 14:13:09 -0600195
196
197.. class:: RSAPublicKey
198
Paul Kehrer46688b12014-01-26 13:23:13 -0600199 .. versionadded:: 0.2
Paul Kehrer82629f42014-01-26 12:25:02 -0600200
Paul Kehrerac423232014-01-25 14:13:09 -0600201 An `RSA`_ public key.
202
203 .. attribute:: modulus
204
Paul Kehrerd527b302014-01-26 11:41:38 -0600205 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600206
Paul Kehrer0e94fbe2014-01-26 11:47:21 -0600207 The public modulus.
Paul Kehrerac423232014-01-25 14:13:09 -0600208
Alex Stapletonee3e6bf2014-02-02 21:13:48 +0000209 .. attribute:: key_size
Paul Kehrerac423232014-01-25 14:13:09 -0600210
211 :type: int
212
213 The bit length of the modulus.
214
215 .. attribute:: public_exponent
216
217 :type: int
218
Paul Kehrer0e94fbe2014-01-26 11:47:21 -0600219 The public exponent.
Paul Kehrerac423232014-01-25 14:13:09 -0600220
221 .. attribute:: n
222
Paul Kehrerd527b302014-01-26 11:41:38 -0600223 :type: int
Paul Kehrerac423232014-01-25 14:13:09 -0600224
Alex Gaynor2a918742014-01-26 16:53:44 -0600225 The public modulus. Alias for :attr:`modulus`.
Paul Kehrerac423232014-01-25 14:13:09 -0600226
227 .. attribute:: e
228
229 :type: int
230
Alex Gaynor2a918742014-01-26 16:53:44 -0600231 The public exponent. Alias for :attr:`public_exponent`.
232
Paul Kehrerac423232014-01-25 14:13:09 -0600233
Paul Kehrere0f0f342014-02-17 19:20:51 -0600234.. class:: AsymmetricSignContext
235
236 .. versionadded:: 0.2
237
238 .. method:: update(data)
239
240 :param bytes data: The data you wish to pass into the context.
241
242 .. method:: finalize()
243
244 :return bytes signature: The signature.
245
246
247.. class:: AsymmetricVerifyContext
248
249 .. versionadded:: 0.2
250
251 .. method:: update(data)
252
253 :param bytes data: The data you wish to pass into the context.
254
255 .. method:: finalize()
256
257 :raises cryptography.exceptions.InvalidSignature: If signature does not
258 validate.
259
260
261.. class:: AsymmetricPadding
262
263 A named asymmetric padding.
264
265 .. attribute:: name
266
Paul Kehrere51a2db2014-01-29 11:49:35 -0600267Hash Algorithms
268~~~~~~~~~~~~~~~
269
270.. class:: HashAlgorithm
271
Paul Kehrere51a2db2014-01-29 11:49:35 -0600272 .. attribute:: name
273
274 :type: str
275
Paul Kehrer4c75a8c2014-01-29 12:20:37 -0600276 The standard name for the hash algorithm, for example: ``"sha256"`` or
277 ``"whirlpool"``.
Paul Kehrere51a2db2014-01-29 11:49:35 -0600278
279 .. attribute:: digest_size
280
281 :type: int
282
283 The size of the resulting digest in bytes.
284
285 .. attribute:: block_size
286
287 :type: int
288
289 The internal block size of the hash algorithm in bytes.
290
291
Alex Gaynorb2774f52014-01-27 11:05:29 -0800292Key Derivation Functions
293~~~~~~~~~~~~~~~~~~~~~~~~
294
295.. class:: KeyDerivationFunction
296
Alex Gaynor8454c512014-01-28 07:01:54 -0800297 .. versionadded:: 0.2
298
Alex Gaynorb2774f52014-01-27 11:05:29 -0800299 .. method:: derive(key_material)
300
Alex Gaynor5484f722014-01-28 05:46:15 -0800301 :param key_material bytes: The input key material. Depending on what
302 key derivation function you are using this
303 could be either random material, or a user
Alex Gaynorb2774f52014-01-27 11:05:29 -0800304 supplied password.
Alex Gaynor5484f722014-01-28 05:46:15 -0800305 :return: The new key.
Alex Gaynore19e89f2014-01-28 06:58:43 -0800306 :raises cryptography.exceptions.AlreadyFinalized: This is raised when
307 :meth:`derive` or
308 :meth:`verify` is
309 called more than
310 once.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800311
Alex Gaynor5484f722014-01-28 05:46:15 -0800312 This generates and returns a new key from the supplied key material.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800313
314 .. method:: verify(key_material, expected_key)
315
Alex Gaynor5484f722014-01-28 05:46:15 -0800316 :param key_material bytes: The input key material. This is the same as
Alex Gaynorb2774f52014-01-27 11:05:29 -0800317 ``key_material`` in :meth:`derive`.
Alex Gaynor5484f722014-01-28 05:46:15 -0800318 :param expected_key bytes: The expected result of deriving a new key,
319 this is the same as the return value of
320 :meth:`derive`.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800321 :raises cryptography.exceptions.InvalidKey: This is raised when the
322 derived key does not match
323 the expected key.
Alex Gaynore19e89f2014-01-28 06:58:43 -0800324 :raises cryptography.exceptions.AlreadyFinalized: This is raised when
325 :meth:`derive` or
326 :meth:`verify` is
327 called more than
328 once.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800329
Alex Gaynor5484f722014-01-28 05:46:15 -0800330 This checks whether deriving a new key from the supplied
331 ``key_material`` generates the same key as the ``expected_key``, and
332 raises an exception if they do not match. This can be used for
333 something like checking whether a user's password attempt matches the
334 stored derived key.
Alex Gaynorb2774f52014-01-27 11:05:29 -0800335
Paul Kehrer8e9c9842014-02-13 12:23:27 -0600336.. _`RSA`: https://en.wikipedia.org/wiki/RSA_(cryptosystem)
337.. _`Chinese remainder theorem`: https://en.wikipedia.org/wiki/Chinese_remainder_theorem