Pyca/cryptography
lastmod 2023-08-01created 2021-03-045 edits
(For the discipline dealing with the mathematical methods, see Cryptography)
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers.
Installation
Fernet
Fernet guarantees that a message encrypted using it cannot be manipulated or read without the key. Fernet is an implementation of symmetric (also known as “secret key”) authenticated cryptography. Fernet also has support for implementing key rotation via MultiFernet.
>>> from cryptography.fernet import Fernet
>>> # Put this somewhere safe!
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"A really secret message. Not for prying eyes.")
>>> token
b'...'
>>> f.decrypt(token)
b'A really secret message. Not for prying eyes.'
Troubleshooting
AttributeError: 'builtins.Certificate' object has no attribute '_x509'
-
AttributeError: 'X509' object has no attribute '_x509' · Issue #3701 · psf/requests - AttributeError: 'X509' object has no attribute '_x509' — The Geek Blog
- Python requests and streaming - AttributeError: 'X509' object has no attribute '_x509' - Stack Overflow
You may get the following error.
Traceback (most recent call last):
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
resp = await request_handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/answer_plugin_vms/server/stream_server.py", line 93, in middleware
return await handler(request)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/answer_plugin_vms/server/stream_server.py", line 193, in post_jsep
answer = await self.do_jsep(offer.type, offer.sdp)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/answer_plugin_vms/server/mixin/ss_rtc.py", line 137, in do_jsep
await pc.setRemoteDescription(offer)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcpeerconnection.py", line 828, in setRemoteDescription
transceiver = self.__createTransceiver(
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcpeerconnection.py", line 1067, in __createTransceiver
dtlsTransport = self.__createDtlsTransport()
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcpeerconnection.py", line 1044, in __createDtlsTransport
dtlsTransport = RTCDtlsTransport(iceTransport, self.__certificates)
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py", line 375, in __init__
self.__ctx = certificate._create_ssl_context()
File "/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py", line 211, in _create_ssl_context
_openssl_assert(lib.SSL_CTX_use_certificate(ctx, self._cert._x509) == 1) # type: ignore
AttributeError: 'builtins.Certificate' object has no attribute '_x509'
For reference, the test environment was Ubuntu 18.04.
The first thing I tried was downgrading the requests version:
That didn't work. So I downgraded the Pyca/cryptography version:
It worked!!
Though it printed a few warnings...
/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py:211: CryptographyDeprecationWarning: This version of cryptography contains a temporary pyOpenSSL fallback path. Upgrade pyOpenSSL now.
_openssl_assert(lib.SSL_CTX_use_certificate(ctx, self._cert._x509) == 1) # type: ignore
/home/aaeon/Documents/vms/.venv/lib/python3.9/site-packages/aiortc/rtcdtlstransport.py:186: CryptographyDeprecationWarning: This version of cryptography contains a temporary pyOpenSSL fallback path. Upgrade pyOpenSSL now.
value=certificate_digest(self._cert._x509), # type: ignore
Apparently it says to grade the pyOpenSSL version... (haven't tried it yet)