@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.
- package/LICENSE +20 -0
- package/README.md +145 -0
- package/android/build.gradle +97 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/com/pagopa/ioreactnativejwt/IoReactNativeJwtModule.kt +114 -0
- package/android/src/main/java/com/pagopa/ioreactnativejwt/IoReactNativeJwtPackage.kt +17 -0
- package/android/src/main/java/com/pagopa/ioreactnativejwt/Utils.kt +95 -0
- package/ios/ASN1DERParsing.swift +226 -0
- package/ios/IoReactNativeJwt-Bridging-Header.h +2 -0
- package/ios/IoReactNativeJwt.mm +28 -0
- package/ios/IoReactNativeJwt.swift +156 -0
- package/ios/IoReactNativeJwt.xcodeproj/project.pbxproj +283 -0
- package/lib/commonjs/algorithms.js +39 -0
- package/lib/commonjs/algorithms.js.map +1 -0
- package/lib/commonjs/hash.js +17 -0
- package/lib/commonjs/hash.js.map +1 -0
- package/lib/commonjs/index.js +194 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/jwt_claims_set.js +112 -0
- package/lib/commonjs/jwt_claims_set.js.map +1 -0
- package/lib/commonjs/produce.js +140 -0
- package/lib/commonjs/produce.js.map +1 -0
- package/lib/commonjs/sign.js +159 -0
- package/lib/commonjs/sign.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/unsecured.js +118 -0
- package/lib/commonjs/unsecured.js.map +1 -0
- package/lib/commonjs/utils/asn1.js +37 -0
- package/lib/commonjs/utils/asn1.js.map +1 -0
- package/lib/commonjs/utils/base64.js +43 -0
- package/lib/commonjs/utils/base64.js.map +1 -0
- package/lib/commonjs/utils/errors.js +214 -0
- package/lib/commonjs/utils/errors.js.map +1 -0
- package/lib/commonjs/utils/is_object.js +23 -0
- package/lib/commonjs/utils/is_object.js.map +1 -0
- package/lib/commonjs/utils/proxy.js +17 -0
- package/lib/commonjs/utils/proxy.js.map +1 -0
- package/lib/commonjs/utils/secs.js +61 -0
- package/lib/commonjs/utils/secs.js.map +1 -0
- package/lib/module/algorithms.js +29 -0
- package/lib/module/algorithms.js.map +1 -0
- package/lib/module/hash.js +11 -0
- package/lib/module/hash.js.map +1 -0
- package/lib/module/index.js +115 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/jwt_claims_set.js +103 -0
- package/lib/module/jwt_claims_set.js.map +1 -0
- package/lib/module/produce.js +131 -0
- package/lib/module/produce.js.map +1 -0
- package/lib/module/sign.js +153 -0
- package/lib/module/sign.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/unsecured.js +110 -0
- package/lib/module/unsecured.js.map +1 -0
- package/lib/module/utils/asn1.js +31 -0
- package/lib/module/utils/asn1.js.map +1 -0
- package/lib/module/utils/base64.js +36 -0
- package/lib/module/utils/base64.js.map +1 -0
- package/lib/module/utils/errors.js +200 -0
- package/lib/module/utils/errors.js.map +1 -0
- package/lib/module/utils/is_object.js +17 -0
- package/lib/module/utils/is_object.js.map +1 -0
- package/lib/module/utils/proxy.js +10 -0
- package/lib/module/utils/proxy.js.map +1 -0
- package/lib/module/utils/secs.js +53 -0
- package/lib/module/utils/secs.js.map +1 -0
- package/lib/typescript/algorithms.d.ts +5 -0
- package/lib/typescript/algorithms.d.ts.map +1 -0
- package/lib/typescript/hash.d.ts +5 -0
- package/lib/typescript/hash.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +93 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/jwt_claims_set.d.ts +4 -0
- package/lib/typescript/jwt_claims_set.d.ts.map +1 -0
- package/lib/typescript/produce.d.ts +55 -0
- package/lib/typescript/produce.d.ts.map +1 -0
- package/lib/typescript/sign.d.ts +61 -0
- package/lib/typescript/sign.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +172 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/unsecured.d.ts +64 -0
- package/lib/typescript/unsecured.d.ts.map +1 -0
- package/lib/typescript/utils/asn1.d.ts +2 -0
- package/lib/typescript/utils/asn1.d.ts.map +1 -0
- package/lib/typescript/utils/base64.d.ts +4 -0
- package/lib/typescript/utils/base64.d.ts.map +1 -0
- package/lib/typescript/utils/errors.d.ts +157 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -0
- package/lib/typescript/utils/is_object.d.ts +2 -0
- package/lib/typescript/utils/is_object.d.ts.map +1 -0
- package/lib/typescript/utils/proxy.d.ts +2 -0
- package/lib/typescript/utils/proxy.d.ts.map +1 -0
- package/lib/typescript/utils/secs.d.ts +4 -0
- package/lib/typescript/utils/secs.d.ts.map +1 -0
- package/package.json +170 -0
- package/pagopa-io-react-native-jwt.podspec +44 -0
- package/src/algorithms.ts +46 -0
- package/src/hash.ts +10 -0
- package/src/index.tsx +120 -0
- package/src/jwt_claims_set.ts +194 -0
- package/src/produce.ts +109 -0
- package/src/sign.ts +180 -0
- package/src/types.ts +203 -0
- package/src/unsecured.ts +127 -0
- package/src/utils/asn1.ts +36 -0
- package/src/utils/base64.ts +37 -0
- package/src/utils/errors.ts +206 -0
- package/src/utils/is_object.ts +20 -0
- package/src/utils/proxy.ts +15 -0
- 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 @@
|
|
|
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"}
|