Skip to content

Commit 6a6d388

Browse files
committed
tests/tls: Use canned certificates
Creation of new certificates with mbedtls 3 is more difficult. Moreover, canned certificates are sufficient here.
1 parent df3ad93 commit 6a6d388

File tree

7 files changed

+144
-97
lines changed

7 files changed

+144
-97
lines changed

tests/data/ca.crt.pem

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDGjCCAgKgAwIBAgIDEjRWMA0GCSqGSIb3DQEBCwUAMCQxDTALBgNVBAsMBHRl
3+
c3QxEzARBgNVBAMMClRydXN0ZWQgQ0EwIBcNMjQwNDIwMTA0NDM4WhgPMjEyMzAz
4+
MjgxMDQ0MzhaMCQxDTALBgNVBAsMBHRlc3QxEzARBgNVBAMMClRydXN0ZWQgQ0Ew
5+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC69WXlMcq5hMYoJJJCtQeb
6+
53o6HQPVZWRogWM6DopHeoozA66pWQYk3vuP48BhZJgIIb5JZ9EcCdW+fejc/lpk
7+
cbdbffZwMUbimgxPwbzTz7ev0FDS2iIMHniZrdtH7WYyxuw9ly1ybWkavMUNZ0a/
8+
jTFk4dqJNQJMKHvc7GjZ6Lm/qblg3gqXbHdlXvrm+1DPG9ZxYRN5g/BwE9BSHRFE
9+
krSh3XqZ7zgPVmolGer696g1mNMPHnrS1Zv6HhIBbMQwPUPenR2SpAU/0kQvB1Ta
10+
oPmXa7/dKet97z3GBF957Pg5QkLthKHFc/UVi1N4JyTwlW9dNqJMcSHl6/XvBvbf
11+
AgMBAAGjUzBRMB8GA1UdIwQYMBaAFLLl9EQNQy1QIhJnLpOkjzdQGWQWMB0GA1Ud
12+
DgQWBBSy5fREDUMtUCISZy6TpI83UBlkFjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
13+
SIb3DQEBCwUAA4IBAQB+ByEbpPdY6pPj48/1JO65EqwR4pdyk8RWjvNbj1cgQtsG
14+
y2feT3JuU9EP46WkLc/I8FjjzFz40fAa5+UKcv4i8Y8utUYSLTcSBOIbXy46m6/m
15+
8Kln6tO1kAuaXJ8EffR7RasJVqO4KWVp6ixKwoJwyf+921rG2YKMiXwJg/VRvXot
16+
U/9ytX4TrFY70qMSVA5t8DSK0gY1XJujS/XSiLGwa3GGKm78IbAtMjB2b8Fi7tBW
17+
BGHj7L1DsZ3fc4dIAE2bSuLJdcW31nBFXJw4NCRdzdTfCigGRCRy127Wo2BvC5YD
18+
DRauve5IuOeD60I0K6jIgCPCkd9bwDfPpMNZvkhZ
19+
-----END CERTIFICATE-----

