|
| 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\x10JFIF\x00\x01\x01\x01\x00\x90\x00\x90\x00\x00\xff\xdb\x00C\x00\x13\r\x0e\x11\x0e\x0c\x13\x11\x0f\x11\x15\x14\x13\x17\x1d0\x1f\x1d\x1a\x1a\x1d:*,#0E=IGD=CALVm]LQhRAC_\x82`hqu{|{J\\\x86\x90\x85w\x8fmx{v\xff\xdb\x00C\x01\x14\x15\x15\x1d\x19\x1d8\x1f\x1f8vOCOvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\xff\xc0\x00\x11\x08\x00\x18\x00d\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\x002\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!\x131\x14\x15Qaq"A\x07\x81\xa1\x165BRs\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\x01A\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\xe7p\x97#\xa1\xd0\xda\xe1F\xdd\xfb\xb3\xc09\xce\x07\xad+\xd4z~2\xdb\xb8\xdd\x1dR\xd6\xefK(Od\xa4\x80\x06}\xfbQ\xf8\x7f\xfb\x95\xff\x00\xeb\x9f\xf1M!]\xe6j\xf0\x89\xceD\xb7\xdb\xde\x9c\xb6\x89\n(8\xed\xdf\x18\x07\x8fz\xddb\xd4\x11\xefM\xb9\xb1\ne\xd6\xb9Z\x14s\x81\xea\rI[\x932u\xfek\xbau\xc1\x14\x10J\x8b\xa4\x10A>\x98=\xff\x00OZ\xf5\xd3KKL\xdec-\x0b\xf1\xfd\x15\x92\xbd\xd9\x1cd\x11\xf3\x93L/\xa6\xafkT\x97]\x10m\xcfJe\xaeV\xe8V\x00\x1e\xbc\x03\xc7\xce)\xdd\x9e\xef\x1e\xf1\x0f\xc4G\xdc\x9d\xa7j\xd2\xae\xe957\xa1\xba~Op\xdd\x8e\xff\x00W\xc6\xdf\xfb^\x1a\x19\x85J\x83u\x8eTR\x87P\x94n\xc6pHP\xcd\x03{\xce\xb0\x8bm},\xc7m3\x17\xfc{\\\xc0O\xb6pri\xc5\xc6\xe0\xc5\xb6\n\xe5I$!#\xb0\xe4\x93\xf6\x02\xa0uU\x9e5\x99p\xd9\x8d\xb8\x95%EkQ\xc9Q\xc8\xaf\xa1>\xa8\xe9\x8e<Yh6x=\\c\xf5\xa6\x1a\x99\xfd\xb7)\x08u\xdbK\xe8\x8a\xb3\x84\xbb\xbb\xbf\xc7\x18?\xde\xaac>\x89Q\xdb}\xa3\x96\xdcHRO\xb1\xa8\xbda\x1aZ\xa2\xa2C/0\xabB\nzm2@\xc7\x18\xcf\x03\x1f\xa9\xefL\x9a\xd5P Z\xa0)Q\xdfJ\x1dl\x84!\xb0\x15\xb7i\xdb\x8c\x92)\x83~\xa2\xbe\x8b\x1b\r9\xd0\xeb\xa9\xc5\x14\x84\xef\xdb\x8c\x0e\xfd\x8d%\x8d\xaf<D\x96\x99\xf2\xed\xbdE\x84\xe7\xaf\x9cd\xe3\xf9k\x9b\xeb(\xd4\xac@\x93\x1edx\xc8\xe7j$\xa8%D\x95\x01\xd8g\xd2\xb1\xdc\xde\xba\xe9\x9b\x9cu*\xe4\xec\xd6\xdd\xe4\xa1y\xc1\xc1\xe4`\x93\x8f\x91I\xefe^Q\\\x03\x91\x9a(\x9c\xb3\xdc\xa2x\xfb{\xf1w\xf4\xfa\xa8)\xdd\x8c\xe3\xf2\xac\x9a~\xcd\xe4\x90\x97\x1f\xaf\xd7\xdc\xe1^\xed\x9bq\xc0\x18\xc6O\xa5\x14QK$\xe8\xe4\xf8\xc5\xc9\xb7\\\x1e\x82W\x9d\xc1#=\xfe\xc0\x828\xf6\xad\xd6-9\x1a\xcc\x1cRV\xa7\x9epmR\xd41\xc7\xa0\x14Q@\xb9\xfd\x14\x9e\xb3\xa6\r\xc5\xe8\x8c\xbb\xc2\xda\t$\x11\xe9\xdcq\xf3\x9awf\xb4G\xb3D\xe8G\xdc\xac\x9d\xcbZ\xbb\xa8\xd1E\x06\x1dC\xa6\xfc\xf1\xe6\\\xf1]\x0e\x90#\x1d=\xd9\xcf\xe6)\x95\xc6\xdc\xc5\xca\x12\xa2\xc9\x04\xa1_q\xdd\'\xd4QE>\t\xd1\xa2\x14P\x96\x1c\xbb>\xa8\xa9VC;x\x1f\x1c\xe3=\xfe\xd5O\x0e+P\xa2\xb7\x1d\x84\xedm\xb1\x80(\xa2\x81u\xf7O\xc6\xbd\xa1\x05\xc5)\xa7\x91\xc2\\O<z\x11\xf7\x15\x86&\x8fJf\xb7&\xe3=\xe9\xeao\x1bR\xb1\x81\xc7`rNG\xb5\x14R\nZ(\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 | +) |
| 58 | + |
| 59 | +mdoc = mdoci.new( |
| 60 | + doctype="org.iso.18013.5.1.mDL", |
| 61 | + data=PID_DATA, |
| 62 | + devicekeyinfo=PKEY # TODO |
| 63 | +) |
| 64 | + |
| 65 | +mdoc |
| 66 | +mdoci.dump() |
| 67 | +mdoci.dumps() |
0 commit comments