Skip to content

Commit 8a86f96

Browse files
committed
integrated built-in verifier
1 parent 412c614 commit 8a86f96

File tree

1 file changed

+6
-44
lines changed
  • src/cryptography/hazmat/primitives/serialization

1 file changed

+6
-44
lines changed

src/cryptography/hazmat/primitives/serialization/pkcs7.py

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
Criticality,
2828
ExtensionPolicy,
2929
Policy,
30+
PolicyBuilder,
31+
Store,
3032
)
3133

3234
load_pem_pkcs7_certificates = rust_pkcs7.load_pem_pkcs7_certificates
@@ -511,55 +513,15 @@ def _smime_signed_decode(data: bytes) -> tuple[bytes | None, bytes]:
511513
raise ValueError("Not an S/MIME signed message")
512514

513515

514-
def get_smime_x509_extension_policies() -> tuple[
515-
ExtensionPolicy, ExtensionPolicy
516-
]:
517-
"""
518-
Gets the default X.509 extension policy for S/MIME. Some specifications
519-
that differ from the standard ones:
520-
- Certificates used as end entities (i.e., the cert used to sign
521-
a PKCS#7/SMIME message) should not have ca=true in their basic
522-
constraints extension.
523-
- EKU_CLIENT_AUTH_OID is not required
524-
- EKU_EMAIL_PROTECTION_OID is required
525-
"""
526-
527-
# CA policy
528-
def _validate_ca(
529-
policy: Policy, cert: Certificate, bc: x509.BasicConstraints
530-
):
531-
assert not bc.ca
532-
533-
ca_policy = ExtensionPolicy.permit_all().require_present(
534-
x509.BasicConstraints,
535-
Criticality.AGNOSTIC,
536-
_validate_ca,
537-
)
538-
539-
# EE policy
540-
def _validate_eku(
541-
policy: Policy, cert: Certificate, eku: x509.ExtendedKeyUsage
542-
):
543-
# Checking for EKU_EMAIL_PROTECTION_OID
544-
assert x509.ExtendedKeyUsageOID.EMAIL_PROTECTION in eku # type: ignore[attr-defined]
545-
546-
ee_policy = ExtensionPolicy.permit_all().require_present(
547-
x509.ExtendedKeyUsage,
548-
Criticality.AGNOSTIC,
549-
_validate_eku,
550-
)
551-
552-
return ca_policy, ee_policy
553-
554-
555516
def _verify_pkcs7_certificates(certificates: list[x509.Certificate]) -> None:
556-
builder = (
517+
ca_policy, ee_policy = pkcs7_x509_extension_policies()
518+
verifier = (
557519
PolicyBuilder()
558520
.store(Store(certificates))
559-
.extension_policies(*get_smime_x509_extension_policies())
521+
.extension_policies(ca_policy=ca_policy, ee_policy=ee_policy)
522+
.build_client_verifier()
560523
)
561524

562-
verifier = builder.build_client_verifier()
563525
verifier.verify(certificates[0], certificates[1:])
564526

565527

0 commit comments

Comments
 (0)