tests/data/ca.key.prv.pem

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAuvVl5THKuYTGKCSSQrUHm+d6Oh0D1WVkaIFjOg6KR3qKMwOu
3+
qVkGJN77j+PAYWSYCCG+SWfRHAnVvn3o3P5aZHG3W332cDFG4poMT8G808+3r9BQ
4+
0toiDB54ma3bR+1mMsbsPZctcm1pGrzFDWdGv40xZOHaiTUCTCh73Oxo2ei5v6m5
5+
YN4Kl2x3ZV765vtQzxvWcWETeYPwcBPQUh0RRJK0od16me84D1ZqJRnq+veoNZjT
6+
Dx560tWb+h4SAWzEMD1D3p0dkqQFP9JELwdU2qD5l2u/3Snrfe89xgRfeez4OUJC
7+
7YShxXP1FYtTeCck8JVvXTaiTHEh5ev17wb23wIDAQABAoIBAC49XXtHSl2CAkSR
8+
bv9CqOQdZzSSUo1n62KRhcopKHgvTZj6cyt9UjCyWcOnz8AG0jdIqTicjbKCmDPq
9+
DjsCSbcIDRJ64AW1mlOXSC49u4cjm8nHGwZbXwpiSu+veUmb5KfwXSOKjXn8p38u
10+
awo6ndvofuv1lEhVLQFLDf+BFRm3smQqeVL1P01F3hmlcrMkH7mbldxbJNnm83js
11+
s10TdyC0Rehlh8N6HHBCfjwyVlOfFD58fXC+2uFUWywvMUMofsrAklZ9RhLMKuF5
12+
foca1T8f39eUbxsNb/TVWLFdcYMUsWaGb8pkr9qGZdWyc0L3sM7bufuFw72hyTBi
13+
3msTBBECgYEA3xg7YnZaEN7J1GE/2c6SWX8WHHuS8tQwptzqi/jd4JU7fqL1VfEB
14+
Da75DcKnnaQ4vmFjyP0ubRtm1L96Em1JL7kPj0iTdIHwuZjjzb80kIvSGi63grwh
15+
GSfrbOhfTbegeW8rGgan6J8UGGZgmL90n01Fh8fYk18vAqcoYjr6fRkCgYEA1oi2
16+
41S8Ij1Y174927xmE/NnOrIM10yVbOxQWhGHxlfieFWfgWZ8/T97uW4b5v8RjFJC
17+
x/AqhxqdB7C9d251hLcfGEZhZrsIFMZOwbtPvJ3yyb+o52SnjFF6MnWoLsOC/eC5
18+
tBglk143jQT0Ka5upO6v3p/fzKJnVbcEKRS7GrcCgYEAqj4YmwOLqVIJnHr1uaUM
19+
QyVa3zNhqNJJqhvtFBE+Z7IZq4J5SzLVRfbe8SQ4unBmKMmy1t51ficp6nGPmt4w
20+
ui0zdXjBpWe/JjJIrGobl65LD1XVDfu4GjU/T2VnzKuy1tgBgSPRIA+8yv3c+tMn
21+
EKVryLi1SYiaHCEpDQTKv4kCgYALn8bBFJNJC6fnsLArWs7xH8wlGwalF8o0560G
22+
5FJGBfcIbCNDYKk/E5SBnJy4bHOn9cEWkkXLoj6F7yak9QA7G6z8pLucVGAAuCoG
23+
Rz7vymMgWVkuiH6nlLaZS1S8i+1qEiYdwv0uOfmqk20jYQcvupse5ey7asVMmKkK
24+
DMyCiwKBgE0+SkDia4vAvPvfjAv2RGKqgaHQmbN1xsx4XKTpdctCcC43ALPBz7Uy
25+
BDH2Dyqg/gc5S6QF/3MBsOiJc157DO4ikIOUpJ7aZ8gjgRQXYBYD4x9ZyR8XTThL
26+
YHI+wl4VyUeDkAQePBKS6A8Ftmo/w3gmW6bb5gxOxCn/EnUJCHN4
27+
-----END RSA PRIVATE KEY-----

tests/data/ca.key.pub.pem

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuvVl5THKuYTGKCSSQrUH
3+
m+d6Oh0D1WVkaIFjOg6KR3qKMwOuqVkGJN77j+PAYWSYCCG+SWfRHAnVvn3o3P5a
4+
ZHG3W332cDFG4poMT8G808+3r9BQ0toiDB54ma3bR+1mMsbsPZctcm1pGrzFDWdG
5+
v40xZOHaiTUCTCh73Oxo2ei5v6m5YN4Kl2x3ZV765vtQzxvWcWETeYPwcBPQUh0R
6+
RJK0od16me84D1ZqJRnq+veoNZjTDx560tWb+h4SAWzEMD1D3p0dkqQFP9JELwdU
7+
2qD5l2u/3Snrfe89xgRfeez4OUJC7YShxXP1FYtTeCck8JVvXTaiTHEh5ev17wb2
8+
3wIDAQAB
9+
-----END PUBLIC KEY-----

