1+ import cbor2
2+ import os
3+
4+ from pymdoccbor .mdoc .issuer import MdocCborIssuer
5+
6+ PKEY = {
7+ 'KTY' : 'EC2' ,
8+ 'CURVE' : 'P_256' ,
9+ 'ALG' : 'ES256' ,
10+ 'D' : os .urandom (32 ),
11+ 'KID' : b"demo-kid"
12+ }
13+
14+ PID_DATA = {
15+ "org.iso.18013.5.1" : {
16+ "expiry_date" : "2024-02-22" ,
17+ "issue_date" : "2023-11-14" ,
18+ "issuing_country" : "IT" ,
19+ "issuing_authority" : "Gli amici della Salaria" ,
20+ "family_name" : "Rossi" ,
21+ "given_name" : "Mario" ,
22+ "birth_date" : "1956-01-12" ,
23+ "document_number" : "XX1234567" ,
24+ "portrait" : b'\xff \xd8 \xff \xe0 \x00 \x10 JFIF\x00 \x01 \x01 \x01 \x00 \x90 \x00 \x90 \x00 \x00 \xff \xdb \x00 C\x00 \x13 \r \x0e \x11 \x0e \x0c \x13 \x11 \x0f \x11 \x15 \x14 \x13 \x17 \x1d 0\x1f \x1d \x1a \x1a \x1d :*,#0E=IGD=CALVm]LQhRAC_\x82 `hqu{|{J\\ \x86 \x90 \x85 w\x8f mx{v\xff \xdb \x00 C\x01 \x14 \x15 \x15 \x1d \x19 \x1d 8\x1f \x1f 8vOCOvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\xff \xc0 \x00 \x11 \x08 \x00 \x18 \x00 d\x03 \x01 "\x00 \x02 \x11 \x01 \x03 \x11 \x01 \xff \xc4 \x00 \x1b \x00 \x00 \x03 \x01 \x00 \x03 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x05 \x06 \x04 \x01 \x02 \x03 \x07 \xff \xc4 \x00 2\x10 \x00 \x01 \x03 \x03 \x03 \x02 \x05 \x02 \x03 \t \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x02 \x03 \x04 \x00 \x05 \x11 \x06 \x12 !\x13 1\x14 \x15 Qaq"A\x07 \x81 \xa1 \x16 5BRs\x91 \xb2 \xc1 \xf1 \xff \xc4 \x00 \x15 \x01 \x01 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \xff \xc4 \x00 \x1a \x11 \x01 \x01 \x01 \x00 \x03 \x01 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 A\x11 !1a\xff \xda \x00 \x0c \x03 \x01 \x00 \x02 \x11 \x03 \x11 \x00 ?\x00 \xa5 \xbb \xde "\xda #)\xc7 \xd6 \x92 \xbc }\r \x03 \xf5 ,\xfb \x0f \xf7 ^z~\xf3 \xe7 p\x97 #\xa1 \xd0 \xda \xe1 F\xdd \xfb \xb3 \xc0 9\xce \x07 \xad +\xd4 z~2\xdb \xb8 \xdd \x1d R\xd6 \xef K(Od\xa4 \x80 \x06 }\xfb Q\xf8 \x7f \xfb \x95 \xff \x00 \xeb \x9f \xf1 M!]\xe6 j\xf0 \x89 \xce D\xb7 \xdb \xde \x9c \xb6 \x89 \n (8\xed \xdf \x18 \x07 \x8f z\xdd b\xd4 \x11 \xef M\xb9 \xb1 \n e\xd6 \xb9 Z\x14 s\x81 \xea \r I[\x93 2u\xfe k\xba u\xc1 \x14 \x10 J\x8b \xa4 \x10 A>\x98 =\xff \x00 OZ\xf5 \xd3 KKL\xde c-\x0b \xf1 \xfd \x15 \x92 \xbd \xd9 \x1c d\x11 \xf3 \x93 L/\xa6 \xaf kT\x97 ]\x10 m\xcf Je\xae V\xe8 V\x00 \x1e \xbc \x03 \xc7 \xce )\xdd \x9e \xef \x1e \xf1 \x0f \xc4 G\xdc \x9d \xa7 j\xd2 \xae \xe9 57\xa1 \xba ~Op\xdd \x8e \xff \x00 W\xc6 \xdf \xfb ^\x1a \x19 \x85 J\x83 u\x8e TR\x87 P\x94 n\xc6 pHP\xcd \x03 {\xce \xb0 \x8b m},\xc7 m3\x17 \xfc {\\ \xc0 O\xb6 pri\xc5 \xc6 \xe0 \xc5 \xb6 \n \xe5 I$!#\xb0 \xe4 \x93 \xf6 \x02 \xa0 uU\x9e 5\x99 p\xd9 \x8d \xb8 \x95 %EkQ\xc9 Q\xc8 \xaf \xa1 >\xa8 \xe9 \x8e <Yh6x=\\ c\xf5 \xa6 \x1a \x99 \xfd \xb7 )\x08 u\xdb K\xe8 \x8a \xb3 \x84 \xbb \xbb \xbf \xc7 \x18 ?\xde \xaa c>\x89 Q\xdb }\xa3 \x96 \xdc HRO\xb1 \xa8 \xbd a\x1a Z\xa2 \xa2 C/0\xab B\n zm2@\xc7 \x18 \xcf \x03 \x1f \xa9 \xef L\x9a \xd5 P Z\xa0 )Q\xdf J\x1d l\x84 !\xb0 \x15 \xb7 i\xdb \x8c \x92 )\x83 ~\xa2 \xbe \x8b \x1b \r 9\xd0 \xeb \xa9 \xc5 \x14 \x84 \xef \xdb \x8c \x0e \xfd \x8d %\x8d \xaf <D\x96 \x99 \xf2 \xed \xbd E\x84 \xe7 \xaf \x9c d\xe3 \xf9 k\x9b \xeb (\xd4 \xac @\x93 \x1e dx\xc8 \xe7 j$\xa8 %D\x95 \x01 \xd8 g\xd2 \xb1 \xdc \xde \xba \xe9 \x9b \x9c u*\xe4 \xec \xd6 \xdd \xe4 \xa1 y\xc1 \xc1 \xe4 `\x93 \x8f \x91 I\xef e^Q\\ \x03 \x91 \x9a (\x9c \xb3 \xdc \xa2 x\xfb {\xf1 w\xf4 \xfa \xa8 )\xdd \x8c \xe3 \xf2 \xac \x9a ~\xcd \xe4 \x90 \x97 \x1f \xaf \xd7 \xdc \xe1 ^\xed \x9b q\xc0 \x18 \xc6 O\xa5 \x14 QK$\xe8 \xe4 \xf8 \xc5 \xc9 \xb7 \\ \x1e \x82 W\x9d \xc1 #=\xfe \xc0 \x82 8\xf6 \xad \xd6 -9\x1a \xcc \x1c RV\xa7 \x9e pmR\xd4 1\xc7 \xa0 \x14 Q@\xb9 \xfd \x14 \x9e \xb3 \xa6 \r \xc5 \xe8 \x8c \xbb \xc2 \xda \t $\x11 \xe9 \xdc q\xf3 \x9a wf\xb4 G\xb3 D\xe8 G\xdc \xac \x9d \xcb Z\xbb \xa8 \xd1 E\x06 \x1d C\xa6 \xfc \xf1 \xe6 \\ \xf1 ]\x0e \x90 #\x1d =\xd9 \xcf \xe6 )\x95 \xc6 \xdc \xc5 \xca \x12 \xa2 \xc9 \x04 \xa1 _q\xdd \' \xd4 QE>\t \xd1 \xa2 \x14 P\x96 \x1c \xbb >\xa8 \xa9 VC;x\x1f \x1c \xe3 =\xfe \xd5 O\x0e +P\xa2 \xb7 \x1d \x84 \xed m\xb1 \x80 (\xa2 \x81 u\xf7 O\xc6 \xbd \xa1 \x05 \xc5 )\xa7 \x91 \xc2 \\ O<z\x11 \xf7 \x15 \x86 &\x8f Jf\xb7 &\xe3 =\xe9 \xea o\x1b R\xb1 \x81 \xc7 `rNG\xb5 \x14 R\n Z(\xa2 \x83 \xff \xd9 ' ,
25+ "driving_privileges" : [
26+ {
27+ "vehicle_category_code" : "A" ,
28+ "issue_date" : cbor2 .CBORTag (
29+ 1004 ,
30+ value = cbor2 .dumps (
31+ "2020-09-17"
32+ )
33+ ),
34+ "expiry_date" : cbor2 .CBORTag (
35+ 1004 ,
36+ value = cbor2 .dumps (
37+ "2031-06-10"
38+ )
39+ )
40+ }
41+ ],
42+ "un_distinguishing_sign" : "I"
43+ },
44+ "org.iso.18013.5.1.it" : {
45+ "verification.evidence" : {
46+ "organization_name" : "Motorizzazione Civile" ,
47+ "organization_id" : "m_inf" ,
48+ "country_code" : "it" ,
49+ },
50+ "verification.trust_framework" : "eidas" ,
51+ "verification.assurance_level" : "high"
52+ }
53+ }
54+
55+ mdoci = MdocCborIssuer (
56+ private_key = PKEY ,
57+ alg = "ES256" ,
58+ )
59+
60+ mdoc = mdoci .new (
61+ doctype = "org.iso.18013.5.1.mDL" ,
62+ data = PID_DATA ,
63+ validity = {
64+ "issuance_date" : "2024-12-31" ,
65+ "expiry_date" : "2050-12-31"
66+ },
67+ )
68+
69+ mdoc
70+ mdoci .dump ()
71+ mdoci .dumps ()
0 commit comments