diff --git a/README.md b/README.md index 35626f5..33f66ab 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,13 @@ according to ISO 18013-5. ## Setup ```` -pip install pymdlmdoc +pip install pymdoccbor ```` or ```` -pip install git+https://github.com/peppelinux/pyMDL-MDOC.git +pip install git+https://github.com/peppelinux/pyMDOC-CBOR.git ```` ## Usage @@ -45,6 +45,8 @@ pip install git+https://github.com/peppelinux/pyMDL-MDOC.git The method `.new()` gets the user attributes, devicekeyinfo and doctype. ```` +import os + from pymdoccbor.mdoc.issuer import MdocCborIssuer PKEY = { @@ -56,12 +58,17 @@ PKEY = { } PID_DATA = { - "eu.europa.ec.eudiw.pid.1": { - "family_name": "Raffaello", - "given_name": "Mascetti", - "birth_date": "1922-03-13" - } + "eu.europa.ec.eudiw.pid.1": { + "family_name": "Raffaello", + "given_name": "Mascetti", + "birth_date": "1922-03-13", + "birth_place": "Rome", + "birth_country": "IT" + }, + "eu.europa.ec.eudiw.pid.it.1": { + "tax_id_code": "TINIT-XXXXXXXXXXXXXXX" } +} mdoci = MdocCborIssuer( private_key=PKEY @@ -76,14 +83,11 @@ mdoc = mdoci.new( mdoc >> returns a python dictionay -mdoc.dump() ->> returns mdoc MSO bytes - mdoci.dump() >> returns mdoc bytes mdoci.dumps() ->> returns AF Binary mdoc string representation +>> returns AF Binary string representation ```` ### Issue an MSO alone diff --git a/pymdoccbor/__init__.py b/pymdoccbor/__init__.py index 6b27eee..86716a7 100644 --- a/pymdoccbor/__init__.py +++ b/pymdoccbor/__init__.py @@ -1 +1 @@ -__version__ = "0.5.4" +__version__ = "0.5.5" diff --git a/pymdoccbor/mdoc/issuer.py b/pymdoccbor/mdoc/issuer.py index 9701454..bb86e41 100644 --- a/pymdoccbor/mdoc/issuer.py +++ b/pymdoccbor/mdoc/issuer.py @@ -43,7 +43,7 @@ def new( # TODO: for now just a single document, it would be trivial having # also multiple but for now I don't have use cases for this - res = { + self.signed = { 'version': self.version, 'documents': [ { @@ -57,15 +57,14 @@ def new( }, "issuerAuth": mso.encode() }, - 'deviceSigned': { - # TODO - } + # this is required during the presentation. + # 'deviceSigned': { + # # TODO + # } } ], 'status': self.status } - - self.signed = res return self.signed def dump(self): diff --git a/pymdoccbor/mdoc/verifier.py b/pymdoccbor/mdoc/verifier.py index 4eea8df..20862c5 100644 --- a/pymdoccbor/mdoc/verifier.py +++ b/pymdoccbor/mdoc/verifier.py @@ -65,13 +65,14 @@ def __init__(self): self.documents: List[MobileDocument] = [] self.documents_invalid: list = [] + def load(self, data: bytes): + data = binascii.hexlify(data) + return self.loads(data) + def loads(self, data: str): """ data is a AF BINARY """ - if isinstance(data, bytes): - data = binascii.hexlify(data) - self.data_as_bytes = binascii.unhexlify(data) self.data_as_cbor_dict = cbor2.loads(self.data_as_bytes) diff --git a/pymdoccbor/mso/issuer.py b/pymdoccbor/mso/issuer.py index 58fd24c..3fc33e9 100644 --- a/pymdoccbor/mso/issuer.py +++ b/pymdoccbor/mso/issuer.py @@ -64,7 +64,12 @@ def __init__( for k, v in shuffle_dict(values).items(): _rnd_salt = secrets.token_bytes(settings.DIGEST_SALT_LENGTH) - + + _value_cbortag = settings.CBORTAGS_ATTR_MAP.get(k, None) + + if _value_cbortag: + v = cbor2.CBORTag(_value_cbortag, value=v) + self.disclosure_map[ns][digest_cnt] = { 'digestID': digest_cnt, 'random': _rnd_salt, diff --git a/pymdoccbor/settings.py b/pymdoccbor/settings.py index 8e0d983..8dbc6d0 100644 --- a/pymdoccbor/settings.py +++ b/pymdoccbor/settings.py @@ -20,7 +20,6 @@ DIGEST_SALT_LENGTH = 32 - X509_DER_CERT = os.getenv('X509_DER_CERT', None) # OR @@ -44,5 +43,7 @@ 'X509_SAN_URL', u"https://credential-issuer.oidc-federation.online" ) - +CBORTAGS_ATTR_MAP = { + "birth_date": 1004 +} diff --git a/pymdoccbor/tests/test_01_mdoc_parser.py b/pymdoccbor/tests/test_01_mdoc_parser.py index bb52ce8..5d89b70 100644 --- a/pymdoccbor/tests/test_01_mdoc_parser.py +++ b/pymdoccbor/tests/test_01_mdoc_parser.py @@ -23,7 +23,7 @@ def test_parse_mdoc_af_binary(): # testing from export re-import mdoc2 = MdocCbor() - mdoc2.loads(mdoc.data_as_bytes) + mdoc2.load(mdoc.data_as_bytes) mdoc2.verify() for i in mdoc.documents: diff --git a/pymdoccbor/tests/test_02_mdoc_issuer.py b/pymdoccbor/tests/test_02_mdoc_issuer.py index 8c232f4..b314a71 100644 --- a/pymdoccbor/tests/test_02_mdoc_issuer.py +++ b/pymdoccbor/tests/test_02_mdoc_issuer.py @@ -47,7 +47,7 @@ def test_mdoc_issuer(): mdocp = MdocCbor() aa = cbor2.dumps(mdoc) - mdocp.loads(aa) + mdocp.load(aa) mdocp.verify() mdoci.dump()