Skip to content
Search

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

pip install cryptography

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'

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:

pip install "requests==2.11.1"

That didn't work. So I downgraded the Pyca/cryptography version:

pip install "Cryptography==38"

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)

See also

Favorite site

author Zer0 sitemap