tests/data/ee.crt.pem

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDGTCCAgGgAwIBAgIDEjRWMA0GCSqGSIb3DQEBCwUAMCQxDTALBgNVBAsMBHRl
3+
c3QxEzARBgNVBAMMClRydXN0ZWQgQ0EwIBcNMjQwNDIwMTA0NDM4WhgPMjEyMzAz
4+
MjgxMDQ0MzhaMCkxDTALBgNVBAsMBHRlc3QxGDAWBgNVBAMMD3d3dy5leGFtcGxl
5+
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMK83QnIhBs5b/pf
6+
hZNpmt1glI1eQINlDtFQ/KdTGvoru3h6/oLhAmPNQ8c9ATWflRBAVJgLNO8VO3SI
7+
vElfieU1gsd6TqdkaBrRkOrZTH5z3MQhH9KlXky7wpZ30ozpAxC9Z6JMhI0f4YK2
8+
ta+WF3pFJgqbxUK9Td4l2FtgK/XrFhPv3wfdYNwOoOL4Yb6bJEwLgtlfdQPl62Xe
9+
lAF05nVHL9mmryN3UK5nS7wP/iQneE14zeLLKOpJO9JD6SJsiB8UJB5uXc/6uxxm
10+
LTRYlPQ7SIW2PXRpFhRK5GUijfwvbmZ7qPbEHQcaWmUthvTc+lEHTpCJ5yf57xXP
11+
RQWE79MCAwEAAaNNMEswHwYDVR0jBBgwFoAUsuX0RA1DLVAiEmcuk6SPN1AZZBYw
12+
HQYDVR0OBBYEFJ5UyJBH0OxuZP5xwOOy7+iYdfl9MAkGA1UdEwQCMAAwDQYJKoZI
13+
hvcNAQELBQADggEBAHqB8aQgVwhBFZ7SzG1t+NHjvjAwMh+pkCbzmN3qK14dDCTc
14+
u+1GneBX2LC+S/3qIq3wEr7QBRX0XaZR3SMp0wgWPiF5Twei5jPFCX3tiK52M1wm
15+
dzl3UVrarf0EB2aP9vzLQ447+vqYLNFw92CLmxIDXGbLfVcNOi/r1hmD5DuoZGx0
16+
ntt87FXHCFD363TvxUzdFMBRt1gU8aUT7TqAezOxOAFIeb/7Skk9r4lqPipbrwuG
17+
gwBld8mEGn3pmHn1DWi6nWfgyd+lPsd29miXKiwxryxYDqdzkfvbonoWzbQgOnL+
18+
QjGhdNiIvBmmJl5Hg+4cspMa/8euL3igWPzOFas=
19+
-----END CERTIFICATE-----

tests/data/ee.key.prv.pem

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEpAIBAAKCAQEAwrzdCciEGzlv+l+Fk2ma3WCUjV5Ag2UO0VD8p1Ma+iu7eHr+
3+
guECY81Dxz0BNZ+VEEBUmAs07xU7dIi8SV+J5TWCx3pOp2RoGtGQ6tlMfnPcxCEf
4+
0qVeTLvClnfSjOkDEL1nokyEjR/hgra1r5YXekUmCpvFQr1N3iXYW2Ar9esWE+/f
5+
B91g3A6g4vhhvpskTAuC2V91A+XrZd6UAXTmdUcv2aavI3dQrmdLvA/+JCd4TXjN
6+
4sso6kk70kPpImyIHxQkHm5dz/q7HGYtNFiU9DtIhbY9dGkWFErkZSKN/C9uZnuo
7+
9sQdBxpaZS2G9Nz6UQdOkInnJ/nvFc9FBYTv0wIDAQABAoIBAEc8/OVTz5P//olK
8+
gVxsYQVEDAPtK0+F3BZReKOjYLaM4f9QiyOIua2VzQopNHSP5OF1jxyx2NLvYvkd
9+
/jcfNpw9Z5KemQBeWEEbUda/2F5X9zZeYbxW13jdpPETc1gt83uftjYmpMTVmVMO
10+
kMdjckI94o0178Ma6k3ubUf8FgjXLDbd1ZSHB+Lelo946YUTVGzE53JOKehgnysh
11+
FiTUXovDwT9G+7y6DU2xEmL4CRQcwnMIOlBlP0Bm0VBqjB7zx5R4gjEth3pcJ+Pq
12+
9/UuCG9T6hhGJuz/Xupf9lRvfDyB6i9QB+P5lZM2eZlVIjcMZHVYhiVGMVYmaPJv
13+
XlpMLe0CgYEA4NRpXoqlliMDCkOra2C3Uhz2ilOqeYAMk+cYxRcUtiloXyWs6jzS
14+
aC6u/lahb6Dy65MHdISn28/0GnOvGArMTS8ChVre/p0FVTOuZCC9YsLb2Q/Z3kh8
15+
XZCllDXr7R2HwPEAyuLqD66hCgIZ6EXfMecwcGH0csPFLSxZgk00R3UCgYEA3bxv
16+
rv5MQzbvGEeFt1GNlzrD9xAAhvK1MjtKTw11TOgbmuQOaNqv4ob81pu1gvZxsPza
17+
T2zYoNaXKozQMQNLyGcZ3KK6ZxCJXa+qs2zinAC1mNtml1YZhBUj65PJReYED8pQ
18+
gBQ1shUyUAVLZVyvH4sg0us3y+/RhpIP/ERxOScCgYEAiEJT5fdzaa2ofwUKFBbW
19+
o85n4OfaDq77cHwDuBdH9yrbVab4yDG6d2erqPuJ9aR+9STzxLtNHFxJHer0uEZ7
20+
EWAnT/kF4xv5Cm07CPYKsZtVMJV5vk0CCpbKsyuG4/sctmOZzlx97KkycmVZnDsU
21+
jSMHaWUEiLV7f+g8C0uNHq0CgYEA1m9MhqxQ7lOq6A0LCJzq1Ey1hTHJgLgpeVmT
22+
ZF38iZKSV7mjIc4TeHvY+mZ9JBjXHDV7noICAZFlgXXKRQwN9tGWViRdJhz860he
23+
ScTMZdfdxuSvEz3l0TFsmn9Cj8GBPhAGx8ZDo2QSUwa7wlve1B+Fb9SgEi5rr7uD
24+
kBBUetMCgYBhVb2OXcqgEfFgqo5y3laIF2H2Wg/IXqwgWT01Z2ZKD73NHucxaG31
25+
EKFNFlFms85wvXwDN9FLeQ0U6B9qm64Sbnww2jj8vVwNoq2vEV8KnZVDE8MIUfKl
26+
Kax3t1IFaRDFWKL6FK98ML1PgWIOajb8aseH+HyjUKh2n1/X2/+hQw==
27+
-----END RSA PRIVATE KEY-----

