1# -*- coding: utf-8 -*-
2#
3# Cipher/blockalgo.py
4#
5# ===================================================================
6# The contents of this file are dedicated to the public domain. To
7# the extent that dedication to the public domain is not available,
8# everyone is granted a worldwide, perpetual, royalty-free,
9# non-exclusive license to exercise all rights associated with the
10# contents of this file for any purpose whatsoever.
11# No rights are reserved.
12#
13# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
17# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20# SOFTWARE.
21# ===================================================================
22"""Module with definitions common to all block ciphers."""
23
24import sys
25if sys.version_info[0] == 2 and sys.version_info[1] == 1:
26 from Crypto.Util.py21compat import *
27
28from Crypto.Util.py3compat import *
29
30from binascii import unhexlify
31
32from Crypto.Util import Counter
33from Crypto.Util.strxor import strxor
34from Crypto.Util.number import long_to_bytes, bytes_to_long
35import Crypto.Util.Counter
36from Crypto.Hash import CMAC
37from Crypto.Hash.CMAC import _SmoothMAC
38from Crypto.Protocol.KDF import _S2V
39
40from Crypto.Util import _galois
41
42#: *Electronic Code Book (ECB)*.
43#: This is the simplest encryption mode. Each of the plaintext blocks
44#: is directly encrypted into a ciphertext block, independently of
45#: any other block. This mode exposes frequency of symbols
46#: in your plaintext. Other modes (e.g. *CBC*) should be used instead.
47#:
48#: See `NIST SP800-38A`_ , Section 6.1 .
49#:
50#: .. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
51MODE_ECB = 1
52
53#: *Cipher-Block Chaining (CBC)*. Each of the ciphertext blocks depends
54#: on the current and all previous plaintext blocks. An Initialization Vector
55#: (*IV*) is required.
56#:
57#: The *IV* is a data block to be transmitted to the receiver.
58#: The *IV* can be made public, but it must be authenticated by the receiver
59#: and it should be picked randomly.
60#:
61#: See `NIST SP800-38A`_ , Section 6.2 .
62#:
63#: .. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
64MODE_CBC = 2
65
66#: *Cipher FeedBack (CFB)*. This mode is similar to CBC, but it transforms
67#: the underlying block cipher into a stream cipher. Plaintext and ciphertext
68#: are processed in *segments* of **s** bits. The mode is therefore sometimes
69#: labelled **s**-bit CFB. An Initialization Vector (*IV*) is required.
70#:
71#: When encrypting, each ciphertext segment contributes to the encryption of
72#: the next plaintext segment.
73#:
74#: This *IV* is a data block to be transmitted to the receiver.
75#: The *IV* can be made public, but it should be picked randomly.
76#: Reusing the same *IV* for encryptions done with the same key lead to
77#: catastrophic cryptographic failures.
78#:
79#: See `NIST SP800-38A`_ , Section 6.3 .
80#:
81#: .. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
82MODE_CFB = 3
83
84#: This mode should not be used.
85MODE_PGP = 4
86
87#: *Output FeedBack (OFB)*. This mode is very similar to CBC, but it
88#: transforms the underlying block cipher into a stream cipher.
89#: The keystream is the iterated block encryption of an
90#: Initialization Vector (*IV*).
91#:
92#: The *IV* is a data block to be transmitted to the receiver.
93#: The *IV* can be made public, but it should be picked randomly.
94#:
95#: Reusing the same *IV* for encryptions done with the same key lead to
96#: catastrophic cryptograhic failures.
97#:
98#: See `NIST SP800-38A`_ , Section 6.4 .
99#:
100#: .. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
101MODE_OFB = 5
102
103#: *CounTeR (CTR)*. This mode is very similar to ECB, in that
104#: encryption of one block is done independently of all other blocks.
105#: Unlike ECB, the block *position* contributes to the encryption and no
106#: information leaks about symbol frequency.
107#:
108#: Each message block is associated to a *counter* which must be unique
109#: across all messages that get encrypted with the same key (not just within
110#: the same message). The counter is as big as the block size.
111#:
112#: Counters can be generated in several ways. The most straightword one is
113#: to choose an *initial counter block* (which can be made public, similarly
114#: to the *IV* for the other modes) and increment its lowest **m** bits by
115#: one (modulo *2^m*) for each block. In most cases, **m** is chosen to be half
116#: the block size.
117#:
118#: Reusing the same *initial counter block* for encryptions done with the same
119#: key lead to catastrophic cryptograhic failures.
120#:
121#: See `NIST SP800-38A`_ , Section 6.5 (for the mode) and Appendix B (for how
122#: to manage the *initial counter block*).
123#:
124#: .. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
125MODE_CTR = 6
126
127#: *OpenPGP CFB*. This mode is a variant of CFB, and it is only used in PGP and
128#: OpenPGP_ applications. An Initialization Vector (*IV*) is required.
129#:
130#: Unlike CFB, the IV is not transmitted to the receiver.
131#: Instead, the *encrypted* IV is.
132#: The IV is a random data block. Two of its bytes are duplicated to act
133#: as a checksum for the correctness of the key. The encrypted IV is
134#: therefore 2 bytes longer than the clean IV.
135#:
136#: .. _OpenPGP: http://tools.ietf.org/html/rfc4880
137MODE_OPENPGP = 7
138
139#: *Counter with CBC-MAC (CCM)*. This is an Authenticated Encryption with
140#: Associated Data (`AEAD`_) mode. It provides both confidentiality and
141#: authenticity.
142#: The header of the message may be left in the clear, if needed, and it will
143#: still be subject to authentication. The decryption step tells the receiver
144#: if the message comes from a source that really knowns the secret key.
145#: Additionally, decryption detects if any part of the message - including the
146#: header - has been modified or corrupted.
147#:
148#: This mode requires a nonce. The nonce shall never repeat for two
149#: different messages encrypted with the same key, but it does not need
150#: to be random.
151#: Note that there is a trade-off between the size of the nonce and the
152#: maximum size of a single message you can encrypt.
153#:
154#: It is important to use a large nonce if the key is reused across several
155#: messages and the nonce is chosen randomly.
156#:
157#: It is acceptable to us a short nonce if the key is only used a few times or
158#: if the nonce is taken from a counter.
159#:
160#: The following table shows the trade-off when the nonce is chosen at
161#: random. The column on the left shows how many messages it takes
162#: for the keystream to repeat **on average**. In practice, you will want to
163#: stop using the key way before that.
164#:
165#: +--------------------+---------------+-------------------+
166#: | Avg. # of messages | nonce | Max. message |
167#: | before keystream | size | size |
168#: | repeats | (bytes) | (bytes) |
169#: +====================+===============+===================+
170#: | 2**52 | 13 | 64K |
171#: +--------------------+---------------+-------------------+
172#: | 2**48 | 12 | 16M |
173#: +--------------------+---------------+-------------------+
174#: | 2**44 | 11 | 4G |
175#: +--------------------+---------------+-------------------+
176#: | 2**40 | 10 | 1T |
177#: +--------------------+---------------+-------------------+
178#: | 2**36 | 9 | 64P |
179#: +--------------------+---------------+-------------------+
180#: | 2**32 | 8 | 16E |
181#: +--------------------+---------------+-------------------+
182#:
183#: This mode is only available for ciphers that operate on 128 bits blocks
184#: (e.g. AES but not TDES).
185#:
186#: See `NIST SP800-38C`_ or RFC3610_ .
187#:
188#: .. _`NIST SP800-38C`: http://csrc.nist.gov/publications/nistpubs/800-38C/SP800-38C.pdf
189#: .. _RFC3610: https://tools.ietf.org/html/rfc3610
190#: .. _AEAD: http://blog.cryptographyengineering.com/2012/05/how-to-choose-authenticated-encryption.html
191MODE_CCM = 8
192
193#: *EAX*. This is an Authenticated Encryption with Associated Data
194#: (`AEAD`_) mode. It provides both confidentiality and authenticity.
195#:
196#: The header of the message may be left in the clear, if needed, and it will
197#: still be subject to authentication.
198#:
199#: The decryption step tells the receiver if the message comes from a source
200#: that really knowns the secret key.
201#: Additionally, decryption detects if any part of the message - including the
202#: header - has been modified or corrupted.
203#:
204#: This mode requires a nonce. The nonce shall never repeat for two
205#: different messages encrypted with the same key, but it does not need to
206#: be random.
207#
208#: This mode is only available for ciphers that operate on 64 or
209#: 128 bits blocks.
210#:
211#: There are no official standards defining EAX. The implementation is based on
212#: `a proposal`__ that was presented to NIST.
213#:
214#: .. _AEAD: http://blog.cryptographyengineering.com/2012/05/how-to-choose-authenticated-encryption.html
215#: .. __: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/eax/eax-spec.pdf
216MODE_EAX = 9
217
218#: *Synthetic Initialization Vector*. This is an Authenticated Encryption with
219#: Associated Data (`AEAD`_) mode. It provides both confidentiality and
220#: authenticity.
221#: The header of the message may be left in the clear, if needed, and it will
222#: still be subject to authentication. The decryption step tells the receiver
223#: if the message comes from a source that really knowns the secret key.
224#: Additionally, decryption detects if any part of the message - including the
225#: header - has been modified or corrupted.
226#:
227#: If the data being encrypted is completely unpredictable to an adversary
228#: (e.g. a secret key, for key wrapping purposes) a nonce is not strictly
229#: required.
230#:
231#: Otherwise, a nonce has to be provided; the nonce shall never repeat
232#: for two different messages encrypted with the same key, but it does not
233#: need to be random.
234#:
235#: Unlike other AEAD modes such as CCM, EAX or GCM, accidental reuse of a
236#: nonce is not catastrophic for the confidentiality of the message. The only
237#: effect is that an attacker can tell when the same plaintext (and same
238#: associated data) is protected with the same key.
239#:
240#: The length of the MAC is fixed to the block size of the underlying cipher.
241#: The key size is twice the length of the key of the underlying cipher.
242#:
243#: This mode is only available for AES ciphers.
244#:
245#: +--------------------+---------------+-------------------+
246#: | Cipher | SIV MAC size | SIV key length |
247#: | | (bytes) | (bytes) |
248#: +====================+===============+===================+
249#: | AES-128 | 16 | 32 |
250#: +--------------------+---------------+-------------------+
251#: | AES-192 | 16 | 48 |
252#: +--------------------+---------------+-------------------+
253#: | AES-256 | 16 | 64 |
254#: +--------------------+---------------+-------------------+
255#:
256#: See `RFC5297`_ and the `original paper`__.
257#:
258#: .. _RFC5297: https://tools.ietf.org/html/rfc5297
259#: .. _AEAD: http://blog.cryptographyengineering.com/2012/05/how-to-choose-authenticated-encryption.html
260#: .. __: http://www.cs.ucdavis.edu/~rogaway/papers/keywrap.pdf
261MODE_SIV = 10
262
263#: *Galois/Counter Mode (GCM)*. This is an Authenticated Encryption with
264#: Associated Data (`AEAD`_) mode. It provides both confidentiality and
265#: authenticity.
266#: The header of the message may be left in the clear, if needed, and it will
267#: still be subject to authentication. The decryption step tells the receiver
268#: if the message comes from a source that really knowns the secret key.
269#: Additionally, decryption detects if any part of the message - including the
270#: header - has been modified or corrupted.
271#:
272#: This mode requires a nonce. The nonce shall never repeat for two
273#: different messages encrypted with the same key, but it does not need to
274#: be random.
275#:
276#: This mode is only available for ciphers that operate on 128 bits blocks
277#: (e.g. AES but not TDES).
278#:
279#: See `NIST SP800-38D`_ .
280#:
281#: .. _`NIST SP800-38D`: http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf
282#: .. _AEAD: http://blog.cryptographyengineering.com/2012/05/how-to-choose-authenticated-encryption.html
283MODE_GCM = 11
284
285
286def _getParameter(name, index, args, kwargs, default=None):
287 """Find a parameter in tuple and dictionary arguments a function receives"""
288
289 param = kwargs.get(name)
290 if len(args) > index:
291 if param:
292 raise TypeError("Parameter '%s' is specified twice" % name)
293 param = args[index]
294 return param or default
295
296
297class _CBCMAC(_SmoothMAC):
298
299 def __init__(self, key, ciphermod):
300 _SmoothMAC.__init__(self, ciphermod.block_size, None, 0)
301 self._key = key
302 self._factory = ciphermod
303
304 def _ignite(self, data):
305 if self._mac:
306 raise TypeError("_ignite() cannot be called twice")
307
308 self._buffer.insert(0, data)
309 self._buffer_len += len(data)
310 self._mac = self._factory.new(self._key, MODE_CBC, bchr(0) * 16)
311 self.update(b(""))
312
313 def _update(self, block_data):
314 self._t = self._mac.encrypt(block_data)[-16:]
315
316 def _digest(self, left_data):
317 return self._t
318
319
320class _GHASH(_SmoothMAC):
321 """GHASH function defined in NIST SP 800-38D, Algorithm 2.
322
323 If X_1, X_2, .. X_m are the blocks of input data, the function
324 computes:
325
326 X_1*H^{m} + X_2*H^{m-1} + ... + X_m*H
327
328 in the Galois field GF(2^256) using the reducing polynomial
329 (x^128 + x^7 + x^2 + x + 1).
330 """
331
332 def __init__(self, hash_subkey, block_size):
333 _SmoothMAC.__init__(self, block_size, None, 0)
334 self._hash_subkey = _galois.ghash_expand(hash_subkey)
335 self._last_y = bchr(0) * 16
336 self._mac = _galois.ghash
337
338 def copy(self):
339 clone = _GHASH(self._hash_subkey, self._bs)
340 _SmoothMAC._deep_copy(self, clone)
341 clone._last_y = self._last_y
342 return clone
343
344 def _update(self, block_data):
345 self._last_y = _galois.ghash(block_data, self._last_y,
346 self._hash_subkey)
347
348 def _digest(self, left_data):
349 return self._last_y
350
351
352class BlockAlgo:
353 """Class modelling an abstract block cipher."""
354
355 def __init__(self, factory, key, *args, **kwargs):
356 self.mode = _getParameter('mode', 0, args, kwargs, default=MODE_ECB)
357 self.block_size = factory.block_size
358 self._factory = factory
359 self._tag = None
360
361 if self.mode == MODE_CCM:
362 if self.block_size != 16:
363 raise TypeError("CCM mode is only available for ciphers that operate on 128 bits blocks")
364
365 self._mac_len = kwargs.get('mac_len', 16) # t
366 if self._mac_len not in (4, 6, 8, 10, 12, 14, 16):
367 raise ValueError("Parameter 'mac_len' must be even and in the range 4..16")
368
369 self.nonce = _getParameter('nonce', 1, args, kwargs) # N
370 if not (self.nonce and 7 <= len(self.nonce) <= 13):
371 raise ValueError("Length of parameter 'nonce' must be"
372 " in the range 7..13 bytes")
373
374 self._key = key
375 self._msg_len = kwargs.get('msg_len', None) # p
376 self._assoc_len = kwargs.get('assoc_len', None) # a
377
378 self._cipherMAC = _CBCMAC(key, factory)
379 self._done_assoc_data = False # True when all associated data
380 # has been processed
381
382 # Allowed transitions after initialization
383 self._next = [self.update, self.encrypt, self.decrypt,
384 self.digest, self.verify]
385
386 # Try to start CCM
387 self._start_ccm()
388
389 elif self.mode == MODE_OPENPGP:
390 self._start_PGP(factory, key, *args, **kwargs)
391 elif self.mode == MODE_EAX:
392 self._start_eax(factory, key, *args, **kwargs)
393 elif self.mode == MODE_SIV:
394 self._start_siv(factory, key, *args, **kwargs)
395 elif self.mode == MODE_GCM:
396 self._start_gcm(factory, key, *args, **kwargs)
397 else:
398 self._cipher = factory.new(key, *args, **kwargs)
399 self.IV = self._cipher.IV
400
401 def _start_gcm(self, factory, key, *args, **kwargs):
402
403 if self.block_size != 16:
404 raise TypeError("GCM mode is only available for ciphers that operate on 128 bits blocks")
405
406 self.nonce = _getParameter('nonce', 1, args, kwargs)
407 if not self.nonce:
408 raise TypeError("MODE_GCM requires a nonce")
409
410 self._mac_len = kwargs.get('mac_len', 16)
411 if not (self._mac_len and 4 <= self._mac_len <= 16):
412 raise ValueError("Parameter 'mac_len' must not be larger than 16 bytes")
413
414 # Allowed transitions after initialization
415 self._next = [self.update, self.encrypt, self.decrypt,
416 self.digest, self.verify]
417
418 self._done_assoc_data = False
419
420 # Length of the ciphertext or plaintext
421 self._msg_len = 0
422
423 # Step 1 in SP800-38D, Algorithm 4 (encryption) - Compute H
424 # See also Algorithm 5 (decryption)
425 hash_subkey = factory.new(key).encrypt(bchr(0) * 16)
426
427 # Step 2 - Compute J0 (integer, not byte string!)
428 if len(self.nonce) == 12:
429 self._j0 = bytes_to_long(self.nonce + b("\x00\x00\x00\x01"))
430 else:
431 fill = (16 - (len(self.nonce) % 16)) % 16 + 8
432 ghash_in = (self.nonce +
433 bchr(0) * fill +
434 long_to_bytes(8 * len(self.nonce), 8))
435
436 mac = _GHASH(hash_subkey, factory.block_size)
437 mac.update(ghash_in)
438 self._j0 = bytes_to_long(mac.digest())
439
440 # Step 3 - Prepare GCTR cipher for encryption/decryption
441 ctr = Counter.new(128, initial_value=self._j0 + 1,
442 allow_wraparound=True)
443 self._cipher = self._factory.new(key, MODE_CTR, counter=ctr)
444
445 # Step 5 - Bootstrat GHASH
446 self._cipherMAC = _GHASH(hash_subkey, factory.block_size)
447
448 # Step 6 - Prepare GCTR cipher for GMAC
449 ctr = Counter.new(128, initial_value=self._j0, allow_wraparound=True)
450 self._tag_cipher = self._factory.new(key, MODE_CTR, counter=ctr)
451
452 def _start_siv(self, factory, key, *args, **kwargs):
453
454 subkey_size, rem = divmod(len(key), 2)
455 if rem:
456 raise ValueError("MODE_SIV requires a key twice as long as for the underlying cipher")
457
458 # IV is optional
459 self.nonce = _getParameter('nonce', 1, args, kwargs)
460
461 self._cipherMAC = _S2V(key[:subkey_size], ciphermod=factory)
462 self._subkey_ctr = key[subkey_size:]
463 self._mac_len = factory.block_size
464
465 self._cipherMAC = self._cipherMAC
466
467 # Allowed transitions after initialization
468 self._next = [self.update, self.encrypt, self.decrypt,
469 self.digest, self.verify]
470
471 def _siv_ctr_cipher(self, tag):
472 """Create a new CTR cipher from the MAC in SIV mode"""
473
474 tag_int = bytes_to_long(tag)
475 init_counter = tag_int ^ (tag_int & 0x8000000080000000)
476 ctr = Counter.new(self._factory.block_size * 8,
477 initial_value=init_counter,
478 allow_wraparound=True)
479
480 return self._factory.new(self._subkey_ctr, MODE_CTR, counter=ctr)
481
482 def _start_eax(self, factory, key, *args, **kwargs):
483
484 self.nonce = _getParameter('nonce', 1, args, kwargs)
485 if not self.nonce:
486 raise TypeError("MODE_EAX requires a nonce")
487
488 # Allowed transitions after initialization
489 self._next = [self.update, self.encrypt, self.decrypt,
490 self.digest, self.verify]
491
492 self._mac_len = kwargs.get('mac_len', self.block_size)
493 if not (self._mac_len and 4 <= self._mac_len <= self.block_size):
494 raise ValueError("Parameter 'mac_len' must not be larger than %d"
495 % self.block_size)
496
497 self._omac = [
498 CMAC.new(key, bchr(0) * (self.block_size - 1) + bchr(i),
499 ciphermod=factory)
500 for i in range(0, 3)
501 ]
502
503 # Compute MAC of nonce
504 self._omac[0].update(self.nonce)
505
506 self._cipherMAC = self._omac[1]
507
508 # MAC of the nonce is also the initial counter for CTR encryption
509 counter_int = bytes_to_long(self._omac[0].digest())
510 counter_obj = Crypto.Util.Counter.new(
511 self.block_size * 8,
512 initial_value=counter_int,
513 allow_wraparound=True)
514 self._cipher = factory.new(key, MODE_CTR, counter=counter_obj)
515
516 def _start_PGP(self, factory, key, *args, **kwargs):
517 # OPENPGP mode. For details, see 13.9 in RCC4880.
518 #
519 # A few members are specifically created for this mode:
520 # - _encrypted_iv, set in this constructor
521 # - _done_first_block, set to True after the first encryption
522 # - _done_last_block, set to True after a partial block is processed
523
524 self._done_first_block = False
525 self._done_last_block = False
526 self.IV = _getParameter('IV', 1, args, kwargs)
527 if self.IV is None:
528 # TODO: Decide whether 'IV' or 'iv' should be used going forward,
529 # and deprecate the other. 'IV' is consistent with the rest of
530 # PyCrypto, but 'iv' is more common in Python generally. For now,
531 # we'll support both here. When in doubt, use a positional
532 # parameter for now.
533 self.IV = _getParameter('iv', 1, args, kwargs)
534 if not self.IV:
535 raise ValueError("MODE_OPENPGP requires an IV")
536
537 # Instantiate a temporary cipher to process the IV
538 IV_cipher = factory.new(
539 key,
540 MODE_CFB,
541 b('\x00') * self.block_size, # IV for CFB
542 segment_size=self.block_size * 8)
543
544 # The cipher will be used for...
545 if len(self.IV) == self.block_size:
546 # ... encryption
547 self._encrypted_IV = IV_cipher.encrypt(
548 self.IV + self.IV[-2:] + # Plaintext
549 b('\x00') * (self.block_size - 2) # Padding
550 )[:self.block_size + 2]
551 elif len(self.IV) == self.block_size + 2:
552 # ... decryption
553 self._encrypted_IV = self.IV
554 self.IV = IV_cipher.decrypt(
555 self.IV + # Ciphertext
556 b('\x00') * (self.block_size - 2) # Padding
557 )[:self.block_size + 2]
558 if self.IV[-2:] != self.IV[-4:-2]:
559 raise ValueError("Failed integrity check for OPENPGP IV")
560 self.IV = self.IV[:-2]
561 else:
562 raise ValueError("Length of IV must be %d or %d bytes for MODE_OPENPGP"
563 % (self.block_size, self.block_size+2))
564
565 # Instantiate the cipher for the real PGP data
566 self._cipher = factory.new(
567 key,
568 MODE_CFB,
569 self._encrypted_IV[-self.block_size:],
570 segment_size=self.block_size * 8
571 )
572
573 def _start_ccm(self, assoc_len=None, msg_len=None):
574 # CCM mode. This method creates the 2 ciphers used for the MAC
575 # (self._cipherMAC) and for the encryption/decryption (self._cipher).
576 #
577 # Member _assoc_buffer may already contain user data that needs to be
578 # authenticated.
579
580 if self._cipherMAC.can_reduce():
581 # Already started
582 return
583 if assoc_len is not None:
584 self._assoc_len = assoc_len
585 if msg_len is not None:
586 self._msg_len = msg_len
587 if None in (self._assoc_len, self._msg_len):
588 return
589
590 # q is the length of Q, the encoding of the message length
591 q = 15 - len(self.nonce)
592
593 ## Compute B_0
594 flags = (
595 64 * (self._assoc_len > 0) +
596 8 * divmod(self._mac_len - 2, 2)[0] +
597 (q - 1)
598 )
599 b_0 = bchr(flags) + self.nonce + long_to_bytes(self._msg_len, q)
600
601 # Start CBC MAC with zero IV
602 assoc_len_encoded = b('')
603 if self._assoc_len > 0:
604 if self._assoc_len < (2 ** 16 - 2 ** 8):
605 enc_size = 2
606 elif self._assoc_len < (2 ** 32):
607 assoc_len_encoded = b('\xFF\xFE')
608 enc_size = 4
609 else:
610 assoc_len_encoded = b('\xFF\xFF')
611 enc_size = 8
612 assoc_len_encoded += long_to_bytes(self._assoc_len, enc_size)
613 self._cipherMAC._ignite(b_0 + assoc_len_encoded)
614
615 # Start CTR cipher
616 prefix = bchr(q - 1) + self.nonce
617 ctr = Counter.new(128 - len(prefix) * 8, prefix, initial_value=0)
618 self._cipher = self._factory.new(self._key, MODE_CTR, counter=ctr)
619 # Will XOR against CBC MAC
620 self._s_0 = self._cipher.encrypt(bchr(0) * 16)
621
622 def update(self, assoc_data):
623 """Protect associated data
624
625 When using an AEAD mode like CCM, EAX, GCM or SIV, and
626 if there is any associated data, the caller has to invoke
627 this function one or more times, before using
628 ``decrypt`` or ``encrypt``.
629
630 By *associated data* it is meant any data (e.g. packet headers) that
631 will not be encrypted and will be transmitted in the clear.
632 However, the receiver is still able to detect any modification to it.
633 In CCM and GCM, the *associated data* is also called
634 *additional authenticated data* (AAD).
635 In EAX, the *associated data* is called *header*.
636
637 If there is no associated data, this method must not be called.
638
639 The caller may split associated data in segments of any size, and
640 invoke this method multiple times, each time with the next segment.
641
642 :Parameters:
643 assoc_data : byte string
644 A piece of associated data. There are no restrictions on its size.
645 """
646
647 if self.mode not in (MODE_CCM, MODE_EAX, MODE_SIV, MODE_GCM):
648 raise TypeError("update() not supported by this mode of operation")
649
650 if self.update not in self._next:
651 raise TypeError("update() can only be called immediately after initialization")
652
653 self._next = [self.update, self.encrypt, self.decrypt,
654 self.digest, self.verify]
655
656 return self._cipherMAC.update(assoc_data)
657
658 def encrypt(self, plaintext):
659 """Encrypt data with the key and the parameters set at initialization.
660
661 A cipher object is stateful: once you have encrypted a message
662 you cannot encrypt (or decrypt) another message using the same
663 object.
664
665 For `MODE_SIV` (always) and `MODE_CCM` (when ``msg_len`` was not
666 passed at initialization), this method can be called only **once**.
667
668 For all other modes, the data to encrypt can be broken up in two or
669 more pieces and `encrypt` can be called multiple times.
670
671 That is, the statement:
672
673 >>> c.encrypt(a) + c.encrypt(b)
674
675 is equivalent to:
676
677 >>> c.encrypt(a+b)
678
679 That also means that you cannot reuse an object for encrypting
680 or decrypting other data with the same key.
681
682 This function does not add any padding to the plaintext.
683
684 - For `MODE_ECB` and `MODE_CBC`, *plaintext* length (in bytes) must be
685 a multiple of *block_size*.
686
687 - For `MODE_CFB`, *plaintext* length (in bytes) must be a multiple
688 of *segment_size*/8.
689
690 - For `MODE_OFB`, `MODE_CTR` and all AEAD modes
691 *plaintext* can be of any length.
692
693 - For `MODE_OPENPGP`, *plaintext* must be a multiple of *block_size*,
694 unless it is the last chunk of the message.
695
696 :Parameters:
697 plaintext : byte string
698 The piece of data to encrypt.
699 :Return:
700 the encrypted data, as a byte string. It is as long as
701 *plaintext* with one exception: when encrypting the first message
702 chunk with `MODE_OPENPGP`, the encypted IV is prepended to the
703 returned ciphertext.
704 """
705
706 if self.mode == MODE_OPENPGP:
707 padding_length = (self.block_size - len(plaintext) % self.block_size) % self.block_size
708 if padding_length > 0:
709 # CFB mode requires ciphertext to have length multiple
710 # of block size,
711 # but PGP mode allows the last block to be shorter
712 if self._done_last_block:
713 raise ValueError("Only the last chunk is allowed to have length not multiple of %d bytes",
714 self.block_size)
715 self._done_last_block = True
716 padded = plaintext + b('\x00') * padding_length
717 res = self._cipher.encrypt(padded)[:len(plaintext)]
718 else:
719 res = self._cipher.encrypt(plaintext)
720 if not self._done_first_block:
721 res = self._encrypted_IV + res
722 self._done_first_block = True
723 return res
724
725 if self.mode in (MODE_CCM, MODE_EAX, MODE_SIV, MODE_GCM):
726 if self.encrypt not in self._next:
727 raise TypeError("encrypt() can only be called after initialization or an update()")
728 self._next = [self.encrypt, self.digest]
729
730 if self.mode == MODE_CCM:
731 if self._assoc_len is None:
732 self._start_ccm(assoc_len=self._cipherMAC.get_len())
733 if self._msg_len is None:
734 self._start_ccm(msg_len=len(plaintext))
735 self._next = [self.digest]
736 if not self._done_assoc_data:
737 self._cipherMAC.zero_pad()
738 self._done_assoc_data = True
739
740 self._cipherMAC.update(plaintext)
741
742 if self.mode == MODE_SIV:
743 self._next = [self.digest]
744
745 if self.nonce:
746 self._cipherMAC.update(self.nonce)
747
748 self._cipherMAC.update(plaintext)
749 self._cipher = self._siv_ctr_cipher(self._cipherMAC.derive())
750
751 ct = self._cipher.encrypt(plaintext)
752
753 if self.mode == MODE_EAX:
754 self._omac[2].update(ct)
755
756 if self.mode == MODE_GCM:
757 if not self._done_assoc_data:
758 self._cipherMAC.zero_pad()
759 self._done_assoc_data = True
760 self._cipherMAC.update(ct)
761 self._msg_len += len(plaintext)
762
763 return ct
764
765 def decrypt(self, ciphertext):
766 """Decrypt data with the key and the parameters set at initialization.
767
768 A cipher object is stateful: once you have decrypted a message
769 you cannot decrypt (or encrypt) another message with the same
770 object.
771
772 For `MODE_SIV` (always) and `MODE_CCM` (when ``msg_len`` was not
773 passed at initialization), this method can be called only **once**.
774
775 For all other modes, the data to decrypt can be broken up in two or
776 more pieces and `decrypt` can be called multiple times.
777
778 That is, the statement:
779
780 >>> c.decrypt(a) + c.decrypt(b)
781
782 is equivalent to:
783
784 >>> c.decrypt(a+b)
785
786 That also means that you cannot reuse an object for encrypting
787 or decrypting other data with the same key.
788
789 This function does not remove any padding from the plaintext.
790
791 - For `MODE_ECB` and `MODE_CBC`, *ciphertext* length (in bytes) must
792 be a multiple of *block_size*.
793
794 - For `MODE_CFB`, *ciphertext* length (in bytes) must be a multiple
795 of *segment_size*/8.
796
797 - For `MODE_OFB`, `MODE_CTR` and all AEAD modes
798 *ciphertext* can be of any length.
799
800 - For `MODE_OPENPGP`, *plaintext* must be a multiple of *block_size*,
801 unless it is the last chunk of the message.
802
803 - For `MODE_SIV`, *ciphertext* can be of any length, but it must also
804 include the MAC (concatenated at the end).
805
806 :Parameters:
807 ciphertext : byte string
808 The piece of data to decrypt (plus the MAC, for `MODE_SIV` only).
809
810 :Return: the decrypted data (byte string).
811 """
812
813 if self.mode == MODE_OPENPGP:
814 padding_length = (self.block_size - len(ciphertext) % self.block_size) % self.block_size
815 if padding_length > 0:
816 # CFB mode requires ciphertext to have length multiple
817 # of block size,
818 # but PGP mode allows the last block to be shorter
819 if self._done_last_block:
820 raise ValueError("Only the last chunk is allowed to have length not multiple of %d bytes",
821 self.block_size)
822 self._done_last_block = True
823 padded = ciphertext + b('\x00') * padding_length
824 res = self._cipher.decrypt(padded)[:len(ciphertext)]
825 else:
826 res = self._cipher.decrypt(ciphertext)
827 return res
828
829 if self.mode == MODE_SIV:
830 raise TypeError("decrypt() not allowed for SIV mode."
831 " Use decrypt_and_verify() instead.")
832
833 if self.mode in (MODE_CCM, MODE_EAX, MODE_GCM):
834
835 if self.decrypt not in self._next:
836 raise TypeError("decrypt() can only be called after initialization or an update()")
837 self._next = [self.decrypt, self.verify]
838
839 if self.mode == MODE_CCM:
840 if self._assoc_len is None:
841 self._start_ccm(assoc_len=self._cipherMAC.get_len())
842 if self._msg_len is None:
843 self._start_ccm(msg_len=len(ciphertext))
844 self._next = [self.verify]
845 if not self._done_assoc_data:
846 self._cipherMAC.zero_pad()
847 self._done_assoc_data = True
848
849 if self.mode == MODE_GCM:
850 if not self._done_assoc_data:
851 self._cipherMAC.zero_pad()
852 self._done_assoc_data = True
853
854 self._cipherMAC.update(ciphertext)
855 self._msg_len += len(ciphertext)
856
857 if self.mode == MODE_EAX:
858 self._omac[2].update(ciphertext)
859
860 pt = self._cipher.decrypt(ciphertext)
861
862 if self.mode == MODE_CCM:
863 self._cipherMAC.update(pt)
864
865 return pt
866
867 def digest(self):
868 """Compute the *binary* MAC tag in an AEAD mode.
869
870 When using an AEAD mode like CCM or EAX, the caller invokes
871 this function at the very end.
872
873 This method returns the MAC that shall be sent to the receiver,
874 together with the ciphertext.
875
876 :Return: the MAC, as a byte string.
877 """
878
879 if self.mode not in (MODE_CCM, MODE_EAX, MODE_SIV, MODE_GCM):
880 raise TypeError("digest() not supported by this mode of operation")
881
882 if self.digest not in self._next:
883 raise TypeError("digest() cannot be called when decrypting or validating a message")
884 self._next = [self.digest]
885
886 return self._compute_mac()
887
888 def _compute_mac(self):
889 """Compute MAC without any FSM checks."""
890
891 if self._tag:
892 return self._tag
893
894 if self.mode == MODE_CCM:
895
896 if self._assoc_len is None:
897 self._start_ccm(assoc_len=self._cipherMAC.get_len())
898 if self._msg_len is None:
899 self._start_ccm(msg_len=0)
900 self._cipherMAC.zero_pad()
901 self._tag = strxor(self._cipherMAC.digest(),
902 self._s_0)[:self._mac_len]
903
904 if self.mode == MODE_GCM:
905
906 # Step 5 in NIST SP 800-38D, Algorithm 4 - Compute S
907 self._cipherMAC.zero_pad()
908 auth_len = self._cipherMAC.get_len() - self._msg_len
909 for tlen in (auth_len, self._msg_len):
910 self._cipherMAC.update(long_to_bytes(8 * tlen, 8))
911 s_tag = self._cipherMAC.digest()
912
913 # Step 6 - Compute T
914 self._tag = self._tag_cipher.encrypt(s_tag)[:self._mac_len]
915
916 if self.mode == MODE_EAX:
917 tag = bchr(0) * self.block_size
918 for i in range(3):
919 tag = strxor(tag, self._omac[i].digest())
920 self._tag = tag[:self._mac_len]
921
922 if self.mode == MODE_SIV:
923 self._tag = self._cipherMAC.derive()
924
925 return self._tag
926
927 def hexdigest(self):
928 """Compute the *printable* MAC tag in an AEAD mode.
929
930 This method is like `digest`.
931
932 :Return: the MAC, as a hexadecimal string.
933 """
934 return "".join(["%02x" % bord(x) for x in self.digest()])
935
936 def verify(self, mac_tag):
937 """Validate the *binary* MAC tag in an AEAD mode.
938
939 When using an AEAD mode like CCM or EAX, the caller invokes
940 this function at the very end.
941
942 This method checks if the decrypted message is indeed valid
943 (that is, if the key is correct) and it has not been
944 tampered with while in transit.
945
946 :Parameters:
947 mac_tag : byte string
948 This is the *binary* MAC, as received from the sender.
949 :Raises ValueError:
950 if the MAC does not match. The message has been tampered with
951 or the key is incorrect.
952 """
953
954 if self.mode not in (MODE_CCM, MODE_EAX, MODE_SIV, MODE_GCM):
955 raise TypeError("verify() not supported by this mode of operation")
956
957 if self.verify not in self._next:
958 raise TypeError("verify() cannot be called when encrypting a message")
959 self._next = [self.verify]
960
961 res = 0
962 # Constant-time comparison
963 for x, y in zip(self._compute_mac(), mac_tag):
964 res |= bord(x) ^ bord(y)
965 if res or len(mac_tag) != self._mac_len:
966 raise ValueError("MAC check failed")
967
968 def hexverify(self, hex_mac_tag):
969 """Validate the *printable* MAC tag in an AEAD mode.
970
971 This method is like `verify`.
972
973 :Parameters:
974 hex_mac_tag : string
975 This is the *printable* MAC, as received from the sender.
976 :Raises ValueError:
977 if the MAC does not match. The message has been tampered with
978 or the key is incorrect.
979 """
980
981 self.verify(unhexlify(hex_mac_tag))
982
983 def encrypt_and_digest(self, plaintext):
984 """Perform encrypt() and digest() in one step.
985
986 :Parameters:
987 plaintext : byte string
988 The piece of data to encrypt.
989 :Return:
990 a tuple with two byte strings:
991
992 - the encrypted data
993 - the MAC
994 """
995
996 return self.encrypt(plaintext), self.digest()
997
998 def decrypt_and_verify(self, ciphertext, mac_tag):
999 """Perform decrypt() and verify() in one step.
1000
1001 :Parameters:
1002 ciphertext : byte string
1003 The piece of data to decrypt.
1004 mac_tag : byte string
1005 This is the *binary* MAC, as received from the sender.
1006
1007 :Return: the decrypted data (byte string).
1008 :Raises ValueError:
1009 if the MAC does not match. The message has been tampered with
1010 or the key is incorrect.
1011 """
1012
1013 if self.mode == MODE_SIV:
1014 if self.decrypt not in self._next:
1015 raise TypeError("decrypt() can only be called"
1016 " after initialization or an update()")
1017 self._next = [self.verify]
1018
1019 # Take the MAC and start the cipher for decryption
1020 self._mac = mac_tag
1021 self._cipher = self._siv_ctr_cipher(self._mac)
1022
1023 pt = self._cipher.decrypt(ciphertext)
1024
1025 if self.nonce:
1026 self._cipherMAC.update(self.nonce)
1027 if pt:
1028 self._cipherMAC.update(pt)
1029 else:
1030 pt = self.decrypt(ciphertext)
1031
1032 self.verify(mac_tag)
1033 return pt