Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/cryptography/x509/verification.py: 53%
32 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 07:26 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 07:26 +0000
1# This file is dual licensed under the terms of the Apache License, Version
2# 2.0, and the BSD License. See the LICENSE file in the root of this repository
3# for complete details.
5from __future__ import annotations
7import datetime
8import typing
10from cryptography.hazmat.bindings._rust import x509 as rust_x509
11from cryptography.x509.general_name import DNSName, IPAddress
13__all__ = ["Store", "Subject", "ServerVerifier", "PolicyBuilder"]
15Store = rust_x509.Store
17Subject = typing.Union[DNSName, IPAddress]
19ServerVerifier = rust_x509.ServerVerifier
22class VerificationError(Exception):
23 pass
26class PolicyBuilder:
27 def __init__(
28 self,
29 *,
30 time: datetime.datetime | None = None,
31 store: Store | None = None,
32 max_chain_depth: int | None = None,
33 ):
34 self._time = time
35 self._store = store
36 self._max_chain_depth = max_chain_depth
38 def time(self, new_time: datetime.datetime) -> PolicyBuilder:
39 """
40 Sets the validation time.
41 """
42 if self._time is not None:
43 raise ValueError("The validation time may only be set once.")
45 return PolicyBuilder(
46 time=new_time,
47 store=self._store,
48 max_chain_depth=self._max_chain_depth,
49 )
51 def store(self, new_store: Store) -> PolicyBuilder:
52 """
53 Sets the trust store.
54 """
56 if self._store is not None:
57 raise ValueError("The trust store may only be set once.")
59 return PolicyBuilder(
60 time=self._time,
61 store=new_store,
62 max_chain_depth=self._max_chain_depth,
63 )
65 def max_chain_depth(self, new_max_chain_depth: int) -> PolicyBuilder:
66 """
67 Sets the maximum chain depth.
68 """
70 if self._max_chain_depth is not None:
71 raise ValueError("The maximum chain depth may only be set once.")
73 return PolicyBuilder(
74 time=self._time,
75 store=self._store,
76 max_chain_depth=new_max_chain_depth,
77 )
79 def build_server_verifier(self, subject: Subject) -> ServerVerifier:
80 """
81 Builds a verifier for verifying server certificates.
82 """
84 if self._store is None:
85 raise ValueError("A server verifier must have a trust store")
87 return rust_x509.create_server_verifier(
88 subject,
89 self._store,
90 self._time,
91 self._max_chain_depth,
92 )