@pagopa/io-react-native-wallet 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/lib/commonjs/client/generated/wallet-provider.js +22 -22
  2. package/lib/commonjs/client/generated/wallet-provider.js.map +1 -1
  3. package/lib/commonjs/client/index.js +1 -2
  4. package/lib/commonjs/client/index.js.map +1 -1
  5. package/lib/commonjs/credential/issuance/02-evaluate-issuer-trust.js +2 -1
  6. package/lib/commonjs/credential/issuance/02-evaluate-issuer-trust.js.map +1 -1
  7. package/lib/commonjs/credential/issuance/03-start-credential-issuance.js +287 -0
  8. package/lib/commonjs/credential/issuance/03-start-credential-issuance.js.map +1 -0
  9. package/lib/commonjs/credential/issuance/03-start-user-authorization.js +56 -83
  10. package/lib/commonjs/credential/issuance/03-start-user-authorization.js.map +1 -1
  11. package/lib/commonjs/credential/issuance/04-complete-user-authorization.js +88 -0
  12. package/lib/commonjs/credential/issuance/04-complete-user-authorization.js.map +1 -1
  13. package/lib/commonjs/credential/issuance/05-authorize-access.js +56 -33
  14. package/lib/commonjs/credential/issuance/05-authorize-access.js.map +1 -1
  15. package/lib/commonjs/credential/issuance/06-obtain-credential.js +51 -78
  16. package/lib/commonjs/credential/issuance/06-obtain-credential.js.map +1 -1
  17. package/lib/commonjs/credential/issuance/07-verify-and-parse-credential.js +21 -44
  18. package/lib/commonjs/credential/issuance/07-verify-and-parse-credential.js.map +1 -1
  19. package/lib/commonjs/credential/issuance/index.js +7 -0
  20. package/lib/commonjs/credential/issuance/index.js.map +1 -1
  21. package/lib/commonjs/credential/issuance/types.js +28 -0
  22. package/lib/commonjs/credential/issuance/types.js.map +1 -0
  23. package/lib/commonjs/index.js.map +1 -1
  24. package/lib/commonjs/pid/sd-jwt/converters.js +5 -9
  25. package/lib/commonjs/pid/sd-jwt/converters.js.map +1 -1
  26. package/lib/commonjs/pid/sd-jwt/types.js +3 -3
  27. package/lib/commonjs/pid/sd-jwt/types.js.map +1 -1
  28. package/lib/commonjs/sd-jwt/__test__/converters.test.js +1 -1
  29. package/lib/commonjs/sd-jwt/__test__/converters.test.js.map +1 -1
  30. package/lib/commonjs/sd-jwt/__test__/index.test.js +30 -43
  31. package/lib/commonjs/sd-jwt/__test__/index.test.js.map +1 -1
  32. package/lib/commonjs/sd-jwt/__test__/types.test.js +16 -24
  33. package/lib/commonjs/sd-jwt/__test__/types.test.js.map +1 -1
  34. package/lib/commonjs/sd-jwt/index.js +3 -9
  35. package/lib/commonjs/sd-jwt/index.js.map +1 -1
  36. package/lib/commonjs/sd-jwt/types.js +11 -16
  37. package/lib/commonjs/sd-jwt/types.js.map +1 -1
  38. package/lib/commonjs/trust/types.js +70 -29
  39. package/lib/commonjs/trust/types.js.map +1 -1
  40. package/lib/commonjs/utils/auth.js +44 -0
  41. package/lib/commonjs/utils/auth.js.map +1 -0
  42. package/lib/commonjs/utils/errors.js +77 -2
  43. package/lib/commonjs/utils/errors.js.map +1 -1
  44. package/lib/commonjs/utils/misc.js +34 -1
  45. package/lib/commonjs/utils/misc.js.map +1 -1
  46. package/lib/commonjs/utils/par.js +23 -15
  47. package/lib/commonjs/utils/par.js.map +1 -1
  48. package/lib/commonjs/utils/pop.js +33 -0
  49. package/lib/commonjs/utils/pop.js.map +1 -0
  50. package/lib/commonjs/wallet-instance-attestation/issuing.js +17 -2
  51. package/lib/commonjs/wallet-instance-attestation/issuing.js.map +1 -1
  52. package/lib/commonjs/wallet-instance-attestation/types.js +7 -7
  53. package/lib/commonjs/wallet-instance-attestation/types.js.map +1 -1
  54. package/lib/module/client/generated/wallet-provider.js +16 -19
  55. package/lib/module/client/generated/wallet-provider.js.map +1 -1
  56. package/lib/module/client/index.js +1 -2
  57. package/lib/module/client/index.js.map +1 -1
  58. package/lib/module/credential/issuance/02-evaluate-issuer-trust.js +2 -1
  59. package/lib/module/credential/issuance/02-evaluate-issuer-trust.js.map +1 -1
  60. package/lib/module/credential/issuance/03-start-credential-issuance.js +276 -0
  61. package/lib/module/credential/issuance/03-start-credential-issuance.js.map +1 -0
  62. package/lib/module/credential/issuance/03-start-user-authorization.js +56 -80
  63. package/lib/module/credential/issuance/03-start-user-authorization.js.map +1 -1
  64. package/lib/module/credential/issuance/04-complete-user-authorization.js +85 -1
  65. package/lib/module/credential/issuance/04-complete-user-authorization.js.map +1 -1
  66. package/lib/module/credential/issuance/05-authorize-access.js +54 -33
  67. package/lib/module/credential/issuance/05-authorize-access.js.map +1 -1
  68. package/lib/module/credential/issuance/06-obtain-credential.js +50 -75
  69. package/lib/module/credential/issuance/06-obtain-credential.js.map +1 -1
  70. package/lib/module/credential/issuance/07-verify-and-parse-credential.js +21 -44
  71. package/lib/module/credential/issuance/07-verify-and-parse-credential.js.map +1 -1
  72. package/lib/module/credential/issuance/index.js +2 -1
  73. package/lib/module/credential/issuance/index.js.map +1 -1
  74. package/lib/module/credential/issuance/types.js +18 -0
  75. package/lib/module/credential/issuance/types.js.map +1 -0
  76. package/lib/module/index.js.map +1 -1
  77. package/lib/module/pid/sd-jwt/converters.js +5 -9
  78. package/lib/module/pid/sd-jwt/converters.js.map +1 -1
  79. package/lib/module/pid/sd-jwt/types.js +3 -3
  80. package/lib/module/pid/sd-jwt/types.js.map +1 -1
  81. package/lib/module/sd-jwt/__test__/converters.test.js +1 -1
  82. package/lib/module/sd-jwt/__test__/converters.test.js.map +1 -1
  83. package/lib/module/sd-jwt/__test__/index.test.js +30 -43
  84. package/lib/module/sd-jwt/__test__/index.test.js.map +1 -1
  85. package/lib/module/sd-jwt/__test__/types.test.js +16 -24
  86. package/lib/module/sd-jwt/__test__/types.test.js.map +1 -1
  87. package/lib/module/sd-jwt/index.js +3 -9
  88. package/lib/module/sd-jwt/index.js.map +1 -1
  89. package/lib/module/sd-jwt/types.js +11 -16
  90. package/lib/module/sd-jwt/types.js.map +1 -1
  91. package/lib/module/sd-jwt/verifier.js.map +1 -1
  92. package/lib/module/trust/types.js +70 -29
  93. package/lib/module/trust/types.js.map +1 -1
  94. package/lib/module/utils/auth.js +35 -0
  95. package/lib/module/utils/auth.js.map +1 -0
  96. package/lib/module/utils/errors.js +71 -0
  97. package/lib/module/utils/errors.js.map +1 -1
  98. package/lib/module/utils/misc.js +31 -0
  99. package/lib/module/utils/misc.js.map +1 -1
  100. package/lib/module/utils/par.js +24 -16
  101. package/lib/module/utils/par.js.map +1 -1
  102. package/lib/module/utils/pop.js +24 -0
  103. package/lib/module/utils/pop.js.map +1 -0
  104. package/lib/module/wallet-instance-attestation/issuing.js +17 -2
  105. package/lib/module/wallet-instance-attestation/issuing.js.map +1 -1
  106. package/lib/module/wallet-instance-attestation/types.js +7 -7
  107. package/lib/module/wallet-instance-attestation/types.js.map +1 -1
  108. package/lib/typescript/client/generated/wallet-provider.d.ts +35 -13
  109. package/lib/typescript/client/generated/wallet-provider.d.ts.map +1 -1
  110. package/lib/typescript/client/index.d.ts.map +1 -1
  111. package/lib/typescript/credential/issuance/01-start-flow.d.ts +1 -0
  112. package/lib/typescript/credential/issuance/01-start-flow.d.ts.map +1 -1
  113. package/lib/typescript/credential/issuance/02-evaluate-issuer-trust.d.ts +2 -1
  114. package/lib/typescript/credential/issuance/02-evaluate-issuer-trust.d.ts.map +1 -1
  115. package/lib/typescript/credential/issuance/03-start-credential-issuance.d.ts +41 -0
  116. package/lib/typescript/credential/issuance/03-start-credential-issuance.d.ts.map +1 -0
  117. package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts +23 -18
  118. package/lib/typescript/credential/issuance/03-start-user-authorization.d.ts.map +1 -1
  119. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts +24 -12
  120. package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts.map +1 -1
  121. package/lib/typescript/credential/issuance/05-authorize-access.d.ts +22 -16
  122. package/lib/typescript/credential/issuance/05-authorize-access.d.ts.map +1 -1
  123. package/lib/typescript/credential/issuance/06-obtain-credential.d.ts +19 -26
  124. package/lib/typescript/credential/issuance/06-obtain-credential.d.ts.map +1 -1
  125. package/lib/typescript/credential/issuance/07-verify-and-parse-credential.d.ts +10 -15
  126. package/lib/typescript/credential/issuance/07-verify-and-parse-credential.d.ts.map +1 -1
  127. package/lib/typescript/credential/issuance/index.d.ts +3 -4
  128. package/lib/typescript/credential/issuance/index.d.ts.map +1 -1
  129. package/lib/typescript/credential/issuance/types.d.ts +63 -0
  130. package/lib/typescript/credential/issuance/types.d.ts.map +1 -0
  131. package/lib/typescript/credential/presentation/types.d.ts +6 -6
  132. package/lib/typescript/index.d.ts +2 -1
  133. package/lib/typescript/index.d.ts.map +1 -1
  134. package/lib/typescript/pid/sd-jwt/converters.d.ts.map +1 -1
  135. package/lib/typescript/pid/sd-jwt/types.d.ts +36 -36
  136. package/lib/typescript/pid/sd-jwt/types.d.ts.map +1 -1
  137. package/lib/typescript/sd-jwt/index.d.ts +40 -68
  138. package/lib/typescript/sd-jwt/index.d.ts.map +1 -1
  139. package/lib/typescript/sd-jwt/types.d.ts +64 -121
  140. package/lib/typescript/sd-jwt/types.d.ts.map +1 -1
  141. package/lib/typescript/trust/index.d.ts +150 -48
  142. package/lib/typescript/trust/index.d.ts.map +1 -1
  143. package/lib/typescript/trust/types.d.ts +2838 -1740
  144. package/lib/typescript/trust/types.d.ts.map +1 -1
  145. package/lib/typescript/utils/auth.d.ts +52 -0
  146. package/lib/typescript/utils/auth.d.ts.map +1 -0
  147. package/lib/typescript/utils/errors.d.ts +36 -1
  148. package/lib/typescript/utils/errors.d.ts.map +1 -1
  149. package/lib/typescript/utils/integrity.d.ts +1 -1
  150. package/lib/typescript/utils/misc.d.ts +18 -0
  151. package/lib/typescript/utils/misc.d.ts.map +1 -1
  152. package/lib/typescript/utils/par.d.ts +8 -31
  153. package/lib/typescript/utils/par.d.ts.map +1 -1
  154. package/lib/typescript/utils/pop.d.ts +26 -0
  155. package/lib/typescript/utils/pop.d.ts.map +1 -0
  156. package/lib/typescript/wallet-instance-attestation/issuing.d.ts +2 -1
  157. package/lib/typescript/wallet-instance-attestation/issuing.d.ts.map +1 -1
  158. package/lib/typescript/wallet-instance-attestation/types.d.ts +59 -59
  159. package/lib/typescript/wallet-instance-attestation/types.d.ts.map +1 -1
  160. package/package.json +2 -1
  161. package/src/client/generated/wallet-provider.ts +24 -21
  162. package/src/client/index.ts +3 -8
  163. package/src/credential/issuance/01-start-flow.ts +1 -0
  164. package/src/credential/issuance/02-evaluate-issuer-trust.ts +2 -1
  165. package/src/credential/issuance/03-start-credential-issuance.ts +407 -0
  166. package/src/credential/issuance/03-start-user-authorization.ts +91 -92
  167. package/src/credential/issuance/04-complete-user-authorization.ts +114 -13
  168. package/src/credential/issuance/05-authorize-access.ts +74 -49
  169. package/src/credential/issuance/06-obtain-credential.ts +77 -111
  170. package/src/credential/issuance/07-verify-and-parse-credential.ts +30 -67
  171. package/src/credential/issuance/index.ts +6 -4
  172. package/src/credential/issuance/types.ts +25 -0
  173. package/src/index.ts +2 -1
  174. package/src/pid/sd-jwt/converters.ts +5 -11
  175. package/src/pid/sd-jwt/types.ts +8 -6
  176. package/src/sd-jwt/__test__/converters.test.ts +1 -1
  177. package/src/sd-jwt/__test__/index.test.ts +45 -74
  178. package/src/sd-jwt/__test__/types.test.ts +21 -33
  179. package/src/sd-jwt/index.ts +3 -12
  180. package/src/sd-jwt/types.ts +17 -22
  181. package/src/trust/types.ts +64 -32
  182. package/src/utils/auth.ts +37 -0
  183. package/src/utils/errors.ts +85 -1
  184. package/src/utils/integrity.ts +1 -1
  185. package/src/utils/misc.ts +43 -0
  186. package/src/utils/par.ts +29 -17
  187. package/src/utils/pop.ts +34 -0
  188. package/src/wallet-instance-attestation/issuing.ts +39 -2
  189. package/src/wallet-instance-attestation/types.ts +11 -7
  190. package/lib/commonjs/credential/issuance/07-confirm-credential.js +0 -6
  191. package/lib/commonjs/credential/issuance/07-confirm-credential.js.map +0 -1
  192. package/lib/commonjs/credential/issuance/08-confirm-credential.js +0 -6
  193. package/lib/commonjs/credential/issuance/08-confirm-credential.js.map +0 -1
  194. package/lib/module/credential/issuance/07-confirm-credential.js +0 -2
  195. package/lib/module/credential/issuance/07-confirm-credential.js.map +0 -1
  196. package/lib/module/credential/issuance/08-confirm-credential.js +0 -2
  197. package/lib/module/credential/issuance/08-confirm-credential.js.map +0 -1
  198. package/lib/typescript/credential/issuance/07-confirm-credential.d.ts +0 -11
  199. package/lib/typescript/credential/issuance/07-confirm-credential.d.ts.map +0 -1
  200. package/lib/typescript/credential/issuance/08-confirm-credential.d.ts +0 -11
  201. package/lib/typescript/credential/issuance/08-confirm-credential.d.ts.map +0 -1
  202. package/src/credential/issuance/07-confirm-credential.ts +0 -14
  203. package/src/credential/issuance/08-confirm-credential.ts +0 -14
  204. package/src/sd-jwt/__test__/converters.test.js +0 -24
  205. package/src/sd-jwt/verifier.js +0 -12
