diff --git a/TestVectors/ecdsa-sd-2023/SDKeyMaterial.json b/TestVectors/ecdsa-sd-2023/SDKeyMaterial.json new file mode 100644 index 0000000..c3b6dde --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/SDKeyMaterial.json @@ -0,0 +1,11 @@ +{ + "baseKeyPair": { + "publicKeyMultibase": "zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP", + "secretKeyMultibase": "z42twTcNeSYcnqg1FLuSFs2bsGH3ZqbRHFmvS9XMsYhjxvHN" + }, + "proofKeyPair": { + "publicKeyMultibase": "zDnaeTHfhmSaQKBc7CmdL3K7oYg3D6SC7yowe2eBeVd2DH32r", + "secretKeyMultibase": "z42tqvNGyzyXRzotAYn43UhcFtzDUVdxJ7461fwrfhBPLmfY" + }, + "hmacKeyString": "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addBaseDocCanon.json b/TestVectors/ecdsa-sd-2023/addBaseDocCanon.json new file mode 100644 index 0000000..8846903 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addBaseDocCanon.json @@ -0,0 +1,28 @@ +[ + "_:c14n0 \"CompFoil170\" .\n", + "_:c14n0 \"Wailea\" .\n", + "_:c14n0 \"2022\"^^ .\n", + "_:c14n1 \"Lahaina\" .\n", + "_:c14n1 \"7.8E0\"^^ .\n", + "_:c14n1 \"2023\"^^ .\n", + "_:c14n2 \"Kanaha Custom\" .\n", + "_:c14n2 \"Wailea\" .\n", + "_:c14n2 \"2019\"^^ .\n", + "_:c14n3 \"Lahaina\" .\n", + "_:c14n3 \"7\"^^ .\n", + "_:c14n3 \"2020\"^^ .\n", + "_:c14n4 \"Kihei\" .\n", + "_:c14n4 \"5.5E0\"^^ .\n", + "_:c14n4 \"2023\"^^ .\n", + "_:c14n5 \"Lahaina\" .\n", + "_:c14n5 \"6.1E0\"^^ .\n", + "_:c14n5 \"2023\"^^ .\n", + "_:c14n6 .\n", + "_:c14n6 _:c14n0 .\n", + "_:c14n6 _:c14n2 .\n", + "_:c14n6 \"Earth101\" .\n", + "_:c14n6 _:c14n1 .\n", + "_:c14n6 _:c14n3 .\n", + "_:c14n6 _:c14n4 .\n", + "_:c14n6 _:c14n5 .\n" +] \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addBaseDocHMACCanon.json b/TestVectors/ecdsa-sd-2023/addBaseDocHMACCanon.json new file mode 100644 index 0000000..cacc1cc --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addBaseDocHMACCanon.json @@ -0,0 +1,28 @@ +[ + "_:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg \"Lahaina\" .\n", + "_:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg \"7.8E0\"^^ .\n", + "_:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg \"2023\"^^ .\n", + "_:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 \"CompFoil170\" .\n", + "_:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 \"Wailea\" .\n", + "_:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 \"2022\"^^ .\n", + "_:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 \"Lahaina\" .\n", + "_:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 \"6.1E0\"^^ .\n", + "_:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 \"2023\"^^ .\n", + "_:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw \"Kanaha Custom\" .\n", + "_:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw \"Wailea\" .\n", + "_:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw \"2019\"^^ .\n", + "_:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ \"Kihei\" .\n", + "_:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ \"5.5E0\"^^ .\n", + "_:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ \"2023\"^^ .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk \"Earth101\" .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ .\n", + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc .\n", + "_:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc \"Lahaina\" .\n", + "_:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc \"7\"^^ .\n", + "_:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc \"2020\"^^ .\n" +] \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addBaseTransform.json b/TestVectors/ecdsa-sd-2023/addBaseTransform.json new file mode 100644 index 0000000..5ed1599 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addBaseTransform.json @@ -0,0 +1,123 @@ +{ + "mandatoryPointers": [ + "/sailNumber", + "/sails/1", + "/boards/0/year", + "/sails/2" + ], + "mandatory": { + "dataType": "Map", + "value": [ + [ + 5, + "_:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 \"2022\"^^ .\n" + ], + [ + 6, + "_:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 \"Lahaina\" .\n" + ], + [ + 7, + "_:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 \"6.1E0\"^^ .\n" + ], + [ + 8, + "_:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 \"2023\"^^ .\n" + ], + [ + 15, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk .\n" + ], + [ + 16, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 .\n" + ], + [ + 18, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk \"Earth101\" .\n" + ], + [ + 20, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0 .\n" + ], + [ + 22, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc .\n" + ], + [ + 23, + "_:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc \"Lahaina\" .\n" + ], + [ + 24, + "_:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc \"7\"^^ .\n" + ], + [ + 25, + "_:ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc \"2020\"^^ .\n" + ] + ] + }, + "nonMandatory": { + "dataType": "Map", + "value": [ + [ + 0, + "_:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg \"Lahaina\" .\n" + ], + [ + 1, + "_:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg \"7.8E0\"^^ .\n" + ], + [ + 2, + "_:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg \"2023\"^^ .\n" + ], + [ + 3, + "_:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 \"CompFoil170\" .\n" + ], + [ + 4, + "_:u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38 \"Wailea\" .\n" + ], + [ + 9, + "_:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw \"Kanaha Custom\" .\n" + ], + [ + 10, + "_:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw \"Wailea\" .\n" + ], + [ + 11, + "_:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw \"2019\"^^ .\n" + ], + [ + 12, + "_:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ \"Kihei\" .\n" + ], + [ + 13, + "_:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ \"5.5E0\"^^ .\n" + ], + [ + 14, + "_:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ \"2023\"^^ .\n" + ], + [ + 17, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw .\n" + ], + [ + 19, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:u3Lv2QpFgo-YAegc1cQQKWJFW2sEjQF6FfuZ0VEoMKHg .\n" + ], + [ + 21, + "_:uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk _:ufUWJRHQ9j1jmUKHLL8k6m0CZ8g4v73gOpaM5kL3ZACQ .\n" + ] + ] + }, + "hmacKeyString": "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addHashData.json b/TestVectors/ecdsa-sd-2023/addHashData.json new file mode 100644 index 0000000..3bddb0d --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addHashData.json @@ -0,0 +1,4 @@ +{ + "proofHash": "ac14ce7c9c545ea6147cfce51db41d20b483c6890150bfbfcf0fd865436b02b3", + "mandatoryHash": "fa6da5724940bee8864209827c06340496ef7a0b22061d6df3bcb5ab49262fe7" +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addPointerValues.json b/TestVectors/ecdsa-sd-2023/addPointerValues.json new file mode 100644 index 0000000..276b357 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addPointerValues.json @@ -0,0 +1,26 @@ +[ + { + "pointer": "/sailNumber", + "value": "Earth101" + }, + { + "pointer": "/sails/1", + "value": { + "size": 6.1, + "sailName": "Lahaina", + "year": 2023 + } + }, + { + "pointer": "/boards/0/year", + "value": 2022 + }, + { + "pointer": "/sails/2", + "value": { + "size": 7, + "sailName": "Lahaina", + "year": 2020 + } + } +] \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addProofConfig.json b/TestVectors/ecdsa-sd-2023/addProofConfig.json new file mode 100644 index 0000000..c37c08b --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addProofConfig.json @@ -0,0 +1,13 @@ +{ + "type": "DataIntegrityProof", + "cryptosuite": "ecdsa-sd-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP#zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP", + "proofPurpose": "assertionMethod", + "@context": [ + "https://www.w3.org/ns/credentials/v2", + { + "@vocab": "https://windsurf.grotto-networking.com/selective#" + } + ] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addProofConfigCanon.txt b/TestVectors/ecdsa-sd-2023/addProofConfigCanon.txt new file mode 100644 index 0000000..58f2cd4 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addProofConfigCanon.txt @@ -0,0 +1,5 @@ +_:c14n0 "2023-08-15T23:36:38Z"^^ . +_:c14n0 . +_:c14n0 "ecdsa-sd-2023" . +_:c14n0 . +_:c14n0 . diff --git a/TestVectors/ecdsa-sd-2023/addRawBaseSignatureInfo.json b/TestVectors/ecdsa-sd-2023/addRawBaseSignatureInfo.json new file mode 100644 index 0000000..502db02 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addRawBaseSignatureInfo.json @@ -0,0 +1,26 @@ +{ + "baseSignature": "5a26e45631504cf42f445b751f01677d5c4b33d89b90d6750429103a8c7ca54a81ca365079d96772920a35e561ef663882fbd4e89d4d10ccab0ce78c5f7d9103", + "publicKey": "zDnaeTHfhmSaQKBc7CmdL3K7oYg3D6SC7yowe2eBeVd2DH32r", + "signatures": [ + "29560a336e740c370d58e610a549980b567935984947089ef2f5547aff78406b2df375a1a16eff50ce8950bb0a8cd5478f1665650ca8bcde31c3533f9a19fa4c", + "b2a312833d0479a3ded079a8e5237524d6660a3899f8234907849c9b22b8eacee10e8b4d66e187c4a19a0050b8dced05c5c29e502f7aabfcfd3c6785e42dd5a5", + "99ea0453c235673c45c91f90331c284a4a911bd13cfc2692ae11fc4c3dadfad577d872800b884990a97ac47bb3e972f61be574726e9dfeb5a8ce386699568c8d", + "6d030c724a5c300128d79582e82f0ca376c2116146b4e4e4331343f8b24c75f9024a8bc1ed19c247b497ce4e7ed1856282d27917383bd400286f9ca0d5634d93", + "a501e56111a551592ff965f53a3258275f4ec3b8a9bd5c14be6f744a7dc88cd44bbb2f69af90c79b7c1595530f5692ea8d2f84f3f8c90de255e696346df2bf03", + "3bf1e3d2fc6cb89673a551ad82830a2b666518abe12d7dffbd40af74bf8c4e5b3356bda20b75c9a426ce73c07f5bf3a7f9cb1a2cfcd44af9520ed35e73565593", + "766d87b78b2ffde737b351d1a9eba5fbec841b1e12ae9c3235045d2dae592b224382aaf887e12d54dcdcf89f95965bcaac737cc012ad52a6aba88e0da67af1ed", + "39130b5d8cf7979f4ecdced20e4d9e8fb725adeafd067e9e6815101bbef702a439e9b73ea065de7a67a4c1908d1e314b38448da0dabba9eb4ef0545b8851dbe0", + "5bea2d48556550f166835d7d9f74de484eeea798414b7e00a8fd93194400e690c6c8e4deb6b7fcaaaddb5a3d65a42bb567ac84649950ea7acb882a1a3558692f", + "d705bf1e1b133d47d496a317e9932c2de9bc85b59a15efeb643a4fa7934dd36bcc1c89c38ced469f406b5d4c9500c9d36377c6ac38ecbb2dac1a033347e6e8d7", + "bce1925c7e75791a025ad57d2e5a590f5d22c7422eb950a76ade5f47153b86a1acd00cccd3d906b26b833118e8c29e75c6188527788c6a320e3a159484fc470a", + "bd25bdabcf112d9f6559d83665e2be71ff9c16553f3e3ab1d5b515017307437b5fe097e3d8850dbabcb71337cedec8f75585fb743be5113b53d07627debf834a", + "e7dd74deab1b23d508cdc537604a5a070a678809f28de9b0ffb11a3cdddfdfbb221fbf51c2897ab5fef6e9050f5226ab3729a085265e5ef21b8e9c6a94acfe50", + "43093442ebc81c551cac0647afedeb62f7d9cdacf0cd82500a9398738517dcf70507156dc88ed4f4f89e50e362f3710b155037d60a26c4b70262e9fbe7dd6b7d" + ], + "mandatoryPointers": [ + "/sailNumber", + "/sails/1", + "/boards/0/year", + "/sails/2" + ] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/addSignedSDBase.json b/TestVectors/ecdsa-sd-2023/addSignedSDBase.json new file mode 100644 index 0000000..81eb574 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/addSignedSDBase.json @@ -0,0 +1,54 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + { + "@vocab": "https://windsurf.grotto-networking.com/selective#" + } + ], + "type": [ + "VerifiableCredential" + ], + "sailNumber": "Earth101", + "sails": [ + { + "size": 5.5, + "sailName": "Kihei", + "year": 2023 + }, + { + "size": 6.1, + "sailName": "Lahaina", + "year": 2023 + }, + { + "size": 7, + "sailName": "Lahaina", + "year": 2020 + }, + { + "size": 7.8, + "sailName": "Lahaina", + "year": 2023 + } + ], + "boards": [ + { + "boardName": "CompFoil170", + "brand": "Wailea", + "year": 2022 + }, + { + "boardName": "Kanaha Custom", + "brand": "Wailea", + "year": 2019 + } + ], + "proof": { + "type": "DataIntegrityProof", + "cryptosuite": "ecdsa-sd-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP#zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhdhAWEBaJuRWMVBM9C9EW3UfAWd9XEsz2JuQ1nUEKRA6jHylSoHKNlB52Wdykgo15WHvZjiC-9TonU0QzKsM54xffZED2EBYI4AkAipyzhm2PxbjPgEqUpJDsbCEdhPJ-zJdqtVEOrRMM4uT2EBYIAARIjNEVWZ3iJmqu8zd7v8AESIzRFVmd4iZqrvM3e7_jthAWEApVgozbnQMNw1Y5hClSZgLVnk1mElHCJ7y9VR6_3hAay3zdaGhbv9QzolQuwqM1UePFmVlDKi83jHDUz-aGfpM2EBYQLKjEoM9BHmj3tB5qOUjdSTWZgo4mfgjSQeEnJsiuOrO4Q6LTWbhh8ShmgBQuNztBcXCnlAveqv8_TxnheQt1aXYQFhAmeoEU8I1ZzxFyR-QMxwoSkqRG9E8_CaSrhH8TD2t-tV32HKAC4hJkKl6xHuz6XL2G-V0cm6d_rWozjhmmVaMjdhAWEBtAwxySlwwASjXlYLoLwyjdsIRYUa05OQzE0P4skx1-QJKi8HtGcJHtJfOTn7RhWKC0nkXODvUAChvnKDVY02T2EBYQKUB5WERpVFZL_ll9ToyWCdfTsO4qb1cFL5vdEp9yIzUS7svaa-Qx5t8FZVTD1aS6o0vhPP4yQ3iVeaWNG3yvwPYQFhAO_Hj0vxsuJZzpVGtgoMKK2ZlGKvhLX3_vUCvdL-MTlszVr2iC3XJpCbOc8B_W_On-csaLPzUSvlSDtNec1ZVk9hAWEB2bYe3iy_95zezUdGp66X77IQbHhKunDI1BF0trlkrIkOCqviH4S1U3Nz4n5WWW8qsc3zAEq1Spquojg2mevHt2EBYQDkTC12M95efTs3O0g5Nno-3Ja3q_QZ-nmgVEBu-9wKkOem3PqBl3npnpMGQjR4xSzhEjaDau6nrTvBUW4hR2-DYQFhAW-otSFVlUPFmg119n3TeSE7up5hBS34AqP2TGUQA5pDGyOTetrf8qq3bWj1lpCu1Z6yEZJlQ6nrLiCoaNVhpL9hAWEDXBb8eGxM9R9SWoxfpkywt6byFtZoV7-tkOk-nk03Ta8wcicOM7UafQGtdTJUAydNjd8asOOy7LawaAzNH5ujX2EBYQLzhklx-dXkaAlrVfS5aWQ9dIsdCLrlQp2reX0cVO4ahrNAMzNPZBrJrgzEY6MKedcYYhSd4jGoyDjoVlIT8RwrYQFhAvSW9q88RLZ9lWdg2ZeK-cf-cFlU_Pjqx1bUVAXMHQ3tf4Jfj2IUNury3EzfO3sj3VYX7dDvlETtT0HYn3r-DSthAWEDn3XTeqxsj1QjNxTdgSloHCmeICfKN6bD_sRo83d_fuyIfv1HCiXq1_vbpBQ9SJqs3KaCFJl5e8huOnGqUrP5Q2EBYQEMJNELryBxVHKwGR6_t62L32c2s8M2CUAqTmHOFF9z3BQcVbciO1PT4nlDjYvNxCxVQN9YKJsS3AmLp--fda32Eay9zYWlsTnVtYmVyaC9zYWlscy8xbi9ib2FyZHMvMC95ZWFyaC9zYWlscy8y" + } +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedAdjMandatoryIndexes.json b/TestVectors/ecdsa-sd-2023/derivedAdjMandatoryIndexes.json new file mode 100644 index 0000000..88112b3 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedAdjMandatoryIndexes.json @@ -0,0 +1,3 @@ +{ + "adjMandatoryIndexes":[2, 3, 4, 5, 9, 10, 12, 13, 14, 15, 16, 17] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedAdjSignatures.json b/TestVectors/ecdsa-sd-2023/derivedAdjSignatures.json new file mode 100644 index 0000000..634e8b9 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedAdjSignatures.json @@ -0,0 +1,10 @@ +{ + "adjSignatureIndexes":[3, 4, 5, 6, 7, 11], + "filteredSignatures":[ + "6d030c724a5c300128d79582e82f0ca376c2116146b4e4e4331343f8b24c75f9024a8bc1ed19c247b497ce4e7ed1856282d27917383bd400286f9ca0d5634d93", + "a501e56111a551592ff965f53a3258275f4ec3b8a9bd5c14be6f744a7dc88cd44bbb2f69af90c79b7c1595530f5692ea8d2f84f3f8c90de255e696346df2bf03", + "3bf1e3d2fc6cb89673a551ad82830a2b666518abe12d7dffbd40af74bf8c4e5b3356bda20b75c9a426ce73c07f5bf3a7f9cb1a2cfcd44af9520ed35e73565593", + "766d87b78b2ffde737b351d1a9eba5fbec841b1e12ae9c3235045d2dae592b224382aaf887e12d54dcdcf89f95965bcaac737cc012ad52a6aba88e0da67af1ed", + "39130b5d8cf7979f4ecdced20e4d9e8fb725adeafd067e9e6815101bbef702a439e9b73ea065de7a67a4c1908d1e314b38448da0dabba9eb4ef0545b8851dbe0", + "bd25bdabcf112d9f6559d83665e2be71ff9c16553f3e3ab1d5b515017307437b5fe097e3d8850dbabcb71337cedec8f75585fb743be5113b53d07627debf834a"] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedDisclosureData.json b/TestVectors/ecdsa-sd-2023/derivedDisclosureData.json new file mode 100644 index 0000000..1027e43 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedDisclosureData.json @@ -0,0 +1,23 @@ +{ + "baseSignature": "5a26e45631504cf42f445b751f01677d5c4b33d89b90d6750429103a8c7ca54a81ca365079d96772920a35e561ef663882fbd4e89d4d10ccab0ce78c5f7d9103", + "publicKey": "zDnaeTHfhmSaQKBc7CmdL3K7oYg3D6SC7yowe2eBeVd2DH32r", + "signatures": [ + "6d030c724a5c300128d79582e82f0ca376c2116146b4e4e4331343f8b24c75f9024a8bc1ed19c247b497ce4e7ed1856282d27917383bd400286f9ca0d5634d93", + "a501e56111a551592ff965f53a3258275f4ec3b8a9bd5c14be6f744a7dc88cd44bbb2f69af90c79b7c1595530f5692ea8d2f84f3f8c90de255e696346df2bf03", + "3bf1e3d2fc6cb89673a551ad82830a2b666518abe12d7dffbd40af74bf8c4e5b3356bda20b75c9a426ce73c07f5bf3a7f9cb1a2cfcd44af9520ed35e73565593", + "766d87b78b2ffde737b351d1a9eba5fbec841b1e12ae9c3235045d2dae592b224382aaf887e12d54dcdcf89f95965bcaac737cc012ad52a6aba88e0da67af1ed", + "39130b5d8cf7979f4ecdced20e4d9e8fb725adeafd067e9e6815101bbef702a439e9b73ea065de7a67a4c1908d1e314b38448da0dabba9eb4ef0545b8851dbe0", + "bd25bdabcf112d9f6559d83665e2be71ff9c16553f3e3ab1d5b515017307437b5fe097e3d8850dbabcb71337cedec8f75585fb743be5113b53d07627debf834a" + ], + "labelMap": { + "dataType": "Map", + "value": [ + ["c14n0", "u4YIOZn1MHES1Z4Ij2hWZG3R4dEYBqg5fHTyDEvYhC38"], + ["c14n1", "uk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDk"], + ["c14n2", "uVkUuBrlOaELGVQWJD4M_qW5bcKEHWGNbOrPA_qAOKKw"], + ["c14n3", "ukR2991GJuy_Tkjem_x7pLVpS4C4GkZAcuGtiPhBfSSc"], + ["c14n4", "uQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U0"] + ] + }, + "mandatoryIndexes": [2, 3, 4, 5, 9, 10, 12, 13, 14, 15, 16, 17] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedGroupIndexes.json b/TestVectors/ecdsa-sd-2023/derivedGroupIndexes.json new file mode 100644 index 0000000..d5ddc52 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedGroupIndexes.json @@ -0,0 +1,6 @@ +{ + "combinedIndexes": [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 20, 22, 23, 24, 25 ], + "mandatoryIndexes": [ 5, 6, 7, 8, 15, 16, 18, 20, 22, 23, 24, 25 ], + "nonMandatoryIndexes": [ 0, 1, 2, 3, 4, 9, 10, 11, 12, 13, 14, 17, 19, 21 ], + "selectiveIndexes": [ 3, 4, 5, 9, 10, 11, 15, 16, 17 ] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedRecoveredBaseData.json b/TestVectors/ecdsa-sd-2023/derivedRecoveredBaseData.json new file mode 100644 index 0000000..b1dab80 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedRecoveredBaseData.json @@ -0,0 +1,27 @@ +{ + "baseSignature": "5a26e45631504cf42f445b751f01677d5c4b33d89b90d6750429103a8c7ca54a81ca365079d96772920a35e561ef663882fbd4e89d4d10ccab0ce78c5f7d9103", + "proofPublicKey": "zDnaeTHfhmSaQKBc7CmdL3K7oYg3D6SC7yowe2eBeVd2DH32r", + "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "signatures": [ + "29560a336e740c370d58e610a549980b567935984947089ef2f5547aff78406b2df375a1a16eff50ce8950bb0a8cd5478f1665650ca8bcde31c3533f9a19fa4c", + "b2a312833d0479a3ded079a8e5237524d6660a3899f8234907849c9b22b8eacee10e8b4d66e187c4a19a0050b8dced05c5c29e502f7aabfcfd3c6785e42dd5a5", + "99ea0453c235673c45c91f90331c284a4a911bd13cfc2692ae11fc4c3dadfad577d872800b884990a97ac47bb3e972f61be574726e9dfeb5a8ce386699568c8d", + "6d030c724a5c300128d79582e82f0ca376c2116146b4e4e4331343f8b24c75f9024a8bc1ed19c247b497ce4e7ed1856282d27917383bd400286f9ca0d5634d93", + "a501e56111a551592ff965f53a3258275f4ec3b8a9bd5c14be6f744a7dc88cd44bbb2f69af90c79b7c1595530f5692ea8d2f84f3f8c90de255e696346df2bf03", + "3bf1e3d2fc6cb89673a551ad82830a2b666518abe12d7dffbd40af74bf8c4e5b3356bda20b75c9a426ce73c07f5bf3a7f9cb1a2cfcd44af9520ed35e73565593", + "766d87b78b2ffde737b351d1a9eba5fbec841b1e12ae9c3235045d2dae592b224382aaf887e12d54dcdcf89f95965bcaac737cc012ad52a6aba88e0da67af1ed", + "39130b5d8cf7979f4ecdced20e4d9e8fb725adeafd067e9e6815101bbef702a439e9b73ea065de7a67a4c1908d1e314b38448da0dabba9eb4ef0545b8851dbe0", + "5bea2d48556550f166835d7d9f74de484eeea798414b7e00a8fd93194400e690c6c8e4deb6b7fcaaaddb5a3d65a42bb567ac84649950ea7acb882a1a3558692f", + "d705bf1e1b133d47d496a317e9932c2de9bc85b59a15efeb643a4fa7934dd36bcc1c89c38ced469f406b5d4c9500c9d36377c6ac38ecbb2dac1a033347e6e8d7", + "bce1925c7e75791a025ad57d2e5a590f5d22c7422eb950a76ade5f47153b86a1acd00cccd3d906b26b833118e8c29e75c6188527788c6a320e3a159484fc470a", + "bd25bdabcf112d9f6559d83665e2be71ff9c16553f3e3ab1d5b515017307437b5fe097e3d8850dbabcb71337cedec8f75585fb743be5113b53d07627debf834a", + "e7dd74deab1b23d508cdc537604a5a070a678809f28de9b0ffb11a3cdddfdfbb221fbf51c2897ab5fef6e9050f5226ab3729a085265e5ef21b8e9c6a94acfe50", + "43093442ebc81c551cac0647afedeb62f7d9cdacf0cd82500a9398738517dcf70507156dc88ed4f4f89e50e362f3710b155037d60a26c4b70262e9fbe7dd6b7d" + ], + "mandatoryPointers": [ + "/sailNumber", + "/sails/1", + "/boards/0/year", + "/sails/2" + ] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedRevealDocument.json b/TestVectors/ecdsa-sd-2023/derivedRevealDocument.json new file mode 100644 index 0000000..3a4c4d3 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedRevealDocument.json @@ -0,0 +1,44 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + { + "@vocab": "https://windsurf.grotto-networking.com/selective#" + } + ], + "type": [ + "VerifiableCredential" + ], + "sailNumber": "Earth101", + "sails": [ + { + "size": 6.1, + "sailName": "Lahaina", + "year": 2023 + }, + { + "size": 7, + "sailName": "Lahaina", + "year": 2020 + } + ], + "boards": [ + { + "year": 2022, + "boardName": "CompFoil170", + "brand": "Wailea" + }, + { + "boardName": "Kanaha Custom", + "brand": "Wailea", + "year": 2019 + } + ], + "proof": { + "type": "DataIntegrityProof", + "cryptosuite": "ecdsa-sd-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP#zDnaepBuvsQ8cpsWrVKw8fbpGpvPeNSjVPTWoq6cRqaYzBKVP", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0BhVhAWibkVjFQTPQvRFt1HwFnfVxLM9ibkNZ1BCkQOox8pUqByjZQedlncpIKNeVh72Y4gvvU6J1NEMyrDOeMX32RA1gjgCQCKnLOGbY_FuM-ASpSkkOxsIR2E8n7Ml2q1UQ6tEwzi5OGWEBtAwxySlwwASjXlYLoLwyjdsIRYUa05OQzE0P4skx1-QJKi8HtGcJHtJfOTn7RhWKC0nkXODvUAChvnKDVY02TWEClAeVhEaVRWS_5ZfU6MlgnX07DuKm9XBS-b3RKfciM1Eu7L2mvkMebfBWVUw9WkuqNL4Tz-MkN4lXmljRt8r8DWEA78ePS_Gy4lnOlUa2CgworZmUYq-Etff-9QK90v4xOWzNWvaILdcmkJs5zwH9b86f5yxos_NRK-VIO015zVlWTWEB2bYe3iy_95zezUdGp66X77IQbHhKunDI1BF0trlkrIkOCqviH4S1U3Nz4n5WWW8qsc3zAEq1Spquojg2mevHtWEA5EwtdjPeXn07NztIOTZ6PtyWt6v0Gfp5oFRAbvvcCpDnptz6gZd56Z6TBkI0eMUs4RI2g2rup607wVFuIUdvgWEC9Jb2rzxEtn2VZ2DZl4r5x_5wWVT8-OrHVtRUBcwdDe1_gl-PYhQ26vLcTN87eyPdVhft0O-URO1PQdifev4NKpQBYIOGCDmZ9TBxEtWeCI9oVmRt0eHRGAaoOXx08gxL2IQt_AVggk0AeXgJ4e6m1XsV5-xFud0L_1mUjZ9Mffhg5aZGTyDkCWCBWRS4GuU5oQsZVBYkPgz-pbltwoQdYY1s6s8D-oA4orANYIJEdvfdRibsv05I3pv8e6S1aUuAuBpGQHLhrYj4QX0knBFggQ-qOZUDlozRsGk46ux9gp9fjT28Fy3g3nctmMoqi_U2MAgMEBQkKDA0ODxAR" + } +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/derivedUnsignedReveal.json b/TestVectors/ecdsa-sd-2023/derivedUnsignedReveal.json new file mode 100644 index 0000000..263ec12 --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/derivedUnsignedReveal.json @@ -0,0 +1,36 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + { + "@vocab": "https://windsurf.grotto-networking.com/selective#" + } + ], + "type": [ + "VerifiableCredential" + ], + "sailNumber": "Earth101", + "sails": [ + { + "size": 6.1, + "sailName": "Lahaina", + "year": 2023 + }, + { + "size": 7, + "sailName": "Lahaina", + "year": 2020 + } + ], + "boards": [ + { + "year": 2022, + "boardName": "CompFoil170", + "brand": "Wailea" + }, + { + "boardName": "Kanaha Custom", + "brand": "Wailea", + "year": 2019 + } + ] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/windDoc.json b/TestVectors/ecdsa-sd-2023/windDoc.json new file mode 100644 index 0000000..6afb1bf --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/windDoc.json @@ -0,0 +1,44 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + {"@vocab": "https://windsurf.grotto-networking.com/selective#"} + ], + "type": [ + "VerifiableCredential" + ], + "sailNumber": "Earth101", + "sails": [ + { + "size": 5.5, + "sailName": "Kihei", + "year": 2023 + }, + { + "size": 6.1, + "sailName": "Lahaina", + "year": 2023 + }, + { + "size": 7.0, + "sailName": "Lahaina", + "year": 2020 + }, + { + "size": 7.8, + "sailName": "Lahaina", + "year": 2023 + } + ], + "boards": [ + { + "boardName": "CompFoil170", + "brand": "Wailea", + "year": 2022 + }, + { + "boardName": "Kanaha Custom", + "brand": "Wailea", + "year": 2019 + } + ] +} \ No newline at end of file diff --git a/TestVectors/ecdsa-sd-2023/windMandatory.json b/TestVectors/ecdsa-sd-2023/windMandatory.json new file mode 100644 index 0000000..47e155b --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/windMandatory.json @@ -0,0 +1 @@ +["/sailNumber", "/sails/1", "/boards/0/year", "/sails/2"] diff --git a/TestVectors/ecdsa-sd-2023/windSelective.json b/TestVectors/ecdsa-sd-2023/windSelective.json new file mode 100644 index 0000000..7371ebc --- /dev/null +++ b/TestVectors/ecdsa-sd-2023/windSelective.json @@ -0,0 +1 @@ +["/boards/0", "/boards/1"] \ No newline at end of file diff --git a/index.html b/index.html index 01334a9..8fd9c67 100644 --- a/index.html +++ b/index.html @@ -3224,6 +3224,215 @@

Representation: ecdsa-jcs-2019 with curve P-384


       
+      
+

Representation: ecdsa-sd-2023

+

+To demonstrate selective disclosure features including mandatory disclosure, +selective disclosure, and overlap between mandatory and selective disclosure +requires an input credential document with more content than previous test +vectors. To avoid excessively long test vectors the starting document test +vector is based on a purely ficticious windsurfing (sailing) competition +scenario. In addition we break the test vectors into two groups based on those +that would be generated by the issuer (base proof) and those that would be +generated by the holder (derived proof). +

+
+

Base Proof

+

+In order to add a selective disclosure base proof to a document the issuer needs +the following cryptographic key material: +

+
    +
  1. +The issuers private/public key pair, i.e., the key pair corresponding to the +verification method that will be part of the proof. +
  2. +
  3. +A per proof private/public key pair created by the issuer just for this proof. +This is an ephemeral, single use key pair where the private key is not kept +after the proof has been generated. +
  4. +
  5. +An HMAC key. This used to randomize the order of the blank node ids to avoid +potential information leakage from the blank node id ordering. This is used only +once and is shared between issuer and holder. The HMAC in this case is +functioning as a pseudorandom function (PRF). +
  6. +
+

+The key material used for generating the add base proof test vectors is shown +below. Multibase representation is use for the P-256 key pairs and the HMAC key +is given as a hexadecimal string. +

+
+          
+

+In our scenario a sailor is registering with a race organizer for a series of +windsurfing races to be held over a number of days on Maui. The organizer will +inspect the sailors equipment to certify that what has been declared is + accurate. The sailors unsigned equipment inventory is shown below. +

+

+          

+In addition to let other sailors know what kinds of equipment their competitors +maybe sailing on it is mandatory that each sailor disclose the year of their +most recent windsurfing board and full details on two of their sails. Note that +all sailors are identified by a sail number that is printed on all their +equipment. This mandatory information is specified via an array of JSON pointers +as shown below. +

+

+          

+The result of applying the above JSON pointers to the sailors equipment document +is shown below. +

+

+          

+Transformation of the unsigned document begins with canonicalizing the document +as shown below. +

+

+          

+To prevent possible information leakage from the ordering of the blank node ids +these are processed through a PRF, i.e., the HMAC to give the canonized HMAC +document shown below. This represents an ordered list of statements that will be +subject to mandatory and selective disclosure, i.e., it is from this list that +statements are grouped. +

+

+          

+The above canonical document gets grouped in to mandatory and non-mandatory +statements. The final output of the selective disclosure transformation process +is shown below. Each statement is now grouped as mandatory and non-mandatory and +its index in the previous list of statements is remembered. +

+

+          

+The next step is to create the base proof configuration and canonicalize it. +This is shown in the following two examples. +

+

+          

+          

+In the hashing step we compute the SHA-256 hash of the canonicalized proof +options to produce the `proofHash` and we compute the SHA-256 hash of the join of +all the mandatory nquads to produce the `mandatoryHash`. These are shown below +in hexadecimal format. +

+

+          

+We compute the `baseSignature` over the concatenation of the `proofHash`, +`proofPublicKey`, and `mandatoryHash` using the issuers long term `privateKey`. +We compute the `signatures` array by signing each non-mandatory nquad using the +per `proofPrivateKey`. These signatures, the `proofPublicKey`, and +`mandatoryPointers` which are fed to the final serialization step are +shown below. +

+

+          

+Finally, the values above are run through the algorithm of Section + to produce the `proofValue` which is +used in the signed based document shown below. +

+

+        
+
+

Derived Proof

+

+In order to create a derived proof a holder starts with a signed document +containing a base proof. The base document we will use for these test vectors is +the final example from Section above. The first +step is to run the algorithm of Section to +recover `baseSignature`, `publicKey`, `hmacKey`, `signatures`, and +`mandatoryPointers` as shown below. +

+

+          

+Next, the holder needs to indicate what, if anything else, they wish to reveal +to the verifiers by specifying JSON pointers for selective disclosure. In our +windsurfing competition scenario a sailor (the holder) has just completed their +first day of racing and wishes to reveal to the general public (the verifiers) +all the details of the windsurfing boards they used in the competition. These +are shown below. Note that this slightly overlaps with the mandatory disclosed +information which included only the year of their most recent board. +

+

+          

+To produce the `revealDocument`, i.e., the unsigned document that will +eventually be signed and sent to the verifier, we append the selective pointers +to the mandatory pointers and input these combined pointers along with the +document without proof to the algorithm of Section +to give the result shown below. +

+

+          

+Now that we know what the revealed document looks like, we need to furnish +appropriately updated information to the verifier on which statements are +mandatory, the signatures for the selected non-mandatory statements, and the +mapping between canonical blank node ids for the reveal document and a subset of +the HMAC blank node ids. Running step 6 of the + yields an abundance of information about +various statement groups relative to the original document. Below we show a +portion of the indexes for those groups. +

+

+          

+The verifier needs to be able to aggregate and hash the mandatory statements. To +enable this we furnish them with a list of indexes of the mandatory statements +adjusted to their positions in the reveal document. In the previous example the +`combinedIndexes` show the indexes of all the original nquads (statements) that +make up the reveal document, in order. To come up with the adjusted mandatory +indexes shown below we obtain the index of each of original mandatory indexes +relative to the `combinedIndexes` as shown below. +

+

+          

+We have to furnish the verifier with a list of signatures for those selective +statements (nquads) that are not mandatory. The original list of signatures +corresponds to every non-mandatory statement and the indexes of these in the +original document are given above. We now compute a list of adjusted signature +indexes by computing the index of each selective index in the non-mandatory +index list, ignoring any selective index not present in the list. We then use +the adjusted signature indexes to obtain the filtered signature list. These +lists are shown below. +

+

+          

+The last important piece of disclosure data is a mapping of canonical blank node +ids to HMAC based ids, the `labelMap`, computed according to Section + steps 12-14. This is shown below along with +the rest of the disclosure data minus the reveal document. +

+

+          

+Finally using the disclosure data above with the algorithm of Section + we obtain the signed derived (reveal) +document shown below. +

+

+        
+