Skip to content

Commit 4375d02

Browse files
authored
Merge pull request #592 from dajiaji/update-dependencies-20250314
Update dependencies.
2 parents 8e9906b + b84b3ab commit 4375d02

5 files changed

Lines changed: 349 additions & 355 deletions

File tree

cwt/algs/asymmetric.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from typing import Any, Dict, List
22

3-
from certvalidator import CertificateValidator, ValidationContext
3+
from cryptography.x509 import Certificate, DNSName, load_der_x509_certificate
4+
from cryptography.x509.oid import NameOID
5+
from cryptography.x509.verification import PolicyBuilder, Store
46

57
from ..cose_key_interface import COSEKeyInterface
68
from ..exceptions import VerifyError
@@ -11,28 +13,32 @@ def __init__(self, params: Dict[int, Any]):
1113
super().__init__(params)
1214

1315
self._key: Any = b""
14-
self._cert = b""
15-
self._intermediates = []
16+
self._cert: Certificate = None
17+
self._intermediates: List[Certificate] = []
1618

1719
if 33 in params:
1820
if not isinstance(params[33], (bytes, list)):
1921
raise ValueError("x5c(33) should be bytes(bstr) or list.")
2022
certs = [params[33]] if isinstance(params[33], bytes) else params[33]
21-
self._cert = certs[0]
23+
self._cert = load_der_x509_certificate(certs[0])
2224
if len(certs) > 1:
23-
self._intermediates = certs[1:]
25+
for c in certs[1:]:
26+
self._intermediates.append(load_der_x509_certificate(c))
2427
return
2528

26-
def validate_certificate(self, ca_certs: List[bytes]) -> bool:
29+
def validate_certificate(self, ca_certs: List[Certificate]) -> bool:
2730
if not ca_certs:
2831
raise ValueError("ca_certs should be set.")
2932
if not self._cert:
3033
return False
3134

32-
ctx = ValidationContext(trust_roots=ca_certs)
35+
store = Store(ca_certs)
36+
builder = PolicyBuilder().store(store)
37+
verifier = builder.build_server_verifier(
38+
DNSName(self._cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value)
39+
)
3340
try:
34-
validator = CertificateValidator(self._cert, self._intermediates, validation_context=ctx)
35-
validator.validate_usage(set(["digital_signature"]), extended_optional=True)
41+
verifier.verify(self._cert, self._intermediates)
3642
except Exception as err:
3743
raise VerifyError("Failed to validate the certificate bound to the key.") from err
3844
return True

cwt/cose.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any, Dict, List, Optional, Tuple, Union
22

3-
from asn1crypto import pem
43
from cbor2 import CBORTag
4+
from cryptography.x509 import load_pem_x509_certificates
55

66
from .cbor_processor import CBORProcessor
77
from .const import (
@@ -54,11 +54,8 @@ def __init__(
5454
if ca_certs:
5555
if not isinstance(ca_certs, str):
5656
raise ValueError("ca_certs should be str.")
57-
self._trust_roots: List[bytes] = []
5857
with open(ca_certs, "rb") as f:
59-
for _, _, der_bytes in pem.unarmor(f.read(), multiple=True):
60-
self._ca_certs.append(der_bytes)
61-
58+
self._ca_certs = load_pem_x509_certificates(f.read())
6259
if not isinstance(deterministic_header, bool):
6360
raise ValueError("deterministic_header should be bool.")
6461
self._deterministic_header = deterministic_header

0 commit comments

Comments
 (0)