Skip to content

Commit 1de8f0f

Browse files
committed
integrated suggestions from Patrick
tests still to be implemented
1 parent f565dec commit 1de8f0f

File tree

1 file changed

+53
-15
lines changed
  • src/cryptography/hazmat/primitives/serialization

1 file changed

+53
-15
lines changed

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

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,30 +71,68 @@ def pkcs7_x509_extension_policies() -> tuple[ExtensionPolicy, ExtensionPolicy]:
7171
"""
7272

7373
# CA policy - TODO: is there any?
74-
ca_policy = ExtensionPolicy.permit_all()
74+
ca_policy = ExtensionPolicy.webpki_defaults_ca()
7575

7676
# EE policy
77-
def _validate_eku(
78-
policy: Policy, cert: Certificate, eku: x509.ExtendedKeyUsage
79-
):
80-
assert x509.ExtendedKeyUsageOID.EMAIL_PROTECTION in eku # type: ignore[attr-defined]
81-
82-
def _validate_ca(
83-
policy: Policy, cert: Certificate, bc: x509.BasicConstraints
84-
):
85-
assert not bc.ca
77+
def _validate_basic_constraints(
78+
policy: Policy, cert: Certificate, bc: x509.BasicConstraints | None
79+
) -> None:
80+
if bc is not None and bc.ca:
81+
raise ValueError("Basic Constraints CA must be False.")
82+
83+
def _validate_key_usage(
84+
policy: Policy, cert: Certificate, ku: x509.KeyUsage | None
85+
) -> None:
86+
if ku is not None:
87+
# Content commitment used to be named non repudiation
88+
if not ku.digital_signature or ku.content_commitment:
89+
raise ValueError(
90+
"Key Usage, if specified, must have at least one of the "
91+
"digital signature or content commitment (formerly non "
92+
"repudiation) bits set"
93+
)
94+
95+
def _validate_subject_alternative_name(
96+
policy: Policy,
97+
cert: Certificate,
98+
san: x509.SubjectAlternativeName | None,
99+
) -> None:
100+
if san is not None:
101+
pass
102+
103+
def _validate_extended_key_usage(
104+
policy: Policy, cert: Certificate, eku: x509.ExtendedKeyUsage | None
105+
) -> None:
106+
if eku is not None:
107+
ep = x509.ExtendedKeyUsageOID.EMAIL_PROTECTION in eku # type: ignore[attr-defined]
108+
aeku = x509.ExtendedKeyUsageOID.ANY_EXTENDED_KEY_USAGE in eku # type: ignore[attr-defined]
109+
if not (ep or aeku):
110+
raise ValueError(
111+
"Extended Key Usage, if specified, must include "
112+
"emailProtection or anyExtendedKeyUsage"
113+
)
86114

87115
ee_policy = (
88116
ExtensionPolicy.permit_all()
89-
.require_present(
90-
x509.ExtendedKeyUsage,
117+
.may_be_present(
118+
x509.BasicConstraints,
91119
Criticality.AGNOSTIC,
92-
_validate_eku,
120+
_validate_basic_constraints,
93121
)
94122
.may_be_present(
95-
x509.BasicConstraints,
123+
x509.KeyUsage,
124+
Criticality.CRITICAL,
125+
_validate_key_usage,
126+
)
127+
.may_be_present(
128+
x509.SubjectAlternativeName,
129+
Criticality.AGNOSTIC,
130+
_validate_subject_alternative_name,
131+
)
132+
.may_be_present(
133+
x509.ExtendedKeyUsage,
96134
Criticality.AGNOSTIC,
97-
_validate_ca,
135+
_validate_extended_key_usage,
98136
)
99137
)
100138

0 commit comments

Comments
 (0)