eu-digital-identity-wallet / eudi-lib-jvm-sdjwt-kt

A library for issuing and verifying SD-JWT
Apache License 2.0
14 stars 4 forks source link

Add to Dsl option for desired digests (disclose + decoy digests) #203

Closed babisRoutis closed 3 weeks ago

babisRoutis commented 1 month ago

This PR is in response of #199 and focuses on the following:

Other changes:

Closes #199 Closes #205 Closes #206

babisRoutis commented 1 month ago

Same more complex examples

Defining digestNumberHint option for "structured" disclosed (nested) claims

sdJwt {
        iss("https://issuer.example.com")
        iat(1683000000)
        exp(1883000000)
        sub("6c5c0a49-b589-431d-bae7-219122a9ec2c")

        structured("address", digestNumberHint = 10) {
            sd {
                put("street_address", "Schulstr. 12")
                put("locality", "Schulpforta")
                put("region", "Sachsen-Anhalt")
                put("country", "DE")
            }
        }
    }

The above example will produce

{
    "iss": "https://issuer.example.com",
    "iat": 1683000000,
    "exp": 1883000000,
    "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
    "address": {
        "_sd": [
            "0xapmdBWcMC6Z_SxKn9VAEP_ku2DNb0Q08xWczrPBSk",
            "2X48W2OhUjmkIjsq4BypIY2jI_nJBC5KoLkB5CZUeWs",
            "4BoTiwm9ZuDuh7pHF0XVZky63NKPJOkB3cWj9wxrmyU",
            "CixEF-hGheuLvYWBpAPEEhZulcgW1xoevtEqF96NlKc",
            "GNz2mT9fweBg3dyF8WtI61ELS480vH23Wqd529_lR-U",
            "OByIaX6zhCYjygrha2u116eGO6IgSFQav5LnOhwi8vs",
            "Vy3vmO_3--tDpsILkPTaRq7VlkzZYY-dK1gPUiV9fUM",
            "nD3ma1nDu2D_aIBkpAO64NAdNROWFTziy5fstPD2_jY",
            "oteez1_IfVPrwpmlbWMTZhYf7JzxKT5Sf9q8pylotAs",
            "x_GqIpZcx9CjnlRNUmN4HvwdHyPZ2TxJgjte7twfV2M"
        ]
    },
    "_sd_alg": "sha-256"
}

Defining digestNumberHint option for "recursive" disclosed claims and at the top level

sdJwt(digestNumberHint = 2) {
        iss("https://issuer.example.com")
        iat(1683000000)
        exp(1883000000)
        sub("6c5c0a49-b589-431d-bae7-219122a9ec2c")

        recursive("address", digestNumberHint = 10) {
            sd {
                put("street_address", "Schulstr. 12")
                put("locality", "Schulpforta")
                put("region", "Sachsen-Anhalt")
                put("country", "DE")
            }
        }
    }

Result:

{
    "iss": "https://issuer.example.com",
    "iat": 1683000000,
    "exp": 1883000000,
    "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
    "_sd": [
        "GTzMXI7iL2EVt-4ivpqqYN9OKpDVpAFQ_c_SLkfPPjM",
        "e7zwyRO6zLPXneEEmUGb8K0yxshdpETy5F8yaQ8WBe4"
    ],
    "_sd_alg": "sha-256"
}

Also the disclosure of address will have decoys as follows

["...salt...","address",{"_sd":["5Ql6A2U-itB-4mCVMWL7TIiu7FGMB1Rtx27_UwropXg","6R86s6vDS1wm0R-pWTfo6W-hYL14j1i6IqO-Bpbsmtg","AgK5BuV3cp79EFRGRyQyMPwFjgFefeAOGxkTow4u1U0","D98GrLVDyF-9qFmZZfRZyqgDnB0lO_fcHqJfbcNVs80","LpiD4USIjWPdJhsytcAi144BSVGp0lHMcwmEVjG3jZo","Pqe_pbIbIvDF65XQFafPRELRdhO8T7JzkqbyqU6UgYc","SCsbzRH5c_dmvSdMAcwcKwhmhlZPBG01iWl5h39Pg8Y","X0TfOU7gvQKjXojLMQWKjyQBcHmby0e2Hzuzk7yqv2A","jvl_LH6KMog8GfBcxwdhRHbA_KoixVa5mjc7WIvYR38","nsFkUtnmob4IY_BkUJi98NEwsDS-iBbTs9EdFeEsy9s"]}]