|
27 | 27 | Criticality,
|
28 | 28 | ExtensionPolicy,
|
29 | 29 | Policy,
|
| 30 | + PolicyBuilder, |
| 31 | + Store, |
30 | 32 | )
|
31 | 33 |
|
32 | 34 | load_pem_pkcs7_certificates = rust_pkcs7.load_pem_pkcs7_certificates
|
@@ -511,55 +513,15 @@ def _smime_signed_decode(data: bytes) -> tuple[bytes | None, bytes]:
|
511 | 513 | raise ValueError("Not an S/MIME signed message")
|
512 | 514 |
|
513 | 515 |
|
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 |
| - |
555 | 516 | def _verify_pkcs7_certificates(certificates: list[x509.Certificate]) -> None:
|
556 |
| - builder = ( |
| 517 | + ca_policy, ee_policy = pkcs7_x509_extension_policies() |
| 518 | + verifier = ( |
557 | 519 | PolicyBuilder()
|
558 | 520 | .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() |
560 | 523 | )
|
561 | 524 |
|
562 |
| - verifier = builder.build_client_verifier() |
563 | 525 | verifier.verify(certificates[0], certificates[1:])
|
564 | 526 |
|
565 | 527 |
|
|
0 commit comments