@pagopa/io-react-native-jwt 0.6.1 → 0.6.3
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/lib/commonjs/jwt/sign.js +3 -2
- package/lib/commonjs/jwt/sign.js.map +1 -1
- package/lib/commonjs/utils/asn1.js +1 -1
- package/lib/commonjs/utils/asn1.js.map +1 -1
- package/lib/commonjs/utils/base64.js +13 -1
- package/lib/commonjs/utils/base64.js.map +1 -1
- package/lib/module/jwt/sign.js +4 -3
- package/lib/module/jwt/sign.js.map +1 -1
- package/lib/module/utils/asn1.js +1 -1
- package/lib/module/utils/asn1.js.map +1 -1
- package/lib/module/utils/base64.js +12 -1
- package/lib/module/utils/base64.js.map +1 -1
- package/lib/typescript/jwt/sign.d.ts.map +1 -1
- package/lib/typescript/utils/asn1.d.ts.map +1 -1
- package/lib/typescript/utils/base64.d.ts +1 -0
- package/lib/typescript/utils/base64.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/jwt/sign.ts +5 -3
- package/src/utils/asn1.ts +4 -1
- package/src/utils/base64.ts +15 -1
package/lib/commonjs/jwt/sign.js
CHANGED
|
@@ -75,10 +75,11 @@ class SignJWT extends _produce.ProduceJWT {
|
|
|
75
75
|
if (signature === '') throw new _errors.JWSInvalid('Invalid signature');
|
|
76
76
|
const jwtDecoded = SignJWT.decodeJwtWithoutSignature(jwtWithoutSignature);
|
|
77
77
|
const alg = jwtDecoded.header.alg;
|
|
78
|
-
|
|
78
|
+
const kty = (0, _algorithms.getKtyFromAlg)(alg);
|
|
79
|
+
if (kty === 'EC') {
|
|
79
80
|
const encodedJws = await (0, _asn.derToJose)(signature, alg);
|
|
80
81
|
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
81
|
-
}
|
|
82
|
+
} else {
|
|
82
83
|
const encodedJws = (0, _base.removePadding)(signature);
|
|
83
84
|
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
84
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_errors","require","_produce","_base","_algorithms","_asn","SignJWT","ProduceJWT","setProtectedHeader","protectedHeader","alg","isAlgSupported","_protectedHeader","JOSENotSupported","toSign","JWSInvalid","encodeBase64","JSON","stringify","payload","_payload","appendSignature","jwtWithoutSignature","signature","JWTInvalid","jwtDecoded","decodeJwtWithoutSignature","header","encodedJws","derToJose","removePadding","encodedHeader","encodedPayload","length","split","decoded","decodeBase64","parse","decodedPayload","decode","jwt","exports"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAMA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAEA,IAAAI,IAAA,GAAAJ,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,OAAO,SAASC,mBAAU,CAAC;EAGtC;AACF;AACA;AACA;AACA;EACEC,kBAAkBA,CAACC,eAA2C,EAAE;IAC9D,IAAIA,eAAe,CAACC,GAAG,IAAI,IAAAC,0BAAc,EAACF,eAAe,CAACC,GAAG,CAAC,EAAE;MAC9D,IAAI,CAACE,gBAAgB,GAAGH,eAAe;MACvC,OAAO,IAAI;IACb;IACA,MAAM,IAAII,wBAAgB,CAAC,yBAAyB,CAAC;EACvD;;EAEA;AACF;AACA;AACA;EACEC,MAAMA,CAAA,EAAW;IACf,IAAI,CAAC,IAAI,CAACF,gBAAgB,IAAI,CAAC,IAAI,CAACA,gBAAgB,CAACF,GAAG,EAAE;MACxD,MAAM,IAAIK,kBAAU,CAClB,sDACF,CAAC;IACH;IACA,MAAMN,eAAe,GAAG,IAAAO,kBAAY,EAACC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACN,gBAAgB,CAAC,CAAC;IAC3E,MAAMO,OAAO,GAAG,IAAAH,kBAAY,EAACC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACE,QAAQ,CAAC,CAAC;IAC3D,IAAID,OAAO,IAAIV,eAAe,EAAE;MAC9B,OAAQ,GAAEA,eAAgB,IAAGU,OAAQ,EAAC;IACxC,CAAC,MAAM;MACL,MAAM,IAAIJ,kBAAU,CAAC,CAAC;IACxB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAaM,eAAeA,CAC1BC,mBAA2B,EAC3BC,SAAiB,EACA;IACjB,IACE,OAAOD,mBAAmB,KAAK,QAAQ,IACvC,OAAOC,SAAS,KAAK,QAAQ,EAC7B;MACA,MAAM,IAAIC,kBAAU,CAAC,sBAAsB,CAAC;IAC9C;IACA,IAAID,SAAS,KAAK,EAAE,EAAE,MAAM,IAAIR,kBAAU,CAAC,mBAAmB,CAAC;IAE/D,MAAMU,UAAU,GAAGnB,OAAO,CAACoB,yBAAyB,CAACJ,mBAAmB,CAAC;IACzE,MAAMZ,GAAG,GAAGe,UAAU,CAACE,MAAM,CAACjB,GAAG;IACjC,IAAI;
|
|
1
|
+
{"version":3,"names":["_errors","require","_produce","_base","_algorithms","_asn","SignJWT","ProduceJWT","setProtectedHeader","protectedHeader","alg","isAlgSupported","_protectedHeader","JOSENotSupported","toSign","JWSInvalid","encodeBase64","JSON","stringify","payload","_payload","appendSignature","jwtWithoutSignature","signature","JWTInvalid","jwtDecoded","decodeJwtWithoutSignature","header","kty","getKtyFromAlg","encodedJws","derToJose","removePadding","encodedHeader","encodedPayload","length","split","decoded","decodeBase64","parse","decodedPayload","decode","jwt","exports"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ const derToJose = async (asn1Signature, alg) => {
|
|
|
27
27
|
const kty = (0, _algorithms.getKtyFromAlg)(alg);
|
|
28
28
|
if (kty === 'EC') {
|
|
29
29
|
const unpackedJws = await _proxy.IoReactNativeJwt.unpackBerEncodedASN1(asn1Signature, (0, _algorithms.getCoordinateOctetLength)(alg));
|
|
30
|
-
const encodedJws = (0, _base.removePadding)(unpackedJws);
|
|
30
|
+
const encodedJws = (0, _base.removePadding)(unpackedJws).replace(/(?:\r\n|\r|\n)/g, '');
|
|
31
31
|
return encodedJws;
|
|
32
32
|
} else {
|
|
33
33
|
throw new _errors.JOSENotSupported('Unsupported "alg" value');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_algorithms","require","_proxy","_base","_errors","derToJose","asn1Signature","alg","kty","getKtyFromAlg","unpackedJws","IoReactNativeJwt","unpackBerEncodedASN1","getCoordinateOctetLength","encodedJws","removePadding","JOSENotSupported","exports"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMI,SAAS,GAAG,MAAAA,CACvBC,aAAqB,EACrBC,GAAW,KACS;EACpB,MAAMC,GAAG,GAAG,IAAAC,yBAAa,EAACF,GAAG,CAAC;EAC9B,IAAIC,GAAG,KAAK,IAAI,EAAE;IAChB,MAAME,WAAW,GAAG,MAAMC,uBAAgB,CAACC,oBAAoB,CAC7DN,aAAa,EACb,IAAAO,oCAAwB,EAACN,GAAG,CAC9B,CAAC;IACD,MAAMO,UAAU,GAAG,IAAAC,mBAAa,EAACL,WAAW,CAAC;
|
|
1
|
+
{"version":3,"names":["_algorithms","require","_proxy","_base","_errors","derToJose","asn1Signature","alg","kty","getKtyFromAlg","unpackedJws","IoReactNativeJwt","unpackBerEncodedASN1","getCoordinateOctetLength","encodedJws","removePadding","replace","JOSENotSupported","exports"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMI,SAAS,GAAG,MAAAA,CACvBC,aAAqB,EACrBC,GAAW,KACS;EACpB,MAAMC,GAAG,GAAG,IAAAC,yBAAa,EAACF,GAAG,CAAC;EAC9B,IAAIC,GAAG,KAAK,IAAI,EAAE;IAChB,MAAME,WAAW,GAAG,MAAMC,uBAAgB,CAACC,oBAAoB,CAC7DN,aAAa,EACb,IAAAO,oCAAwB,EAACN,GAAG,CAC9B,CAAC;IACD,MAAMO,UAAU,GAAG,IAAAC,mBAAa,EAACL,WAAW,CAAC,CAACM,OAAO,CACnD,iBAAiB,EACjB,EACF,CAAC;IACD,OAAOF,UAAU;EACnB,CAAC,MAAM;IACL,MAAM,IAAIG,wBAAgB,CAAC,yBAAyB,CAAC;EACvD;AACF,CAAC;AAACC,OAAA,CAAAb,SAAA,GAAAA,SAAA"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.addPadding = addPadding;
|
|
6
7
|
exports.decodeBase64 = decodeBase64;
|
|
7
8
|
exports.encodeBase64 = encodeBase64;
|
|
8
9
|
exports.removePadding = removePadding;
|
|
@@ -29,7 +30,7 @@ function encodeBase64(value) {
|
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
function decodeBase64(value) {
|
|
32
|
-
let decoded = (0, _abab.atob)(value);
|
|
33
|
+
let decoded = (0, _abab.atob)(addPadding(value));
|
|
33
34
|
if (decoded) {
|
|
34
35
|
return decoded;
|
|
35
36
|
} else {
|
|
@@ -40,4 +41,15 @@ function removePadding(encoded) {
|
|
|
40
41
|
// eslint-disable-next-line no-div-regex
|
|
41
42
|
return encoded.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
42
43
|
}
|
|
44
|
+
function addPadding(encoded) {
|
|
45
|
+
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
|
|
46
|
+
var pad = encoded.length % 4;
|
|
47
|
+
if (pad) {
|
|
48
|
+
if (pad === 1) {
|
|
49
|
+
throw new _errors.JOSEError('InvalidLengthError: Input base64url string is the wrong length to determine padding');
|
|
50
|
+
}
|
|
51
|
+
encoded += new Array(5 - pad).join('=');
|
|
52
|
+
}
|
|
53
|
+
return encoded;
|
|
54
|
+
}
|
|
43
55
|
//# sourceMappingURL=base64.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_abab","require","_errors","encodeBase64","value","encoded","btoa","removePadding","JOSEError","decodeBase64","decoded","atob","replace"],"sourceRoot":"../../../src","sources":["utils/base64.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_abab","require","_errors","encodeBase64","value","encoded","btoa","removePadding","JOSEError","decodeBase64","decoded","atob","addPadding","replace","pad","length","Array","join"],"sourceRoot":"../../../src","sources":["utils/base64.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,YAAYA,CAACC,KAAa,EAAU;EAClD,IAAIC,OAAO,GAAG,IAAAC,UAAI,EAACF,KAAK,CAAC;EACzB,IAAIC,OAAO,EAAE;IACX,OAAOE,aAAa,CAACF,OAAO,CAAC;EAC/B,CAAC,MAAM;IACL,MAAM,IAAIG,iBAAS,CAAC,mCAAmC,CAAC;EAC1D;AACF;AAEO,SAASC,YAAYA,CAACL,KAAa,EAAU;EAClD,IAAIM,OAAO,GAAG,IAAAC,UAAI,EAACC,UAAU,CAACR,KAAK,CAAC,CAAC;EACrC,IAAIM,OAAO,EAAE;IACX,OAAOA,OAAO;EAChB,CAAC,MAAM;IACL,MAAM,IAAIF,iBAAS,CAAC,gCAAgC,CAAC;EACvD;AACF;AAEO,SAASD,aAAaA,CAACF,OAAe,EAAU;EACrD;EACA,OAAOA,OAAO,CAACQ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC1E;AAEO,SAASD,UAAUA,CAACP,OAAe,EAAU;EAClDA,OAAO,GAAGA,OAAO,CAACQ,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;EACvD,IAAIC,GAAG,GAAGT,OAAO,CAACU,MAAM,GAAG,CAAC;EAC5B,IAAID,GAAG,EAAE;IACP,IAAIA,GAAG,KAAK,CAAC,EAAE;MACb,MAAM,IAAIN,iBAAS,CACjB,qFACF,CAAC;IACH;IACAH,OAAO,IAAI,IAAIW,KAAK,CAAC,CAAC,GAAGF,GAAG,CAAC,CAACG,IAAI,CAAC,GAAG,CAAC;EACzC;EACA,OAAOZ,OAAO;AAChB"}
|
package/lib/module/jwt/sign.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JOSENotSupported, JWSInvalid, JWTInvalid } from '../utils/errors';
|
|
2
2
|
import { ProduceJWT } from './produce';
|
|
3
3
|
import { decodeBase64, encodeBase64, removePadding } from '../utils/base64';
|
|
4
|
-
import { isAlgSupported } from '../algorithms';
|
|
4
|
+
import { getKtyFromAlg, isAlgSupported } from '../algorithms';
|
|
5
5
|
import { derToJose } from '../utils/asn1';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -70,10 +70,11 @@ export class SignJWT extends ProduceJWT {
|
|
|
70
70
|
if (signature === '') throw new JWSInvalid('Invalid signature');
|
|
71
71
|
const jwtDecoded = SignJWT.decodeJwtWithoutSignature(jwtWithoutSignature);
|
|
72
72
|
const alg = jwtDecoded.header.alg;
|
|
73
|
-
|
|
73
|
+
const kty = getKtyFromAlg(alg);
|
|
74
|
+
if (kty === 'EC') {
|
|
74
75
|
const encodedJws = await derToJose(signature, alg);
|
|
75
76
|
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
76
|
-
}
|
|
77
|
+
} else {
|
|
77
78
|
const encodedJws = removePadding(signature);
|
|
78
79
|
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
79
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["JOSENotSupported","JWSInvalid","JWTInvalid","ProduceJWT","decodeBase64","encodeBase64","removePadding","isAlgSupported","derToJose","SignJWT","setProtectedHeader","protectedHeader","alg","_protectedHeader","toSign","JSON","stringify","payload","_payload","appendSignature","jwtWithoutSignature","signature","jwtDecoded","decodeJwtWithoutSignature","header","encodedJws","encodedHeader","encodedPayload","length","split","decoded","parse","decodedPayload","decode","jwt"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,UAAU,EAAEC,UAAU,QAAQ,iBAAiB;AAM1E,SAASC,UAAU,QAAQ,WAAW;AACtC,SAASC,YAAY,EAAEC,YAAY,EAAEC,aAAa,QAAQ,iBAAiB;AAC3E,SAASC,cAAc,QAAQ,eAAe;
|
|
1
|
+
{"version":3,"names":["JOSENotSupported","JWSInvalid","JWTInvalid","ProduceJWT","decodeBase64","encodeBase64","removePadding","getKtyFromAlg","isAlgSupported","derToJose","SignJWT","setProtectedHeader","protectedHeader","alg","_protectedHeader","toSign","JSON","stringify","payload","_payload","appendSignature","jwtWithoutSignature","signature","jwtDecoded","decodeJwtWithoutSignature","header","kty","encodedJws","encodedHeader","encodedPayload","length","split","decoded","parse","decodedPayload","decode","jwt"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,UAAU,EAAEC,UAAU,QAAQ,iBAAiB;AAM1E,SAASC,UAAU,QAAQ,WAAW;AACtC,SAASC,YAAY,EAAEC,YAAY,EAAEC,aAAa,QAAQ,iBAAiB;AAC3E,SAASC,aAAa,EAAEC,cAAc,QAAQ,eAAe;AAE7D,SAASC,SAAS,QAAQ,eAAe;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,SAASP,UAAU,CAAC;EAGtC;AACF;AACA;AACA;AACA;EACEQ,kBAAkBA,CAACC,eAA2C,EAAE;IAC9D,IAAIA,eAAe,CAACC,GAAG,IAAIL,cAAc,CAACI,eAAe,CAACC,GAAG,CAAC,EAAE;MAC9D,IAAI,CAACC,gBAAgB,GAAGF,eAAe;MACvC,OAAO,IAAI;IACb;IACA,MAAM,IAAIZ,gBAAgB,CAAC,yBAAyB,CAAC;EACvD;;EAEA;AACF;AACA;AACA;EACEe,MAAMA,CAAA,EAAW;IACf,IAAI,CAAC,IAAI,CAACD,gBAAgB,IAAI,CAAC,IAAI,CAACA,gBAAgB,CAACD,GAAG,EAAE;MACxD,MAAM,IAAIZ,UAAU,CAClB,sDACF,CAAC;IACH;IACA,MAAMW,eAAe,GAAGP,YAAY,CAACW,IAAI,CAACC,SAAS,CAAC,IAAI,CAACH,gBAAgB,CAAC,CAAC;IAC3E,MAAMI,OAAO,GAAGb,YAAY,CAACW,IAAI,CAACC,SAAS,CAAC,IAAI,CAACE,QAAQ,CAAC,CAAC;IAC3D,IAAID,OAAO,IAAIN,eAAe,EAAE;MAC9B,OAAQ,GAAEA,eAAgB,IAAGM,OAAQ,EAAC;IACxC,CAAC,MAAM;MACL,MAAM,IAAIjB,UAAU,CAAC,CAAC;IACxB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAamB,eAAeA,CAC1BC,mBAA2B,EAC3BC,SAAiB,EACA;IACjB,IACE,OAAOD,mBAAmB,KAAK,QAAQ,IACvC,OAAOC,SAAS,KAAK,QAAQ,EAC7B;MACA,MAAM,IAAIpB,UAAU,CAAC,sBAAsB,CAAC;IAC9C;IACA,IAAIoB,SAAS,KAAK,EAAE,EAAE,MAAM,IAAIrB,UAAU,CAAC,mBAAmB,CAAC;IAE/D,MAAMsB,UAAU,GAAGb,OAAO,CAACc,yBAAyB,CAACH,mBAAmB,CAAC;IACzE,MAAMR,GAAG,GAAGU,UAAU,CAACE,MAAM,CAACZ,GAAG;IACjC,MAAMa,GAAG,GAAGnB,aAAa,CAACM,GAAG,CAAC;IAE9B,IAAIa,GAAG,KAAK,IAAI,EAAE;MAChB,MAAMC,UAAU,GAAG,MAAMlB,SAAS,CAACa,SAAS,EAAET,GAAG,CAAC;MAClD,OAAQ,GAAEQ,mBAAoB,IAAGM,UAAW,EAAC;IAC/C,CAAC,MAAM;MACL,MAAMA,UAAU,GAAGrB,aAAa,CAACgB,SAAS,CAAC;MAC3C,OAAQ,GAAED,mBAAoB,IAAGM,UAAW,EAAC;IAC/C;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOH,yBAAyBA,CAACH,mBAA2B,EAG1D;IACA,IAAI,OAAOA,mBAAmB,KAAK,QAAQ,EAAE;MAC3C,MAAM,IAAInB,UAAU,CAAC,sBAAsB,CAAC;IAC9C;IACA,MAAM;MACJ,CAAC,EAAE0B,aAAa;MAChB,CAAC,EAAEC,cAAc;MACjBC;IACF,CAAC,GAAGT,mBAAmB,CAACU,KAAK,CAAC,GAAG,CAAC;IAElC,IAAIN,MAAkC;IACtC,IAAI;MACF,IAAIO,OAAO,GAAG5B,YAAY,CAACwB,aAAc,CAAC;MAC1CH,MAAM,GAAGT,IAAI,CAACiB,KAAK,CAACD,OAAO,CAAC;MAC5B,IAAI,CAACP,MAAM,CAACZ,GAAG,IAAI,CAACL,cAAc,CAACiB,MAAM,CAACZ,GAAG,CAAC,EAAE;QAC9C,MAAM,IAAIb,gBAAgB,CAAC,yBAAyB,CAAC;MACvD;IACF,CAAC,CAAC,MAAM;MACN,MAAM,IAAIE,UAAU,CAAC,6BAA6B,CAAC;IACrD;IAEA,IAAI4B,MAAM,KAAK,CAAC,IAAID,cAAc,KAAK,EAAE,EAAE;MACzC,MAAM,IAAI3B,UAAU,CAAC,qBAAqB,CAAC;IAC7C;IAEA,IAAIgC,cAAc,GAAG9B,YAAY,CAACyB,cAAe,CAAC;IAClD,MAAMX,OAAO,GAAGF,IAAI,CAACiB,KAAK,CAACC,cAAc,CAAC;IAE1C,OAAO;MACLhB,OAAO;MACPO;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOU,MAAMA,CAACC,GAAW,EAAmB;IAC1C,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;MAC3B,MAAM,IAAIlC,UAAU,CAAC,sBAAsB,CAAC;IAC9C;IACA,MAAM;MACJ,CAAC,EAAE0B,aAAa;MAChB,CAAC,EAAEC,cAAc;MACjB,CAAC,EAAEP,SAAS;MACZQ;IACF,CAAC,GAAGM,GAAG,CAACL,KAAK,CAAC,GAAG,CAAC;IAElB,IAAInB,eAA2C;IAC/C,IAAI;MACF,IAAIoB,OAAO,GAAG5B,YAAY,CAACwB,aAAc,CAAC;MAC1ChB,eAAe,GAAGI,IAAI,CAACiB,KAAK,CAACD,OAAO,CAAC;MACrC,IAAI,CAACpB,eAAe,CAACC,GAAG,IAAI,CAACL,cAAc,CAACI,eAAe,CAACC,GAAG,CAAC,EAAE;QAChE,MAAM,IAAIb,gBAAgB,CAAC,yBAAyB,CAAC;MACvD;IACF,CAAC,CAAC,MAAM;MACN,MAAM,IAAIE,UAAU,CAAC,6BAA6B,CAAC;IACrD;IAEA,IAAI4B,MAAM,KAAK,CAAC,IAAID,cAAc,KAAK,EAAE,IAAIP,SAAS,KAAK,EAAE,EAAE;MAC7D,MAAM,IAAIpB,UAAU,CAAC,aAAa,CAAC;IACrC;IAEA,IAAIgC,cAAc,GAAG9B,YAAY,CAACyB,cAAe,CAAC;IAClD,MAAMX,OAAO,GAAGF,IAAI,CAACiB,KAAK,CAACC,cAAc,CAAC;IAE1C,OAAO;MACLhB,OAAO;MACPN;IACF,CAAC;EACH;AACF"}
|
package/lib/module/utils/asn1.js
CHANGED
|
@@ -22,7 +22,7 @@ export const derToJose = async (asn1Signature, alg) => {
|
|
|
22
22
|
const kty = getKtyFromAlg(alg);
|
|
23
23
|
if (kty === 'EC') {
|
|
24
24
|
const unpackedJws = await IoReactNativeJwt.unpackBerEncodedASN1(asn1Signature, getCoordinateOctetLength(alg));
|
|
25
|
-
const encodedJws = removePadding(unpackedJws);
|
|
25
|
+
const encodedJws = removePadding(unpackedJws).replace(/(?:\r\n|\r|\n)/g, '');
|
|
26
26
|
return encodedJws;
|
|
27
27
|
} else {
|
|
28
28
|
throw new JOSENotSupported('Unsupported "alg" value');
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"names":["getCoordinateOctetLength","getKtyFromAlg","IoReactNativeJwt","removePadding","JOSENotSupported","derToJose","asn1Signature","alg","kty","unpackedJws","unpackBerEncodedASN1","encodedJws","replace"],"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,CAACG,OAAO,CACnD,iBAAiB,EACjB,EACF,CAAC;IACD,OAAOD,UAAU;EACnB,CAAC,MAAM;IACL,MAAM,IAAIP,gBAAgB,CAAC,yBAAyB,CAAC;EACvD;AACF,CAAC"}
|
|
@@ -22,7 +22,7 @@ export function encodeBase64(value) {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
export function decodeBase64(value) {
|
|
25
|
-
let decoded = atob(value);
|
|
25
|
+
let decoded = atob(addPadding(value));
|
|
26
26
|
if (decoded) {
|
|
27
27
|
return decoded;
|
|
28
28
|
} else {
|
|
@@ -33,4 +33,15 @@ export function removePadding(encoded) {
|
|
|
33
33
|
// eslint-disable-next-line no-div-regex
|
|
34
34
|
return encoded.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
35
35
|
}
|
|
36
|
+
export function addPadding(encoded) {
|
|
37
|
+
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
|
|
38
|
+
var pad = encoded.length % 4;
|
|
39
|
+
if (pad) {
|
|
40
|
+
if (pad === 1) {
|
|
41
|
+
throw new JOSEError('InvalidLengthError: Input base64url string is the wrong length to determine padding');
|
|
42
|
+
}
|
|
43
|
+
encoded += new Array(5 - pad).join('=');
|
|
44
|
+
}
|
|
45
|
+
return encoded;
|
|
46
|
+
}
|
|
36
47
|
//# sourceMappingURL=base64.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"names":["btoa","atob","JOSEError","encodeBase64","value","encoded","removePadding","decodeBase64","decoded","addPadding","replace","pad","length","Array","join"],"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,CAACQ,UAAU,CAACL,KAAK,CAAC,CAAC;EACrC,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,CAACK,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC1E;AAEA,OAAO,SAASD,UAAUA,CAACJ,OAAe,EAAU;EAClDA,OAAO,GAAGA,OAAO,CAACK,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;EACvD,IAAIC,GAAG,GAAGN,OAAO,CAACO,MAAM,GAAG,CAAC;EAC5B,IAAID,GAAG,EAAE;IACP,IAAIA,GAAG,KAAK,CAAC,EAAE;MACb,MAAM,IAAIT,SAAS,CACjB,qFACF,CAAC;IACH;IACAG,OAAO,IAAI,IAAIQ,KAAK,CAAC,CAAC,GAAGF,GAAG,CAAC,CAACG,IAAI,CAAC,GAAG,CAAC;EACzC;EACA,OAAOT,OAAO;AAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../src/jwt/sign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAMvC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,OAAO,CAAC,gBAAgB,CAA8B;IAEtD;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,0BAA0B;IAQ9D;;;OAGG;IACH,MAAM,IAAI,MAAM;IAehB;;;;;;;OAOG;WACU,eAAe,CAC1B,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../src/jwt/sign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAMvC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,OAAO,CAAC,gBAAgB,CAA8B;IAEtD;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,0BAA0B;IAQ9D;;;OAGG;IACH,MAAM,IAAI,MAAM;IAehB;;;;;;;OAOG;WACU,eAAe,CAC1B,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAsBlB;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,MAAM,GAAG;QAC7D,OAAO,EAAE,UAAU,CAAC;QACpB,MAAM,EAAE,0BAA0B,CAAC;KACpC;IAkCD;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;CAkC5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asn1.d.ts","sourceRoot":"","sources":["../../../src/utils/asn1.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,SAAS,kBACL,MAAM,OAChB,MAAM,KACV,QAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"asn1.d.ts","sourceRoot":"","sources":["../../../src/utils/asn1.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,SAAS,kBACL,MAAM,OAChB,MAAM,KACV,QAAQ,MAAM,CAehB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function encodeBase64(value: string): string;
|
|
2
2
|
export declare function decodeBase64(value: string): string;
|
|
3
3
|
export declare function removePadding(encoded: string): string;
|
|
4
|
+
export declare function addPadding(encoded: string): string;
|
|
4
5
|
//# sourceMappingURL=base64.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../../src/utils/base64.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD"}
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../../src/utils/base64.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYlD"}
|
package/package.json
CHANGED
package/src/jwt/sign.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
} from '../types';
|
|
7
7
|
import { ProduceJWT } from './produce';
|
|
8
8
|
import { decodeBase64, encodeBase64, removePadding } from '../utils/base64';
|
|
9
|
-
import { isAlgSupported } from '../algorithms';
|
|
9
|
+
import { getKtyFromAlg, isAlgSupported } from '../algorithms';
|
|
10
10
|
|
|
11
11
|
import { derToJose } from '../utils/asn1';
|
|
12
12
|
|
|
@@ -87,10 +87,12 @@ export class SignJWT extends ProduceJWT {
|
|
|
87
87
|
|
|
88
88
|
const jwtDecoded = SignJWT.decodeJwtWithoutSignature(jwtWithoutSignature);
|
|
89
89
|
const alg = jwtDecoded.header.alg;
|
|
90
|
-
|
|
90
|
+
const kty = getKtyFromAlg(alg);
|
|
91
|
+
|
|
92
|
+
if (kty === 'EC') {
|
|
91
93
|
const encodedJws = await derToJose(signature, alg);
|
|
92
94
|
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
93
|
-
}
|
|
95
|
+
} else {
|
|
94
96
|
const encodedJws = removePadding(signature);
|
|
95
97
|
return `${jwtWithoutSignature}.${encodedJws}`;
|
|
96
98
|
}
|
package/src/utils/asn1.ts
CHANGED
|
@@ -28,7 +28,10 @@ export const derToJose = async (
|
|
|
28
28
|
asn1Signature,
|
|
29
29
|
getCoordinateOctetLength(alg)
|
|
30
30
|
);
|
|
31
|
-
const encodedJws = removePadding(unpackedJws)
|
|
31
|
+
const encodedJws = removePadding(unpackedJws).replace(
|
|
32
|
+
/(?:\r\n|\r|\n)/g,
|
|
33
|
+
''
|
|
34
|
+
);
|
|
32
35
|
return encodedJws;
|
|
33
36
|
} else {
|
|
34
37
|
throw new JOSENotSupported('Unsupported "alg" value');
|
package/src/utils/base64.ts
CHANGED
|
@@ -23,7 +23,7 @@ export function encodeBase64(value: string): string {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export function decodeBase64(value: string): string {
|
|
26
|
-
let decoded = atob(value);
|
|
26
|
+
let decoded = atob(addPadding(value));
|
|
27
27
|
if (decoded) {
|
|
28
28
|
return decoded;
|
|
29
29
|
} else {
|
|
@@ -35,3 +35,17 @@ export function removePadding(encoded: string): string {
|
|
|
35
35
|
// eslint-disable-next-line no-div-regex
|
|
36
36
|
return encoded.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
37
37
|
}
|
|
38
|
+
|
|
39
|
+
export function addPadding(encoded: string): string {
|
|
40
|
+
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
|
|
41
|
+
var pad = encoded.length % 4;
|
|
42
|
+
if (pad) {
|
|
43
|
+
if (pad === 1) {
|
|
44
|
+
throw new JOSEError(
|
|
45
|
+
'InvalidLengthError: Input base64url string is the wrong length to determine padding'
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
encoded += new Array(5 - pad).join('=');
|
|
49
|
+
}
|
|
50
|
+
return encoded;
|
|
51
|
+
}
|