Fast Fernet bindings for Python
Project description
rfernet
Python extension for Fernet encryption/decryption, faster than other alternatives.
This library uses the rust library fernet-rs
https://github.com/mozilla-services/fernet-rs.
Benchmark
Compared to cryptography's Fernet (CPU):
In [2]: from cryptography.fernet import Fernet as cFernet
In [3]: from rfernet import Fernet as rFernet
In [4]:
In [4]: plain = b"asd" * 1000
In [5]: key = rFernet.generate_new_key()
In [7]: r_fernet = rFernet(key)
In [8]: c_fernet = cFernet(key)
In [9]: %timeit r_fernet.encrypt(plain)
18.4 µs ± 117 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [10]: %timeit c_fernet.encrypt(plain)
77.7 µs ± 921 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Memory:
# rfernet
[ Top 10 ]
<frozen importlib._bootstrap>:219: size=4444 B, count=38, average=117 B
test2.py:4: size=576 B, count=1, average=576 B
<frozen importlib._bootstrap_external>:59: size=156 B, count=1, average=156 B
test2.py:6: size=93 B, count=1, average=93 B
<frozen importlib._bootstrap>:371: size=80 B, count=1, average=80 B
<frozen importlib._bootstrap>:105: size=72 B, count=1, average=72 B
<frozen importlib._bootstrap_external>:1352: size=56 B, count=1, average=56 B
<frozen importlib._bootstrap_external>:606: size=56 B, count=1, average=56 B
test2.py:7: size=48 B, count=1, average=48 B
<frozen importlib._bootstrap_external>:1030: size=40 B, count=1, average=40 B
# cryptography's Fernet
[ Top 10 ]
<frozen importlib._bootstrap_external>:525: size=3134 KiB, count=31814, average=101 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py:91: size=449 KiB, count=3169, average=145 B
<frozen importlib._bootstrap>:219: size=404 KiB, count=3384, average=122 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/abc.py:126: size=146 KiB, count=717, average=209 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py:89: size=119 KiB, count=1773, average=69 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/abc.py:127: size=68.7 KiB, count=447, average=157 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/inspect.py:2793: size=46.8 KiB, count=282, average=170 B
<frozen importlib._bootstrap_external>:59: size=41.7 KiB, count=265, average=161 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/abc.py:135: size=40.8 KiB, count=339, average=123 B
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/idna/idnadata.py:826: size=36.7 KiB, count=3, average=12.2 KiB
Memory test source code:
import tracemalloc
tracemalloc.start()
from cryptography.fernet import Fernet as cFernet
plain = b"asd" * 1000
key = cFernet.generate_key()
c_fernet = cFernet(key)
c_fernet.encrypt(plain)
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print("[ Top 10 ]")
for stat in top_stats[:10]:
print(stat)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
rfernet-0.1.3.tar.gz
(3.5 kB
view hashes)
Built Distributions
Close
Hashes for rfernet-0.1.3-cp38-cp38-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 036243980db0dc288e944def281409d8b28df907d175f187f742e5ee472beaae |
|
MD5 | 16266bd080dd2a7d040c58903f91101f |
|
BLAKE2b-256 | b2bdba9ffed006fd23ad221e907f51226457b87b9b3741c1f084a662da267349 |
Close
Hashes for rfernet-0.1.3-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c99180cb00492d4958e34aa76af24483bd5e9d4d34b733ebf33123763ebf7b6 |
|
MD5 | 6fd15cd400e2d2f8c2b8dd0392180db8 |
|
BLAKE2b-256 | 7feeef37ffb3fd6dcc4c15bc106b1bce9eb43a8eca2c3a72159983771ae2d7de |
Close
Hashes for rfernet-0.1.3-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e52349a2fb0e3d6ef770bac58dbea47dc2d292dc3817bd081b68a4330eae9ff4 |
|
MD5 | 67549100809d823d7bb0fba7b52a1042 |
|
BLAKE2b-256 | ad329ec5607098ae8eee1850b3f7360198793efb8d629afe3503b09b959c767e |
Close
Hashes for rfernet-0.1.3-cp37-cp37m-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 444fbb8134704cdd3bd82d6d00da76e729a863c4fbba70754c825cb82816084c |
|
MD5 | b7835e4e4b3f4a06de25d580f8fcb17b |
|
BLAKE2b-256 | cae1de3e2aa4fb1d3cb64c056732fad05b5757926d58b93074bbce033510a222 |
Close
Hashes for rfernet-0.1.3-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 519abd68248e37184cfb07968c7414b09e41a145939bd297f4ae7714f94581e6 |
|
MD5 | edfdc90c5a2a831904746241c7552179 |
|
BLAKE2b-256 | 9bb4ef17c6780e93b3a584eaa8da1192c4c9fb93c8a6c0bfe96132561574924a |
Close
Hashes for rfernet-0.1.3-cp36-cp36m-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b19b3580625cfa06184b599fb8c7c1ae5c5f551f045422c6c58e3b48fd449f07 |
|
MD5 | d1d2747796fd5965ee2b4b8c22612086 |
|
BLAKE2b-256 | 9ad0a97e86a6916ba33a3ad8a6dd56a472ecd4647659eebd9add9a18d44d9559 |