Chirag1994 commited on
Commit
e76a088
1 Parent(s): 8a10417

Upload 6211 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +5 -0
  2. multilingual_toxic_comment_files/.gitattributes +1 -0
  3. multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/fingerprint.pb +3 -0
  4. multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/keras_metadata.pb +3 -0
  5. multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/saved_model.pb +3 -0
  6. multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/variables/variables.data-00000-of-00001 +3 -0
  7. multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/variables/variables.index +0 -0
  8. multilingual_toxic_comment_files/app.py +55 -0
  9. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/AES.py +234 -0
  10. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/AES.pyi +154 -0
  11. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC2.py +175 -0
  12. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC2.pyi +33 -0
  13. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC4.py +136 -0
  14. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC4.pyi +14 -0
  15. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Blowfish.py +159 -0
  16. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Blowfish.pyi +33 -0
  17. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/CAST.py +159 -0
  18. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/CAST.pyi +33 -0
  19. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20.py +287 -0
  20. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20.pyi +23 -0
  21. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20_Poly1305.py +336 -0
  22. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20_Poly1305.pyi +26 -0
  23. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES.py +158 -0
  24. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES.pyi +33 -0
  25. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES3.py +187 -0
  26. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES3.pyi +35 -0
  27. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_OAEP.py +239 -0
  28. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_OAEP.pyi +35 -0
  29. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_v1_5.py +217 -0
  30. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_v1_5.pyi +20 -0
  31. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Salsa20.py +167 -0
  32. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Salsa20.pyi +24 -0
  33. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_ARC4.pyd +0 -0
  34. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_EKSBlowfish.py +131 -0
  35. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_EKSBlowfish.pyi +15 -0
  36. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_Salsa20.pyd +0 -0
  37. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__init__.py +79 -0
  38. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__init__.pyi +0 -0
  39. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/AES.cpython-310.pyc +0 -0
  40. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ARC2.cpython-310.pyc +0 -0
  41. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ARC4.cpython-310.pyc +0 -0
  42. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/Blowfish.cpython-310.pyc +0 -0
  43. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/CAST.cpython-310.pyc +0 -0
  44. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ChaCha20.cpython-310.pyc +0 -0
  45. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ChaCha20_Poly1305.cpython-310.pyc +0 -0
  46. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/DES.cpython-310.pyc +0 -0
  47. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/DES3.cpython-310.pyc +0 -0
  48. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/PKCS1_OAEP.cpython-310.pyc +0 -0
  49. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/PKCS1_v1_5.cpython-310.pyc +0 -0
  50. multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/Salsa20.cpython-310.pyc +0 -0
.gitattributes CHANGED
@@ -32,3 +32,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ multilingual_toxic_comment_files/env/Lib/site-packages/clang/native/libclang.dll filter=lfs diff=lfs merge=lfs -text
36
+ multilingual_toxic_comment_files/env/Lib/site-packages/cryptography/hazmat/bindings/_rust.pyd filter=lfs diff=lfs merge=lfs -text
37
+ multilingual_toxic_comment_files/env/Lib/site-packages/grpc/_cython/cygrpc.cp310-win_amd64.pyd filter=lfs diff=lfs merge=lfs -text
38
+ multilingual_toxic_comment_files/env/Lib/site-packages/h5py/hdf5.dll filter=lfs diff=lfs merge=lfs -text
39
+ multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
multilingual_toxic_comment_files/.gitattributes ADDED
@@ -0,0 +1 @@
 
 
1
+ Multilingual_toxic_comment_classifier/ filter=lfs diff=lfs merge=lfs -text
multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/fingerprint.pb ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9a9d19f63b7b7b7dcfa8f357dd1fd99fa99f3a5ff34a7570f182d8a3aa20823c
3
+ size 56
multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/keras_metadata.pb ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:82f64bf076deed233b6fc5b1571df01a1962cec9329ab1e666b1a40e342f7077
3
+ size 335379
multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/saved_model.pb ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e6d665d394967b71ef01e9726c26bacef102200d68d760a5ed5178356f788157
3
+ size 14061456
multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/variables/variables.data-00000-of-00001 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c62edbd59c81c2c336b4fe4dae3f4e4d34b410ebe038c32904a538c91eb4636d
3
+ size 6731757780
multilingual_toxic_comment_files/Multilingual_toxic_comment_classifier/variables/variables.index ADDED
Binary file (69.5 kB). View file
 