tests/data/ee.key.pub.pem

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwrzdCciEGzlv+l+Fk2ma
3+
3WCUjV5Ag2UO0VD8p1Ma+iu7eHr+guECY81Dxz0BNZ+VEEBUmAs07xU7dIi8SV+J
4+
5TWCx3pOp2RoGtGQ6tlMfnPcxCEf0qVeTLvClnfSjOkDEL1nokyEjR/hgra1r5YX
5+
ekUmCpvFQr1N3iXYW2Ar9esWE+/fB91g3A6g4vhhvpskTAuC2V91A+XrZd6UAXTm
6+
dUcv2aavI3dQrmdLvA/+JCd4TXjN4sso6kk70kPpImyIHxQkHm5dz/q7HGYtNFiU
7+
9DtIhbY9dGkWFErkZSKN/C9uZnuo9sQdBxpaZS2G9Nz6UQdOkInnJ/nvFc9FBYTv
8+
0wIDAQAB
9+
-----END PUBLIC KEY-----

tests/test_tls.py

Lines changed: 34 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
from __future__ import annotations
66

7-
import datetime as dt
87
import errno
98
import pickle
109
import socket
@@ -13,20 +12,10 @@
1312
import time
1413
from contextlib import suppress
1514
from pathlib import Path
16-
from typing import (
17-
Any,
18-
Callable,
19-
Iterator,
20-
Mapping,
21-
Optional,
22-
Sequence,
23-
Tuple,
24-
Union,
25-
)
15+
from typing import Any, Callable, Iterator, Mapping, Sequence, Tuple, Union
2616

2717
import pytest
2818

29-
from mbedtls import hashlib
3019
from mbedtls._tls import (
3120
_SUPPORTED_DTLS_VERSION,
3221
_SUPPORTED_TLS_VERSION,
@@ -54,7 +43,7 @@
5443
WantReadError,
5544
WantWriteError,
5645
)
57-
from mbedtls.x509 import CRT, CSR, BasicConstraints
46+
from mbedtls.x509 import CRT
5847

5948
_Key = Union[RSA, ECC]
6049
_HostName = str
@@ -65,77 +54,36 @@ def rootpath() -> Path:
6554
return Path(__file__).parent.parent
6655

6756

