@pagopa/io-react-native-wallet 2.0.0-next.4 → 2.0.0-next.5

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 (69) hide show
  1. package/lib/commonjs/credential/issuance/07-verify-and-parse-credential.js +3 -3
  2. package/lib/commonjs/credential/issuance/07-verify-and-parse-credential.js.map +1 -1
  3. package/lib/commonjs/credential/status/{02-status-attestation.js → 02-status-assertion.js} +28 -22
  4. package/lib/commonjs/credential/status/02-status-assertion.js.map +1 -0
  5. package/lib/commonjs/credential/status/03-verify-and-parse-status-assertion.js +85 -0
  6. package/lib/commonjs/credential/status/03-verify-and-parse-status-assertion.js.map +1 -0
  7. package/lib/commonjs/credential/status/README.md +22 -20
  8. package/lib/commonjs/credential/status/index.js +6 -6
  9. package/lib/commonjs/credential/status/index.js.map +1 -1
  10. package/lib/commonjs/credential/status/types.js +48 -15
  11. package/lib/commonjs/credential/status/types.js.map +1 -1
  12. package/lib/commonjs/utils/credentials.js +33 -0
  13. package/lib/commonjs/utils/credentials.js.map +1 -0
  14. package/lib/commonjs/utils/crypto.js +1 -7
  15. package/lib/commonjs/utils/crypto.js.map +1 -1
  16. package/lib/commonjs/utils/jwk.js +12 -0
  17. package/lib/commonjs/utils/jwk.js.map +1 -1
  18. package/lib/module/credential/issuance/07-verify-and-parse-credential.js +4 -4
  19. package/lib/module/credential/issuance/07-verify-and-parse-credential.js.map +1 -1
  20. package/lib/module/credential/status/{02-status-attestation.js → 02-status-assertion.js} +28 -22
  21. package/lib/module/credential/status/02-status-assertion.js.map +1 -0
  22. package/lib/module/credential/status/03-verify-and-parse-status-assertion.js +78 -0
  23. package/lib/module/credential/status/03-verify-and-parse-status-assertion.js.map +1 -0
  24. package/lib/module/credential/status/README.md +22 -20
  25. package/lib/module/credential/status/index.js +3 -3
  26. package/lib/module/credential/status/index.js.map +1 -1
  27. package/lib/module/credential/status/types.js +43 -12
  28. package/lib/module/credential/status/types.js.map +1 -1
  29. package/lib/module/utils/credentials.js +26 -0
  30. package/lib/module/utils/credentials.js.map +1 -0
  31. package/lib/module/utils/crypto.js +2 -8
  32. package/lib/module/utils/crypto.js.map +1 -1
  33. package/lib/module/utils/jwk.js +11 -1
  34. package/lib/module/utils/jwk.js.map +1 -1
  35. package/lib/typescript/credential/issuance/07-verify-and-parse-credential.d.ts.map +1 -1
  36. package/lib/typescript/credential/status/02-status-assertion.d.ts +23 -0
  37. package/lib/typescript/credential/status/02-status-assertion.d.ts.map +1 -0
  38. package/lib/typescript/credential/status/03-verify-and-parse-status-assertion.d.ts +21 -0
  39. package/lib/typescript/credential/status/03-verify-and-parse-status-assertion.d.ts.map +1 -0
  40. package/lib/typescript/credential/status/index.d.ts +4 -4
  41. package/lib/typescript/credential/status/index.d.ts.map +1 -1
  42. package/lib/typescript/credential/status/types.d.ts +495 -18
  43. package/lib/typescript/credential/status/types.d.ts.map +1 -1
  44. package/lib/typescript/utils/credentials.d.ts +11 -0
  45. package/lib/typescript/utils/credentials.d.ts.map +1 -0
  46. package/lib/typescript/utils/crypto.d.ts.map +1 -1
  47. package/lib/typescript/utils/jwk.d.ts +7 -0
  48. package/lib/typescript/utils/jwk.d.ts.map +1 -1
  49. package/package.json +1 -1
  50. package/src/credential/issuance/07-verify-and-parse-credential.ts +4 -6
  51. package/src/credential/status/{02-status-attestation.ts → 02-status-assertion.ts} +37 -28
  52. package/src/credential/status/03-verify-and-parse-status-assertion.ts +109 -0
  53. package/src/credential/status/README.md +22 -20
  54. package/src/credential/status/index.ts +7 -14
  55. package/src/credential/status/types.ts +62 -15
  56. package/src/utils/credentials.ts +29 -0
  57. package/src/utils/crypto.ts +12 -20
  58. package/src/utils/jwk.ts +15 -1
  59. package/lib/commonjs/credential/status/02-status-attestation.js.map +0 -1
  60. package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js +0 -55
  61. package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js.map +0 -1
  62. package/lib/module/credential/status/02-status-attestation.js.map +0 -1
  63. package/lib/module/credential/status/03-verify-and-parse-status-attestation.js +0 -49
  64. package/lib/module/credential/status/03-verify-and-parse-status-attestation.js.map +0 -1
  65. package/lib/typescript/credential/status/02-status-attestation.d.ts +0 -19
  66. package/lib/typescript/credential/status/02-status-attestation.d.ts.map +0 -1
  67. package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts +0 -24
  68. package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts.map +0 -1
  69. package/src/credential/status/03-verify-and-parse-status-attestation.ts +0 -70
@@ -1,8 +1,8 @@
1
1
  import { IoWalletError } from "../../utils/errors";
2
- import { SdJwt4VC } from "../../sd-jwt/types";
3
- import { verify as verifySdJwt } from "../../sd-jwt";
2
+ import { SdJwt4VC, verify as verifySdJwt } from "../../sd-jwt";
4
3
  import { getValueFromDisclosures } from "../../sd-jwt/converters";
5
- import { LogLevel, Logger } from "../../utils/logging";
4
+ import { isSameThumbprint } from "../../utils/jwk";
5
+ import { Logger, LogLevel } from "../../utils/logging";
6
6
 
7
7
  // The credential as a collection of attributes in plain value
8
8
 