@@ -13,99 +13,70 @@ import { SdJwt4VC } from "../types";
13
13
  // - "address" is used as verification._sd
14
14
  // - all others disclosures are in claims._sd
15
15
  const token =
16
- "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiIsImtpZCI6ImIxODZlYTBjMTkyNTc5MzA5N2JmMDFiOGEyODlhNDVmIiwidHJ1c3RfY2hhaW4iOlsiTkVoUmRFUnBZbmxIWTNNNVdsZFdUV1oyYVVobSAuLi4iLCJleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2IC4uLiIsIklrSllkbVp5Ykc1b1FVMTFTRkl3TjJGcVZXMUIgLi4uIl19.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tL2lzc3VlciIsInN1YiI6Ik56YkxzWGg4dURDY2Q3bm9XWEZaQWZIa3hac1JHQzlYcy4uLiIsImp0aSI6InVybjp1dWlkOjZjNWMwYTQ5LWI1ODktNDMxZC1iYWU3LTIxOTEyMmE5ZWMyYyIsImlhdCI6MTU0MTQ5MzcyNCwiZXhwIjoxNTQxNDkzNzI0LCJzdGF0dXMiOiJodHRwczovL2V4YW1wbGUuY29tL3N0YXR1cyIsImNuZiI6eyJqd2siOnsia3R5IjoiUlNBIiwidXNlIjoic2lnIiwibiI6IjFUYS1zRSIsImUiOiJBUUFCIiwia2lkIjoiWWhORlMzWW5DOXRqaUNhaXZoV0xWVUozQXh3R0d6Xzk4dVJGYXFNRUVzIn19LCJ0eXBlIjoiUGVyc29uSWRlbnRpZmljYXRpb25EYXRhIiwidmVyaWZpZWRfY2xhaW1zIjp7InZlcmlmaWNhdGlvbiI6eyJfc2QiOlsiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5dTVxZWhabzdGN0VQWWxTRSJdLCJ0cnVzdF9mcmFtZXdvcmsiOiJlaWRhcyIsImFzc3VyYW5jZV9sZXZlbCI6ImhpZ2gifSwiY2xhaW1zIjp7Il9zZCI6WyIwOXZLckpNT2x5VFdNMHNqcHVfcGRPQlZCUTJNMXkzS2hwSDUxNW5Ya3BZIiwiMnJzakdiYUMwa3k4bVQwcEpyUGlvV1RxMF9kYXcxc1g3NnBvVWxnQ3diSSIsIkVrTzhkaFcwZEhFSmJ2VUhsRV9WQ2V1Qzl1UkVMT2llTFpoaDdYYlVUdEEiLCJJbER6SUtlaVpkRHdwcXBLNlpmYnlwaEZ2ejVGZ25XYS1zTjZ3cVFYQ2l3IiwiUG9yRmJwS3VWdTZ4eW1KYWd2a0ZzRlhBYlJvYzJKR2xBVUEyQkE0bzdjSSIsIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3JaemZVYW9tTG8iLCJqZHJURThZY2JZNEVpZnVnaWhpQWVfQlBla3hKUVpJQ2VpVVF3WTlRcXhJIiwianN1OXlWdWx3UVFsaEZsTV8zSmx6TWFTRnpnbGhRRzBEcGZheVF3TFVLNCJdfX0sIl9zZF9hbGciOiJzaGEtMjU2In0.8wwSHCd47wCgzRYXvvPTTRXGS-hk9V8jRzy7WSjRBTZxSHxJkGOSWwBVAA-kpJ-IvQS7699aLWxIMqAvr34sOA~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9obiJd~WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIkRvZSJd~WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VAZXhhbXBsZS5jb20iXQ~WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInBob25lX251bWJlciIsICIrMS0yMDItNTU1LTAxMDEiXQ~WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImJpcnRoZGF0ZSIsICIxOTQwLTAxLTAxIl0~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImlzX292ZXJfMTgiLCB0cnVlXQ~WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMjEiLCB0cnVlXQ~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfNjUiLCB0cnVlXQ~WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImFkZHJlc3MiLCB7InN0cmVldF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRvd24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0";
16
+ "eyJraWQiOiItRl82VWdhOG4zVmVnalkyVTdZVUhLMXpMb2FELU5QVGM2M1JNSVNuTGF3IiwidHlwIjoidmMrc2Qtand0IiwiYWxnIjoiRVMyNTYifQ.eyJfc2QiOlsiMHExRDVKbWF2NnBRYUVoX0pfRmN2X3VOTk1RSWdDeWhRT3hxbFk0bDNxVSIsIktDSi1BVk52ODhkLXhqNnNVSUFPSnhGbmJVaDNySFhES2tJSDFsRnFiUnMiLCJNOWxvOVl4RE5JWHJBcTJxV2VpQ0E0MHpwSl96WWZGZFJfNEFFQUxjUnRVIiwiY3pnalVrMG5xUkNzd1NoQ2hDamRTNkExLXY0N2RfcVRDU0ZJdklIaE1vSSIsIm5HblFyN2NsbTN0ZlRwOHlqTF91SHJEU090elIyUFZiOFM3R2VMZEFxQlEiLCJ4TklWd2xwU3NhWjhDSlNmMGd6NXhfNzVWUldXYzZWMW1scGVqZENycVVzIl0sInN1YiI6IjIxNmY4OTQ2LTllY2ItNDgxOS05MzA5LWMwNzZmMzRhN2UxMSIsIl9zZF9hbGciOiJzaGEtMjU2IiwidmN0IjoiUGVyc29uSWRlbnRpZmljYXRpb25EYXRhIiwiaXNzIjoiaHR0cHM6Ly9wcmUuZWlkLndhbGxldC5pcHpzLml0IiwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2Iiwia2lkIjoiUnYzVy1FaUtwdkJUeWs1eVp4dnJldi03TURCNlNselVDQm9fQ1FqamRkVSIsIngiOiIwV294N1F0eVBxQnlnMzVNSF9YeUNjbmQ1TGUtSm0wQVhIbFVnREJBMDNZIiwieSI6ImVFaFZ2ZzFKUHFOZDNEVFNhNG1HREdCbHdZNk5QLUVaYkxiTkZYU1h3SWcifX0sImV4cCI6MTc1MTU0NjU3Niwic3RhdHVzIjp7InN0YXR1c19hdHRlc3RhdGlvbiI6eyJjcmVkZW50aWFsX2hhc2hfYWxnIjoic2hhLTI1NiJ9fX0.qXHA2oqr8trX4fGxpxpUft2GX380TM3pzfo1MYAsDjUC8HsODA-4rdRWAvDe2zYP57x4tJU7eiABkd1Kmln9yQ~WyJrSkRFUDhFYU5URU1CRE9aelp6VDR3IiwidW5pcXVlX2lkIiwiVElOSVQtTFZMREFBODVUNTBHNzAyQiJd~WyJ6SUF5VUZ2UGZJcEUxekJxeEk1aGFRIiwiYmlydGhfZGF0ZSIsIjE5ODUtMTItMTAiXQ~WyJHcjNSM3MyOTBPa1FVbS1ORlR1OTZBIiwidGF4X2lkX2NvZGUiLCJUSU5JVC1MVkxEQUE4NVQ1MEc3MDJCIl0~WyJHeE9SYWxNQWVsZlowZWRGSmpqWVV3IiwiZ2l2ZW5fbmFtZSIsIkFkYSJd~WyJfdlY1UklrbDBJT0VYS290czlrdDF3IiwiZmFtaWx5X25hbWUiLCJMb3ZlbGFjZSJd~WyJDajV0Y2NSNzJKd3J6ZTJUVzRhLXdnIiwiaWF0IiwxNzIwMDEwNTc1XQ";
17
17
 