multilingual_toxic_comment_files/app.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ import gradio as gr
3
+ import pandas as pd
4
+ from transformers import AutoTokenizer
5
+
6
+ model_save_path = "Multilingual_toxic_comment_classifier/"
7
+ ### Loading the fine-tuned model ###
8
+ loaded_model = tf.keras.models.load_model(model_save_path)
9
+ ### Initializing the tokenizer ###
10
+ tokenizer_ = AutoTokenizer.from_pretrained("xlm-roberta-large")
11
+
12
+ examples_list = [
13
+ [example]
14
+ for example in pd.read_csv("examples/sample_comments.csv")["comment_text"].tolist()
15
+ ]
16
+
17
+
18
+ def prep_data(text, tokenizer, max_len=192):
19
+ tokens = tokenizer(
20
+ text,
21
+ max_length=max_len,
22
+ truncation=True,
23
+ padding="max_length",
24
+ add_special_tokens=True,
25
+ return_tensors="tf",
26
+ )
27
+
28
+ return {
29
+ "input_ids": tokens["input_ids"],
30
+ "attention_mask": tokens["attention_mask"],
31
+ }
32
+
33
+
34
+ def predict(text):
35
+ prob_of_toxic_comment = loaded_model.predict(
36
+ prep_data(text=text, tokenizer=tokenizer_, max_len=192)
37
+ )[0][0]
38
+ prob_of_non_toxic_comment = 1 - prob_of_toxic_comment
39
+ prob_of_toxic_comment, prob_of_non_toxic_comment
40
+ probs = {
41
+ "prob_of_toxic_comment": float(prob_of_toxic_comment),
42
+ "prob_of_non_toxic_comment": float(prob_of_non_toxic_comment),
43
+ }
44
+ return probs
45
+
46
+
47
+ interface = gr.Interface(
48
+ fn=predict,
49
+ inputs=gr.components.Textbox(lines=4, label="Comment"),
50
+ outputs=[gr.Label(label="Probabilities")],
51
+ examples=examples_list,
52
+ title="Multi-Lingual Toxic Comment Classification.",
53
+ description="XLM-Roberta Large model",
54
+ )
55
+ interface.launch(debug=False, share=True)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/AES.py ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/AES.py : AES
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
+
23
+ import sys
24
+
25
+ from Crypto.Cipher import _create_cipher
26
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
27
+ VoidPointer, SmartPointer,
28
+ c_size_t, c_uint8_ptr)
29
+
30
+ from Crypto.Util import _cpu_features
31
+ from Crypto.Random import get_random_bytes
32
+
33
+ MODE_ECB = 1 #: Electronic Code Book (:ref:`ecb_mode`)
34
+ MODE_CBC = 2 #: Cipher-Block Chaining (:ref:`cbc_mode`)
35
+ MODE_CFB = 3 #: Cipher Feedback (:ref:`cfb_mode`)
36
+ MODE_OFB = 5 #: Output Feedback (:ref:`ofb_mode`)
37
+ MODE_CTR = 6 #: Counter mode (:ref:`ctr_mode`)
38
+ MODE_OPENPGP = 7 #: OpenPGP mode (:ref:`openpgp_mode`)
39
+ MODE_CCM = 8 #: Counter with CBC-MAC (:ref:`ccm_mode`)
40
+ MODE_EAX = 9 #: :ref:`eax_mode`
41
+ MODE_SIV = 10 #: Galois Counter Mode (:ref:`gcm_mode`)
42
+ MODE_GCM = 11 #: Synthetic Initialization Vector (:ref:`siv_mode`)
43
+ MODE_OCB = 12 #: Offset Code Book (:ref:`ocb_mode`)
44
+
45
+
46
+ _cproto = """
47
+ int AES_start_operation(const uint8_t key[],
48
+ size_t key_len,
49
+ void **pResult);
50
+ int AES_encrypt(const void *state,
51
+ const uint8_t *in,
52
+ uint8_t *out,
53
+ size_t data_len);
54
+ int AES_decrypt(const void *state,
55
+ const uint8_t *in,
56
+ uint8_t *out,
57
+ size_t data_len);
58
+ int AES_stop_operation(void *state);
59
+ """
60
+
61
+
62
+ # Load portable AES
63
+ _raw_aes_lib = load_pycryptodome_raw_lib("Crypto.Cipher._raw_aes",
64
+ _cproto)
65
+
66
+ # Try to load AES with AES NI instructions
67
+ try:
68
+ _raw_aesni_lib = None
69
+ if _cpu_features.have_aes_ni():
70
+ _raw_aesni_lib = load_pycryptodome_raw_lib("Crypto.Cipher._raw_aesni",
71
+ _cproto.replace("AES",
72
+ "AESNI"))
73
+ # _raw_aesni may not have been compiled in
74
+ except OSError:
75
+ pass
76
+
77
+
78
+ def _create_base_cipher(dict_parameters):
79
+ """This method instantiates and returns a handle to a low-level
80
+ base cipher. It will absorb named parameters in the process."""
81
+
82
+ use_aesni = dict_parameters.pop("use_aesni", True)
83
+
84
+ try:
85
+ key = dict_parameters.pop("key")
86
+ except KeyError:
87
+ raise TypeError("Missing 'key' parameter")
88
+
89
+ if len(key) not in key_size:
90
+ raise ValueError("Incorrect AES key length (%d bytes)" % len(key))
91
+
92
+ if use_aesni and _raw_aesni_lib:
93
+ start_operation = _raw_aesni_lib.AESNI_start_operation
94
+ stop_operation = _raw_aesni_lib.AESNI_stop_operation
95
+ else:
96
+ start_operation = _raw_aes_lib.AES_start_operation
97
+ stop_operation = _raw_aes_lib.AES_stop_operation
98
+
99
+ cipher = VoidPointer()
100
+ result = start_operation(c_uint8_ptr(key),
101
+ c_size_t(len(key)),
102
+ cipher.address_of())
103
+ if result:
104
+ raise ValueError("Error %X while instantiating the AES cipher"
105
+ % result)
106
+ return SmartPointer(cipher.get(), stop_operation)
107
+
108
+
109
+ def _derive_Poly1305_key_pair(key, nonce):
110
+ """Derive a tuple (r, s, nonce) for a Poly1305 MAC.
111
+
112
+ If nonce is ``None``, a new 16-byte nonce is generated.
113
+ """
114
+
115
+ if len(key) != 32:
116
+ raise ValueError("Poly1305 with AES requires a 32-byte key")
117
+
118
+ if nonce is None:
119
+ nonce = get_random_bytes(16)
120
+ elif len(nonce) != 16:
121
+ raise ValueError("Poly1305 with AES requires a 16-byte nonce")
122
+
123
+ s = new(key[:16], MODE_ECB).encrypt(nonce)
124
+ return key[16:], s, nonce
125
+
126
+
127
+ def new(key, mode, *args, **kwargs):
128
+ """Create a new AES cipher.
129
+
130
+ Args:
131
+ key(bytes/bytearray/memoryview):
132
+ The secret key to use in the symmetric cipher.
133
+
134
+ It must be 16 (*AES-128)*, 24 (*AES-192*) or 32 (*AES-256*) bytes long.
135
+
136
+ For ``MODE_SIV`` only, it doubles to 32, 48, or 64 bytes.
137
+ mode (a ``MODE_*`` constant):
138
+ The chaining mode to use for encryption or decryption.
139
+ If in doubt, use ``MODE_EAX``.
140
+
141
+ Keyword Args:
142
+ iv (bytes/bytearray/memoryview):
143
+ (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
144
+ and ``MODE_OPENPGP`` modes).
145
+
146
+ The initialization vector to use for encryption or decryption.
147
+
148
+ For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 16 bytes long.
149
+
150
+ For ``MODE_OPENPGP`` mode only,
151
+ it must be 16 bytes long for encryption
152
+ and 18 bytes for decryption (in the latter case, it is
153
+ actually the *encrypted* IV which was prefixed to the ciphertext).
154
+
155
+ If not provided, a random byte string is generated (you must then
156
+ read its value with the :attr:`iv` attribute).
157
+
158
+ nonce (bytes/bytearray/memoryview):
159
+ (Only applicable for ``MODE_CCM``, ``MODE_EAX``, ``MODE_GCM``,
160
+ ``MODE_SIV``, ``MODE_OCB``, and ``MODE_CTR``).
161
+
162
+ A value that must never be reused for any other encryption done
163
+ with this key (except possibly for ``MODE_SIV``, see below).
164
+
165
+ For ``MODE_EAX``, ``MODE_GCM`` and ``MODE_SIV`` there are no
166
+ restrictions on its length (recommended: **16** bytes).
167
+
168
+ For ``MODE_CCM``, its length must be in the range **[7..13]**.
169
+ Bear in mind that with CCM there is a trade-off between nonce
170
+ length and maximum message size. Recommendation: **11** bytes.
171
+
172
+ For ``MODE_OCB``, its length must be in the range **[1..15]**
173
+ (recommended: **15**).
174
+
175
+ For ``MODE_CTR``, its length must be in the range **[0..15]**
176
+ (recommended: **8**).
177
+
178
+ For ``MODE_SIV``, the nonce is optional, if it is not specified,
179
+ then no nonce is being used, which renders the encryption
180
+ deterministic.
181
+
182
+ If not provided, for modes other than ``MODE_SIV``, a random
183
+ byte string of the recommended length is used (you must then
184
+ read its value with the :attr:`nonce` attribute).
185
+
186
+ segment_size (integer):
187
+ (Only ``MODE_CFB``).The number of **bits** the plaintext and ciphertext
188
+ are segmented in. It must be a multiple of 8.
189
+ If not specified, it will be assumed to be 8.
190
+
191
+ mac_len (integer):
192
+ (Only ``MODE_EAX``, ``MODE_GCM``, ``MODE_OCB``, ``MODE_CCM``)
193
+ Length of the authentication tag, in bytes.
194
+
195
+ It must be even and in the range **[4..16]**.
196
+ The recommended value (and the default, if not specified) is **16**.
197
+
198
+ msg_len (integer):
199
+ (Only ``MODE_CCM``). Length of the message to (de)cipher.
200
+ If not specified, ``encrypt`` must be called with the entire message.
201
+ Similarly, ``decrypt`` can only be called once.
202
+
203
+ assoc_len (integer):
204
+ (Only ``MODE_CCM``). Length of the associated data.
205
+ If not specified, all associated data is buffered internally,
206
+ which may represent a problem for very large messages.
207
+
208
+ initial_value (integer or bytes/bytearray/memoryview):
209
+ (Only ``MODE_CTR``).
210
+ The initial value for the counter. If not present, the cipher will
211
+ start counting from 0. The value is incremented by one for each block.
212
+ The counter number is encoded in big endian mode.
213
+
214
+ counter (object):
215
+ (Only ``MODE_CTR``).
216
+ Instance of ``Crypto.Util.Counter``, which allows full customization
217
+ of the counter block. This parameter is incompatible to both ``nonce``
218
+ and ``initial_value``.
219
+
220
+ use_aesni: (boolean):
221
+ Use Intel AES-NI hardware extensions (default: use if available).
222
+
223
+ Returns:
224
+ an AES object, of the applicable mode.
225
+ """
226
+
227
+ kwargs["add_aes_modes"] = True
228
+ return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
229
+
230
+
231
+ # Size of a data block (in bytes)
232
+ block_size = 16
233
+ # Size of a key (in bytes)
234
+ key_size = (16, 24, 32)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/AES.pyi ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import ByteString, Dict, Optional, Tuple, Union, overload
2
+ from typing_extensions import Literal
3
+
4
+ from Crypto.Cipher._mode_ecb import EcbMode
5
+ from Crypto.Cipher._mode_cbc import CbcMode
6
+ from Crypto.Cipher._mode_cfb import CfbMode
7
+ from Crypto.Cipher._mode_ofb import OfbMode
8
+ from Crypto.Cipher._mode_ctr import CtrMode
9
+ from Crypto.Cipher._mode_openpgp import OpenPgpMode
10
+ from Crypto.Cipher._mode_ccm import CcmMode
11
+ from Crypto.Cipher._mode_eax import EaxMode
12
+ from Crypto.Cipher._mode_gcm import GcmMode
13
+ from Crypto.Cipher._mode_siv import SivMode
14
+ from Crypto.Cipher._mode_ocb import OcbMode
15
+
16
+ MODE_ECB: Literal[1]
17
+ MODE_CBC: Literal[2]
18
+ MODE_CFB: Literal[3]
19
+ MODE_OFB: Literal[5]
20
+ MODE_CTR: Literal[6]
21
+ MODE_OPENPGP: Literal[7]
22
+ MODE_CCM: Literal[8]
23
+ MODE_EAX: Literal[9]
24
+ MODE_SIV: Literal[10]
25
+ MODE_GCM: Literal[11]
26
+ MODE_OCB: Literal[12]
27
+
28
+ # MODE_ECB
29
+ @overload
30
+ def new(key: ByteString,
31
+ mode: Literal[1],
32
+ use_aesni : bool = ...) -> \
33
+ EcbMode: ...
34
+
35
+ # MODE_CBC
36
+ @overload
37
+ def new(key: ByteString,
38
+ mode: Literal[2],
39
+ iv : Optional[ByteString] = ...,
40
+ use_aesni : bool = ...) -> \
41
+ CbcMode: ...
42
+
43
+ @overload
44
+ def new(key: ByteString,
45
+ mode: Literal[2],
46
+ IV : Optional[ByteString] = ...,
47
+ use_aesni : bool = ...) -> \
48
+ CbcMode: ...
49
+
50
+ # MODE_CFB
51
+ @overload
52
+ def new(key: ByteString,
53
+ mode: Literal[3],
54
+ iv : Optional[ByteString] = ...,
55
+ segment_size : int = ...,
56
+ use_aesni : bool = ...) -> \
57
+ CfbMode: ...
58
+
59
+ @overload
60
+ def new(key: ByteString,
61
+ mode: Literal[3],
62
+ IV : Optional[ByteString] = ...,
63
+ segment_size : int = ...,
64
+ use_aesni : bool = ...) -> \
65
+ CfbMode: ...
66
+
67
+ # MODE_OFB
68
+ @overload
69
+ def new(key: ByteString,
70
+ mode: Literal[5],
71
+ iv : Optional[ByteString] = ...,
72
+ use_aesni : bool = ...) -> \
73
+ OfbMode: ...
74
+
75
+ @overload
76
+ def new(key: ByteString,
77
+ mode: Literal[5],
78
+ IV : Optional[ByteString] = ...,
79
+ use_aesni : bool = ...) -> \
80
+ OfbMode: ...
81
+
82
+ # MODE_CTR
83
+ @overload
84
+ def new(key: ByteString,
85
+ mode: Literal[6],
86
+ nonce : Optional[ByteString] = ...,
87
+ initial_value : Union[int, ByteString] = ...,
88
+ counter : Dict = ...,
89
+ use_aesni : bool = ...) -> \
90
+ CtrMode: ...
91
+
92
+ # MODE_OPENPGP
93
+ @overload
94
+ def new(key: ByteString,
95
+ mode: Literal[7],
96
+ iv : Optional[ByteString] = ...,
97
+ use_aesni : bool = ...) -> \
98
+ OpenPgpMode: ...
99
+
100
+ @overload
101
+ def new(key: ByteString,
102
+ mode: Literal[7],
103
+ IV : Optional[ByteString] = ...,
104
+ use_aesni : bool = ...) -> \
105
+ OpenPgpMode: ...
106
+
107
+ # MODE_CCM
108
+ @overload
109
+ def new(key: ByteString,
110
+ mode: Literal[8],
111
+ nonce : Optional[ByteString] = ...,
112
+ mac_len : int = ...,
113
+ assoc_len : int = ...,
114
+ use_aesni : bool = ...) -> \
115
+ CcmMode: ...
116
+
117
+ # MODE_EAX
118
+ @overload
119
+ def new(key: ByteString,
120
+ mode: Literal[9],
121
+ nonce : Optional[ByteString] = ...,
122
+ mac_len : int = ...,
123
+ use_aesni : bool = ...) -> \
124
+ EaxMode: ...
125
+
126
+ # MODE_GCM
127
+ @overload
128
+ def new(key: ByteString,
129
+ mode: Literal[10],
130
+ nonce : Optional[ByteString] = ...,
131
+ use_aesni : bool = ...) -> \
132
+ SivMode: ...
133
+
134
+ # MODE_SIV
135
+ @overload
136
+ def new(key: ByteString,
137
+ mode: Literal[11],
138
+ nonce : Optional[ByteString] = ...,
139
+ mac_len : int = ...,
140
+ use_aesni : bool = ...) -> \
141
+ GcmMode: ...
142
+
143
+ # MODE_OCB
144
+ @overload
145
+ def new(key: ByteString,
146
+ mode: Literal[12],
147
+ nonce : Optional[ByteString] = ...,
148
+ mac_len : int = ...,
149
+ use_aesni : bool = ...) -> \
150
+ OcbMode: ...
151
+
152
+
153
+ block_size: int
154
+ key_size: Tuple[int, int, int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC2.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/ARC2.py : ARC2.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
+ """
23
+ Module's constants for the modes of operation supported with ARC2:
24
+
25
+ :var MODE_ECB: :ref:`Electronic Code Book (ECB) <ecb_mode>`
26
+ :var MODE_CBC: :ref:`Cipher-Block Chaining (CBC) <cbc_mode>`
27
+ :var MODE_CFB: :ref:`Cipher FeedBack (CFB) <cfb_mode>`
28
+ :var MODE_OFB: :ref:`Output FeedBack (OFB) <ofb_mode>`
29
+ :var MODE_CTR: :ref:`CounTer Mode (CTR) <ctr_mode>`
30
+ :var MODE_OPENPGP: :ref:`OpenPGP Mode <openpgp_mode>`
31
+ :var MODE_EAX: :ref:`EAX Mode <eax_mode>`
32
+ """
33
+
34
+ import sys
35
+
36
+ from Crypto.Cipher import _create_cipher
37
+ from Crypto.Util.py3compat import byte_string
38
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
39
+ VoidPointer, SmartPointer,
40
+ c_size_t, c_uint8_ptr)
41
+
42
+ _raw_arc2_lib = load_pycryptodome_raw_lib(
43
+ "Crypto.Cipher._raw_arc2",
44
+ """
45
+ int ARC2_start_operation(const uint8_t key[],
46
+ size_t key_len,
47
+ size_t effective_key_len,
48
+ void **pResult);
49
+ int ARC2_encrypt(const void *state,
50
+ const uint8_t *in,
51
+ uint8_t *out,
52
+ size_t data_len);
53
+ int ARC2_decrypt(const void *state,
54
+ const uint8_t *in,
55
+ uint8_t *out,
56
+ size_t data_len);
57
+ int ARC2_stop_operation(void *state);
58
+ """
59
+ )
60
+
61
+
62
+ def _create_base_cipher(dict_parameters):
63
+ """This method instantiates and returns a handle to a low-level
64
+ base cipher. It will absorb named parameters in the process."""
65
+
66
+ try:
67
+ key = dict_parameters.pop("key")
68
+ except KeyError:
69
+ raise TypeError("Missing 'key' parameter")
70
+
71
+ effective_keylen = dict_parameters.pop("effective_keylen", 1024)
72
+
73
+ if len(key) not in key_size:
74
+ raise ValueError("Incorrect ARC2 key length (%d bytes)" % len(key))
75
+
76
+ if not (40 <= effective_keylen <= 1024):
77
+ raise ValueError("'effective_key_len' must be at least 40 and no larger than 1024 "
78
+ "(not %d)" % effective_keylen)
79
+
80
+ start_operation = _raw_arc2_lib.ARC2_start_operation
81
+ stop_operation = _raw_arc2_lib.ARC2_stop_operation
82
+
83
+ cipher = VoidPointer()
84
+ result = start_operation(c_uint8_ptr(key),
85
+ c_size_t(len(key)),
86
+ c_size_t(effective_keylen),
87
+ cipher.address_of())
88
+ if result:
89
+ raise ValueError("Error %X while instantiating the ARC2 cipher"
90
+ % result)
91
+
92
+ return SmartPointer(cipher.get(), stop_operation)
93
+
94
+
95
+ def new(key, mode, *args, **kwargs):
96
+ """Create a new RC2 cipher.
97
+
98
+ :param key:
99
+ The secret key to use in the symmetric cipher.
100
+ Its length can vary from 5 to 128 bytes; the actual search space
101
+ (and the cipher strength) can be reduced with the ``effective_keylen`` parameter.
102
+ :type key: bytes, bytearray, memoryview
103
+
104
+ :param mode:
105
+ The chaining mode to use for encryption or decryption.
106
+ :type mode: One of the supported ``MODE_*`` constants
107
+
108
+ :Keyword Arguments:
109
+ * **iv** (*bytes*, *bytearray*, *memoryview*) --
110
+ (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
111
+ and ``MODE_OPENPGP`` modes).
112
+
113
+ The initialization vector to use for encryption or decryption.
114
+
115
+ For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 8 bytes long.
116
+
117
+ For ``MODE_OPENPGP`` mode only,
118
+ it must be 8 bytes long for encryption
119
+ and 10 bytes for decryption (in the latter case, it is
120
+ actually the *encrypted* IV which was prefixed to the ciphertext).
121
+
122
+ If not provided, a random byte string is generated (you must then
123
+ read its value with the :attr:`iv` attribute).
124
+
125
+ * **nonce** (*bytes*, *bytearray*, *memoryview*) --
126
+ (Only applicable for ``MODE_EAX`` and ``MODE_CTR``).
127
+
128
+ A value that must never be reused for any other encryption done
129
+ with this key.
130
+
131
+ For ``MODE_EAX`` there are no
132
+ restrictions on its length (recommended: **16** bytes).
133
+
134
+ For ``MODE_CTR``, its length must be in the range **[0..7]**.
135
+
136
+ If not provided for ``MODE_EAX``, a random byte string is generated (you
137
+ can read it back via the ``nonce`` attribute).
138
+
139
+ * **effective_keylen** (*integer*) --
140
+ Optional. Maximum strength in bits of the actual key used by the ARC2 algorithm.
141
+ If the supplied ``key`` parameter is longer (in bits) of the value specified
142
+ here, it will be weakened to match it.
143
+ If not specified, no limitation is applied.
144
+
145
+ * **segment_size** (*integer*) --
146
+ (Only ``MODE_CFB``).The number of **bits** the plaintext and ciphertext
147
+ are segmented in. It must be a multiple of 8.
148
+ If not specified, it will be assumed to be 8.
149
+
150
+ * **mac_len** : (*integer*) --
151
+ (Only ``MODE_EAX``)
152
+ Length of the authentication tag, in bytes.
153
+ It must be no longer than 8 (default).
154
+
155
+ * **initial_value** : (*integer*) --
156
+ (Only ``MODE_CTR``). The initial value for the counter within
157
+ the counter block. By default it is **0**.
158
+
159
+ :Return: an ARC2 object, of the applicable mode.
160
+ """
161
+
162
+ return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
163
+
164
+ MODE_ECB = 1
165
+ MODE_CBC = 2
166
+ MODE_CFB = 3
167
+ MODE_OFB = 5
168
+ MODE_CTR = 6
169
+ MODE_OPENPGP = 7
170
+ MODE_EAX = 9
171
+
172
+ # Size of a data block (in bytes)
173
+ block_size = 8
174
+ # Size of a key (in bytes)
175
+ key_size = range(5, 128 + 1)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC2.pyi ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Dict, Iterable, Optional, ByteString
2
+
3
+ from Crypto.Cipher._mode_ecb import EcbMode
4
+ from Crypto.Cipher._mode_cbc import CbcMode
5
+ from Crypto.Cipher._mode_cfb import CfbMode
6
+ from Crypto.Cipher._mode_ofb import OfbMode
7
+ from Crypto.Cipher._mode_ctr import CtrMode
8
+ from Crypto.Cipher._mode_openpgp import OpenPgpMode
9
+ from Crypto.Cipher._mode_eax import EaxMode
10
+
11
+ ARC2Mode = int
12
+
13
+ MODE_ECB: ARC2Mode
14
+ MODE_CBC: ARC2Mode
15
+ MODE_CFB: ARC2Mode
16
+ MODE_OFB: ARC2Mode
17
+ MODE_CTR: ARC2Mode
18
+ MODE_OPENPGP: ARC2Mode
19
+ MODE_EAX: ARC2Mode
20
+
21
+ def new(key: ByteString,
22
+ mode: ARC2Mode,
23
+ iv : Optional[ByteString] = ...,
24
+ IV : Optional[ByteString] = ...,
25
+ nonce : Optional[ByteString] = ...,
26
+ segment_size : int = ...,
27
+ mac_len : int = ...,
28
+ initial_value : Union[int, ByteString] = ...,
29
+ counter : Dict = ...) -> \
30
+ Union[EcbMode, CbcMode, CfbMode, OfbMode, CtrMode, OpenPgpMode]: ...
31
+
32
+ block_size: int
33
+ key_size: Iterable[int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC4.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/ARC4.py : ARC4
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
+
23
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib, VoidPointer,
24
+ create_string_buffer, get_raw_buffer,
25
+ SmartPointer, c_size_t, c_uint8_ptr)
26
+
27
+
28
+ _raw_arc4_lib = load_pycryptodome_raw_lib("Crypto.Cipher._ARC4", """
29
+ int ARC4_stream_encrypt(void *rc4State, const uint8_t in[],
30
+ uint8_t out[], size_t len);
31
+ int ARC4_stream_init(uint8_t *key, size_t keylen,
32
+ void **pRc4State);
33
+ int ARC4_stream_destroy(void *rc4State);
34
+ """)
35
+
36
+
37
+ class ARC4Cipher:
38
+ """ARC4 cipher object. Do not create it directly. Use
39
+ :func:`Crypto.Cipher.ARC4.new` instead.
40
+ """
41
+
42
+ def __init__(self, key, *args, **kwargs):
43
+ """Initialize an ARC4 cipher object
44
+
45
+ See also `new()` at the module level."""
46
+
47
+ if len(args) > 0:
48
+ ndrop = args[0]
49
+ args = args[1:]
50
+ else:
51
+ ndrop = kwargs.pop('drop', 0)
52
+
53
+ if len(key) not in key_size:
54
+ raise ValueError("Incorrect ARC4 key length (%d bytes)" %
55
+ len(key))
56
+
57
+ self._state = VoidPointer()
58
+ result = _raw_arc4_lib.ARC4_stream_init(c_uint8_ptr(key),
59
+ c_size_t(len(key)),
60
+ self._state.address_of())
61
+ if result != 0:
62
+ raise ValueError("Error %d while creating the ARC4 cipher"
63
+ % result)
64
+ self._state = SmartPointer(self._state.get(),
65
+ _raw_arc4_lib.ARC4_stream_destroy)
66
+
67
+ if ndrop > 0:
68
+ # This is OK even if the cipher is used for decryption,
69
+ # since encrypt and decrypt are actually the same thing
70
+ # with ARC4.
71
+ self.encrypt(b'\x00' * ndrop)
72
+
73
+ self.block_size = 1
74
+ self.key_size = len(key)
75
+
76
+ def encrypt(self, plaintext):
77
+ """Encrypt a piece of data.
78
+
79
+ :param plaintext: The data to encrypt, of any size.
80
+ :type plaintext: bytes, bytearray, memoryview
81
+ :returns: the encrypted byte string, of equal length as the
82
+ plaintext.
83
+ """
84
+
85
+ ciphertext = create_string_buffer(len(plaintext))
86
+ result = _raw_arc4_lib.ARC4_stream_encrypt(self._state.get(),
87
+ c_uint8_ptr(plaintext),
88
+ ciphertext,
89
+ c_size_t(len(plaintext)))
90
+ if result:
91
+ raise ValueError("Error %d while encrypting with RC4" % result)
92
+ return get_raw_buffer(ciphertext)
93
+
94
+ def decrypt(self, ciphertext):
95
+ """Decrypt a piece of data.
96
+
97
+ :param ciphertext: The data to decrypt, of any size.
98
+ :type ciphertext: bytes, bytearray, memoryview
99
+ :returns: the decrypted byte string, of equal length as the
100
+ ciphertext.
101
+ """
102
+
103
+ try:
104
+ return self.encrypt(ciphertext)
105
+ except ValueError as e:
106
+ raise ValueError(str(e).replace("enc", "dec"))
107
+
108
+
109
+ def new(key, *args, **kwargs):
110
+ """Create a new ARC4 cipher.
111
+
112
+ :param key:
113
+ The secret key to use in the symmetric cipher.
114
+ Its length must be in the range ``[1..256]``.
115
+ The recommended length is 16 bytes.
116
+ :type key: bytes, bytearray, memoryview
117
+
118
+ :Keyword Arguments:
119
+ * *drop* (``integer``) --
120
+ The amount of bytes to discard from the initial part of the keystream.
121
+ In fact, such part has been found to be distinguishable from random
122
+ data (while it shouldn't) and also correlated to key.
123
+
124
+ The recommended value is 3072_ bytes. The default value is 0.
125
+
126
+ :Return: an `ARC4Cipher` object
127
+
128
+ .. _3072: http://eprint.iacr.org/2002/067.pdf
129
+ """
130
+ return ARC4Cipher(key, *args, **kwargs)
131
+
132
+
133
+ # Size of a data block (in bytes)
134
+ block_size = 1
135
+ # Size of a key (in bytes)
136
+ key_size = range(1, 256+1)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ARC4.pyi ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, Union, Iterable, ByteString
2
+
3
+ class ARC4Cipher:
4
+ block_size: int
5
+ key_size: int
6
+
7
+ def __init__(self, key: ByteString, *args: Any, **kwargs: Any) -> None: ...
8
+ def encrypt(self, plaintext: ByteString) -> bytes: ...
9
+ def decrypt(self, ciphertext: ByteString) -> bytes: ...
10
+
11
+ def new(key: ByteString, drop : int = ...) -> ARC4Cipher: ...
12
+
13
+ block_size: int
14
+ key_size: Iterable[int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Blowfish.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/Blowfish.py : Blowfish
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
+ """
23
+ Module's constants for the modes of operation supported with Blowfish:
24
+
25
+ :var MODE_ECB: :ref:`Electronic Code Book (ECB) <ecb_mode>`
26
+ :var MODE_CBC: :ref:`Cipher-Block Chaining (CBC) <cbc_mode>`
27
+ :var MODE_CFB: :ref:`Cipher FeedBack (CFB) <cfb_mode>`
28
+ :var MODE_OFB: :ref:`Output FeedBack (OFB) <ofb_mode>`
29
+ :var MODE_CTR: :ref:`CounTer Mode (CTR) <ctr_mode>`
30
+ :var MODE_OPENPGP: :ref:`OpenPGP Mode <openpgp_mode>`
31
+ :var MODE_EAX: :ref:`EAX Mode <eax_mode>`
32
+ """
33
+
34
+ import sys
35
+
36
+ from Crypto.Cipher import _create_cipher
37
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
38
+ VoidPointer, SmartPointer, c_size_t,
39
+ c_uint8_ptr)
40
+
41
+ _raw_blowfish_lib = load_pycryptodome_raw_lib(
42
+ "Crypto.Cipher._raw_blowfish",
43
+ """
44
+ int Blowfish_start_operation(const uint8_t key[],
45
+ size_t key_len,
46
+ void **pResult);
47
+ int Blowfish_encrypt(const void *state,
48
+ const uint8_t *in,
49
+ uint8_t *out,
50
+ size_t data_len);
51
+ int Blowfish_decrypt(const void *state,
52
+ const uint8_t *in,
53
+ uint8_t *out,
54
+ size_t data_len);
55
+ int Blowfish_stop_operation(void *state);
56
+ """
57
+ )
58
+
59
+
60
+ def _create_base_cipher(dict_parameters):
61
+ """This method instantiates and returns a smart pointer to
62
+ a low-level base cipher. It will absorb named parameters in
63
+ the process."""
64
+
65
+ try:
66
+ key = dict_parameters.pop("key")
67
+ except KeyError:
68
+ raise TypeError("Missing 'key' parameter")
69
+
70
+ if len(key) not in key_size:
71
+ raise ValueError("Incorrect Blowfish key length (%d bytes)" % len(key))
72
+
73
+ start_operation = _raw_blowfish_lib.Blowfish_start_operation
74
+ stop_operation = _raw_blowfish_lib.Blowfish_stop_operation
75
+
76
+ void_p = VoidPointer()
77
+ result = start_operation(c_uint8_ptr(key),
78
+ c_size_t(len(key)),
79
+ void_p.address_of())
80
+ if result:
81
+ raise ValueError("Error %X while instantiating the Blowfish cipher"
82
+ % result)
83
+ return SmartPointer(void_p.get(), stop_operation)
84
+
85
+
86
+ def new(key, mode, *args, **kwargs):
87
+ """Create a new Blowfish cipher
88
+
89
+ :param key:
90
+ The secret key to use in the symmetric cipher.
91
+ Its length can vary from 5 to 56 bytes.
92
+ :type key: bytes, bytearray, memoryview
93
+
94
+ :param mode:
95
+ The chaining mode to use for encryption or decryption.
96
+ :type mode: One of the supported ``MODE_*`` constants
97
+
98
+ :Keyword Arguments:
99
+ * **iv** (*bytes*, *bytearray*, *memoryview*) --
100
+ (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
101
+ and ``MODE_OPENPGP`` modes).
102
+
103
+ The initialization vector to use for encryption or decryption.
104
+
105
+ For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 8 bytes long.
106
+
107
+ For ``MODE_OPENPGP`` mode only,
108
+ it must be 8 bytes long for encryption
109
+ and 10 bytes for decryption (in the latter case, it is
110
+ actually the *encrypted* IV which was prefixed to the ciphertext).
111
+
112
+ If not provided, a random byte string is generated (you must then
113
+ read its value with the :attr:`iv` attribute).
114
+
115
+ * **nonce** (*bytes*, *bytearray*, *memoryview*) --
116
+ (Only applicable for ``MODE_EAX`` and ``MODE_CTR``).
117
+
118
+ A value that must never be reused for any other encryption done
119
+ with this key.
120
+
121
+ For ``MODE_EAX`` there are no
122
+ restrictions on its length (recommended: **16** bytes).
123
+
124
+ For ``MODE_CTR``, its length must be in the range **[0..7]**.
125
+
126
+ If not provided for ``MODE_EAX``, a random byte string is generated (you
127
+ can read it back via the ``nonce`` attribute).
128
+
129
+ * **segment_size** (*integer*) --
130
+ (Only ``MODE_CFB``).The number of **bits** the plaintext and ciphertext
131
+ are segmented in. It must be a multiple of 8.
132
+ If not specified, it will be assumed to be 8.
133
+
134
+ * **mac_len** : (*integer*) --
135
+ (Only ``MODE_EAX``)
136
+ Length of the authentication tag, in bytes.
137
+ It must be no longer than 8 (default).
138
+
139
+ * **initial_value** : (*integer*) --
140
+ (Only ``MODE_CTR``). The initial value for the counter within
141
+ the counter block. By default it is **0**.
142
+
143
+ :Return: a Blowfish object, of the applicable mode.
144
+ """
145
+
146
+ return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
147
+
148
+ MODE_ECB = 1
149
+ MODE_CBC = 2
150
+ MODE_CFB = 3
151
+ MODE_OFB = 5
152
+ MODE_CTR = 6
153
+ MODE_OPENPGP = 7
154
+ MODE_EAX = 9
155
+
156
+ # Size of a data block (in bytes)
157
+ block_size = 8
158
+ # Size of a key (in bytes)
159
+ key_size = range(4, 56 + 1)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Blowfish.pyi ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Dict, Iterable, ByteString, Optional
2
+
3
+ from Crypto.Cipher._mode_ecb import EcbMode
4
+ from Crypto.Cipher._mode_cbc import CbcMode
5
+ from Crypto.Cipher._mode_cfb import CfbMode
6
+ from Crypto.Cipher._mode_ofb import OfbMode
7
+ from Crypto.Cipher._mode_ctr import CtrMode
8
+ from Crypto.Cipher._mode_openpgp import OpenPgpMode
9
+ from Crypto.Cipher._mode_eax import EaxMode
10
+
11
+ BlowfishMode = int
12
+
13
+ MODE_ECB: BlowfishMode
14
+ MODE_CBC: BlowfishMode
15
+ MODE_CFB: BlowfishMode
16
+ MODE_OFB: BlowfishMode
17
+ MODE_CTR: BlowfishMode
18
+ MODE_OPENPGP: BlowfishMode
19
+ MODE_EAX: BlowfishMode
20
+
21
+ def new(key: ByteString,
22
+ mode: BlowfishMode,
23
+ iv : Optional[ByteString] = ...,
24
+ IV : Optional[ByteString] = ...,
25
+ nonce : Optional[ByteString] = ...,
26
+ segment_size : int = ...,
27
+ mac_len : int = ...,
28
+ initial_value : Union[int, ByteString] = ...,
29
+ counter : Dict = ...) -> \
30
+ Union[EcbMode, CbcMode, CfbMode, OfbMode, CtrMode, OpenPgpMode]: ...
31
+
32
+ block_size: int
33
+ key_size: Iterable[int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/CAST.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/CAST.py : CAST
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
+ """
23
+ Module's constants for the modes of operation supported with CAST:
24
+
25
+ :var MODE_ECB: :ref:`Electronic Code Book (ECB) <ecb_mode>`
26
+ :var MODE_CBC: :ref:`Cipher-Block Chaining (CBC) <cbc_mode>`
27
+ :var MODE_CFB: :ref:`Cipher FeedBack (CFB) <cfb_mode>`
28
+ :var MODE_OFB: :ref:`Output FeedBack (OFB) <ofb_mode>`
29
+ :var MODE_CTR: :ref:`CounTer Mode (CTR) <ctr_mode>`
30
+ :var MODE_OPENPGP: :ref:`OpenPGP Mode <openpgp_mode>`
31
+ :var MODE_EAX: :ref:`EAX Mode <eax_mode>`
32
+ """
33
+
34
+ import sys
35
+
36
+ from Crypto.Cipher import _create_cipher
37
+ from Crypto.Util.py3compat import byte_string
38
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
39
+ VoidPointer, SmartPointer,
40
+ c_size_t, c_uint8_ptr)
41
+
42
+ _raw_cast_lib = load_pycryptodome_raw_lib(
43
+ "Crypto.Cipher._raw_cast",
44
+ """
45
+ int CAST_start_operation(const uint8_t key[],
46
+ size_t key_len,
47
+ void **pResult);
48
+ int CAST_encrypt(const void *state,
49
+ const uint8_t *in,
50
+ uint8_t *out,
51
+ size_t data_len);
52
+ int CAST_decrypt(const void *state,
53
+ const uint8_t *in,
54
+ uint8_t *out,
55
+ size_t data_len);
56
+ int CAST_stop_operation(void *state);
57
+ """)
58
+
59
+
60
+ def _create_base_cipher(dict_parameters):
61
+ """This method instantiates and returns a handle to a low-level
62
+ base cipher. It will absorb named parameters in the process."""
63
+
64
+ try:
65
+ key = dict_parameters.pop("key")
66
+ except KeyError:
67
+ raise TypeError("Missing 'key' parameter")
68
+
69
+ if len(key) not in key_size:
70
+ raise ValueError("Incorrect CAST key length (%d bytes)" % len(key))
71
+
72
+ start_operation = _raw_cast_lib.CAST_start_operation
73
+ stop_operation = _raw_cast_lib.CAST_stop_operation
74
+
75
+ cipher = VoidPointer()
76
+ result = start_operation(c_uint8_ptr(key),
77
+ c_size_t(len(key)),
78
+ cipher.address_of())
79
+ if result:
80
+ raise ValueError("Error %X while instantiating the CAST cipher"
81
+ % result)
82
+
83
+ return SmartPointer(cipher.get(), stop_operation)
84
+
85
+
86
+ def new(key, mode, *args, **kwargs):
87
+ """Create a new CAST cipher
88
+
89
+ :param key:
90
+ The secret key to use in the symmetric cipher.
91
+ Its length can vary from 5 to 16 bytes.
92
+ :type key: bytes, bytearray, memoryview
93
+
94
+ :param mode:
95
+ The chaining mode to use for encryption or decryption.
96
+ :type mode: One of the supported ``MODE_*`` constants
97
+
98
+ :Keyword Arguments:
99
+ * **iv** (*bytes*, *bytearray*, *memoryview*) --
100
+ (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
101
+ and ``MODE_OPENPGP`` modes).
102
+
103
+ The initialization vector to use for encryption or decryption.
104
+
105
+ For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 8 bytes long.
106
+
107
+ For ``MODE_OPENPGP`` mode only,
108
+ it must be 8 bytes long for encryption
109
+ and 10 bytes for decryption (in the latter case, it is
110
+ actually the *encrypted* IV which was prefixed to the ciphertext).
111
+
112
+ If not provided, a random byte string is generated (you must then
113
+ read its value with the :attr:`iv` attribute).
114
+
115
+ * **nonce** (*bytes*, *bytearray*, *memoryview*) --
116
+ (Only applicable for ``MODE_EAX`` and ``MODE_CTR``).
117
+
118
+ A value that must never be reused for any other encryption done
119
+ with this key.
120
+
121
+ For ``MODE_EAX`` there are no
122
+ restrictions on its length (recommended: **16** bytes).
123
+
124
+ For ``MODE_CTR``, its length must be in the range **[0..7]**.
125
+
126
+ If not provided for ``MODE_EAX``, a random byte string is generated (you
127
+ can read it back via the ``nonce`` attribute).
128
+
129
+ * **segment_size** (*integer*) --
130
+ (Only ``MODE_CFB``).The number of **bits** the plaintext and ciphertext
131
+ are segmented in. It must be a multiple of 8.
132
+ If not specified, it will be assumed to be 8.
133
+
134
+ * **mac_len** : (*integer*) --
135
+ (Only ``MODE_EAX``)
136
+ Length of the authentication tag, in bytes.
137
+ It must be no longer than 8 (default).
138
+
139
+ * **initial_value** : (*integer*) --
140
+ (Only ``MODE_CTR``). The initial value for the counter within
141
+ the counter block. By default it is **0**.
142
+
143
+ :Return: a CAST object, of the applicable mode.
144
+ """
145
+
146
+ return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
147
+
148
+ MODE_ECB = 1
149
+ MODE_CBC = 2
150
+ MODE_CFB = 3
151
+ MODE_OFB = 5
152
+ MODE_CTR = 6
153
+ MODE_OPENPGP = 7
154
+ MODE_EAX = 9
155
+
156
+ # Size of a data block (in bytes)
157
+ block_size = 8
158
+ # Size of a key (in bytes)
159
+ key_size = range(5, 16 + 1)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/CAST.pyi ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Dict, Iterable, Optional, ByteString
2
+
3
+ from Crypto.Cipher._mode_ecb import EcbMode
4
+ from Crypto.Cipher._mode_cbc import CbcMode
5
+ from Crypto.Cipher._mode_cfb import CfbMode
6
+ from Crypto.Cipher._mode_ofb import OfbMode
7
+ from Crypto.Cipher._mode_ctr import CtrMode
8
+ from Crypto.Cipher._mode_openpgp import OpenPgpMode
9
+ from Crypto.Cipher._mode_eax import EaxMode
10
+
11
+ CASTMode = int
12
+
13
+ MODE_ECB: CASTMode
14
+ MODE_CBC: CASTMode
15
+ MODE_CFB: CASTMode
16
+ MODE_OFB: CASTMode
17
+ MODE_CTR: CASTMode
18
+ MODE_OPENPGP: CASTMode
19
+ MODE_EAX: CASTMode
20
+
21
+ def new(key: ByteString,
22
+ mode: CASTMode,
23
+ iv : Optional[ByteString] = ...,
24
+ IV : Optional[ByteString] = ...,
25
+ nonce : Optional[ByteString] = ...,
26
+ segment_size : int = ...,
27
+ mac_len : int = ...,
28
+ initial_value : Union[int, ByteString] = ...,
29
+ counter : Dict = ...) -> \
30
+ Union[EcbMode, CbcMode, CfbMode, OfbMode, CtrMode, OpenPgpMode]: ...
31
+
32
+ block_size: int
33
+ key_size : Iterable[int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20.py ADDED
@@ -0,0 +1,287 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ===================================================================
2
+ #
3
+ # Copyright (c) 2014, Legrandin <helderijs@gmail.com>
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # 2. Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in
14
+ # the documentation and/or other materials provided with the
15
+ # distribution.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
+ # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27
+ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ # POSSIBILITY OF SUCH DAMAGE.
29
+ # ===================================================================
30
+
31
+ from Crypto.Random import get_random_bytes
32
+
33
+ from Crypto.Util.py3compat import _copy_bytes
34
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
35
+ create_string_buffer,
36
+ get_raw_buffer, VoidPointer,
37
+ SmartPointer, c_size_t,
38
+ c_uint8_ptr, c_ulong,
39
+ is_writeable_buffer)
40
+
41
+ _raw_chacha20_lib = load_pycryptodome_raw_lib("Crypto.Cipher._chacha20",
42
+ """
43
+ int chacha20_init(void **pState,
44
+ const uint8_t *key,
45
+ size_t keySize,
46
+ const uint8_t *nonce,
47
+ size_t nonceSize);
48
+
49
+ int chacha20_destroy(void *state);
50
+
51
+ int chacha20_encrypt(void *state,
52
+ const uint8_t in[],
53
+ uint8_t out[],
54
+ size_t len);
55
+
56
+ int chacha20_seek(void *state,
57
+ unsigned long block_high,
58
+ unsigned long block_low,
59
+ unsigned offset);
60
+ int hchacha20( const uint8_t key[32],
61
+ const uint8_t nonce16[16],
62
+ uint8_t subkey[32]);
63
+ """)
64
+
65
+
66
+ def _HChaCha20(key, nonce):
67
+
68
+ assert(len(key) == 32)
69
+ assert(len(nonce) == 16)
70
+
71
+ subkey = bytearray(32)
72
+ result = _raw_chacha20_lib.hchacha20(
73
+ c_uint8_ptr(key),
74
+ c_uint8_ptr(nonce),
75
+ c_uint8_ptr(subkey))
76
+ if result:
77
+ raise ValueError("Error %d when deriving subkey with HChaCha20" % result)
78
+
79
+ return subkey
80
+
81
+
82
+ class ChaCha20Cipher(object):
83
+ """ChaCha20 (or XChaCha20) cipher object.
84
+ Do not create it directly. Use :py:func:`new` instead.
85
+
86
+ :var nonce: The nonce with length 8, 12 or 24 bytes
87
+ :vartype nonce: bytes
88
+ """
89
+
90
+ block_size = 1
91
+
92
+ def __init__(self, key, nonce):
93
+ """Initialize a ChaCha20/XChaCha20 cipher object
94
+
95
+ See also `new()` at the module level."""
96
+
97
+ self.nonce = _copy_bytes(None, None, nonce)
98
+
99
+ # XChaCha20 requires a key derivation with HChaCha20
100
+ # See 2.3 in https://tools.ietf.org/html/draft-arciszewski-xchacha-03
101
+ if len(nonce) == 24:
102
+ key = _HChaCha20(key, nonce[:16])
103
+ nonce = b'\x00' * 4 + nonce[16:]
104
+ self._name = "XChaCha20"
105
+ else:
106
+ self._name = "ChaCha20"
107
+ nonce = self.nonce
108
+
109
+ self._next = ("encrypt", "decrypt")
110
+
111
+ self._state = VoidPointer()
112
+ result = _raw_chacha20_lib.chacha20_init(
113
+ self._state.address_of(),
114
+ c_uint8_ptr(key),
115
+ c_size_t(len(key)),
116
+ nonce,
117
+ c_size_t(len(nonce)))
118
+ if result:
119
+ raise ValueError("Error %d instantiating a %s cipher" % (result,
120
+ self._name))
121
+ self._state = SmartPointer(self._state.get(),
122
+ _raw_chacha20_lib.chacha20_destroy)
123
+
124
+ def encrypt(self, plaintext, output=None):
125
+ """Encrypt a piece of data.
126
+
127
+ Args:
128
+ plaintext(bytes/bytearray/memoryview): The data to encrypt, of any size.
129
+ Keyword Args:
130
+ output(bytes/bytearray/memoryview): The location where the ciphertext
131
+ is written to. If ``None``, the ciphertext is returned.
132
+ Returns:
133
+ If ``output`` is ``None``, the ciphertext is returned as ``bytes``.
134
+ Otherwise, ``None``.
135
+ """
136
+
137
+ if "encrypt" not in self._next:
138
+ raise TypeError("Cipher object can only be used for decryption")
139
+ self._next = ("encrypt",)
140
+ return self._encrypt(plaintext, output)
141
+
142
+ def _encrypt(self, plaintext, output):
143
+ """Encrypt without FSM checks"""
144
+
145
+ if output is None:
146
+ ciphertext = create_string_buffer(len(plaintext))
147
+ else:
148
+ ciphertext = output
149
+
150
+ if not is_writeable_buffer(output):
151
+ raise TypeError("output must be a bytearray or a writeable memoryview")
152
+
153
+ if len(plaintext) != len(output):
154
+ raise ValueError("output must have the same length as the input"
155
+ " (%d bytes)" % len(plaintext))
156
+
157
+ result = _raw_chacha20_lib.chacha20_encrypt(
158
+ self._state.get(),
159
+ c_uint8_ptr(plaintext),
160
+ c_uint8_ptr(ciphertext),
161
+ c_size_t(len(plaintext)))
162
+ if result:
163
+ raise ValueError("Error %d while encrypting with %s" % (result, self._name))
164
+
165
+ if output is None:
166
+ return get_raw_buffer(ciphertext)
167
+ else:
168
+ return None
169
+
170
+ def decrypt(self, ciphertext, output=None):
171
+ """Decrypt a piece of data.
172
+
173
+ Args:
174
+ ciphertext(bytes/bytearray/memoryview): The data to decrypt, of any size.
175
+ Keyword Args:
176
+ output(bytes/bytearray/memoryview): The location where the plaintext
177
+ is written to. If ``None``, the plaintext is returned.
178
+ Returns:
179
+ If ``output`` is ``None``, the plaintext is returned as ``bytes``.
180
+ Otherwise, ``None``.
181
+ """
182
+
183
+ if "decrypt" not in self._next:
184
+ raise TypeError("Cipher object can only be used for encryption")
185
+ self._next = ("decrypt",)
186
+
187
+ try:
188
+ return self._encrypt(ciphertext, output)
189
+ except ValueError as e:
190
+ raise ValueError(str(e).replace("enc", "dec"))
191
+
192
+ def seek(self, position):
193
+ """Seek to a certain position in the key stream.
194
+
195
+ Args:
196
+ position (integer):
197
+ The absolute position within the key stream, in bytes.
198
+ """
199
+
200
+ position, offset = divmod(position, 64)
201
+ block_low = position & 0xFFFFFFFF
202
+ block_high = position >> 32
203
+
204
+ result = _raw_chacha20_lib.chacha20_seek(
205
+ self._state.get(),
206
+ c_ulong(block_high),
207
+ c_ulong(block_low),
208
+ offset
209
+ )
210
+ if result:
211
+ raise ValueError("Error %d while seeking with %s" % (result, self._name))
212
+
213
+
214
+ def _derive_Poly1305_key_pair(key, nonce):
215
+ """Derive a tuple (r, s, nonce) for a Poly1305 MAC.
216
+
217
+ If nonce is ``None``, a new 12-byte nonce is generated.
218
+ """
219
+
220
+ if len(key) != 32:
221
+ raise ValueError("Poly1305 with ChaCha20 requires a 32-byte key")
222
+
223
+ if nonce is None:
224
+ padded_nonce = nonce = get_random_bytes(12)
225
+ elif len(nonce) == 8:
226
+ # See RFC7538, 2.6: [...] ChaCha20 as specified here requires a 96-bit
227
+ # nonce. So if the provided nonce is only 64-bit, then the first 32
228
+ # bits of the nonce will be set to a constant number.
229
+ # This will usually be zero, but for protocols with multiple senders it may be
230
+ # different for each sender, but should be the same for all
231
+ # invocations of the function with the same key by a particular
232
+ # sender.
233
+ padded_nonce = b'\x00\x00\x00\x00' + nonce
234
+ elif len(nonce) == 12:
235
+ padded_nonce = nonce
236
+ else:
237
+ raise ValueError("Poly1305 with ChaCha20 requires an 8- or 12-byte nonce")
238
+
239
+ rs = new(key=key, nonce=padded_nonce).encrypt(b'\x00' * 32)
240
+ return rs[:16], rs[16:], nonce
241
+
242
+
243
+ def new(**kwargs):
244
+ """Create a new ChaCha20 or XChaCha20 cipher
245
+
246
+ Keyword Args:
247
+ key (bytes/bytearray/memoryview): The secret key to use.
248
+ It must be 32 bytes long.
249
+ nonce (bytes/bytearray/memoryview): A mandatory value that
250
+ must never be reused for any other encryption
251
+ done with this key.
252
+
253
+ For ChaCha20, it must be 8 or 12 bytes long.
254
+
255
+ For XChaCha20, it must be 24 bytes long.
256
+
257
+ If not provided, 8 bytes will be randomly generated
258
+ (you can find them back in the ``nonce`` attribute).
259
+
260
+ :Return: a :class:`Crypto.Cipher.ChaCha20.ChaCha20Cipher` object
261
+ """
262
+
263
+ try:
264
+ key = kwargs.pop("key")
265
+ except KeyError as e:
266
+ raise TypeError("Missing parameter %s" % e)
267
+
268
+ nonce = kwargs.pop("nonce", None)
269
+ if nonce is None:
270
+ nonce = get_random_bytes(8)
271
+
272
+ if len(key) != 32:
273
+ raise ValueError("ChaCha20/XChaCha20 key must be 32 bytes long")
274
+
275
+ if len(nonce) not in (8, 12, 24):
276
+ raise ValueError("Nonce must be 8/12 bytes(ChaCha20) or 24 bytes (XChaCha20)")
277
+
278
+ if kwargs:
279
+ raise TypeError("Unknown parameters: " + str(kwargs))
280
+
281
+ return ChaCha20Cipher(key, nonce)
282
+
283
+ # Size of a data block (in bytes)
284
+ block_size = 1
285
+
286
+ # Size of a key (in bytes)
287
+ key_size = 32
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20.pyi ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, overload, ByteString, Optional
2
+
3
+ def _HChaCha20(key: ByteString, nonce: ByteString) -> bytearray: ...
4
+
5
+ class ChaCha20Cipher:
6
+ block_size: int
7
+ nonce: bytes
8
+
9
+ def __init__(self, key: ByteString, nonce: ByteString) -> None: ...
10
+ @overload
11
+ def encrypt(self, plaintext: ByteString) -> bytes: ...
12
+ @overload
13
+ def encrypt(self, plaintext: ByteString, output: Union[bytearray, memoryview]) -> None: ...
14
+ @overload
15
+ def decrypt(self, plaintext: ByteString) -> bytes: ...
16
+ @overload
17
+ def decrypt(self, plaintext: ByteString, output: Union[bytearray, memoryview]) -> None: ...
18
+ def seek(self, position: int) -> None: ...
19
+
20
+ def new(key: ByteString, nonce: Optional[ByteString] = ...) -> ChaCha20Cipher: ...
21
+
22
+ block_size: int
23
+ key_size: int
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20_Poly1305.py ADDED
@@ -0,0 +1,336 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ===================================================================
2
+ #
3
+ # Copyright (c) 2018, Helder Eijs <helderijs@gmail.com>
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # 2. Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in
14
+ # the documentation and/or other materials provided with the
15
+ # distribution.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
+ # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27
+ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ # POSSIBILITY OF SUCH DAMAGE.
29
+ # ===================================================================
30
+
31
+ from binascii import unhexlify
32
+
33
+ from Crypto.Cipher import ChaCha20
34
+ from Crypto.Cipher.ChaCha20 import _HChaCha20
35
+ from Crypto.Hash import Poly1305, BLAKE2s
36
+
37
+ from Crypto.Random import get_random_bytes
38
+
39
+ from Crypto.Util.number import long_to_bytes
40
+ from Crypto.Util.py3compat import _copy_bytes, bord
41
+ from Crypto.Util._raw_api import is_buffer
42
+
43
+
44
+ def _enum(**enums):
45
+ return type('Enum', (), enums)
46
+
47
+
48
+ _CipherStatus = _enum(PROCESSING_AUTH_DATA=1,
49
+ PROCESSING_CIPHERTEXT=2,
50
+ PROCESSING_DONE=3)
51
+
52
+
53
+ class ChaCha20Poly1305Cipher(object):
54
+ """ChaCha20-Poly1305 and XChaCha20-Poly1305 cipher object.
55
+ Do not create it directly. Use :py:func:`new` instead.
56
+
57
+ :var nonce: The nonce with length 8, 12 or 24 bytes
58
+ :vartype nonce: byte string
59
+ """
60
+
61
+ def __init__(self, key, nonce):
62
+ """Initialize a ChaCha20-Poly1305 AEAD cipher object
63
+
64
+ See also `new()` at the module level."""
65
+
66
+ self.nonce = _copy_bytes(None, None, nonce)
67
+
68
+ self._next = ("update", "encrypt", "decrypt", "digest",
69
+ "verify")
70
+
71
+ self._authenticator = Poly1305.new(key=key, nonce=nonce, cipher=ChaCha20)
72
+
73
+ self._cipher = ChaCha20.new(key=key, nonce=nonce)
74
+ self._cipher.seek(64) # Block counter starts at 1
75
+
76
+ self._len_aad = 0
77
+ self._len_ct = 0
78
+ self._mac_tag = None
79
+ self._status = _CipherStatus.PROCESSING_AUTH_DATA
80
+
81
+ def update(self, data):
82
+ """Protect the associated data.
83
+
84
+ Associated data (also known as *additional authenticated data* - AAD)
85
+ is the piece of the message that must stay in the clear, while
86
+ still allowing the receiver to verify its integrity.
87
+ An example is packet headers.
88
+
89
+ The associated data (possibly split into multiple segments) is
90
+ fed into :meth:`update` before any call to :meth:`decrypt` or :meth:`encrypt`.
91
+ If there is no associated data, :meth:`update` is not called.
92
+
93
+ :param bytes/bytearray/memoryview assoc_data:
94
+ A piece of associated data. There are no restrictions on its size.
95
+ """
96
+
97
+ if "update" not in self._next:
98
+ raise TypeError("update() method cannot be called")
99
+
100
+ self._len_aad += len(data)
101
+ self._authenticator.update(data)
102
+
103
+ def _pad_aad(self):
104
+
105
+ assert(self._status == _CipherStatus.PROCESSING_AUTH_DATA)
106
+ if self._len_aad & 0x0F:
107
+ self._authenticator.update(b'\x00' * (16 - (self._len_aad & 0x0F)))
108
+ self._status = _CipherStatus.PROCESSING_CIPHERTEXT
109
+
110
+ def encrypt(self, plaintext, output=None):
111
+ """Encrypt a piece of data.
112
+
113
+ Args:
114
+ plaintext(bytes/bytearray/memoryview): The data to encrypt, of any size.
115
+ Keyword Args:
116
+ output(bytes/bytearray/memoryview): The location where the ciphertext
117
+ is written to. If ``None``, the ciphertext is returned.
118
+ Returns:
119
+ If ``output`` is ``None``, the ciphertext is returned as ``bytes``.
120
+ Otherwise, ``None``.
121
+ """
122
+
123
+ if "encrypt" not in self._next:
124
+ raise TypeError("encrypt() method cannot be called")
125
+
126
+ if self._status == _CipherStatus.PROCESSING_AUTH_DATA:
127
+ self._pad_aad()
128
+
129
+ self._next = ("encrypt", "digest")
130
+
131
+ result = self._cipher.encrypt(plaintext, output=output)
132
+ self._len_ct += len(plaintext)
133
+ if output is None:
134
+ self._authenticator.update(result)
135
+ else:
136
+ self._authenticator.update(output)
137
+ return result
138
+
139
+ def decrypt(self, ciphertext, output=None):
140
+ """Decrypt a piece of data.
141
+
142
+ Args:
143
+ ciphertext(bytes/bytearray/memoryview): The data to decrypt, of any size.
144
+ Keyword Args:
145
+ output(bytes/bytearray/memoryview): The location where the plaintext
146
+ is written to. If ``None``, the plaintext is returned.
147
+ Returns:
148
+ If ``output`` is ``None``, the plaintext is returned as ``bytes``.
149
+ Otherwise, ``None``.
150
+ """
151
+
152
+ if "decrypt" not in self._next:
153
+ raise TypeError("decrypt() method cannot be called")
154
+
155
+ if self._status == _CipherStatus.PROCESSING_AUTH_DATA:
156
+ self._pad_aad()
157
+
158
+ self._next = ("decrypt", "verify")
159
+
160
+ self._len_ct += len(ciphertext)
161
+ self._authenticator.update(ciphertext)
162
+ return self._cipher.decrypt(ciphertext, output=output)
163
+
164
+ def _compute_mac(self):
165
+ """Finalize the cipher (if not done already) and return the MAC."""
166
+
167
+ if self._mac_tag:
168
+ assert(self._status == _CipherStatus.PROCESSING_DONE)
169
+ return self._mac_tag
170
+
171
+ assert(self._status != _CipherStatus.PROCESSING_DONE)
172
+
173
+ if self._status == _CipherStatus.PROCESSING_AUTH_DATA:
174
+ self._pad_aad()
175
+
176
+ if self._len_ct & 0x0F:
177
+ self._authenticator.update(b'\x00' * (16 - (self._len_ct & 0x0F)))
178
+
179
+ self._status = _CipherStatus.PROCESSING_DONE
180
+
181
+ self._authenticator.update(long_to_bytes(self._len_aad, 8)[::-1])
182
+ self._authenticator.update(long_to_bytes(self._len_ct, 8)[::-1])
183
+ self._mac_tag = self._authenticator.digest()
184
+ return self._mac_tag
185
+
186
+ def digest(self):
187
+ """Compute the *binary* authentication tag (MAC).
188
+
189
+ :Return: the MAC tag, as 16 ``bytes``.
190
+ """
191
+
192
+ if "digest" not in self._next:
193
+ raise TypeError("digest() method cannot be called")
194
+ self._next = ("digest",)
195
+
196
+ return self._compute_mac()
197
+
198
+ def hexdigest(self):
199
+ """Compute the *printable* authentication tag (MAC).
200
+
201
+ This method is like :meth:`digest`.
202
+
203
+ :Return: the MAC tag, as a hexadecimal string.
204
+ """
205
+ return "".join(["%02x" % bord(x) for x in self.digest()])
206
+
207
+ def verify(self, received_mac_tag):
208
+ """Validate the *binary* authentication tag (MAC).
209
+
210
+ The receiver invokes this method at the very end, to
211
+ check if the associated data (if any) and the decrypted
212
+ messages are valid.
213
+
214
+ :param bytes/bytearray/memoryview received_mac_tag:
215
+ This is the 16-byte *binary* MAC, as received from the sender.
216
+ :Raises ValueError:
217
+ if the MAC does not match. The message has been tampered with
218
+ or the key is incorrect.
219
+ """
220
+
221
+ if "verify" not in self._next:
222
+ raise TypeError("verify() cannot be called"
223
+ " when encrypting a message")
224
+ self._next = ("verify",)
225
+
226
+ secret = get_random_bytes(16)
227
+
228
+ self._compute_mac()
229
+
230
+ mac1 = BLAKE2s.new(digest_bits=160, key=secret,
231
+ data=self._mac_tag)
232
+ mac2 = BLAKE2s.new(digest_bits=160, key=secret,
233
+ data=received_mac_tag)
234
+
235
+ if mac1.digest() != mac2.digest():
236
+ raise ValueError("MAC check failed")
237
+
238
+ def hexverify(self, hex_mac_tag):
239
+ """Validate the *printable* authentication tag (MAC).
240
+
241
+ This method is like :meth:`verify`.
242
+
243
+ :param string hex_mac_tag:
244
+ This is the *printable* MAC.
245
+ :Raises ValueError:
246
+ if the MAC does not match. The message has been tampered with
247
+ or the key is incorrect.
248
+ """
249
+
250
+ self.verify(unhexlify(hex_mac_tag))
251
+
252
+ def encrypt_and_digest(self, plaintext):
253
+ """Perform :meth:`encrypt` and :meth:`digest` in one step.
254
+
255
+ :param plaintext: The data to encrypt, of any size.
256
+ :type plaintext: bytes/bytearray/memoryview
257
+ :return: a tuple with two ``bytes`` objects:
258
+
259
+ - the ciphertext, of equal length as the plaintext
260
+ - the 16-byte MAC tag
261
+ """
262
+
263
+ return self.encrypt(plaintext), self.digest()
264
+
265
+ def decrypt_and_verify(self, ciphertext, received_mac_tag):
266
+ """Perform :meth:`decrypt` and :meth:`verify` in one step.
267
+
268
+ :param ciphertext: The piece of data to decrypt.
269
+ :type ciphertext: bytes/bytearray/memoryview
270
+ :param bytes received_mac_tag:
271
+ This is the 16-byte *binary* MAC, as received from the sender.
272
+ :return: the decrypted data (as ``bytes``)
273
+ :raises ValueError:
274
+ if the MAC does not match. The message has been tampered with
275
+ or the key is incorrect.
276
+ """
277
+
278
+ plaintext = self.decrypt(ciphertext)
279
+ self.verify(received_mac_tag)
280
+ return plaintext
281
+
282
+
283
+ def new(**kwargs):
284
+ """Create a new ChaCha20-Poly1305 or XChaCha20-Poly1305 AEAD cipher.
285
+
286
+ :keyword key: The secret key to use. It must be 32 bytes long.
287
+ :type key: byte string
288
+
289
+ :keyword nonce:
290
+ A value that must never be reused for any other encryption
291
+ done with this key.
292
+
293
+ For ChaCha20-Poly1305, it must be 8 or 12 bytes long.
294
+
295
+ For XChaCha20-Poly1305, it must be 24 bytes long.
296
+
297
+ If not provided, 12 ``bytes`` will be generated randomly
298
+ (you can find them back in the ``nonce`` attribute).
299
+ :type nonce: bytes, bytearray, memoryview
300
+
301
+ :Return: a :class:`Crypto.Cipher.ChaCha20.ChaCha20Poly1305Cipher` object
302
+ """
303
+
304
+ try:
305
+ key = kwargs.pop("key")
306
+ except KeyError as e:
307
+ raise TypeError("Missing parameter %s" % e)
308
+
309
+ self._len_ct += len(plaintext)
310
+
311
+ if len(key) != 32:
312
+ raise ValueError("Key must be 32 bytes long")
313
+
314
+ nonce = kwargs.pop("nonce", None)
315
+ if nonce is None:
316
+ nonce = get_random_bytes(12)
317
+
318
+ if len(nonce) in (8, 12):
319
+ pass
320
+ elif len(nonce) == 24:
321
+ key = _HChaCha20(key, nonce[:16])
322
+ nonce = b'\x00\x00\x00\x00' + nonce[16:]
323
+ else:
324
+ raise ValueError("Nonce must be 8, 12 or 24 bytes long")
325
+
326
+ if not is_buffer(nonce):
327
+ raise TypeError("nonce must be bytes, bytearray or memoryview")
328
+
329
+ if kwargs:
330
+ raise TypeError("Unknown parameters: " + str(kwargs))
331
+
332
+ return ChaCha20Poly1305Cipher(key, nonce)
333
+
334
+
335
+ # Size of a key (in bytes)
336
+ key_size = 32
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/ChaCha20_Poly1305.pyi ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Tuple, overload, ByteString, Optional
2
+
3
+ class ChaCha20Poly1305Cipher:
4
+ nonce: bytes
5
+
6
+ def __init__(self, key: ByteString, nonce: ByteString) -> None: ...
7
+ def update(self, data: ByteString) -> None: ...
8
+ @overload
9
+ def encrypt(self, plaintext: ByteString) -> bytes: ...
10
+ @overload
11
+ def encrypt(self, plaintext: ByteString, output: Union[bytearray, memoryview]) -> None: ...
12
+ @overload
13
+ def decrypt(self, plaintext: ByteString) -> bytes: ...
14
+ @overload
15
+ def decrypt(self, plaintext: ByteString, output: Union[bytearray, memoryview]) -> None: ...
16
+ def digest(self) -> bytes: ...
17
+ def hexdigest(self) -> str: ...
18
+ def verify(self, received_mac_tag: ByteString) -> None: ...
19
+ def hexverify(self, received_mac_tag: str) -> None: ...
20
+ def encrypt_and_digest(self, plaintext: ByteString) -> Tuple[bytes, bytes]: ...
21
+ def decrypt_and_verify(self, ciphertext: ByteString, received_mac_tag: ByteString) -> bytes: ...
22
+
23
+ def new(key: ByteString, nonce: Optional[ByteString] = ...) -> ChaCha20Poly1305Cipher: ...
24
+
25
+ block_size: int
26
+ key_size: int
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/DES.py : DES
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
+ """
23
+ Module's constants for the modes of operation supported with Single DES:
24
+
25
+ :var MODE_ECB: :ref:`Electronic Code Book (ECB) <ecb_mode>`
26
+ :var MODE_CBC: :ref:`Cipher-Block Chaining (CBC) <cbc_mode>`
27
+ :var MODE_CFB: :ref:`Cipher FeedBack (CFB) <cfb_mode>`
28
+ :var MODE_OFB: :ref:`Output FeedBack (OFB) <ofb_mode>`
29
+ :var MODE_CTR: :ref:`CounTer Mode (CTR) <ctr_mode>`
30
+ :var MODE_OPENPGP: :ref:`OpenPGP Mode <openpgp_mode>`
31
+ :var MODE_EAX: :ref:`EAX Mode <eax_mode>`
32
+ """
33
+
34
+ import sys
35
+
36
+ from Crypto.Cipher import _create_cipher
37
+ from Crypto.Util.py3compat import byte_string
38
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
39
+ VoidPointer, SmartPointer,
40
+ c_size_t, c_uint8_ptr)
41
+
42
+ _raw_des_lib = load_pycryptodome_raw_lib(
43
+ "Crypto.Cipher._raw_des",
44
+ """
45
+ int DES_start_operation(const uint8_t key[],
46
+ size_t key_len,
47
+ void **pResult);
48
+ int DES_encrypt(const void *state,
49
+ const uint8_t *in,
50
+ uint8_t *out,
51
+ size_t data_len);
52
+ int DES_decrypt(const void *state,
53
+ const uint8_t *in,
54
+ uint8_t *out,
55
+ size_t data_len);
56
+ int DES_stop_operation(void *state);
57
+ """)
58
+
59
+
60
+ def _create_base_cipher(dict_parameters):
61
+ """This method instantiates and returns a handle to a low-level
62
+ base cipher. It will absorb named parameters in the process."""
63
+
64
+ try:
65
+ key = dict_parameters.pop("key")
66
+ except KeyError:
67
+ raise TypeError("Missing 'key' parameter")
68
+
69
+ if len(key) != key_size:
70
+ raise ValueError("Incorrect DES key length (%d bytes)" % len(key))
71
+
72
+ start_operation = _raw_des_lib.DES_start_operation
73
+ stop_operation = _raw_des_lib.DES_stop_operation
74
+
75
+ cipher = VoidPointer()
76
+ result = start_operation(c_uint8_ptr(key),
77
+ c_size_t(len(key)),
78
+ cipher.address_of())
79
+ if result:
80
+ raise ValueError("Error %X while instantiating the DES cipher"
81
+ % result)
82
+ return SmartPointer(cipher.get(), stop_operation)
83
+
84
+
85
+ def new(key, mode, *args, **kwargs):
86
+ """Create a new DES cipher.
87
+
88
+ :param key:
89
+ The secret key to use in the symmetric cipher.
90
+ It must be 8 byte long. The parity bits will be ignored.
91
+ :type key: bytes/bytearray/memoryview
92
+
93
+ :param mode:
94
+ The chaining mode to use for encryption or decryption.
95
+ :type mode: One of the supported ``MODE_*`` constants
96
+
97
+ :Keyword Arguments:
98
+ * **iv** (*byte string*) --
99
+ (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
100
+ and ``MODE_OPENPGP`` modes).
101
+
102
+ The initialization vector to use for encryption or decryption.
103
+
104
+ For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 8 bytes long.
105
+
106
+ For ``MODE_OPENPGP`` mode only,
107
+ it must be 8 bytes long for encryption
108
+ and 10 bytes for decryption (in the latter case, it is
109
+ actually the *encrypted* IV which was prefixed to the ciphertext).
110
+
111
+ If not provided, a random byte string is generated (you must then
112
+ read its value with the :attr:`iv` attribute).
113
+
114
+ * **nonce** (*byte string*) --
115
+ (Only applicable for ``MODE_EAX`` and ``MODE_CTR``).
116
+
117
+ A value that must never be reused for any other encryption done
118
+ with this key.
119
+
120
+ For ``MODE_EAX`` there are no
121
+ restrictions on its length (recommended: **16** bytes).
122
+
123
+ For ``MODE_CTR``, its length must be in the range **[0..7]**.
124
+
125
+ If not provided for ``MODE_EAX``, a random byte string is generated (you
126
+ can read it back via the ``nonce`` attribute).
127
+
128
+ * **segment_size** (*integer*) --
129
+ (Only ``MODE_CFB``).The number of **bits** the plaintext and ciphertext
130
+ are segmented in. It must be a multiple of 8.
131
+ If not specified, it will be assumed to be 8.
132
+
133
+ * **mac_len** : (*integer*) --
134
+ (Only ``MODE_EAX``)
135
+ Length of the authentication tag, in bytes.
136
+ It must be no longer than 8 (default).
137
+
138
+ * **initial_value** : (*integer*) --
139
+ (Only ``MODE_CTR``). The initial value for the counter within
140
+ the counter block. By default it is **0**.
141
+
142
+ :Return: a DES object, of the applicable mode.
143
+ """
144
+
145
+ return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
146
+
147
+ MODE_ECB = 1
148
+ MODE_CBC = 2
149
+ MODE_CFB = 3
150
+ MODE_OFB = 5
151
+ MODE_CTR = 6
152
+ MODE_OPENPGP = 7
153
+ MODE_EAX = 9
154
+
155
+ # Size of a data block (in bytes)
156
+ block_size = 8
157
+ # Size of a key (in bytes)
158
+ key_size = 8
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES.pyi ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Dict, Iterable, ByteString, Optional
2
+
3
+ from Crypto.Cipher._mode_ecb import EcbMode
4
+ from Crypto.Cipher._mode_cbc import CbcMode
5
+ from Crypto.Cipher._mode_cfb import CfbMode
6
+ from Crypto.Cipher._mode_ofb import OfbMode
7
+ from Crypto.Cipher._mode_ctr import CtrMode
8
+ from Crypto.Cipher._mode_openpgp import OpenPgpMode
9
+ from Crypto.Cipher._mode_eax import EaxMode
10
+
11
+ DESMode = int
12
+
13
+ MODE_ECB: DESMode
14
+ MODE_CBC: DESMode
15
+ MODE_CFB: DESMode
16
+ MODE_OFB: DESMode
17
+ MODE_CTR: DESMode
18
+ MODE_OPENPGP: DESMode
19
+ MODE_EAX: DESMode
20
+
21
+ def new(key: ByteString,
22
+ mode: DESMode,
23
+ iv : Optional[ByteString] = ...,
24
+ IV : Optional[ByteString] = ...,
25
+ nonce : Optional[ByteString] = ...,
26
+ segment_size : int = ...,
27
+ mac_len : int = ...,
28
+ initial_value : Union[int, ByteString] = ...,
29
+ counter : Dict = ...) -> \
30
+ Union[EcbMode, CbcMode, CfbMode, OfbMode, CtrMode, OpenPgpMode]: ...
31
+
32
+ block_size: int
33
+ key_size: int
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES3.py ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/DES3.py : DES3
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
+ """
23
+ Module's constants for the modes of operation supported with Triple DES:
24
+
25
+ :var MODE_ECB: :ref:`Electronic Code Book (ECB) <ecb_mode>`
26
+ :var MODE_CBC: :ref:`Cipher-Block Chaining (CBC) <cbc_mode>`
27
+ :var MODE_CFB: :ref:`Cipher FeedBack (CFB) <cfb_mode>`
28
+ :var MODE_OFB: :ref:`Output FeedBack (OFB) <ofb_mode>`
29
+ :var MODE_CTR: :ref:`CounTer Mode (CTR) <ctr_mode>`
30
+ :var MODE_OPENPGP: :ref:`OpenPGP Mode <openpgp_mode>`
31
+ :var MODE_EAX: :ref:`EAX Mode <eax_mode>`
32
+ """
33
+
34
+ import sys
35
+
36
+ from Crypto.Cipher import _create_cipher
37
+ from Crypto.Util.py3compat import byte_string, bchr, bord, bstr
38
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
39
+ VoidPointer, SmartPointer,
40
+ c_size_t)
41
+
42
+ _raw_des3_lib = load_pycryptodome_raw_lib(
43
+ "Crypto.Cipher._raw_des3",
44
+ """
45
+ int DES3_start_operation(const uint8_t key[],
46
+ size_t key_len,
47
+ void **pResult);
48
+ int DES3_encrypt(const void *state,
49
+ const uint8_t *in,
50
+ uint8_t *out,
51
+ size_t data_len);
52
+ int DES3_decrypt(const void *state,
53
+ const uint8_t *in,
54
+ uint8_t *out,
55
+ size_t data_len);
56
+ int DES3_stop_operation(void *state);
57
+ """)
58
+
59
+
60
+ def adjust_key_parity(key_in):
61
+ """Set the parity bits in a TDES key.
62
+
63
+ :param key_in: the TDES key whose bits need to be adjusted
64
+ :type key_in: byte string
65
+
66
+ :returns: a copy of ``key_in``, with the parity bits correctly set
67
+ :rtype: byte string
68
+
69
+ :raises ValueError: if the TDES key is not 16 or 24 bytes long
70
+ :raises ValueError: if the TDES key degenerates into Single DES
71
+ """
72
+
73
+ def parity_byte(key_byte):
74
+ parity = 1
75
+ for i in range(1, 8):
76
+ parity ^= (key_byte >> i) & 1
77
+ return (key_byte & 0xFE) | parity
78
+
79
+ if len(key_in) not in key_size:
80
+ raise ValueError("Not a valid TDES key")
81
+
82
+ key_out = b"".join([ bchr(parity_byte(bord(x))) for x in key_in ])
83
+
84
+ if key_out[:8] == key_out[8:16] or key_out[-16:-8] == key_out[-8:]:
85
+ raise ValueError("Triple DES key degenerates to single DES")
86
+
87
+ return key_out
88
+
89
+
90
+ def _create_base_cipher(dict_parameters):
91
+ """This method instantiates and returns a handle to a low-level base cipher.
92
+ It will absorb named parameters in the process."""
93
+
94
+ try:
95
+ key_in = dict_parameters.pop("key")
96
+ except KeyError:
97
+ raise TypeError("Missing 'key' parameter")
98
+
99
+ key = adjust_key_parity(bstr(key_in))
100
+
101
+ start_operation = _raw_des3_lib.DES3_start_operation
102
+ stop_operation = _raw_des3_lib.DES3_stop_operation
103
+
104
+ cipher = VoidPointer()
105
+ result = start_operation(key,
106
+ c_size_t(len(key)),
107
+ cipher.address_of())
108
+ if result:
109
+ raise ValueError("Error %X while instantiating the TDES cipher"
110
+ % result)
111
+ return SmartPointer(cipher.get(), stop_operation)
112
+
113
+
114
+ def new(key, mode, *args, **kwargs):
115
+ """Create a new Triple DES cipher.
116
+
117
+ :param key:
118
+ The secret key to use in the symmetric cipher.
119
+ It must be 16 or 24 byte long. The parity bits will be ignored.
120
+ :type key: bytes/bytearray/memoryview
121
+
122
+ :param mode:
123
+ The chaining mode to use for encryption or decryption.
124
+ :type mode: One of the supported ``MODE_*`` constants
125
+
126
+ :Keyword Arguments:
127
+ * **iv** (*bytes*, *bytearray*, *memoryview*) --
128
+ (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
129
+ and ``MODE_OPENPGP`` modes).
130
+
131
+ The initialization vector to use for encryption or decryption.
132
+
133
+ For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 8 bytes long.
134
+
135
+ For ``MODE_OPENPGP`` mode only,
136
+ it must be 8 bytes long for encryption
137
+ and 10 bytes for decryption (in the latter case, it is
138
+ actually the *encrypted* IV which was prefixed to the ciphertext).
139
+
140
+ If not provided, a random byte string is generated (you must then
141
+ read its value with the :attr:`iv` attribute).
142
+
143
+ * **nonce** (*bytes*, *bytearray*, *memoryview*) --
144
+ (Only applicable for ``MODE_EAX`` and ``MODE_CTR``).
145
+
146
+ A value that must never be reused for any other encryption done
147
+ with this key.
148
+
149
+ For ``MODE_EAX`` there are no
150
+ restrictions on its length (recommended: **16** bytes).
151
+
152
+ For ``MODE_CTR``, its length must be in the range **[0..7]**.
153
+
154
+ If not provided for ``MODE_EAX``, a random byte string is generated (you
155
+ can read it back via the ``nonce`` attribute).
156
+
157
+ * **segment_size** (*integer*) --
158
+ (Only ``MODE_CFB``).The number of **bits** the plaintext and ciphertext
159
+ are segmented in. It must be a multiple of 8.
160
+ If not specified, it will be assumed to be 8.
161
+
162
+ * **mac_len** : (*integer*) --
163
+ (Only ``MODE_EAX``)
164
+ Length of the authentication tag, in bytes.
165
+ It must be no longer than 8 (default).
166
+
167
+ * **initial_value** : (*integer*) --
168
+ (Only ``MODE_CTR``). The initial value for the counter within
169
+ the counter block. By default it is **0**.
170
+
171
+ :Return: a Triple DES object, of the applicable mode.
172
+ """
173
+
174
+ return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
175
+
176
+ MODE_ECB = 1
177
+ MODE_CBC = 2
178
+ MODE_CFB = 3
179
+ MODE_OFB = 5
180
+ MODE_CTR = 6
181
+ MODE_OPENPGP = 7
182
+ MODE_EAX = 9
183
+
184
+ # Size of a data block (in bytes)
185
+ block_size = 8
186
+ # Size of a key (in bytes)
187
+ key_size = (16, 24)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/DES3.pyi ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Dict, Tuple, ByteString, Optional
2
+
3
+ from Crypto.Cipher._mode_ecb import EcbMode
4
+ from Crypto.Cipher._mode_cbc import CbcMode
5
+ from Crypto.Cipher._mode_cfb import CfbMode
6
+ from Crypto.Cipher._mode_ofb import OfbMode
7
+ from Crypto.Cipher._mode_ctr import CtrMode
8
+ from Crypto.Cipher._mode_openpgp import OpenPgpMode
9
+ from Crypto.Cipher._mode_eax import EaxMode
10
+
11
+ def adjust_key_parity(key_in: bytes) -> bytes: ...
12
+
13
+ DES3Mode = int
14
+
15
+ MODE_ECB: DES3Mode
16
+ MODE_CBC: DES3Mode
17
+ MODE_CFB: DES3Mode
18
+ MODE_OFB: DES3Mode
19
+ MODE_CTR: DES3Mode
20
+ MODE_OPENPGP: DES3Mode
21
+ MODE_EAX: DES3Mode
22
+
23
+ def new(key: ByteString,
24
+ mode: DES3Mode,
25
+ iv : Optional[ByteString] = ...,
26
+ IV : Optional[ByteString] = ...,
27
+ nonce : Optional[ByteString] = ...,
28
+ segment_size : int = ...,
29
+ mac_len : int = ...,
30
+ initial_value : Union[int, ByteString] = ...,
31
+ counter : Dict = ...) -> \
32
+ Union[EcbMode, CbcMode, CfbMode, OfbMode, CtrMode, OpenPgpMode]: ...
33
+
34
+ block_size: int
35
+ key_size: Tuple[int, int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_OAEP.py ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/PKCS1_OAEP.py : PKCS#1 OAEP
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
+
23
+ from Crypto.Signature.pss import MGF1
24
+ import Crypto.Hash.SHA1
25
+
26
+ from Crypto.Util.py3compat import bord, _copy_bytes
27
+ import Crypto.Util.number
28
+ from Crypto.Util.number import ceil_div, bytes_to_long, long_to_bytes
29
+ from Crypto.Util.strxor import strxor
30
+ from Crypto import Random
31
+
32
+ class PKCS1OAEP_Cipher:
33
+ """Cipher object for PKCS#1 v1.5 OAEP.
34
+ Do not create directly: use :func:`new` instead."""
35
+
36
+ def __init__(self, key, hashAlgo, mgfunc, label, randfunc):
37
+ """Initialize this PKCS#1 OAEP cipher object.
38
+
39
+ :Parameters:
40
+ key : an RSA key object
41
+ If a private half is given, both encryption and decryption are possible.
42
+ If a public half is given, only encryption is possible.
43
+ hashAlgo : hash object
44
+ The hash function to use. This can be a module under `Crypto.Hash`
45
+ or an existing hash object created from any of such modules. If not specified,
46
+ `Crypto.Hash.SHA1` is used.
47
+ mgfunc : callable
48
+ A mask generation function that accepts two parameters: a string to
49
+ use as seed, and the lenth of the mask to generate, in bytes.
50
+ If not specified, the standard MGF1 consistent with ``hashAlgo`` is used (a safe choice).
51
+ label : bytes/bytearray/memoryview
52
+ A label to apply to this particular encryption. If not specified,
53
+ an empty string is used. Specifying a label does not improve
54
+ security.
55
+ randfunc : callable
56
+ A function that returns random bytes.
57
+
58
+ :attention: Modify the mask generation function only if you know what you are doing.
59
+ Sender and receiver must use the same one.
60
+ """
61
+ self._key = key
62
+
63
+ if hashAlgo:
64
+ self._hashObj = hashAlgo
65
+ else:
66
+ self._hashObj = Crypto.Hash.SHA1
67
+
68
+ if mgfunc:
69
+ self._mgf = mgfunc
70
+ else:
71
+ self._mgf = lambda x,y: MGF1(x,y,self._hashObj)
72
+
73
+ self._label = _copy_bytes(None, None, label)
74
+ self._randfunc = randfunc
75
+
76
+ def can_encrypt(self):
77
+ """Legacy function to check if you can call :meth:`encrypt`.
78
+
79
+ .. deprecated:: 3.0"""
80
+ return self._key.can_encrypt()
81
+
82
+ def can_decrypt(self):
83
+ """Legacy function to check if you can call :meth:`decrypt`.
84
+
85
+ .. deprecated:: 3.0"""
86
+ return self._key.can_decrypt()
87
+
88
+ def encrypt(self, message):
89
+ """Encrypt a message with PKCS#1 OAEP.
90
+
91
+ :param message:
92
+ The message to encrypt, also known as plaintext. It can be of
93
+ variable length, but not longer than the RSA modulus (in bytes)
94
+ minus 2, minus twice the hash output size.
95
+ For instance, if you use RSA 2048 and SHA-256, the longest message
96
+ you can encrypt is 190 byte long.
97
+ :type message: bytes/bytearray/memoryview
98
+
99
+ :returns: The ciphertext, as large as the RSA modulus.
100
+ :rtype: bytes
101
+
102
+ :raises ValueError:
103
+ if the message is too long.
104
+ """
105
+
106
+ # See 7.1.1 in RFC3447
107
+ modBits = Crypto.Util.number.size(self._key.n)
108
+ k = ceil_div(modBits, 8) # Convert from bits to bytes
109
+ hLen = self._hashObj.digest_size
110
+ mLen = len(message)
111
+
112
+ # Step 1b
113
+ ps_len = k - mLen - 2 * hLen - 2
114
+ if ps_len < 0:
115
+ raise ValueError("Plaintext is too long.")
116
+ # Step 2a
117
+ lHash = self._hashObj.new(self._label).digest()
118
+ # Step 2b
119
+ ps = b'\x00' * ps_len
120
+ # Step 2c
121
+ db = lHash + ps + b'\x01' + _copy_bytes(None, None, message)
122
+ # Step 2d
123
+ ros = self._randfunc(hLen)
124
+ # Step 2e
125
+ dbMask = self._mgf(ros, k-hLen-1)
126
+ # Step 2f
127
+ maskedDB = strxor(db, dbMask)
128
+ # Step 2g
129
+ seedMask = self._mgf(maskedDB, hLen)
130
+ # Step 2h
131
+ maskedSeed = strxor(ros, seedMask)
132
+ # Step 2i
133
+ em = b'\x00' + maskedSeed + maskedDB
134
+ # Step 3a (OS2IP)
135
+ em_int = bytes_to_long(em)
136
+ # Step 3b (RSAEP)
137
+ m_int = self._key._encrypt(em_int)
138
+ # Step 3c (I2OSP)
139
+ c = long_to_bytes(m_int, k)
140
+ return c
141
+
142
+ def decrypt(self, ciphertext):
143
+ """Decrypt a message with PKCS#1 OAEP.
144
+
145
+ :param ciphertext: The encrypted message.
146
+ :type ciphertext: bytes/bytearray/memoryview
147
+
148
+ :returns: The original message (plaintext).
149
+ :rtype: bytes
150
+
151
+ :raises ValueError:
152
+ if the ciphertext has the wrong length, or if decryption
153
+ fails the integrity check (in which case, the decryption
154
+ key is probably wrong).
155
+ :raises TypeError:
156
+ if the RSA key has no private half (i.e. you are trying
157
+ to decrypt using a public key).
158
+ """
159
+
160
+ # See 7.1.2 in RFC3447
161
+ modBits = Crypto.Util.number.size(self._key.n)
162
+ k = ceil_div(modBits,8) # Convert from bits to bytes
163
+ hLen = self._hashObj.digest_size
164
+
165
+ # Step 1b and 1c
166
+ if len(ciphertext) != k or k<hLen+2:
167
+ raise ValueError("Ciphertext with incorrect length.")
168
+ # Step 2a (O2SIP)
169
+ ct_int = bytes_to_long(ciphertext)
170
+ # Step 2b (RSADP)
171
+ m_int = self._key._decrypt(ct_int)
172
+ # Complete step 2c (I2OSP)
173
+ em = long_to_bytes(m_int, k)
174
+ # Step 3a
175
+ lHash = self._hashObj.new(self._label).digest()
176
+ # Step 3b
177
+ y = em[0]
178
+ # y must be 0, but we MUST NOT check it here in order not to
179
+ # allow attacks like Manger's (http://dl.acm.org/citation.cfm?id=704143)
180
+ maskedSeed = em[1:hLen+1]
181
+ maskedDB = em[hLen+1:]
182
+ # Step 3c
183
+ seedMask = self._mgf(maskedDB, hLen)
184
+ # Step 3d
185
+ seed = strxor(maskedSeed, seedMask)
186
+ # Step 3e
187
+ dbMask = self._mgf(seed, k-hLen-1)
188
+ # Step 3f
189
+ db = strxor(maskedDB, dbMask)
190
+ # Step 3g
191
+ one_pos = hLen + db[hLen:].find(b'\x01')
192
+ lHash1 = db[:hLen]
193
+ invalid = bord(y) | int(one_pos < hLen)
194
+ hash_compare = strxor(lHash1, lHash)
195
+ for x in hash_compare:
196
+ invalid |= bord(x)
197
+ for x in db[hLen:one_pos]:
198
+ invalid |= bord(x)
199
+ if invalid != 0:
200
+ raise ValueError("Incorrect decryption.")
201
+ # Step 4
202
+ return db[one_pos + 1:]
203
+
204
+ def new(key, hashAlgo=None, mgfunc=None, label=b'', randfunc=None):
205
+ """Return a cipher object :class:`PKCS1OAEP_Cipher` that can be used to perform PKCS#1 OAEP encryption or decryption.
206
+
207
+ :param key:
208
+ The key object to use to encrypt or decrypt the message.
209
+ Decryption is only possible with a private RSA key.
210
+ :type key: RSA key object
211
+
212
+ :param hashAlgo:
213
+ The hash function to use. This can be a module under `Crypto.Hash`
214
+ or an existing hash object created from any of such modules.
215
+ If not specified, `Crypto.Hash.SHA1` is used.
216
+ :type hashAlgo: hash object
217
+
218
+ :param mgfunc:
219
+ A mask generation function that accepts two parameters: a string to
220
+ use as seed, and the lenth of the mask to generate, in bytes.
221
+ If not specified, the standard MGF1 consistent with ``hashAlgo`` is used (a safe choice).
222
+ :type mgfunc: callable
223
+
224
+ :param label:
225
+ A label to apply to this particular encryption. If not specified,
226
+ an empty string is used. Specifying a label does not improve
227
+ security.
228
+ :type label: bytes/bytearray/memoryview
229
+
230
+ :param randfunc:
231
+ A function that returns random bytes.
232
+ The default is `Random.get_random_bytes`.
233
+ :type randfunc: callable
234
+ """
235
+
236
+ if randfunc is None:
237
+ randfunc = Random.get_random_bytes
238
+ return PKCS1OAEP_Cipher(key, hashAlgo, mgfunc, label, randfunc)
239
+
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_OAEP.pyi ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Optional, Union, Callable, Any, overload
2
+ from typing_extensions import Protocol
3
+
4
+ from Crypto.PublicKey.RSA import RsaKey
5
+
6
+ class HashLikeClass(Protocol):
7
+ digest_size : int
8
+ def new(self, data: Optional[bytes] = ...) -> Any: ...
9
+
10
+ class HashLikeModule(Protocol):
11
+ digest_size : int
12
+ @staticmethod
13
+ def new(data: Optional[bytes] = ...) -> Any: ...
14
+
15
+ HashLike = Union[HashLikeClass, HashLikeModule]
16
+
17
+ Buffer = Union[bytes, bytearray, memoryview]
18
+
19
+ class PKCS1OAEP_Cipher:
20
+ def __init__(self,
21
+ key: RsaKey,
22
+ hashAlgo: HashLike,
23
+ mgfunc: Callable[[bytes, int], bytes],
24
+ label: Buffer,
25
+ randfunc: Callable[[int], bytes]) -> None: ...
26
+ def can_encrypt(self) -> bool: ...
27
+ def can_decrypt(self) -> bool: ...
28
+ def encrypt(self, message: Buffer) -> bytes: ...
29
+ def decrypt(self, ciphertext: Buffer) -> bytes: ...
30
+
31
+ def new(key: RsaKey,
32
+ hashAlgo: Optional[HashLike] = ...,
33
+ mgfunc: Optional[Callable[[bytes, int], bytes]] = ...,
34
+ label: Optional[Buffer] = ...,
35
+ randfunc: Optional[Callable[[int], bytes]] = ...) -> PKCS1OAEP_Cipher: ...
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_v1_5.py ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/PKCS1-v1_5.py : PKCS#1 v1.5
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
+
23
+ __all__ = ['new', 'PKCS115_Cipher']
24
+
25
+ from Crypto import Random
26
+ from Crypto.Util.number import bytes_to_long, long_to_bytes
27
+ from Crypto.Util.py3compat import bord, is_bytes, _copy_bytes
28
+
29
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib, c_size_t,
30
+ c_uint8_ptr)
31
+
32
+
33
+ _raw_pkcs1_decode = load_pycryptodome_raw_lib("Crypto.Cipher._pkcs1_decode",
34
+ """
35
+ int pkcs1_decode(const uint8_t *em, size_t len_em,
36
+ const uint8_t *sentinel, size_t len_sentinel,
37
+ size_t expected_pt_len,
38
+ uint8_t *output);
39
+ """)
40
+
41
+
42
+ def _pkcs1_decode(em, sentinel, expected_pt_len, output):
43
+ if len(em) != len(output):
44
+ raise ValueError("Incorrect output length")
45
+
46
+ ret = _raw_pkcs1_decode.pkcs1_decode(c_uint8_ptr(em),
47
+ c_size_t(len(em)),
48
+ c_uint8_ptr(sentinel),
49
+ c_size_t(len(sentinel)),
50
+ c_size_t(expected_pt_len),
51
+ c_uint8_ptr(output))
52
+ return ret
53
+
54
+
55
+ class PKCS115_Cipher:
56
+ """This cipher can perform PKCS#1 v1.5 RSA encryption or decryption.
57
+ Do not instantiate directly. Use :func:`Crypto.Cipher.PKCS1_v1_5.new` instead."""
58
+
59
+ def __init__(self, key, randfunc):
60
+ """Initialize this PKCS#1 v1.5 cipher object.
61
+
62
+ :Parameters:
63
+ key : an RSA key object
64
+ If a private half is given, both encryption and decryption are possible.
65
+ If a public half is given, only encryption is possible.
66
+ randfunc : callable
67
+ Function that returns random bytes.
68
+ """
69
+
70
+ self._key = key
71
+ self._randfunc = randfunc
72
+
73
+ def can_encrypt(self):
74
+ """Return True if this cipher object can be used for encryption."""
75
+ return self._key.can_encrypt()
76
+
77
+ def can_decrypt(self):
78
+ """Return True if this cipher object can be used for decryption."""
79
+ return self._key.can_decrypt()
80
+
81
+ def encrypt(self, message):
82
+ """Produce the PKCS#1 v1.5 encryption of a message.
83
+
84
+ This function is named ``RSAES-PKCS1-V1_5-ENCRYPT``, and it is specified in
85
+ `section 7.2.1 of RFC8017
86
+ <https://tools.ietf.org/html/rfc8017#page-28>`_.
87
+
88
+ :param message:
89
+ The message to encrypt, also known as plaintext. It can be of
90
+ variable length, but not longer than the RSA modulus (in bytes) minus 11.
91
+ :type message: bytes/bytearray/memoryview
92
+
93
+ :Returns: A byte string, the ciphertext in which the message is encrypted.
94
+ It is as long as the RSA modulus (in bytes).
95
+
96
+ :Raises ValueError:
97
+ If the RSA key length is not sufficiently long to deal with the given
98
+ message.
99
+ """
100
+
101
+ # See 7.2.1 in RFC8017
102
+ k = self._key.size_in_bytes()
103
+ mLen = len(message)
104
+
105
+ # Step 1
106
+ if mLen > k - 11:
107
+ raise ValueError("Plaintext is too long.")
108
+ # Step 2a
109
+ ps = []
110
+ while len(ps) != k - mLen - 3:
111
+ new_byte = self._randfunc(1)
112
+ if bord(new_byte[0]) == 0x00:
113
+ continue
114
+ ps.append(new_byte)
115
+ ps = b"".join(ps)
116
+ assert(len(ps) == k - mLen - 3)
117
+ # Step 2b
118
+ em = b'\x00\x02' + ps + b'\x00' + _copy_bytes(None, None, message)
119
+ # Step 3a (OS2IP)
120
+ em_int = bytes_to_long(em)
121
+ # Step 3b (RSAEP)
122
+ m_int = self._key._encrypt(em_int)
123
+ # Step 3c (I2OSP)
124
+ c = long_to_bytes(m_int, k)
125
+ return c
126
+
127
+ def decrypt(self, ciphertext, sentinel, expected_pt_len=0):
128
+ r"""Decrypt a PKCS#1 v1.5 ciphertext.
129
+
130
+ This is the function ``RSAES-PKCS1-V1_5-DECRYPT`` specified in
131
+ `section 7.2.2 of RFC8017
132
+ <https://tools.ietf.org/html/rfc8017#page-29>`_.
133
+
134
+ Args:
135
+ ciphertext (bytes/bytearray/memoryview):
136
+ The ciphertext that contains the message to recover.
137
+ sentinel (any type):
138
+ The object to return whenever an error is detected.
139
+ expected_pt_len (integer):
140
+ The length the plaintext is known to have, or 0 if unknown.
141
+
142
+ Returns (byte string):
143
+ It is either the original message or the ``sentinel`` (in case of an error).
144
+
145
+ .. warning::
146
+ PKCS#1 v1.5 decryption is intrinsically vulnerable to timing
147
+ attacks (see `Bleichenbacher's`__ attack).
148
+ **Use PKCS#1 OAEP instead**.
149
+
150
+ This implementation attempts to mitigate the risk
151
+ with some constant-time constructs.
152
+ However, they are not sufficient by themselves: the type of protocol you
153
+ implement and the way you handle errors make a big difference.
154
+
155
+ Specifically, you should make it very hard for the (malicious)
156
+ party that submitted the ciphertext to quickly understand if decryption
157
+ succeeded or not.
158
+
159
+ To this end, it is recommended that your protocol only encrypts
160
+ plaintexts of fixed length (``expected_pt_len``),
161
+ that ``sentinel`` is a random byte string of the same length,
162
+ and that processing continues for as long
163
+ as possible even if ``sentinel`` is returned (i.e. in case of
164
+ incorrect decryption).
165
+
166
+ .. __: https://dx.doi.org/10.1007/BFb0055716
167
+ """
168
+
169
+ # See 7.2.2 in RFC8017
170
+ k = self._key.size_in_bytes()
171
+
172
+ # Step 1
173
+ if len(ciphertext) != k:
174
+ raise ValueError("Ciphertext with incorrect length (not %d bytes)" % k)
175
+
176
+ # Step 2a (O2SIP)
177
+ ct_int = bytes_to_long(ciphertext)
178
+
179
+ # Step 2b (RSADP)
180
+ m_int = self._key._decrypt(ct_int)
181
+
182
+ # Complete step 2c (I2OSP)
183
+ em = long_to_bytes(m_int, k)
184
+
185
+ # Step 3 (not constant time when the sentinel is not a byte string)
186
+ output = bytes(bytearray(k))
187
+ if not is_bytes(sentinel) or len(sentinel) > k:
188
+ size = _pkcs1_decode(em, b'', expected_pt_len, output)
189
+ if size < 0:
190
+ return sentinel
191
+ else:
192
+ return output[size:]
193
+
194
+ # Step 3 (somewhat constant time)
195
+ size = _pkcs1_decode(em, sentinel, expected_pt_len, output)
196
+ return output[size:]
197
+
198
+
199
+ def new(key, randfunc=None):
200
+ """Create a cipher for performing PKCS#1 v1.5 encryption or decryption.
201
+
202
+ :param key:
203
+ The key to use to encrypt or decrypt the message. This is a `Crypto.PublicKey.RSA` object.
204
+ Decryption is only possible if *key* is a private RSA key.
205
+ :type key: RSA key object
206
+
207
+ :param randfunc:
208
+ Function that return random bytes.
209
+ The default is :func:`Crypto.Random.get_random_bytes`.
210
+ :type randfunc: callable
211
+
212
+ :returns: A cipher object `PKCS115_Cipher`.
213
+ """
214
+
215
+ if randfunc is None:
216
+ randfunc = Random.get_random_bytes
217
+ return PKCS115_Cipher(key, randfunc)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/PKCS1_v1_5.pyi ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Callable, Union, Any, Optional, TypeVar
2
+
3
+ from Crypto.PublicKey.RSA import RsaKey
4
+
5
+ Buffer = Union[bytes, bytearray, memoryview]
6
+ T = TypeVar('T')
7
+
8
+ class PKCS115_Cipher:
9
+ def __init__(self,
10
+ key: RsaKey,
11
+ randfunc: Callable[[int], bytes]) -> None: ...
12
+ def can_encrypt(self) -> bool: ...
13
+ def can_decrypt(self) -> bool: ...
14
+ def encrypt(self, message: Buffer) -> bytes: ...
15
+ def decrypt(self, ciphertext: Buffer,
16
+ sentinel: T,
17
+ expected_pt_len: Optional[int] = ...) -> Union[bytes, T]: ...
18
+
19
+ def new(key: RsaKey,
20
+ randfunc: Optional[Callable[[int], bytes]] = ...) -> PKCS115_Cipher: ...
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Salsa20.py ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Cipher/Salsa20.py : Salsa20 stream cipher (http://cr.yp.to/snuffle.html)
4
+ #
5
+ # Contributed by Fabrizio Tarizzo <fabrizio@fabriziotarizzo.org>.
6
+ #
7
+ # ===================================================================
8
+ # The contents of this file are dedicated to the public domain. To
9
+ # the extent that dedication to the public domain is not available,
10
+ # everyone is granted a worldwide, perpetual, royalty-free,
11
+ # non-exclusive license to exercise all rights associated with the
12
+ # contents of this file for any purpose whatsoever.
13
+ # No rights are reserved.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+ # ===================================================================
24
+
25
+ from Crypto.Util.py3compat import _copy_bytes
26
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
27
+ create_string_buffer,
28
+ get_raw_buffer, VoidPointer,
29
+ SmartPointer, c_size_t,
30
+ c_uint8_ptr, is_writeable_buffer)
31
+
32
+ from Crypto.Random import get_random_bytes
33
+
34
+ _raw_salsa20_lib = load_pycryptodome_raw_lib("Crypto.Cipher._Salsa20",
35
+ """
36
+ int Salsa20_stream_init(uint8_t *key, size_t keylen,
37
+ uint8_t *nonce, size_t nonce_len,
38
+ void **pSalsaState);
39
+ int Salsa20_stream_destroy(void *salsaState);
40
+ int Salsa20_stream_encrypt(void *salsaState,
41
+ const uint8_t in[],
42
+ uint8_t out[], size_t len);
43
+ """)
44
+
45
+
46
+ class Salsa20Cipher:
47
+ """Salsa20 cipher object. Do not create it directly. Use :py:func:`new`
48
+ instead.
49
+
50
+ :var nonce: The nonce with length 8
51
+ :vartype nonce: byte string
52
+ """
53
+
54
+ def __init__(self, key, nonce):
55
+ """Initialize a Salsa20 cipher object
56
+
57
+ See also `new()` at the module level."""
58
+
59
+ if len(key) not in key_size:
60
+ raise ValueError("Incorrect key length for Salsa20 (%d bytes)" % len(key))
61
+
62
+ if len(nonce) != 8:
63
+ raise ValueError("Incorrect nonce length for Salsa20 (%d bytes)" %
64
+ len(nonce))
65
+
66
+ self.nonce = _copy_bytes(None, None, nonce)
67
+
68
+ self._state = VoidPointer()
69
+ result = _raw_salsa20_lib.Salsa20_stream_init(
70
+ c_uint8_ptr(key),
71
+ c_size_t(len(key)),
72
+ c_uint8_ptr(nonce),
73
+ c_size_t(len(nonce)),
74
+ self._state.address_of())
75
+ if result:
76
+ raise ValueError("Error %d instantiating a Salsa20 cipher")
77
+ self._state = SmartPointer(self._state.get(),
78
+ _raw_salsa20_lib.Salsa20_stream_destroy)
79
+
80
+ self.block_size = 1
81
+ self.key_size = len(key)
82
+
83
+ def encrypt(self, plaintext, output=None):
84
+ """Encrypt a piece of data.
85
+
86
+ Args:
87
+ plaintext(bytes/bytearray/memoryview): The data to encrypt, of any size.
88
+ Keyword Args:
89
+ output(bytes/bytearray/memoryview): The location where the ciphertext
90
+ is written to. If ``None``, the ciphertext is returned.
91
+ Returns:
92
+ If ``output`` is ``None``, the ciphertext is returned as ``bytes``.
93
+ Otherwise, ``None``.
94
+ """
95
+
96
+ if output is None:
97
+ ciphertext = create_string_buffer(len(plaintext))
98
+ else:
99
+ ciphertext = output
100
+
101
+ if not is_writeable_buffer(output):
102
+ raise TypeError("output must be a bytearray or a writeable memoryview")
103
+
104
+ if len(plaintext) != len(output):
105
+ raise ValueError("output must have the same length as the input"
106
+ " (%d bytes)" % len(plaintext))
107
+
108
+ result = _raw_salsa20_lib.Salsa20_stream_encrypt(
109
+ self._state.get(),
110
+ c_uint8_ptr(plaintext),
111
+ c_uint8_ptr(ciphertext),
112
+ c_size_t(len(plaintext)))
113
+ if result:
114
+ raise ValueError("Error %d while encrypting with Salsa20" % result)
115
+
116
+ if output is None:
117
+ return get_raw_buffer(ciphertext)
118
+ else:
119
+ return None
120
+
121
+ def decrypt(self, ciphertext, output=None):
122
+ """Decrypt a piece of data.
123
+
124
+ Args:
125
+ ciphertext(bytes/bytearray/memoryview): The data to decrypt, of any size.
126
+ Keyword Args:
127
+ output(bytes/bytearray/memoryview): The location where the plaintext
128
+ is written to. If ``None``, the plaintext is returned.
129
+ Returns:
130
+ If ``output`` is ``None``, the plaintext is returned as ``bytes``.
131
+ Otherwise, ``None``.
132
+ """
133
+
134
+ try:
135
+ return self.encrypt(ciphertext, output=output)
136
+ except ValueError as e:
137
+ raise ValueError(str(e).replace("enc", "dec"))
138
+
139
+
140
+ def new(key, nonce=None):
141
+ """Create a new Salsa20 cipher
142
+
143
+ :keyword key: The secret key to use. It must be 16 or 32 bytes long.
144
+ :type key: bytes/bytearray/memoryview
145
+
146
+ :keyword nonce:
147
+ A value that must never be reused for any other encryption
148
+ done with this key. It must be 8 bytes long.
149
+
150
+ If not provided, a random byte string will be generated (you can read
151
+ it back via the ``nonce`` attribute of the returned object).
152
+ :type nonce: bytes/bytearray/memoryview
153
+
154
+ :Return: a :class:`Crypto.Cipher.Salsa20.Salsa20Cipher` object
155
+ """
156
+
157
+ if nonce is None:
158
+ nonce = get_random_bytes(8)
159
+
160
+ return Salsa20Cipher(key, nonce)
161
+
162
+ # Size of a data block (in bytes)
163
+ block_size = 1
164
+
165
+ # Size of a key (in bytes)
166
+ key_size = (16, 32)
167
+
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/Salsa20.pyi ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Tuple, Optional, overload, ByteString, Optional
2
+
3
+ class Salsa20Cipher:
4
+ nonce: bytes
5
+ block_size: int
6
+ key_size: int
7
+
8
+ def __init__(self,
9
+ key: ByteString,
10
+ nonce: ByteString) -> None: ...
11
+ @overload
12
+ def encrypt(self, plaintext: ByteString) -> bytes: ...
13
+ @overload
14
+ def encrypt(self, plaintext: ByteString, output: Union[bytearray, memoryview]) -> None: ...
15
+ @overload
16
+ def decrypt(self, plaintext: ByteString) -> bytes: ...
17
+ @overload
18
+ def decrypt(self, plaintext: ByteString, output: Union[bytearray, memoryview]) -> None: ...
19
+
20
+ def new(key: ByteString, nonce: Optional[ByteString] = ...) -> Salsa20Cipher: ...
21
+
22
+ block_size: int
23
+ key_size: Tuple[int, int]
24
+
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_ARC4.pyd ADDED
Binary file (11.3 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_EKSBlowfish.py ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ===================================================================
2
+ #
3
+ # Copyright (c) 2019, Legrandin <helderijs@gmail.com>
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # 2. Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in
14
+ # the documentation and/or other materials provided with the
15
+ # distribution.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
+ # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27
+ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ # POSSIBILITY OF SUCH DAMAGE.
29
+ # ===================================================================
30
+
31
+ import sys
32
+
33
+ from Crypto.Cipher import _create_cipher
34
+ from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,
35
+ VoidPointer, SmartPointer, c_size_t,
36
+ c_uint8_ptr, c_uint)
37
+
38
+ _raw_blowfish_lib = load_pycryptodome_raw_lib(
39
+ "Crypto.Cipher._raw_eksblowfish",
40
+ """
41
+ int EKSBlowfish_start_operation(const uint8_t key[],
42
+ size_t key_len,
43
+ const uint8_t salt[16],
44
+ size_t salt_len,
45
+ unsigned cost,
46
+ unsigned invert,
47
+ void **pResult);
48
+ int EKSBlowfish_encrypt(const void *state,
49
+ const uint8_t *in,
50
+ uint8_t *out,
51
+ size_t data_len);
52
+ int EKSBlowfish_decrypt(const void *state,
53
+ const uint8_t *in,
54
+ uint8_t *out,
55
+ size_t data_len);
56
+ int EKSBlowfish_stop_operation(void *state);
57
+ """
58
+ )
59
+
60
+
61
+ def _create_base_cipher(dict_parameters):
62
+ """This method instantiates and returns a smart pointer to
63
+ a low-level base cipher. It will absorb named parameters in
64
+ the process."""
65
+
66
+ try:
67
+ key = dict_parameters.pop("key")
68
+ salt = dict_parameters.pop("salt")
69
+ cost = dict_parameters.pop("cost")
70
+ except KeyError as e:
71
+ raise TypeError("Missing EKSBlowfish parameter: " + str(e))
72
+ invert = dict_parameters.pop("invert", True)
73
+
74
+ if len(key) not in key_size:
75
+ raise ValueError("Incorrect EKSBlowfish key length (%d bytes)" % len(key))
76
+
77
+ start_operation = _raw_blowfish_lib.EKSBlowfish_start_operation
78
+ stop_operation = _raw_blowfish_lib.EKSBlowfish_stop_operation
79
+
80
+ void_p = VoidPointer()
81
+ result = start_operation(c_uint8_ptr(key),
82
+ c_size_t(len(key)),
83
+ c_uint8_ptr(salt),
84
+ c_size_t(len(salt)),
85
+ c_uint(cost),
86
+ c_uint(int(invert)),
87
+ void_p.address_of())
88
+ if result:
89
+ raise ValueError("Error %X while instantiating the EKSBlowfish cipher"
90
+ % result)
91
+ return SmartPointer(void_p.get(), stop_operation)
92
+
93
+
94
+ def new(key, mode, salt, cost, invert):
95
+ """Create a new EKSBlowfish cipher
96
+
97
+ Args:
98
+
99
+ key (bytes, bytearray, memoryview):
100
+ The secret key to use in the symmetric cipher.
101
+ Its length can vary from 0 to 72 bytes.
102
+
103
+ mode (one of the supported ``MODE_*`` constants):
104
+ The chaining mode to use for encryption or decryption.
105
+
106
+ salt (bytes, bytearray, memoryview):
107
+ The salt that bcrypt uses to thwart rainbow table attacks
108
+
109
+ cost (integer):
110
+ The complexity factor in bcrypt
111
+
112
+ invert (bool):
113
+ If ``False``, in the inner loop use ``ExpandKey`` first over the salt
114
+ and then over the key, as defined in
115
+ the `original bcrypt specification <https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node4.html>`_.
116
+ If ``True``, reverse the order, as in the first implementation of
117
+ `bcrypt` in OpenBSD.
118
+
119
+ :Return: an EKSBlowfish object
120
+ """
121
+
122
+ kwargs = { 'salt':salt, 'cost':cost, 'invert':invert }
123
+ return _create_cipher(sys.modules[__name__], key, mode, **kwargs)
124
+
125
+
126
+ MODE_ECB = 1
127
+
128
+ # Size of a data block (in bytes)
129
+ block_size = 8
130
+ # Size of a key (in bytes)
131
+ key_size = range(0, 72 + 1)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_EKSBlowfish.pyi ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Union, Iterable
2
+
3
+ from Crypto.Cipher._mode_ecb import EcbMode
4
+
5
+ MODE_ECB: int
6
+
7
+ Buffer = Union[bytes, bytearray, memoryview]
8
+
9
+ def new(key: Buffer,
10
+ mode: int,
11
+ salt: Buffer,
12
+ cost: int) -> EcbMode: ...
13
+
14
+ block_size: int
15
+ key_size: Iterable[int]
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/_Salsa20.pyd ADDED
Binary file (13.8 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__init__.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #
2
+ # A block cipher is instantiated as a combination of:
3
+ # 1. A base cipher (such as AES)
4
+ # 2. A mode of operation (such as CBC)
5
+ #
6
+ # Both items are implemented as C modules.
7
+ #
8
+ # The API of #1 is (replace "AES" with the name of the actual cipher):
9
+ # - AES_start_operaion(key) --> base_cipher_state
10
+ # - AES_encrypt(base_cipher_state, in, out, length)
11
+ # - AES_decrypt(base_cipher_state, in, out, length)
12
+ # - AES_stop_operation(base_cipher_state)
13
+ #
14
+ # Where base_cipher_state is AES_State, a struct with BlockBase (set of
15
+ # pointers to encrypt/decrypt/stop) followed by cipher-specific data.
16
+ #
17
+ # The API of #2 is (replace "CBC" with the name of the actual mode):
18
+ # - CBC_start_operation(base_cipher_state) --> mode_state
19
+ # - CBC_encrypt(mode_state, in, out, length)
20
+ # - CBC_decrypt(mode_state, in, out, length)
21
+ # - CBC_stop_operation(mode_state)
22
+ #
23
+ # where mode_state is a a pointer to base_cipher_state plus mode-specific data.
24
+
25
+ import os
26
+
27
+ from Crypto.Cipher._mode_ecb import _create_ecb_cipher
28
+ from Crypto.Cipher._mode_cbc import _create_cbc_cipher
29
+ from Crypto.Cipher._mode_cfb import _create_cfb_cipher
30
+ from Crypto.Cipher._mode_ofb import _create_ofb_cipher
31
+ from Crypto.Cipher._mode_ctr import _create_ctr_cipher
32
+ from Crypto.Cipher._mode_openpgp import _create_openpgp_cipher
33
+ from Crypto.Cipher._mode_ccm import _create_ccm_cipher
34
+ from Crypto.Cipher._mode_eax import _create_eax_cipher
35
+ from Crypto.Cipher._mode_siv import _create_siv_cipher
36
+ from Crypto.Cipher._mode_gcm import _create_gcm_cipher
37
+ from Crypto.Cipher._mode_ocb import _create_ocb_cipher
38
+
39
+ _modes = { 1:_create_ecb_cipher,
40
+ 2:_create_cbc_cipher,
41
+ 3:_create_cfb_cipher,
42
+ 5:_create_ofb_cipher,
43
+ 6:_create_ctr_cipher,
44
+ 7:_create_openpgp_cipher,
45
+ 9:_create_eax_cipher
46
+ }
47
+
48
+ _extra_modes = { 8:_create_ccm_cipher,
49
+ 10:_create_siv_cipher,
50
+ 11:_create_gcm_cipher,
51
+ 12:_create_ocb_cipher
52
+ }
53
+
54
+ def _create_cipher(factory, key, mode, *args, **kwargs):
55
+
56
+ kwargs["key"] = key
57
+
58
+ modes = dict(_modes)
59
+ if kwargs.pop("add_aes_modes", False):
60
+ modes.update(_extra_modes)
61
+ if not mode in modes:
62
+ raise ValueError("Mode not supported")
63
+
64
+ if args:
65
+ if mode in (8, 9, 10, 11, 12):
66
+ if len(args) > 1:
67
+ raise TypeError("Too many arguments for this mode")
68
+ kwargs["nonce"] = args[0]
69
+ elif mode in (2, 3, 5, 7):
70
+ if len(args) > 1:
71
+ raise TypeError("Too many arguments for this mode")
72
+ kwargs["IV"] = args[0]
73
+ elif mode == 6:
74
+ if len(args) > 0:
75
+ raise TypeError("Too many arguments for this mode")
76
+ elif mode == 1:
77
+ raise TypeError("IV is not meaningful for the ECB mode")
78
+
79
+ return modes[mode](factory, **kwargs)
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__init__.pyi ADDED
File without changes
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/AES.cpython-310.pyc ADDED
Binary file (7.1 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ARC2.cpython-310.pyc ADDED
Binary file (5.89 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ARC4.cpython-310.pyc ADDED
Binary file (3.74 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/Blowfish.cpython-310.pyc ADDED
Binary file (5.03 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/CAST.cpython-310.pyc ADDED
Binary file (5.14 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ChaCha20.cpython-310.pyc ADDED
Binary file (7.46 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/ChaCha20_Poly1305.cpython-310.pyc ADDED
Binary file (9.91 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/DES.cpython-310.pyc ADDED
Binary file (5.03 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/DES3.cpython-310.pyc ADDED
Binary file (6.24 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/PKCS1_OAEP.cpython-310.pyc ADDED
Binary file (7.16 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/PKCS1_v1_5.cpython-310.pyc ADDED
Binary file (6.69 kB). View file
 
multilingual_toxic_comment_files/env/Lib/site-packages/Crypto/Cipher/__pycache__/Salsa20.cpython-310.pyc ADDED
Binary file (4.65 kB). View file