Skip to content

Commit 3448711

Browse files
committed
allez cette fois-ci c la bonne
1 parent 53b6a99 commit 3448711

File tree

4 files changed

+104
-13
lines changed

4 files changed

+104
-13
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def _validate_key_usage(
8585
) -> None:
8686
if ku is not None:
8787
# Content commitment used to be named non repudiation
88-
if not ku.digital_signature or ku.content_commitment:
88+
if not (ku.digital_signature or ku.content_commitment):
8989
raise ValueError(
9090
"Key Usage, if specified, must have at least one of the "
9191
"digital signature or content commitment (formerly non "

tests/hazmat/primitives/test_pkcs7.py

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from cryptography.hazmat.primitives.asymmetric import ed25519, padding, rsa
1919
from cryptography.hazmat.primitives.ciphers import algorithms
2020
from cryptography.hazmat.primitives.serialization import pkcs7
21+
from cryptography.x509.oid import OtherNameFormOID
2122
from cryptography.x509.verification import (
2223
PolicyBuilder,
2324
Store,
@@ -145,18 +146,6 @@ def _load_cert_key():
145146

146147

147148
class TestPKCS7VerifyCertificate:
148-
def test_verify_pkcs7_certificate(self):
149-
certificate, _ = _load_cert_key()
150-
ca_policy, ee_policy = pkcs7.pkcs7_x509_extension_policies()
151-
152-
verifier = (
153-
PolicyBuilder()
154-
.store(Store([certificate]))
155-
.extension_policies(ca_policy=ca_policy, ee_policy=ee_policy)
156-
.build_client_verifier()
157-
)
158-
verifier.verify(certificate, [])
159-
160149
@pytest.fixture(name="certificate_builder")
161150
def fixture_certificate_builder(self) -> x509.CertificateBuilder:
162151
certificate, private_key = _load_cert_key()
@@ -170,6 +159,46 @@ def fixture_certificate_builder(self) -> x509.CertificateBuilder:
170159
.not_valid_after(certificate.not_valid_after)
171160
)
172161

162+
def test_verify_pkcs7_certificate(self, certificate_builder):
163+
certificate, private_key = _load_cert_key()
164+
ca_policy, ee_policy = pkcs7.pkcs7_x509_extension_policies()
165+
166+
# Add valid KeyUsage extension
167+
ku_extension = x509.KeyUsage(
168+
digital_signature=True,
169+
content_commitment=False,
170+
key_encipherment=False,
171+
data_encipherment=False,
172+
key_agreement=False,
173+
key_cert_sign=False,
174+
crl_sign=False,
175+
encipher_only=False,
176+
decipher_only=False,
177+
)
178+
certificate_builder = certificate_builder.add_extension(
179+
ku_extension, True
180+
)
181+
182+
# Add valid ExtendedKeyUsage extension
183+
usages = [x509.ExtendedKeyUsageOID.CLIENT_AUTH] # type: ignore[attr-defined]
184+
eku_extension = x509.ExtendedKeyUsage(usages)
185+
certificate_builder = certificate_builder.add_extension(
186+
eku_extension, True
187+
)
188+
189+
# Build the certificate
190+
pkcs7_certificate = certificate_builder.sign(
191+
private_key, certificate.signature_hash_algorithm, None
192+
)
193+
194+
verifier = (
195+
PolicyBuilder()
196+
.store(Store([pkcs7_certificate]))
197+
.extension_policies(ca_policy=ca_policy, ee_policy=ee_policy)
198+
.build_client_verifier()
199+
)
200+
verifier.verify(certificate, [])
201+
173202
def test_verify_pkcs7_certificate_wrong_bc(self, certificate_builder):
174203
certificate, private_key = _load_cert_key()
175204

@@ -232,6 +261,22 @@ def test_verify_pkcs7_certificate_wrong_eku(self, certificate_builder):
232261
# Verify the certificate
233262
self.verify_invalid_pkcs7_certificate(pkcs7_certificate)
234263

264+
@pytest.mark.parametrize(
265+
"filename", ["ca_non_ascii_san.pem", "ca_ascii_san.pem"]
266+
)
267+
def test_verify_pkcs7_certificate_wrong_san(self, filename):
268+
# Read a certificate with an invalid SAN
269+
pkcs7_certificate = load_vectors_from_file(
270+
os.path.join("pkcs7", filename),
271+
loader=lambda pemfile: x509.load_pem_x509_certificate(
272+
pemfile.read()
273+
),
274+
mode="rb",
275+
)
276+
277+
# Verify the certificate
278+
self.verify_invalid_pkcs7_certificate(pkcs7_certificate)
279+
235280
@staticmethod
236281
def verify_invalid_pkcs7_certificate(certificate: x509.Certificate):
237282
ca_policy, ee_policy = pkcs7.pkcs7_x509_extension_policies()
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIID3DCCAsSgAwIBAgIUGJw032ss5tmRmaY8x41pL5lqqRYwDQYJKoZIhvcNAQEL
3+
BQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
4+
DVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDEV4YW1wbGUgQ29ycDEWMBQGA1UECwwN
5+
SVQgRGVwYXJ0bWVudDEUMBIGA1UEAwwLZXhhbXBsZS5jb20wHhcNMjUwNjA5MTg0
6+
NzQ1WhcNMjYwNjA5MTg0NzQ1WjB/MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2Fs
7+
aWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMRXhhbXBs
8+
ZSBDb3JwMRYwFAYDVQQLDA1JVCBEZXBhcnRtZW50MRQwEgYDVQQDDAtleGFtcGxl
9+
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLWXuy3atOjhb8g
10+
fa5AC5me9PqRqcqV63e+NIe8IaKioCM5Sl+3jhKb5DdPIjfQYbHbwPtY+rFSP364
11+
dBZoJpCDG4gcD6H3eS5JGc8Uz62l+oBNuFoU3EZiUNMF0k17vs/6CGeyt53+D9DJ
12+
PG6Wv87nAAoK97r1rLdC8Of97QpUV/st+YDP7/LOH8CxJZOnbiUdekzo0dCQkk7n
13+
17hJCYN1Y98VrlZFY25ny2TURUgK7lIjduEUb0dugYiepjzp7ZV8184kpAD/PtLT
14+
czA1S8e6kySd5wbJSFcKxrk/j/cccUGLMyKPlMZgsHZUm/2DOLWLljxbEjCOxb1G
15+
8+EpR9kCAwEAAaNQME4wLQYDVR0RBCYwJKAiBggrBgEFBQcICaAWDBRyZXRvdXJu
16+
ZUBleGFtcGxlLmNvbTAdBgNVHQ4EFgQUm24AOQAmOInCPZPDUagXXw+BEl0wDQYJ
17+
KoZIhvcNAQELBQADggEBAGgLqsx27sS28t1okxT1MU6QhfAn/Yw07Nhk3cpNKGnh
18+
edrPPTXvJc05qHuQIqOiFIJ4SojbQ2+bVZwo7V3Jhspx9T+Gkb/Dn3rHpAfOXuaJ
19+
RqJ777Cor2seAKv07jerGnEULYW8JcezZDGbv6ViC0oEgazwTzahfynrUMJ2DJRX
20+
tnNdczDsGw+DVMvOBzcSE/aEzhd4ghgVq5aFS05wzhN/fTWKiN4tpEAG6y95gU73
21+
29O3y1W3dLjblTZJvXNtgCjMT6R3OVeWAsqyXDprFrZWZucCj8opIxRf6jpZlRfJ
22+
qW+57pkefhg3q4MFjn08BOKpYwOdRouGE4l96dGBDwM=
23+
-----END CERTIFICATE-----
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDzzCCAregAwIBAgIUAX/xKTtlMllrK5ng0+OkmnxxIugwDQYJKoZIhvcNAQEL
3+
BQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
4+
DVNhbiBGcmFuY2lzY28xFTATBgNVBAoMDEV4YW1wbGUgQ29ycDEWMBQGA1UECwwN
5+
SVQgRGVwYXJ0bWVudDEUMBIGA1UEAwwLZXhhbXBsZS5jb20wHhcNMjUwNjA5MTgw
6+
NzE4WhcNMjYwNjA5MTgwNzE4WjB/MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2Fs
7+
aWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEVMBMGA1UECgwMRXhhbXBs
8+
ZSBDb3JwMRYwFAYDVQQLDA1JVCBEZXBhcnRtZW50MRQwEgYDVQQDDAtleGFtcGxl
9+
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOxyV/ZsaGn7dOcZ
10+
6ODFcnmwjPCKRASFeDtOMYoGrlALb9zA+UMuMB63dTZ8ofWsDgLLGhw86njfSYad
11+
RslOw8Bki9lKiS1RhS/RbnDSBWB2wJzniyFn/qI2F93WbgqHMOnzzJcAkc/YPU0T
12+
iyvNpjD3Q/xObcp7ouBJJmFSvLybSTJtFrVzkpIbDZYrn0KyKtgTCPc/r9D04u+u
13+
scSACvTRjePsEZIgRkVgfVpdBmy1KeJmx2NqS8Yev+y+0e9q3t8Ga/j/CnPFXlEl
14+
iBHciFtkKdd2HrPLJMXBKhMn2KagLJSSdABNApi8qULIpOnrEE8FepKCzkptFyS1
15+
5g0H3u0CAwEAAaNDMEEwIAYDVR0RBBkwF4EVcmV0b3VybsOpQGV4YW1wbGUuY29t
16+
MB0GA1UdDgQWBBTthtqdM0IoehNymXnqMPX1joF1LzANBgkqhkiG9w0BAQsFAAOC
17+
AQEApQZ3vOuBgNg1U26c4l0VSCU5q73Lecbgjc42AhEp9FyP7ratj4MyH7RGr4io
18+
vl0wWROFBnzliW5ZA8CP3Ux4AbqgtxcFPBRHACjmrpoSFHmW7bpzRnqwJKwXsOGJ
19+
ZhjA/2o91lEJr0UNhpvSGyR+xCkuvw83mvM1rmE19yNMElv96x/DPVQV2ocsffOb
20+
kS7pIpvXX3pSIj7Up0Xrz+bSyhJlsO3sO5bREshyvuiRivm9AjBVRY/BtbFY6DcV
21+
9javEitCw93BgImIs0CXGpZUrvphX8muWVct5xpKj64/Yo0hIYystX+xVl3EjTRf
22+
B7pH2DE+cXg99p7L6RoYtlOeRA==
23+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)