18
18
  const unsigned =
19
- "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiIsImtpZCI6ImIxODZlYTBjMTkyNTc5MzA5N2JmMDFiOGEyODlhNDVmIiwidHJ1c3RfY2hhaW4iOlsiTkVoUmRFUnBZbmxIWTNNNVdsZFdUV1oyYVVobSAuLi4iLCJleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2IC4uLiIsIklrSllkbVp5Ykc1b1FVMTFTRkl3TjJGcVZXMUIgLi4uIl19.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tL2lzc3VlciIsInN1YiI6Ik56YkxzWGg4dURDY2Q3bm9XWEZaQWZIa3hac1JHQzlYcy4uLiIsImp0aSI6InVybjp1dWlkOjZjNWMwYTQ5LWI1ODktNDMxZC1iYWU3LTIxOTEyMmE5ZWMyYyIsImlhdCI6MTU0MTQ5MzcyNCwiZXhwIjoxNTQxNDkzNzI0LCJzdGF0dXMiOiJodHRwczovL2V4YW1wbGUuY29tL3N0YXR1cyIsImNuZiI6eyJqd2siOnsia3R5IjoiUlNBIiwidXNlIjoic2lnIiwibiI6IjFUYS1zRSIsImUiOiJBUUFCIiwia2lkIjoiWWhORlMzWW5DOXRqaUNhaXZoV0xWVUozQXh3R0d6Xzk4dVJGYXFNRUVzIn19LCJ0eXBlIjoiUGVyc29uSWRlbnRpZmljYXRpb25EYXRhIiwidmVyaWZpZWRfY2xhaW1zIjp7InZlcmlmaWNhdGlvbiI6eyJfc2QiOlsiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5dTVxZWhabzdGN0VQWWxTRSJdLCJ0cnVzdF9mcmFtZXdvcmsiOiJlaWRhcyIsImFzc3VyYW5jZV9sZXZlbCI6ImhpZ2gifSwiY2xhaW1zIjp7Il9zZCI6WyIwOXZLckpNT2x5VFdNMHNqcHVfcGRPQlZCUTJNMXkzS2hwSDUxNW5Ya3BZIiwiMnJzakdiYUMwa3k4bVQwcEpyUGlvV1RxMF9kYXcxc1g3NnBvVWxnQ3diSSIsIkVrTzhkaFcwZEhFSmJ2VUhsRV9WQ2V1Qzl1UkVMT2llTFpoaDdYYlVUdEEiLCJJbER6SUtlaVpkRHdwcXBLNlpmYnlwaEZ2ejVGZ25XYS1zTjZ3cVFYQ2l3IiwiUG9yRmJwS3VWdTZ4eW1KYWd2a0ZzRlhBYlJvYzJKR2xBVUEyQkE0bzdjSSIsIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3JaemZVYW9tTG8iLCJqZHJURThZY2JZNEVpZnVnaWhpQWVfQlBla3hKUVpJQ2VpVVF3WTlRcXhJIiwianN1OXlWdWx3UVFsaEZsTV8zSmx6TWFTRnpnbGhRRzBEcGZheVF3TFVLNCJdfX0sIl9zZF9hbGciOiJzaGEtMjU2In0";
19
+ "eyJraWQiOiItRl82VWdhOG4zVmVnalkyVTdZVUhLMXpMb2FELU5QVGM2M1JNSVNuTGF3IiwidHlwIjoidmMrc2Qtand0IiwiYWxnIjoiRVMyNTYifQ.eyJfc2QiOlsiMHExRDVKbWF2NnBRYUVoX0pfRmN2X3VOTk1RSWdDeWhRT3hxbFk0bDNxVSIsIktDSi1BVk52ODhkLXhqNnNVSUFPSnhGbmJVaDNySFhES2tJSDFsRnFiUnMiLCJNOWxvOVl4RE5JWHJBcTJxV2VpQ0E0MHpwSl96WWZGZFJfNEFFQUxjUnRVIiwiY3pnalVrMG5xUkNzd1NoQ2hDamRTNkExLXY0N2RfcVRDU0ZJdklIaE1vSSIsIm5HblFyN2NsbTN0ZlRwOHlqTF91SHJEU090elIyUFZiOFM3R2VMZEFxQlEiLCJ4TklWd2xwU3NhWjhDSlNmMGd6NXhfNzVWUldXYzZWMW1scGVqZENycVVzIl0sInN1YiI6IjIxNmY4OTQ2LTllY2ItNDgxOS05MzA5LWMwNzZmMzRhN2UxMSIsIl9zZF9hbGciOiJzaGEtMjU2IiwidmN0IjoiUGVyc29uSWRlbnRpZmljYXRpb25EYXRhIiwiaXNzIjoiaHR0cHM6Ly9wcmUuZWlkLndhbGxldC5pcHpzLml0IiwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2Iiwia2lkIjoiUnYzVy1FaUtwdkJUeWs1eVp4dnJldi03TURCNlNselVDQm9fQ1FqamRkVSIsIngiOiIwV294N1F0eVBxQnlnMzVNSF9YeUNjbmQ1TGUtSm0wQVhIbFVnREJBMDNZIiwieSI6ImVFaFZ2ZzFKUHFOZDNEVFNhNG1HREdCbHdZNk5QLUVaYkxiTkZYU1h3SWcifX0sImV4cCI6MTc1MTU0NjU3Niwic3RhdHVzIjp7InN0YXR1c19hdHRlc3RhdGlvbiI6eyJjcmVkZW50aWFsX2hhc2hfYWxnIjoic2hhLTI1NiJ9fX0";
20
20
 
