Skip to content

Commit 8989f0c

Browse files
committed
tests: adapted tests
1 parent 3c66197 commit 8989f0c

File tree

2 files changed

+67
-14
lines changed

2 files changed

+67
-14
lines changed

pymdoccbor/tests/pkey.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,32 @@
11
import os
2+
import base64
23

34
PKEY = {
45
'KTY': 'EC2',
56
'CURVE': 'P_256',
67
'ALG': 'ES256',
78
'D': b"<\xe5\xbc;\x08\xadF\x1d\xc5\x0czR'T&\xbb\x91\xac\x84\xdc\x9ce\xbf\x0b,\x00\xcb\xdd\xbf\xec\xa2\xa5",
89
'KID': b"demo-kid"
10+
}
11+
12+
def base64_urldecode(v: str) -> bytes:
13+
"""Urlsafe base64 decoding. This function will handle missing
14+
padding symbols.
15+
16+
:returns: the decoded data in bytes, format, convert to str use method '.decode("utf-8")' on result
17+
:rtype: bytes
18+
"""
19+
padded = f"{v}{'=' * divmod(len(v), 4)[1]}"
20+
return base64.urlsafe_b64decode(padded)
21+
22+
decoded_x = base64_urldecode("dGLQBwQIPWjc2aA6zRc06wlNVxiw72PMwJlEXHEvP-E")
23+
decoded_d = base64_urldecode("NOHGihpyjNa_xBSd17Wr4ynkSM-afunMgpoPoFkelhI")
24+
25+
PKEY_ED25519 = {
26+
'KTY': 'OKP',
27+
'CURVE': 'Ed25519',
28+
'ALG': 'EdDSA',
29+
'D': decoded_d,
30+
'X': decoded_x,
31+
'KID': b"demo-kid-ed25519"
932
}

pymdoccbor/tests/test_02_mdoc_issuer.py

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,7 @@
1212
from pymdoccbor.mso.issuer import MsoIssuer
1313
from pymdoccbor.tests.pid_data import PID_DATA
1414
from pymdoccbor.tests.cert_data import CERT_DATA
15-
16-
from datetime import datetime, timezone, timedelta
17-
18-
19-
PKEY = {
20-
'KTY': 'EC2',
21-
'CURVE': 'P_256',
22-
'ALG': 'ES256',
23-
'D': os.urandom(32),
24-
'KID': b"demo-kid"
25-
}
15+
from pymdoccbor.tests.pkey import PKEY, PKEY_ED25519
2616

2717

2818
def extract_mso(mdoc:dict):
@@ -53,9 +43,6 @@ def test_mso_writer():
5343

5444
Sign1Message.decode(mso.encode())
5545

56-
# TODO: assertion about the content
57-
# breakpoint()
58-
5946

6047
def test_mdoc_issuer():
6148
validity = {"issuance_date": "2025-01-17", "expiry_date": "2025-11-13" }
@@ -91,6 +78,49 @@ def test_mdoc_issuer():
9178
mdoci.dump()
9279
mdoci.dumps()
9380

81+
# check mso content for status list
82+
mso = extract_mso(mdoc)
83+
status_list = mso["status"]["status_list"]
84+
assert status_list["idx"] == 0
85+
assert status_list["uri"] == "https://issuer.com/statuslists"
86+
cert_bytes = status_list["certificate"]
87+
cert:Certificate = load_der_x509_certificate(cert_bytes)
88+
assert "Test ASL Issuer" in cert.subject.rfc4514_string(), "ASL is not signed with the expected certificate"
89+
90+
def test_mdoc_issuer_EdDSA():
91+
validity = {"issuance_date": "2025-01-17", "expiry_date": "2025-11-13" }
92+
mdoci = MdocCborIssuer(
93+
private_key=PKEY,
94+
alg = "ES256",
95+
cert_info=CERT_DATA
96+
)
97+
with open("pymdoccbor/tests/certs/fake-cert.pem", "rb") as file:
98+
fake_cert_file = file.read()
99+
asl_signing_cert = x509.load_pem_x509_certificate(fake_cert_file)
100+
_asl_signing_cert = asl_signing_cert.public_bytes(getattr(serialization.Encoding, "DER"))
101+
status_list = {
102+
"status_list": {
103+
"idx": 0,
104+
"uri": "https://issuer.com/statuslists",
105+
"certificate": _asl_signing_cert,
106+
}
107+
}
108+
mdoc = mdoci.new(
109+
doctype="eu.europa.ec.eudiw.pid.1",
110+
data=PID_DATA,
111+
devicekeyinfo=PKEY_ED25519,
112+
validity=validity,
113+
revocation=status_list
114+
)
115+
116+
mdocp = MdocCbor()
117+
aa = cbor2.dumps(mdoc)
118+
mdocp.loads(aa)
119+
assert mdocp.verify() is True
120+
121+
mdoci.dump()
122+
mdoci.dumps()
123+
94124
# check mso content for status list
95125
mso = extract_mso(mdoc)
96126
status_list = mso["status"]["status_list"]

0 commit comments

Comments
 (0)