@@ -9,6 +9,7 @@ import java.math.BigInteger
99import java.nio.ByteBuffer
1010import java.security.MessageDigest
1111import android.util.Base64
12+ import android.util.Log
1213import com.credman.cmwallet.createJWTES256
1314import com.credman.cmwallet.jwsDeserialization
1415import com.credman.cmwallet.loadECPrivateKey
@@ -41,14 +42,17 @@ class SdJwt(
4142 }
4243
4344 private fun addDisclosuresToPresentation (sd : JSONObject , ret : MutableList <String >) {
45+ Log .d(" helenqinn" , " SD to add: $sd " )
4446 for (key in sd.keys()) {
4547 if (" _sd" == key) {
4648 val digest = sd.getString(" _sd" )
4749 val disclosure = verifiedResult.digestDisclosureMap[digest]!!
4850 ret.add(disclosure)
51+ Log .d(" helenqinn" , " ret: $ret " )
4952 } else {
5053 val recursiveSd = sd.get(key)
5154 if (recursiveSd is JSONObject ) {
55+ Log .d(" helenqinn" , " addDisclosuresToPresentation: $recursiveSd " )
5256 addDisclosuresToPresentation(recursiveSd, ret)
5357 } else {
5458 throw IllegalStateException (" Unexpected type ${recursiveSd::class .java} " )
@@ -76,18 +80,29 @@ class SdJwt(
7680 val claim = claimSet.getJSONObject(claimIdx)!!
7781 val path = claim.getJSONArray(" path" )
7882 var sd = verifiedResult.sdMap
83+ val sds = mutableListOf<JSONObject >()
7984 for (pathIdx in 0 .. < path.length()) {
8085 // TODO: handle path variants (null)
8186 val currPath = path.getString(pathIdx)
8287 if (sd.has(currPath)) {
8388 sd = sd.getJSONObject(currPath)
89+ sds.add(JSONObject (sd.toString()))
8490 } else {
8591 claimSetMatched = false
8692 break
8793 }
8894 }
8995 if (claimSetMatched) {
9096 addDisclosuresToPresentation(sd, ret)
97+ // TODO: improve this code
98+ if (sds.size > 1 ) {
99+ for (k in 0 .. < sds.size - 1 ) {
100+ val currSd = sds[k]
101+ val digest = currSd.getString(" _sd" )
102+ val disclosure = verifiedResult.digestDisclosureMap[digest]!!
103+ ret.add(disclosure)
104+ }
105+ }
91106 } else {
92107 break
93108 }
0 commit comments