21
21
  const signature =
22
- "8wwSHCd47wCgzRYXvvPTTRXGS-hk9V8jRzy7WSjRBTZxSHxJkGOSWwBVAA-kpJ-IvQS7699aLWxIMqAvr34sOA";
22
+ "qXHA2oqr8trX4fGxpxpUft2GX380TM3pzfo1MYAsDjUC8HsODA-4rdRWAvDe2zYP57x4tJU7eiABkd1Kmln9yQ";
23
23
 
24
24
  const signed = `${unsigned}.${signature}`;
25
25
 
26
26
  const tokenizedDisclosures = [
27
- "WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9obiJd",
28
- "WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIkRvZSJd",
29
- "WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VAZXhhbXBsZS5jb20iXQ",
30
- "WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInBob25lX251bWJlciIsICIrMS0yMDItNTU1LTAxMDEiXQ",
31
- "WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImJpcnRoZGF0ZSIsICIxOTQwLTAxLTAxIl0",
32
- "WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImlzX292ZXJfMTgiLCB0cnVlXQ",
33
- "WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMjEiLCB0cnVlXQ",
34
- "WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfNjUiLCB0cnVlXQ",
35
- "WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImFkZHJlc3MiLCB7InN0cmVldF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRvd24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0",
27
+ "WyJrSkRFUDhFYU5URU1CRE9aelp6VDR3IiwidW5pcXVlX2lkIiwiVElOSVQtTFZMREFBODVUNTBHNzAyQiJd",
28
+ "WyJ6SUF5VUZ2UGZJcEUxekJxeEk1aGFRIiwiYmlydGhfZGF0ZSIsIjE5ODUtMTItMTAiXQ",
29
+ "WyJHcjNSM3MyOTBPa1FVbS1ORlR1OTZBIiwidGF4X2lkX2NvZGUiLCJUSU5JVC1MVkxEQUE4NVQ1MEc3MDJCIl0",
30
+ "WyJHeE9SYWxNQWVsZlowZWRGSmpqWVV3IiwiZ2l2ZW5fbmFtZSIsIkFkYSJd",
31
+ "WyJfdlY1UklrbDBJT0VYS290czlrdDF3IiwiZmFtaWx5X25hbWUiLCJMb3ZlbGFjZSJd",
32
+ "WyJDajV0Y2NSNzJKd3J6ZTJUVzRhLXdnIiwiaWF0IiwxNzIwMDEwNTc1XQ",
36
33
  ];