68-
def make_root_ca(
69-
# pylint: disable=too-many-arguments
70-
subject: Optional[str] = None,
71-
not_before: Optional[dt.datetime] = None,
72-
not_after: Optional[dt.datetime] = None,
73-
serial_number: Optional[int] = None,
74-
basic_constraints: Optional[BasicConstraints] = None,
75-
digestmod: Optional[hashlib.Algorithm] = None,
76-
) -> Tuple[CRT, _Key]:
77-
if subject is None:
78-
subject = "OU=test, CN=Trusted CA"
79-
if not_before is None:
80-
not_before = dt.datetime.utcnow()
81-
if not_after is None:
82-
not_after = not_before + dt.timedelta(days=90)
83-
if serial_number is None:
84-
serial_number = 0x123456
85-
if basic_constraints is None:
86-
basic_constraints = BasicConstraints(True, -1)
87-
if digestmod is None:
88-
digestmod = hashlib.sha256
89-
90-
key = RSA()
91-
key.generate()
92-
crt = CRT.selfsign(
93-
csr=CSR.new(key, subject, digestmod()),
94-
issuer_key=key,
95-
not_before=not_before,
96-
not_after=not_after,
97-
serial_number=serial_number,
98-
basic_constraints=basic_constraints,
99-
)
100-
return crt, key
101-
102-
103-
def make_crt(
104-
# pylint: disable=too-many-arguments
105-
issuer_crt: CRT,
106-
issuer_key: _Key,
107-
subject: Optional[str] = None,
108-
not_before: Optional[dt.datetime] = None,
109-
not_after: Optional[dt.datetime] = None,
110-
serial_number: Optional[int] = None,
111-
basic_constraints: Optional[BasicConstraints] = None,
112-
digestmod: Optional[hashlib.Algorithm] = None,
113-
) -> Tuple[CRT, _Key]:
114-
if subject is None:
115-
subject = "OU=test, CN=hostname"
116-
if not_before is None:
117-
not_before = issuer_crt.not_before
118-
if not_after is None:
119-
not_after = issuer_crt.not_after
120-
if serial_number is None:
121-
serial_number = 0x123456
122-
if basic_constraints is None:
123-
basic_constraints = BasicConstraints()
124-
if digestmod is None:
125-
# TODO: issuer_crt.digestmod should work but doesn't.
126-
digestmod = hashlib.sha256
127-
128-
key = RSA()
129-
key.generate()
130-
crt = issuer_crt.sign(
131-
csr=CSR.new(key, subject, digestmod()),
132-
issuer_key=issuer_key,
133-
not_before=not_before,
134-
not_after=not_after,
135-
serial_number=serial_number,
136-
basic_constraints=basic_constraints,
137-
)
138-
return crt, key
57+
@pytest.fixture(scope="module")
58+
def assets(rootpath: Path) -> Path:
59+
return rootpath / "tests" / "data"
60+
61+
62+
@pytest.fixture(scope="module")
63+
def ca_crt(assets: Path) -> CRT:
64+
return CRT.from_file(assets / "ca.crt.pem")
65+
66+
67+
@pytest.fixture(scope="module")
68+
def ca_key(assets: Path) -> _Key:
69+
return RSA.from_file(assets / "ca.key.prv.pem")
70+
71+
72+
@pytest.fixture(scope="module")
73+
def ee_crt(assets: Path) -> CRT:
74+
return CRT.from_file(assets / "ee.crt.pem")
75+
76+
77+
@pytest.fixture(scope="module")
78+
def ee_key(assets: Path) -> _Key:
79+
return RSA.from_file(assets / "ee.key.prv.pem")
80+
81+
82+
@pytest.fixture(scope="module")
83+
def certificate_chain(
84+
ca_crt: CRT, ee_crt: CRT, ee_key: _Key
85+
) -> Tuple[Tuple[CRT, ...], _Key]:
86+
return (ee_crt, ca_crt), ee_key
13987

14088

14189
class TestPickle:
@@ -328,10 +276,9 @@ def test_add_existing_certificate(self, store: TrustStore) -> None:
328276
store.add(store[0])
329277
assert len(store) == length
330278

331-
def test_add_new_certificate(self, store: TrustStore) -> None:
332-
root_ca = make_root_ca()[0]
279+
def test_add_new_certificate(self, store: TrustStore, ca_crt: CRT) -> None:
333280
length = len(store)
334-
store.add(root_ca)
281+
store.add(ca_crt)
335282
assert len(store) == length + 1
336283

337284

@@ -481,16 +428,6 @@ class TestTLSHandshake:
481428
def hostname(self) -> _HostName:
482429
return "www.example.com"
483430

484-
@pytest.fixture(scope="class")
485-
def certificate_chain(
486-
self, hostname: _HostName
487-
) -> Tuple[Tuple[CRT, ...], _Key]:
488-
root_crt, root_key = make_root_ca()
489-
ee_crt, ee_key = make_crt(
490-
root_crt, root_key, subject=f"OU=test, CN={hostname}"
491-
)
492-
return (ee_crt, root_crt), ee_key
493-
494431
def test_cert_without_validation(
495432
self, certificate_chain: Tuple[Tuple[CRT, ...], _Key]
496433
) -> None:

0 commit comments

Comments
 (0)