@pagopa/io-react-native-wallet 0.1.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.
- package/README.md +91 -0
- package/lib/commonjs/index.js +17 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/pid/index.js +11 -0
- package/lib/commonjs/pid/index.js.map +1 -0
- package/lib/commonjs/pid/sd-jwt/converters.js +29 -0
- package/lib/commonjs/pid/sd-jwt/converters.js.map +1 -0
- package/lib/commonjs/pid/sd-jwt/index.js +76 -0
- package/lib/commonjs/pid/sd-jwt/index.js.map +1 -0
- package/lib/commonjs/pid/sd-jwt/types.js +50 -0
- package/lib/commonjs/pid/sd-jwt/types.js.map +1 -0
- package/lib/commonjs/sd-jwt/__test__/converters.test.js +25 -0
- package/lib/commonjs/sd-jwt/__test__/converters.test.js.map +1 -0
- package/lib/commonjs/sd-jwt/__test__/types.test.js +70 -0
- package/lib/commonjs/sd-jwt/__test__/types.test.js.map +1 -0
- package/lib/commonjs/sd-jwt/converters.js +30 -0
- package/lib/commonjs/sd-jwt/converters.js.map +1 -0
- package/lib/commonjs/sd-jwt/index.js +77 -0
- package/lib/commonjs/sd-jwt/index.js.map +1 -0
- package/lib/commonjs/sd-jwt/types.js +53 -0
- package/lib/commonjs/sd-jwt/types.js.map +1 -0
- package/lib/commonjs/sd-jwt/verifier.js +18 -0
- package/lib/commonjs/sd-jwt/verifier.js.map +1 -0
- package/lib/commonjs/utils/errors.js +82 -0
- package/lib/commonjs/utils/errors.js.map +1 -0
- package/lib/commonjs/utils/jwk.js +45 -0
- package/lib/commonjs/utils/jwk.js.map +1 -0
- package/lib/commonjs/wallet-instance-attestation/index.js +63 -0
- package/lib/commonjs/wallet-instance-attestation/index.js.map +1 -0
- package/lib/commonjs/wallet-instance-attestation/issuing.js +96 -0
- package/lib/commonjs/wallet-instance-attestation/issuing.js.map +1 -0
- package/lib/commonjs/wallet-instance-attestation/types.js +65 -0
- package/lib/commonjs/wallet-instance-attestation/types.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/pid/index.js +3 -0
- package/lib/module/pid/index.js.map +1 -0
- package/lib/module/pid/sd-jwt/converters.js +23 -0
- package/lib/module/pid/sd-jwt/converters.js.map +1 -0
- package/lib/module/pid/sd-jwt/index.js +66 -0
- package/lib/module/pid/sd-jwt/index.js.map +1 -0
- package/lib/module/pid/sd-jwt/types.js +43 -0
- package/lib/module/pid/sd-jwt/types.js.map +1 -0
- package/lib/module/sd-jwt/__test__/converters.test.js +23 -0
- package/lib/module/sd-jwt/__test__/converters.test.js.map +1 -0
- package/lib/module/sd-jwt/__test__/types.test.js +68 -0
- package/lib/module/sd-jwt/__test__/types.test.js.map +1 -0
- package/lib/module/sd-jwt/converters.js +24 -0
- package/lib/module/sd-jwt/converters.js.map +1 -0
- package/lib/module/sd-jwt/index.js +71 -0
- package/lib/module/sd-jwt/index.js.map +1 -0
- package/lib/module/sd-jwt/types.js +44 -0
- package/lib/module/sd-jwt/types.js.map +1 -0
- package/lib/module/sd-jwt/verifier.js +11 -0
- package/lib/module/sd-jwt/verifier.js.map +1 -0
- package/lib/module/utils/errors.js +73 -0
- package/lib/module/utils/errors.js.map +1 -0
- package/lib/module/utils/jwk.js +38 -0
- package/lib/module/utils/jwk.js.map +1 -0
- package/lib/module/wallet-instance-attestation/index.js +52 -0
- package/lib/module/wallet-instance-attestation/index.js.map +1 -0
- package/lib/module/wallet-instance-attestation/issuing.js +90 -0
- package/lib/module/wallet-instance-attestation/issuing.js.map +1 -0
- package/lib/module/wallet-instance-attestation/types.js +55 -0
- package/lib/module/wallet-instance-attestation/types.js.map +1 -0
- package/lib/typescript/index.d.ts +5 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/pid/index.d.ts +3 -0
- package/lib/typescript/pid/index.d.ts.map +1 -0
- package/lib/typescript/pid/sd-jwt/converters.d.ts +4 -0
- package/lib/typescript/pid/sd-jwt/converters.d.ts.map +1 -0
- package/lib/typescript/pid/sd-jwt/index.d.ts +50 -0
- package/lib/typescript/pid/sd-jwt/index.d.ts.map +1 -0
- package/lib/typescript/pid/sd-jwt/types.d.ts +196 -0
- package/lib/typescript/pid/sd-jwt/types.d.ts.map +1 -0
- package/lib/typescript/sd-jwt/__test__/converters.test.d.ts +2 -0
- package/lib/typescript/sd-jwt/__test__/converters.test.d.ts.map +1 -0
- package/lib/typescript/sd-jwt/__test__/types.test.d.ts +2 -0
- package/lib/typescript/sd-jwt/__test__/types.test.d.ts.map +1 -0
- package/lib/typescript/sd-jwt/converters.d.ts +3 -0
- package/lib/typescript/sd-jwt/converters.d.ts.map +1 -0
- package/lib/typescript/sd-jwt/index.d.ts +42 -0
- package/lib/typescript/sd-jwt/index.d.ts.map +1 -0
- package/lib/typescript/sd-jwt/types.d.ts +416 -0
- package/lib/typescript/sd-jwt/types.d.ts.map +1 -0
- package/lib/typescript/sd-jwt/verifier.d.ts +3 -0
- package/lib/typescript/sd-jwt/verifier.d.ts.map +1 -0
- package/lib/typescript/utils/errors.d.ts +45 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -0
- package/lib/typescript/utils/jwk.d.ts +85 -0
- package/lib/typescript/utils/jwk.d.ts.map +1 -0
- package/lib/typescript/wallet-instance-attestation/index.d.ts +36 -0
- package/lib/typescript/wallet-instance-attestation/index.d.ts.map +1 -0
- package/lib/typescript/wallet-instance-attestation/issuing.d.ts +32 -0
- package/lib/typescript/wallet-instance-attestation/issuing.d.ts.map +1 -0
- package/lib/typescript/wallet-instance-attestation/types.d.ts +733 -0
- package/lib/typescript/wallet-instance-attestation/types.d.ts.map +1 -0
- package/package.json +108 -0
- package/src/index.ts +8 -0
- package/src/pid/index.ts +2 -0
- package/src/pid/sd-jwt/converters.ts +26 -0
- package/src/pid/sd-jwt/index.ts +71 -0
- package/src/pid/sd-jwt/types.ts +44 -0
- package/src/sd-jwt/__test__/converters.test.ts +27 -0
- package/src/sd-jwt/__test__/types.test.ts +85 -0
- package/src/sd-jwt/converters.ts +24 -0
- package/src/sd-jwt/index.ts +92 -0
- package/src/sd-jwt/types.ts +54 -0
- package/src/sd-jwt/verifier.ts +20 -0
- package/src/utils/errors.ts +74 -0
- package/src/utils/jwk.ts +39 -0
- package/src/wallet-instance-attestation/index.ts +56 -0
- package/src/wallet-instance-attestation/issuing.ts +107 -0
- package/src/wallet-instance-attestation/types.ts +77 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WalletInstanceAttestationIssuingError = exports.ValidationFailed = exports.IoWalletError = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* A generic Error that all other io-wallet specific Error subclasses extend.
|
|
9
|
+
*
|
|
10
|
+
* @example Checking thrown error is a io-wallet one
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* if (err instanceof errors.IoWalletError) {
|
|
14
|
+
* // ...
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
class IoWalletError extends Error {
|
|
19
|
+
/** A unique error code for the particular error subclass. */
|
|
20
|
+
static get code() {
|
|
21
|
+
return "ERR_IO_WALLET_GENERIC";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** A unique error code for the particular error subclass. */
|
|
25
|
+
code = "ERR_IO_WALLET_GENERIC";
|
|
26
|
+
constructor(message) {
|
|
27
|
+
var _Error$captureStackTr;
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = this.constructor.name;
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
(_Error$captureStackTr = Error.captureStackTrace) === null || _Error$captureStackTr === void 0 ? void 0 : _Error$captureStackTr.call(Error, this, this.constructor);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* An error subclass thrown when validation fail
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
38
|
+
exports.IoWalletError = IoWalletError;
|
|
39
|
+
class ValidationFailed extends IoWalletError {
|
|
40
|
+
static get code() {
|
|
41
|
+
return "ERR_IO_WALLET_VALIDATION_FAILED";
|
|
42
|
+
}
|
|
43
|
+
code = "ERR_IO_WALLET_VALIDATION_FAILED";
|
|
44
|
+
|
|
45
|
+
/** The Claim for which the validation failed. */
|
|
46
|
+
|
|
47
|
+
/** Reason code for the validation failure. */
|
|
48
|
+
|
|
49
|
+
constructor(message) {
|
|
50
|
+
let claim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "unspecified";
|
|
51
|
+
let reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "unspecified";
|
|
52
|
+
super(message);
|
|
53
|
+
this.claim = claim;
|
|
54
|
+
this.reason = reason;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* An error subclass thrown when validation fail
|
|
60
|
+
*
|
|
61
|
+
*/
|
|
62
|
+
exports.ValidationFailed = ValidationFailed;
|
|
63
|
+
class WalletInstanceAttestationIssuingError extends IoWalletError {
|
|
64
|
+
static get code() {
|
|
65
|
+
return "ERR_IO_WALLET_INSTANCE_ATTESTATION_ISSUING_FAILED";
|
|
66
|
+
}
|
|
67
|
+
code = "ERR_IO_WALLET_INSTANCE_ATTESTATION_ISSUING_FAILED";
|
|
68
|
+
|
|
69
|
+
/** The Claim for which the validation failed. */
|
|
70
|
+
|
|
71
|
+
/** Reason code for the validation failure. */
|
|
72
|
+
|
|
73
|
+
constructor(message) {
|
|
74
|
+
let claim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "unspecified";
|
|
75
|
+
let reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "unspecified";
|
|
76
|
+
super(message);
|
|
77
|
+
this.claim = claim;
|
|
78
|
+
this.reason = reason;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.WalletInstanceAttestationIssuingError = WalletInstanceAttestationIssuingError;
|
|
82
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IoWalletError","Error","code","constructor","message","_Error$captureStackTr","name","captureStackTrace","call","exports","ValidationFailed","claim","arguments","length","undefined","reason","WalletInstanceAttestationIssuingError"],"sourceRoot":"../../../src","sources":["utils/errors.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,aAAa,SAASC,KAAK,CAAC;EACvC;EACA,WAAWC,IAAIA,CAAA,EAAW;IACxB,OAAO,uBAAuB;EAChC;;EAEA;EACAA,IAAI,GAAW,uBAAuB;EAEtCC,WAAWA,CAACC,OAAgB,EAAE;IAAA,IAAAC,qBAAA;IAC5B,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACE,IAAI,GAAG,IAAI,CAACH,WAAW,CAACG,IAAI;IACjC;IACA,CAAAD,qBAAA,GAAAJ,KAAK,CAACM,iBAAiB,cAAAF,qBAAA,uBAAvBA,qBAAA,CAAAG,IAAA,CAAAP,KAAK,EAAqB,IAAI,EAAE,IAAI,CAACE,WAAW,CAAC;EACnD;AACF;AACA;AACA;AACA;AACA;AAHAM,OAAA,CAAAT,aAAA,GAAAA,aAAA;AAIO,MAAMU,gBAAgB,SAASV,aAAa,CAAC;EAClD,WAAWE,IAAIA,CAAA,EAAsC;IACnD,OAAO,iCAAiC;EAC1C;EAEAA,IAAI,GAAG,iCAAiC;;EAExC;;EAGA;;EAGAC,WAAWA,CAACC,OAAe,EAAiD;IAAA,IAA/CO,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,aAAa;IAAA,IAAEG,MAAM,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,aAAa;IACxE,KAAK,CAACR,OAAO,CAAC;IACd,IAAI,CAACO,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACI,MAAM,GAAGA,MAAM;EACtB;AACF;;AAEA;AACA;AACA;AACA;AAHAN,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AAIO,MAAMM,qCAAqC,SAAShB,aAAa,CAAC;EACvE,WAAWE,IAAIA,CAAA,EAAwD;IACrE,OAAO,mDAAmD;EAC5D;EAEAA,IAAI,GAAG,mDAAmD;;EAE1D;;EAGA;;EAGAC,WAAWA,CAACC,OAAe,EAAiD;IAAA,IAA/CO,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,aAAa;IAAA,IAAEG,MAAM,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,aAAa;IACxE,KAAK,CAACR,OAAO,CAAC;IACd,IAAI,CAACO,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACI,MAAM,GAAGA,MAAM;EACtB;AACF;AAACN,OAAA,CAAAO,qCAAA,GAAAA,qCAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.JWK = void 0;
|
|
7
|
+
var _zod = require("zod");
|
|
8
|
+
const JWK = _zod.z.object({
|
|
9
|
+
/** JWK "alg" (Algorithm) Parameter. */
|
|
10
|
+
alg: _zod.z.string().optional(),
|
|
11
|
+
crv: _zod.z.string().optional(),
|
|
12
|
+
d: _zod.z.string().optional(),
|
|
13
|
+
dp: _zod.z.string().optional(),
|
|
14
|
+
dq: _zod.z.string().optional(),
|
|
15
|
+
e: _zod.z.string().optional(),
|
|
16
|
+
/** JWK "ext" (Extractable) Parameter. */
|
|
17
|
+
ext: _zod.z.boolean().optional(),
|
|
18
|
+
k: _zod.z.string().optional(),
|
|
19
|
+
/** JWK "key_ops" (Key Operations) Parameter. */
|
|
20
|
+
key_ops: _zod.z.array(_zod.z.string()).optional(),
|
|
21
|
+
/** JWK "kid" (Key ID) Parameter. */
|
|
22
|
+
kid: _zod.z.string().optional(),
|
|
23
|
+
/** JWK "kty" (Key Type) Parameter.
|
|
24
|
+
* This attribute is required to discriminate the
|
|
25
|
+
* type of EC/RSA algorithm */
|
|
26
|
+
kty: _zod.z.union([_zod.z.literal("RSA"), _zod.z.literal("EC")]),
|
|
27
|
+
n: _zod.z.string().optional(),
|
|
28
|
+
p: _zod.z.string().optional(),
|
|
29
|
+
q: _zod.z.string().optional(),
|
|
30
|
+
qi: _zod.z.string().optional(),
|
|
31
|
+
/** JWK "use" (Public Key Use) Parameter. */
|
|
32
|
+
use: _zod.z.string().optional(),
|
|
33
|
+
x: _zod.z.string().optional(),
|
|
34
|
+
y: _zod.z.string().optional(),
|
|
35
|
+
/** JWK "x5c" (X.509 Certificate Chain) Parameter. */
|
|
36
|
+
x5c: _zod.z.array(_zod.z.string()).optional(),
|
|
37
|
+
/** JWK "x5t" (X.509 Certificate SHA-1 Thumbprint) Parameter. */
|
|
38
|
+
x5t: _zod.z.string().optional(),
|
|
39
|
+
/** "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Parameter. */
|
|
40
|
+
"x5t#S256": _zod.z.string().optional(),
|
|
41
|
+
/** JWK "x5u" (X.509 URL) Parameter. */
|
|
42
|
+
x5u: _zod.z.string().optional()
|
|
43
|
+
});
|
|
44
|
+
exports.JWK = JWK;
|
|
45
|
+
//# sourceMappingURL=jwk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_zod","require","JWK","z","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","exports"],"sourceRoot":"../../../src","sources":["utils/jwk.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAGO,MAAMC,GAAG,GAAGC,MAAC,CAACC,MAAM,CAAC;EAC1B;EACAC,GAAG,EAAEF,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1BC,GAAG,EAAEL,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1BE,CAAC,EAAEN,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBG,EAAE,EAAEP,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzBI,EAAE,EAAER,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzBK,CAAC,EAAET,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxB;EACAM,GAAG,EAAEV,MAAC,CAACW,OAAO,CAAC,CAAC,CAACP,QAAQ,CAAC,CAAC;EAC3BQ,CAAC,EAAEZ,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxB;EACAS,OAAO,EAAEb,MAAC,CAACc,KAAK,CAACd,MAAC,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACvC;EACAW,GAAG,EAAEf,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1B;AACF;AACA;EACEY,GAAG,EAAEhB,MAAC,CAACiB,KAAK,CAAC,CAACjB,MAAC,CAACkB,OAAO,CAAC,KAAK,CAAC,EAAElB,MAAC,CAACkB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EACjDC,CAAC,EAAEnB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBgB,CAAC,EAAEpB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBiB,CAAC,EAAErB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBkB,EAAE,EAAEtB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzB;EACAmB,GAAG,EAAEvB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1BoB,CAAC,EAAExB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxBqB,CAAC,EAAEzB,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACxB;EACAsB,GAAG,EAAE1B,MAAC,CAACc,KAAK,CAACd,MAAC,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnC;EACAuB,GAAG,EAAE3B,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC1B;EACA,UAAU,EAAEJ,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACjC;EACAwB,GAAG,EAAE5B,MAAC,CAACG,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC;AAC3B,CAAC,CAAC;AAACyB,OAAA,CAAA9B,GAAA,GAAAA,GAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "Issuing", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _issuing.Issuing;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
exports.decode = decode;
|
|
13
|
+
exports.verify = verify;
|
|
14
|
+
var _types = require("./types");
|
|
15
|
+
var _ioReactNativeJwt = require("@pagopa/io-react-native-jwt");
|
|
16
|
+
var _issuing = require("./issuing");
|
|
17
|
+
/**
|
|
18
|
+
* Decode a given JWT to get the parsed Wallet Instance Attestation object they define.
|
|
19
|
+
* It ensures provided data is in a valid shape.
|
|
20
|
+
*
|
|
21
|
+
* It DOES NOT verify token signature nor check disclosures are correctly referenced by the JWT.
|
|
22
|
+
* Use {@link verify} instead
|
|
23
|
+
*
|
|
24
|
+
* @function
|
|
25
|
+
* @param token The encoded token that represents a valid jwt for Wallet Instance Attestation
|
|
26
|
+
*
|
|
27
|
+
* @returns The validated Wallet Instance Attestation object
|
|
28
|
+
* @throws A decoding error if the token doesn't resolve in a valid JWT
|
|
29
|
+
* @throws A validation error if the provided data doesn't result in a valid Wallet Instance Attestation
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
function decode(token) {
|
|
33
|
+
// decode JWT parts
|
|
34
|
+
const decodedJwt = (0, _ioReactNativeJwt.decode)(token);
|
|
35
|
+
// parse JWT to ensure it has the shape of a WalletInstanceAttestationJwt
|
|
36
|
+
return _types.WalletInstanceAttestationJwt.parse({
|
|
37
|
+
header: decodedJwt.protectedHeader,
|
|
38
|
+
payload: decodedJwt.payload
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Verify a given JWT to get the parsed Wallet Instance Attestation object they define.
|
|
44
|
+
* Same as {@link decode} plus token signature verification
|
|
45
|
+
*
|
|
46
|
+
* @async @function
|
|
47
|
+
*
|
|
48
|
+
*
|
|
49
|
+
* @param token The encoded token that represents a valid jwt
|
|
50
|
+
*
|
|
51
|
+
* @returns {WalletInstanceAttestationJwt} The validated Wallet Instance Attestation object
|
|
52
|
+
* @throws A decoding error if the token doesn't resolve in a valid JWT
|
|
53
|
+
* @throws A validation error if the provided data doesn't result in a valid Wallet Instance Attestation
|
|
54
|
+
* @throws Invalid signature error if the token signature is not valid
|
|
55
|
+
*
|
|
56
|
+
*/
|
|
57
|
+
async function verify(token) {
|
|
58
|
+
const decoded = decode(token);
|
|
59
|
+
const pubKey = decoded.payload.cnf.jwk;
|
|
60
|
+
await (0, _ioReactNativeJwt.verify)(token, pubKey);
|
|
61
|
+
return decoded;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_types","require","_ioReactNativeJwt","_issuing","decode","token","decodedJwt","decodeJwt","WalletInstanceAttestationJwt","parse","header","protectedHeader","payload","verify","decoded","pubKey","cnf","jwk","verifyJwt"],"sourceRoot":"../../../src","sources":["wallet-instance-attestation/index.ts"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAGA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,MAAMA,CAACC,KAAa,EAAgC;EAClE;EACA,MAAMC,UAAU,GAAG,IAAAC,wBAAS,EAACF,KAAK,CAAC;EACnC;EACA,OAAOG,mCAA4B,CAACC,KAAK,CAAC;IACxCC,MAAM,EAAEJ,UAAU,CAACK,eAAe;IAClCC,OAAO,EAAEN,UAAU,CAACM;EACtB,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeC,MAAMA,CAC1BR,KAAa,EAC0B;EACvC,MAAMS,OAAO,GAAGV,MAAM,CAACC,KAAK,CAAC;EAC7B,MAAMU,MAAM,GAAGD,OAAO,CAACF,OAAO,CAACI,GAAG,CAACC,GAAG;EAEtC,MAAM,IAAAC,wBAAS,EAACb,KAAK,EAAEU,MAAM,CAAC;EAE9B,OAAOD,OAAO;AAChB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Issuing = void 0;
|
|
7
|
+
var _ioReactNativeJwt = require("@pagopa/io-react-native-jwt");
|
|
8
|
+
var _jwk = require("../utils/jwk");
|
|
9
|
+
var _types = require("./types");
|
|
10
|
+
var _reactNativeUuid = _interopRequireDefault(require("react-native-uuid"));
|
|
11
|
+
var _errors = require("../utils/errors");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
class Issuing {
|
|
14
|
+
constructor(walletProviderBaseUrl) {
|
|
15
|
+
this.walletProviderBaseUrl = walletProviderBaseUrl;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Get the Wallet Instance Attestation Request to sign
|
|
20
|
+
*
|
|
21
|
+
* @async @function
|
|
22
|
+
*
|
|
23
|
+
* @param jwk Public key of the wallet instance
|
|
24
|
+
*
|
|
25
|
+
* @returns {string} Wallet Instance Attestation Request to sign
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
async getAttestationRequestToSign(jwk) {
|
|
29
|
+
const parsedJwk = _jwk.JWK.parse(jwk);
|
|
30
|
+
const keyThumbprint = await (0, _ioReactNativeJwt.thumbprint)(parsedJwk);
|
|
31
|
+
const publicKey = {
|
|
32
|
+
...parsedJwk,
|
|
33
|
+
kid: keyThumbprint
|
|
34
|
+
};
|
|
35
|
+
const walletInstanceAttestationRequest = new _ioReactNativeJwt.SignJWT({
|
|
36
|
+
iss: keyThumbprint,
|
|
37
|
+
sub: this.walletProviderBaseUrl,
|
|
38
|
+
jti: `${_reactNativeUuid.default.v4()}`,
|
|
39
|
+
type: "WalletInstanceAttestationRequest",
|
|
40
|
+
cnf: {
|
|
41
|
+
jwk: publicKey
|
|
42
|
+
}
|
|
43
|
+
}).setProtectedHeader({
|
|
44
|
+
alg: "ES256",
|
|
45
|
+
kid: publicKey.kid,
|
|
46
|
+
typ: "var+jwt"
|
|
47
|
+
}).setIssuedAt().setExpirationTime("1h").toSign();
|
|
48
|
+
return walletInstanceAttestationRequest;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Get the Wallet Instance Attestation given a
|
|
53
|
+
* Wallet Instance Attestation Request and signature
|
|
54
|
+
*
|
|
55
|
+
* @async @function
|
|
56
|
+
*
|
|
57
|
+
* @param attestationRequest Wallet Instance Attestaion Request
|
|
58
|
+
* obtained with {@link getAttestationRequestToSign}
|
|
59
|
+
* @param signature Signature of the Wallet Instance Attestaion Request
|
|
60
|
+
* @param appFetch Optional object with fetch function to use
|
|
61
|
+
*
|
|
62
|
+
* @returns {string} Wallet Instance Attestation
|
|
63
|
+
*
|
|
64
|
+
*/
|
|
65
|
+
async getAttestation(attestationRequest, signature) {
|
|
66
|
+
let appFetch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
67
|
+
fetch
|
|
68
|
+
};
|
|
69
|
+
const signedAttestationRequest = await _ioReactNativeJwt.SignJWT.appendSignature(attestationRequest, signature);
|
|
70
|
+
const decodedRequest = (0, _ioReactNativeJwt.decode)(signedAttestationRequest);
|
|
71
|
+
const parsedRequest = _types.WalletInstanceAttestationRequestJwt.parse({
|
|
72
|
+
payload: decodedRequest.payload,
|
|
73
|
+
header: decodedRequest.protectedHeader
|
|
74
|
+
});
|
|
75
|
+
const publicKey = parsedRequest.payload.cnf.jwk;
|
|
76
|
+
await (0, _ioReactNativeJwt.verify)(signedAttestationRequest, publicKey);
|
|
77
|
+
const tokenUrl = new URL("token", this.walletProviderBaseUrl).href;
|
|
78
|
+
const requestBody = {
|
|
79
|
+
grant_type: "urn:ietf:params:oauth:client-assertion-type:jwt-key-attestation",
|
|
80
|
+
assertion: signedAttestationRequest
|
|
81
|
+
};
|
|
82
|
+
const response = await appFetch.fetch(tokenUrl, {
|
|
83
|
+
method: "POST",
|
|
84
|
+
headers: {
|
|
85
|
+
"Content-Type": "application/json"
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify(requestBody)
|
|
88
|
+
});
|
|
89
|
+
if (response.status === 201) {
|
|
90
|
+
return await response.text();
|
|
91
|
+
}
|
|
92
|
+
throw new _errors.WalletInstanceAttestationIssuingError("Unable to obtain wallet instance attestation from wallet provider", `Response code: ${response.status}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.Issuing = Issuing;
|
|
96
|
+
//# sourceMappingURL=issuing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_ioReactNativeJwt","require","_jwk","_types","_reactNativeUuid","_interopRequireDefault","_errors","obj","__esModule","default","Issuing","constructor","walletProviderBaseUrl","getAttestationRequestToSign","jwk","parsedJwk","JWK","parse","keyThumbprint","thumbprint","publicKey","kid","walletInstanceAttestationRequest","SignJWT","iss","sub","jti","uuid","v4","type","cnf","setProtectedHeader","alg","typ","setIssuedAt","setExpirationTime","toSign","getAttestation","attestationRequest","signature","appFetch","arguments","length","undefined","fetch","signedAttestationRequest","appendSignature","decodedRequest","decodeJwt","parsedRequest","WalletInstanceAttestationRequestJwt","payload","header","protectedHeader","verifyJwt","tokenUrl","URL","href","requestBody","grant_type","assertion","response","method","headers","body","JSON","stringify","status","text","WalletInstanceAttestationIssuingError","exports"],"sourceRoot":"../../../src","sources":["wallet-instance-attestation/issuing.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WalletInstanceAttestationRequestJwt = exports.WalletInstanceAttestationJwt = void 0;
|
|
7
|
+
var _jwk = require("../utils/jwk");
|
|
8
|
+
var z = _interopRequireWildcard(require("zod"));
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
11
|
+
const UnixTime = z.number().min(0).max(2147483647000);
|
|
12
|
+
const Jwt = z.object({
|
|
13
|
+
header: z.object({
|
|
14
|
+
alg: z.string(),
|
|
15
|
+
kid: z.string(),
|
|
16
|
+
typ: z.string(),
|
|
17
|
+
x5c: z.array(z.string()).optional(),
|
|
18
|
+
trust_chain: z.array(z.string()).optional()
|
|
19
|
+
}),
|
|
20
|
+
payload: z.object({
|
|
21
|
+
iss: z.string(),
|
|
22
|
+
sub: z.string(),
|
|
23
|
+
iat: UnixTime,
|
|
24
|
+
exp: UnixTime,
|
|
25
|
+
cnf: z.object({
|
|
26
|
+
jwk: _jwk.JWK
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
const WalletInstanceAttestationRequestJwt = z.object({
|
|
31
|
+
header: z.intersection(Jwt.shape.header, z.object({
|
|
32
|
+
typ: z.literal("var+jwt")
|
|
33
|
+
})),
|
|
34
|
+
payload: z.intersection(Jwt.shape.payload, z.object({
|
|
35
|
+
jti: z.string(),
|
|
36
|
+
type: z.literal("WalletInstanceAttestationRequest")
|
|
37
|
+
}))
|
|
38
|
+
});
|
|
39
|
+
exports.WalletInstanceAttestationRequestJwt = WalletInstanceAttestationRequestJwt;
|
|
40
|
+
const WalletInstanceAttestationJwt = z.object({
|
|
41
|
+
header: z.intersection(Jwt.shape.header, z.object({
|
|
42
|
+
typ: z.literal("va+jwt")
|
|
43
|
+
})),
|
|
44
|
+
payload: z.intersection(Jwt.shape.payload, z.object({
|
|
45
|
+
type: z.literal("WalletInstanceAttestation"),
|
|
46
|
+
policy_uri: z.string().url(),
|
|
47
|
+
tos_uri: z.string().url(),
|
|
48
|
+
logo_uri: z.string().url(),
|
|
49
|
+
asc: z.string(),
|
|
50
|
+
authorization_endpoint: z.string().url(),
|
|
51
|
+
response_types_supported: z.array(z.string()),
|
|
52
|
+
vp_formats_supported: z.object({
|
|
53
|
+
jwt_vp_json: z.object({
|
|
54
|
+
alg_values_supported: z.array(z.string())
|
|
55
|
+
}),
|
|
56
|
+
jwt_vc_json: z.object({
|
|
57
|
+
alg_values_supported: z.array(z.string())
|
|
58
|
+
})
|
|
59
|
+
}),
|
|
60
|
+
request_object_signing_alg_values_supported: z.array(z.string()),
|
|
61
|
+
presentation_definition_uri_supported: z.boolean()
|
|
62
|
+
}))
|
|
63
|
+
});
|
|
64
|
+
exports.WalletInstanceAttestationJwt = WalletInstanceAttestationJwt;
|
|
65
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_jwk","require","z","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","UnixTime","number","min","max","Jwt","object","header","alg","string","kid","typ","x5c","array","optional","trust_chain","payload","iss","sub","iat","exp","cnf","jwk","JWK","WalletInstanceAttestationRequestJwt","intersection","shape","literal","jti","type","exports","WalletInstanceAttestationJwt","policy_uri","url","tos_uri","logo_uri","asc","authorization_endpoint","response_types_supported","vp_formats_supported","jwt_vp_json","alg_values_supported","jwt_vc_json","request_object_signing_alg_values_supported","presentation_definition_uri_supported","boolean"],"sourceRoot":"../../../src","sources":["wallet-instance-attestation/types.ts"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PID","WalletInstanceAttestation","multiply","a","b","Promise","resolve"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,OAAO,KAAKA,GAAG,MAAM,OAAO;AAC5B,OAAO,KAAKC,yBAAyB,MAAM,+BAA+B;AAE1E,OAAO,SAASC,QAAQA,CAACC,CAAS,EAAEC,CAAS,EAAmB;EAC9D,OAAOC,OAAO,CAACC,OAAO,CAACH,CAAC,GAAGC,CAAC,CAAC;AAC/B;AAEA,SAASJ,GAAG,EAAEC,yBAAyB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SdJwt"],"sourceRoot":"../../../src","sources":["pid/index.ts"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,UAAU;AACjC,SAASA,KAAK"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getValueFromDisclosures } from "../../sd-jwt/converters";
|
|
2
|
+
import { PID } from "./types";
|
|
3
|
+
export function pidFromToken(sdJwt, disclosures) {
|
|
4
|
+
return PID.parse({
|
|
5
|
+
issuer: sdJwt.payload.iss,
|
|
6
|
+
issuedAt: new Date(sdJwt.payload.iat * 1000),
|
|
7
|
+
expiration: new Date(sdJwt.payload.exp * 1000),
|
|
8
|
+
verification: {
|
|
9
|
+
trustFramework: sdJwt.payload.verified_claims.verification.trust_framework,
|
|
10
|
+
assuranceLevel: sdJwt.payload.verified_claims.verification.assurance_level,
|
|
11
|
+
evidence: getValueFromDisclosures(disclosures, "evidence")
|
|
12
|
+
},
|
|
13
|
+
claims: {
|
|
14
|
+
uniqueId: getValueFromDisclosures(disclosures, "unique_id"),
|
|
15
|
+
givenName: getValueFromDisclosures(disclosures, "given_name"),
|
|
16
|
+
familyName: getValueFromDisclosures(disclosures, "family_name"),
|
|
17
|
+
birthdate: getValueFromDisclosures(disclosures, "birthdate"),
|
|
18
|
+
placeOfBirth: getValueFromDisclosures(disclosures, "place_of_birth"),
|
|
19
|
+
taxIdCode: getValueFromDisclosures(disclosures, "tax_id_number")
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getValueFromDisclosures","PID","pidFromToken","sdJwt","disclosures","parse","issuer","payload","iss","issuedAt","Date","iat","expiration","exp","verification","trustFramework","verified_claims","trust_framework","assuranceLevel","assurance_level","evidence","claims","uniqueId","givenName","familyName","birthdate","placeOfBirth","taxIdCode"],"sourceRoot":"../../../../src","sources":["pid/sd-jwt/converters.ts"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,yBAAyB;AAEjE,SAASC,GAAG,QAAQ,SAAS;AAE7B,OAAO,SAASC,YAAYA,CAACC,KAAe,EAAEC,WAAyB,EAAO;EAC5E,OAAOH,GAAG,CAACI,KAAK,CAAC;IACfC,MAAM,EAAEH,KAAK,CAACI,OAAO,CAACC,GAAG;IACzBC,QAAQ,EAAE,IAAIC,IAAI,CAACP,KAAK,CAACI,OAAO,CAACI,GAAG,GAAG,IAAI,CAAC;IAC5CC,UAAU,EAAE,IAAIF,IAAI,CAACP,KAAK,CAACI,OAAO,CAACM,GAAG,GAAG,IAAI,CAAC;IAC9CC,YAAY,EAAE;MACZC,cAAc,EACZZ,KAAK,CAACI,OAAO,CAACS,eAAe,CAACF,YAAY,CAACG,eAAe;MAC5DC,cAAc,EACZf,KAAK,CAACI,OAAO,CAACS,eAAe,CAACF,YAAY,CAACK,eAAe;MAC5DC,QAAQ,EAAEpB,uBAAuB,CAACI,WAAW,EAAE,UAAU;IAC3D,CAAC;IACDiB,MAAM,EAAE;MACNC,QAAQ,EAAEtB,uBAAuB,CAACI,WAAW,EAAE,WAAW,CAAC;MAC3DmB,SAAS,EAAEvB,uBAAuB,CAACI,WAAW,EAAE,YAAY,CAAC;MAC7DoB,UAAU,EAAExB,uBAAuB,CAACI,WAAW,EAAE,aAAa,CAAC;MAC/DqB,SAAS,EAAEzB,uBAAuB,CAACI,WAAW,EAAE,WAAW,CAAC;MAC5DsB,YAAY,EAAE1B,uBAAuB,CAACI,WAAW,EAAE,gBAAgB,CAAC;MACpEuB,SAAS,EAAE3B,uBAAuB,CAACI,WAAW,EAAE,eAAe;IACjE;EACF,CAAC,CAAC;AACJ"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { decode as decodeJwt } from "../../sd-jwt";
|
|
2
|
+
import { verify as verifyJwt } from "../../sd-jwt";
|
|
3
|
+
import { pidFromToken } from "./converters";
|
|
4
|
+
import { SdJwt4VC } from "../../sd-jwt/types";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Decode a given SD-JWT with Disclosures to get the parsed PID object they define.
|
|
8
|
+
* It ensures provided data is in a valid shape.
|
|
9
|
+
*
|
|
10
|
+
* It DOES NOT verify token signature nor check disclosures are correctly referenced by the SD-JWT.
|
|
11
|
+
* Use {@link verify} instead
|
|
12
|
+
*
|
|
13
|
+
* @function
|
|
14
|
+
* @param token The encoded token that represents a valid sd-jwt for verifiable credentials
|
|
15
|
+
*
|
|
16
|
+
* @returns The validated PID object along with the parsed SD-JWT token and the parsed disclosures
|
|
17
|
+
* @throws A decoding error if the token doesn't resolve in a valid SD-JWT
|
|
18
|
+
* @throws A validation error if the provided data doesn't result in a valid PID
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
export function decode(token) {
|
|
22
|
+
let {
|
|
23
|
+
sdJwt,
|
|
24
|
+
disclosures
|
|
25
|
+
} = decodeJwt(token, SdJwt4VC);
|
|
26
|
+
const pid = pidFromToken(sdJwt, disclosures);
|
|
27
|
+
return {
|
|
28
|
+
pid,
|
|
29
|
+
sdJwt,
|
|
30
|
+
disclosures
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Verify a given SD-JWT with Disclosures to get the parsed PID object they define.
|
|
36
|
+
* Same as {@link decode} plus:
|
|
37
|
+
* - token signature verification
|
|
38
|
+
* - ensure disclosures are well-defined inside the SD-JWT
|
|
39
|
+
*
|
|
40
|
+
* @async @function
|
|
41
|
+
*
|
|
42
|
+
* @todo implement signature validation
|
|
43
|
+
* @todo check disclosures in sd-jwt
|
|
44
|
+
*
|
|
45
|
+
* @param token The encoded token that represents a valid sd-jwt for verifiable credentials
|
|
46
|
+
*
|
|
47
|
+
* @returns {VerifyResult} The validated PID object along with the parsed SD-JWT token and the parsed disclosures
|
|
48
|
+
* @throws A decoding error if the token doesn't resolve in a valid SD-JWT
|
|
49
|
+
* @throws A validation error if the provided data doesn't result in a valid PID
|
|
50
|
+
* @throws A validation error if the provided disclosures are not defined in the SD-JWT
|
|
51
|
+
* @throws Invalid signature error if the token signature is not valid
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
export async function verify(token) {
|
|
55
|
+
const decoded = decode(token);
|
|
56
|
+
const publicKey = decoded.sdJwt.payload.cnf.jwk;
|
|
57
|
+
await verifyJwt(token, publicKey, SdJwt4VC);
|
|
58
|
+
return decoded;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Result object for {@link verify}
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
export { PID } from "./types";
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["decode","decodeJwt","verify","verifyJwt","pidFromToken","SdJwt4VC","token","sdJwt","disclosures","pid","decoded","publicKey","payload","cnf","jwk","PID"],"sourceRoot":"../../../../src","sources":["pid/sd-jwt/index.ts"],"mappings":"AAAA,SAASA,MAAM,IAAIC,SAAS,QAAQ,cAAc;AAClD,SAASC,MAAM,IAAIC,SAAS,QAAQ,cAAc;AAElD,SAASC,YAAY,QAAQ,cAAc;AAC3C,SAAqBC,QAAQ,QAAQ,oBAAoB;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASL,MAAMA,CAACM,KAAa,EAAgB;EAClD,IAAI;IAAEC,KAAK;IAAEC;EAAY,CAAC,GAAGP,SAAS,CAACK,KAAK,EAAED,QAAQ,CAAC;EACvD,MAAMI,GAAG,GAAGL,YAAY,CAACG,KAAK,EAAEC,WAAW,CAAC;EAE5C,OAAO;IAAEC,GAAG;IAAEF,KAAK;IAAEC;EAAY,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeN,MAAMA,CAACI,KAAa,EAAyB;EACjE,MAAMI,OAAO,GAAGV,MAAM,CAACM,KAAK,CAAC;EAC7B,MAAMK,SAAS,GAAGD,OAAO,CAACH,KAAK,CAACK,OAAO,CAACC,GAAG,CAACC,GAAG;EAC/C,MAAMX,SAAS,CAACG,KAAK,EAAEK,SAAS,EAAEN,QAAQ,CAAC;EAE3C,OAAOK,OAAO;AAChB;;AAWA;AACA;AACA;;AAGA,SAASK,GAAG,QAAQ,SAAS"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const VerificationEvidence = z.object({
|
|
3
|
+
type: z.string(),
|
|
4
|
+
record: z.object({
|
|
5
|
+
type: z.string(),
|
|
6
|
+
source: z.object({
|
|
7
|
+
organization_name: z.string(),
|
|
8
|
+
organization_id: z.string(),
|
|
9
|
+
country_code: z.string()
|
|
10
|
+
})
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
const Verification = z.object({
|
|
14
|
+
trustFramework: z.literal("eidas"),
|
|
15
|
+
assuranceLevel: z.string(),
|
|
16
|
+
evidence: z.array(VerificationEvidence)
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Data structure for the PID.
|
|
21
|
+
* It contains PID claims in plain text as well as verification data with the issuer's information
|
|
22
|
+
*
|
|
23
|
+
* @see https://italia.github.io/eidas-it-wallet-docs/en/pid-data-model.html
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
export const PID = z.object({
|
|
27
|
+
issuer: z.string(),
|
|
28
|
+
issuedAt: z.date(),
|
|
29
|
+
expiration: z.date(),
|
|
30
|
+
verification: Verification,
|
|
31
|
+
claims: z.object({
|
|
32
|
+
uniqueId: z.string(),
|
|
33
|
+
givenName: z.string(),
|
|
34
|
+
familyName: z.string(),
|
|
35
|
+
birthdate: z.string(),
|
|
36
|
+
placeOfBirth: z.object({
|
|
37
|
+
country: z.string(),
|
|
38
|
+
locality: z.string()
|
|
39
|
+
}),
|
|
40
|
+
taxIdCode: z.string()
|
|
41
|
+
})
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["z","VerificationEvidence","object","type","string","record","source","organization_name","organization_id","country_code","Verification","trustFramework","literal","assuranceLevel","evidence","array","PID","issuer","issuedAt","date","expiration","verification","claims","uniqueId","givenName","familyName","birthdate","placeOfBirth","country","locality","taxIdCode"],"sourceRoot":"../../../../src","sources":["pid/sd-jwt/types.ts"],"mappings":"AAAA,SAASA,CAAC,QAAQ,KAAK;AAEvB,MAAMC,oBAAoB,GAAGD,CAAC,CAACE,MAAM,CAAC;EACpCC,IAAI,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC;EAChBC,MAAM,EAAEL,CAAC,CAACE,MAAM,CAAC;IACfC,IAAI,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC;IAChBE,MAAM,EAAEN,CAAC,CAACE,MAAM,CAAC;MACfK,iBAAiB,EAAEP,CAAC,CAACI,MAAM,CAAC,CAAC;MAC7BI,eAAe,EAAER,CAAC,CAACI,MAAM,CAAC,CAAC;MAC3BK,YAAY,EAAET,CAAC,CAACI,MAAM,CAAC;IACzB,CAAC;EACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAMM,YAAY,GAAGV,CAAC,CAACE,MAAM,CAAC;EAC5BS,cAAc,EAAEX,CAAC,CAACY,OAAO,CAAC,OAAO,CAAC;EAClCC,cAAc,EAAEb,CAAC,CAACI,MAAM,CAAC,CAAC;EAC1BU,QAAQ,EAAEd,CAAC,CAACe,KAAK,CAACd,oBAAoB;AACxC,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMe,GAAG,GAAGhB,CAAC,CAACE,MAAM,CAAC;EAC1Be,MAAM,EAAEjB,CAAC,CAACI,MAAM,CAAC,CAAC;EAClBc,QAAQ,EAAElB,CAAC,CAACmB,IAAI,CAAC,CAAC;EAClBC,UAAU,EAAEpB,CAAC,CAACmB,IAAI,CAAC,CAAC;EACpBE,YAAY,EAAEX,YAAY;EAC1BY,MAAM,EAAEtB,CAAC,CAACE,MAAM,CAAC;IACfqB,QAAQ,EAAEvB,CAAC,CAACI,MAAM,CAAC,CAAC;IACpBoB,SAAS,EAAExB,CAAC,CAACI,MAAM,CAAC,CAAC;IACrBqB,UAAU,EAAEzB,CAAC,CAACI,MAAM,CAAC,CAAC;IACtBsB,SAAS,EAAE1B,CAAC,CAACI,MAAM,CAAC,CAAC;IACrBuB,YAAY,EAAE3B,CAAC,CAACE,MAAM,CAAC;MACrB0B,OAAO,EAAE5B,CAAC,CAACI,MAAM,CAAC,CAAC;MACnByB,QAAQ,EAAE7B,CAAC,CAACI,MAAM,CAAC;IACrB,CAAC,CAAC;IACF0B,SAAS,EAAE9B,CAAC,CAACI,MAAM,CAAC;EACtB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getValueFromDisclosures } from "../converters";
|
|
2
|
+
const disclosures = [["6w1_soRXFgaHKfpYn3cvfQ", "given_name", "Mario"], ["fuNp97Hf3wV6y48y-QZhIg", "birthdate", "1980-10-01"], ["p-9LzyWHZBVDvhXDWkN2xA", "place_of_birth", {
|
|
3
|
+
country: "IT",
|
|
4
|
+
locality: "Rome"
|
|
5
|
+
}]];
|
|
6
|
+
describe("getValueFromDisclosures", () => {
|
|
7
|
+
it("should return correct value for given_name", () => {
|
|
8
|
+
const success = getValueFromDisclosures(disclosures, "given_name");
|
|
9
|
+
expect(success).toBe("Mario");
|
|
10
|
+
});
|
|
11
|
+
it("should return correct value for place_of_birth", () => {
|
|
12
|
+
const success = getValueFromDisclosures(disclosures, "place_of_birth");
|
|
13
|
+
expect(success).toEqual({
|
|
14
|
+
country: "IT",
|
|
15
|
+
locality: "Rome"
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it("should fail", () => {
|
|
19
|
+
const success = getValueFromDisclosures(disclosures, "given_surname");
|
|
20
|
+
expect(success).toBeUndefined();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=converters.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getValueFromDisclosures","disclosures","country","locality","describe","it","success","expect","toBe","toEqual","toBeUndefined"],"sourceRoot":"../../../../src","sources":["sd-jwt/__test__/converters.test.ts"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,eAAe;AAGvD,MAAMC,WAAyB,GAAG,CAChC,CAAC,wBAAwB,EAAE,YAAY,EAAE,OAAO,CAAC,EACjD,CAAC,wBAAwB,EAAE,WAAW,EAAE,YAAY,CAAC,EACrD,CACE,wBAAwB,EACxB,gBAAgB,EAChB;EAAEC,OAAO,EAAE,IAAI;EAAEC,QAAQ,EAAE;AAAO,CAAC,CACpC,CACF;AAEDC,QAAQ,CAAC,yBAAyB,EAAE,MAAM;EACxCC,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrD,MAAMC,OAAO,GAAGN,uBAAuB,CAACC,WAAW,EAAE,YAAY,CAAC;IAClEM,MAAM,CAACD,OAAO,CAAC,CAACE,IAAI,CAAC,OAAO,CAAC;EAC/B,CAAC,CAAC;EACFH,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzD,MAAMC,OAAO,GAAGN,uBAAuB,CAACC,WAAW,EAAE,gBAAgB,CAAC;IACtEM,MAAM,CAACD,OAAO,CAAC,CAACG,OAAO,CAAC;MAAEP,OAAO,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAO,CAAC,CAAC;EAC9D,CAAC,CAAC;EACFE,EAAE,CAAC,aAAa,EAAE,MAAM;IACtB,MAAMC,OAAO,GAAGN,uBAAuB,CAACC,WAAW,EAAE,eAAe,CAAC;IACrEM,MAAM,CAACD,OAAO,CAAC,CAACI,aAAa,CAAC,CAAC;EACjC,CAAC,CAAC;AACJ,CAAC,CAAC"}
|