A Python encryption library implemented in Rust. It supports AEAD with AES-GCM and ChaCha20Poly1305. It uses ring crate to handle encryption.
Project description
rencrypt
[!WARNING] This crate hasn't been audited, but it mostly wraps
ring
crate which is a well known audited library, so in principle at least the primitives should offer a similar level of security.
This is still under development. Please do not use it with sensitive data just yet. Please wait for a stable release and maybe an audit.
It's mostly ideal for experimental and learning projects.
A Python encryption library implemented in Rust. It supports AEAD
with AES-GCM
and ChaCha20Poly1305
. It uses ring to handle encryption.
If offers slightly higher speed compared to other Python libs, especially for small chunks of data. The API also tries to be easy to use but it's more optimized for speed than usability.
So if you want to achieve the highest possible encryption speed, consider giving it a try.
Benchmark
Some benchmarks comparing it to PyFLocker which from my benchmarks is the fastest among other Python libs like cryptography
, NaCl
(libsodium
), PyCryptodome
Buffer in memory
This is useful when you keep a buffer, set your plaintext/ciphertext in there, and then encrypt/decrypt in-place in that buffer. This is the most performant way to use it, because it does't copy any bytes nor allocate new memory.
rencrypt
is faster on small buffers, less than few MB, PyFLocker
is comming closer for larger buffers.
Encrypt seconds
Decrypt seconds
Block size and duration in seconds
MB | rencrypt encrypt |
PyFLocker encrypt |
rencrypt decrypt |
PyFLocker decrypt |
---|---|---|---|---|
0.03125 | 0.00001 | 0.00091 | 0.00001 | 0.00004 |
0.0625 | 0.00001 | 0.00005 | 0.00001 | 0.00004 |
0.125 | 0.00002 | 0.00005 | 0.00003 | 0.00005 |
0.25 | 0.00004 | 0.00008 | 0.00005 | 0.00009 |
0.5 | 0.00010 | 0.00014 | 0.00011 | 0.00015 |
1 | 0.00021 | 0.00024 | 0.00021 | 0.00029 |
2 | 0.00043 | 0.00052 | 0.00044 | 0.00058 |
4 | 0.00089 | 0.00098 | 0.00089 | 0.00117 |
8 | 0.00184 | 0.00190 | 0.00192 | 0.00323 |
16 | 0.00353 | 0.00393 | 0.00367 | 0.00617 |
32 | 0.00678 | 0.00748 | 0.00749 | 0.01348 |
64 | 0.01361 | 0.01461 | 0.01460 | 0.02697 |
128 | 0.02923 | 0.03027 | 0.03134 | 0.05410 |
256 | 0.06348 | 0.06188 | 0.06136 | 0.10417 |
512 | 0.11782 | 0.13463 | 0.12090 | 0.21114 |
1024 | 0.25001 | 0.24953 | 0.25377 | 0.42581 |
File
Encrypt seconds
Decrypt seconds
File size and duration in seconds
MB | rencrypt encrypt |
PyFLocker encrypt |
rencrypt decrypt |
PyFLocker decrypt |
---|---|---|---|---|
0.031251 | 0.00010 | 0.00280 | 0.00004 | 0.00479 |
0.062501 | 0.00009 | 0.00218 | 0.00005 | 0.00143 |
0.125 | 0.00020 | 0.00212 | 0.00014 | 0.00129 |
0.25 | 0.00034 | 0.00232 | 0.00020 | 0.00165 |
0.5 | 0.00050 | 0.00232 | 0.00035 | 0.00181 |
1 | 0.00087 | 0.00356 | 0.00065 | 0.00248 |
2 | 0.00215 | 0.00484 | 0.00154 | 0.00363 |
4 | 0.00361 | 0.00765 | 0.00301 | 0.00736 |
8 | 0.00688 | 0.01190 | 0.00621 | 0.00876 |
16 | 0.01503 | 0.02097 | 0.01202 | 0.01583 |
32 | 0.02924 | 0.03642 | 0.02563 | 0.02959 |
64 | 0.05737 | 0.06473 | 0.04431 | 0.05287 |
128 | 0.11098 | 0.12646 | 0.08944 | 0.09926 |
256 | 0.22964 | 0.24716 | 0.17402 | 0.19420 |
512 | 0.43506 | 0.46444 | 0.38143 | 0.38242 |
1024 | 0.97147 | 0.95803 | 0.78137 | 0.87363 |
2048 | 2.07143 | 2.10766 | 1.69471 | 2.99210 |
4096 | 4.85395 | 4.69722 | 5.40580 | 8.73779 |
8192 | 10.76984 | 11.76741 | 10.29253 | 21.00636 |
16384 | 21.84490 | 26.27385 | 39.56230 | 43.55530 |
Usage
There are two ways in which you can use the lib, the first one is a bit faster, the second offers a bit more flexible way to use it sacrificing a bit of performance.
- With a buffer in memory: using
encrypt()
/decrypt()
, is useful when you keep a buffer (or have it from somewhere), set your plaintext/ciphertext in there, and then encrypt/decrypt in-place in that buffer. This is the most performant way to use it, because it does't copy any bytes nor allocate new memory.
The buffer has to be anumpy array
, so that it's easier for you to collect data with slices that reference to underlying data. This is because the whole buffer needs to be the size of ciphertext (which is plaintext_len + tag_len + nonce_len) but you may pass a slice of the buffer to a BufferedReader toread_into()
the plaintext.
If you can directly collect the data to that buffer, likeBufferedReader.read_into()
, this is the preffered way to go. - From some bytes into the buffer: using
encrypt_into()
/decrypt_into()
, when you have some arbitrary data that you want to work with. It will first copy those bytes to the buffer then do the operation in-place in the buffer. This is a bit slower, especially for large data, because it first needs to copy the bytes to the buffer.
Encryption provider
You will notice in the examples we initiate the Cipher
from something like this cipher_meta = CipherMeta.Ring(RingAlgorithm.AES256GCM)
. The first part CipherMeta.Ring
is the encryption provider, for now it's only one but in the future we will add more. The last part is the algorithm for that provider, in this case AES256GCM
. Each provier might expose specific algorithms.
Security
For security reasons it's a good practice to lock the memory with mlock()
in which you keep sensitive data like passwords or encrryption keys, or any other plaintext sensitive content. Also it's important to zeroize the data when not used anymore.
In the case of Copy-on-write fork you need to zeroize the memory before forking the child process.
In the examples below you will see how to do it.
Examples
You can see more in examples directory and in bench.py which has some benchmarks. Here are few simple examples:
Encrypt and decrypt with a buffer in memory
encrypt()
/decrypt()
This is the most performant way to use it as it will not copy bytes to the buffer nor allocate new memory for plaintext and ciphertext.
# This is the most performant way to use it as it will not copy bytes to the buffer nor allocate new memory for plaintext and ciphertext.
from rencrypt import Cipher, CipherMeta, RingAlgorithm
import os
from zeroize import zeroize1, mlock, munlock
import numpy as np
if __name__ == "__main__":
try:
# You can use also other algorithms like cipher_meta = CipherMeta.Ring(RingAlgorithm.ChaCha20Poly1305)`.
cipher_meta = CipherMeta.Ring(RingAlgorithm.AES256GCM)
key_len = cipher_meta.key_len()
key = bytearray(key_len)
# for security reasons we lock the memory of the key so it won't be swapped to disk
mlock(key)
cipher_meta.generate_key(key)
# The key is copied and the input key is zeroized for security reasons.
# The copied key will also be zeroized when the object is dropped.
cipher = Cipher(cipher_meta, key)
# it was zeroized we can unlock it
munlock(key)
# we create a buffer based on plaintext block len of 4096
# the actual buffer needs to be a bit larger as the ciphertext also includes the tag and nonce
plaintext_len = 4096
ciphertext_len = cipher.ciphertext_len(plaintext_len)
buf = np.array([0] * ciphertext_len, dtype=np.uint8)
# for security reasons we lock the memory of the buffer so it won't be swapped to disk, because it contains plaintext after decryption
mlock(buf)
aad = b"AAD"
# put some plaintext in the buffer, it would be ideal if you can directly collect the data into the buffer without allocating new memory
# but for the sake of example we will allocate and copy the data
plaintext = bytearray(os.urandom(plaintext_len))
# for security reasons we lock the memory of the plaintext so it won't be swapped to disk
mlock(plaintext)
# cipher.copy_slice is slighlty faster than buf[:plaintext_len] = plaintext, especially for large plaintext, because it copies the data in parallel
# cipher.copy_slice takes bytes as input, cipher.copy_slice1 takes bytearray
cipher.copy_slice(plaintext, buf)
# encrypt it, this will encrypt in-place the data in the buffer
print("encryping...")
ciphertext_len = cipher.encrypt(buf, plaintext_len, 42, aad)
cipertext = buf[:ciphertext_len]
# you can do something with the ciphertext
# decrypt it
# if you need to copy ciphertext to buffer, we don't need to do it now as it's already in the buffer
# cipher.copy_slice(ciphertext, buf[:len(ciphertext)])
print("decryping...")
plaintext_len = cipher.decrypt(buf, ciphertext_len, 42, aad)
plaintext2 = buf[:plaintext_len]
# for security reasons we lock the memory of the plaintext so it won't be swapped to disk
mlock(plaintext2)
assert plaintext == plaintext2
finally:
# best practice, you should always zeroize the plaintext and keys after you are done with it (key will be zeroized when the enc object is dropped)
zeroize1(plaintext)
zeroize1(buf)
munlock(buf)
munlock(plaintext)
print("bye!")
You can use other ciphers like cipher = Cipher.ChaCha20Poly1305
.
Encrypt and decrypt a file
import errno
import io
import os
from pathlib import Path
import shutil
from rencrypt import Cipher, CipherMeta, RingAlgorithm
import hashlib
from zeroize import zeroize1, mlock, munlock
import numpy as np
def read_file_in_chunks(file_path, buf):
with open(file_path, "rb") as file:
buffered_reader = io.BufferedReader(file, buffer_size=len(buf))
while True:
read = buffered_reader.readinto(buf)
if read == 0:
break
yield read
def hash_file(file_path):
hash_algo = hashlib.sha256()
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_algo.update(chunk)
return hash_algo.hexdigest()
def compare_files_by_hash(file1, file2):
return hash_file(file1) == hash_file(file2)
def silentremove(filename):
try:
os.remove(filename)
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
raise # re-raise exception if a different error occurred
def create_directory_in_home(dir_name):
# Get the user's home directory
home_dir = Path.home()
# Create the full path for the new directory
new_dir_path = home_dir / dir_name
# Create the directory
try:
new_dir_path.mkdir(parents=True, exist_ok=True)
except Exception as e:
print(f"Error creating directory: {e}")
return new_dir_path.absolute().__str__()
def create_file_with_size(file_path_str, size_in_bytes):
with open(file_path_str, "wb") as f:
for _ in range((size_in_bytes // 4096) + 1):
f.write(os.urandom(min(4096, size_in_bytes)))
f.flush()
def delete_dir(path):
if os.path.exists(path):
shutil.rmtree(path)
else:
print(f"Directory {path} does not exist.")
if __name__ == "__main__":
try:
tmp_dir = create_directory_in_home("Cipher_tmp")
fin = tmp_dir + "/" + "fin"
fout = tmp_dir + "/" + "fout.enc"
create_file_with_size(fin, 10 * 1024 * 1024)
chunk_len = 256 * 1024
# You can use also other algorithms like cipher_meta = CipherMeta.Ring(RingAlgorithm.ChaCha20Poly1305)`.
cipher_meta = CipherMeta.Ring(RingAlgorithm.AES256GCM)
key_len = cipher_meta.key_len()
key = bytearray(key_len)
# for security reasons we lock the memory of the key so it won't be swapped to disk
mlock(key)
cipher_meta.generate_key(key)
# The key is copied and the input key is zeroized for security reasons.
# The copied key will also be zeroized when the object is dropped.
cipher = Cipher(cipher_meta, key)
# it was zeroized we can unlock it
munlock(key)
plaintext_len = chunk_len
ciphertext_len = cipher.ciphertext_len(plaintext_len)
buf = np.array([0] * ciphertext_len, dtype=np.uint8)
mlock(buf)
aad = b"AAD"
# encrypt
print("encryping...")
with open(fout, "wb", buffering=plaintext_len) as file_out:
i = 0
for read in read_file_in_chunks(fin, buf[:plaintext_len]):
ciphertext_len = cipher.encrypt(buf, read, i, aad)
file_out.write(buf[:ciphertext_len])
i += 1
file_out.flush()
# decrypt
print("decryping...")
tmp = fout + ".dec"
with open(tmp, "wb", buffering=plaintext_len) as file_out:
i = 0
for read in read_file_in_chunks(fout, buf):
plaintext_len2 = cipher.decrypt(buf, read, i, aad)
file_out.write(buf[:plaintext_len2])
i += 1
file_out.flush()
assert compare_files_by_hash(fin, tmp)
delete_dir(tmp_dir)
finally:
# best practice, you should always zeroize the plaintext and keys after you are done with it (key will be zeroized when the enc object is dropped)
# buf will containt the last block plaintext so we need to zeroize it
zeroize1(buf)
munlock(buf)
print("bye!")
Encrypt and decrypt from some bytes into the buffer
encrypt_from()
/decrypt_from()
This is a bit slower than handling data only via the buffer, especially for large plaintext, but there are situations when you can't directly collect the data to the buffer but have some data from somewhere else.
# This is a bit slower than handling data only via the buffer, especially for large plaintext,
# but there are situations when you can't directly collect the data to the buffer but have some bytes from somewhere else.
from rencrypt import Cipher, CipherMeta, RingAlgorithm
import os
from zeroize import zeroize1, mlock, munlock
import numpy as np
if __name__ == "__main__":
try:
# You can use also other algorithms like cipher_meta = CipherMeta.Ring(RingAlgorithm.ChaCha20Poly1305)`.
cipher_meta = CipherMeta.Ring(RingAlgorithm.AES256GCM)
key_len = cipher_meta.key_len()
key = bytearray(key_len)
# for security reasons we lock the memory of the key so it won't be swapped to disk
mlock(key)
cipher_meta.generate_key(key)
# The key is copied and the input key is zeroized for security reasons.
# The copied key will also be zeroized when the object is dropped.
cipher = Cipher(cipher_meta, key)
# it was zeroized we can unlock it
munlock(key)
# we create a buffer based on plaintext block len of 4096
# the actual buffer needs to be a bit larger as the ciphertext also includes the tag and nonce
plaintext_len = 4096
ciphertext_len = cipher.ciphertext_len(plaintext_len)
buf = np.array([0] * ciphertext_len, dtype=np.uint8)
# for security reasons we lock the memory of the buffer so it won't be swapped to disk, because it contains plaintext after decryption
mlock(buf)
aad = b"AAD"
plaintext = bytearray(os.urandom(plaintext_len))
# for security reasons we lock the memory of the plaintext so it won't be swapped to disk
mlock(plaintext)
# encrypt it, after this will have the ciphertext in the buffer
print("encryping...")
ciphertext_len = cipher.encrypt_from(plaintext, buf, 42, aad)
cipertext = bytes(buf[:ciphertext_len])
# decrypt it
print("decryping...")
plaintext_len = cipher.decrypt_from(cipertext, buf, 42, aad)
plaintext2 = buf[:plaintext_len]
# for security reasons we lock the memory of the plaintext so it won't be swapped to disk
mlock(plaintext2)
assert plaintext == plaintext2
finally:
# best practice, you should always zeroize the plaintext and keys after you are done with it (key will be zeroized when the enc object is dropped)
zeroize1(plaintext)
zeroize1(buf)
munlock(buf)
munlock(plaintext)
print("bye!")
Zeroing memory before forking child process
This mitigates the problems that appears on Copy-on-write fork. You need to zeroize the data before forking the child process.
""" In the case of [Copy-on-write fork](https://en.wikipedia.org/wiki/Copy-on-write) you need to zeroize the memory before forking the child process. """
import os
from zeroize import zeroize1, mlock, munlock
if __name__ == "__main__":
try:
# Maximum you can mlock is 4MB
sensitive_data = bytearray(b"Sensitive Information")
mlock(sensitive_data)
print("Before zeroization:", sensitive_data)
zeroize1(sensitive_data)
print("After zeroization:", sensitive_data)
# Forking after zeroization to ensure no sensitive data is copied
pid = os.fork()
if pid == 0:
# This is the child process
print("Child process memory after fork:", sensitive_data)
else:
# This is the parent process
os.wait() # Wait for the child process to exit
print("all good, bye!")
finally:
# Unlock the memory
print("unlocking memory")
munlock(sensitive_data)
Build from source
Browser
Geting sources from GitHub
Skip this if you're starting it in browser.
git clone https://github.com/radumarias/rencrypt-python && cd Cipher-python
Compile and run
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
To configure your current shell, you need to source the corresponding env file under $HOME/.cargo. This is usually done by running one of the following (note the leading DOT):
. "$HOME/.cargo/env"
python -m venv .env
source .env/bin/activate
pip install -r requirements.txt
maturin develop --release
pytest
python examples/encrypt.py
python examples/encrypt_into.py
python examples/encrypt_from.py
python examples/encrypt_file.py
python benches/bench.py
More benchmarks
Different ways to use the lib
Encrypt
Decrypt
Block size and duration in seconds
MB | rencrypt encrypt |
PyFLocker encrypt update_into |
rencrypt encrypt_from |
PyFLocker encrypt update |
rencrypt decrypt |
PyFLocker decrypt update_into |
rencrypt decrypt_from |
PyFLocker
decrypt update |
0.03125 | 0.00001 | 0.00091 | 0.00001 | 0.00009 | 0.00001 | 0.00004 | 0.00001 | 0.00005 |
0.0625 | 0.00001 | 0.00005 | 0.00002 | 0.00005 | 0.00001 | 0.00004 | 0.00002 | 0.00008 |
0.125 | 0.00002 | 0.00005 | 0.00003 | 0.00011 | 0.00003 | 0.00005 | 0.00003 | 0.00013 |
0.25 | 0.00004 | 0.00008 | 0.00007 | 0.00019 | 0.00005 | 0.00009 | 0.00007 | 0.00023 |
0.5 | 0.0001 | 0.00014 | 0.00015 | 0.00035 | 0.00011 | 0.00015 | 0.00014 | 0.00043 |
1 | 0.00021 | 0.00024 | 0.0008 | 0.00082 | 0.00021 | 0.00029 | 0.00044 | 0.00103 |
2 | 0.00043 | 0.00052 | 0.00082 | 0.00147 | 0.00044 | 0.00058 | 0.00089 | 0.00176 |
4 | 0.00089 | 0.00098 | 0.00174 | 0.00284 | 0.00089 | 0.00117 | 0.0013 | 0.0034 |
8 | 0.00184 | 0.0019 | 0.00263 | 0.00523 | 0.00192 | 0.00323 | 0.00283 | 0.00571 |
16 | 0.00353 | 0.00393 | 0.00476 | 0.0141 | 0.00367 | 0.00617 | 0.00509 | 0.01031 |
32 | 0.00678 | 0.00748 | 0.00904 | 0.0244 | 0.00749 | 0.01348 | 0.01014 | 0.02543 |
64 | 0.01361 | 0.01461 | 0.01595 | 0.05064 | 0.0146 | 0.02697 | 0.0192 | 0.05296 |
128 | 0.02923 | 0.03027 | 0.03343 | 0.10362 | 0.03134 | 0.0541 | 0.03558 | 0.1138 |
256 | 0.06348 | 0.06188 | 0.07303 | 0.20911 | 0.06136 | 0.10417 | 0.07572 | 0.20828 |
512 | 0.11782 | 0.13463 | 0.14283 | 0.41929 | 0.1209 | 0.21114 | 0.14434 | 0.41463 |
1024 | 0.25001 | 0.24953 | 0.28912 | 0.8237 | 0.25377 | 0.42581 | 0.29795 | 0.82588 |
Speed throughput
256KB
seems to be the sweet spot for buffer size that offers the max MB/s
speed for encryption, on benchmarks that seem to be the case.
We performed 10.000
encryption operations for each size varying from 1KB
to 16MB
.
MB | MB/s |
---|---|
0.0009765625 | 1083 |
0.001953125 | 1580 |
0.00390625 | 2158 |
0.0078125 | 2873 |
0.015625 | 3348 |
0.03125 | 3731 |
0.0625 | 4053 |
0.125 | 4156 |
0.25 | 4247 |
0.5 | 4182 |
1.0 | 3490 |
2.0 | 3539 |
4.0 | 3684 |
8.0 | 3787 |
16.0 | 3924 |
For the future
- Add more
AES
ciphers likeAES128-GCM
andAES-GCM-SIV
- Add other encryption providers like RustCrypto and libsodium
- Maybe add support for
RSA
andElliptic-curve cryptography
- Saving and loading keys from file
Considerations
This lib hasn't been audited, but it mostly wraps ring
crate which is a well known library, so in principle it should offer as similar level of security.
Contribute
Feel free to fork it, change and use it in any way that you want. If you build something interesting and feel like sharing pull requests are always appreciated.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache License, shall be dual-licensed as above, without any additional terms or conditions.
How to contribute
- Fork the repo
- Make the changes in your fork
- Add tests for you changes, if applicable
cargo build --all --all-features
and fix any issuescargo fmt --all
, you can cnofigure your IDE to do this on save RustRover and VSCodecargo check --all --all-features
and fix any errors and warningscargo clippy --all --all-features -- -D warnings
and fix any errorscargo test --all --all-features
and fix any issuescargo bench --all --all-features
and fix any issues- Create a PR
- Monitor the checks (GitHub actions runned)
- Respond to any comments
- In the end ideally it will be merged to
main
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for rencrypt-0.3.23-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 067bb3d96b4e584c30b2437fc086f697f2466b027ff88a32e14a390719a9b322 |
|
MD5 | ed391fb92b1b7594ed09c6e895fab3c3 |
|
BLAKE2b-256 | 4ce805d0c9fa940cc0e9987fe849e05ebba8e884ce0a59ebe3315bc17c52aacc |
Hashes for rencrypt-0.3.23-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8689f6f4889156565f8e0c7bd58d8c3c4ba71386cdee15ba50b501a3120ddd6d |
|
MD5 | f1a80c8f1160be23ae90e5feba4a1389 |
|
BLAKE2b-256 | 1f2b24486688865e6ab1e26014819030eaafc918f14373fd49b6a1b75414bffc |
Hashes for rencrypt-0.3.23-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f918a97fe882f7b643c745e21f2caa22cfbea974c9bc40c1e34a522184f40705 |
|
MD5 | 4ebb20a4e747a6758ea9806da31e8e8a |
|
BLAKE2b-256 | 1537abb7402f517929d4b5ebf179eec2c09a4ccc96448636b21fbabe7a82966e |
Hashes for rencrypt-0.3.23-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8e32c62d433028e8de4c73072896917291b777a986356e94a534e6a9043d85a |
|
MD5 | 9b5e9e7a4e7853ccfe0a49ab463b6d64 |
|
BLAKE2b-256 | 7d119a0ef45e7754be458e8940335d165ba99210f85957d2d7a15475e3d4dafa |
Hashes for rencrypt-0.3.23-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f39887d27e8ea1fee66d9cd11a3fea52ca046784712024d6eb400ab4177fe723 |
|
MD5 | c64fc97249b2c684e390556fa6e225ac |
|
BLAKE2b-256 | 825032c5f45beab7eccfa50af89f786cfa66f08d654423853a1bb865d2ec6ece |
Hashes for rencrypt-0.3.23-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a83e3b1b5d5b02d7dc0285482e75c00c8112fd226c6262b848799bd4b180e6d |
|
MD5 | 96fee813707fc8e05898f63cadea543f |
|
BLAKE2b-256 | 271ecc24c65620f3c80df456c0d1730655667f268baf0e59492799e202530351 |
Hashes for rencrypt-0.3.23-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc95c3927e95dd6f06a0a48e32218692b738101b0353ad6076f89352d56b934d |
|
MD5 | f8db93ac55ffb8ddd4125762da1122bd |
|
BLAKE2b-256 | 5baeb1c27b2d231b7afb1cc9c76fcb9a0a73e6b54e06ce55c26e46eacc9e37dd |
Hashes for rencrypt-0.3.23-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90f25580037a2f602c9322140e7a56a4b44206e93752256016a313f3adb252fa |
|
MD5 | bddf5e6f9f0416badcb5548c6e0874cc |
|
BLAKE2b-256 | 0e3cbfb32bf7173c5b80e85bfaa211630f151049f1dae9b4c0e8c711faa352cf |
Hashes for rencrypt-0.3.23-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 557ab4426667f316280345dc0c2a00d3f6e7d054b8bd910d3d9aad39337d9961 |
|
MD5 | d94c430a791fc2d62c0a1dc5a44667b3 |
|
BLAKE2b-256 | fbcd6daa4260eb19f584dc64d789c9466f77a0e789deb28643bdad498c0f7683 |
Hashes for rencrypt-0.3.23-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fd43a1a7ce252639c405732bb7407ea8782fac392fbe5a167a2002ce6e71bfd |
|
MD5 | e609a81407626300521c29fa8de0cc42 |
|
BLAKE2b-256 | bbf6cf48852977ff1ae6248f46558e105d6cf874689a6c64dc5796f222f618cb |
Hashes for rencrypt-0.3.23-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 05fc247caaf26cb3ad1364b519c0cb8b679ec8df362430337cdb2a2ff32b2d40 |
|
MD5 | dc36721c8b62db292ede730f18aa3bad |
|
BLAKE2b-256 | d6e58476beb44d4d4521b446d9ba44a24e0162b37af1e90bb62ca6bf27bb2588 |
Hashes for rencrypt-0.3.23-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ec8cd973947f2ad1e425af6b254dce917c10fc65fc4befbdee33750c247e52c |
|
MD5 | 1b19496b7add2054cc4d6bc8fb6a40f6 |
|
BLAKE2b-256 | 67fcc65575dc79042f10b109f4ca34b1fe0ed92b9b5b418e95e5837f045c613c |
Hashes for rencrypt-0.3.23-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee05d1a946ee3c6d44087ffce1d54a4e11a48398cba1d29f5fcccfb6041239d1 |
|
MD5 | d60afbcf8ede94c2a564aafa4d504502 |
|
BLAKE2b-256 | 401c7e0203a41a0a5aeaab4febf4481b76e8911b142138324416ccf1fcfea1e3 |
Hashes for rencrypt-0.3.23-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0a3600471ff014d5cbb86827d2b90ee3f3b862abe89acefdedea085cb85501a |
|
MD5 | 1ef73d3dd929255989c0c0ec56526ee8 |
|
BLAKE2b-256 | c62a6f3834caf64ba2f131c043bf7969ab01294187f31fc39d0636208f838987 |
Hashes for rencrypt-0.3.23-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f78ea79779f69067b018d88fcaa5348b4fa7ae47019690988ebb8192c6c693a |
|
MD5 | 21d78b5f70d6f3befa4747d0371b6751 |
|
BLAKE2b-256 | b5a9839dae77aaea90eab38f93cf4c2a97a1341280cca8ce48a73397b9b53cc3 |
Hashes for rencrypt-0.3.23-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eccc0f5f961ac34641b38cffa668d7f6ba431edacea68fa7c262344e4d49f258 |
|
MD5 | c42751e6d52c2023ae6af3c49a6cde9e |
|
BLAKE2b-256 | 48ba7a7f271082f4e0ce927a8ffbd8dc64c319cc31b2d97d60ae94f9971a1288 |
Hashes for rencrypt-0.3.23-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01bfc43feea614632195441123025369eb8a0b4746d8cf23ca392cebbd6fb8fe |
|
MD5 | ee5f2ecf21be3a2d10463afb6e5ff912 |
|
BLAKE2b-256 | 2d6181c5f5f0b922cbe24f4a0bc70ccb4049edc6f274b070736d49e254f9097e |
Hashes for rencrypt-0.3.23-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0bdd351a281a8c527d486754e44bbc39dfe6630d67d61bc6c4b89cefca5d8a3d |
|
MD5 | 927f663fd14f1639bac0cceeb82079c0 |
|
BLAKE2b-256 | c775cc40e6c370920f6b258795a1372a9f2e084d5c5300ffc815a38f2192fc5f |
Hashes for rencrypt-0.3.23-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | be36518d6a4cce8ee58a235705fc7fb2eba4e00d0fdf64fe9ea81ed7cfac39f8 |
|
MD5 | 0d9d0230b74b65cd3ef736bc0240872d |
|
BLAKE2b-256 | 1c3775700a8156dbad1c9274516c9980633e21a526bccb50b55488ad9afe9c47 |
Hashes for rencrypt-0.3.23-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f51b138af838b4ee9ac9e9f36878f019cc177a2dfeffc080c022c35dd45f1370 |
|
MD5 | 71f64912636cb790ddc86d081c9de4e2 |
|
BLAKE2b-256 | e884ca44aa3c7eb2bb2dc171fd1bf106fe8a3bb0f39b8e93495c0b7a5dc4fbab |
Hashes for rencrypt-0.3.23-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 271ce5c5aee20fbfab66efc4f87d0083018411b7370a6dfd69b8154ec30a403c |
|
MD5 | 7c4d50070944cc59d6cfaa779854e323 |
|
BLAKE2b-256 | 7425bf43c3db0d64d376837bf585a4f05d1dcd05df1300cf3af053f651f52bb8 |
Hashes for rencrypt-0.3.23-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72e0e21ee0b082b14f3f6b3a8cbb16efeed915158775d74cb545704db8476f71 |
|
MD5 | c01fc16ce17445731111056f4482c7b4 |
|
BLAKE2b-256 | 97f15d348ef0996792649ab7c773d497cbe7119b4eff197d551b7578eefca925 |
Hashes for rencrypt-0.3.23-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee3b109961511134dcf6fa198b76c6338ab6ecbec6c38cea7a76be9358e4555c |
|
MD5 | de40725942cac2e781730103b8467d9d |
|
BLAKE2b-256 | 3116c80f95a7d5fe71fa6b9ad90d8d9293fbec6a89008b4fb743d9fcd2e4e798 |
Hashes for rencrypt-0.3.23-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 056174c8b1a32aea341a6585c006725d3a2f3f5f78d172d47c662a7f3ff3de84 |
|
MD5 | 2c724df84a380ef998fca4b8a4d55f60 |
|
BLAKE2b-256 | 5f7e3b8da226ed03f2d1ab04aa8560c0d92f1badd99a52f01f4892d773b9f110 |
Hashes for rencrypt-0.3.23-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d92acc5a7466748cbb07fac47bb9b5c43e92185d4812c4da2239526553011ba |
|
MD5 | 289c92ce85382fe92436c45b91261492 |
|
BLAKE2b-256 | 69d11ba2591746ed26b621398dcd663b85402b47ba226d5a15b758888ef0a4af |
Hashes for rencrypt-0.3.23-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd340df805712d49a5438086c22e76bdfd9e5aee8a22bd655195d06a5ae854c3 |
|
MD5 | 83bf6dda5160411c6a79ae6604e241e4 |
|
BLAKE2b-256 | 3a2021437768fd8351a3f25932264db1f20e9c72c15de628cca82206ca7db006 |
Hashes for rencrypt-0.3.23-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5404f3491c62b3bab720393c725e1a61babdca043ad7d3568a2d61140910a7b0 |
|
MD5 | f2094695a5cce78c523928f7c3779f6b |
|
BLAKE2b-256 | c77334de079027067701c547bfa9616f7fda1ddbcf9c353c831e43d7242ae772 |
Hashes for rencrypt-0.3.23-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b17655b7368ba8c3e915a354bb3c4ea8460be775192a3e6977ac5ccf08223a3 |
|
MD5 | b81e205154f035af0c89fdeb7aaa7acc |
|
BLAKE2b-256 | 6ffd2d592b7c59199b95ba4adab5883d5e3c24f3a3018f43c06cfcf1488739f0 |
Hashes for rencrypt-0.3.23-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ac96bbf5c9584fb79e43028b053d68f6db93bdb57d40fa17604eb76935a2769 |
|
MD5 | bc069b592ade3994ce53ac347409c38d |
|
BLAKE2b-256 | 3c914efd5ca08408cbfc81b64a72a7b5d186d7d75a04ed101cceb35a675ab8da |
Hashes for rencrypt-0.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a1b2176d53b6df35718679f626999da88fd8a0955c464a8992b23350caf04ea |
|
MD5 | a4b5186de6ff7cbabab920fe5b2709ca |
|
BLAKE2b-256 | 6dbf16ab63bab1c527c084e5debb17195df7870a9d89af96518e733e1a86ef45 |
Hashes for rencrypt-0.3.23-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fbf724d3820db6c39a106538ffbea968ab9829ed057c802f26c05fa8c0bfd56 |
|
MD5 | 19bde59e1dd13b86638542ac8ad57b2f |
|
BLAKE2b-256 | 41bd8752f798931bb7b99e9427ffbad7cee26355f77da6ecd29de09aba19ac14 |
Hashes for rencrypt-0.3.23-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3f3e9184b8760047b7578581ca1156d837387f8a011c5121e02f108159f412b |
|
MD5 | 9ff7b84ce84395636b3a024ef6c12674 |
|
BLAKE2b-256 | 9f658a63a3c343e655422ee738f27c68d4e5f3bd87b88911f2b42612137d032b |
Hashes for rencrypt-0.3.23-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b8fe19ff96c67964b171c5dfbe6d556df6138def2ed2b88f5f55fff4aa22240 |
|
MD5 | 37071f8087fcd32256e178ce43bbd5f7 |
|
BLAKE2b-256 | 7495c3006c54dafe17f8b8407bc190d52b7add37e71b1c934d1f6ae3923a0874 |
Hashes for rencrypt-0.3.23-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9606111e1f1671cbd3d61aca07de1f005f6c7013ed787bb6d7af6351892c4584 |
|
MD5 | f55c111d0e8d6c06f5a2c81b70bf4c45 |
|
BLAKE2b-256 | 14011960c636cbff7791ac67ad83db26614c0750752337d2ea4d85161fc72b31 |
Hashes for rencrypt-0.3.23-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 450db8db22547d2db82ff01d58915d93fd14af2d34a5d2faa4cd47b1884d2c1c |
|
MD5 | c71689aab1e82add743e5f05f3b7390d |
|
BLAKE2b-256 | 691d360519afb898185167fa3e0e9a928a02fe4fec2c7a6af812e8f27d8e3bd4 |
Hashes for rencrypt-0.3.23-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e684135b8ff5c9f04f2d67b00007952c3c8da8e7babaa0d6b6da13e45040f612 |
|
MD5 | 1222f269e559f291811fbeef979b3e1f |
|
BLAKE2b-256 | 4e36b26326b762264f8e553ef29c16ec56108fb2692a09b5b08bba139c946ebe |
Hashes for rencrypt-0.3.23-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22aed1720997dd2b7bd84e10cfd9685a74721ba3e9d8cc805257d0870051b1af |
|
MD5 | a2e4be8d24c72e94742b65037639bc90 |
|
BLAKE2b-256 | ef629ce068e4731f2ba5fa2902dcff53d0fd625bde34983686dd8e6e123934de |
Hashes for rencrypt-0.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7949a851476a22e1d506a1903217cbd53c368022b62a8924221378452610f59f |
|
MD5 | 390cd414335296cdb1a8d51ade415ffe |
|
BLAKE2b-256 | 5cd6a6bc842fc6cf8b5d0a015ef0c71627a76f92efa4e2c4b254db739a1b5bcf |
Hashes for rencrypt-0.3.23-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 923aae3274884778ec65664dbc582387d7f35d7f5596b2de099f45070aaeda13 |
|
MD5 | d91e741cbe70754282d77c6563ab9975 |
|
BLAKE2b-256 | 7fe1535c6c4a9754d4d44383de0b3d8f0782e6d1a63b297c462ca146eb8ca00e |
Hashes for rencrypt-0.3.23-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91ef8c974df437b4028e7a15abb731e5c6b93a1dc9fd233db6fdc50079eb8ea9 |
|
MD5 | bffddf7c185baa137350f78cddef1f65 |
|
BLAKE2b-256 | cf0d616ba4c0ff20703a4453f2c2881b7e1aefaab17cdfc6ffc90df63611ba81 |
Hashes for rencrypt-0.3.23-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7256f8d2ef5d9cfe8bfb630e64a448c9837a0d5f53b27cd61eb2e501d6df2c4b |
|
MD5 | 0dadbd5b0257c73e26fa3a69a3debc8b |
|
BLAKE2b-256 | 0cea9e929985ea70dd3ded0bf72cf696f50fe4cb3be192dd4e1e121a050bbb1c |
Hashes for rencrypt-0.3.23-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f937829cfa2858526b857357fa3ea550e7a801b4733620167080e4cef8d7a4b7 |
|
MD5 | 5e34d1d3c098bee48e23645f0fb5a9d3 |
|
BLAKE2b-256 | 7a13065cb0d3351b6a3ea1a49dbf53429922047b37b3723d3f907cabe42128c6 |
Hashes for rencrypt-0.3.23-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 519415690eaa42257953b56fe13c3d0ea4a230c9ca149c9d79a33192d62ff485 |
|
MD5 | 3325a9e33bf0d46d58c8acd4755ca0db |
|
BLAKE2b-256 | b24088ba389b456fe2ca0f7ef225cbd84af41695307b9b74110accfce914dbea |
Hashes for rencrypt-0.3.23-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a22166fe454db36f64e933c990993cefee683d65b0db2c78792c5f91b6687da |
|
MD5 | 53a0cb7ae0bfc27c265f08e2f78b51c7 |
|
BLAKE2b-256 | 9b731a95160da76c868c9d638890a8a9f0e129dadc49abc0dd335be1f1fa49d1 |
Hashes for rencrypt-0.3.23-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27ee64e5e798bd6a7be47f3b83642ab8fa47e6dff2a97ef56f6fcdf5e865e652 |
|
MD5 | ee3b7c3ba13bd0675ab8353b8b886caf |
|
BLAKE2b-256 | 17684b4b7aec4d03dec14f85cd46ddea4d8b29ba0754974851d0a893e19abed7 |
Hashes for rencrypt-0.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ba52f2a6d1d5804af98b73616df54b74b7bec84436ba5d20ed0d2816f295be0 |
|
MD5 | b5aee97bf67f50c714b00f4a93991059 |
|
BLAKE2b-256 | 280be03820c1f954b28800a77740ee59210d8e01347c6d9a27f57b8312363e62 |
Hashes for rencrypt-0.3.23-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5c94aad0ab4532de271316f07c8fedc9411bf62e73b810fc4b55eb9438d5a00 |
|
MD5 | ec8f6579210d51771064f31ea06ea3ab |
|
BLAKE2b-256 | c124df21fb03f513510deefa61a0b356e6edcc5b8132c1d7ebefbac1c4bab925 |
Hashes for rencrypt-0.3.23-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e8aacd8ff968618a40fbaf6fecba751db7c3eca6d290d65e59a0c5d723cb7b30 |
|
MD5 | 6341624ef02c0183959bb285478ff04e |
|
BLAKE2b-256 | 854131a2e9a55c224bb26db8ff7ca819dc9f50f50a13f36150ff09ecaf7c11b1 |
Hashes for rencrypt-0.3.23-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90c74baf45c37e292d02f0eaa1c1c78e34bded94903eb0b76e8ceb015b0643c8 |
|
MD5 | 9aa2eb22fac0c023bf8014a8fed3794c |
|
BLAKE2b-256 | 8e3ab554572218aef5d7f646dfd2f19e67d306732e465c3632c9f0bc7ba9aaca |
Hashes for rencrypt-0.3.23-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b1f9ec8c5c0eb49c6df4b048856f2fd8de5fc2a8b28fce6ca15fcc7f23d7899 |
|
MD5 | d4a53b4f3d7b303103e03511d5f1ccbf |
|
BLAKE2b-256 | ef7b37bf40a73e217d85e1643d4055d7fccb89eb4682b8a7c195e96f3d0e73cf |
Hashes for rencrypt-0.3.23-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0db257269b15667665da4df3e63e895d375e486680d479066c69e08781c6813a |
|
MD5 | 520dc516391113e561a7b49687c5dc62 |
|
BLAKE2b-256 | ddbcf120ee2963f3bb7f4701d8ae543c4dda426780cdd5c3c97b7e32fef3e33a |
Hashes for rencrypt-0.3.23-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 166125d17c9a511982f61ecc54d164224746d938a49494102d8a6e0f4d2dece1 |
|
MD5 | fbfa4e9dfbf2b1eb9d8c6e6264e34bec |
|
BLAKE2b-256 | 669ec643d120741ce6015aac05b671f4052d59266dd3be96e8fa5922919928a8 |
Hashes for rencrypt-0.3.23-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b1aecf86426f0f8ce084b572dc51cfb7e2e85126dc2380a5f236e62f98bc906c |
|
MD5 | 2e19b782ba5a676fe8d0b4fcea6cbbb0 |
|
BLAKE2b-256 | 62246586ed008e43eca31aa69f89f4d35b688dc42c61a8bfc357a185c5e04973 |
Hashes for rencrypt-0.3.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c456d2a0af68b0453b1c481ac0532b793277f589f85711a1a7470fe6c0a7abb |
|
MD5 | 6ce99e9a316d12fa8a06c418d5864a2f |
|
BLAKE2b-256 | 14a3a0f5477da1892e5ba986f9b7a3be12325ebcea4e886623239da2e21553f9 |
Hashes for rencrypt-0.3.23-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b532960d81c30912bc291b960c17b16f7a01b5e63bf72e298b28d3e271d583d |
|
MD5 | c03a503a8a1b3eccca31e16d988ccd17 |
|
BLAKE2b-256 | 133ef612a2b501713a12f985b1dfb7222661b6191671dd66100c154e5d36ce18 |
Hashes for rencrypt-0.3.23-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bb225e31a16ef045d5f07d035550588c8b15092fa68fb3c46c834b069178884 |
|
MD5 | f2be4c49321d90b8aff5545d470cc4e0 |
|
BLAKE2b-256 | 114d66bf62ff90a773f51b7c561e418b7991886a79aee64f20e2deebadd8fc35 |
Hashes for rencrypt-0.3.23-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63307b1da2149a94b7d8fd6aa4703607406885972ac64fb4041d0094eda85427 |
|
MD5 | 3153cc62741ec203e98cb6b90dde9df9 |
|
BLAKE2b-256 | 2e26cc14b02414d659c08609ef96ee194d3ebf9eebb489eb370dbd2cffdd5aad |
Hashes for rencrypt-0.3.23-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aad8a3a8cf77e7328daec9b59913e13d9af81ea916df442d0e0e296e0af37193 |
|
MD5 | ad15076750f74e92a68b030d3ffe0ef2 |
|
BLAKE2b-256 | 10489fed9a561e05d63d9543552818872cec10facace81ea37e613a119c14760 |
Hashes for rencrypt-0.3.23-cp37-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e0dd68d49d01952f64349dff39c9b4f85414b9fd62422615d19462555b5afed |
|
MD5 | acefcb3445aa5b37fdf6a74ed5a904e8 |
|
BLAKE2b-256 | b2fc49922aceaf35dfd5ebbeb2600e049bad5fcde944a163b0ed0686f2560b1d |
Hashes for rencrypt-0.3.23-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c33b4a54a6e0b067ce21b2fb75ca82922f100519c46b49e292a55109369ca8f5 |
|
MD5 | 854f81d7c04443cbfbceb1c42ab19f25 |
|
BLAKE2b-256 | 0263be59e183a0891e72c8f9d0db4079bbddd071b4d8e7d93b2c2e80faa01b63 |
Hashes for rencrypt-0.3.23-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb6a075e0576f3ea689a2f5bfb98bb822b40afacca254a6159baa60559a8e195 |
|
MD5 | 10609456768b24761a2443fbd3b5775f |
|
BLAKE2b-256 | 34faaa65f03ed0fdac84e682324677aea063116804abc1861500649deec0ba8c |
Hashes for rencrypt-0.3.23-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 974b95a7adc62534ec7457550af9eafb1b8e23e8465a674c55024ca8757e5982 |
|
MD5 | 1cfae2234ac2b61ef2c9d307dde98d69 |
|
BLAKE2b-256 | 352977718233c4c23d2c473546a9b379e2e4f4c110c17eac0b7f6bff0dbebcbd |
Hashes for rencrypt-0.3.23-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ddc418f8ea806a6b2c539fe2a5812f9b7b1cbb28e9f4a5c242e03f6700c3c4c |
|
MD5 | b5858c9129ffc94e635270b7e81ab421 |
|
BLAKE2b-256 | f1d4fbd9c300a906ddc699011c1afef9dd2a51769c7dcae2caf6edcbc764b59b |
Hashes for rencrypt-0.3.23-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd8c7cf836f8fc6c9487db2619c3b7a3c3afb32c72c63f5c898546ab0d1a4020 |
|
MD5 | 6ad65b69343ffbb3b9c0628f4a76c65f |
|
BLAKE2b-256 | e50b23681fc2509f9b00e4656b72112781d15d96ed451278ac8607f94abfe342 |