@pagopa/io-react-native-jwt 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/pagopa/ioreactnativejwt/IoReactNativeJwtModule.kt +35 -15
- package/ios/IoReactNativeJwt.mm +6 -0
- package/ios/IoReactNativeJwt.swift +63 -0
- package/lib/commonjs/index.js +42 -125
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/jwe/index.js +41 -0
- package/lib/commonjs/jwe/index.js.map +1 -0
- package/lib/commonjs/jwk/index.js +29 -0
- package/lib/commonjs/jwk/index.js.map +1 -0
- package/lib/commonjs/jwt/index.js +171 -0
- package/lib/commonjs/jwt/index.js.map +1 -0
- package/lib/commonjs/{jwt_claims_set.js → jwt/jwt_claims_set.js} +2 -2
- package/lib/commonjs/jwt/jwt_claims_set.js.map +1 -0
- package/lib/commonjs/{produce.js → jwt/produce.js} +2 -2
- package/lib/commonjs/jwt/produce.js.map +1 -0
- package/lib/commonjs/{sign.js → jwt/sign.js} +4 -4
- package/lib/commonjs/jwt/sign.js.map +1 -0
- package/lib/commonjs/{unsecured.js → jwt/unsecured.js} +2 -2
- package/lib/commonjs/jwt/unsecured.js.map +1 -0
- package/lib/commonjs/utils/errors.js +28 -1
- package/lib/commonjs/utils/errors.js.map +1 -1
- package/lib/module/index.js +6 -111
- package/lib/module/index.js.map +1 -1
- package/lib/module/jwe/index.js +35 -0
- package/lib/module/jwe/index.js.map +1 -0
- package/lib/module/jwk/index.js +22 -0
- package/lib/module/jwk/index.js.map +1 -0
- package/lib/module/jwt/index.js +94 -0
- package/lib/module/jwt/index.js.map +1 -0
- package/lib/module/{jwt_claims_set.js → jwt/jwt_claims_set.js} +2 -2
- package/lib/module/jwt/jwt_claims_set.js.map +1 -0
- package/lib/module/{produce.js → jwt/produce.js} +2 -2
- package/lib/module/jwt/produce.js.map +1 -0
- package/lib/module/{sign.js → jwt/sign.js} +4 -4
- package/lib/module/jwt/sign.js.map +1 -0
- package/lib/module/{unsecured.js → jwt/unsecured.js} +2 -2
- package/lib/module/jwt/unsecured.js.map +1 -0
- package/lib/module/utils/errors.js +26 -0
- package/lib/module/utils/errors.js.map +1 -1
- package/lib/typescript/index.d.ts +6 -89
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/jwe/index.d.ts +32 -0
- package/lib/typescript/jwe/index.d.ts.map +1 -0
- package/lib/typescript/jwk/index.d.ts +22 -0
- package/lib/typescript/jwk/index.d.ts.map +1 -0
- package/lib/typescript/jwt/index.d.ts +74 -0
- package/lib/typescript/jwt/index.d.ts.map +1 -0
- package/lib/typescript/{jwt_claims_set.d.ts → jwt/jwt_claims_set.d.ts} +1 -1
- package/lib/typescript/jwt/jwt_claims_set.d.ts.map +1 -0
- package/lib/typescript/{produce.d.ts → jwt/produce.d.ts} +1 -1
- package/lib/typescript/jwt/produce.d.ts.map +1 -0
- package/lib/typescript/{sign.d.ts → jwt/sign.d.ts} +1 -1
- package/lib/typescript/jwt/sign.d.ts.map +1 -0
- package/lib/typescript/{unsecured.d.ts → jwt/unsecured.d.ts} +1 -1
- package/lib/typescript/jwt/unsecured.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +51 -46
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/errors.d.ts +23 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.tsx +6 -116
- package/src/jwe/index.ts +45 -0
- package/src/jwk/index.ts +24 -0
- package/src/jwt/index.ts +95 -0
- package/src/{jwt_claims_set.ts → jwt/jwt_claims_set.ts} +3 -3
- package/src/{produce.ts → jwt/produce.ts} +3 -3
- package/src/{sign.ts → jwt/sign.ts} +5 -5
- package/src/{unsecured.ts → jwt/unsecured.ts} +3 -3
- package/src/types.ts +56 -48
- package/src/utils/errors.ts +27 -0
- package/lib/commonjs/jwt_claims_set.js.map +0 -1
- package/lib/commonjs/produce.js.map +0 -1
- package/lib/commonjs/sign.js.map +0 -1
- package/lib/commonjs/unsecured.js.map +0 -1
- package/lib/module/jwt_claims_set.js.map +0 -1
- package/lib/module/produce.js.map +0 -1
- package/lib/module/sign.js.map +0 -1
- package/lib/module/unsecured.js.map +0 -1
- package/lib/typescript/jwt_claims_set.d.ts.map +0 -1
- package/lib/typescript/produce.d.ts.map +0 -1
- package/lib/typescript/sign.d.ts.map +0 -1
- package/lib/typescript/unsecured.d.ts.map +0 -1
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
package com.pagopa.ioreactnativejwt
|
|
2
2
|
|
|
3
|
+
import android.util.Base64
|
|
4
|
+
import android.util.Base64.DEFAULT
|
|
5
|
+
import com.facebook.react.bridge.Promise
|
|
3
6
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
4
7
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
5
8
|
import com.facebook.react.bridge.ReactMethod
|
|
6
|
-
import com.facebook.react.bridge.
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import com.nimbusds.jose.
|
|
11
|
-
import com.nimbusds.jose.crypto.
|
|
9
|
+
import com.facebook.react.bridge.ReadableMap
|
|
10
|
+
import com.nimbusds.jose.JWEEncrypter
|
|
11
|
+
import com.nimbusds.jose.JWEHeader
|
|
12
|
+
import com.nimbusds.jose.JWEObject
|
|
13
|
+
import com.nimbusds.jose.Payload
|
|
14
|
+
import com.nimbusds.jose.crypto.ECDSAVerifier
|
|
15
|
+
import com.nimbusds.jose.crypto.RSAEncrypter
|
|
16
|
+
import com.nimbusds.jose.crypto.RSASSAVerifier
|
|
12
17
|
import com.nimbusds.jose.crypto.bc.BouncyCastleProviderSingleton
|
|
13
|
-
import com.nimbusds.jose.
|
|
18
|
+
import com.nimbusds.jose.crypto.impl.ECDSA.transcodeSignatureToConcat
|
|
14
19
|
import com.nimbusds.jose.jwk.ECKey
|
|
15
|
-
import com.nimbusds.
|
|
20
|
+
import com.nimbusds.jose.jwk.RSAKey
|
|
16
21
|
import com.nimbusds.jwt.SignedJWT
|
|
17
|
-
import com.facebook.react.bridge.ReadableMap
|
|
18
22
|
import org.json.JSONObject
|
|
19
|
-
import com.nimbusds.jose.crypto.RSASSAVerifier
|
|
20
|
-
import com.nimbusds.jose.crypto.ECDSAVerifier
|
|
21
|
-
import com.facebook.react.bridge.WritableNativeMap
|
|
22
|
-
import com.nimbusds.jose.crypto.impl.RSA_OAEP
|
|
23
|
-
import com.pagopa.ioreactnativejwt.Utils.convertJsonToMap
|
|
24
|
-
import com.nimbusds.jose.crypto.impl.ECDSA.transcodeSignatureToConcat
|
|
25
23
|
import java.security.MessageDigest
|
|
26
24
|
|
|
25
|
+
|
|
27
26
|
class IoReactNativeJwtModule(reactContext: ReactApplicationContext) :
|
|
28
27
|
ReactContextBaseJavaModule(reactContext) {
|
|
29
28
|
|
|
@@ -107,6 +106,27 @@ class IoReactNativeJwtModule(reactContext: ReactApplicationContext) :
|
|
|
107
106
|
}
|
|
108
107
|
}
|
|
109
108
|
|
|
109
|
+
@ReactMethod
|
|
110
|
+
fun enc(token: String, header: ReadableMap, jwk: ReadableMap, promise: Promise) {
|
|
111
|
+
try {
|
|
112
|
+
val jwkJson = JSONObject(jwk.toHashMap())
|
|
113
|
+
val headerJson = JSONObject(header.toHashMap())
|
|
114
|
+
val payload = Payload(token)
|
|
115
|
+
if (isECKey(jwkJson)) {
|
|
116
|
+
promise.reject(Exception("EC is not supported"))
|
|
117
|
+
} else {
|
|
118
|
+
val publicKey = RSAKey.parse(jwkJson.toString())
|
|
119
|
+
val internalHeader = JWEHeader.parse(headerJson.toString())
|
|
120
|
+
val jweObject = JWEObject(internalHeader, payload)
|
|
121
|
+
val encrypter: JWEEncrypter = RSAEncrypter(publicKey)
|
|
122
|
+
jweObject.encrypt(encrypter)
|
|
123
|
+
val jweString = jweObject.serialize()
|
|
124
|
+
promise.resolve(jweString)
|
|
125
|
+
}
|
|
126
|
+
} catch (ex: Exception) {
|
|
127
|
+
promise.reject(ex)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
110
130
|
|
|
111
131
|
companion object {
|
|
112
132
|
const val NAME = "IoReactNativeJwt"
|
package/ios/IoReactNativeJwt.mm
CHANGED
|
@@ -20,6 +20,12 @@ RCT_EXTERN_METHOD(sha256: (NSString)toHash
|
|
|
20
20
|
resolver: (RCTPromiseResolveBlock)resolve
|
|
21
21
|
rejecter: (RCTPromiseRejectBlock)reject)
|
|
22
22
|
|
|
23
|
+
RCT_EXTERN_METHOD(enc: (NSString)plaintext
|
|
24
|
+
header: (NSDictionary *)header
|
|
25
|
+
jwk: (NSDictionary *)jwk
|
|
26
|
+
resolver: (RCTPromiseResolveBlock)resolve
|
|
27
|
+
rejecter: (RCTPromiseRejectBlock)reject)
|
|
28
|
+
|
|
23
29
|
+ (BOOL)requiresMainQueueSetup
|
|
24
30
|
{
|
|
25
31
|
return NO;
|
|
@@ -1,15 +1,45 @@
|
|
|
1
1
|
import JOSESwift
|
|
2
2
|
import CommonCrypto
|
|
3
3
|
|
|
4
|
+
|
|
4
5
|
@objc(IoReactNativeJwt)
|
|
5
6
|
class IoReactNativeJwt: NSObject {
|
|
6
7
|
|
|
8
|
+
// create an enum with error values
|
|
9
|
+
enum HeaderError: Error {
|
|
10
|
+
case invalidAlg(String)
|
|
11
|
+
case invalidEnc(String)
|
|
12
|
+
}
|
|
7
13
|
|
|
8
14
|
func isECKey(jwk:NSDictionary) -> Bool{
|
|
9
15
|
let kty = jwk["kty"] as! String
|
|
10
16
|
return kty == "EC"
|
|
11
17
|
}
|
|
12
18
|
|
|
19
|
+
func getKeyManagmentAlg(header:NSDictionary) throws -> KeyManagementAlgorithm{
|
|
20
|
+
let alg = header["alg"] as! String
|
|
21
|
+
switch alg{
|
|
22
|
+
case "RSA-OAEP":
|
|
23
|
+
return KeyManagementAlgorithm.RSAOAEP
|
|
24
|
+
case "RSA-OAEP-256":
|
|
25
|
+
return KeyManagementAlgorithm.RSAOAEP256
|
|
26
|
+
default:
|
|
27
|
+
throw HeaderError.invalidAlg("alg value not supported")
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func getContentEncryptionAlgorithm(header:NSDictionary) throws -> ContentEncryptionAlgorithm{
|
|
32
|
+
let enc = header["enc"] as! String
|
|
33
|
+
switch enc{
|
|
34
|
+
case "A128CBC-HS256":
|
|
35
|
+
return ContentEncryptionAlgorithm.A128CBCHS256
|
|
36
|
+
case "A256CBC-HS512":
|
|
37
|
+
return ContentEncryptionAlgorithm.A256CBCHS512
|
|
38
|
+
default:
|
|
39
|
+
throw HeaderError.invalidAlg("enc value not supported")
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
13
43
|
@objc
|
|
14
44
|
func verify(_ token: String, jwk: NSDictionary, resolver resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
|
|
15
45
|
do {
|
|
@@ -152,5 +182,38 @@ class IoReactNativeJwt: NSObject {
|
|
|
152
182
|
}
|
|
153
183
|
}
|
|
154
184
|
|
|
185
|
+
@objc
|
|
186
|
+
func enc(_ plaintext: String, header: NSDictionary, jwk: NSDictionary, resolver resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
|
|
187
|
+
do {
|
|
188
|
+
let publicKeyJson = try JSONSerialization.data(withJSONObject: jwk, options:[] )
|
|
189
|
+
let message = plaintext.data(using: .utf8)!
|
|
190
|
+
|
|
191
|
+
if let content = header as? [String:AnyObject] {
|
|
192
|
+
let jweHeader = try JWEHeader(parameters: content)
|
|
193
|
+
let payload = Payload(message)
|
|
155
194
|
|
|
195
|
+
if isECKey(jwk:jwk) {
|
|
196
|
+
reject("Error", "EC not supported", nil);
|
|
197
|
+
} else {
|
|
198
|
+
let rsaJwk = try RSAPublicKey(data: publicKeyJson)
|
|
199
|
+
let publicKey = try rsaJwk.converted(to: SecKey.self)
|
|
200
|
+
let encrypter = Encrypter(keyManagementAlgorithm: try getKeyManagmentAlg(header: header), contentEncryptionAlgorithm: try getContentEncryptionAlgorithm(header: header), encryptionKey: publicKey)!
|
|
201
|
+
|
|
202
|
+
let jwe = try JWE(header: jweHeader, payload: payload, encrypter: encrypter)
|
|
203
|
+
|
|
204
|
+
resolve(jwe.compactSerializedString)
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
} else {
|
|
209
|
+
reject("Error", "Header is invalid", nil);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
catch {
|
|
214
|
+
reject("Error", "\(error)", error);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
}
|
|
156
219
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -4,16 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
var _exportNames = {
|
|
7
|
-
decode: true,
|
|
8
|
-
isSignatureValid: true,
|
|
9
|
-
verify: true,
|
|
10
|
-
thumbprint: true,
|
|
11
7
|
derToJose: true,
|
|
12
8
|
encodeBase64: true,
|
|
13
9
|
decodeBase64: true,
|
|
14
10
|
sha256ToBase64: true
|
|
15
11
|
};
|
|
16
|
-
exports.decode = void 0;
|
|
17
12
|
Object.defineProperty(exports, "decodeBase64", {
|
|
18
13
|
enumerable: true,
|
|
19
14
|
get: function () {
|
|
@@ -32,30 +27,49 @@ Object.defineProperty(exports, "encodeBase64", {
|
|
|
32
27
|
return _base.encodeBase64;
|
|
33
28
|
}
|
|
34
29
|
});
|
|
35
|
-
exports.isSignatureValid = void 0;
|
|
36
30
|
Object.defineProperty(exports, "sha256ToBase64", {
|
|
37
31
|
enumerable: true,
|
|
38
32
|
get: function () {
|
|
39
33
|
return _hash.sha256ToBase64;
|
|
40
34
|
}
|
|
41
35
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
var _errors = require("./utils/errors");
|
|
45
|
-
var _proxy = require("./utils/proxy");
|
|
46
|
-
var _sign = require("./sign");
|
|
47
|
-
Object.keys(_sign).forEach(function (key) {
|
|
36
|
+
var _index = require("./jwe/index");
|
|
37
|
+
Object.keys(_index).forEach(function (key) {
|
|
48
38
|
if (key === "default" || key === "__esModule") return;
|
|
49
39
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
50
|
-
if (key in exports && exports[key] ===
|
|
40
|
+
if (key in exports && exports[key] === _index[key]) return;
|
|
51
41
|
Object.defineProperty(exports, key, {
|
|
52
42
|
enumerable: true,
|
|
53
43
|
get: function () {
|
|
54
|
-
return
|
|
44
|
+
return _index[key];
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
var _index2 = require("./jwt/index");
|
|
49
|
+
Object.keys(_index2).forEach(function (key) {
|
|
50
|
+
if (key === "default" || key === "__esModule") return;
|
|
51
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
52
|
+
if (key in exports && exports[key] === _index2[key]) return;
|
|
53
|
+
Object.defineProperty(exports, key, {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
get: function () {
|
|
56
|
+
return _index2[key];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
var _index3 = require("./jwk/index");
|
|
61
|
+
Object.keys(_index3).forEach(function (key) {
|
|
62
|
+
if (key === "default" || key === "__esModule") return;
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
64
|
+
if (key in exports && exports[key] === _index3[key]) return;
|
|
65
|
+
Object.defineProperty(exports, key, {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
get: function () {
|
|
68
|
+
return _index3[key];
|
|
55
69
|
}
|
|
56
70
|
});
|
|
57
71
|
});
|
|
58
|
-
var _produce = require("./produce");
|
|
72
|
+
var _produce = require("./jwt/produce");
|
|
59
73
|
Object.keys(_produce).forEach(function (key) {
|
|
60
74
|
if (key === "default" || key === "__esModule") return;
|
|
61
75
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -67,7 +81,19 @@ Object.keys(_produce).forEach(function (key) {
|
|
|
67
81
|
}
|
|
68
82
|
});
|
|
69
83
|
});
|
|
70
|
-
var
|
|
84
|
+
var _sign = require("./jwt/sign");
|
|
85
|
+
Object.keys(_sign).forEach(function (key) {
|
|
86
|
+
if (key === "default" || key === "__esModule") return;
|
|
87
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
88
|
+
if (key in exports && exports[key] === _sign[key]) return;
|
|
89
|
+
Object.defineProperty(exports, key, {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
get: function () {
|
|
92
|
+
return _sign[key];
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
var _unsecured = require("./jwt/unsecured");
|
|
71
97
|
Object.keys(_unsecured).forEach(function (key) {
|
|
72
98
|
if (key === "default" || key === "__esModule") return;
|
|
73
99
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -82,113 +108,4 @@ Object.keys(_unsecured).forEach(function (key) {
|
|
|
82
108
|
var _asn = require("./utils/asn1");
|
|
83
109
|
var _base = require("./utils/base64");
|
|
84
110
|
var _hash = require("./hash");
|
|
85
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
86
|
-
/**
|
|
87
|
-
* Decode the JWT without validation.
|
|
88
|
-
*
|
|
89
|
-
* @example Usage with a public JWK encoded RSA key
|
|
90
|
-
*
|
|
91
|
-
* ```js
|
|
92
|
-
* const jwt =
|
|
93
|
-
* 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
|
|
94
|
-
*
|
|
95
|
-
* const { payload, protectedHeader } = await decode(jwt)
|
|
96
|
-
*
|
|
97
|
-
* ```
|
|
98
|
-
*
|
|
99
|
-
* @param jwt JSON Web Token value (encoded as JWS).
|
|
100
|
-
*/
|
|
101
|
-
const decode = token => _sign.SignJWT.decode(token);
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Verifies the JWS signature
|
|
105
|
-
*
|
|
106
|
-
* @example Usage with a public JWK encoded RSA key
|
|
107
|
-
*
|
|
108
|
-
* ```js
|
|
109
|
-
* const jwk = {
|
|
110
|
-
* crv: 'P-256',
|
|
111
|
-
* kty: 'EC',
|
|
112
|
-
* x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
|
|
113
|
-
* y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
|
|
114
|
-
* }
|
|
115
|
-
* const jwt =
|
|
116
|
-
* 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
|
|
117
|
-
*
|
|
118
|
-
* const isSignatureValid = await verify(jwt, jwk)
|
|
119
|
-
* ```
|
|
120
|
-
*
|
|
121
|
-
* @param jwt JSON Web Token value (encoded as JWS).
|
|
122
|
-
* @param key Public key to verify the JWT in JWK format.
|
|
123
|
-
*/
|
|
124
|
-
exports.decode = decode;
|
|
125
|
-
const isSignatureValid = (token, jwk) => _proxy.IoReactNativeJwt.verify(token, jwk);
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Verifies the JWT format (to be a JWS Compact format), verifies the JWS signature, validates the
|
|
129
|
-
* JWT Claims Set.
|
|
130
|
-
*
|
|
131
|
-
* @example Usage with a public JWK encoded RSA key
|
|
132
|
-
*
|
|
133
|
-
* ```js
|
|
134
|
-
* const jwk = {
|
|
135
|
-
* crv: 'P-256',
|
|
136
|
-
* kty: 'EC',
|
|
137
|
-
* x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
|
|
138
|
-
* y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
|
|
139
|
-
* }
|
|
140
|
-
* const jwt =
|
|
141
|
-
* 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
|
|
142
|
-
*
|
|
143
|
-
* const { payload, protectedHeader } = await verify(jwt, jwk, {
|
|
144
|
-
* typ: 'entity-statement+jwt',
|
|
145
|
-
* requiredClaims: ['iss', 'sub', 'metadata'],
|
|
146
|
-
* })
|
|
147
|
-
* ```
|
|
148
|
-
*
|
|
149
|
-
* @param jwt JSON Web Token value (encoded as JWS).
|
|
150
|
-
* @param key Public key to verify the JWT in JWK format.
|
|
151
|
-
* @param options JWT Decryption and JWT Claims Set validation options.
|
|
152
|
-
*/
|
|
153
|
-
exports.isSignatureValid = isSignatureValid;
|
|
154
|
-
const verify = async function (token, jwk) {
|
|
155
|
-
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
156
|
-
const {
|
|
157
|
-
protectedHeader,
|
|
158
|
-
payload
|
|
159
|
-
} = await decode(token);
|
|
160
|
-
const signatureIsValid = await isSignatureValid(token, jwk);
|
|
161
|
-
if (signatureIsValid) {
|
|
162
|
-
const verifiedPayload = (0, _jwt_claims_set.default)(protectedHeader, payload, options);
|
|
163
|
-
return {
|
|
164
|
-
payload: verifiedPayload,
|
|
165
|
-
protectedHeader
|
|
166
|
-
};
|
|
167
|
-
} else {
|
|
168
|
-
throw new _errors.JWSSignatureVerificationFailed();
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Calculate JWK thumbprint
|
|
174
|
-
*
|
|
175
|
-
* @example Get JWK thumbprint
|
|
176
|
-
*
|
|
177
|
-
* ```js
|
|
178
|
-
* const jwk: JWK = {
|
|
179
|
-
* crv: 'P-256',
|
|
180
|
-
* kty: 'EC',
|
|
181
|
-
* x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
|
|
182
|
-
* y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
|
|
183
|
-
* };
|
|
184
|
-
|
|
185
|
-
* const thumbprint = await thumbprint(jwk)
|
|
186
|
-
*
|
|
187
|
-
* ```
|
|
188
|
-
*
|
|
189
|
-
* @param jwk JSON Web Key
|
|
190
|
-
*/
|
|
191
|
-
exports.verify = verify;
|
|
192
|
-
const thumbprint = jwk => _proxy.IoReactNativeJwt.thumbprint(jwk);
|
|
193
|
-
exports.thumbprint = thumbprint;
|
|
194
111
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_index","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_index2","_index3","_produce","_sign","_unsecured","_asn","_base","_hash"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EncryptJwe = void 0;
|
|
7
|
+
var _proxy = require("../utils/proxy");
|
|
8
|
+
/**
|
|
9
|
+
* The EncryptJwe class is used to build and encrypt Flattened JWE objects.
|
|
10
|
+
*
|
|
11
|
+
* @example Usage
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const jwe = await new EncryptJwe(
|
|
15
|
+
* new TextEncoder().encode('It’s a dangerous business, Frodo, going out your door.', { alg: 'RSA-OAEP-256', enc: 'A256GCM' }),
|
|
16
|
+
* )
|
|
17
|
+
* .encrypt(publicKey)
|
|
18
|
+
*
|
|
19
|
+
* console.log(jwe)
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
class EncryptJwe {
|
|
23
|
+
/** @param plaintext String representation of the plaintext to encrypt. */
|
|
24
|
+
/** @param header JWE header with alg and enc parameters. */
|
|
25
|
+
constructor(plaintext, header) {
|
|
26
|
+
this._plaintext = plaintext;
|
|
27
|
+
this._protectedHeader = header;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Encrypts and resolves the value of the Flattened JWE object.
|
|
32
|
+
*
|
|
33
|
+
* @param key Public Key or Secret to encrypt the JWE with. See
|
|
34
|
+
*/
|
|
35
|
+
async encrypt(key) {
|
|
36
|
+
let jwe = await _proxy.IoReactNativeJwt.enc(this._plaintext, this._protectedHeader, key);
|
|
37
|
+
return jwe;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.EncryptJwe = EncryptJwe;
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_proxy","require","EncryptJwe","constructor","plaintext","header","_plaintext","_protectedHeader","encrypt","key","jwe","IoReactNativeJwt","enc","exports"],"sourceRoot":"../../../src","sources":["jwe/index.ts"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,CAAC;EAItB;EACA;EACAC,WAAWA,CACTC,SAAiB,EACjBC,MAA0D,EAC1D;IACA,IAAI,CAACC,UAAU,GAAGF,SAAS;IAC3B,IAAI,CAACG,gBAAgB,GAAGF,MAAM;EAChC;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMG,OAAOA,CAACC,GAAQ,EAAmB;IACvC,IAAIC,GAAG,GAAG,MAAMC,uBAAgB,CAACC,GAAG,CAClC,IAAI,CAACN,UAAU,EACf,IAAI,CAACC,gBAAgB,EACrBE,GACF,CAAC;IACD,OAAOC,GAAG;EACZ;AACF;AAACG,OAAA,CAAAX,UAAA,GAAAA,UAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.thumbprint = void 0;
|
|
7
|
+
var _proxy = require("../utils/proxy");
|
|
8
|
+
/**
|
|
9
|
+
* Calculate JWK thumbprint
|
|
10
|
+
*
|
|
11
|
+
* @example Get JWK thumbprint
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const jwk: JWK = {
|
|
15
|
+
* crv: 'P-256',
|
|
16
|
+
* kty: 'EC',
|
|
17
|
+
* x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
|
|
18
|
+
* y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
|
|
19
|
+
* };
|
|
20
|
+
|
|
21
|
+
* const thumbprint = await thumbprint(jwk)
|
|
22
|
+
*
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param jwk JSON Web Key
|
|
26
|
+
*/
|
|
27
|
+
const thumbprint = jwk => _proxy.IoReactNativeJwt.thumbprint(jwk);
|
|
28
|
+
exports.thumbprint = thumbprint;
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_proxy","require","thumbprint","jwk","IoReactNativeJwt","exports"],"sourceRoot":"../../../src","sources":["jwk/index.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAIC,GAAQ,IACjCC,uBAAgB,CAACF,UAAU,CAACC,GAAG,CAAC;AAACE,OAAA,CAAAH,UAAA,GAAAA,UAAA"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
decode: true,
|
|
8
|
+
isSignatureValid: true,
|
|
9
|
+
verify: true,
|
|
10
|
+
derToJose: true,
|
|
11
|
+
encodeBase64: true,
|
|
12
|
+
decodeBase64: true,
|
|
13
|
+
sha256ToBase64: true
|
|
14
|
+
};
|
|
15
|
+
exports.decode = void 0;
|
|
16
|
+
Object.defineProperty(exports, "decodeBase64", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _base.decodeBase64;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(exports, "derToJose", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () {
|
|
25
|
+
return _asn.derToJose;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports, "encodeBase64", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function () {
|
|
31
|
+
return _base.encodeBase64;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
exports.isSignatureValid = void 0;
|
|
35
|
+
Object.defineProperty(exports, "sha256ToBase64", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () {
|
|
38
|
+
return _hash.sha256ToBase64;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
exports.verify = void 0;
|
|
42
|
+
var _jwt_claims_set = _interopRequireDefault(require("./jwt_claims_set"));
|
|
43
|
+
var _errors = require("../utils/errors");
|
|
44
|
+
var _proxy = require("../utils/proxy");
|
|
45
|
+
var _sign = require("./sign");
|
|
46
|
+
Object.keys(_sign).forEach(function (key) {
|
|
47
|
+
if (key === "default" || key === "__esModule") return;
|
|
48
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
49
|
+
if (key in exports && exports[key] === _sign[key]) return;
|
|
50
|
+
Object.defineProperty(exports, key, {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
get: function () {
|
|
53
|
+
return _sign[key];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
var _produce = require("./produce");
|
|
58
|
+
Object.keys(_produce).forEach(function (key) {
|
|
59
|
+
if (key === "default" || key === "__esModule") return;
|
|
60
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
61
|
+
if (key in exports && exports[key] === _produce[key]) return;
|
|
62
|
+
Object.defineProperty(exports, key, {
|
|
63
|
+
enumerable: true,
|
|
64
|
+
get: function () {
|
|
65
|
+
return _produce[key];
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
var _unsecured = require("./unsecured");
|
|
70
|
+
Object.keys(_unsecured).forEach(function (key) {
|
|
71
|
+
if (key === "default" || key === "__esModule") return;
|
|
72
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
73
|
+
if (key in exports && exports[key] === _unsecured[key]) return;
|
|
74
|
+
Object.defineProperty(exports, key, {
|
|
75
|
+
enumerable: true,
|
|
76
|
+
get: function () {
|
|
77
|
+
return _unsecured[key];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
var _asn = require("../utils/asn1");
|
|
82
|
+
var _base = require("../utils/base64");
|
|
83
|
+
var _hash = require("../hash");
|
|
84
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
85
|
+
/**
|
|
86
|
+
* Decode the JWT without validation.
|
|
87
|
+
*
|
|
88
|
+
* @example Usage with a public JWK encoded RSA key
|
|
89
|
+
*
|
|
90
|
+
* ```js
|
|
91
|
+
* const jwt =
|
|
92
|
+
* 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
|
|
93
|
+
*
|
|
94
|
+
* const { payload, protectedHeader } = await decode(jwt)
|
|
95
|
+
*
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @param jwt JSON Web Token value (encoded as JWS).
|
|
99
|
+
*/
|
|
100
|
+
const decode = token => _sign.SignJWT.decode(token);
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Verifies the JWS signature
|
|
104
|
+
*
|
|
105
|
+
* @example Usage with a public JWK encoded RSA key
|
|
106
|
+
*
|
|
107
|
+
* ```js
|
|
108
|
+
* const jwk = {
|
|
109
|
+
* crv: 'P-256',
|
|
110
|
+
* kty: 'EC',
|
|
111
|
+
* x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
|
|
112
|
+
* y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
|
|
113
|
+
* }
|
|
114
|
+
* const jwt =
|
|
115
|
+
* 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
|
|
116
|
+
*
|
|
117
|
+
* const isSignatureValid = await verify(jwt, jwk)
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @param jwt JSON Web Token value (encoded as JWS).
|
|
121
|
+
* @param key Public key to verify the JWT in JWK format.
|
|
122
|
+
*/
|
|
123
|
+
exports.decode = decode;
|
|
124
|
+
const isSignatureValid = (token, jwk) => _proxy.IoReactNativeJwt.verify(token, jwk);
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Verifies the JWT format (to be a JWS Compact format), verifies the JWS signature, validates the
|
|
128
|
+
* JWT Claims Set.
|
|
129
|
+
*
|
|
130
|
+
* @example Usage with a public JWK encoded RSA key
|
|
131
|
+
*
|
|
132
|
+
* ```js
|
|
133
|
+
* const jwk = {
|
|
134
|
+
* crv: 'P-256',
|
|
135
|
+
* kty: 'EC',
|
|
136
|
+
* x: 'qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk',
|
|
137
|
+
* y: '1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM',
|
|
138
|
+
* }
|
|
139
|
+
* const jwt =
|
|
140
|
+
* 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
|
|
141
|
+
*
|
|
142
|
+
* const { payload, protectedHeader } = await verify(jwt, jwk, {
|
|
143
|
+
* typ: 'entity-statement+jwt',
|
|
144
|
+
* requiredClaims: ['iss', 'sub', 'metadata'],
|
|
145
|
+
* })
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @param jwt JSON Web Token value (encoded as JWS).
|
|
149
|
+
* @param key Public key to verify the JWT in JWK format.
|
|
150
|
+
* @param options JWT Decryption and JWT Claims Set validation options.
|
|
151
|
+
*/
|
|
152
|
+
exports.isSignatureValid = isSignatureValid;
|
|
153
|
+
const verify = async function (token, jwk) {
|
|
154
|
+
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
155
|
+
const {
|
|
156
|
+
protectedHeader,
|
|
157
|
+
payload
|
|
158
|
+
} = await decode(token);
|
|
159
|
+
const signatureIsValid = await isSignatureValid(token, jwk);
|
|
160
|
+
if (signatureIsValid) {
|
|
161
|
+
const verifiedPayload = (0, _jwt_claims_set.default)(protectedHeader, payload, options);
|
|
162
|
+
return {
|
|
163
|
+
payload: verifiedPayload,
|
|
164
|
+
protectedHeader
|
|
165
|
+
};
|
|
166
|
+
} else {
|
|
167
|
+
throw new _errors.JWSSignatureVerificationFailed();
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
exports.verify = verify;
|
|
171
|
+
//# sourceMappingURL=index.js.map
|