Skip to main content

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.

CI & Building wheels copied from cryptography and orjson

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.3.3.tar.gz (6.8 kB view details)

Uploaded Source

Built Distributions

rfernet-0.3.3-cp312-cp312-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ x86-64

rfernet-0.3.3-cp311-cp311-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

rfernet-0.3.3-cp310-cp310-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

rfernet-0.3.3-cp39-cp39-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

rfernet-0.3.3-cp38-cp38-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

File details

Details for the file rfernet-0.3.3.tar.gz.

File metadata

  • Download URL: rfernet-0.3.3.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.18

File hashes

Hashes for rfernet-0.3.3.tar.gz
Algorithm Hash digest
SHA256 090e2cf80776828d7c67f1d71e87c82ff27b7e1cfb40ef3c594a0267d5e64fff
MD5 8e228635d8e3ab622fe2afde79f2f9d2
BLAKE2b-256 72bc80feb51080f869246e0575d56fbc0faa409051f5a73b3731589c45d99d63

See more details on using hashes here.

File details

Details for the file rfernet-0.3.3-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rfernet-0.3.3-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e379b91f2ae8e46b5cf0ff8d44a430598a0c58bde261742051df68b2376da41
MD5 5b473bf0f82e70eef2650422689b24e2
BLAKE2b-256 3357f414391d818391a1617de2fbb879e33df944584313585cc8685ee6a9e8f9

See more details on using hashes here.

File details

Details for the file rfernet-0.3.3-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rfernet-0.3.3-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e2e0dad54d37c0c259b3e1916fea17e567d81b1861b1f301fd0aafdbae63fdf
MD5 359be1dc849d02328358ebbc44d82dce
BLAKE2b-256 428682d4aa5e83b4102e7873e8a27992df7e9f4b17aa36bec0df2f6521cb437c

See more details on using hashes here.

File details

Details for the file rfernet-0.3.3-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rfernet-0.3.3-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea0300e0e4aaeedc912804a7a39f00ba29642054ab7e5c778e7d023423ff8407
MD5 1e01dedf57e88154c9673ada658fa971
BLAKE2b-256 9c095dd7512128348d8987c860d01b1cacf9b8f3d3a40f82b69c63c82b6db98c

See more details on using hashes here.

File details

Details for the file rfernet-0.3.3-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rfernet-0.3.3-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 723decc574fd44ee8c67d63a0b711510ecaf585c912bb6c8e3859ea1d2a495f7
MD5 5afd5b21495f63e26a7a464f29fadba1
BLAKE2b-256 e3e2858e0cd91b29f46bf7b9a6548758277e2eeb521938345a6a4a69b992a944

See more details on using hashes here.

File details

Details for the file rfernet-0.3.3-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rfernet-0.3.3-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e48e8e9ab504e815064ee353c0de755db8ea535455e75b418faa0462dd0a145b
MD5 be656124c97b99f78439e5ba5249f4e3
BLAKE2b-256 68ed76f98a3e48f7cee6f66cbcb432c91d60d9aef98ccd671b1c5d767cf4a60f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page