@pagopa/io-react-native-jwt 0.4.1

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 (113) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +145 -0
  3. package/android/build.gradle +97 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +4 -0
  6. package/android/src/main/java/com/pagopa/ioreactnativejwt/IoReactNativeJwtModule.kt +114 -0
  7. package/android/src/main/java/com/pagopa/ioreactnativejwt/IoReactNativeJwtPackage.kt +17 -0
  8. package/android/src/main/java/com/pagopa/ioreactnativejwt/Utils.kt +95 -0
  9. package/ios/ASN1DERParsing.swift +226 -0
  10. package/ios/IoReactNativeJwt-Bridging-Header.h +2 -0
  11. package/ios/IoReactNativeJwt.mm +28 -0
  12. package/ios/IoReactNativeJwt.swift +156 -0
  13. package/ios/IoReactNativeJwt.xcodeproj/project.pbxproj +283 -0
  14. package/lib/commonjs/algorithms.js +39 -0
  15. package/lib/commonjs/algorithms.js.map +1 -0
  16. package/lib/commonjs/hash.js +17 -0
  17. package/lib/commonjs/hash.js.map +1 -0
  18. package/lib/commonjs/index.js +194 -0
  19. package/lib/commonjs/index.js.map +1 -0
  20. package/lib/commonjs/jwt_claims_set.js +112 -0
  21. package/lib/commonjs/jwt_claims_set.js.map +1 -0
  22. package/lib/commonjs/produce.js +140 -0
  23. package/lib/commonjs/produce.js.map +1 -0
  24. package/lib/commonjs/sign.js +159 -0
  25. package/lib/commonjs/sign.js.map +1 -0
  26. package/lib/commonjs/types.js +2 -0
  27. package/lib/commonjs/types.js.map +1 -0
  28. package/lib/commonjs/unsecured.js +118 -0
  29. package/lib/commonjs/unsecured.js.map +1 -0
  30. package/lib/commonjs/utils/asn1.js +37 -0
  31. package/lib/commonjs/utils/asn1.js.map +1 -0
  32. package/lib/commonjs/utils/base64.js +43 -0
  33. package/lib/commonjs/utils/base64.js.map +1 -0
  34. package/lib/commonjs/utils/errors.js +214 -0
  35. package/lib/commonjs/utils/errors.js.map +1 -0
  36. package/lib/commonjs/utils/is_object.js +23 -0
  37. package/lib/commonjs/utils/is_object.js.map +1 -0
  38. package/lib/commonjs/utils/proxy.js +17 -0
  39. package/lib/commonjs/utils/proxy.js.map +1 -0
  40. package/lib/commonjs/utils/secs.js +61 -0
  41. package/lib/commonjs/utils/secs.js.map +1 -0
  42. package/lib/module/algorithms.js +29 -0
  43. package/lib/module/algorithms.js.map +1 -0
  44. package/lib/module/hash.js +11 -0
  45. package/lib/module/hash.js.map +1 -0
  46. package/lib/module/index.js +115 -0
  47. package/lib/module/index.js.map +1 -0
  48. package/lib/module/jwt_claims_set.js +103 -0
  49. package/lib/module/jwt_claims_set.js.map +1 -0
  50. package/lib/module/produce.js +131 -0
  51. package/lib/module/produce.js.map +1 -0
  52. package/lib/module/sign.js +153 -0
  53. package/lib/module/sign.js.map +1 -0
  54. package/lib/module/types.js +2 -0
  55. package/lib/module/types.js.map +1 -0
  56. package/lib/module/unsecured.js +110 -0
  57. package/lib/module/unsecured.js.map +1 -0
  58. package/lib/module/utils/asn1.js +31 -0
  59. package/lib/module/utils/asn1.js.map +1 -0
  60. package/lib/module/utils/base64.js +36 -0
  61. package/lib/module/utils/base64.js.map +1 -0
  62. package/lib/module/utils/errors.js +200 -0
  63. package/lib/module/utils/errors.js.map +1 -0
  64. package/lib/module/utils/is_object.js +17 -0
  65. package/lib/module/utils/is_object.js.map +1 -0
  66. package/lib/module/utils/proxy.js +10 -0
  67. package/lib/module/utils/proxy.js.map +1 -0
  68. package/lib/module/utils/secs.js +53 -0
  69. package/lib/module/utils/secs.js.map +1 -0
  70. package/lib/typescript/algorithms.d.ts +5 -0
  71. package/lib/typescript/algorithms.d.ts.map +1 -0
  72. package/lib/typescript/hash.d.ts +5 -0
  73. package/lib/typescript/hash.d.ts.map +1 -0
  74. package/lib/typescript/index.d.ts +93 -0
  75. package/lib/typescript/index.d.ts.map +1 -0
  76. package/lib/typescript/jwt_claims_set.d.ts +4 -0
  77. package/lib/typescript/jwt_claims_set.d.ts.map +1 -0
  78. package/lib/typescript/produce.d.ts +55 -0
  79. package/lib/typescript/produce.d.ts.map +1 -0
  80. package/lib/typescript/sign.d.ts +61 -0
  81. package/lib/typescript/sign.d.ts.map +1 -0
  82. package/lib/typescript/types.d.ts +172 -0
  83. package/lib/typescript/types.d.ts.map +1 -0
  84. package/lib/typescript/unsecured.d.ts +64 -0
  85. package/lib/typescript/unsecured.d.ts.map +1 -0
  86. package/lib/typescript/utils/asn1.d.ts +2 -0
  87. package/lib/typescript/utils/asn1.d.ts.map +1 -0
  88. package/lib/typescript/utils/base64.d.ts +4 -0
  89. package/lib/typescript/utils/base64.d.ts.map +1 -0
  90. package/lib/typescript/utils/errors.d.ts +157 -0
  91. package/lib/typescript/utils/errors.d.ts.map +1 -0
  92. package/lib/typescript/utils/is_object.d.ts +2 -0
  93. package/lib/typescript/utils/is_object.d.ts.map +1 -0
  94. package/lib/typescript/utils/proxy.d.ts +2 -0
  95. package/lib/typescript/utils/proxy.d.ts.map +1 -0
  96. package/lib/typescript/utils/secs.d.ts +4 -0
  97. package/lib/typescript/utils/secs.d.ts.map +1 -0
  98. package/package.json +170 -0
  99. package/pagopa-io-react-native-jwt.podspec +44 -0
  100. package/src/algorithms.ts +46 -0
  101. package/src/hash.ts +10 -0
  102. package/src/index.tsx +120 -0
  103. package/src/jwt_claims_set.ts +194 -0
  104. package/src/produce.ts +109 -0
  105. package/src/sign.ts +180 -0
  106. package/src/types.ts +203 -0
  107. package/src/unsecured.ts +127 -0
  108. package/src/utils/asn1.ts +36 -0
  109. package/src/utils/base64.ts +37 -0
  110. package/src/utils/errors.ts +206 -0
  111. package/src/utils/is_object.ts +20 -0
  112. package/src/utils/proxy.ts +15 -0
  113. package/src/utils/secs.ts +58 -0
