@@ -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