18
18
from cryptography .hazmat .primitives .asymmetric import ed25519 , padding , rsa
19
19
from cryptography .hazmat .primitives .ciphers import algorithms
20
20
from cryptography .hazmat .primitives .serialization import pkcs7
21
- from cryptography .x509 .oid import OtherNameFormOID
21
+ from cryptography .x509 .oid import (
22
+ ExtensionOID ,
23
+ )
22
24
from cryptography .x509 .verification import (
23
25
PolicyBuilder ,
24
26
Store ,
@@ -148,8 +150,11 @@ def _load_cert_key():
148
150
class TestPKCS7VerifyCertificate :
149
151
@pytest .fixture (name = "certificate_builder" )
150
152
def fixture_certificate_builder (self ) -> x509 .CertificateBuilder :
153
+ # Load the standard certificate and private key
151
154
certificate , private_key = _load_cert_key ()
152
- return (
155
+
156
+ # Basic certificate builder
157
+ certificate_builder = (
153
158
x509 .CertificateBuilder ()
154
159
.serial_number (certificate .serial_number )
155
160
.subject_name (certificate .subject )
@@ -159,19 +164,43 @@ def fixture_certificate_builder(self) -> x509.CertificateBuilder:
159
164
.not_valid_after (certificate .not_valid_after )
160
165
)
161
166
167
+ # Add AuthorityKeyIdentifier extension
168
+ aki = certificate .extensions .get_extension_for_oid (
169
+ ExtensionOID .AUTHORITY_KEY_IDENTIFIER
170
+ )
171
+ certificate_builder = certificate_builder .add_extension (
172
+ aki .value , critical = False
173
+ )
174
+
175
+ # Add SubjectAlternativeName extension
176
+ san = certificate .extensions .get_extension_for_oid (
177
+ ExtensionOID .SUBJECT_ALTERNATIVE_NAME
178
+ )
179
+ certificate_builder = certificate_builder .add_extension (
180
+ san .value , critical = True
181
+ )
182
+
183
+ return certificate_builder
184
+
162
185
def test_verify_pkcs7_certificate (self , certificate_builder ):
186
+ # Load the basic certificate and private key
163
187
certificate , private_key = _load_cert_key ()
164
- ca_policy , ee_policy = pkcs7 .pkcs7_x509_extension_policies ()
188
+
189
+ # Add valid BasicConstraints extension
190
+ bc_extension = x509 .BasicConstraints (ca = False , path_length = None )
191
+ certificate_builder = certificate_builder .add_extension (
192
+ bc_extension , False
193
+ )
165
194
166
195
# Add valid KeyUsage extension
167
196
ku_extension = x509 .KeyUsage (
168
197
digital_signature = True ,
169
198
content_commitment = False ,
170
- key_encipherment = False ,
171
- data_encipherment = False ,
172
- key_agreement = False ,
173
- key_cert_sign = False ,
174
- crl_sign = False ,
199
+ key_encipherment = True ,
200
+ data_encipherment = True ,
201
+ key_agreement = True ,
202
+ key_cert_sign = True ,
203
+ crl_sign = True ,
175
204
encipher_only = False ,
176
205
decipher_only = False ,
177
206
)
@@ -180,7 +209,7 @@ def test_verify_pkcs7_certificate(self, certificate_builder):
180
209
)
181
210
182
211
# Add valid ExtendedKeyUsage extension
183
- usages = [x509 .ExtendedKeyUsageOID .CLIENT_AUTH ] # type: ignore[attr-defined]
212
+ usages = [x509 .ExtendedKeyUsageOID .EMAIL_PROTECTION ] # type: ignore[attr-defined]
184
213
eku_extension = x509 .ExtendedKeyUsage (usages )
185
214
certificate_builder = certificate_builder .add_extension (
186
215
eku_extension , True
@@ -191,13 +220,15 @@ def test_verify_pkcs7_certificate(self, certificate_builder):
191
220
private_key , certificate .signature_hash_algorithm , None
192
221
)
193
222
223
+ # Verify the certificate
224
+ ca_policy , ee_policy = pkcs7 .pkcs7_x509_extension_policies ()
194
225
verifier = (
195
226
PolicyBuilder ()
196
227
.store (Store ([pkcs7_certificate ]))
197
228
.extension_policies (ca_policy = ca_policy , ee_policy = ee_policy )
198
229
.build_client_verifier ()
199
230
)
200
- verifier .verify (certificate , [])
231
+ verifier .verify (pkcs7_certificate , [])
201
232
202
233
def test_verify_pkcs7_certificate_wrong_bc (self , certificate_builder ):
203
234
certificate , private_key = _load_cert_key ()
0 commit comments