Upgrading cryptography 44 to 45
Breaking44.0.3 → 45.0.7Breaking2Deprecated2New14Changed8Fixed4
BreakingUpgrade verdict
2 breaking changes.
In plain terms
- Loading SSH private keys now raises a TypeError in two mismatched password cases instead of silently succeeding or raising ValueError.
- Code reading VerifiedClient.subject must now handle a possible None value.
- Python 3.7 will stop being supported in the next version, so users on it should plan to upgrade Python.
- Deprecates subject, verification_time and max_chain_depth on ClientVerifier and ServerVerifier in favor of a policy property.
Must act 4 items need code or config changes
What you must change
Breaking2
load_ssh_private_key now raises TypeError when a password is given for an unencrypted key or omitted for an encrypted key.
load_ssh_private_keyVerifiedClient.subject can now be None because a custom extension policy may allow certificates without a Subject Alternative Name.
VerifiedClient.subjectDeprecations to plan for
Deprecated2
Deprecates support for Python 3.7, to be removed in the next release.
Deprecates subject, verification_time and max_chain_depth on ClientVerifier and ServerVerifier in favor of a policy property.
ClientVerifierServerVerifiersubjectverification_timemax_chain_depthpolicyAPI changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- changed:
constructor MultiFernet(fernets: typing.Iterable[Fernet]) → constructor MultiFernet(fernets: Iterable[Fernet])
- changed:
function build_conditional_library(lib: typing.Any, conditional_names: dict[str, typing.Callable[[], list[str]]]) -> typing.Any → function build_conditional_library(lib: typing.Any, conditional_names: dict[str, Callable[[], list[str]]]) -> typing.Any
- changed:
method DSAPrivateKey.sign(data: bytes, algorithm: asym_utils.Prehashed | hashes.HashAlgorithm) -> bytes → method DSAPrivateKey.sign(data: Buffer, algorithm: asym_utils.Prehashed | hashes.HashAlgorithm) -> bytes - changed:
method DSAPublicKey.verify(signature: bytes, data: bytes, algorithm: asym_utils.Prehashed | hashes.HashAlgorithm) -> None → method DSAPublicKey.verify(signature: Buffer, data: Buffer, algorithm: asym_utils.Prehashed | hashes.HashAlgorithm) -> None
- changed:
method EllipticCurvePrivateKey.sign(data: bytes, signature_algorithm: EllipticCurveSignatureAlgorithm) -> bytes → method EllipticCurvePrivateKey.sign(data: utils.Buffer, signature_algorithm: EllipticCurveSignatureAlgorithm) -> bytes - changed:
method EllipticCurvePublicKey.verify(signature: bytes, data: bytes, signature_algorithm: EllipticCurveSignatureAlgorithm) -> None → method EllipticCurvePublicKey.verify(signature: utils.Buffer, data: utils.Buffer, signature_algorithm: EllipticCurveSignatureAlgorithm) -> None - added:
field BrainpoolP256R1.group_order - added:
field BrainpoolP384R1.group_order - added:
field BrainpoolP512R1.group_order - added:
field SECP192R1.group_order - added:
field SECP224R1.group_order - added:
field SECP256K1.group_order - added:
field SECP256R1.group_order - added:
field SECP384R1.group_order - added:
field SECP521R1.group_order - added:
field SECT163K1.group_order - added:
field SECT163R2.group_order - added:
field SECT233K1.group_order - added:
field SECT233R1.group_order - added:
field SECT283K1.group_order - added:
field SECT283R1.group_order - added:
field SECT409K1.group_order - added:
field SECT409R1.group_order - added:
field SECT571K1.group_order - added:
field SECT571R1.group_order - added:
property EllipticCurve.group_order -> int
- changed:
method Ed25519PrivateKey.sign(data: bytes) -> bytes → method Ed25519PrivateKey.sign(data: Buffer) -> bytes - changed:
method Ed25519PublicKey.verify(signature: bytes, data: bytes) -> None → method Ed25519PublicKey.verify(signature: Buffer, data: Buffer) -> None - changed:
static method Ed25519PrivateKey.from_private_bytes(data: bytes) -> Ed25519PrivateKey → static method Ed25519PrivateKey.from_private_bytes(data: Buffer) -> Ed25519PrivateKey
- changed:
method Ed448PrivateKey.sign(data: bytes) -> bytes → method Ed448PrivateKey.sign(data: Buffer) -> bytes - changed:
method Ed448PublicKey.verify(signature: bytes, data: bytes) -> None → method Ed448PublicKey.verify(signature: Buffer, data: Buffer) -> None - changed:
static method Ed448PrivateKey.from_private_bytes(data: bytes) -> Ed448PrivateKey → static method Ed448PrivateKey.from_private_bytes(data: Buffer) -> Ed448PrivateKey
- changed:
static method X25519PrivateKey.from_private_bytes(data: bytes) -> X25519PrivateKey → static method X25519PrivateKey.from_private_bytes(data: Buffer) -> X25519PrivateKey
- changed:
static method X448PrivateKey.from_private_bytes(data: bytes) -> X448PrivateKey → static method X448PrivateKey.from_private_bytes(data: Buffer) -> X448PrivateKey
- removed:
property ChaCha20.nonce -> bytes - changed:
constructor AES(key: bytes) → constructor AES(key: utils.Buffer) - changed:
constructor AES128(key: bytes) → constructor AES128(key: utils.Buffer) - changed:
constructor AES256(key: bytes) → constructor AES256(key: utils.Buffer) - changed:
constructor Camellia(key: bytes) → constructor Camellia(key: utils.Buffer) - changed:
constructor ChaCha20(key: bytes, nonce: bytes) → constructor ChaCha20(key: utils.Buffer, nonce: utils.Buffer) - added:
property ChaCha20.nonce -> utils.Buffer
- changed:
method AEADCipherContext.authenticate_additional_data(data: bytes) -> None → method AEADCipherContext.authenticate_additional_data(data: Buffer) -> None - changed:
method CipherContext.update(data: bytes) -> bytes → method CipherContext.update(data: Buffer) -> bytes - changed:
method CipherContext.update_into(data: bytes, buf: bytes) -> int → method CipherContext.update_into(data: Buffer, buf: Buffer) -> int
- removed:
property CBC.initialization_vector -> bytes - removed:
property CFB.initialization_vector -> bytes - removed:
property CFB8.initialization_vector -> bytes - removed:
property CTR.nonce -> bytes - removed:
property GCM.initialization_vector -> bytes - removed:
property ModeWithInitializationVector.initialization_vector -> bytes - removed:
property ModeWithNonce.nonce -> bytes - removed:
property ModeWithTweak.tweak -> bytes - removed:
property OFB.initialization_vector -> bytes - removed:
property XTS.tweak -> bytes - changed:
constructor CBC(initialization_vector: bytes) → constructor CBC(initialization_vector: utils.Buffer) - changed:
constructor CFB(initialization_vector: bytes) → constructor CFB(initialization_vector: utils.Buffer) - changed:
constructor CFB8(initialization_vector: bytes) → constructor CFB8(initialization_vector: utils.Buffer) - changed:
constructor CTR(nonce: bytes) → constructor CTR(nonce: utils.Buffer) - changed:
constructor GCM(initialization_vector: bytes, tag: bytes | None=…, min_tag_length: int=…) → constructor GCM(initialization_vector: utils.Buffer, tag: bytes | None=…, min_tag_length: int=…) - changed:
constructor OFB(initialization_vector: bytes) → constructor OFB(initialization_vector: utils.Buffer) - changed:
constructor XTS(tweak: bytes) → constructor XTS(tweak: utils.Buffer) - added:
property CBC.initialization_vector -> utils.Buffer - added:
property CFB.initialization_vector -> utils.Buffer - added:
property CFB8.initialization_vector -> utils.Buffer - added:
property CTR.nonce -> utils.Buffer - added:
property GCM.initialization_vector -> utils.Buffer - added:
property ModeWithInitializationVector.initialization_vector -> utils.Buffer - added:
property ModeWithNonce.nonce -> utils.Buffer - added:
property ModeWithTweak.tweak -> utils.Buffer - added:
property OFB.initialization_vector -> utils.Buffer - added:
property XTS.tweak -> utils.Buffer
- changed:
method HashContext.update(data: bytes) -> None → method HashContext.update(data: Buffer) -> None - added:
variable XOFHash
- changed:
method ConcatKDFHMAC.derive(key_material: bytes) -> bytes → method ConcatKDFHMAC.derive(key_material: utils.Buffer) -> bytes - changed:
method ConcatKDFHash.derive(key_material: bytes) -> bytes → method ConcatKDFHash.derive(key_material: utils.Buffer) -> bytes
- changed:
method HKDF.derive(key_material: bytes) -> bytes → method HKDF.derive(key_material: utils.Buffer) -> bytes - changed:
method HKDFExpand.derive(key_material: bytes) -> bytes → method HKDFExpand.derive(key_material: utils.Buffer) -> bytes
- changed:
method KBKDFCMAC.derive(key_material: bytes) -> bytes → method KBKDFCMAC.derive(key_material: utils.Buffer) -> bytes - changed:
method KBKDFHMAC.derive(key_material: bytes) -> bytes → method KBKDFHMAC.derive(key_material: utils.Buffer) -> bytes
- changed:
method PBKDF2HMAC.derive(key_material: bytes) -> bytes → method PBKDF2HMAC.derive(key_material: utils.Buffer) -> bytes
- changed:
method X963KDF.derive(key_material: bytes) -> bytes → method X963KDF.derive(key_material: utils.Buffer) -> bytes
- changed:
method PaddingContext.update(data: bytes) -> bytes → method PaddingContext.update(data: utils.Buffer) -> bytes
- added:
export ssh_key_fingerprint
- changed:
function serialize_key_and_certificates(name: bytes | None, key: PKCS12PrivateKeyTypes | None, cert: x509.Certificate | None, cas: typing.Iterable[_PKCS12CATypes] | None, encryption_algorithm: serialization.KeySerializationEncryption) -> bytes → function serialize_key_and_certificates(name: bytes | None, key: PKCS12PrivateKeyTypes | None, cert: x509.Certificate | None, cas: Iterable[_PKCS12CATypes] | None, encryption_algorithm: serialization.KeySerializationEncryption) -> bytes - added:
function serialize_java_truststore(certs: Iterable[PKCS12Certificate], encryption_algorithm: serialization.KeySerializationEncryption) -> bytes
- changed:
constructor PKCS7EnvelopeBuilder(*, _data: bytes | None=…, _recipients: list[x509.Certificate] | None=…) → constructor PKCS7EnvelopeBuilder(*, _data: bytes | None=…, _recipients: list[x509.Certificate] | None=…, _content_encryption_algorithm: ContentEncryptionAlgorithm | None=…) - changed:
constructor PKCS7SignatureBuilder(data: bytes | None=…, signers: list[tuple[x509.Certificate, PKCS7PrivateKeyTypes, PKCS7HashTypes, padding.PSS | padding.PKCS1v15 | None]]=…, additional_certs: list[x509.Certificate]=…) → constructor PKCS7SignatureBuilder(data: utils.Buffer | None=…, signers: list[tuple[x509.Certificate, PKCS7PrivateKeyTypes, PKCS7HashTypes, padding.PSS | padding.PKCS1v15 | None]]=…, additional_certs: list[x509.Certificate]=…) - changed:
method PKCS7EnvelopeBuilder.encrypt(encoding: serialization.Encoding, options: typing.Iterable[PKCS7Options]) -> bytes → method PKCS7EnvelopeBuilder.encrypt(encoding: serialization.Encoding, options: Iterable[PKCS7Options]) -> bytes - changed:
method PKCS7SignatureBuilder.set_data(data: bytes) -> PKCS7SignatureBuilder → method PKCS7SignatureBuilder.set_data(data: utils.Buffer) -> PKCS7SignatureBuilder - changed:
method PKCS7SignatureBuilder.sign(encoding: serialization.Encoding, options: typing.Iterable[PKCS7Options], backend: typing.Any=…) -> bytes → method PKCS7SignatureBuilder.sign(encoding: serialization.Encoding, options: Iterable[PKCS7Options], backend: typing.Any=…) -> bytes - added:
method PKCS7EnvelopeBuilder.set_content_encryption_algorithm(content_encryption_algorithm: ContentEncryptionAlgorithm) -> PKCS7EnvelopeBuilder - added:
variable ContentEncryptionAlgorithm
- changed:
function load_ssh_private_key(data: bytes, password: bytes | None, backend: typing.Any=…) -> SSHPrivateKeyTypes → function load_ssh_private_key(data: utils.Buffer, password: bytes | None, backend: typing.Any=…, *, unsafe_skip_rsa_key_validation: bool=…) -> SSHPrivateKeyTypes - changed:
function load_ssh_public_key(data: bytes, backend: typing.Any=…) -> SSHPublicKeyTypes → function load_ssh_public_key(data: utils.Buffer, backend: typing.Any=…) -> SSHPublicKeyTypes - added:
function ssh_key_fingerprint(key: SSHPublicKeyTypes, hash_algorithm: hashes.MD5 | hashes.SHA256) -> bytes
- changed:
constructor HOTP(key: bytes, length: int, algorithm: HOTPHashTypes, backend: typing.Any=…, enforce_key_length: bool=…) -> None → constructor HOTP(key: Buffer, length: int, algorithm: HOTPHashTypes, backend: typing.Any=…, enforce_key_length: bool=…) -> None
- changed:
constructor TOTP(key: bytes, length: int, algorithm: HOTPHashTypes, time_step: int, backend: typing.Any=…, enforce_key_length: bool=…) → constructor TOTP(key: Buffer, length: int, algorithm: HOTPHashTypes, time_step: int, backend: typing.Any=…, enforce_key_length: bool=…)
- changed:
function cached_property(func: typing.Callable) -> property → function cached_property(func: Callable) -> property - added:
variable Buffer - added:
variable DeprecatedIn45
- added:
export PrivateKeyUsagePeriod
- changed:
constructor Attributes(attributes: typing.Iterable[Attribute]) -> None → constructor Attributes(attributes: Iterable[Attribute]) -> None - changed:
method CertificateBuilder.sign(private_key: CertificateIssuerPrivateKeyTypes, algorithm: _AllowedHashTypes | None, backend: typing.Any=…, *, rsa_padding: padding.PSS | padding.PKCS1v15 | None=…) -> Certificate → method CertificateBuilder.sign(private_key: CertificateIssuerPrivateKeyTypes, algorithm: _AllowedHashTypes | None, backend: typing.Any=…, *, rsa_padding: padding.PSS | padding.PKCS1v15 | None=…, ecdsa_deterministic: bool | None=…) -> Certificate - changed:
method CertificateRevocationListBuilder.sign(private_key: CertificateIssuerPrivateKeyTypes, algorithm: _AllowedHashTypes | None, backend: typing.Any=…, *, rsa_padding: padding.PSS | padding.PKCS1v15 | None=…) -> CertificateRevocationList → method CertificateRevocationListBuilder.sign(private_key: CertificateIssuerPrivateKeyTypes, algorithm: _AllowedHashTypes | None, backend: typing.Any=…, *, rsa_padding: padding.PSS | padding.PKCS1v15 | None=…, ecdsa_deterministic: bool | None=…) -> CertificateRevocationList - changed:
method CertificateSigningRequestBuilder.sign(private_key: CertificateIssuerPrivateKeyTypes, algorithm: _AllowedHashTypes | None, backend: typing.Any=…, *, rsa_padding: padding.PSS | padding.PKCS1v15 | None=…) -> CertificateSigningRequest → method CertificateSigningRequestBuilder.sign(private_key: CertificateIssuerPrivateKeyTypes, algorithm: _AllowedHashTypes | None, backend: typing.Any=…, *, rsa_padding: padding.PSS | padding.PKCS1v15 | None=…, ecdsa_deterministic: bool | None=…) -> CertificateSigningRequest
- changed:
constructor Admission(admission_authority: GeneralName | None, naming_authority: NamingAuthority | None, profession_infos: typing.Iterable[ProfessionInfo]) -> None → constructor Admission(admission_authority: GeneralName | None, naming_authority: NamingAuthority | None, profession_infos: Iterable[ProfessionInfo]) -> None - changed:
constructor Admissions(authority: GeneralName | None, admissions: typing.Iterable[Admission]) -> None → constructor Admissions(authority: GeneralName | None, admissions: Iterable[Admission]) -> None - changed:
constructor AuthorityInformationAccess(descriptions: typing.Iterable[AccessDescription]) -> None → constructor AuthorityInformationAccess(descriptions: Iterable[AccessDescription]) -> None - changed:
constructor AuthorityKeyIdentifier(key_identifier: bytes | None, authority_cert_issuer: typing.Iterable[GeneralName] | None, authority_cert_serial_number: int | None) -> None → constructor AuthorityKeyIdentifier(key_identifier: bytes | None, authority_cert_issuer: Iterable[GeneralName] | None, authority_cert_serial_number: int | None) -> None - changed:
constructor CRLDistributionPoints(distribution_points: typing.Iterable[DistributionPoint]) -> None → constructor CRLDistributionPoints(distribution_points: Iterable[DistributionPoint]) -> None - changed:
constructor CertificateIssuer(general_names: typing.Iterable[GeneralName]) -> None → constructor CertificateIssuer(general_names: Iterable[GeneralName]) -> None - changed:
constructor CertificatePolicies(policies: typing.Iterable[PolicyInformation]) -> None → constructor CertificatePolicies(policies: Iterable[PolicyInformation]) -> None - changed:
constructor DistributionPoint(full_name: typing.Iterable[GeneralName] | None, relative_name: RelativeDistinguishedName | None, reasons: frozenset[ReasonFlags] | None, crl_issuer: typing.Iterable[GeneralName] | None) -> None → constructor DistributionPoint(full_name: Iterable[GeneralName] | None, relative_name: RelativeDistinguishedName | None, reasons: frozenset[ReasonFlags] | None, crl_issuer: Iterable[GeneralName] | None) -> None - changed:
constructor ExtendedKeyUsage(usages: typing.Iterable[ObjectIdentifier]) -> None → constructor ExtendedKeyUsage(usages: Iterable[ObjectIdentifier]) -> None - changed:
constructor Extensions(extensions: typing.Iterable[Extension[ExtensionType]]) -> None → constructor Extensions(extensions: Iterable[Extension[ExtensionType]]) -> None - changed:
constructor FreshestCRL(distribution_points: typing.Iterable[DistributionPoint]) -> None → constructor FreshestCRL(distribution_points: Iterable[DistributionPoint]) -> None - changed:
constructor GeneralNames(general_names: typing.Iterable[GeneralName]) -> None → constructor GeneralNames(general_names: Iterable[GeneralName]) -> None - changed:
constructor IssuerAlternativeName(general_names: typing.Iterable[GeneralName]) -> None → constructor IssuerAlternativeName(general_names: Iterable[GeneralName]) -> None - changed:
constructor IssuingDistributionPoint(full_name: typing.Iterable[GeneralName] | None, relative_name: RelativeDistinguishedName | None, only_contains_user_certs: bool, only_contains_ca_certs: bool, only_some_reasons: frozenset[ReasonFlags] | None, indirect_crl: bool, only_contains_attribute_certs: bool) -> None → constructor IssuingDistributionPoint(full_name: Iterable[GeneralName] | None, relative_name: RelativeDistinguishedName | None, only_contains_user_certs: bool, only_contains_ca_certs: bool, only_some_reasons: frozenset[ReasonFlags] | None, indirect_crl: bool, only_contains_attribute_certs: bool) -> None - changed:
constructor NameConstraints(permitted_subtrees: typing.Iterable[GeneralName] | None, excluded_subtrees: typing.Iterable[GeneralName] | None) -> None → constructor NameConstraints(permitted_subtrees: Iterable[GeneralName] | None, excluded_subtrees: Iterable[GeneralName] | None) -> None - changed:
constructor NoticeReference(organization: str | None, notice_numbers: typing.Iterable[int]) -> None → constructor NoticeReference(organization: str | None, notice_numbers: Iterable[int]) -> None - changed:
constructor OCSPAcceptableResponses(responses: typing.Iterable[ObjectIdentifier]) -> None → constructor OCSPAcceptableResponses(responses: Iterable[ObjectIdentifier]) -> None - changed:
constructor PolicyInformation(policy_identifier: ObjectIdentifier, policy_qualifiers: typing.Iterable[str | UserNotice] | None) -> None → constructor PolicyInformation(policy_identifier: ObjectIdentifier, policy_qualifiers: Iterable[str | UserNotice] | None) -> None - changed:
constructor PrecertificateSignedCertificateTimestamps(signed_certificate_timestamps: typing.Iterable[SignedCertificateTimestamp]) -> None → constructor PrecertificateSignedCertificateTimestamps(signed_certificate_timestamps: Iterable[SignedCertificateTimestamp]) -> None - changed:
constructor ProfessionInfo(naming_authority: NamingAuthority | None, profession_items: typing.Iterable[str], profession_oids: typing.Iterable[ObjectIdentifier] | None, registration_number: str | None, add_profession_info: bytes | None) -> None → constructor ProfessionInfo(naming_authority: NamingAuthority | None, profession_items: Iterable[str], profession_oids: Iterable[ObjectIdentifier] | None, registration_number: str | None, add_profession_info: bytes | None) -> None - changed:
constructor SignedCertificateTimestamps(signed_certificate_timestamps: typing.Iterable[SignedCertificateTimestamp]) -> None → constructor SignedCertificateTimestamps(signed_certificate_timestamps: Iterable[SignedCertificateTimestamp]) -> None - changed:
constructor SubjectAlternativeName(general_names: typing.Iterable[GeneralName]) -> None → constructor SubjectAlternativeName(general_names: Iterable[GeneralName]) -> None - changed:
constructor SubjectInformationAccess(descriptions: typing.Iterable[AccessDescription]) -> None → constructor SubjectInformationAccess(descriptions: Iterable[AccessDescription]) -> None - changed:
constructor TLSFeature(features: typing.Iterable[TLSFeatureType]) -> None → constructor TLSFeature(features: Iterable[TLSFeatureType]) -> None - added:
class PrivateKeyUsagePeriod(ExtensionType) - added:
constructor PrivateKeyUsagePeriod(not_before: datetime.datetime | None, not_after: datetime.datetime | None) -> None - added:
field PrivateKeyUsagePeriod.oid - added:
method PrivateKeyUsagePeriod.public_bytes() -> bytes - added:
property PrivateKeyUsagePeriod.not_after -> datetime.datetime | None - added:
property PrivateKeyUsagePeriod.not_before -> datetime.datetime | None
- removed:
property NameAttribute.value -> str | bytes - changed:
class NameAttribute → class NameAttribute(typing.Generic[NameAttributeValueType]) - changed:
constructor Name(attributes: typing.Iterable[NameAttribute]) -> None | (attributes: typing.Iterable[RelativeDistinguishedName]) -> None → constructor Name(attributes: Iterable[NameAttribute]) -> None | (attributes: Iterable[RelativeDistinguishedName]) -> None - changed:
constructor NameAttribute(oid: ObjectIdentifier, value: str | bytes, _type: _ASN1Type | None=…, *, _validate: bool=…) -> None → constructor NameAttribute(oid: ObjectIdentifier, value: NameAttributeValueType, _type: _ASN1Type | None=…, *, _validate: bool=…) -> None - changed:
constructor RelativeDistinguishedName(attributes: typing.Iterable[NameAttribute]) → constructor RelativeDistinguishedName(attributes: Iterable[NameAttribute]) - changed:
method Name.get_attributes_for_oid(oid: ObjectIdentifier) -> list[NameAttribute] → method Name.get_attributes_for_oid(oid: ObjectIdentifier) -> list[NameAttribute[str | bytes]] - changed:
method RelativeDistinguishedName.get_attributes_for_oid(oid: ObjectIdentifier) -> list[NameAttribute] → method RelativeDistinguishedName.get_attributes_for_oid(oid: ObjectIdentifier) -> list[NameAttribute[str | bytes]] - added:
property NameAttribute.value -> NameAttributeValueType - added:
variable NameAttributeValueType
- changed:
method OCSPResponseBuilder.certificates(certs: typing.Iterable[x509.Certificate]) -> OCSPResponseBuilder → method OCSPResponseBuilder.certificates(certs: Iterable[x509.Certificate]) -> OCSPResponseBuilder - added:
method OCSPResponseBuilder.add_response_by_hash(issuer_name_hash: bytes, issuer_key_hash: bytes, serial_number: int, algorithm: hashes.HashAlgorithm, cert_status: OCSPCertStatus, this_update: datetime.datetime, next_update: datetime.datetime | None, revocation_time: datetime.datetime | None, revocation_reason: x509.ReasonFlags | None) -> OCSPResponseBuilder
- added:
export OtherNameFormOID
- added:
variable Criticality - added:
variable ExtensionPolicy - added:
variable Policy