---
title: "cryptography Breaking Changes on PyPI | Since.dev"
description: "What each cryptography release removed, renamed or changed: 219 breaking changes in 7 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/cryptography
last_updated: 2026-07-31
---

# cryptography breaking changes

Every breaking API change we have recorded in cryptography on PyPI: 219 breaking changes in 7 versions. Below are its newest 6 versions, removals and renames first, each with its source.

Newest change July 31, 2026

## 50.0.0

22 breaking changes, first published July 31, 2026.

- **Removed** `cryptography.hazmat.backends.openssl.backend.Backend.pbkdf2_hmac_supported`  

Backend.pbkdf2_hmac_supported was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.hazmat.backends.openssl.backend.Backend.pkcs7_supported`  

Backend.pkcs7_supported was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.hazmat.primitives.keywrap.AES`  

cryptography.hazmat.primitives.keywrap.AES was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.hazmat.primitives.keywrap.bytes_eq`  

cryptography.hazmat.primitives.keywrap.bytes_eq was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.hazmat.primitives.keywrap.Cipher`  

cryptography.hazmat.primitives.keywrap.Cipher was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.hazmat.primitives.keywrap.ECB`  

cryptography.hazmat.primitives.keywrap.ECB was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.utils.cached_property`  

cryptography.utils.cached_property was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Removed** `cryptography.x509.extensions.serialization`  

cryptography.x509.extensions.serialization was removed in cryptography 50.0.0 [pypi.org](https://pypi.org/project/cryptography/50.0.0/)
- **Behavior changed**  

A CRL entry InvalidityDate extension with fractional seconds or other non-DER GeneralizedTime forms is now rejected. [github.com](https://github.com/pyca/cryptography/blob/50.0.0/CHANGELOG.rst)
- **Behavior changed**  

DER with a non-zero unused-bits count in the subjectPublicKey or EC publicKey BIT STRING is now rejected instead of silently accepted. [github.com](https://github.com/pyca/cryptography/blob/50.0.0/CHANGELOG.rst)

And 12 more in this version.

## 49.0.0

13 breaking changes, first published June 12, 2026.

- **Removed**  

Intel Macs no longer get published wheels, so x86_64 macOS users must find another way to install. [github.com](https://github.com/pyca/cryptography/blob/49.0.0/CHANGELOG.rst)
- **Removed**  

Users on 32-bit Windows should move to a 64-bit Python installation. [github.com](https://github.com/pyca/cryptography/blob/49.0.0/CHANGELOG.rst)
- **Removed** `cryptography.hazmat.primitives.asymmetric.types.CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES`  

This deprecated type alias is gone; use CertificateIssuerPublicKeyTypes instead. [pypi.org](https://pypi.org/project/cryptography/49.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.types.CERTIFICATE_PRIVATE_KEY_TYPES`  

This deprecated type alias is gone; use CertificateIssuerPrivateKeyTypes instead. [pypi.org](https://pypi.org/project/cryptography/49.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.types.CERTIFICATE_PUBLIC_KEY_TYPES`  

This deprecated type alias is gone; use CertificatePublicKeyTypes instead. [pypi.org](https://pypi.org/project/cryptography/49.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.types.PRIVATE_KEY_TYPES`  

This deprecated type alias is gone; use PrivateKeyTypes instead. [pypi.org](https://pypi.org/project/cryptography/49.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.types.PUBLIC_KEY_TYPES`  

This deprecated type alias is gone; use PublicKeyTypes instead. [pypi.org](https://pypi.org/project/cryptography/49.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.types.utils`  

cryptography.hazmat.primitives.asymmetric.types.utils was removed in cryptography 49.0.0 [pypi.org](https://pypi.org/project/cryptography/49.0.0/)
- **Behavior changed**  

Loading such X.509 certificates now raises ValueError instead of loading with a deprecation warning. [github.com](https://github.com/pyca/cryptography/blob/49.0.0/CHANGELOG.rst)
- **Behavior changed** `cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20`  

The first 4 bytes of the nonce are a little-endian block counter, and encrypting past its limit now raises ValueError instead of silently continuing. [github.com](https://github.com/pyca/cryptography/blob/49.0.0/CHANGELOG.rst)

And 3 more in this version.

## 48.0.0

6 breaking changes, first published May 4, 2026.

- **Removed**  

cryptography now requires Python 3.9 or later. Users on Python 3.8 must upgrade their Python version before installing this release. [github.com](https://github.com/pyca/cryptography/blob/48.0.0/CHANGELOG.rst)
- **Removed** `cryptography.hazmat.asn1.asn1.Annotated`  

cryptography.hazmat.asn1.asn1.Annotated was removed in cryptography 48.0.0 [pypi.org](https://pypi.org/project/cryptography/48.0.0/)
- **Removed** `cryptography.hazmat.asn1.asn1.get_type_args`  

cryptography.hazmat.asn1.asn1.get_type_args was removed in cryptography 48.0.0 [pypi.org](https://pypi.org/project/cryptography/48.0.0/)
- **Removed** `cryptography.hazmat.asn1.asn1.get_type_hints`  

cryptography.hazmat.asn1.asn1.get_type_hints was removed in cryptography 48.0.0 [pypi.org](https://pypi.org/project/cryptography/48.0.0/)
- **Removed** `cryptography.hazmat.asn1.asn1.get_type_origin`  

cryptography.hazmat.asn1.asn1.get_type_origin was removed in cryptography 48.0.0 [pypi.org](https://pypi.org/project/cryptography/48.0.0/)
- **Behavior changed**  

CRLs whose inner TBSCertList.signature algorithm does not match the outer signatureAlgorithm are now rejected at load time with ValueError instead of loading and failing later during signature validation. Code that loads such CRLs must... [github.com](https://github.com/pyca/cryptography/blob/48.0.0/CHANGELOG.rst)

## 47.0.0

148 breaking changes, first published April 24, 2026.

- **Removed**  

OpenSSL 1.1.x is no longer supported; OpenSSL 3.0.0 or later is required. [github.com](https://github.com/pyca/cryptography/blob/47.0.0/CHANGELOG.rst)
- **Removed**  

LibreSSL versions older than 4.1 are no longer supported. [github.com](https://github.com/pyca/cryptography/blob/47.0.0/CHANGELOG.rst)
- **Removed** `cryptography.hazmat.bindings.openssl.binding.CryptographyDeprecationWarning`  

cryptography.hazmat.bindings.openssl.binding.CryptographyDeprecationWarning was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT163K1`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT163K1 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT163R2`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT163R2 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT233K1`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT233K1 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT233R1`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT233R1 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT283K1`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT283K1 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT283R1`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT283R1 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)
- **Removed** `cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT409K1`  

cryptography.hazmat.primitives.asymmetric.ec.EllipticCurveOID.SECT409K1 was removed in cryptography 47.0.0 [pypi.org](https://pypi.org/project/cryptography/47.0.0/)

And 138 more in this version.

## 46.0.6

1 breaking change, first published March 25, 2026.

- **Behavior changed**  

Verification now enforces name constraints on peer names when the leaf certificate has a wildcard DNS SAN, so certificates that previously passed may now be rejected. Review certificate validation code that depends on the old behavior. [github.com](https://github.com/pyca/cryptography/blob/46.0.6/CHANGELOG.rst)

## 46.0.4

1 breaking change, first published January 28, 2026.

- **Removed**  

Prebuilt win_arm64 wheels are no longer published, so installs on Windows ARM64 will need another route, such as building from source. [github.com](https://github.com/pyca/cryptography/blob/46.0.4/CHANGELOG.rst)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
