
A self-contained cryptographic library for Python
.. image:: https://github.com/Legrandin/pycryptodome/workflows/Integration%20test/badge.svg :target: https://github.com/Legrandin/pycryptodome/actions
.. image:: https://badge.fury.io/py/pycryptodome.svg :target: https://pypi.org/project/pycryptodome
PyCryptodome is a self-contained Python package of low-level
cryptographic primitives: one pip install, no system libraries,
and a broad, consistent API from AES and RSA to HPKE, KangarooTwelve and post-quantum ML-DSA.
It supports Python 3.9 and newer, and PyPy.
You install it with::
pip install pycryptodome
All modules are installed under the Crypto package.
.. code-block:: python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(32)
cipher = AES.new(key, AES.MODE_GCM) # a random nonce is generated
ciphertext, tag = cipher.encrypt_and_digest(b"attack at dawn")
receiver = AES.new(key, AES.MODE_GCM, nonce=cipher.nonce)
plaintext = receiver.decrypt_and_verify(ciphertext, tag) # raises ValueError if tampered
.. note::
Up to version 3.x, the library was also released as the pycryptodomex
project, installed under the Cryptodome package.
Starting with version 4.0, pycryptodomex is no longer released and
Crypto is the only package name.
To migrate, replace Cryptodome with Crypto in your imports.
AES, RSA (with OAEP and PSS), DSA
Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB, KW, KWP)
Hybrid Public Key Encryption (HPKE), also post-quantum with ML-KEM and the hybrid KEM X-Wing (ML-KEM + X25519)
Elliptic curve cryptography (NIST P-curves; Ed25519, Ed448, Curve25519, Curve448)
Post-quantum signatures: ML-DSA and HashML-DSA (FIPS 204), including external mu
A compact API (nonce and iv attributes for ciphers,
automatic generation of random nonces and IVs, simplified CTR cipher mode,
and more)
SHA-2 hash algorithms, including truncated ones SHA-512/224 and SHA-512/256 (FIPS 180-4)
HMAC and CMAC
SHA-3 hash algorithms (FIPS 202) and derived functions (NIST SP-800 185):
KangarooTwelve, TurboSHAKE128, and TurboSHAKE256 XOFs
BLAKE2b and BLAKE2s hash algorithms
Salsa20 and ChaCha20/XChaCha20 stream ciphers
Poly1305 MAC
ChaCha20-Poly1305 and XChaCha20-Poly1305 authenticated ciphers
scrypt, bcrypt, HKDF, and NIST SP 800 108r1 Counter Mode key derivation functions
Deterministic (EC)DSA and EdDSA
Password-protected PKCS#8 key containers
Shamir's Secret Sharing scheme
Random numbers sourced directly from the operating system
Simple installation, including on Windows
RSA and DSA key generation largely based on FIPS 186-4
For more information, see the homepage_.
For security issues, please send an email to [email protected].
All the code can be downloaded from GitHub_.
.. _homepage: https://www.pycryptodome.org
.. _GitHub: https://github.com/Legrandin/pycryptodome