Skip to content

Commit f516b28

Browse files
committed
feat: added disclosure map
1 parent 456deea commit f516b28

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

pymdoccbor/mdoc/verifier.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def __init__(self) -> None:
104104

105105
self.documents: List[MobileDocument] = []
106106
self.documents_invalid: list = []
107+
self.disclosure_map: dict = {}
107108

108109
def loads(self, data: str) -> None:
109110
"""
@@ -134,6 +135,33 @@ def dumps(self) -> bytes:
134135
@property
135136
def data_as_string(self) -> str:
136137
return self.dumps().decode()
138+
139+
def _deode_claims(self, claims: list[dict]) -> dict:
140+
decoded_claims = {}
141+
142+
for claim in claims:
143+
decoded = cbor2.loads(claim.value)
144+
145+
if isinstance(decoded['elementValue'], cbor2.CBORTag):
146+
decoded_claims[decoded['elementIdentifier']] = decoded['elementValue'].value
147+
elif isinstance(decoded['elementValue'], list):
148+
claims_list = []
149+
150+
for element in decoded['elementValue']:
151+
claims_dict = {}
152+
for key, value in element.items():
153+
if isinstance(value, cbor2.CBORTag):
154+
claims_dict[key] = value.value
155+
else:
156+
claims_dict[key] = value
157+
claims_list.append(claims_dict)
158+
159+
decoded_claims[decoded['elementIdentifier']] = claims_list
160+
else:
161+
decoded_claims[decoded['elementIdentifier']] = decoded['elementValue']
162+
163+
return decoded_claims
164+
137165

138166
def verify(self) -> bool:
139167
""""
@@ -160,6 +188,9 @@ def verify(self) -> bool:
160188
else:
161189
self.documents_invalid.append(mso)
162190

191+
for namespace, claims in mso.issuersigned.namespaces.items():
192+
self.disclosure_map[namespace] = self._deode_claims(claims)
193+
163194
except Exception as e:
164195
logger.error(
165196
f"COSE Sign1 validation failed to the document number #{doc_cnt}. "

0 commit comments

Comments
 (0)