@@ -120,7 +120,7 @@ async function verifyCredentialSdJwt(rawCredential, issuerKeys, holderBindingCon
120
120
  const {
121
121
  cnf
122
122
  } = decodedCredential.sdJwt.payload;
123
- if (!cnf.jwk.kid || cnf.jwk.kid !== holderBindingKey.kid) {
123
+ if (!(await isSameThumbprint(cnf.jwk, holderBindingKey))) {
124
124
  const message = `Failed to verify holder binding, expected kid: ${holderBindingKey.kid}, got: ${decodedCredential.sdJwt.payload.cnf.jwk.kid}`;
125
125
  Logger.log(LogLevel.ERROR, message);
126
126
  throw new IoWalletError(message);
@@ -1 +1 @@
1
- {"version":3,"names":["IoWalletError","SdJwt4VC","verify","verifySdJwt","getValueFromDisclosures","LogLevel","Logger","parseCredentialSdJwt","credentialConfig","_ref","sdJwt","disclosures","ignoreMissingAttributes","arguments","length","undefined","includeUndefinedAttributes","format","header","typ","message","log","ERROR","claims","attrDefinitions","attrsNotInDisclosures","filter","definition","some","_ref2","name","path","missing","map","_","join","received","definedValues","Object","fromEntries","_ref3","_disclosures$find","value","find","_ref4","attrKey","display","reduce","names","_ref5","locale","undefinedValues","keys","includes","_ref6","key","verifyCredentialSdJwt","rawCredential","issuerKeys","holderBindingContext","decodedCredential","holderBindingKey","Promise","all","getPublicKey","cnf","payload","jwk","kid","verifyAndParseCredentialSdJwt","issuerConf","credential","credentialConfigurationId","_ref7","credentialCryptoContext","decoded","openid_credential_issuer","jwks","DEBUG","JSON","stringify","credential_configurations_supported","parsedCredential","maybeIssuedAt","expiration","Date","exp","issuedAt","verifyAndParseCredential","context","_issuerConf$openid_cr"],"sourceRoot":"../../../../src","sources":["credential/issuance/07-verify-and-parse-credential.ts"],"mappings":"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"}
1
+ {"version":3,"names":["IoWalletError","SdJwt4VC","verify","verifySdJwt","getValueFromDisclosures","isSameThumbprint","Logger","LogLevel","parseCredentialSdJwt","credentialConfig","_ref","sdJwt","disclosures","ignoreMissingAttributes","arguments","length","undefined","includeUndefinedAttributes","format","header","typ","message","log","ERROR","claims","attrDefinitions","attrsNotInDisclosures","filter","definition","some","_ref2","name","path","missing","map","_","join","received","definedValues","Object","fromEntries","_ref3","_disclosures$find","value","find","_ref4","attrKey","display","reduce","names","_ref5","locale","undefinedValues","keys","includes","_ref6","key","verifyCredentialSdJwt","rawCredential","issuerKeys","holderBindingContext","decodedCredential","holderBindingKey","Promise","all","getPublicKey","cnf","payload","jwk","kid","verifyAndParseCredentialSdJwt","issuerConf","credential","credentialConfigurationId","_ref7","credentialCryptoContext","decoded","openid_credential_issuer","jwks","DEBUG","JSON","stringify","credential_configurations_supported","parsedCredential","maybeIssuedAt","expiration","Date","exp","issuedAt","verifyAndParseCredential","context","_issuerConf$openid_cr"],"sourceRoot":"../../../../src","sources":["credential/issuance/07-verify-and-parse-credential.ts"],"mappings":"AAGA,SAASA,aAAa,QAAQ,oBAAoB;AAClD,SAASC,QAAQ,EAAEC,MAAM,IAAIC,WAAW,QAAQ,cAAc;AAC9D,SAASC,uBAAuB,QAAQ,yBAAyB;AACjE,SAASC,gBAAgB,QAAkB,iBAAiB;AAE5D,SAASC,MAAM,EAAEC,QAAQ,QAAQ,qBAAqB;;AA2BtD;;AAkBA;;AAKA,MAAMC,oBAAoB,GAAG,SAAAA,CAE3BC,gBAAgC,EAAAC,IAAA,EAIX;EAAA,IAHrB;IAAEC,KAAK;IAAEC;EAAoC,CAAC,GAAAF,IAAA;EAAA,IAC9CG,uBAAgC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAAA,IACxCG,0BAAmC,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAE3C,IAAIL,gBAAgB,CAACS,MAAM,KAAKP,KAAK,CAACQ,MAAM,CAACC,GAAG,EAAE;IAChD,MAAMC,OAAO,GAAI,gEAA+DZ,gBAAgB,CAACS,MAAO,gBAAeP,KAAK,CAACQ,MAAM,CAACC,GAAI,GAAE;IAC1Id,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACgB,KAAK,EAAEF,OAAO,CAAC;IACnC,MAAM,IAAIrB,aAAa,CAACqB,OAAO,CAAC;EAClC;EAEA,IAAI,CAACZ,gBAAgB,CAACe,MAAM,EAAE;IAC5BlB,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACgB,KAAK,EAAE,0CAA0C,CAAC;IACtE,MAAM,IAAIvB,aAAa,CAAC,0CAA0C,CAAC,CAAC,CAAC;EACvE;;EACA,MAAMyB,eAAe,GAAGhB,gBAAgB,CAACe,MAAM;;EAE/C;EACA,MAAME,qBAAqB,GAAGD,eAAe,CAACE,MAAM,CACjDC,UAAU,IAAK,CAAChB,WAAW,CAACiB,IAAI,CAACC,KAAA;IAAA,IAAC,GAAGC,IAAI,CAAC,GAAAD,KAAA;IAAA,OAAKC,IAAI,KAAKH,UAAU,CAACI,IAAI,CAAC,CAAC,CAAC;EAAA,EAAC,CAAC;EAC/E,CAAC;;EACD,IAAIN,qBAAqB,CAACX,MAAM,GAAG,CAAC,EAAE;IACpC,MAAMkB,OAAO,GAAGP,qBAAqB,CAACQ,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC,CAAC,CAACI,IAAI,CAAC,IAAI,CAAC;IACtE,MAAMC,QAAQ,GAAGzB,WAAW,CAACsB,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACnE,IAAI,CAACvB,uBAAuB,EAAE;MAC5B,MAAMQ,OAAO,GAAI,4DAA2DY,OAAQ,iBAAgBI,QAAS,GAAE;MAC/G/B,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACgB,KAAK,EAAEF,OAAO,CAAC;MACnC,MAAM,IAAIrB,aAAa,CAACqB,OAAO,CAAC;IAClC;EACF;;EAEA;EACA;EACA,MAAMiB,aAAa,GAAGC,MAAM,CAACC,WAAW,CACtCf;EACE;EAAA,CACCS,GAAG,CACFO,KAAA;IAAA,IAAAC,iBAAA;IAAA,IAAC;MAAEV,IAAI;MAAE,GAAGJ;IAAW,CAAC,GAAAa,KAAA;IAAA,OACtB,CACET,IAAI,CAAC,CAAC,CAAC,EACP;MACE,GAAGJ,UAAU;MACbe,KAAK,GAAAD,iBAAA,GAAE9B,WAAW,CAACgC,IAAI,CACpBT,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,WAAW,KAAKH,IAAI,CAAC,CAAC,CACnC,CAAC,cAAAU,iBAAA,uBAFMA,iBAAA,CAEH,CAAC,CAAC;IACR,CAAC,CACF;EAAA,CACL;EACA;EACA;EAAA,CACCR,GAAG,CACFW,KAAA;IAAA,IAAC,CAACC,OAAO,EAAE;MAAEC,OAAO;MAAE,GAAGnB;IAAW,CAAC,CAAC,GAAAiB,KAAA;IAAA,OACpC,CACEC,OAAO,EACP;MACE,GAAGlB,UAAU;MACbG,IAAI,EAAEgB,OAAO,CAACC,MAAM,CAClB,CAACC,KAAK,EAAAC,KAAA;QAAA,IAAE;UAAEC,MAAM;UAAEpB;QAAK,CAAC,GAAAmB,KAAA;QAAA,OAAM;UAAE,GAAGD,KAAK;UAAE,CAACE,MAAM,GAAGpB;QAAK,CAAC;MAAA,CAAC,EAC3D,CAAC,CACH;IACF,CAAC,CACF;EAAA,CACL,CACJ,CAAC;EAED,IAAId,0BAA0B,EAAE;IAC9B;IACA;IACA,MAAMmC,eAAe,GAAGb,MAAM,CAACC,WAAW,CACxC5B,WAAW,CACRe,MAAM,CAAEQ,CAAC,IAAK,CAACI,MAAM,CAACc,IAAI,CAACf,aAAa,CAAC,CAACgB,QAAQ,CAACnB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzDD,GAAG,CAACqB,KAAA;MAAA,IAAC,GAAGC,GAAG,EAAEb,KAAK,CAAC,GAAAY,KAAA;MAAA,OAAK,CAACC,GAAG,EAAE;QAAEb,KAAK;QAAEZ,IAAI,EAAEyB;MAAI,CAAC,CAAC;IAAA,EACxD,CAAC;IACD,OAAO;MACL,GAAGlB,aAAa;MAChB,GAAGc;IACL,CAAC;EACH;EAEA,OAAOd,aAAa;AACtB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAemB,qBAAqBA,CAClCC,aAAqB,EACrBC,UAAiB,EACjBC,oBAAmC,EACF;EACjC,MAAM,CAACC,iBAAiB,EAAEC,gBAAgB,CAAC;EACzC;EACA,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChB7D,WAAW,CAACuD,aAAa,EAAEC,UAAU,EAAE1D,QAAQ,CAAC,EAChD2D,oBAAoB,CAACK,YAAY,CAAC,CAAC,CACpC,CAAC;EAEJ,MAAM;IAAEC;EAAI,CAAC,GAAGL,iBAAiB,CAAClD,KAAK,CAACwD,OAAO;EAC/C,IAAI,EAAE,MAAM9D,gBAAgB,CAAC6D,GAAG,CAACE,GAAG,EAAEN,gBAAuB,CAAC,CAAC,EAAE;IAC/D,MAAMzC,OAAO,GAAI,kDAAiDyC,gBAAgB,CAACO,GAAI,UAASR,iBAAiB,CAAClD,KAAK,CAACwD,OAAO,CAACD,GAAG,CAACE,GAAG,CAACC,GAAI,EAAC;IAC7I/D,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACgB,KAAK,EAAEF,OAAO,CAAC;IACnC,MAAM,IAAIrB,aAAa,CAACqB,OAAO,CAAC;EAClC;EAEA,OAAOwC,iBAAiB;AAC1B;AAEA,MAAMS,6BAAuD,GAAG,MAAAA,CAC9DC,UAAU,EACVC,UAAU,EACVC,yBAAyB,EAAAC,KAAA,KAMtB;EAAA,IALH;IACEC,uBAAuB;IACvB9D,uBAAuB;IACvBI;EACF,CAAC,GAAAyD,KAAA;EAED,MAAME,OAAO,GAAG,MAAMnB,qBAAqB,CACzCe,UAAU,EACVD,UAAU,CAACM,wBAAwB,CAACC,IAAI,CAACzB,IAAI,EAC7CsB,uBACF,CAAC;EAEDrE,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACwE,KAAK,EAAG,uBAAsBC,IAAI,CAACC,SAAS,CAACL,OAAO,CAAE,EAAC,CAAC;EAE5E,MAAMnE,gBAAgB,GACpB8D,UAAU,CAACM,wBAAwB,CAACK,mCAAmC,CACrET,yBAAyB,CAC1B;EAEH,IAAI,CAAChE,gBAAgB,EAAE;IACrBH,MAAM,CAACgB,GAAG,CACRf,QAAQ,CAACgB,KAAK,EACb,gDAA+CkD,yBAA0B,EAC5E,CAAC;IACD,MAAM,IAAIzE,aAAa,CAAC,6CAA6C,CAAC;EACxE;EAEA,MAAMmF,gBAAgB,GAAG3E,oBAAoB,CAC3CC,gBAAgB,EAChBmE,OAAO,EACP/D,uBAAuB,EACvBI,0BACF,CAAC;EACD,MAAMmE,aAAa,GAAGhF,uBAAuB,CAACwE,OAAO,CAAChE,WAAW,EAAE,KAAK,CAAC;EAEzEN,MAAM,CAACgB,GAAG,CACRf,QAAQ,CAACwE,KAAK,EACb,sBAAqBC,IAAI,CAACC,SAAS,CAACE,gBAAgB,CAAE,gBAAeC,aAAc,EACtF,CAAC;EAED,OAAO;IACLD,gBAAgB;IAChBE,UAAU,EAAE,IAAIC,IAAI,CAACV,OAAO,CAACjE,KAAK,CAACwD,OAAO,CAACoB,GAAG,GAAG,IAAI,CAAC;IACtDC,QAAQ,EACN,OAAOJ,aAAa,KAAK,QAAQ,GAC7B,IAAIE,IAAI,CAACF,aAAa,GAAG,IAAI,CAAC,GAC9BpE;EACR,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMyE,wBAAkD,GAAG,MAAAA,CAChElB,UAAU,EACVC,UAAU,EACVC,yBAAyB,EACzBiB,OAAO,KACJ;EAAA,IAAAC,qBAAA;EACH,MAAMzE,MAAM,IAAAyE,qBAAA,GACVpB,UAAU,CAACM,wBAAwB,CAACK,mCAAmC,CACrET,yBAAyB,CAC1B,cAAAkB,qBAAA,uBAFDA,qBAAA,CAEGzE,MAAM;EAEX,IAAIA,MAAM,KAAK,WAAW,EAAE;IAC1BZ,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACwE,KAAK,EAAE,wCAAwC,CAAC;IACpE,OAAOT,6BAA6B,CAClCC,UAAU,EACVC,UAAU,EACVC,yBAAyB,EACzBiB,OACF,CAAC;EACH;EAEA,MAAMrE,OAAO,GAAI,kCAAiCH,MAAO,EAAC;EAC1DZ,MAAM,CAACgB,GAAG,CAACf,QAAQ,CAACgB,KAAK,EAAEF,OAAO,CAAC;EACnC,MAAM,IAAIrB,aAAa,CAACqB,OAAO,CAAC;AAClC,CAAC"}
@@ -1,36 +1,44 @@
1
1
  import { getCredentialHashWithouDiscloures, hasStatusOrThrow } from "../../utils/misc";
2
2
  import { SignJWT } from "@pagopa/io-react-native-jwt";
3
3
  import { v4 as uuidv4 } from "uuid";
4
- import { StatusAttestationResponse } from "./types";
4
+ import { StatusAssertionResponse } from "./types";
5
5
  import { IssuerResponseError, IssuerResponseErrorCodes, ResponseErrorBuilder, UnexpectedStatusCodeError } from "../../utils/errors";
6
- import { LogLevel, Logger } from "../../utils/logging";
6
+ import { Logger, LogLevel } from "../../utils/logging";
7
+ import { extractJwkFromCredential } from "../../utils/credentials";
7
8
  /**
8
- * WARNING: This function must be called after {@link startFlow}.
9
- * Verify the status of the credential attestation.
9
+ * Get the status assertion of a digital credential.
10
10
  * @param issuerConf - The issuer's configuration
11
11
  * @param credential - The credential to be verified
12
- * @param credentialCryptoContext - The credential's crypto context
12
+ * @param format - The format of the credential, e.g. "sd-jwt"
13
+ * @param context.credentialCryptoContext - The credential's crypto context
14
+ * @param context.wiaCryptoContext - The Wallet Attestation's crypto context
13
15
  * @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
14
16
  * @throws {IssuerResponseError} with a specific code for more context
15
- * @returns The credential status attestation
17
+ * @returns The credential status assertion
16
18
  */
17
- export const statusAttestation = async function (issuerConf, credential, credentialCryptoContext) {
18
- let appFetch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : fetch;
19
- const jwk = await credentialCryptoContext.getPublicKey();
19
+ export const statusAssertion = async (issuerConf, credential, format, ctx) => {
20
+ const {
21
+ credentialCryptoContext,
22
+ wiaCryptoContext,
23
+ appFetch = fetch
24
+ } = ctx;
25
+ const jwk = await extractJwkFromCredential(credential, format);
26
+ const issuerJwk = await wiaCryptoContext.getPublicKey();
20
27
  const credentialHash = await getCredentialHashWithouDiscloures(credential);
21
28
  const statusAttUrl = issuerConf.openid_credential_issuer.status_attestation_endpoint;
22
29
  const credentialPop = await new SignJWT(credentialCryptoContext).setPayload({
30
+ iss: issuerJwk.kid,
23
31
  aud: statusAttUrl,
24
32
  jti: uuidv4().toString(),
25
33
  credential_hash: credentialHash,
26
- credential_hash_alg: "S256"
34
+ credential_hash_alg: "sha-256"
27
35
  }).setProtectedHeader({
28
36
  alg: "ES256",
29
- typ: "status-attestation-request+jwt",
37
+ typ: "status-assertion-request+jwt",
30
38
  kid: jwk.kid
31
39
  }).setIssuedAt().setExpirationTime("5m").sign();
32
40
  const body = {
33
- credential_pop: credentialPop
41
+ status_assertion_requests: [credentialPop]
34
42
  };
35
43
  Logger.log(LogLevel.DEBUG, `Credential pop: ${credentialPop}`);
36
44
  const result = await appFetch(statusAttUrl, {
@@ -39,28 +47,26 @@ export const statusAttestation = async function (issuerConf, credential, credent
39
47
  "Content-Type": "application/json"
40
48
  },
41
49
  body: JSON.stringify(body)
42
- }).then(hasStatusOrThrow(201)).then(raw => raw.json()).then(json => StatusAttestationResponse.parse(json)).catch(handleStatusAttestationError);
50
+ }).then(hasStatusOrThrow(200)).then(raw => raw.json()).then(json => StatusAssertionResponse.parse(json)).catch(handleStatusAssertionError);
51
+ const [statusAttestationJwt] = result.status_assertion_responses;
43
52
  return {
44
- statusAttestation: result.status_attestation
53
+ statusAssertion: statusAttestationJwt
45
54
  };
46
55
  };
47
56
 
48
57
  /**
49
- * Handle the status attestation error by mapping it to a custom exception.
58
+ * Handle the status assertion error by mapping it to a custom exception.
50
59
  * If the error is not an instance of {@link UnexpectedStatusCodeError}, it is thrown as is.
51
60
  * @param e - The error to be handled
52
61
  * @throws {IssuerResponseError} with a specific code for more context
53
62
  */
54
- const handleStatusAttestationError = e => {
63
+ const handleStatusAssertionError = e => {
55
64
  if (!(e instanceof UnexpectedStatusCodeError)) {
56
65
  throw e;
57
66
  }
58
- throw new ResponseErrorBuilder(IssuerResponseError).handle(404, {
59
- code: IssuerResponseErrorCodes.CredentialInvalidStatus,
60
- message: "Invalid status found for the given credential"
61
- }).handle("*", {
67
+ throw new ResponseErrorBuilder(IssuerResponseError).handle("*", {
62
68
  code: IssuerResponseErrorCodes.StatusAttestationRequestFailed,
63
- message: `Unable to obtain the status attestation for the given credential`
69
+ message: `Unable to obtain the status assertion for the given credential`
64
70
  }).buildFrom(e);
65
71
  };
66
- //# sourceMappingURL=02-status-attestation.js.map
72
+ //# sourceMappingURL=02-status-assertion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getCredentialHashWithouDiscloures","hasStatusOrThrow","SignJWT","v4","uuidv4","StatusAssertionResponse","IssuerResponseError","IssuerResponseErrorCodes","ResponseErrorBuilder","UnexpectedStatusCodeError","Logger","LogLevel","extractJwkFromCredential","statusAssertion","issuerConf","credential","format","ctx","credentialCryptoContext","wiaCryptoContext","appFetch","fetch","jwk","issuerJwk","getPublicKey","credentialHash","statusAttUrl","openid_credential_issuer","status_attestation_endpoint","credentialPop","setPayload","iss","kid","aud","jti","toString","credential_hash","credential_hash_alg","setProtectedHeader","alg","typ","setIssuedAt","setExpirationTime","sign","body","status_assertion_requests","log","DEBUG","result","method","headers","JSON","stringify","then","raw","json","parse","catch","handleStatusAssertionError","statusAttestationJwt","status_assertion_responses","e","handle","code","StatusAttestationRequestFailed","message","buildFrom"],"sourceRoot":"../../../../src","sources":["credential/status/02-status-assertion.ts"],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { IoWalletError, IssuerResponseError, IssuerResponseErrorCodes } from "../../utils/errors";
2
+ import { decode as decodeJwt, verify } from "@pagopa/io-react-native-jwt";
3
+ import { ParsedStatusAssertionResponse, StatusType } from "./types";
4
+ import { Logger, LogLevel } from "../../utils/logging";
5
+ import { extractJwkFromCredential } from "../../utils/credentials";
6
+ import { isSameThumbprint } from "../../utils/jwk";
7
+ /**
8
+ * Given a status assertion, verifies that:
9
+ * - It's in the supported format;
10
+ * - The assertion is correctly signed;
11
+ * - It's bound to the given key.
12
+ * @param issuerConf The Issuer configuration returned by {@link evaluateIssuerTrust}
13
+ * @param statusAssertion The encoded status assertion returned by {@link statusAssertion}
14
+ * @param context.credentialCryptoContext The crypto context used to obtain the credential in {@link obtainCredential}
15
+ * @returns A parsed status assertion
16
+ * @throws {IoWalletError} If the credential signature is not verified with the Issuer key set
17
+ * @throws {IssuerResponseError} If the status assertion contains an error or the credential status is invalid
18
+ */
19
+ export const verifyAndParseStatusAssertion = async (issuerConf, rawStatusAssertion, credential, format) => {
20
+ const {
21
+ statusAssertion
22
+ } = rawStatusAssertion;
23
+ await verify(statusAssertion, issuerConf.openid_credential_issuer.jwks.keys);
24
+ const decodedJwt = decodeJwt(statusAssertion);
25
+ const parsedStatusAssertion = ParsedStatusAssertionResponse.parse({
26
+ header: decodedJwt.protectedHeader,
27
+ payload: decodedJwt.payload
28
+ });
29
+ Logger.log(LogLevel.DEBUG, `Parsed status assertion: ${JSON.stringify(parsedStatusAssertion)}`);
30
+
31
+ // Errors are transmitted in the JWT and use a 200 HTTP status code
32
+ if (isStatusAssertionError(parsedStatusAssertion)) {
33
+ throw new IssuerResponseError({
34
+ code: IssuerResponseErrorCodes.CredentialInvalidStatus,
35
+ message: "The status assertion contains an error",
36
+ statusCode: 200,
37
+ reason: buildErrorReason(parsedStatusAssertion)
38
+ });
39
+ }
40
+ const {
41
+ cnf,
42
+ credential_status_type
43
+ } = parsedStatusAssertion.payload;
44
+ const holderBindingKey = await extractJwkFromCredential(credential, format);
45
+ if (!(await isSameThumbprint(cnf.jwk, holderBindingKey))) {
46
+ const errorMessage = `Failed to verify holder binding for status assertion: the thumbprints of keys ${cnf.jwk.kid} and ${holderBindingKey.kid} do not match`;
47
+ Logger.log(LogLevel.ERROR, errorMessage);
48
+ throw new IoWalletError(errorMessage);
49
+ }
50
+ if (credential_status_type !== StatusType.VALID) {
51
+ throw new IssuerResponseError({
52
+ code: IssuerResponseErrorCodes.CredentialInvalidStatus,
53
+ message: "Invalid status found for the given credential",
54
+ statusCode: 200,
55
+ reason: buildErrorReason(parsedStatusAssertion)
56
+ });
57
+ }
58
+ return {
59
+ parsedStatusAssertion
60
+ };
61
+ };
62
+ const isStatusAssertionError = assertion => assertion.header.typ === "status-assertion-error+jwt";
63
+
64
+ /**
65
+ * Build an object containing the details on the error to use as the IssuerResponseError's reason
66
+ * @param assertion The status assertion response, both success or failure
67
+ * @returns The error's reason object
68
+ */
69
+ const buildErrorReason = _ref => {
70
+ let {
71
+ payload
72
+ } = _ref;
73
+ return "error" in payload ? payload : {
74
+ error: payload.credential_status_detail.state,
75
+ error_description: payload.credential_status_detail.description
76
+ };
77
+ };
78
+ //# sourceMappingURL=03-verify-and-parse-status-assertion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["IoWalletError","IssuerResponseError","IssuerResponseErrorCodes","decode","decodeJwt","verify","ParsedStatusAssertionResponse","StatusType","Logger","LogLevel","extractJwkFromCredential","isSameThumbprint","verifyAndParseStatusAssertion","issuerConf","rawStatusAssertion","credential","format","statusAssertion","openid_credential_issuer","jwks","keys","decodedJwt","parsedStatusAssertion","parse","header","protectedHeader","payload","log","DEBUG","JSON","stringify","isStatusAssertionError","code","CredentialInvalidStatus","message","statusCode","reason","buildErrorReason","cnf","credential_status_type","holderBindingKey","jwk","errorMessage","kid","ERROR","VALID","assertion","typ","_ref","error","credential_status_detail","state","error_description","description"],"sourceRoot":"../../../../src","sources":["credential/status/03-verify-and-parse-status-assertion.ts"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- # Credential Status Attestation
1
+ # Credential Status Assertion
2
2
 
3
- This flow is used to obtain a credential status attestation from its credential issuer. Each step in the flow is imported from the related file which is named with a sequential number.
4
- The credential status attestation is a JWT which contains the credential status which indicates if the credential is valid or not.
5
- The status attestation is supposed to be stored securely along with the credential. It has a limited lifetime and should be refreshed periodically according to the `exp` field in the JWT payload.
3
+ This flow is used to obtain a credential status assertion from its credential issuer. Each step in the flow is imported from the related file which is named with a sequential number.
4
+ The credential status assertion is a JWT which contains the credential status which indicates if the credential is valid or not (see [OAuth Status Assertions](https://italia.github.io/eid-wallet-it-docs/versione-corrente/en/credential-revocation.html#oauth-status-assertions)).
5
+ The status assertion is supposed to be stored securely along with the credential. It has a limited lifetime and should be refreshed periodically according to the `exp` field in the JWT payload.
6
6
 
7
7
  ## Sequence Diagram
8
8
 
9
9
  ```mermaid
10
10
  graph TD;
11
11
  0[startFlow]
12
- 1[statusAttestation]
13
- 2[verifyAndParseStatusAttestation]
12
+ 1[statusAssertion]
13
+ 2[verifyAndParseStatusAssertion]
14
14
 
15
15
  0 --> 1
16
16
  1 --> 2
@@ -21,14 +21,14 @@ graph TD;
21
21
 
22
22
  The following errors are mapped to a `IssuerResponseError` with specific codes.
23
23
 
24
- |HTTP Status|Error Code|Description|
25
- |-----------|----------|-----------|
26
- |`404 Not Found`|`ERR_CREDENTIAL_INVALID_STATUS`|This response is returned by the credential issuer when the status attestation is invalid. It might contain more details in the `reason` property.|
24
+ |Error Code|Description|
25
+ |----------|-----------|
26
+ |`ERR_CREDENTIAL_INVALID_STATUS`|This error is thrown when the status assertion for a given credential is invalid. It might contain more details in the `reason` property.|
27
27
 
28
28
  ## Example
29
29
 
30
30
  <details>
31
- <summary>Credential status attestation flow</summary>
31
+ <summary>Credential status assertion flow</summary>
32
32
 
33
33
  ```ts
34
34
  // Start the issuance flow
@@ -42,24 +42,26 @@ const { issuerUrl } = startFlow();
42
42
  // Evaluate issuer trust
43
43
  const { issuerConf } = await Credential.Status.evaluateIssuerTrust(issuerUrl);
44
44
 
45
- // Get the credential attestation
46
- const res = await Credential.Status.statusAttestation(
45
+ // Get the credential assertion
46
+ const res = await Credential.Status.statusAssertion(
47
47
  issuerConf,
48
48
  credential,
49
- credentialCryptoContext
49
+ format,
50
+ { credentialCryptoContext, wiaCryptoContext }
50
51
  );
51
52
 
52
- // Verify and parse the status attestation
53
- const { parsedStatusAttestation } =
54
- await Credential.Status.verifyAndParseStatusAttestation(
53
+ // Verify and parse the status assertion
54
+ const { parsedStatusAssertion } =
55
+ await Credential.Status.verifyAndParseStatusAssertion(
55
56
  issuerConf,
56
- res.statusAttestation,
57
- { credentialCryptoContext }
57
+ res.statusAssertion,
58
+ credential,
59
+ format
58
60
  );
59
61
 
60
62
  return {
61
- statusAttestation: res.statusAttestation,
62
- parsedStatusAttestation,
63
+ statusAssertion: res.statusAssertion,
64
+ parsedStatusAssertion,
63
65
  };
64
66
  ```
65
67
 
@@ -1,5 +1,5 @@
1
- import { statusAttestation } from "./02-status-attestation";
1
+ import { statusAssertion } from "./02-status-assertion";
2
2
  import { evaluateIssuerTrust } from "../issuance";
3
- import { verifyAndParseStatusAttestation } from "./03-verify-and-parse-status-attestation";
4
- export { evaluateIssuerTrust, statusAttestation, verifyAndParseStatusAttestation };
3
+ import { verifyAndParseStatusAssertion } from "./03-verify-and-parse-status-assertion";
4
+ export { evaluateIssuerTrust, statusAssertion, verifyAndParseStatusAssertion };
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["statusAttestation","evaluateIssuerTrust","verifyAndParseStatusAttestation"],"sourceRoot":"../../../../src","sources":["credential/status/index.ts"],"mappings":"AACA,SACEA,iBAAiB,QAEZ,yBAAyB;AAChC,SAASC,mBAAmB,QAAkC,aAAa;AAC3E,SACEC,+BAA+B,QAE1B,0CAA0C;AAEjD,SACED,mBAAmB,EACnBD,iBAAiB,EACjBE,+BAA+B"}
1
+ {"version":3,"names":["statusAssertion","evaluateIssuerTrust","verifyAndParseStatusAssertion"],"sourceRoot":"../../../../src","sources":["credential/status/index.ts"],"mappings":"AACA,SAASA,eAAe,QAA8B,uBAAuB;AAC7E,SAASC,mBAAmB,QAAkC,aAAa;AAC3E,SACEC,6BAA6B,QAExB,wCAAwC;AAE/C,SAASD,mBAAmB,EAAED,eAAe,EAAEE,6BAA6B"}
@@ -3,31 +3,33 @@ import { JWK } from "../../utils/jwk";
3
3
  import * as z from "zod";
4
4
 
5
5
  /**
6
- * Shape from parsing a status attestation response in case of 201.
6
+ * Shape from parsing a status assertion response in case of 201.
7
7
  */
8
- export const StatusAttestationResponse = z.object({
9
- status_attestation: z.string()
8
+ export const StatusAssertionResponse = z.object({
9
+ status_assertion_responses: z.array(z.string())
10
10
  });
11
11
 
12
12
  /**
13
- * Type from parsing a status attestation response in case of 201.
14
- * Inferred from {@link StatusAttestationResponse}.
13
+ * Type from parsing a status assertion response in case of 201.
14
+ * Inferred from {@link StatusAssertionResponse}.
15
15
  */
16
16
 
17
17
  /**
18
- * Type for a parsed status attestation.
18
+ * Shape for parsing a successful status assertion in a JWT.
19
19
  */
20
-
21
- /**
22
- * Shape for parsing a status attestation in a JWT.
23
- */
24
- export const ParsedStatusAttestation = z.object({
20
+ export const ParsedStatusAssertion = z.object({
25
21
  header: z.object({
26
- typ: z.literal("status-attestation+jwt"),
22
+ typ: z.literal("status-assertion+jwt"),
27
23
  alg: z.string(),
28
24
  kid: z.string().optional()
29
25
  }),
30
26
  payload: z.object({
27
+ iss: z.string(),
28
+ credential_status_type: z.string(),
29
+ credential_status_detail: z.object({
30
+ state: z.string(),
31
+ description: z.string()
32
+ }).optional(),
31
33
  credential_hash_alg: z.string(),
32
34
  credential_hash: z.string(),
33
35
  cnf: z.object({
@@ -37,4 +39,33 @@ export const ParsedStatusAttestation = z.object({
37
39
  iat: UnixTime
38
40
  })
39
41
  });
42
+ /**
43
+ * The JWT that contains the errors occurred for the status assertion request.
44
+ * @see https://italia.github.io/eid-wallet-it-docs/versione-corrente/en/credential-revocation.html#http-status-assertion-response
45
+ */
46
+ export const ParsedStatusAssertionError = z.object({
47
+ header: z.object({
48
+ typ: z.literal("status-assertion-error+jwt"),
49
+ alg: z.string(),
50
+ kid: z.string().optional()
51
+ }),
52
+ payload: z.object({
53
+ credential_hash_alg: z.string(),
54
+ credential_hash: z.string(),
55
+ error: z.string(),
56
+ error_description: z.string()
57
+ })
58
+ });
59
+
60
+ /**
61
+ * The status assertion response that might include either a successful assertion or an error
62
+ */
63
+
64
+ export const ParsedStatusAssertionResponse = z.union([ParsedStatusAssertion, ParsedStatusAssertionError]);
65
+ export let StatusType = /*#__PURE__*/function (StatusType) {
66
+ StatusType["VALID"] = "0x00";
67
+ StatusType["INVALID"] = "0x01";
68
+ StatusType["SUSPENDED"] = "0x02";
69
+ return StatusType;
70
+ }({});
40
71
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["UnixTime","JWK","z","StatusAttestationResponse","object","status_attestation","string","ParsedStatusAttestation","header","typ","literal","alg","kid","optional","payload","credential_hash_alg","credential_hash","cnf","jwk","exp","iat"],"sourceRoot":"../../../../src","sources":["credential/status/types.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,GAAG,QAAQ,iBAAiB;AACrC,OAAO,KAAKC,CAAC,MAAM,KAAK;;AAExB;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGD,CAAC,CAACE,MAAM,CAAC;EAChDC,kBAAkB,EAAEH,CAAC,CAACI,MAAM,CAAC;AAC/B,CAAC,CAAC;;AAEF;AACA;AACA;AACA;;AAKA;AACA;AACA;;AAGA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAGL,CAAC,CAACE,MAAM,CAAC;EAC9CI,MAAM,EAAEN,CAAC,CAACE,MAAM,CAAC;IACfK,GAAG,EAAEP,CAAC,CAACQ,OAAO,CAAC,wBAAwB,CAAC;IACxCC,GAAG,EAAET,CAAC,CAACI,MAAM,CAAC,CAAC;IACfM,GAAG,EAAEV,CAAC,CAACI,MAAM,CAAC,CAAC,CAACO,QAAQ,CAAC;EAC3B,CAAC,CAAC;EACFC,OAAO,EAAEZ,CAAC,CAACE,MAAM,CAAC;IAChBW,mBAAmB,EAAEb,CAAC,CAACI,MAAM,CAAC,CAAC;IAC/BU,eAAe,EAAEd,CAAC,CAACI,MAAM,CAAC,CAAC;IAC3BW,GAAG,EAAEf,CAAC,CAACE,MAAM,CAAC;MACZc,GAAG,EAAEjB;IACP,CAAC,CAAC;IACFkB,GAAG,EAAEnB,QAAQ;IACboB,GAAG,EAAEpB;EACP,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"names":["UnixTime","JWK","z","StatusAssertionResponse","object","status_assertion_responses","array","string","ParsedStatusAssertion","header","typ","literal","alg","kid","optional","payload","iss","credential_status_type","credential_status_detail","state","description","credential_hash_alg","credential_hash","cnf","jwk","exp","iat","ParsedStatusAssertionError","error","error_description","ParsedStatusAssertionResponse","union","StatusType"],"sourceRoot":"../../../../src","sources":["credential/status/types.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,GAAG,QAAQ,iBAAiB;AACrC,OAAO,KAAKC,CAAC,MAAM,KAAK;;AAExB;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAGD,CAAC,CAACE,MAAM,CAAC;EAC9CC,0BAA0B,EAAEH,CAAC,CAACI,KAAK,CAACJ,CAAC,CAACK,MAAM,CAAC,CAAC;AAChD,CAAC,CAAC;;AAEF;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGN,CAAC,CAACE,MAAM,CAAC;EAC5CK,MAAM,EAAEP,CAAC,CAACE,MAAM,CAAC;IACfM,GAAG,EAAER,CAAC,CAACS,OAAO,CAAC,sBAAsB,CAAC;IACtCC,GAAG,EAAEV,CAAC,CAACK,MAAM,CAAC,CAAC;IACfM,GAAG,EAAEX,CAAC,CAACK,MAAM,CAAC,CAAC,CAACO,QAAQ,CAAC;EAC3B,CAAC,CAAC;EACFC,OAAO,EAAEb,CAAC,CAACE,MAAM,CAAC;IAChBY,GAAG,EAAEd,CAAC,CAACK,MAAM,CAAC,CAAC;IACfU,sBAAsB,EAAEf,CAAC,CAACK,MAAM,CAAC,CAAC;IAClCW,wBAAwB,EAAEhB,CAAC,CACxBE,MAAM,CAAC;MACNe,KAAK,EAAEjB,CAAC,CAACK,MAAM,CAAC,CAAC;MACjBa,WAAW,EAAElB,CAAC,CAACK,MAAM,CAAC;IACxB,CAAC,CAAC,CACDO,QAAQ,CAAC,CAAC;IACbO,mBAAmB,EAAEnB,CAAC,CAACK,MAAM,CAAC,CAAC;IAC/Be,eAAe,EAAEpB,CAAC,CAACK,MAAM,CAAC,CAAC;IAC3BgB,GAAG,EAAErB,CAAC,CAACE,MAAM,CAAC;MACZoB,GAAG,EAAEvB;IACP,CAAC,CAAC;IACFwB,GAAG,EAAEzB,QAAQ;IACb0B,GAAG,EAAE1B;EACP,CAAC;AACH,CAAC,CAAC;AAMF;AACA;AACA;AACA;AACA,OAAO,MAAM2B,0BAA0B,GAAGzB,CAAC,CAACE,MAAM,CAAC;EACjDK,MAAM,EAAEP,CAAC,CAACE,MAAM,CAAC;IACfM,GAAG,EAAER,CAAC,CAACS,OAAO,CAAC,4BAA4B,CAAC;IAC5CC,GAAG,EAAEV,CAAC,CAACK,MAAM,CAAC,CAAC;IACfM,GAAG,EAAEX,CAAC,CAACK,MAAM,CAAC,CAAC,CAACO,QAAQ,CAAC;EAC3B,CAAC,CAAC;EACFC,OAAO,EAAEb,CAAC,CAACE,MAAM,CAAC;IAChBiB,mBAAmB,EAAEnB,CAAC,CAACK,MAAM,CAAC,CAAC;IAC/Be,eAAe,EAAEpB,CAAC,CAACK,MAAM,CAAC,CAAC;IAC3BqB,KAAK,EAAE1B,CAAC,CAACK,MAAM,CAAC,CAAC;IACjBsB,iBAAiB,EAAE3B,CAAC,CAACK,MAAM,CAAC;EAC9B,CAAC;AACH,CAAC,CAAC;;AAEF;AACA;AACA;;AAIA,OAAO,MAAMuB,6BAA6B,GAAG5B,CAAC,CAAC6B,KAAK,CAAC,CACnDvB,qBAAqB,EACrBmB,0BAA0B,CAC3B,CAAC;AAEF,WAAYK,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA"}
@@ -0,0 +1,26 @@
1
+ import { decode } from "../sd-jwt";
2
+ import { thumbprint } from "@pagopa/io-react-native-jwt";
3
+ import { IoWalletError } from "./errors";
4
+ const SD_JWT = ["vc+sd-jwt", "dc+sd-jwt"];
5
+
6
+ /**
7
+ * Extracts a JWK from a credential.
8
+ * @param credential - The credential string, which can be in SD-JWT or CBOR format.
9
+ * @param format - The format of the credential
10
+ * @return A Promise that resolves to a JWK object if the credential is in SD-JWT format and contains a JWK, or undefined otherwise.
11
+ */
12
+ export const extractJwkFromCredential = async (credential, format) => {
13
+ if (SD_JWT.includes(format)) {
14
+ // 1. SD-JWT case
15
+ const decoded = decode(credential);
16
+ const jwk = decoded.sdJwt.payload.cnf.jwk;
17
+ if (jwk) {
18
+ return {
19
+ ...jwk,
20
+ kid: await thumbprint(jwk)
21
+ };
22
+ }
23
+ }
24
+ throw new IoWalletError(`Credential format ${format} not supported`);
25
+ };
26
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["decode","thumbprint","IoWalletError","SD_JWT","extractJwkFromCredential","credential","format","includes","decoded","jwk","sdJwt","payload","cnf","kid"],"sourceRoot":"../../../src","sources":["utils/credentials.ts"],"mappings":"AAAA,SAASA,MAAM,QAAQ,WAAW;AAClC,SAASC,UAAU,QAAQ,6BAA6B;AAIxD,SAASC,aAAa,QAAQ,UAAU;AAExC,MAAMC,MAAM,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAG,MAAAA,CACtCC,UAA+C,EAC/CC,MAAuC,KACtB;EACjB,IAAIH,MAAM,CAACI,QAAQ,CAACD,MAAM,CAAC,EAAE;IAC3B;IACA,MAAME,OAAO,GAAGR,MAAM,CAACK,UAAU,CAAC;IAClC,MAAMI,GAAG,GAAGD,OAAO,CAACE,KAAK,CAACC,OAAO,CAACC,GAAG,CAACH,GAAG;IACzC,IAAIA,GAAG,EAAE;MACP,OAAO;QAAE,GAAGA,GAAG;QAAEI,GAAG,EAAE,MAAMZ,UAAU,CAACQ,GAAG;MAAE,CAAC;IAC/C;EACF;EACA,MAAM,IAAIP,aAAa,CAAE,qBAAoBI,MAAO,gBAAe,CAAC;AACtE,CAAC"}
@@ -1,7 +1,6 @@
1
- import { getPublicKey, sign, generate, deleteKey } from "@pagopa/io-react-native-crypto";
1
+ import { deleteKey, generate, getPublicKeyFixed, sign } from "@pagopa/io-react-native-crypto";
2
2
  import { v4 as uuidv4 } from "uuid";
3
3
  import { thumbprint } from "@pagopa/io-react-native-jwt";
4
- import { fixBase64EncodingOnKey } from "./jwk";
5
4
 
6
5
  /**
7
6
  * Create a CryptoContext bound to a key pair.
@@ -12,13 +11,8 @@ import { fixBase64EncodingOnKey } from "./jwk";
12
11
  */
13
12
  export const createCryptoContextFor = keytag => {
14
13
  return {
15
- /**
16
- * Retrieve the public key of the pair.
17
- * If the key pair doesn't exist yet, an error is raised
18
- * @returns The public key.
19
- */
20
14
  async getPublicKey() {
21
- return getPublicKey(keytag).then(fixBase64EncodingOnKey).then(async jwk => ({
15
+ return getPublicKeyFixed(keytag).then(async jwk => ({
22
16
  ...jwk,
23
17
  // Keys in the TEE are not stored with their KID, which is supposed to be assigned when they are included in JWK sets.
24
18
  // (that is, KID is not a propoerty of the key itself, but it's property used to identify a key in a set).
@@ -1 +1 @@
1
- {"version":3,"names":["getPublicKey","sign","generate","deleteKey","v4","uuidv4","thumbprint","fixBase64EncodingOnKey","createCryptoContextFor","keytag","then","jwk","kid","getSignature","value","withEphemeralKey","fn","ephemeralContext","finally"],"sourceRoot":"../../../src","sources":["utils/crypto.ts"],"mappings":"AAAA,SACEA,YAAY,EACZC,IAAI,EACJC,QAAQ,EACRC,SAAS,QACJ,gCAAgC;AACvC,SAASC,EAAE,IAAIC,MAAM,QAAQ,MAAM;AACnC,SAASC,UAAU,QAA4B,6BAA6B;AAC5E,SAASC,sBAAsB,QAAQ,OAAO;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,GAAIC,MAAc,IAAoB;EACvE,OAAO;IACL;AACJ;AACA;AACA;AACA;IACI,MAAMT,YAAYA,CAAA,EAAG;MACnB,OAAOA,YAAY,CAACS,MAAM,CAAC,CACxBC,IAAI,CAACH,sBAAsB,CAAC,CAC5BG,IAAI,CAAC,MAAOC,GAAG,KAAM;QACpB,GAAGA,GAAG;QACN;QACA;QACA;QACA;QACAC,GAAG,EAAE,MAAMN,UAAU,CAACK,GAAG;MAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IACD;AACJ;AACA;AACA;AACA;AACA;IACI,MAAME,YAAYA,CAACC,KAAa,EAAE;MAChC,OAAOb,IAAI,CAACa,KAAK,EAAEL,MAAM,CAAC;IAC5B;EACF,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,gBAAgB,GAAG,MAC9BC,EAAmD,IACpC;EACf;EACA,MAAMP,MAAM,GAAI,aAAYJ,MAAM,CAAC,CAAE,EAAC;EACtC,MAAMH,QAAQ,CAACO,MAAM,CAAC;EACtB,MAAMQ,gBAAgB,GAAGT,sBAAsB,CAACC,MAAM,CAAC;EACvD,OAAOO,EAAE,CAACC,gBAAgB,CAAC,CAACC,OAAO,CAAC,MAAMf,SAAS,CAACM,MAAM,CAAC,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"names":["deleteKey","generate","getPublicKeyFixed","sign","v4","uuidv4","thumbprint","createCryptoContextFor","keytag","getPublicKey","then","jwk","kid","getSignature","value","withEphemeralKey","fn","ephemeralContext","finally"],"sourceRoot":"../../../src","sources":["utils/crypto.ts"],"mappings":"AAAA,SACEA,SAAS,EACTC,QAAQ,EACRC,iBAAiB,EACjBC,IAAI,QACC,gCAAgC;AACvC,SAASC,EAAE,IAAIC,MAAM,QAAQ,MAAM;AACnC,SAA6BC,UAAU,QAAQ,6BAA6B;;AAE5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,GAAIC,MAAc,IAAoB;EACvE,OAAO;IACL,MAAMC,YAAYA,CAAA,EAAG;MACnB,OAAOP,iBAAiB,CAACM,MAAM,CAAC,CAACE,IAAI,CAAC,MAAOC,GAAG,KAAM;QACpD,GAAGA,GAAG;QACN;QACA;QACA;QACA;QACAC,GAAG,EAAE,MAAMN,UAAU,CAACK,GAAG;MAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IACD;AACJ;AACA;AACA;AACA;AACA;IACI,MAAME,YAAYA,CAACC,KAAa,EAAE;MAChC,OAAOX,IAAI,CAACW,KAAK,EAAEN,MAAM,CAAC;IAC5B;EACF,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,gBAAgB,GAAG,MAC9BC,EAAmD,IACpC;EACf;EACA,MAAMR,MAAM,GAAI,aAAYH,MAAM,CAAC,CAAE,EAAC;EACtC,MAAMJ,QAAQ,CAACO,MAAM,CAAC;EACtB,MAAMS,gBAAgB,GAAGV,sBAAsB,CAACC,MAAM,CAAC;EACvD,OAAOQ,EAAE,CAACC,gBAAgB,CAAC,CAACC,OAAO,CAAC,MAAMlB,SAAS,CAACQ,MAAM,CAAC,CAAC;AAC9D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { removePadding } from "@pagopa/io-react-native-jwt";
1
+ import { removePadding, thumbprint } from "@pagopa/io-react-native-jwt";
2
2
  import { z } from "zod";
3
3
  export const JWK = z.object({
4
4
  /** JWK "alg" (Algorithm) Parameter. */
@@ -72,4 +72,14 @@ export function fixBase64EncodingOnKey(key) {
72
72
  export const JWKS = z.object({
73
73
  keys: z.array(JWK)
74
74
  });
75
+ /**
76
+ * Utility function that checks if two JWKs have the same thumbprint.
77
+ * @param jwkA The first JWK
78
+ * @param jwkB The second JWK
79
+ * @returns Whether the thumbprints match
80
+ */
81
+ export const isSameThumbprint = async (jwkA, jwkB) => {
82
+ const [thumbprintJwkA, thumbprintJwkB] = await Promise.all([thumbprint(jwkA), thumbprint(jwkB)]);
83
+ return thumbprintJwkA === thumbprintJwkB;
84
+ };
75
85
  //# sourceMappingURL=jwk.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["removePadding","z","JWK","object","alg","string","optional","crv","d","dp","dq","e","ext","boolean","k","key_ops","array","kid","kty","union","literal","n","p","q","qi","use","x","y","x5c","x5t","x5u","fixBase64EncodingOnKey","key","pk","JWKS","keys"],"sourceRoot":"../../../src","sources":["utils/jwk.ts"],"mappings":"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"}
1
+ {"version":3,"names":["removePadding","thumbprint","z","JWK","object","alg","string","optional","crv","d","dp","dq","e","ext","boolean","k","key_ops","array","kid","kty","union","literal","n","p","q","qi","use","x","y","x5c","x5t","x5u","fixBase64EncodingOnKey","key","pk","JWKS","keys","isSameThumbprint","jwkA","jwkB","thumbprintJwkA","thumbprintJwkB","Promise","all"],"sourceRoot":"../../../src","sources":["utils/jwk.ts"],"mappings":"AAAA,SAAiBA,aAAa,EAAEC,UAAU,QAAQ,6BAA6B;AAC/E,SAASC,CAAC,QAAQ,KAAK;AAGvB,OAAO,MAAMC,GAAG,GAAGD,CAAC,CAACE,MAAM,CAAC;EAC1B;EACAC,GAAG,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1BC,GAAG,EAAEN,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1BE,CAAC,EAAEP,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBG,EAAE,EAAER,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzBI,EAAE,EAAET,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzBK,CAAC,EAAEV,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxB;EACAM,GAAG,EAAEX,CAAC,CAACY,OAAO,CAAC,CAAC,CAACP,QAAQ,CAAC,CAAC;EAC3BQ,CAAC,EAAEb,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxB;EACAS,OAAO,EAAEd,CAAC,CAACe,KAAK,CAACf,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACvC;EACAW,GAAG,EAAEhB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1B;AACF;AACA;EACEY,GAAG,EAAEjB,CAAC,CAACkB,KAAK,CAAC,CAAClB,CAAC,CAACmB,OAAO,CAAC,KAAK,CAAC,EAAEnB,CAAC,CAACmB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EACjDC,CAAC,EAAEpB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBgB,CAAC,EAAErB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBiB,CAAC,EAAEtB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBkB,EAAE,EAAEvB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzB;EACAmB,GAAG,EAAExB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1BoB,CAAC,EAAEzB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBqB,CAAC,EAAE1B,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxB;EACAsB,GAAG,EAAE3B,CAAC,CAACe,KAAK,CAACf,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnC;EACAuB,GAAG,EAAE5B,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1B;EACA,UAAU,EAAEL,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACjC;EACAwB,GAAG,EAAE7B,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC;AAC3B,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASyB,sBAAsBA,CAACC,GAAQ,EAAO;EACpD,MAAM;IAAEN,CAAC;IAAEC,CAAC;IAAEhB,CAAC;IAAEU,CAAC;IAAE,GAAGY;EAAG,CAAC,GAAGD,GAAG;EAEjC,OAAO;IACL,GAAGC,EAAE;IACL,IAAIP,CAAC,GAAG;MAAEA,CAAC,EAAE3B,aAAa,CAAC2B,CAAC;IAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,IAAIC,CAAC,GAAG;MAAEA,CAAC,EAAE5B,aAAa,CAAC4B,CAAC;IAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,IAAIhB,CAAC,GAAG;MAAEA,CAAC,EAAEZ,aAAa,CAACY,CAAC;IAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,IAAIU,CAAC,GAAG;MAAEA,CAAC,EAAEtB,aAAa,CAACsB,CAAC;IAAE,CAAC,GAAG,CAAC,CAAC;EACtC,CAAC;AACH;AAGA,OAAO,MAAMa,IAAI,GAAGjC,CAAC,CAACE,MAAM,CAAC;EAC3BgC,IAAI,EAAElC,CAAC,CAACe,KAAK,CAACd,GAAG;AACnB,CAAC,CAAC;AAIF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMkC,gBAAgB,GAAG,MAAAA,CAAOC,IAAS,EAAEC,IAAS,KAAK;EAC9D,MAAM,CAACC,cAAc,EAAEC,cAAc,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CACzD1C,UAAU,CAACqC,IAAI,CAAC,EAChBrC,UAAU,CAACsC,IAAI,CAAC,CACjB,CAAC;EACF,OAAOC,cAAc,KAAKC,cAAc;AAC1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"07-verify-and-parse-credential.d.ts","sourceRoot":"","sources":["../../../../src/credential/issuance/07-verify-and-parse-credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAMtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,KAAK,UAAU,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC;AAIzD,MAAM,MAAM,wBAAwB,GAAG,CACrC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAC/C,yBAAyB,EAAE,MAAM,EACjC,OAAO,EAAE;IACP,uBAAuB,EAAE,aAAa,CAAC;IACvC;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,KACE,OAAO,CAAC;IACX,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;CAC5B,CAAC,CAAC;AAGH,KAAK,gBAAgB,GAAG,MAAM;AAC5B,oBAAoB;AACpB,MAAM,EACN;IACE,2CAA2C;IAC3C,IAAI,EACA,yBAAyB,CAAC,MAAM,CAC9B,MAAM,EACN,MAAM,CACP,GACD,4BAA4B,CAAC,MAAM,GACnC,SAAS,CAAC;IACd,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;CAChB,CACF,CAAC;AAuLF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,EAAE,wBAwBtC,CAAC"}
1
+ {"version":3,"file":"07-verify-and-parse-credential.d.ts","sourceRoot":"","sources":["../../../../src/credential/issuance/07-verify-and-parse-credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,KAAK,UAAU,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC;AAIzD,MAAM,MAAM,wBAAwB,GAAG,CACrC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAC/C,yBAAyB,EAAE,MAAM,EACjC,OAAO,EAAE;IACP,uBAAuB,EAAE,aAAa,CAAC;IACvC;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,KACE,OAAO,CAAC;IACX,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;CAC5B,CAAC,CAAC;AAGH,KAAK,gBAAgB,GAAG,MAAM;AAC5B,oBAAoB;AACpB,MAAM,EACN;IACE,2CAA2C;IAC3C,IAAI,EACA,yBAAyB,CAAC,MAAM,CAC9B,MAAM,EACN,MAAM,CACP,GACD,4BAA4B,CAAC,MAAM,GACnC,SAAS,CAAC;IACd,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;CAChB,CACF,CAAC;AAsLF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,EAAE,wBAwBtC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type Out } from "../../utils/misc";
2
+ import type { EvaluateIssuerTrust, ObtainCredential } from "../issuance";
3
+ import { type CryptoContext } from "@pagopa/io-react-native-jwt";
4
+ export type StatusAssertion = (issuerConf: Out<EvaluateIssuerTrust>["issuerConf"], credential: Out<ObtainCredential>["credential"], format: Out<ObtainCredential>["format"], context: {
5
+ credentialCryptoContext: CryptoContext;
6
+ wiaCryptoContext: CryptoContext;
7
+ appFetch?: GlobalFetch["fetch"];
8
+ }) => Promise<{
9
+ statusAssertion: string;
10
+ }>;
11
+ /**
12
+ * Get the status assertion of a digital credential.
13
+ * @param issuerConf - The issuer's configuration
14
+ * @param credential - The credential to be verified
15
+ * @param format - The format of the credential, e.g. "sd-jwt"
16
+ * @param context.credentialCryptoContext - The credential's crypto context
17
+ * @param context.wiaCryptoContext - The Wallet Attestation's crypto context
18
+ * @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
19
+ * @throws {IssuerResponseError} with a specific code for more context
20
+ * @returns The credential status assertion
21
+ */
22
+ export declare const statusAssertion: StatusAssertion;
23
+ //# sourceMappingURL=02-status-assertion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"02-status-assertion.d.ts","sourceRoot":"","sources":["../../../../src/credential/status/02-status-assertion.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,6BAA6B,CAAC;AAY1E,MAAM,MAAM,eAAe,GAAG,CAC5B,UAAU,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,EAClD,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAC/C,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EACvC,OAAO,EAAE;IACP,uBAAuB,EAAE,aAAa,CAAC;IACvC,gBAAgB,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,KACE,OAAO,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,eAoD7B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Out } from "../../utils/misc";
2
+ import type { EvaluateIssuerTrust, StatusAssertion } from ".";
3
+ import { ParsedStatusAssertion } from "./types";
4
+ import type { ObtainCredential } from "../issuance";
5
+ export type VerifyAndParseStatusAssertion = (issuerConf: Out<EvaluateIssuerTrust>["issuerConf"], statusAssertion: Out<StatusAssertion>, credential: Out<ObtainCredential>["credential"], format: Out<ObtainCredential>["format"]) => Promise<{
6
+ parsedStatusAssertion: ParsedStatusAssertion;
7
+ }>;
8
+ /**
9
+ * Given a status assertion, verifies that:
10
+ * - It's in the supported format;
11
+ * - The assertion is correctly signed;
12
+ * - It's bound to the given key.
13
+ * @param issuerConf The Issuer configuration returned by {@link evaluateIssuerTrust}
14
+ * @param statusAssertion The encoded status assertion returned by {@link statusAssertion}
15
+ * @param context.credentialCryptoContext The crypto context used to obtain the credential in {@link obtainCredential}
16
+ * @returns A parsed status assertion
17
+ * @throws {IoWalletError} If the credential signature is not verified with the Issuer key set
18
+ * @throws {IssuerResponseError} If the status assertion contains an error or the credential status is invalid
19
+ */
20
+ export declare const verifyAndParseStatusAssertion: VerifyAndParseStatusAssertion;
21
+ //# sourceMappingURL=03-verify-and-parse-status-assertion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"03-verify-and-parse-status-assertion.d.ts","sourceRoot":"","sources":["../../../../src/credential/status/03-verify-and-parse-status-assertion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAO5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,GAAG,CAAC;AAC9D,OAAO,EAEL,qBAAqB,EAItB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,MAAM,6BAA6B,GAAG,CAC1C,UAAU,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,EAClD,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,EACrC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,EAC/C,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KACpC,OAAO,CAAC;IAAE,qBAAqB,EAAE,qBAAqB,CAAA;CAAE,CAAC,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,6BAA6B,EAAE,6BAiDzC,CAAC"}