aboutsummaryrefslogtreecommitdiff
path: root/frozen_deps/Cryptodome/Cipher
diff options
context:
space:
mode:
Diffstat (limited to 'frozen_deps/Cryptodome/Cipher')
-rw-r--r--frozen_deps/Cryptodome/Cipher/AES.py4
-rw-r--r--frozen_deps/Cryptodome/Cipher/ChaCha20.py7
-rw-r--r--frozen_deps/Cryptodome/Cipher/PKCS1_OAEP.py6
-rw-r--r--frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.py140
-rw-r--r--frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.pyi7
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_ARC4.abi3.sobin0 -> 13768 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_Salsa20.abi3.sobin0 -> 26784 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_chacha20.abi3.sobin0 -> 28224 bytes
-rw-r--r--frozen_deps/Cryptodome/Cipher/_mode_ctr.py26
-rw-r--r--frozen_deps/Cryptodome/Cipher/_mode_ecb.py2
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_pkcs1_decode.abi3.sobin0 -> 28096 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_aes.abi3.sobin0 -> 66256 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_aesni.abi3.sobin0 -> 101136 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_arc2.abi3.sobin0 -> 43776 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_blowfish.abi3.sobin0 -> 69976 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_cast.abi3.sobin0 -> 42976 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_cbc.abi3.sobin0 -> 20736 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_cfb.abi3.sobin0 -> 25440 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_ctr.abi3.sobin0 -> 28600 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_des.abi3.sobin0 -> 75672 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_des3.abi3.sobin0 -> 76480 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_ecb.abi3.sobin0 -> 12440 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_eksblowfish.abi3.sobin0 -> 166264 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_ocb.abi3.sobin0 -> 37344 bytes
-rwxr-xr-xfrozen_deps/Cryptodome/Cipher/_raw_ofb.abi3.sobin0 -> 15368 bytes
25 files changed, 108 insertions, 84 deletions
diff --git a/frozen_deps/Cryptodome/Cipher/AES.py b/frozen_deps/Cryptodome/Cipher/AES.py
index dd2671a..566a207 100644
--- a/frozen_deps/Cryptodome/Cipher/AES.py
+++ b/frozen_deps/Cryptodome/Cipher/AES.py
@@ -111,7 +111,7 @@ def _create_base_cipher(dict_parameters):
def _derive_Poly1305_key_pair(key, nonce):
"""Derive a tuple (r, s, nonce) for a Poly1305 MAC.
-
+
If nonce is ``None``, a new 16-byte nonce is generated.
"""
@@ -180,7 +180,7 @@ def new(key, mode, *args, **kwargs):
For ``MODE_CTR``, its length must be in the range **[0..15]**
(recommended: **8**).
-
+
For ``MODE_SIV``, the nonce is optional, if it is not specified,
then no nonce is being used, which renders the encryption
deterministic.
diff --git a/frozen_deps/Cryptodome/Cipher/ChaCha20.py b/frozen_deps/Cryptodome/Cipher/ChaCha20.py
index 0cd9102..b4f8b5f 100644
--- a/frozen_deps/Cryptodome/Cipher/ChaCha20.py
+++ b/frozen_deps/Cryptodome/Cipher/ChaCha20.py
@@ -94,6 +94,8 @@ class ChaCha20Cipher(object):
See also `new()` at the module level."""
+ self.nonce = _copy_bytes(None, None, nonce)
+
# XChaCha20 requires a key derivation with HChaCha20
# See 2.3 in https://tools.ietf.org/html/draft-arciszewski-xchacha-03
if len(nonce) == 24:
@@ -102,8 +104,7 @@ class ChaCha20Cipher(object):
self._name = "XChaCha20"
else:
self._name = "ChaCha20"
-
- self.nonce = _copy_bytes(None, None, nonce)
+ nonce = self.nonce
self._next = ( self.encrypt, self.decrypt )
@@ -112,7 +113,7 @@ class ChaCha20Cipher(object):
self._state.address_of(),
c_uint8_ptr(key),
c_size_t(len(key)),
- self.nonce,
+ nonce,
c_size_t(len(nonce)))
if result:
raise ValueError("Error %d instantiating a %s cipher" % (result,
diff --git a/frozen_deps/Cryptodome/Cipher/PKCS1_OAEP.py b/frozen_deps/Cryptodome/Cipher/PKCS1_OAEP.py
index 3207bbe..7525c5d 100644
--- a/frozen_deps/Cryptodome/Cipher/PKCS1_OAEP.py
+++ b/frozen_deps/Cryptodome/Cipher/PKCS1_OAEP.py
@@ -188,9 +188,9 @@ class PKCS1OAEP_Cipher:
# Step 3f
db = strxor(maskedDB, dbMask)
# Step 3g
- one_pos = db[hLen:].find(b'\x01')
+ one_pos = hLen + db[hLen:].find(b'\x01')
lHash1 = db[:hLen]
- invalid = bord(y) | int(one_pos < 0)
+ invalid = bord(y) | int(one_pos < hLen)
hash_compare = strxor(lHash1, lHash)
for x in hash_compare:
invalid |= bord(x)
@@ -199,7 +199,7 @@ class PKCS1OAEP_Cipher:
if invalid != 0:
raise ValueError("Incorrect decryption.")
# Step 4
- return db[hLen + one_pos + 1:]
+ return db[one_pos + 1:]
def new(key, hashAlgo=None, mgfunc=None, label=b'', randfunc=None):
"""Return a cipher object :class:`PKCS1OAEP_Cipher` that can be used to perform PKCS#1 OAEP encryption or decryption.
diff --git a/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.py b/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.py
index 1fd1626..17ef9eb 100644
--- a/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.py
+++ b/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.py
@@ -20,12 +20,37 @@
# SOFTWARE.
# ===================================================================
-__all__ = [ 'new', 'PKCS115_Cipher' ]
+__all__ = ['new', 'PKCS115_Cipher']
-from Cryptodome.Util.number import ceil_div, bytes_to_long, long_to_bytes
-from Cryptodome.Util.py3compat import bord, _copy_bytes
-import Cryptodome.Util.number
from Cryptodome import Random
+from Cryptodome.Util.number import bytes_to_long, long_to_bytes
+from Cryptodome.Util.py3compat import bord, is_bytes, _copy_bytes
+
+from Cryptodome.Util._raw_api import (load_pycryptodome_raw_lib, c_size_t,
+ c_uint8_ptr)
+
+
+_raw_pkcs1_decode = load_pycryptodome_raw_lib("Cryptodome.Cipher._pkcs1_decode",
+ """
+ int pkcs1_decode(const uint8_t *em, size_t len_em,
+ const uint8_t *sentinel, size_t len_sentinel,
+ size_t expected_pt_len,
+ uint8_t *output);
+ """)
+
+
+def _pkcs1_decode(em, sentinel, expected_pt_len, output):
+ if len(em) != len(output):
+ raise ValueError("Incorrect output length")
+
+ ret = _raw_pkcs1_decode.pkcs1_decode(c_uint8_ptr(em),
+ c_size_t(len(em)),
+ c_uint8_ptr(sentinel),
+ c_size_t(len(sentinel)),
+ c_size_t(expected_pt_len),
+ c_uint8_ptr(output))
+ return ret
+
class PKCS115_Cipher:
"""This cipher can perform PKCS#1 v1.5 RSA encryption or decryption.
@@ -74,8 +99,7 @@ class PKCS115_Cipher:
"""
# See 7.2.1 in RFC8017
- modBits = Cryptodome.Util.number.size(self._key.n)
- k = ceil_div(modBits,8) # Convert from bits to bytes
+ k = self._key.size_in_bytes()
mLen = len(message)
# Step 1
@@ -100,81 +124,76 @@ class PKCS115_Cipher:
c = long_to_bytes(m_int, k)
return c
- def decrypt(self, ciphertext, sentinel):
+ def decrypt(self, ciphertext, sentinel, expected_pt_len=0):
r"""Decrypt a PKCS#1 v1.5 ciphertext.
- This function is named ``RSAES-PKCS1-V1_5-DECRYPT``, and is specified in
+ This is the function ``RSAES-PKCS1-V1_5-DECRYPT`` specified in
`section 7.2.2 of RFC8017
<https://tools.ietf.org/html/rfc8017#page-29>`_.
- :param ciphertext:
+ Args:
+ ciphertext (bytes/bytearray/memoryview):
The ciphertext that contains the message to recover.
- :type ciphertext: bytes/bytearray/memoryview
-
- :param sentinel:
+ sentinel (any type):
The object to return whenever an error is detected.
- :type sentinel: any type
-
- :Returns: A byte string. It is either the original message or the ``sentinel`` (in case of an error).
+ expected_pt_len (integer):
+ The length the plaintext is known to have, or 0 if unknown.
- :Raises ValueError:
- If the ciphertext length is incorrect
- :Raises TypeError:
- If the RSA key has no private half (i.e. it cannot be used for
- decyption).
+ Returns (byte string):
+ It is either the original message or the ``sentinel`` (in case of an error).
.. warning::
- You should **never** let the party who submitted the ciphertext know that
- this function returned the ``sentinel`` value.
- Armed with such knowledge (for a fair amount of carefully crafted but invalid ciphertexts),
- an attacker is able to recontruct the plaintext of any other encryption that were carried out
- with the same RSA public key (see `Bleichenbacher's`__ attack).
-
- In general, it should not be possible for the other party to distinguish
- whether processing at the server side failed because the value returned
- was a ``sentinel`` as opposed to a random, invalid message.
-
- In fact, the second option is not that unlikely: encryption done according to PKCS#1 v1.5
- embeds no good integrity check. There is roughly one chance
- in 2\ :sup:`16` for a random ciphertext to be returned as a valid message
- (although random looking).
-
- It is therefore advisabled to:
-
- 1. Select as ``sentinel`` a value that resembles a plausable random, invalid message.
- 2. Not report back an error as soon as you detect a ``sentinel`` value.
- Put differently, you should not explicitly check if the returned value is the ``sentinel`` or not.
- 3. Cover all possible errors with a single, generic error indicator.
- 4. Embed into the definition of ``message`` (at the protocol level) a digest (e.g. ``SHA-1``).
- It is recommended for it to be the rightmost part ``message``.
- 5. Where possible, monitor the number of errors due to ciphertexts originating from the same party,
- and slow down the rate of the requests from such party (or even blacklist it altogether).
-
- **If you are designing a new protocol, consider using the more robust PKCS#1 OAEP.**
-
- .. __: http://www.bell-labs.com/user/bleichen/papers/pkcs.ps
-
+ PKCS#1 v1.5 decryption is intrinsically vulnerable to timing
+ attacks (see `Bleichenbacher's`__ attack).
+ **Use PKCS#1 OAEP instead**.
+
+ This implementation attempts to mitigate the risk
+ with some constant-time constructs.
+ However, they are not sufficient by themselves: the type of protocol you
+ implement and the way you handle errors make a big difference.
+
+ Specifically, you should make it very hard for the (malicious)
+ party that submitted the ciphertext to quickly understand if decryption
+ succeeded or not.
+
+ To this end, it is recommended that your protocol only encrypts
+ plaintexts of fixed length (``expected_pt_len``),
+ that ``sentinel`` is a random byte string of the same length,
+ and that processing continues for as long
+ as possible even if ``sentinel`` is returned (i.e. in case of
+ incorrect decryption).
+
+ .. __: https://dx.doi.org/10.1007/BFb0055716
"""
- # See 7.2.1 in RFC3447
- modBits = Cryptodome.Util.number.size(self._key.n)
- k = ceil_div(modBits,8) # Convert from bits to bytes
+ # See 7.2.2 in RFC8017
+ k = self._key.size_in_bytes()
# Step 1
if len(ciphertext) != k:
- raise ValueError("Ciphertext with incorrect length.")
+ raise ValueError("Ciphertext with incorrect length (not %d bytes)" % k)
+
# Step 2a (O2SIP)
ct_int = bytes_to_long(ciphertext)
+
# Step 2b (RSADP)
m_int = self._key._decrypt(ct_int)
+
# Complete step 2c (I2OSP)
em = long_to_bytes(m_int, k)
- # Step 3
- sep = em.find(b'\x00', 2)
- if not em.startswith(b'\x00\x02') or sep < 10:
- return sentinel
- # Step 4
- return em[sep + 1:]
+
+ # Step 3 (not constant time when the sentinel is not a byte string)
+ output = bytes(bytearray(k))
+ if not is_bytes(sentinel) or len(sentinel) > k:
+ size = _pkcs1_decode(em, b'', expected_pt_len, output)
+ if size < 0:
+ return sentinel
+ else:
+ return output[size:]
+
+ # Step 3 (somewhat constant time)
+ size = _pkcs1_decode(em, sentinel, expected_pt_len, output)
+ return output[size:]
def new(key, randfunc=None):
@@ -196,4 +215,3 @@ def new(key, randfunc=None):
if randfunc is None:
randfunc = Random.get_random_bytes
return PKCS115_Cipher(key, randfunc)
-
diff --git a/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.pyi b/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.pyi
index ff4e3f2..b69f509 100644
--- a/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.pyi
+++ b/frozen_deps/Cryptodome/Cipher/PKCS1_v1_5.pyi
@@ -1,8 +1,9 @@
-from typing import Callable, Union, Any, Optional
+from typing import Callable, Union, Any, Optional, TypeVar
from Cryptodome.PublicKey.RSA import RsaKey
Buffer = Union[bytes, bytearray, memoryview]
+T = TypeVar('T')
class PKCS115_Cipher:
def __init__(self,
@@ -11,7 +12,9 @@ class PKCS115_Cipher:
def can_encrypt(self) -> bool: ...
def can_decrypt(self) -> bool: ...
def encrypt(self, message: Buffer) -> bytes: ...
- def decrypt(self, ciphertext: Buffer) -> bytes: ...
+ def decrypt(self, ciphertext: Buffer,
+ sentinel: T,
+ expected_pt_len: Optional[int] = ...) -> Union[bytes, T]: ...
def new(key: RsaKey,
randfunc: Optional[Callable[[int], bytes]] = ...) -> PKCS115_Cipher: ...
diff --git a/frozen_deps/Cryptodome/Cipher/_ARC4.abi3.so b/frozen_deps/Cryptodome/Cipher/_ARC4.abi3.so
new file mode 100755
index 0000000..c367472
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_ARC4.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_Salsa20.abi3.so b/frozen_deps/Cryptodome/Cipher/_Salsa20.abi3.so
new file mode 100755
index 0000000..10ba4b7
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_Salsa20.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_chacha20.abi3.so b/frozen_deps/Cryptodome/Cipher/_chacha20.abi3.so
new file mode 100755
index 0000000..316d6cb
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_chacha20.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_mode_ctr.py b/frozen_deps/Cryptodome/Cipher/_mode_ctr.py
index 99712d0..74783ec 100644
--- a/frozen_deps/Cryptodome/Cipher/_mode_ctr.py
+++ b/frozen_deps/Cryptodome/Cipher/_mode_ctr.py
@@ -184,15 +184,15 @@ class CtrMode(object):
if self.encrypt not in self._next:
raise TypeError("encrypt() cannot be called after decrypt()")
self._next = [self.encrypt]
-
+
if output is None:
ciphertext = create_string_buffer(len(plaintext))
else:
ciphertext = output
-
+
if not is_writeable_buffer(output):
raise TypeError("output must be a bytearray or a writeable memoryview")
-
+
if len(plaintext) != len(output):
raise ValueError("output must have the same length as the input"
" (%d bytes)" % len(plaintext))
@@ -206,7 +206,7 @@ class CtrMode(object):
raise OverflowError("The counter has wrapped around in"
" CTR mode")
raise ValueError("Error %X while encrypting in CTR mode" % result)
-
+
if output is None:
return get_raw_buffer(ciphertext)
else:
@@ -248,7 +248,7 @@ class CtrMode(object):
if self.decrypt not in self._next:
raise TypeError("decrypt() cannot be called after encrypt()")
self._next = [self.decrypt]
-
+
if output is None:
plaintext = create_string_buffer(len(ciphertext))
else:
@@ -256,12 +256,11 @@ class CtrMode(object):
if not is_writeable_buffer(output):
raise TypeError("output must be a bytearray or a writeable memoryview")
-
+
if len(ciphertext) != len(output):
raise ValueError("output must have the same length as the input"
" (%d bytes)" % len(plaintext))
-
result = raw_ctr_lib.CTR_decrypt(self._state.get(),
c_uint8_ptr(ciphertext),
c_uint8_ptr(plaintext),
@@ -271,7 +270,7 @@ class CtrMode(object):
raise OverflowError("The counter has wrapped around in"
" CTR mode")
raise ValueError("Error %X while decrypting in CTR mode" % result)
-
+
if output is None:
return get_raw_buffer(plaintext)
else:
@@ -324,8 +323,8 @@ def _create_ctr_cipher(factory, **kwargs):
raise TypeError("Invalid parameters for CTR mode: %s" % str(kwargs))
if counter is not None and (nonce, initial_value) != (None, None):
- raise TypeError("'counter' and 'nonce'/'initial_value'"
- " are mutually exclusive")
+ raise TypeError("'counter' and 'nonce'/'initial_value'"
+ " are mutually exclusive")
if counter is None:
# Cryptodome.Util.Counter is not used
@@ -337,7 +336,7 @@ def _create_ctr_cipher(factory, **kwargs):
else:
if len(nonce) >= factory.block_size:
raise ValueError("Nonce is too long")
-
+
# What is not nonce is counter
counter_len = factory.block_size - len(nonce)
@@ -350,7 +349,8 @@ def _create_ctr_cipher(factory, **kwargs):
initial_counter_block = nonce + long_to_bytes(initial_value, counter_len)
else:
if len(initial_value) != counter_len:
- raise ValueError("Incorrect length for counter byte string (%d bytes, expected %d)" % (len(initial_value), counter_len))
+ raise ValueError("Incorrect length for counter byte string (%d bytes, expected %d)" %
+ (len(initial_value), counter_len))
initial_counter_block = nonce + initial_value
return CtrMode(cipher_state,
@@ -379,7 +379,7 @@ def _create_ctr_cipher(factory, **kwargs):
while initial_value > 0:
words.append(struct.pack('B', initial_value & 255))
initial_value >>= 8
- words += [ b'\x00' ] * max(0, counter_len - len(words))
+ words += [b'\x00'] * max(0, counter_len - len(words))
if not little_endian:
words.reverse()
initial_counter_block = prefix + b"".join(words) + suffix
diff --git a/frozen_deps/Cryptodome/Cipher/_mode_ecb.py b/frozen_deps/Cryptodome/Cipher/_mode_ecb.py
index 4c381f7..a01a16f 100644
--- a/frozen_deps/Cryptodome/Cipher/_mode_ecb.py
+++ b/frozen_deps/Cryptodome/Cipher/_mode_ecb.py
@@ -72,6 +72,7 @@ class EcbMode(object):
block_cipher : C pointer
A smart pointer to the low-level block cipher instance.
"""
+ self.block_size = block_cipher.block_size
self._state = VoidPointer()
result = raw_ecb_lib.ECB_start_operation(block_cipher.get(),
@@ -213,6 +214,7 @@ def _create_ecb_cipher(factory, **kwargs):
to be present"""
cipher_state = factory._create_base_cipher(kwargs)
+ cipher_state.block_size = factory.block_size
if kwargs:
raise TypeError("Unknown parameters for ECB: %s" % str(kwargs))
return EcbMode(cipher_state)
diff --git a/frozen_deps/Cryptodome/Cipher/_pkcs1_decode.abi3.so b/frozen_deps/Cryptodome/Cipher/_pkcs1_decode.abi3.so
new file mode 100755
index 0000000..cbb4a6f
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_pkcs1_decode.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_aes.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_aes.abi3.so
new file mode 100755
index 0000000..883fc94
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_aes.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_aesni.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_aesni.abi3.so
new file mode 100755
index 0000000..8e971c8
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_aesni.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_arc2.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_arc2.abi3.so
new file mode 100755
index 0000000..2370b62
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_arc2.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_blowfish.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_blowfish.abi3.so
new file mode 100755
index 0000000..48af6a3
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_blowfish.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_cast.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_cast.abi3.so
new file mode 100755
index 0000000..7efb7e7
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_cast.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_cbc.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_cbc.abi3.so
new file mode 100755
index 0000000..0696380
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_cbc.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_cfb.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_cfb.abi3.so
new file mode 100755
index 0000000..32d333a
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_cfb.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_ctr.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_ctr.abi3.so
new file mode 100755
index 0000000..1810b56
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_ctr.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_des.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_des.abi3.so
new file mode 100755
index 0000000..01a2495
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_des.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_des3.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_des3.abi3.so
new file mode 100755
index 0000000..ec932c1
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_des3.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_ecb.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_ecb.abi3.so
new file mode 100755
index 0000000..7dc6a67
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_ecb.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_eksblowfish.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_eksblowfish.abi3.so
new file mode 100755
index 0000000..43734c9
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_eksblowfish.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_ocb.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_ocb.abi3.so
new file mode 100755
index 0000000..50e0016
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_ocb.abi3.so
Binary files differ
diff --git a/frozen_deps/Cryptodome/Cipher/_raw_ofb.abi3.so b/frozen_deps/Cryptodome/Cipher/_raw_ofb.abi3.so
new file mode 100755
index 0000000..e0db6db
--- /dev/null
+++ b/frozen_deps/Cryptodome/Cipher/_raw_ofb.abi3.so
Binary files differ