@@ -0,0 +1,110 @@
1
+ import { JWTInvalid } from './utils/errors';
2
+ import jwtPayload from './jwt_claims_set';
3
+ import { ProduceJWT } from './produce';
4
+ import { decodeBase64, encodeBase64 } from './utils/base64';
5
+ /**
6
+ * The UnsecuredJWT class is a utility for dealing with `{ "alg": "none" }` Unsecured JWTs.
7
+ *
8
+ * @example Encoding
9
+ *
10
+ * ```js
11
+ * const unsecuredJwt = new UnsecuredJWT({ 'urn:example:claim': true })
12
+ * .setIssuedAt()
13
+ * .setIssuer('urn:example:issuer')
14
+ * .setAudience('urn:example:audience')
15
+ * .setExpirationTime('2h')
16
+ * .encode()
17
+ *
18
+ * console.log(unsecuredJwt)
19
+ * ```
20
+ *
21
+ * @example Decoding
22
+ *
23
+ * ```js
24
+ * const payload = UnsecuredJWT.decode(jwt, {
25
+ * issuer: 'urn:example:issuer',
26
+ * audience: 'urn:example:audience',
27
+ * })
28
+ *
29
+ * console.log(payload)
30
+ * ```
31
+ * * @example JWT content ToSign
32
+ *
33
+ * ```js
34
+ * const jwtToSign = new UnsecuredJWT({ 'urn:example:claim': true })
35
+ * .setIssuedAt()
36
+ * .setIssuer('urn:example:issuer')
37
+ * .setAudience('urn:example:audience')
38
+ * .setExpirationTime('2h')
39
+ * .toSign()
40
+ *
41
+ * console.log(jwtToSign)
42
+ * ```
43
+ */
44
+ export class UnsecuredJWT extends ProduceJWT {
45
+ /** Encodes the Unsecured JWT. */
46
+ encode() {
47
+ const header = encodeBase64(JSON.stringify({
48
+ alg: 'none'
49
+ }));
50
+ const payload = encodeBase64(JSON.stringify(this._payload));
51
+ return `${header}.${payload}.`;
52
+ }
53
+
54
+ /**
55
+ * Decodes an unsecured JWT.
56
+ *
57
+ * @param jwt Unsecured JWT to decode the payload of.
58
+ * @param options JWT Claims Set validation options.
59
+ */
60
+ static decode(jwt, options) {
61
+ if (typeof jwt !== 'string') {
62
+ throw new JWTInvalid('Unsecured JWT must be a string');
63
+ }
64
+ const {
65
+ 0: encodedHeader,
66
+ 1: encodedPayload,
67
+ 2: signature,
68
+ length
69
+ } = jwt.split('.');
70
+ if (length !== 3 || signature !== '' || !encodedPayload) {
71
+ throw new JWTInvalid('Invalid Unsecured JWT');
72
+ }
73
+ let header;
74
+ try {
75
+ let decoded = decodeBase64(encodedHeader);
76
+ header = JSON.parse(decoded);
77
+ if (header.alg !== 'none') throw new Error();
78
+ } catch {
79
+ throw new JWTInvalid('Invalid Unsecured JWT');
80
+ }
81
+ let payload = UnsecuredJWT.decodePayload(encodedPayload, options);
82
+ return {
83
+ payload,
84
+ header
85
+ };
86
+ }
87
+
88
+ /**
89
+ * Decodes an unsecured JWT payload.
90
+ *
91
+ * @param jwt Unsecured JWT payload to decode.
92
+ * @param options JWT Claims Set validation options.
93
+ */
94
+ static decodePayload(jwt, options) {
95
+ if (typeof jwt !== 'string') {
96
+ throw new JWTInvalid('Unsecured JWT must be a string');
97
+ }
98
+ const {
99
+ 0: encodedPayload,
100
+ length
101
+ } = jwt.split('.');
102
+ if (length !== 1 || encodedPayload === '') {
103
+ throw new JWTInvalid('Invalid Unsecured JWT');
104
+ }
105
+ let decodedPayload = decodeBase64(encodedPayload);
106
+ const payload = jwtPayload({}, JSON.parse(decodedPayload), options);
107
+ return payload;
108
+ }
109
+ }
110
+ //# sourceMappingURL=unsecured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["JWTInvalid","jwtPayload","ProduceJWT","decodeBase64","encodeBase64","UnsecuredJWT","encode","header","JSON","stringify","alg","payload","_payload","decode","jwt","options","encodedHeader","encodedPayload","signature","length","split","decoded","parse","Error","decodePayload","decodedPayload"],"sourceRoot":"../../src","sources":["unsecured.ts"],"mappings":"AAMA,SAASA,UAAU,QAAQ,gBAAgB;AAC3C,OAAOC,UAAU,MAAM,kBAAkB;AACzC,SAASC,UAAU,QAAQ,WAAW;AACtC,SAASC,YAAY,EAAEC,YAAY,QAAQ,gBAAgB;AAO3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASH,UAAU,CAAC;EAC3C;EACAI,MAAMA,CAAA,EAAW;IACf,MAAMC,MAAM,GAAGH,YAAY,CAACI,IAAI,CAACC,SAAS,CAAC;MAAEC,GAAG,EAAE;IAAO,CAAC,CAAC,CAAC;IAC5D,MAAMC,OAAO,GAAGP,YAAY,CAACI,IAAI,CAACC,SAAS,CAAC,IAAI,CAACG,QAAQ,CAAC,CAAC;IAE3D,OAAQ,GAAEL,MAAO,IAAGI,OAAQ,GAAE;EAChC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOE,MAAMA,CACXC,GAAW,EACXC,OAAqC,EACpB;IACjB,IAAI,OAAOD,GAAG,KAAK,QAAQ,EAAE;MAC3B,MAAM,IAAId,UAAU,CAAC,gCAAgC,CAAC;IACxD;IACA,MAAM;MACJ,CAAC,EAAEgB,aAAa;MAChB,CAAC,EAAEC,cAAc;MACjB,CAAC,EAAEC,SAAS;MACZC;IACF,CAAC,GAAGL,GAAG,CAACM,KAAK,CAAC,GAAG,CAAC;IAElB,IAAID,MAAM,KAAK,CAAC,IAAID,SAAS,KAAK,EAAE,IAAI,CAACD,cAAc,EAAE;MACvD,MAAM,IAAIjB,UAAU,CAAC,uBAAuB,CAAC;IAC/C;IAEA,IAAIO,MAA2B;IAC/B,IAAI;MACF,IAAIc,OAAO,GAAGlB,YAAY,CAACa,aAAc,CAAC;MAC1CT,MAAM,GAAGC,IAAI,CAACc,KAAK,CAACD,OAAO,CAAC;MAC5B,IAAId,MAAM,CAACG,GAAG,KAAK,MAAM,EAAE,MAAM,IAAIa,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,MAAM;MACN,MAAM,IAAIvB,UAAU,CAAC,uBAAuB,CAAC;IAC/C;IAEA,IAAIW,OAAO,GAAGN,YAAY,CAACmB,aAAa,CAACP,cAAc,EAAEF,OAAO,CAAC;IAEjE,OAAO;MAAEJ,OAAO;MAAEJ;IAAO,CAAC;EAC5B;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOiB,aAAaA,CAClBV,GAAW,EACXC,OAAqC,EACzB;IACZ,IAAI,OAAOD,GAAG,KAAK,QAAQ,EAAE;MAC3B,MAAM,IAAId,UAAU,CAAC,gCAAgC,CAAC;IACxD;IACA,MAAM;MAAE,CAAC,EAAEiB,cAAc;MAAEE;IAAO,CAAC,GAAGL,GAAG,CAACM,KAAK,CAAC,GAAG,CAAC;IAEpD,IAAID,MAAM,KAAK,CAAC,IAAIF,cAAc,KAAK,EAAE,EAAE;MACzC,MAAM,IAAIjB,UAAU,CAAC,uBAAuB,CAAC;IAC/C;IAEA,IAAIyB,cAAc,GAAGtB,YAAY,CAACc,cAAe,CAAC;IAClD,MAAMN,OAAO,GAAGV,UAAU,CAAC,CAAC,CAAC,EAAEO,IAAI,CAACc,KAAK,CAACG,cAAc,CAAC,EAAEV,OAAO,CAAC;IAEnE,OAAOJ,OAAO;EAChB;AACF"}
@@ -0,0 +1,31 @@
1
+ import { getCoordinateOctetLength, getKtyFromAlg } from '../algorithms';
2
+ import { IoReactNativeJwt } from './proxy';
3
+ import { removePadding } from './base64';
4
+ import { JOSENotSupported } from './errors';
5
+
6
+ /*
7
+ * Transcodes the JCA ASN.1/DER-encoded signature into the concatenated R + S format expected by ECDSA JWS.
8
+ * Returns a base64 url encoded String.
9
+ *
10
+ * @example Usage with an ASN.1/DER-encoded
11
+ *
12
+ * ```js
13
+ * const asn1Signature = 'Yw1xTT....'
14
+ * const plainSignature = await derToJose(asn1Signature, "ECDSA256")
15
+ *
16
+ * ```
17
+ *
18
+ * @param asn1Signature ASN.1/DER-encoded signature
19
+ * @param alg Algorithm used to sign
20
+ */
21
+ export const derToJose = async (asn1Signature, alg) => {
22
+ const kty = getKtyFromAlg(alg);
23
+ if (kty === 'EC') {
24
+ const unpackedJws = await IoReactNativeJwt.unpackBerEncodedASN1(asn1Signature, getCoordinateOctetLength(alg));
25
+ const encodedJws = removePadding(unpackedJws);
26
+ return encodedJws;
27
+ } else {
28
+ throw new JOSENotSupported('Unsupported "alg" value');
29
+ }
30
+ };
31
+ //# sourceMappingURL=asn1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getCoordinateOctetLength","getKtyFromAlg","IoReactNativeJwt","removePadding","JOSENotSupported","derToJose","asn1Signature","alg","kty","unpackedJws","unpackBerEncodedASN1","encodedJws"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":"AAAA,SAASA,wBAAwB,EAAEC,aAAa,QAAQ,eAAe;AACvE,SAASC,gBAAgB,QAAQ,SAAS;AAC1C,SAASC,aAAa,QAAQ,UAAU;AACxC,SAASC,gBAAgB,QAAQ,UAAU;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,GAAG,MAAAA,CACvBC,aAAqB,EACrBC,GAAW,KACS;EACpB,MAAMC,GAAG,GAAGP,aAAa,CAACM,GAAG,CAAC;EAC9B,IAAIC,GAAG,KAAK,IAAI,EAAE;IAChB,MAAMC,WAAW,GAAG,MAAMP,gBAAgB,CAACQ,oBAAoB,CAC7DJ,aAAa,EACbN,wBAAwB,CAACO,GAAG,CAC9B,CAAC;IACD,MAAMI,UAAU,GAAGR,aAAa,CAACM,WAAW,CAAC;IAC7C,OAAOE,UAAU;EACnB,CAAC,MAAM;IACL,MAAM,IAAIP,gBAAgB,CAAC,yBAAyB,CAAC;EACvD;AACF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { btoa, atob } from 'abab';
2
+ import { JOSEError } from './errors';
3
+
4
+ /*
5
+ * In Base64 encoding, the length of an output-encoded String
6
+ * must be a multiple of four. If necessary, the encoder adds
7
+ * one or two padding characters (=) at the end of the output
8
+ * as needed in order to meet this requirement.
9
+ *
10
+ * JWTs make use of the base64url encoding as defined in RFC 4648.
11
+ * As allowed by Section 3.2 of the RFC, this specification mandates
12
+ * that base64url encoding when used with JWTs MUST NOT use padding.
13
+ * The reason for this restriction is that the padding character
14
+ * ('=') is not URL safe.
15
+ */
16
+ export function encodeBase64(value) {
17
+ let encoded = btoa(value);
18
+ if (encoded) {
19
+ return removePadding(encoded);
20
+ } else {
21
+ throw new JOSEError('Unable to encode string to base64');
22
+ }
23
+ }
24
+ export function decodeBase64(value) {
25
+ let decoded = atob(value);
26
+ if (decoded) {
27
+ return decoded;
28
+ } else {
29
+ throw new JOSEError('Unable to decode base64 string');
30
+ }
31
+ }
32
+ export function removePadding(encoded) {
33
+ // eslint-disable-next-line no-div-regex
34
+ return encoded.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
35
+ }
36
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["btoa","atob","JOSEError","encodeBase64","value","encoded","removePadding","decodeBase64","decoded","replace"],"sourceRoot":"../../../src","sources":["utils/base64.ts"],"mappings":"AAAA,SAASA,IAAI,EAAEC,IAAI,QAAQ,MAAM;AACjC,SAASC,SAAS,QAAQ,UAAU;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,KAAa,EAAU;EAClD,IAAIC,OAAO,GAAGL,IAAI,CAACI,KAAK,CAAC;EACzB,IAAIC,OAAO,EAAE;IACX,OAAOC,aAAa,CAACD,OAAO,CAAC;EAC/B,CAAC,MAAM;IACL,MAAM,IAAIH,SAAS,CAAC,mCAAmC,CAAC;EAC1D;AACF;AAEA,OAAO,SAASK,YAAYA,CAACH,KAAa,EAAU;EAClD,IAAII,OAAO,GAAGP,IAAI,CAACG,KAAK,CAAC;EACzB,IAAII,OAAO,EAAE;IACX,OAAOA,OAAO;EAChB,CAAC,MAAM;IACL,MAAM,IAAIN,SAAS,CAAC,gCAAgC,CAAC;EACvD;AACF;AAEA,OAAO,SAASI,aAAaA,CAACD,OAAe,EAAU;EACrD;EACA,OAAOA,OAAO,CAACI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC1E"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * A generic Error that all other JOSE specific Error subclasses extend.
3
+ *
4
+ * @example Checking thrown error is a JOSE one
5
+ *
6
+ * ```js
7
+ * if (err instanceof errors.JOSEError) {
8
+ * // ...
9
+ * }
10
+ * ```
11
+ */
12
+ export class JOSEError extends Error {
13
+ /** A unique error code for the particular error subclass. */
14
+ static get code() {
15
+ return 'ERR_JOSE_GENERIC';
16
+ }
17
+
18
+ /** A unique error code for the particular error subclass. */
19
+ code = 'ERR_JOSE_GENERIC';
20
+ constructor(message) {
21
+ var _Error$captureStackTr;
22
+ super(message);
23
+ this.name = this.constructor.name;
24
+ // @ts-ignore
25
+ (_Error$captureStackTr = Error.captureStackTrace) === null || _Error$captureStackTr === void 0 ? void 0 : _Error$captureStackTr.call(Error, this, this.constructor);
26
+ }
27
+ }
28
+ export class JWTClaimValidationFailed extends JOSEError {
29
+ static get code() {
30
+ return 'ERR_JWT_CLAIM_VALIDATION_FAILED';
31
+ }
32
+ code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';
33
+
34
+ /** The Claim for which the validation failed. */
35
+
36
+ /** Reason code for the validation failure. */
37
+
38
+ constructor(message) {
39
+ let claim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'unspecified';
40
+ let reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';
41
+ super(message);
42
+ this.claim = claim;
43
+ this.reason = reason;
44
+ }
45
+ }
46
+
47
+ /**
48
+ * An error subclass thrown when a JWT is expired.
49
+ *
50
+ * @example Checking thrown error is this one using a stable error code
51
+ *
52
+ * ```js
53
+ * if (err.code === 'ERR_JWT_EXPIRED') {
54
+ * // ...
55
+ * }
56
+ * ```
57
+ *
58
+ * @example Checking thrown error is this one using `instanceof`
59
+ *
60
+ * ```js
61
+ * if (err instanceof errors.JWTExpired) {
62
+ * // ...
63
+ * }
64
+ * ```
65
+ */
66
+ export class JWTExpired extends JOSEError {
67
+ static get code() {
68
+ return 'ERR_JWT_EXPIRED';
69
+ }
70
+ code = 'ERR_JWT_EXPIRED';
71
+
72
+ /** The Claim for which the validation failed. */
73
+
74
+ /** Reason code for the validation failure. */
75
+
76
+ constructor(message) {
77
+ let claim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'unspecified';
78
+ let reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';
79
+ super(message);
80
+ this.claim = claim;
81
+ this.reason = reason;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * An error subclass thrown when a JOSE Algorithm is not allowed per developer preference.
87
+ *
88
+ * @example Checking thrown error is this one using a stable error code
89
+ *
90
+ * ```js
91
+ * if (err.code === 'ERR_JOSE_ALG_NOT_ALLOWED') {
92
+ * // ...
93
+ * }
94
+ * ```
95
+ *
96
+ * @example Checking thrown error is this one using `instanceof`
97
+ *
98
+ * ```js
99
+ * if (err instanceof errors.JOSEAlgNotAllowed) {
100
+ * // ...
101
+ * }
102
+ * ```
103
+ */
104
+ export class JOSEAlgNotAllowed extends JOSEError {
105
+ static get code() {
106
+ return 'ERR_JOSE_ALG_NOT_ALLOWED';
107
+ }
108
+ code = 'ERR_JOSE_ALG_NOT_ALLOWED';
109
+ }
110
+
111
+ /**
112
+ * An error subclass thrown when a particular feature or algorithm is not supported by this
113
+ * implementation or JOSE in general.
114
+ *
115
+ * @example Checking thrown error is this one using a stable error code
116
+ *
117
+ * ```js
118
+ * if (err.code === 'ERR_JOSE_NOT_SUPPORTED') {
119
+ * // ...
120
+ * }
121
+ * ```
122
+ *
123
+ * @example Checking thrown error is this one using `instanceof`
124
+ *
125
+ * ```js
126
+ * if (err instanceof errors.JOSENotSupported) {
127
+ * // ...
128
+ * }
129
+ * ```
130
+ */
131
+ export class JOSENotSupported extends JOSEError {
132
+ static get code() {
133
+ return 'ERR_JOSE_NOT_SUPPORTED';
134
+ }
135
+ code = 'ERR_JOSE_NOT_SUPPORTED';
136
+ }
137
+
138
+ /**
139
+ * An error subclass thrown when a JWT is invalid.
140
+ *
141
+ * @example Checking thrown error is this one using a stable error code
142
+ *
143
+ * ```js
144
+ * if (err.code === 'ERR_JWT_INVALID') {
145
+ * // ...
146
+ * }
147
+ * ```
148
+ *
149
+ * @example Checking thrown error is this one using `instanceof`
150
+ *
151
+ * ```js
152
+ * if (err instanceof errors.JWTInvalid) {
153
+ * // ...
154
+ * }
155
+ * ```
156
+ */
157
+ export class JWTInvalid extends JOSEError {
158
+ static get code() {
159
+ return 'ERR_JWT_INVALID';
160
+ }
161
+ code = 'ERR_JWT_INVALID';
162
+ }
163
+
164
+ /**
165
+ * An error subclass thrown when a JWT signature (JWS) is invalid.
166
+ */
167
+ export class JWSInvalid extends JOSEError {
168
+ static get code() {
169
+ return 'ERR_JWS_INVALID';
170
+ }
171
+ code = 'ERR_JWS_INVALID';
172
+ }
173
+
174
+ /**
175
+ * An error subclass thrown when JWS signature verification fails.
176
+ *
177
+ * @example Checking thrown error is this one using a stable error code
178
+ *
179
+ * ```js
180
+ * if (err.code === 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED') {
181
+ * // ...
182
+ * }
183
+ * ```
184
+ *
185
+ * @example Checking thrown error is this one using `instanceof`
186
+ *
187
+ * ```js
188
+ * if (err instanceof errors.JWSSignatureVerificationFailed) {
189
+ * // ...
190
+ * }
191
+ * ```
192
+ */
193
+ export class JWSSignatureVerificationFailed extends JOSEError {
194
+ static get code() {
195
+ return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';
196
+ }
197
+ code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';
198
+ message = 'signature verification failed';
199
+ }
200
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["JOSEError","Error","code","constructor","message","_Error$captureStackTr","name","captureStackTrace","call","JWTClaimValidationFailed","claim","arguments","length","undefined","reason","JWTExpired","JOSEAlgNotAllowed","JOSENotSupported","JWTInvalid","JWSInvalid","JWSSignatureVerificationFailed"],"sourceRoot":"../../../src","sources":["utils/errors.ts"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ function isObjectLike(value) {
2
+ return typeof value === 'object' && value !== null;
3
+ }
4
+ export default function isObject(input) {
5
+ if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {
6
+ return false;
7
+ }
8
+ if (Object.getPrototypeOf(input) === null) {
9
+ return true;
10
+ }
11
+ let proto = input;
12
+ while (Object.getPrototypeOf(proto) !== null) {
13
+ proto = Object.getPrototypeOf(proto);
14
+ }
15
+ return Object.getPrototypeOf(input) === proto;
16
+ }
17
+ //# sourceMappingURL=is_object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isObjectLike","value","isObject","input","Object","prototype","toString","call","getPrototypeOf","proto"],"sourceRoot":"../../../src","sources":["utils/is_object.ts"],"mappings":"AAAA,SAASA,YAAYA,CAACC,KAAc,EAAE;EACpC,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI;AACpD;AAEA,eAAe,SAASC,QAAQA,CAAaC,KAAc,EAAc;EACvE,IACE,CAACH,YAAY,CAACG,KAAK,CAAC,IACpBC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,KAAK,CAAC,KAAK,iBAAiB,EAC3D;IACA,OAAO,KAAK;EACd;EACA,IAAIC,MAAM,CAACI,cAAc,CAACL,KAAK,CAAC,KAAK,IAAI,EAAE;IACzC,OAAO,IAAI;EACb;EACA,IAAIM,KAAK,GAAGN,KAAK;EACjB,OAAOC,MAAM,CAACI,cAAc,CAACC,KAAK,CAAC,KAAK,IAAI,EAAE;IAC5CA,KAAK,GAAGL,MAAM,CAACI,cAAc,CAACC,KAAK,CAAC;EACtC;EACA,OAAOL,MAAM,CAACI,cAAc,CAACL,KAAK,CAAC,KAAKM,KAAK;AAC/C"}
@@ -0,0 +1,10 @@
1
+ import { NativeModules } from 'react-native';
2
+ export const IoReactNativeJwt = NativeModules.IoReactNativeJwt ? NativeModules.IoReactNativeJwt : new Proxy({
3
+ //this is a fake implementation to allow local deviceless testing
4
+ unpackBerEncodedASN1: (a, _b) => a
5
+ }, {
6
+ get: function (target, prop) {
7
+ return Reflect.get(target, prop);
8
+ }
9
+ });
10
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","IoReactNativeJwt","Proxy","unpackBerEncodedASN1","a","_b","get","target","prop","Reflect"],"sourceRoot":"../../../src","sources":["utils/proxy.ts"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAE5C,OAAO,MAAMC,gBAAgB,GAAGD,aAAa,CAACC,gBAAgB,GAC1DD,aAAa,CAACC,gBAAgB,GAC9B,IAAIC,KAAK,CACP;EACE;EACAC,oBAAoB,EAAEA,CAACC,CAAS,EAAEC,EAAU,KAAKD;AACnD,CAAC,EACD;EACEE,GAAG,EAAE,SAAAA,CAAUC,MAAM,EAAEC,IAAI,EAAE;IAC3B,OAAOC,OAAO,CAACH,GAAG,CAACC,MAAM,EAAEC,IAAI,CAAC;EAClC;AACF,CACF,CAAC"}
@@ -0,0 +1,53 @@
1
+ const minute = 60;
2
+ const hour = minute * 60;
3
+ const day = hour * 24;
4
+ const week = day * 7;
5
+ const year = day * 365.25;
6
+
7
+ /*
8
+ * It allows to extract the value and the unit of measurement for the time.
9
+ * For example, indicating a string like "1s" or "1 second" or "3 hour"
10
+ * the regex extracts a group made up of [1, "s"], [1, "second"] or [3, "hour"]
11
+ */
12
+ const REGEX = /^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;
13
+ export default (str => {
14
+ const matched = REGEX.exec(str);
15
+ if (!matched) {
16
+ throw new TypeError('Invalid time period format');
17
+ }
18
+ const value = parseFloat(matched[1]);
19
+ const unit = matched[2].toLowerCase();
20
+ switch (unit) {
21
+ case 'sec':
22
+ case 'secs':
23
+ case 'second':
24
+ case 'seconds':
25
+ case 's':
26
+ return Math.round(value);
27
+ case 'minute':
28
+ case 'minutes':
29
+ case 'min':
30
+ case 'mins':
31
+ case 'm':
32
+ return Math.round(value * minute);
33
+ case 'hour':
34
+ case 'hours':
35
+ case 'hr':
36
+ case 'hrs':
37
+ case 'h':
38
+ return Math.round(value * hour);
39
+ case 'day':
40
+ case 'days':
41
+ case 'd':
42
+ return Math.round(value * day);
43
+ case 'week':
44
+ case 'weeks':
45
+ case 'w':
46
+ return Math.round(value * week);
47
+ // years matched
48
+ default:
49
+ return Math.round(value * year);
50
+ }
51
+ });
52
+ export const epoch = date => Math.floor(date.getTime() / 1000);
53
+ //# sourceMappingURL=secs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["minute","hour","day","week","year","REGEX","str","matched","exec","TypeError","value","parseFloat","unit","toLowerCase","Math","round","epoch","date","floor","getTime"],"sourceRoot":"../../../src","sources":["utils/secs.ts"],"mappings":"AAAA,MAAMA,MAAM,GAAG,EAAE;AACjB,MAAMC,IAAI,GAAGD,MAAM,GAAG,EAAE;AACxB,MAAME,GAAG,GAAGD,IAAI,GAAG,EAAE;AACrB,MAAME,IAAI,GAAGD,GAAG,GAAG,CAAC;AACpB,MAAME,IAAI,GAAGF,GAAG,GAAG,MAAM;;AAEzB;AACA;AACA;AACA;AACA;AACA,MAAMG,KAAK,GACT,qGAAqG;AAEvG,gBAAgBC,GAAW,IAAa;EACtC,MAAMC,OAAO,GAAGF,KAAK,CAACG,IAAI,CAACF,GAAG,CAAC;EAE/B,IAAI,CAACC,OAAO,EAAE;IACZ,MAAM,IAAIE,SAAS,CAAC,4BAA4B,CAAC;EACnD;EAEA,MAAMC,KAAK,GAAGC,UAAU,CAACJ,OAAO,CAAC,CAAC,CAAE,CAAC;EACrC,MAAMK,IAAI,GAAGL,OAAO,CAAC,CAAC,CAAC,CAAEM,WAAW,CAAC,CAAC;EAEtC,QAAQD,IAAI;IACV,KAAK,KAAK;IACV,KAAK,MAAM;IACX,KAAK,QAAQ;IACb,KAAK,SAAS;IACd,KAAK,GAAG;MACN,OAAOE,IAAI,CAACC,KAAK,CAACL,KAAK,CAAC;IAC1B,KAAK,QAAQ;IACb,KAAK,SAAS;IACd,KAAK,KAAK;IACV,KAAK,MAAM;IACX,KAAK,GAAG;MACN,OAAOI,IAAI,CAACC,KAAK,CAACL,KAAK,GAAGV,MAAM,CAAC;IACnC,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,IAAI;IACT,KAAK,KAAK;IACV,KAAK,GAAG;MACN,OAAOc,IAAI,CAACC,KAAK,CAACL,KAAK,GAAGT,IAAI,CAAC;IACjC,KAAK,KAAK;IACV,KAAK,MAAM;IACX,KAAK,GAAG;MACN,OAAOa,IAAI,CAACC,KAAK,CAACL,KAAK,GAAGR,GAAG,CAAC;IAChC,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,GAAG;MACN,OAAOY,IAAI,CAACC,KAAK,CAACL,KAAK,GAAGP,IAAI,CAAC;IACjC;IACA;MACE,OAAOW,IAAI,CAACC,KAAK,CAACL,KAAK,GAAGN,IAAI,CAAC;EACnC;AACF,CAAC;AAED,OAAO,MAAMY,KAAK,GAAIC,IAAU,IAAKH,IAAI,CAACI,KAAK,CAACD,IAAI,CAACE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const supportedAlgorithms: string[];
2
+ export declare const isAlgSupported: (alg: string) => boolean;
3
+ export declare const getKtyFromAlg: (alg: string) => "RSA" | "EC";
4
+ export declare const getCoordinateOctetLength: (alg: string) => 32 | 48 | 66;
5
+ //# sourceMappingURL=algorithms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorithms.d.ts","sourceRoot":"","sources":["../../src/algorithms.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,UAU/B,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,MAAM,YACO,CAAC;AAElD,eAAO,MAAM,aAAa,QAAS,MAAM,iBAYxC,CAAC;AAGF,eAAO,MAAM,wBAAwB,QAAS,MAAM,iBAanD,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Return base64 encoded SHA256 hash of input string
3
+ */
4
+ export declare const sha256ToBase64: (toHash: string) => Promise<string>;
5
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/hash.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,cAAc,WAAkB,MAAM,KAAG,QAAQ,MAAM,CAGnE,CAAC"}
@@ -0,0 +1,93 @@
1
+ import type { JWK, JWTClaimVerificationOptions, JWTDecodeResult } from './types';
2
+ export * from './produce';
3
+ export * from './sign';
4
+ export * from './unsecured';
5
+ export { derToJose } from './utils/asn1';
6
+ export { encodeBase64, decodeBase64 } from './utils/base64';
7
+ export { sha256ToBase64 } from './hash';
8
+ /**
9
+ * Decode the JWT without validation.
10
+ *
11
+ * @example Usage with a public JWK encoded RSA key
12
+ *
13
+ * ```js
14
+ * const jwt =
15
+ * 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
16
+ *
17
+ * const { payload, protectedHeader } = await decode(jwt)
18
+ *
19
+ * ```
20
+ *
21
+ * @param jwt JSON Web Token value (encoded as JWS).
22
+ */
23
+ export declare const decode: (token: string) => JWTDecodeResult;
24
+ /**
25
+ * Verifies the JWS signature
26
+ *
27
+ * @example Usage with a public JWK encoded RSA key
28
+ *
29
+ * ```js
30
+ * const jwk = {
31
+ * crv: 'P-256',
32
+ * kty: 'EC',
33
+ * x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
34
+ * y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
35
+ * }
36
+ * const jwt =
37
+ * 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
38
+ *
39
+ * const isSignatureValid = await verify(jwt, jwk)
40
+ * ```
41
+ *
42
+ * @param jwt JSON Web Token value (encoded as JWS).
43
+ * @param key Public key to verify the JWT in JWK format.
44
+ */
45
+ export declare const isSignatureValid: (token: string, jwk: JWK) => Promise<boolean>;
46
+ /**
47
+ * Verifies the JWT format (to be a JWS Compact format), verifies the JWS signature, validates the
48
+ * JWT Claims Set.
49
+ *
50
+ * @example Usage with a public JWK encoded RSA key
51
+ *
52
+ * ```js
53
+ * const jwk = {
54
+ * crv: 'P-256',
55
+ * kty: 'EC',
56
+ * x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
57
+ * y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
58
+ * }
59
+ * const jwt =
60
+ * 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
61
+ *
62
+ * const { payload, protectedHeader } = await verify(jwt, jwk, {
63
+ * typ: 'entity-statement+jwt',
64
+ * requiredClaims: ['iss', 'sub', 'metadata'],
65
+ * })
66
+ * ```
67
+ *
68
+ * @param jwt JSON Web Token value (encoded as JWS).
69
+ * @param key Public key to verify the JWT in JWK format.
70
+ * @param options JWT Decryption and JWT Claims Set validation options.
71
+ */
72
+ export declare const verify: (token: string, jwk: JWK, options?: JWTClaimVerificationOptions) => Promise<JWTDecodeResult>;
73
+ /**
74
+ * Calculate JWK thumbprint
75
+ *
76
+ * @example Get JWK thumbprint
77
+ *
78
+ * ```js
79
+ * const jwk: JWK = {
80
+ * crv: 'P-256',
81
+ * kty: 'EC',
82
+ * x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
83
+ * y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
84
+ * };
85
+
86
+ * const thumbprint = await thumbprint(jwk)
87
+ *
88
+ * ```
89
+ *
90
+ * @param jwk JSON Web Key
91
+ */
92
+ export declare const thumbprint: (jwk: JWK) => Promise<string>;
93
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,2BAA2B,EAC3B,eAAe,EAChB,MAAM,SAAS,CAAC;AAMjB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM,UAAW,MAAM,KAAG,eAAwC,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,UAAW,MAAM,OAAO,GAAG,KAAG,QAAQ,OAAO,CACrC,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,MAAM,UACV,MAAM,OACR,GAAG,YACC,2BAA2B,KACnC,QAAQ,eAAe,CAUzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,UAAU,QAAS,GAAG,KAAG,QAAQ,MAAM,CAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { JWTPayload, JWTClaimVerificationOptions, JWSHeaderParameters } from './types';
2
+ declare const _default: (protectedHeader: JWSHeaderParameters, payload: JWTPayload, options?: JWTClaimVerificationOptions) => JWTPayload;
3
+ export default _default;
4
+ //# sourceMappingURL=jwt_claims_set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt_claims_set.d.ts","sourceRoot":"","sources":["../../src/jwt_claims_set.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,SAAS,CAAC;0CAyBE,mBAAmB,WAC3B,UAAU,YACV,2BAA2B;AAHtC,wBAkKE"}