# cryptography changelog > cryptography release notes. - Vendor: cryptography - Category: Frameworks & Libraries - License: Apache-2.0 OR BSD-3-Clause - Official site: https://github.com/pyca/cryptography - Tracked by: What's New (https://whatsnew.fyi/product/cryptography) - Harvested from: Registry (pypi: cryptography) - Entries below: 17 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: release facts (products, versions, dates, links, CVE ids and flags) are open data under CC BY 4.0, from the API at https://whatsnew.fyi/api/v1 or the nightly dataset at https://github.com/whatsnew-fyi/dataset. The summaries, labels and curation are © What's New: quote freely with attribution and a link back; wholesale republication of them is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 50.0.2 - Date: 2026-09-30 - Version: 50.0.2 - Original notes: https://pypi.org/project/cryptography/50.0.2/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/50.0.2 - **changed** — Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.3 - **added** — Added abi3.abi3t wheels for free-threaded CPython 3.15 and later - **changed** — Updated to PyO3 0.29.2, which fixes building cryptography on Cygwin and MSYS2 - Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.3. - Added `abi3.abi3t` wheels for free-threaded CPython 3.15 and later. - Updated to PyO3 0.29.2, which fixes building `cryptography` on Cygwin and MSYS2. ### 50.0.1 - Date: 2026-08-25 - Version: 50.0.1 - Original notes: https://pypi.org/project/cryptography/50.0.1/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/50.0.1 * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.2. ### 50.0.0 - Date: 2026-07-31 - Version: 50.0.0 - Original notes: https://pypi.org/project/cryptography/50.0.0/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/50.0.0 - **security** — pkcs7_decrypt_der() and its PEM and S/MIME variants no longer expose distinguishable errors or timing when unwrapping a RecipientInfo's encryptedKey, which could act as a Bleichenbacher oracle for callers that decrypt untrusted messages, by substituting a random key on failure as described in RFC 3218 - **deprecated** — Diffie-Hellman key exchange over finite fields (FFDH) is deprecated, including the types in cryptography.hazmat.primitives.asymmetric.dh and loading FFDH keys or parameters with the key loading APIs - **added** — Added xof() class methods to SHAKE128 and SHAKE256 for constructing algorithm instances configured for use with XOFHash - **changed** — X.509 verification APIs are now considered stable and are subject to the API stability policy - **added** — Added the Cobblestone (streaming symmetric encryption) recipe, an implementation of the Cobblestone-128 and Cobblestone-256 instantiations of the C2SP chunked-encryption specification for streaming authenticated encryption of large messages - **fixed** — Parsing a Signed Certificate Timestamp list now rejects encodings that carry trailing bytes after the list or after an individual SCT - **added** — Added support for using Name as a field type in the ASN.1 module - **fixed** — Loading a public key or an EC private key now rejects DER where the subjectPublicKey (or EC publicKey) BIT STRING declares a non-zero number of unused bits - **fixed** — Parsing a CRL entry's InvalidityDate extension now rejects a GeneralizedTime that carries fractional seconds or another non-DER form - **fixed** — load_der_ocsp_request() and load_der_ocsp_response() now reject a request or response whose version field is not v1, the only version defined by RFC 6960 - **changed** — XOFHash is now supported when building against AWS-LC - **changed** — HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when building against AWS-LC - **changed** — Diffie-Hellman key exchange is now supported when building against AWS-LC - **fixed** — load_der_public_key() and load_pem_public_key() now reject Diffie-Hellman public keys whose modulus is smaller than 512 bits - **added** — Added MLDSAMuHasher for incrementally computing the ML-DSA mu (message representative) used by the external-mu signing and verification APIs - **changed** — The builtin HashAlgorithm classes and the classes in padding can now be compared with == * **SECURITY ISSUE**: [pkcs7\_decrypt\_der()](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/serialization/#cryptography.hazmat.primitives.serialization.pkcs7.pkcs7%5Fdecrypt%5Fder "cryptography.hazmat.primitives.serialization.pkcs7.pkcs7_decrypt_der")and its PEM and S/MIME variants no longer expose distinguishable errors or timing when unwrapping a `RecipientInfo`’s `encryptedKey`, which could act as a Bleichenbacher oracle for callers that decrypt untrusted messages. A random key is now substituted on failure, as described in [**RFC 3218**](https://datatracker.ietf.org/doc/html/rfc3218.html). Credit to **@X1AOxiang** for reporting the issue. **CVE-2026-69247** * Deprecated Diffie-Hellman key exchange over finite fields (FFDH). Everything FFDH is deprecated, including the types in `cryptography.hazmat.primitives.asymmetric.dh` and loading FFDH keys or parameters with the key loading APIs. Users should migrate to a more modern key exchange algorithm. * Added `xof()` class methods to [SHAKE128](https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#cryptography.hazmat.primitives.hashes.SHAKE128 "cryptography.hazmat.primitives.hashes.SHAKE128") and [SHAKE256](https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#cryptography.hazmat.primitives.hashes.SHAKE256 "cryptography.hazmat.primitives.hashes.SHAKE256") for constructing algorithm instances configured for use with [XOFHash](https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#cryptography.hazmat.primitives.hashes.XOFHash "cryptography.hazmat.primitives.hashes.XOFHash"). * The [X.509 verification](https://cryptography.io/en/latest/x509/verification/#module-cryptography.x509.verification "cryptography.x509.verification") APIs are now considered stable and are subject to our API stability policy. * Added the [Cobblestone (streaming symmetric encryption)](https://cryptography.io/en/latest/cobblestone/) recipe, an implementation of the Cobblestone-128 and Cobblestone-256 instantiations of the [C2SP chunked-encryption specification](https://c2sp.org/chunked-encryption) for streaming authenticated encryption of large messages. * Parsing a Signed Certificate Timestamp list now rejects encodings that carry trailing bytes after the list or after an individual SCT, instead of silently ignoring them. * Added support for using [Name](https://cryptography.io/en/latest/x509/reference/#cryptography.x509.Name "cryptography.x509.Name") as a field type in the [ASN.1](https://cryptography.io/en/latest/hazmat/asn1/) module. * Loading a public key or an EC private key now rejects DER where the `subjectPublicKey` (or EC `publicKey`) `BIT STRING` declares a non-zero number of unused bits, instead of silently ignoring it. * Parsing a CRL entry’s `InvalidityDate` extension now rejects a `GeneralizedTime` that carries fractional seconds or another non-DER form, matching the strict encoding already required for every other X.509 time field. * [load\_der\_ocsp\_request()](https://cryptography.io/en/latest/x509/ocsp/#cryptography.x509.ocsp.load%5Fder%5Focsp%5Frequest "cryptography.x509.ocsp.load_der_ocsp_request") and [load\_der\_ocsp\_response()](https://cryptography.io/en/latest/x509/ocsp/#cryptography.x509.ocsp.load%5Fder%5Focsp%5Fresponse "cryptography.x509.ocsp.load_der_ocsp_response") now reject a request or response whose `version` field is not `v1`, the only version defined by RFC 6960, matching the version validation already performed when loading certificates, CSRs and CRLs. * [XOFHash](https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#cryptography.hazmat.primitives.hashes.XOFHash "cryptography.hazmat.primitives.hashes.XOFHash") is now supported when building against AWS-LC. * HMAC (and therefore PBKDF2-HMAC) with SHA-3 hashes is now supported when building against AWS-LC. * Diffie-Hellman ([Diffie-Hellman key exchange](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/)) is now su _[Truncated at 4000 characters — full notes: https://pypi.org/project/cryptography/50.0.0/]_ ### 49.0.0 - Date: 2026-06-12 - Version: 49.0.0 - Original notes: https://pypi.org/project/cryptography/49.0.0/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/49.0.0 - **removed** — Support for x86_64 macOS has been removed; only arm64 wheels are published for macOS - **removed** — Support for 32-bit Windows has been removed - **removed** — Removed deprecated type aliases PUBLIC_KEY_TYPES, PRIVATE_KEY_TYPES, CERTIFICATE_PRIVATE_KEY_TYPES, CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES, and CERTIFICATE_PUBLIC_KEY_TYPES - **changed** — ChaCha20 now treats the first 4 bytes of the nonce as a 32-bit little-endian block counter as defined in RFC 7539 and tracks the number of bytes processed - **fixed** — ChaCha20 now raises ValueError when attempting to encrypt or decrypt more data than the counter allows before it would overflow, rather than silently diverging from RFC 7539 - **changed** — Loading an X.509 certificate whose ECDSA or DSA signature AlgorithmIdentifier contains encoded NULL parameters now raises ValueError instead of loading with a deprecation warning - **fixed** — Fixed cross-compilation of the CFFI bindings when PYO3_CROSS_LIB_DIR is set by deriving the Python include directory from PYO3_CROSS_LIB_DIR instead of querying the host interpreter - **added** — Added support for signing and verifying X.509 certificates, certificate signing requests, and certificate revocation lists with ML-DSA signing keys - **added** — Added support for loading certificates that contain ML-DSA public keys - **added** — Added enc_length() method to KEM to allow callers to split the encapsulated key from the ciphertext returned by encrypt() - **changed** — require_present(), may_be_present(), and require_not_present() now accept any extension type instead of only a fixed set - **added** — Added support for using Certificate, CertificateSigningRequest, and CertificateRevocationList as field types in ASN.1 structures - **added** — Added value_set() class decorator to register an enum.Enum subclass as an ASN.1 value set - **added** — Added from_bytes() method for parsing a Name from DER bytes as the inverse of public_bytes() - **added** — Added rsa_padding keyword-only parameter to CertificateBuilder.public_key() to encode RSA subject public keys with the id-RSASSA-PSS OID * **BACKWARDS INCOMPATIBLE:** Support for `x86_64` macOS has been removed. We now only publish `arm64` wheels for macOS. * **BACKWARDS INCOMPATIBLE:** Support for 32-bit Windows has been removed. Users should move to a 64-bit Python installation. * **BACKWARDS INCOMPATIBLE:** Removed the deprecated `PUBLIC_KEY_TYPES`, `PRIVATE_KEY_TYPES`, `CERTIFICATE_PRIVATE_KEY_TYPES`, `CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES`, and `CERTIFICATE_PUBLIC_KEY_TYPES` type aliases. Use `PublicKeyTypes`, `PrivateKeyTypes`, `CertificateIssuerPrivateKeyTypes`, `CertificateIssuerPublicKeyTypes`, and `CertificatePublicKeyTypes`instead. These were deprecated in version 40.0. * **BACKWARDS INCOMPATIBLE:** [ChaCha20](https://cryptography.io/en/latest/hazmat/primitives/symmetric-encryption/#cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20 "cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20")now treats the first 4 bytes of the `nonce` as a 32-bit little-endian block counter (as defined in [**RFC 7539**](https://datatracker.ietf.org/doc/html/rfc7539.html)) and tracks the number of bytes processed. Attempting to encrypt or decrypt more data than the counter allows before it would overflow now raises a [ValueError](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.14)") rather than silently diverging from RFC 7539\. Setting the counter portion of the `nonce` to zero allows encrypting up to 256 GiB with a given nonce. * **BACKWARDS INCOMPATIBLE:** Loading an X.509 certificate whose ECDSA or DSA signature `AlgorithmIdentifier` contains encoded NULL parameters now raises a [ValueError](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.14)"). Such certificates are invalid, but older versions of Java emitted them; previously they loaded with a deprecation warning. * Fixed cross-compilation of the CFFI bindings when `PYO3_CROSS_LIB_DIR`is set. The build now derives the Python include directory from `PYO3_CROSS_LIB_DIR` instead of querying the host interpreter, which previously caused the build to fail during cross-compilations for embedded systems, on hosts which have same-version Python development headers installed as the target Python. * Added support for signing and verifying X.509 certificates, certificate signing requests, and certificate revocation lists with [ML-DSA signing](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/mldsa/) keys, as well as loading certificates that contain ML-DSA public keys. * Added [enc\_length()](https://cryptography.io/en/latest/hazmat/primitives/hpke/#cryptography.hazmat.primitives.hpke.KEM.enc%5Flength "cryptography.hazmat.primitives.hpke.KEM.enc_length") to [KEM](https://cryptography.io/en/latest/hazmat/primitives/hpke/#cryptography.hazmat.primitives.hpke.KEM "cryptography.hazmat.primitives.hpke.KEM") so callers can split the encapsulated key from the ciphertext returned by [encrypt()](https://cryptography.io/en/latest/hazmat/primitives/hpke/#cryptography.hazmat.primitives.hpke.Suite.encrypt "cryptography.hazmat.primitives.hpke.Suite.encrypt"). * [require\_present()](https://cryptography.io/en/latest/x509/verification/#cryptography.x509.verification.ExtensionPolicy.require%5Fpresent "cryptography.x509.verification.ExtensionPolicy.require_present"), [may\_be\_present()](https://cryptography.io/en/latest/x509/verification/#cryptography.x509.verification.ExtensionPolicy.may%5Fbe%5Fpresent "cryptography.x509.verification.ExtensionPolicy.may_be_present"), and [require\_not\_present()](https://cryptography.io/en/latest/x509/verification/#cryptography.x509.verification.ExtensionPolicy.require%5Fnot%5Fpresent "cryptography.x509.verification.ExtensionPolicy.require_not_present")now accept any extension type. Previously only a fixed set of extension types was supported, which made it impossible to account for otherwise unrecognized critical extensions during path validation. * Added support for using [Certificate](https://cryptography.io/en/latest/x509/refer _[Truncated at 4000 characters — full notes: https://pypi.org/project/cryptography/49.0.0/]_ ### 48.0.1 - Date: 2026-06-09 - Version: 48.0.1 - Original notes: https://pypi.org/project/cryptography/48.0.1/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/48.0.1 * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 4.0.1. ### 48.0.0 - Date: 2026-05-04 - Version: 48.0.0 - Original notes: https://pypi.org/project/cryptography/48.0.0/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/48.0.0 - **removed** — Support for Python 3.8 has been removed; cryptography now requires Python 3.9 or later - **changed** — Loading an X.509 CRL whose inner TBSCertList.signature algorithm does not match the outer signatureAlgorithm now raises ValueError instead of being parsed successfully - **added** — Support for ML-KEM key encapsulation and ML-DSA signing when using OpenSSL 3.5.0 or later * **BACKWARDS INCOMPATIBLE:** Support for Python 3.8 has been removed. `cryptography` now requires Python 3.9 or later. * **BACKWARDS INCOMPATIBLE:** Loading an X.509 CRL whose inner `TBSCertList.signature` algorithm does not match the outer `signatureAlgorithm` now raises `ValueError`. Previously, such CRLs were parsed successfully and only rejected during signature validation. * Added support for [ML-KEM key encapsulation](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/mlkem/) and [ML-DSA signing](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/mldsa/) when using OpenSSL 3.5.0 or later, in addition to the existing AWS-LC and BoringSSL support. This means post-quantum algorithms are now available to users of our wheels. * **Note:** Going forward, we do not guarantee that all functionality in `cryptography` will be available when building against OpenSSL. See [The State of OpenSSL for pyca/cryptography](https://cryptography.io/en/latest/statements/state-of-openssl/) for more information. ### 47.0.0 - Date: 2026-04-24 - Version: 47.0.0 - Original notes: https://pypi.org/project/cryptography/47.0.0/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/47.0.0 - **deprecated** — Support for Python 3.8 is deprecated and will be removed in the next cryptography release - **removed** — Support for binary elliptic curves (SECT* classes) has been removed - **removed** — Support for OpenSSL 1.1.x has been removed; OpenSSL 3.0.0 or later is now required - **removed** — Dropped support for LibreSSL < 4.1 - **changed** — Loading keys with unsupported algorithms or keys with unsupported explicit curve encodings now raises UnsupportedAlgorithm instead of ValueError - **changed** — When parsing elliptic curve private keys, keys that incorrectly encode a private key of the wrong length are now rejected - **deprecated** — Passing 64-bit (8-byte) and 128-bit (16-byte) keys to TripleDES is deprecated; only 192-bit (24-byte) keys will be accepted in a future release - **changed** — Updated the minimum supported Rust version (MSRV) to 1.83.0 - **deprecated** — Support for x86_64 macOS is deprecated and will be removed in the next release - **deprecated** — Support for 32-bit Windows is deprecated and will be removed in the next release - **changed** — public_bytes and private_bytes methods on keys now raise TypeError instead of ValueError if an invalid encoding is provided - **deprecated** — CFB, OFB, and CFB8 have been moved into Decrepit cryptography and are deprecated in the modes module - **deprecated** — Camellia has been moved into Decrepit cryptography and is deprecated in the cipher module - **added** — Added extract() method to HKDF - **added** — Added support for loading elliptic curve keys that contain explicit encodings of the curves secp256r1, secp384r1, and secp521r1 - **added** — Added support for Argon2d and Argon2i when using OpenSSL 3.2.0+ * Support for Python 3.8 is deprecated and will be removed in the next `cryptography` release. * **BACKWARDS INCOMPATIBLE:** Support for binary elliptic curves (`SECT*` classes) has been removed. These curves are rarely used and have additional security considerations that make them undesirable. * **BACKWARDS INCOMPATIBLE:** Support for OpenSSL 1.1.x has been removed. OpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC continue to be supported. * **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL < 4.1. * **BACKWARDS INCOMPATIBLE:** Loading keys with unsupported algorithms or keys with unsupported explicit curve encodings now raises [UnsupportedAlgorithm](https://cryptography.io/en/latest/exceptions/#cryptography.exceptions.UnsupportedAlgorithm "cryptography.exceptions.UnsupportedAlgorithm") instead of `ValueError`. This change affects [load\_pem\_private\_key()](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/serialization/#cryptography.hazmat.primitives.serialization.load%5Fpem%5Fprivate%5Fkey "cryptography.hazmat.primitives.serialization.load_pem_private_key"), [load\_der\_private\_key()](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/serialization/#cryptography.hazmat.primitives.serialization.load%5Fder%5Fprivate%5Fkey "cryptography.hazmat.primitives.serialization.load_der_private_key"), [load\_pem\_public\_key()](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/serialization/#cryptography.hazmat.primitives.serialization.load%5Fpem%5Fpublic%5Fkey "cryptography.hazmat.primitives.serialization.load_pem_public_key"), [load\_der\_public\_key()](https://cryptography.io/en/latest/hazmat/primitives/asymmetric/serialization/#cryptography.hazmat.primitives.serialization.load%5Fder%5Fpublic%5Fkey "cryptography.hazmat.primitives.serialization.load_der_public_key"), and [public\_key()](https://cryptography.io/en/latest/x509/reference/#cryptography.x509.Certificate.public%5Fkey "cryptography.x509.Certificate.public_key") when called on certificates with unsupported public key algorithms. * **BACKWARDS INCOMPATIBLE:** When parsing elliptic curve private keys, we now reject keys that incorrectly encode a private key of the wrong length because such keys are impossible to process in a constant-time manner. We do not believe keys with this problem are in wide use, however we may revert this change based on the feedback we receive. * Deprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to [TripleDES](https://cryptography.io/en/latest/hazmat/decrepit/ciphers/#cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES "cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES"). In a future release, only 192-bit (24-byte) keys will be accepted. Users should expand shorter keys themselves (e.g., for single DES: `key + key + key`, for two-key: `key + key[:8]`). * Updated the minimum supported Rust version (MSRV) to 1.83.0, from 1.74.0. * Support for `x86_64` macOS (including publishing wheels) is deprecated and will be removed in the next release. We will switch to publishing an `arm64` only wheel for macOS. * Support for 32-bit Windows (including publishing wheels) is deprecated and will be removed in the next release. Users should move to a 64-bit Python installation. * `public_bytes` and `private_bytes` methods on keys now raise `TypeError` (instead of `ValueError`) if an invalid encoding is provided for the given `format`. * Moved [CFB](https://cryptography.io/en/latest/hazmat/decrepit/modes/#cryptography.hazmat.decrepit.ciphers.modes.CFB "cryptography.hazmat.decrepit.ciphers.modes.CFB"), [OFB](https://cryptography.io/en/latest/hazmat/decrepit/modes/#cryptography.hazmat.decrepit.ciphers.modes.OFB "cryptography.hazmat.decrepit.ciphers.modes.OFB"), and [CFB8](https://cryptography.io/en/latest/hazmat/decrepit/modes/#cryptography.hazmat.decrepit.ciphers.modes.CFB8 "cryptography.hazmat.decrepit.ciphers.modes.CFB8") into [Decrepit cryptography](https://cryptography.io/ _[Truncated at 4000 characters — full notes: https://pypi.org/project/cryptography/47.0.0/]_ ### 46.0.7 - Date: 2026-04-08 - Version: 46.0.7 - Original notes: https://pypi.org/project/cryptography/46.0.7/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.7 - **security** — Fixed an issue where non-contiguous buffers could be passed to APIs that accept Python buffers, which could lead to buffer overflow (CVE-2026-39892) - **changed** — Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.6 * **SECURITY ISSUE**: Fixed an issue where non-contiguous buffers could be passed to APIs that accept Python buffers, which could lead to buffer overflow. **CVE-2026-39892** * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.6. ### 46.0.6 - Date: 2026-03-25 - Version: 46.0.6 - Original notes: https://pypi.org/project/cryptography/46.0.6/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.6 - **security** — Fixed a bug where name constraints were not applied to peer names during verification when the leaf certificate contains a wildcard DNS SAN * **SECURITY ISSUE**: Fixed a bug where name constraints were not applied to peer names during verification when the leaf certificate contains a wildcard DNS SAN. Ordinary X.509 topologies are not affected by this bug, including those used by the Web PKI. Credit to **Oleh Konko (1seal)** for reporting the issue. **CVE-2026-34073** ### 46.0.5 - Date: 2026-02-10 - Version: 46.0.5 - Original notes: https://pypi.org/project/cryptography/46.0.5/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.5 - **security** — Add security checks to prevent private key leakage when using binary elliptic curves with malicious public keys (CVE-2026-26007) - **deprecated** — Support for SECT* binary elliptic curves is deprecated and will be removed in the next release * An attacker could create a malicious public key that reveals portions of your private key when using certain uncommon elliptic curves (binary curves). This version now includes additional security checks to prevent this attack. This issue only affects binary elliptic curves, which are rarely used in real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab and Atuin Automated Vulnerability Discovery Engine** for reporting the issue. **CVE-2026-26007** * Support for `SECT*` binary elliptic curves is deprecated and will be removed in the next release. ### 46.0.4 - Date: 2026-01-28 - Version: 46.0.4 - Original notes: https://pypi.org/project/cryptography/46.0.4/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.4 - **removed** — Dropped support for win_arm64 wheels - **changed** — Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.5 * [Dropped support for win\_arm64 wheels](https://github.com/pyca/cryptography/pull/14216). * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.5. ### 46.0.3 - Date: 2025-10-15 - Version: 46.0.3 - Original notes: https://pypi.org/project/cryptography/46.0.3/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.3 * Fixed compilation when using LibreSSL 4.2.0. ### 46.0.2 - Date: 2025-10-01 - Version: 46.0.2 - Original notes: https://pypi.org/project/cryptography/46.0.2/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.2 * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.4. ### 46.0.1 - Date: 2025-09-17 - Version: 46.0.1 - Original notes: https://pypi.org/project/cryptography/46.0.1/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.1 - **fixed** — Fixed an issue where users installing via pip on Python 3.14 development versions would not properly install a dependency - **fixed** — Fixed an issue building the free-threaded macOS 3.14 wheels * Fixed an issue where users installing via `pip` on Python 3.14 development versions would not properly install a dependency. * Fixed an issue building the free-threaded macOS 3.14 wheels. ### 46.0.0 - Date: 2025-09-16 - Version: 46.0.0 - Original notes: https://pypi.org/project/cryptography/46.0.0/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/46.0.0 - **removed** — Support for Python 3.7 has been removed - **deprecated** — Support for OpenSSL < 3.0 is deprecated and will be removed in the next release - **deprecated** — Support for x86_64 macOS is deprecated and will be removed in two releases - **deprecated** — Support for 32-bit Windows is deprecated and will be removed in two releases - **changed** — Windows, macOS, and Linux wheels are now compiled with OpenSSL 3.5.3 - **added** — Build and publish ppc64le manylinux wheels to PyPI - **added** — Build and publish win_arm64 (Windows on Arm) wheels to PyPI - **added** — Support for free-threaded Python 3.14 - **removed** — Removed the deprecated get_attribute_for_oid method on CertificateSigningRequest - **removed** — Removed the deprecated CAST5, SEED, IDEA, and Blowfish classes from the cipher module - **fixed** — In X.509, PSS signatures with SHA-3 hashes are now encoded with the official NIST SHA3 OID * **BACKWARDS INCOMPATIBLE:** Support for Python 3.7 has been removed. * Support for OpenSSL < 3.0 is deprecated and will be removed in the next release. * Support for `x86_64` macOS (including publishing wheels) is deprecated and will be removed in two releases. We will switch to publishing an `arm64` only wheel for macOS. * Support for 32-bit Windows (including publishing wheels) is deprecated and will be removed in two releases. Users should move to a 64-bit Python installation. * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.3. * We now build `ppc64le` `manylinux` wheels and publish them to PyPI. * We now build `win_arm64` (Windows on Arm) wheels and publish them to PyPI. * Added support for free-threaded Python 3.14. * Removed the deprecated `get_attribute_for_oid` method on [CertificateSigningRequest](https://cryptography.io/en/latest/x509/reference/#cryptography.x509.CertificateSigningRequest "cryptography.x509.CertificateSigningRequest"). Users should use [get\_attribute\_for\_oid()](https://cryptography.io/en/latest/x509/reference/#cryptography.x509.Attributes.get%5Fattribute%5Ffor%5Foid "cryptography.x509.Attributes.get_attribute_for_oid") instead. * Removed the deprecated `CAST5`, `SEED`, `IDEA`, and `Blowfish`classes from the cipher module. These are still available in [Decrepit cryptography](https://cryptography.io/en/latest/hazmat/decrepit/). * In X.509, when performing a PSS signature with a SHA-3 hash, it is now encoded with the official NIST SHA3 OID. ### 45.0.7 - Date: 2025-09-01 - Version: 45.0.7 - Original notes: https://pypi.org/project/cryptography/45.0.7/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/45.0.7 * Added a function to support an upcoming `pyOpenSSL` release. ### 45.0.6 - Date: 2025-08-05 - Version: 45.0.6 - Original notes: https://pypi.org/project/cryptography/45.0.6/ - Permalink: https://whatsnew.fyi/product/cryptography/releases/45.0.6 * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.2.