37
34
 
38
35
  const sdJwt = {
39
36
  header: {
37
+ kid: "-F_6Uga8n3VegjY2U7YUHK1zLoaD-NPTc63RMISnLaw",
40
38
  typ: "vc+sd-jwt",
41
39
  alg: "ES256",
42
- kid: "b186ea0c1925793097bf01b8a289a45f",
43
- trust_chain: [
44
- "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...",
45
- "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...",
46
- "IkJYdmZybG5oQU11SFIwN2FqVW1B ...",
47
- ],
48
40
  },
49
41
  payload: {
50
- iss: "https://example.com/issuer",
51
- sub: "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs...",
52
- jti: "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c",
53
- iat: 1541493724,
54
- exp: 1541493724,
55
- status: "https://example.com/status",
42
+ _sd: [
43
+ "0q1D5Jmav6pQaEh_J_Fcv_uNNMQIgCyhQOxqlY4l3qU",
44
+ "KCJ-AVNv88d-xj6sUIAOJxFnbUh3rHXDKkIH1lFqbRs",
45
+ "M9lo9YxDNIXrAq2qWeiCA40zpJ_zYfFdR_4AEALcRtU",
46
+ "czgjUk0nqRCswShChCjdS6A1-v47d_qTCSFIvIHhMoI",
47
+ "nGnQr7clm3tfTp8yjL_uHrDSOtzR2PVb8S7GeLdAqBQ",
48
+ "xNIVwlpSsaZ8CJSf0gz5x_75VRWWc6V1mlpejdCrqUs",
49
+ ],
50
+ sub: "216f8946-9ecb-4819-9309-c076f34a7e11",
51
+ _sd_alg: "sha-256",
52
+ vct: "PersonIdentificationData",
53
+ iss: "https://pre.eid.wallet.ipzs.it",
56
54
  cnf: {
57
55
  jwk: {
58
- kty: "RSA",
59
- use: "sig",
60
- n: "1Ta-sE",
61
- e: "AQAB",
62
- kid: "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
56
+ kty: "EC",
57
+ crv: "P-256",
58
+ kid: "Rv3W-EiKpvBTyk5yZxvrev-7MDB6SlzUCBo_CQjjddU",
59
+ x: "0Wox7QtyPqByg35MH_XyCcnd5Le-Jm0AXHlUgDBA03Y",
60
+ y: "eEhVvg1JPqNd3DTSa4mGDGBlwY6NP-EZbLbNFXSXwIg",
63
61
  },
64
62
  },
65
- type: "PersonIdentificationData",
66
- verified_claims: {
67
- verification: {
68
- _sd: ["JzYjH4svliH0R3PyEMfeZu6Jt69u5qehZo7F7EPYlSE"],
69
- trust_framework: "eidas",
70
- assurance_level: "high",
71
- },
72
- claims: {
73
- _sd: [
74
- "09vKrJMOlyTWM0sjpu_pdOBVBQ2M1y3KhpH515nXkpY",
75
- "2rsjGbaC0ky8mT0pJrPioWTq0_daw1sX76poUlgCwbI",
76
- "EkO8dhW0dHEJbvUHlE_VCeuC9uRELOieLZhh7XbUTtA",
77
- "IlDzIKeiZdDwpqpK6ZfbyphFvz5FgnWa-sN6wqQXCiw",
78
- "PorFbpKuVu6xymJagvkFsFXAbRoc2JGlAUA2BA4o7cI",
79
- "TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo",
80
- "jdrTE8YcbY4EifugihiAe_BPekxJQZICeiUQwY9QqxI",
81
- "jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4",
82
- ],
63
+ exp: 1751546576,
64
+ status: {
65
+ status_attestation: {
66
+ credential_hash_alg: "sha-256",
83
67
  },
84
68
  },
85
- _sd_alg: "sha-256",
86
69
  },
87
70
  };
88
71
 
89
72
  // In the very same order than tokenizedDisclosures
90
73
  const disclosures = [
91
- ["2GLC42sKQveCfGfryNRN9w", "given_name", "John"],
92
- ["eluV5Og3gSNII8EYnsxA_A", "family_name", "Doe"],
93
- ["6Ij7tM-a5iVPGboS5tmvVA", "email", "johndoe@example.com"],
94
- ["eI8ZWm9QnKPpNPeNenHdhQ", "phone_number", "+1-202-555-0101"],
95
- ["AJx-095VPrpTtN4QMOqROA", "birthdate", "1940-01-01"],
96
- ["Pc33JM2LchcU_lHggv_ufQ", "is_over_18", true],
97
- ["G02NSrQfjFXQ7Io09syajA", "is_over_21", true],
98
- ["lklxF5jMYlGTPUovMNIvCA", "is_over_65", true],
99
- [
100
- "Qg_O64zqAxe412a108iroA",
101
- "address",
102
- {
103
- street_address: "123 Main St",
104
- locality: "Anytown",
105
- region: "Anystate",
106
- country: "US",
107
- },
108
- ],
74
+ ["kJDEP8EaNTEMBDOZzZzT4w", "unique_id", "TINIT-LVLDAA85T50G702B"],
75
+ ["zIAyUFvPfIpE1zBqxI5haQ", "birth_date", "1985-12-10"],
76
+ ["Gr3R3s290OkQUm-NFTu96A", "tax_id_code", "TINIT-LVLDAA85T50G702B"],
77
+ ["GxORalMAelfZ0edFJjjYUw", "given_name", "Ada"],
78
+ ["_vV5RIkl0IOEXKots9kt1w", "family_name", "Lovelace"],
79
+ ["Cj5tccR72Jwrze2TW4a-wg", "iat", 1720010575],
109
80
  ];
110
81
  it("Ensures example data correctness", () => {
111
82
  expect(
@@ -161,8 +132,8 @@ describe("disclose", () => {
161
132
  it("should encode a valid sdjwt (one claim)", async () => {
162
133
  const result = await disclose(token, ["given_name"]);
163
134
  const expected = {
164
- token: `${signed}~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9obiJd`,
165
- paths: [{ claim: "given_name", path: "verified_claims.claims._sd[7]" }],
135
+ token: `${signed}~WyJHeE9SYWxNQWVsZlowZWRGSmpqWVV3IiwiZ2l2ZW5fbmFtZSIsIkFkYSJd`,
136
+ paths: [{ claim: "given_name", path: "verified_claims.claims._sd[3]" }],
166
137
  };
167
138
 
168
139
  expect(result).toEqual(expected);
@@ -176,17 +147,17 @@ describe("disclose", () => {
176
147
  });
177
148
 
178
149
  it("should encode a valid sdjwt (multiple claims)", async () => {
179
- const result = await disclose(token, ["given_name", "email"]);
150
+ const result = await disclose(token, ["iat", "family_name"]);
180
151
  const expected = {
181
- token: `${signed}~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9obiJd~WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VAZXhhbXBsZS5jb20iXQ`,
152
+ token: `${signed}~WyJfdlY1UklrbDBJT0VYS290czlrdDF3IiwiZmFtaWx5X25hbWUiLCJMb3ZlbGFjZSJd~WyJDajV0Y2NSNzJKd3J6ZTJUVzRhLXdnIiwiaWF0IiwxNzIwMDEwNTc1XQ`,
182
153
  paths: [
183
154
  {
184
- claim: "given_name",
185
- path: "verified_claims.claims._sd[7]",
155
+ claim: "iat",
156
+ path: "verified_claims.claims._sd[4]",
186
157
  },
187
158
  {
188
- claim: "email",
189
- path: "verified_claims.verification._sd[0]",
159
+ claim: "family_name",
160
+ path: "verified_claims.claims._sd[0]",
190
161
  },
191
162
  ],
192
163
  };
@@ -8,47 +8,35 @@ describe("SdJwt4VC", () => {
8
8
  typ: "vc+sd-jwt",
9
9
  alg: "RS512",
10
10
  kid: "dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw",
11
- trust_chain: [
12
- "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...",
13
- "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...",
14
- "IkJYdmZybG5oQU11SFIwN2FqVW1B ...",
15
- ],
16
11
  },
17
12
  payload: {
18
- iss: "https://pidprovider.example.org",
19
- sub: "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs...",
20
- jti: "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c",
21
- iat: 1541493724,
22
- exp: 1541493724,
23
- status: "https://pidprovider.example.org/status",
13
+ _sd: [
14
+ "0q1D5Jmav6pQaEh_J_Fcv_uNNMQIgCyhQOxqlY4l3qU",
15
+ "KCJ-AVNv88d-xj6sUIAOJxFnbUh3rHXDKkIH1lFqbRs",
16
+ "M9lo9YxDNIXrAq2qWeiCA40zpJ_zYfFdR_4AEALcRtU",
17
+ "czgjUk0nqRCswShChCjdS6A1-v47d_qTCSFIvIHhMoI",
18
+ "nGnQr7clm3tfTp8yjL_uHrDSOtzR2PVb8S7GeLdAqBQ",
19
+ "xNIVwlpSsaZ8CJSf0gz5x_75VRWWc6V1mlpejdCrqUs",
20
+ ],
21
+ sub: "216f8946-9ecb-4819-9309-c076f34a7e11",
22
+ _sd_alg: "sha-256",
23
+ vct: "PersonIdentificationData",
24
+ iss: "https://pidprovider.example.com",
24
25
  cnf: {
25
26
  jwk: {
26
- kty: "RSA",
27
- use: "sig",
28
- n: "1Ta-sE …",
29
- e: "AQAB",
30
- kid: "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
27
+ kty: "EC",
28
+ crv: "P-256",
29
+ kid: "zEv_qGSL5r0_F67j2dwEgUJmBgbMNSEJ5K_iH1PYc7A",
30
+ x: "0Pj7v_afNp9ETJx11JbYgkI7yQpd0rtiYuo5feuAN2o",
31
+ y: "XB62Um02vHqedkOzSfJ5hdtjPz-zmV9jmWh4sKgdD9o",
31
32
  },
32
33
  },
33
- type: "PersonIdentificationData",
34
- verified_claims: {
35
- verification: {
36
- _sd: ["OGm7ryXgt5Xzlevp-Hu-UTk0a-TxAaPAobqv1pIWMfw"],
37
- trust_framework: "eidas",
38
- assurance_level: "high",
39
- },
40
- claims: {
41
- _sd: [
42
- "8JjozBfovMNvQ3HflmPWy4O19Gpxs61FWHjZebU589E",
43
- "BoMGktW1rbikntw8Fzx_BeL4YbAndr6AHsdgpatFCig",
44
- "CFLGzentGNRFngnLVVQVcoAFi05r6RJUX-rdbLdEfew",
45
- "JU_sTaHCngS32X-0ajHrd1-HCLCkpT5YqgcfQme168w",
46
- "VQI-S1mT1Kxfq2o8J9io7xMMX2MIxaG9M9PeJVqrMcA",
47
- "zVdghcmClMVWlUgGsGpSkCPkEHZ4u9oWj1SlIBlCc1o",
48
- ],
34
+ exp: 1751107255,
35
+ status: {
36
+ status_attestation: {
37
+ credential_hash_alg: "sha-256",
49
38
  },
50
39
  },
51
- _sd_alg: "sha-256",
52
40
  },
53
41
  };
54
42
 
@@ -101,15 +101,9 @@ export const disclose = async (
101
101
 
102
102
  // _sd is defined in verified_claims.claims and verified_claims.verification
103
103
  // we must look into both
104
- if (sdJwt.payload.verified_claims.claims._sd.includes(hash)) {
105
- const index = sdJwt.payload.verified_claims.claims._sd.indexOf(hash);
104
+ if (sdJwt.payload._sd.includes(hash)) {
105
+ const index = sdJwt.payload._sd.indexOf(hash);
106
106
  return { claim, path: `verified_claims.claims._sd[${index}]` };
107
- } else if (
108
- sdJwt.payload.verified_claims.verification._sd.includes(hash)
109
- ) {
110
- const index =
111
- sdJwt.payload.verified_claims.verification._sd.indexOf(hash);
112
- return { claim, path: `verified_claims.verification._sd[${index}]` };
113
107
  }
114
108
 
115
109
  throw new ClaimsNotFoundInToken(claim);
@@ -158,10 +152,7 @@ export const verify = async <S extends z.ZodType<SdJwt4VC>>(
158
152
  await verifyJwt(rawSdJwt, publicKey);
159
153
 
160
154
  //Check disclosures in sd-jwt
161
- const claims = [
162
- ...decoded.sdJwt.payload.verified_claims.verification._sd,
163
- ...decoded.sdJwt.payload.verified_claims.claims._sd,
164
- ];
155
+ const claims = [...decoded.sdJwt.payload._sd];
165
156
 
166
157
  await Promise.all(
167
158
  decoded.disclosures.map(
@@ -39,29 +39,24 @@ export const SdJwt4VC = z.object({
39
39
  typ: z.literal("vc+sd-jwt"),
40
40
  alg: z.string(),
41
41
  kid: z.string().optional(),
42
- trust_chain: z.array(z.string()),
43
42
  }),
44
- payload: z.object({
45
- iss: z.string(),
46
- sub: z.string(),
47
- jti: z.string(),
48
- iat: UnixTime,
49
- exp: UnixTime,
50
- status: z.string(),
51
- cnf: z.object({
52
- jwk: JWK,
53
- }),
54
- type: z.string(),
55
- verified_claims: z.object({
56
- verification: z.intersection(
57
- z.object({
58
- trust_framework: z.literal("eidas"),
59
- assurance_level: z.string(),
43
+ payload: z.intersection(
44
+ z.object({
45
+ iss: z.string(),
46
+ sub: z.string(),
47
+ iat: UnixTime.optional(),
48
+ exp: UnixTime,
49
+ _sd_alg: z.literal("sha-256"),
50
+ status: z.object({
51
+ status_attestation: z.object({
52
+ credential_hash_alg: z.literal("sha-256"),
60
53
  }),
61
- ObfuscatedDisclosures
62
- ),
63
- claims: ObfuscatedDisclosures,
54
+ }),
55
+ cnf: z.object({
56
+ jwk: JWK,
57
+ }),
58
+ vct: z.string(),
64
59
  }),
65
- _sd_alg: z.literal("sha-256"),
66
- }),
60
+ ObfuscatedDisclosures
61
+ ),
67
62
  });
@@ -18,38 +18,48 @@ const RelyingPartyMetadata = z.object({
18
18
  // instruct the Wallet Solution on how to render the credential correctly
19
19
  type CredentialDisplayMetadata = z.infer<typeof CredentialDisplayMetadata>;
20
20
  const CredentialDisplayMetadata = z.object({
21
+ name: z.string(),
22
+ locale: z.string(),
23
+ logo: z
24
+ .object({
25
+ url: z.string(),
26
+ alt_text: z.string(),
27
+ })
28
+ .optional(), // TODO [SIW-1268]: should not be optional
29
+ background_color: z.string().optional(), // TODO [SIW-1268]: should not be optional
30
+ text_color: z.string().optional(), // TODO [SIW-1268]: should not be optional
31
+ });
32
+
33
+ // Metadata for displaying issuer information
34
+ type CredentialIssuerDisplayMetadata = z.infer<
35
+ typeof CredentialIssuerDisplayMetadata
36
+ >;
37
+ const CredentialIssuerDisplayMetadata = z.object({
21
38
  name: z.string(),
22
39
  locale: z.string(),
23
40
  logo: z.object({
24
41
  url: z.string(),
25
42
  alt_text: z.string(),
26
43
  }),
27
- background_color: z.string(),
28
- text_color: z.string(),
29
44
  });
30
45
 
31
- type CredentialDefinitionMetadata = z.infer<
32
- typeof CredentialDefinitionMetadata
33
- >;
34
- const CredentialDefinitionMetadata = z.object({
35
- type: z.array(z.string()),
36
- credentialSubject: z.record(
37
- z.object({
38
- mandatory: z.boolean(),
39
- display: z.array(z.object({ name: z.string(), locale: z.string() })),
40
- })
41
- ),
42
- });
46
+ type ClaimsMetadata = z.infer<typeof ClaimsMetadata>;
47
+ const ClaimsMetadata = z.record(
48
+ z.object({
49
+ value_type: z.string(),
50
+ display: z.array(z.object({ name: z.string(), locale: z.string() })),
51
+ })
52
+ );
43
53
 
44
54
  // Metadata for a credentia which i supported by a Issuer
45
55
  type SupportedCredentialMetadata = z.infer<typeof SupportedCredentialMetadata>;
46
56
  const SupportedCredentialMetadata = z.object({
47
- id: z.string(),
48
57
  format: z.union([z.literal("vc+sd-jwt"), z.literal("vc+mdoc-cbor")]),
49
- cryptographic_binding_methods_supported: z.array(z.string()),
50
- cryptographic_suites_supported: z.array(z.string()),
58
+ scope: z.string(),
51
59
  display: z.array(CredentialDisplayMetadata),
52
- credential_definition: CredentialDefinitionMetadata,
60
+ claims: ClaimsMetadata,
61
+ cryptographic_binding_methods_supported: z.array(z.string()),
62
+ credential_signing_alg_values_supported: z.array(z.string()),
53
63
  });
54
64
 
55
65
  export type EntityStatement = z.infer<typeof EntityStatement>;
@@ -101,19 +111,19 @@ const BaseEntityConfiguration = z.object({
101
111
  header: EntityConfigurationHeader,
102
112
  payload: z
103
113
  .object({
104
- exp: UnixTime,
105
- iat: UnixTime,
106
114
  iss: z.string(),
107
115
  sub: z.string(),
108
- jwks: z.object({
109
- keys: z.array(JWK),
110
- }),
116
+ iat: UnixTime,
117
+ exp: UnixTime,
118
+ authority_hints: z.array(z.string()).optional(),
111
119
  metadata: z
112
120
  .object({
113
121
  federation_entity: FederationEntityMetadata,
114
122
  })
115
123
  .passthrough(),
116
- authority_hints: z.array(z.string()).optional(),
124
+ jwks: z.object({
125
+ keys: z.array(JWK),
126
+ }),
117
127
  })
118
128
  .passthrough(),
119
129
  });
@@ -135,18 +145,42 @@ export const CredentialIssuerEntityConfiguration = BaseEntityConfiguration.and(
135
145
  metadata: z.object({
136
146
  openid_credential_issuer: z.object({
137
147
  credential_issuer: z.string(),
148
+ credential_endpoint: z.string(),
149
+ revocation_endpoint: z.string(),
150
+ status_attestation_endpoint: z.string(),
151
+ display: z.array(CredentialIssuerDisplayMetadata),
152
+ credential_configurations_supported: z.record(
153
+ SupportedCredentialMetadata
154
+ ),
155
+ jwks: z.object({ keys: z.array(JWK) }),
156
+ }),
157
+ oauth_authorization_server: z.object({
138
158
  authorization_endpoint: z.string(),
139
- token_endpoint: z.string(),
140
159
  pushed_authorization_request_endpoint: z.string(),
141
- dpop_signing_alg_values_supported: z.array(z.string()),
142
- credential_endpoint: z.string(),
143
- credentials_supported: z.array(SupportedCredentialMetadata),
160
+ dpop_signing_alg_values_supported: z.array(z.string()).optional(), // TODO [SIW-1268]: should not be optional
161
+ token_endpoint: z.string(),
162
+ introspection_endpoint: z.string().optional(), // TODO [SIW-1268]: should not be optional
163
+ client_registration_types_supported: z.array(z.string()),
164
+ code_challenge_methods_supported: z.array(z.string()),
165
+ authorization_details_types_supported: z.array(z.string()).optional(), // TODO [SIW-1268]: should not be optional,
166
+ acr_values_supported: z.array(z.string()),
167
+ grant_types_supported: z.array(z.string()),
168
+ issuer: z.string(),
144
169
  jwks: z.object({ keys: z.array(JWK) }),
170
+ scopes_supported: z.array(z.string()),
171
+ request_parameter_supported: z.boolean().optional(), // TODO [SIW-1268]: should not be optional
172
+ request_uri_parameter_supported: z.boolean().optional(), // TODO [SIW-1268]: should not be optional
173
+ response_types_supported: z.array(z.string()).optional(), // TODO [SIW-1268]: should not be optional
174
+ response_modes_supported: z.array(z.string()),
175
+ subject_types_supported: z.array(z.string()).optional(), // TODO [SIW-1268]: should not be optional
176
+ token_endpoint_auth_methods_supported: z.array(z.string()),
177
+ token_endpoint_auth_signing_alg_values_supported: z.array(z.string()),
178
+ request_object_signing_alg_values_supported: z.array(z.string()),
145
179
  }),
146
180
  /** Credential Issuers act as Relying Party
147
181
  when they require the presentation of other credentials.
148
182
  This does not apply for PID issuance, which requires CIE authz. */
149
- wallet_relying_party: RelyingPartyMetadata.optional(),
183
+ openid_relying_party: RelyingPartyMetadata.optional(),
150
184
  }),
151
185
  }),
152
186
  })
@@ -177,9 +211,7 @@ export const WalletProviderEntityConfiguration = BaseEntityConfiguration.and(
177
211
  wallet_provider: z
178
212
  .object({
179
213
  token_endpoint: z.string(),
180
- attested_security_context_values_supported: z
181
- .array(z.string())
182
- .optional(),
214
+ aal_values_supported: z.array(z.string()).optional(),
183
215
  grant_types_supported: z.array(z.string()),
184
216
  token_endpoint_auth_methods_supported: z.array(z.string()),
185
217
  token_endpoint_auth_signing_alg_values_supported: z.array(
@@ -0,0 +1,37 @@
1
+ import * as z from "zod";
2
+
3
+ /**
4
+ * Context for authorization during the {@link 03-start-user-authorization.ts} phase.
5
+ * It consists of a single method to identify the user which takes a URL and a redirect schema as input.
6
+ * Once the authorization is completed and the URL calls the redirect schema, the method should return the redirect URL.
7
+ */
8
+ export interface AuthorizationContext {
9
+ authorize: (url: string, redirectSchema: string) => Promise<string>;
10
+ }
11
+
12
+ /**
13
+ * The result of the identification process.
14
+ */
15
+ export const AuthorizationResultShape = z.object({
16
+ code: z.string(),
17
+ state: z.string(),
18
+ iss: z.string().optional(),
19
+ });
20
+
21
+ /**
22
+ * The error of the identification process.
23
+ * It follows the OAuth/OIDC error response format.
24
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthError
25
+ * @see https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1
26
+ */
27
+ export const AuthorizationErrorShape = z.object({
28
+ error: z.string(), // not enforcing the error code format
29
+ error_description: z.string().optional(),
30
+ error_uri: z.string().optional(),
31
+ state: z.string().optional(),
32
+ });
33
+
34
+ /**
35
+ * Type of the identification result.
36
+ */
37
+ export type AuthorizationResult = z.infer<typeof AuthorizationResultShape>;
@@ -251,13 +251,97 @@ export class WalletProviderResponseError extends IoWalletError {
251
251
  /** Reason code for the validation failure. */
252
252
  reason: string;
253
253
 
254
+ /** HTTP status code */
255
+ statusCode: number;
256
+
254
257
  constructor(
255
258
  message: string,
256
259
  claim: string = "unspecified",
257
- reason: string = "unspecified"
260
+ reason: string = "unspecified",
261
+ statusCode: number
258
262
  ) {
263
+ super(
264
+ serializeAttrs({
265
+ message,
266
+ claim,
267
+ reason,
268
+ statusCode: statusCode.toString(),
269
+ })
270
+ );
271
+ this.claim = claim;
272
+ this.reason = reason;
273
+ this.statusCode = statusCode;
274
+ }
275
+ }
276
+
277
+ export class WalletInstanceRevokedError extends IoWalletError {
278
+ static get code(): "ERR_IO_WALLET_INSTANCE_REVOKED" {
279
+ return "ERR_IO_WALLET_INSTANCE_REVOKED";
280
+ }
281
+
282
+ code = "ERR_IO_WALLET_INSTANCE_REVOKED";
283
+
284
+ claim: string;
285
+ reason: string;
286
+
287
+ constructor(message: string, claim: string, reason: string = "unspecified") {
259
288
  super(serializeAttrs({ message, claim, reason }));
289
+ this.reason = reason;
260
290
  this.claim = claim;
291
+ }
292
+ }
293
+
294
+ export class WalletInstanceNotFoundError extends IoWalletError {
295
+ static get code(): "ERR_IO_WALLET_INSTANCE_NOT_FOUND" {
296
+ return "ERR_IO_WALLET_INSTANCE_NOT_FOUND";
297
+ }
298
+
299
+ code = "ERR_IO_WALLET_INSTANCE_NOT_FOUND";
300
+
301
+ claim: string;
302
+ reason: string;
303
+
304
+ constructor(message: string, claim: string, reason: string = "unspecified") {
305
+ super(serializeAttrs({ message, claim, reason }));
261
306
  this.reason = reason;
307
+ this.claim = claim;
308
+ }
309
+ }
310
+
311
+ /**
312
+ * An error subclass thrown when an error occurs during the authorization process.
313
+ */
314
+ export class AuthorizationError extends IoWalletError {
315
+ static get code(): "ERR_IO_WALLET_AUTHORIZATION_ERROR" {
316
+ return "ERR_IO_WALLET_AUTHORIZATION_ERROR";
317
+ }
318
+
319
+ code = "ERR_IO_WALLET_AUTHORIZATION_ERROR";
320
+
321
+ constructor(message?: string) {
322
+ super(message);
323
+ }
324
+ }
325
+
326
+ /**
327
+ * An error subclass thrown when an error occurs during the authorization process with the IDP.
328
+ * It contains the error and error description returned by the IDP.
329
+ */
330
+ export class AuthorizationIdpError extends IoWalletError {
331
+ static get code(): "ERR_IO_WALLET_IDENTIFICATION_RESPONSE_ERROR" {
332
+ return "ERR_IO_WALLET_IDENTIFICATION_RESPONSE_ERROR";
333
+ }
334
+
335
+ code = "ERR_IO_WALLET_IDENTIFICATION_RESPONSE_PARSING_FAILED";
336
+
337
+ error: string;
338
+ errorDescription?: string;
339
+
340
+ constructor(error: string, errorDescription?: string) {
341
+ super(
342
+ serializeAttrs(errorDescription ? { error, errorDescription } : { error })
343
+ );
344
+ this.error = error;
345
+ this.errorDescription = errorDescription;
262
346
  }
263
347
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Interface for the integrity context which provides the necessary functions to interact with the integrity service.
3
3
  * The functions are platform specific and must be implemented in the platform specific code.
4
- * getHardwareKeyTag: returns the hardware key tag.
4
+ * getHardwareKeyTag: returns the hardware key tag in a url safe format (e.g. base64url).
5
5
  * getAttestation: requests the attestation from the integrity service.
6
6
  * getHardwareSignatureWithAuthData: signs the clientData and returns the signature with the authenticator data.
7
7
  */