Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py: 73%
128 statements
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-25 06:11 +0000
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-25 06:11 +0000
1# This file is dual licensed under the terms of the Apache License, Version
2# 2.0, and the BSD License. See the LICENSE file in the root of this repository
3# for complete details.
6from cryptography import utils
7from cryptography.hazmat.primitives.ciphers import (
8 BlockCipherAlgorithm,
9 CipherAlgorithm,
10)
13def _verify_key_size(algorithm: CipherAlgorithm, key: bytes) -> bytes:
14 # Verify that the key is instance of bytes
15 utils._check_byteslike("key", key)
17 # Verify that the key size matches the expected key size
18 if len(key) * 8 not in algorithm.key_sizes:
19 raise ValueError(
20 "Invalid key size ({}) for {}.".format(
21 len(key) * 8, algorithm.name
22 )
23 )
24 return key
27class AES(CipherAlgorithm, BlockCipherAlgorithm):
28 name = "AES"
29 block_size = 128
30 # 512 added to support AES-256-XTS, which uses 512-bit keys
31 key_sizes = frozenset([128, 192, 256, 512])
33 def __init__(self, key: bytes):
34 self.key = _verify_key_size(self, key)
36 @property
37 def key_size(self) -> int:
38 return len(self.key) * 8
41class AES128(CipherAlgorithm, BlockCipherAlgorithm):
42 name = "AES"
43 block_size = 128
44 key_sizes = frozenset([128])
45 key_size = 128
47 def __init__(self, key: bytes):
48 self.key = _verify_key_size(self, key)
51class AES256(CipherAlgorithm, BlockCipherAlgorithm):
52 name = "AES"
53 block_size = 128
54 key_sizes = frozenset([256])
55 key_size = 256
57 def __init__(self, key: bytes):
58 self.key = _verify_key_size(self, key)
61class Camellia(CipherAlgorithm, BlockCipherAlgorithm):
62 name = "camellia"
63 block_size = 128
64 key_sizes = frozenset([128, 192, 256])
66 def __init__(self, key: bytes):
67 self.key = _verify_key_size(self, key)
69 @property
70 def key_size(self) -> int:
71 return len(self.key) * 8
74class TripleDES(CipherAlgorithm, BlockCipherAlgorithm):
75 name = "3DES"
76 block_size = 64
77 key_sizes = frozenset([64, 128, 192])
79 def __init__(self, key: bytes):
80 if len(key) == 8:
81 key += key + key
82 elif len(key) == 16:
83 key += key[:8]
84 self.key = _verify_key_size(self, key)
86 @property
87 def key_size(self) -> int:
88 return len(self.key) * 8
91class Blowfish(CipherAlgorithm, BlockCipherAlgorithm):
92 name = "Blowfish"
93 block_size = 64
94 key_sizes = frozenset(range(32, 449, 8))
96 def __init__(self, key: bytes):
97 self.key = _verify_key_size(self, key)
99 @property
100 def key_size(self) -> int:
101 return len(self.key) * 8
104_BlowfishInternal = Blowfish
105utils.deprecated(
106 Blowfish,
107 __name__,
108 "Blowfish has been deprecated",
109 utils.DeprecatedIn37,
110 name="Blowfish",
111)
114class CAST5(CipherAlgorithm, BlockCipherAlgorithm):
115 name = "CAST5"
116 block_size = 64
117 key_sizes = frozenset(range(40, 129, 8))
119 def __init__(self, key: bytes):
120 self.key = _verify_key_size(self, key)
122 @property
123 def key_size(self) -> int:
124 return len(self.key) * 8
127_CAST5Internal = CAST5
128utils.deprecated(
129 CAST5,
130 __name__,
131 "CAST5 has been deprecated",
132 utils.DeprecatedIn37,
133 name="CAST5",
134)
137class ARC4(CipherAlgorithm):
138 name = "RC4"
139 key_sizes = frozenset([40, 56, 64, 80, 128, 160, 192, 256])
141 def __init__(self, key: bytes):
142 self.key = _verify_key_size(self, key)
144 @property
145 def key_size(self) -> int:
146 return len(self.key) * 8
149class IDEA(CipherAlgorithm, BlockCipherAlgorithm):
150 name = "IDEA"
151 block_size = 64
152 key_sizes = frozenset([128])
154 def __init__(self, key: bytes):
155 self.key = _verify_key_size(self, key)
157 @property
158 def key_size(self) -> int:
159 return len(self.key) * 8
162_IDEAInternal = IDEA
163utils.deprecated(
164 IDEA,
165 __name__,
166 "IDEA has been deprecated",
167 utils.DeprecatedIn37,
168 name="IDEA",
169)
172class SEED(CipherAlgorithm, BlockCipherAlgorithm):
173 name = "SEED"
174 block_size = 128
175 key_sizes = frozenset([128])
177 def __init__(self, key: bytes):
178 self.key = _verify_key_size(self, key)
180 @property
181 def key_size(self) -> int:
182 return len(self.key) * 8
185_SEEDInternal = SEED
186utils.deprecated(
187 SEED,
188 __name__,
189 "SEED has been deprecated",
190 utils.DeprecatedIn37,
191 name="SEED",
192)
195class ChaCha20(CipherAlgorithm):
196 name = "ChaCha20"
197 key_sizes = frozenset([256])
199 def __init__(self, key: bytes, nonce: bytes):
200 self.key = _verify_key_size(self, key)
201 utils._check_byteslike("nonce", nonce)
203 if len(nonce) != 16:
204 raise ValueError("nonce must be 128-bits (16 bytes)")
206 self._nonce = nonce
208 @property
209 def nonce(self) -> bytes:
210 return self._nonce
212 @property
213 def key_size(self) -> int:
214 return len(self.key) * 8
217class SM4(CipherAlgorithm, BlockCipherAlgorithm):
218 name = "SM4"
219 block_size = 128
220 key_sizes = frozenset([128])
222 def __init__(self, key: bytes):
223 self.key = _verify_key_size(self, key)
225 @property
226 def key_size(self) -> int:
227 return len(self.key) * 8