react-native-security-suite 0.5.19 → 0.6.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/securitysuite/JWSGenerator.java +46 -0
- package/android/src/main/java/com/securitysuite/SecuritySuiteModule.java +19 -11
- package/android/src/main/java/com/securitysuite/Sslpinning.java +65 -30
- package/ios/SecuritySuite.swift +72 -18
- package/ios/SecuritySuite.xcodeproj/project.pbxproj +4 -8
- package/ios/SecuritySuite.xcodeproj/project.xcworkspace/xcuserdata/m.navabifar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/lib/commonjs/index.js +8 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +8 -3
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +1 -2
- package/src/index.tsx +9 -3
- package/ios/SecuritySuite.xcodeproj/project.xcworkspace/xcuserdata/Navabi.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- /package/ios/SecuritySuite.xcodeproj/xcuserdata/{Navabi.xcuserdatad → m.navabifar.xcuserdatad}/xcschemes/xcschememanagement.plist +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
package com.securitysuite;
|
|
2
|
+
|
|
3
|
+
import android.util.Base64;
|
|
4
|
+
|
|
5
|
+
import javax.crypto.Mac;
|
|
6
|
+
import javax.crypto.SecretKey;
|
|
7
|
+
|
|
8
|
+
import java.nio.charset.StandardCharsets;
|
|
9
|
+
import java.security.InvalidKeyException;
|
|
10
|
+
import java.security.NoSuchAlgorithmException;
|
|
11
|
+
import java.security.PrivateKey;
|
|
12
|
+
|
|
13
|
+
public class JWSGenerator {
|
|
14
|
+
public String jwsHeader(byte[] payload, String keyId, String requestId, SecretKey secretKey) {
|
|
15
|
+
try {
|
|
16
|
+
// Construct JOSE Header
|
|
17
|
+
String joseHeader = "{\"alg\":\"HS256\",\"kid\":\"" + keyId + "\",\"b64\":false,\"crit\":[\"b64\"],\"requestId\":\"" + requestId + "\"}";
|
|
18
|
+
byte[] joseHeaderBytes = joseHeader.getBytes(StandardCharsets.UTF_8);
|
|
19
|
+
String base64JoseHeader = Base64.encodeToString(joseHeaderBytes, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
|
|
20
|
+
|
|
21
|
+
byte[] value = prepareAggregatedContentBytes(base64JoseHeader.getBytes(), payload);
|
|
22
|
+
|
|
23
|
+
// Sign the value
|
|
24
|
+
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
|
|
25
|
+
hmacSha256.init(secretKey);
|
|
26
|
+
byte[] signature = hmacSha256.doFinal(value);
|
|
27
|
+
|
|
28
|
+
// Convert signature to URL-safe Base64
|
|
29
|
+
String base64URLSignature = Base64.encodeToString(signature, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
|
|
30
|
+
|
|
31
|
+
// Combine base64JoseHeader, "..", and base64URLSignature to form final JWS
|
|
32
|
+
return base64JoseHeader + ".." + base64URLSignature;
|
|
33
|
+
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
|
|
34
|
+
e.printStackTrace();
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private static byte[] prepareAggregatedContentBytes(byte[] headerBytes, byte[] payloadBytes) {
|
|
40
|
+
byte[] contentBytes = new byte[headerBytes.length + 1 + payloadBytes.length];
|
|
41
|
+
System.arraycopy(headerBytes, 0, contentBytes, 0, headerBytes.length);
|
|
42
|
+
contentBytes[headerBytes.length] = '.';
|
|
43
|
+
System.arraycopy(payloadBytes, 0, contentBytes, headerBytes.length + 1, payloadBytes.length);
|
|
44
|
+
return contentBytes;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -7,7 +7,6 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
|
7
7
|
import com.facebook.react.bridge.ReactMethod;
|
|
8
8
|
import com.facebook.react.bridge.ReadableMap;
|
|
9
9
|
import com.facebook.react.module.annotations.ReactModule;
|
|
10
|
-
import com.scottyab.rootbeer.RootBeer;
|
|
11
10
|
|
|
12
11
|
import androidx.annotation.NonNull;
|
|
13
12
|
|
|
@@ -35,6 +34,10 @@ import javax.crypto.NoSuchPaddingException;
|
|
|
35
34
|
import javax.crypto.SecretKey;
|
|
36
35
|
import javax.crypto.spec.GCMParameterSpec;
|
|
37
36
|
import javax.crypto.spec.SecretKeySpec;
|
|
37
|
+
import javax.crypto.Mac;
|
|
38
|
+
import javax.crypto.spec.SecretKeySpec;
|
|
39
|
+
|
|
40
|
+
import com.scottyab.rootbeer.RootBeer;
|
|
38
41
|
|
|
39
42
|
@ReactModule(name = SecuritySuiteModule.NAME)
|
|
40
43
|
public class SecuritySuiteModule extends ReactContextBaseJavaModule {
|
|
@@ -70,7 +73,7 @@ public class SecuritySuiteModule extends ReactContextBaseJavaModule {
|
|
|
70
73
|
|
|
71
74
|
@ReactMethod
|
|
72
75
|
public void getPublicKey(Promise promise) {
|
|
73
|
-
String base64DEREncoded = Base64.encodeToString(publicKey.getEncoded(), Base64.
|
|
76
|
+
String base64DEREncoded = Base64.encodeToString(publicKey.getEncoded(), Base64.NO_WRAP);
|
|
74
77
|
promise.resolve(base64DEREncoded);
|
|
75
78
|
}
|
|
76
79
|
|
|
@@ -93,11 +96,14 @@ public class SecuritySuiteModule extends ReactContextBaseJavaModule {
|
|
|
93
96
|
@ReactMethod
|
|
94
97
|
public void getSharedKey(String serverPK, Promise promise) {
|
|
95
98
|
try {
|
|
96
|
-
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(serverPK.getBytes(), Base64.
|
|
99
|
+
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(serverPK.getBytes(), Base64.NO_WRAP)); // Change
|
|
100
|
+
// ASN1
|
|
101
|
+
// to
|
|
102
|
+
// publicKey
|
|
97
103
|
KeyFactory keyFactory = KeyFactory.getInstance("EC");
|
|
98
104
|
serverPublicKey = keyFactory.generatePublic(keySpec);
|
|
99
105
|
secretKey = agreeSecretKey(keyPair.getPrivate(), serverPublicKey, true);
|
|
100
|
-
sharedKey = Base64.encodeToString(secretKey.getEncoded(), Base64.
|
|
106
|
+
sharedKey = Base64.encodeToString(secretKey.getEncoded(), Base64.NO_WRAP);
|
|
101
107
|
promise.resolve(sharedKey);
|
|
102
108
|
} catch (Exception e) {
|
|
103
109
|
Log.e("getSharedKey Error: ", String.valueOf(e));
|
|
@@ -110,7 +116,7 @@ public class SecuritySuiteModule extends ReactContextBaseJavaModule {
|
|
|
110
116
|
try {
|
|
111
117
|
byte[] inputByte = input.getBytes();
|
|
112
118
|
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
|
|
113
|
-
byte[] decodedKey = Base64.decode(sharedKey, Base64.
|
|
119
|
+
byte[] decodedKey = Base64.decode(sharedKey, Base64.NO_WRAP);
|
|
114
120
|
SecretKey secretKeySpec = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
|
|
115
121
|
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
|
|
116
122
|
byte[] iv = cipher.getIV();
|
|
@@ -131,17 +137,19 @@ public class SecuritySuiteModule extends ReactContextBaseJavaModule {
|
|
|
131
137
|
@ReactMethod
|
|
132
138
|
public void decrypt(String input, Promise promise) {
|
|
133
139
|
try {
|
|
134
|
-
byte[] inputBytes = Base64.decode(input.getBytes(), Base64.
|
|
135
|
-
if (inputBytes.length < 12 + 16)
|
|
140
|
+
byte[] inputBytes = Base64.decode(input.getBytes(), Base64.NO_WRAP);
|
|
141
|
+
if (inputBytes.length < 12 + 16)
|
|
142
|
+
throw new IllegalArgumentException();
|
|
136
143
|
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
|
|
137
144
|
GCMParameterSpec params = new GCMParameterSpec(128, inputBytes, 0, 12);
|
|
138
|
-
byte[] decodedKey = Base64.decode(sharedKey, Base64.
|
|
145
|
+
byte[] decodedKey = Base64.decode(sharedKey, Base64.NO_WRAP);
|
|
139
146
|
SecretKey secretKeySpec = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
|
|
140
147
|
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, params);
|
|
141
148
|
byte[] plaintext = cipher.doFinal(inputBytes, 12, inputBytes.length - 12);
|
|
142
149
|
String decrypted = new String(plaintext, Charset.forName("UTF-8"));
|
|
143
150
|
promise.resolve(decrypted);
|
|
144
|
-
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException
|
|
151
|
+
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException
|
|
152
|
+
| BadPaddingException | InvalidAlgorithmParameterException e) {
|
|
145
153
|
promise.reject(e);
|
|
146
154
|
}
|
|
147
155
|
}
|
|
@@ -186,13 +194,13 @@ public class SecuritySuiteModule extends ReactContextBaseJavaModule {
|
|
|
186
194
|
|
|
187
195
|
private String getAndroidId() {
|
|
188
196
|
return Settings.Secure.getString(context.getContentResolver(),
|
|
189
|
-
|
|
197
|
+
Settings.Secure.ANDROID_ID);
|
|
190
198
|
}
|
|
191
199
|
|
|
192
200
|
@ReactMethod
|
|
193
201
|
public void fetch(String url, final ReadableMap options, Callback callback) {
|
|
194
202
|
Sslpinning sslpinning = new Sslpinning(context);
|
|
195
|
-
sslpinning.fetch(url, options, callback);
|
|
203
|
+
sslpinning.fetch(url, options, secretKey, callback);
|
|
196
204
|
}
|
|
197
205
|
|
|
198
206
|
@ReactMethod
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
package com.securitysuite;
|
|
2
2
|
|
|
3
|
+
import com.securitysuite.modifier.Base64Decoder;
|
|
4
|
+
import com.securitysuite.modifier.BasicAuthorizationHeaderModifier;
|
|
5
|
+
|
|
3
6
|
import android.content.Context;
|
|
4
7
|
import android.net.Uri;
|
|
5
8
|
|
|
@@ -11,28 +14,35 @@ import com.facebook.react.bridge.ReadableMap;
|
|
|
11
14
|
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
12
15
|
import com.facebook.react.bridge.ReadableType;
|
|
13
16
|
import com.facebook.react.bridge.WritableMap;
|
|
17
|
+
|
|
14
18
|
import com.moczul.ok2curl.modifier.HeaderModifier;
|
|
15
|
-
import com.securitysuite.modifier.Base64Decoder;
|
|
16
|
-
import com.securitysuite.modifier.BasicAuthorizationHeaderModifier;
|
|
17
19
|
import com.moczul.ok2curl.Configuration;
|
|
18
20
|
import com.moczul.ok2curl.CurlInterceptor;
|
|
19
21
|
|
|
20
22
|
import org.json.JSONException;
|
|
21
23
|
|
|
22
24
|
import java.io.BufferedOutputStream;
|
|
25
|
+
import java.io.ByteArrayInputStream;
|
|
26
|
+
import java.io.ByteArrayOutputStream;
|
|
23
27
|
import java.io.File;
|
|
24
28
|
import java.io.FileOutputStream;
|
|
25
29
|
import java.io.IOException;
|
|
26
30
|
import java.io.InputStream;
|
|
31
|
+
import java.io.ObjectOutputStream;
|
|
27
32
|
import java.io.OutputStream;
|
|
33
|
+
import java.net.SocketTimeoutException;
|
|
28
34
|
import java.net.URI;
|
|
29
35
|
import java.net.URISyntaxException;
|
|
36
|
+
import java.security.PrivateKey;
|
|
30
37
|
import java.util.ArrayList;
|
|
38
|
+
import java.util.Arrays;
|
|
31
39
|
import java.util.HashMap;
|
|
32
40
|
import java.util.List;
|
|
33
41
|
import java.util.Map;
|
|
34
42
|
import java.util.concurrent.TimeUnit;
|
|
35
43
|
|
|
44
|
+
import javax.crypto.SecretKey;
|
|
45
|
+
|
|
36
46
|
import okhttp3.CertificatePinner;
|
|
37
47
|
import okhttp3.Headers;
|
|
38
48
|
import okhttp3.MediaType;
|
|
@@ -42,6 +52,8 @@ import okhttp3.OkHttpClient;
|
|
|
42
52
|
import okhttp3.RequestBody;
|
|
43
53
|
import okhttp3.Response;
|
|
44
54
|
|
|
55
|
+
import okio.Buffer;
|
|
56
|
+
|
|
45
57
|
public class Sslpinning {
|
|
46
58
|
private ReactApplicationContext context;
|
|
47
59
|
private static String content_type = "application/json; charset=utf-8";
|
|
@@ -53,7 +65,7 @@ public class Sslpinning {
|
|
|
53
65
|
this.context = context;
|
|
54
66
|
}
|
|
55
67
|
|
|
56
|
-
public void fetch(String url, final ReadableMap options, Callback callback) {
|
|
68
|
+
public void fetch(String url, final ReadableMap options, SecretKey sharedKey, Callback callback) {
|
|
57
69
|
if (!isValidUrl(url)) {
|
|
58
70
|
callback.invoke(null, "url is invalid!");
|
|
59
71
|
return;
|
|
@@ -82,14 +94,36 @@ public class Sslpinning {
|
|
|
82
94
|
OkHttpClient client = getClient(options, certificatePinner);
|
|
83
95
|
|
|
84
96
|
Headers header = setHeader(options);
|
|
85
|
-
RequestBody
|
|
97
|
+
RequestBody requestBody = setBody(context, options);
|
|
86
98
|
String method = getMethod(options);
|
|
87
99
|
|
|
100
|
+
// JWS handler
|
|
101
|
+
String jwsHeader = "";
|
|
102
|
+
if (options.hasKey("keyId") && options.hasKey("requestId")) {
|
|
103
|
+
String keyId = options.getString("keyId");
|
|
104
|
+
String requestId = options.getString("requestId");
|
|
105
|
+
|
|
106
|
+
byte[] payload = new byte[0];
|
|
107
|
+
if (requestBody != null) {
|
|
108
|
+
Buffer buffer = new Buffer();
|
|
109
|
+
try {
|
|
110
|
+
requestBody.writeTo(buffer);
|
|
111
|
+
payload = buffer.readByteArray();
|
|
112
|
+
} catch (IOException e) {
|
|
113
|
+
e.printStackTrace();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
JWSGenerator jwsGenerator = new JWSGenerator();
|
|
118
|
+
jwsHeader = jwsGenerator.jwsHeader(payload, keyId, requestId, sharedKey);
|
|
119
|
+
}
|
|
120
|
+
|
|
88
121
|
Request request = new Request.Builder()
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
122
|
+
.url(url)
|
|
123
|
+
.headers(header)
|
|
124
|
+
.addHeader("X-JWS-Signature", jwsHeader)
|
|
125
|
+
.method(method, requestBody)
|
|
126
|
+
.build();
|
|
93
127
|
|
|
94
128
|
WritableMap output = Arguments.createMap();
|
|
95
129
|
|
|
@@ -120,13 +154,13 @@ public class Sslpinning {
|
|
|
120
154
|
output.putString("error", responseBodyString);
|
|
121
155
|
|
|
122
156
|
callback.invoke(null, output);
|
|
123
|
-
if (e instanceof
|
|
157
|
+
if (e instanceof SocketTimeoutException) {
|
|
124
158
|
System.err.print("Socket TimeOut");
|
|
125
159
|
} else {
|
|
126
160
|
e.printStackTrace();
|
|
127
161
|
}
|
|
128
162
|
}
|
|
129
|
-
} catch(JSONException e) {
|
|
163
|
+
} catch (JSONException e) {
|
|
130
164
|
callback.invoke(null, e);
|
|
131
165
|
}
|
|
132
166
|
}
|
|
@@ -146,19 +180,19 @@ public class Sslpinning {
|
|
|
146
180
|
CurlInterceptor curlInterceptor = handleCurl();
|
|
147
181
|
|
|
148
182
|
if (options.hasKey("timeout")) {
|
|
149
|
-
|
|
150
|
-
|
|
183
|
+
int timeout = options.getInt("timeout");
|
|
184
|
+
return new OkHttpClient.Builder()
|
|
151
185
|
.connectTimeout(timeout, TimeUnit.MILLISECONDS)
|
|
152
186
|
.readTimeout(timeout, TimeUnit.MILLISECONDS)
|
|
153
187
|
.writeTimeout(timeout, TimeUnit.MILLISECONDS)
|
|
154
188
|
.certificatePinner(certificatePinner)
|
|
155
189
|
.addInterceptor(curlInterceptor)
|
|
156
190
|
.build();
|
|
157
|
-
|
|
158
|
-
|
|
191
|
+
} else {
|
|
192
|
+
return new OkHttpClient.Builder()
|
|
159
193
|
.certificatePinner(certificatePinner)
|
|
160
194
|
.build();
|
|
161
|
-
|
|
195
|
+
}
|
|
162
196
|
}
|
|
163
197
|
|
|
164
198
|
private CurlInterceptor handleCurl() {
|
|
@@ -212,7 +246,7 @@ public class Sslpinning {
|
|
|
212
246
|
while (keySetIterator.hasNextKey()) {
|
|
213
247
|
String key = keySetIterator.nextKey();
|
|
214
248
|
ReadableType type = readableMap.getType(key);
|
|
215
|
-
switch(type) {
|
|
249
|
+
switch (type) {
|
|
216
250
|
case String:
|
|
217
251
|
map.put(key, readableMap.getString(key));
|
|
218
252
|
break;
|
|
@@ -243,19 +277,19 @@ public class Sslpinning {
|
|
|
243
277
|
|
|
244
278
|
RequestBody body = null;
|
|
245
279
|
ReadableType bodyType = options.getType("body");
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
280
|
+
switch (bodyType) {
|
|
281
|
+
case String:
|
|
282
|
+
body = RequestBody.create(mediaType, options.getString("body"));
|
|
283
|
+
break;
|
|
284
|
+
case Map:
|
|
285
|
+
ReadableMap bodyMap = options.getMap("body");
|
|
286
|
+
if (bodyMap.hasKey("formData")) {
|
|
287
|
+
ReadableMap formData = bodyMap.getMap("formData");
|
|
288
|
+
body = getBody(formData);
|
|
289
|
+
} else if (bodyMap.hasKey("_parts")) {
|
|
290
|
+
body = getBody(bodyMap);
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
259
293
|
}
|
|
260
294
|
return body;
|
|
261
295
|
}
|
|
@@ -286,7 +320,8 @@ public class Sslpinning {
|
|
|
286
320
|
return multipartBodyBuilder.build();
|
|
287
321
|
}
|
|
288
322
|
|
|
289
|
-
private static void addFormDataPart(Context context, MultipartBody.Builder multipartBodyBuilder, ReadableMap fileData,
|
|
323
|
+
private static void addFormDataPart(Context context, MultipartBody.Builder multipartBodyBuilder, ReadableMap fileData,
|
|
324
|
+
String key) {
|
|
290
325
|
Uri _uri = Uri.parse("");
|
|
291
326
|
if (fileData.hasKey("uri")) {
|
|
292
327
|
_uri = Uri.parse(fileData.getString("uri"));
|
package/ios/SecuritySuite.swift
CHANGED
|
@@ -5,20 +5,20 @@ import Security
|
|
|
5
5
|
import CommonCrypto
|
|
6
6
|
import IOSSecuritySuite
|
|
7
7
|
|
|
8
|
-
@available(iOS
|
|
8
|
+
@available(iOS 14.0, *)
|
|
9
9
|
@objc(SecuritySuite)
|
|
10
10
|
class SecuritySuite: NSObject {
|
|
11
11
|
var privateKey: String!,
|
|
12
12
|
publicKey: String!,
|
|
13
13
|
sharedKey: String!,
|
|
14
14
|
keyData: Data!
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
@objc(getPublicKey:withRejecter:)
|
|
17
17
|
func getPublicKey(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
18
18
|
do {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
publicKey =
|
|
19
|
+
let key = P256.KeyAgreement.PrivateKey()
|
|
20
|
+
privateKey = key.derRepresentation.base64EncodedString()
|
|
21
|
+
publicKey = key.publicKey.derRepresentation.base64EncodedString()
|
|
22
22
|
|
|
23
23
|
resolve(publicKey)
|
|
24
24
|
} catch {
|
|
@@ -29,14 +29,11 @@ class SecuritySuite: NSObject {
|
|
|
29
29
|
@objc(getSharedKey:withResolver:withRejecter:)
|
|
30
30
|
func getSharedKey(serverPK: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
31
31
|
do {
|
|
32
|
-
print("privateKey", privateKey)
|
|
33
32
|
guard let serverPublicKeyData = Data(base64Encoded: serverPK as String),
|
|
34
33
|
let privateKeyData = Data(base64Encoded: privateKey as String) else { return }
|
|
35
|
-
|
|
36
|
-
sharedKey = try? P256.KeyAgreement.PrivateKey(
|
|
37
|
-
|
|
38
|
-
.base64EncodedString()
|
|
39
|
-
|
|
34
|
+
|
|
35
|
+
sharedKey = try? P256.KeyAgreement.PrivateKey(derRepresentation: privateKeyData).sharedSecretFromKeyAgreement(with: .init(derRepresentation: serverPublicKeyData)).withUnsafeBytes { Data($0).base64EncodedString() }
|
|
36
|
+
|
|
40
37
|
resolve(sharedKey)
|
|
41
38
|
} catch {
|
|
42
39
|
reject("error", "GET_SHARED_KEY_ERROR", nil)
|
|
@@ -56,7 +53,9 @@ class SecuritySuite: NSObject {
|
|
|
56
53
|
return
|
|
57
54
|
}
|
|
58
55
|
let key = SymmetricKey(data: keyData)
|
|
56
|
+
|
|
59
57
|
let output = try? AES.GCM.seal(data, using: key).combined?.base64EncodedString()
|
|
58
|
+
|
|
60
59
|
resolve(output)
|
|
61
60
|
} catch {
|
|
62
61
|
reject("error", "ENCRYPT_ERROR", nil)
|
|
@@ -138,12 +137,18 @@ class SecuritySuite: NSObject {
|
|
|
138
137
|
|
|
139
138
|
let startTime = Date()
|
|
140
139
|
var request = URLRequest(url: URL(string: url as String)!)
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
|
|
141
|
+
request.httpMethod = data["method"] as? String ?? "POST"
|
|
142
|
+
request.timeoutInterval = data["timeout"] as? TimeInterval ?? 60.0
|
|
143
|
+
request.allHTTPHeaderFields = data["headers"] as? [String : String]
|
|
143
144
|
if data["body"] != nil { request.httpBody = (data["body"] as! String).data(using: .utf8)! } else { request.httpBody = "".data(using: .utf8)! }
|
|
144
|
-
|
|
145
|
-
if data["
|
|
145
|
+
|
|
146
|
+
if data["keyId"] != nil && data["requestId"] != nil {
|
|
147
|
+
request.setValue(jwsHeader(payload: request.httpBody ?? .init(), keyId: data["keyId"] as! String, requestId: data["requestId"] as! String), forHTTPHeaderField: "X-JWS-Signature")
|
|
148
|
+
}
|
|
149
|
+
|
|
146
150
|
let session = URLSession(configuration: config, delegate: sslPinning, delegateQueue: .main)
|
|
151
|
+
|
|
147
152
|
let task = session.dataTask(with: request) { data, response, error in
|
|
148
153
|
let response = response as? HTTPURLResponse
|
|
149
154
|
|
|
@@ -152,7 +157,7 @@ class SecuritySuite: NSObject {
|
|
|
152
157
|
let responseString = String.init(decoding: data ?? .init(), as: UTF8.self)
|
|
153
158
|
let errorString = error?.localizedDescription
|
|
154
159
|
let responseJSON = try? JSONSerialization.jsonObject(with: data!, options: [])
|
|
155
|
-
|
|
160
|
+
|
|
156
161
|
var result:NSMutableDictionary = [
|
|
157
162
|
"status": response?.statusCode,
|
|
158
163
|
"url": url,
|
|
@@ -164,6 +169,7 @@ class SecuritySuite: NSObject {
|
|
|
164
169
|
result["responseJSON"] = responseJSON
|
|
165
170
|
callback([result, NSNull()])
|
|
166
171
|
} else {
|
|
172
|
+
result["curl"] = request.cURL();
|
|
167
173
|
result["error"] = responseString
|
|
168
174
|
result["errorJSON"] = responseJSON
|
|
169
175
|
do {
|
|
@@ -174,14 +180,13 @@ class SecuritySuite: NSObject {
|
|
|
174
180
|
}
|
|
175
181
|
}
|
|
176
182
|
} else {
|
|
177
|
-
print("test", error)
|
|
178
183
|
callback([NSNull(), "MUST_BE_UPDATE"])
|
|
179
184
|
}
|
|
180
185
|
}
|
|
181
186
|
|
|
182
187
|
task.resume()
|
|
183
188
|
}
|
|
184
|
-
|
|
189
|
+
|
|
185
190
|
@objc(deviceHasSecurityRisk:withRejecter:)
|
|
186
191
|
func deviceHasSecurityRisk(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
|
|
187
192
|
do {
|
|
@@ -191,6 +196,34 @@ class SecuritySuite: NSObject {
|
|
|
191
196
|
reject("ERROR", nil, nil)
|
|
192
197
|
}
|
|
193
198
|
}
|
|
199
|
+
|
|
200
|
+
private func convertHMACToBase64URL(hmac: Data) -> String {
|
|
201
|
+
let base64Encoded = hmac.base64EncodedString()
|
|
202
|
+
let base64URL = base64Encoded
|
|
203
|
+
.replacingOccurrences(of: "+", with: "-")
|
|
204
|
+
.replacingOccurrences(of: "/", with: "_")
|
|
205
|
+
.trimmingCharacters(in: CharacterSet(charactersIn: "="))
|
|
206
|
+
|
|
207
|
+
return base64URL
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private func jwsHeader(payload: Data, keyId: String, requestId: String) -> String {
|
|
211
|
+
do {
|
|
212
|
+
return (try? JSONEncoder().encode(JoseHeader(kid: keyId, requestId: requestId)))
|
|
213
|
+
.flatMap { data in
|
|
214
|
+
data.base64EncodedData().urlsafeBase64
|
|
215
|
+
}
|
|
216
|
+
.flatMap { (data: Data) -> String? in
|
|
217
|
+
let value = data + Data([0x2e] /* "." */) + payload
|
|
218
|
+
let signature = HMAC<SHA256>.authenticationCode(for: value, using: SymmetricKey(data: Data(base64Encoded: self.sharedKey)!))
|
|
219
|
+
let base64URL = convertHMACToBase64URL(hmac: signature.withUnsafeBytes({ Data($0) }))
|
|
220
|
+
|
|
221
|
+
return String(decoding: data, as: UTF8.self) + ".." + base64URL
|
|
222
|
+
} ?? ""
|
|
223
|
+
} catch {
|
|
224
|
+
return "";
|
|
225
|
+
}
|
|
226
|
+
}
|
|
194
227
|
}
|
|
195
228
|
|
|
196
229
|
struct ASN1 {
|
|
@@ -200,3 +233,24 @@ struct ASN1 {
|
|
|
200
233
|
static let ec384 = Data(base64Encoded: "MHYwEAYHKoZIzj0CAQYFK4EEACIDYgA=")!
|
|
201
234
|
static let ec521 = Data(base64Encoded: "MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQ=")!
|
|
202
235
|
}
|
|
236
|
+
|
|
237
|
+
struct JoseHeader: Codable {
|
|
238
|
+
internal init(alg: String = "HS256", kid: String, b64: Bool = false, crit: [String] = ["b64"], requestId: String) {
|
|
239
|
+
self.alg = alg
|
|
240
|
+
self.kid = kid
|
|
241
|
+
self.b64 = b64
|
|
242
|
+
self.crit = crit
|
|
243
|
+
self.requestId = requestId
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private enum CodingKeys: String, CodingKey {
|
|
247
|
+
case alg, kid, b64, crit
|
|
248
|
+
case requestId = "request_id"
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
let alg: String
|
|
252
|
+
let kid: String
|
|
253
|
+
let b64: Bool
|
|
254
|
+
let crit: [String]
|
|
255
|
+
let requestId: String
|
|
256
|
+
}
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
/* Begin PBXBuildFile section */
|
|
10
10
|
4895B17B2A7545930068E02B /* SslPinning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4895B1782A7545930068E02B /* SslPinning.swift */; };
|
|
11
|
-
4895B17C2A7545930068E02B /* DataHashingMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4895B17A2A7545930068E02B /* DataHashingMethods.swift */; };
|
|
12
11
|
48C650222A751374001FA3B0 /* StorageEncryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48C650202A751374001FA3B0 /* StorageEncryption.swift */; };
|
|
13
|
-
|
|
12
|
+
CB4CA37A2B9DBDB90077433B /* DataHashingMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4CA3792B9DBDB90077433B /* DataHashingMethods.swift */; };
|
|
14
13
|
F4FF95D7245B92E800C19C63 /* SecuritySuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */; };
|
|
15
14
|
/* End PBXBuildFile section */
|
|
16
15
|
|
|
@@ -29,10 +28,9 @@
|
|
|
29
28
|
/* Begin PBXFileReference section */
|
|
30
29
|
134814201AA4EA6300B7C361 /* libSecuritySuite.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSecuritySuite.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
31
30
|
4895B1782A7545930068E02B /* SslPinning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SslPinning.swift; sourceTree = "<group>"; };
|
|
32
|
-
4895B17A2A7545930068E02B /* DataHashingMethods.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DataHashingMethods.swift; path = "../../../../Desktop/@navabi/react-native-ssl-pinning/ios/DataHashingMethods.swift"; sourceTree = "<group>"; };
|
|
33
31
|
48C650202A751374001FA3B0 /* StorageEncryption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageEncryption.swift; sourceTree = "<group>"; };
|
|
34
|
-
48C650212A751374001FA3B0 /* DataHashingMethods.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataHashingMethods.swift; sourceTree = "<group>"; };
|
|
35
32
|
B3E7B5891CC2AC0600A0062D /* SecuritySuite.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecuritySuite.mm; sourceTree = "<group>"; };
|
|
33
|
+
CB4CA3792B9DBDB90077433B /* DataHashingMethods.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DataHashingMethods.swift; path = "../../blujr/node_modules/react-native-security-suite/ios/DataHashingMethods.swift"; sourceTree = "<group>"; };
|
|
36
34
|
F4FF95D5245B92E700C19C63 /* SecuritySuite-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SecuritySuite-Bridging-Header.h"; sourceTree = "<group>"; };
|
|
37
35
|
F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecuritySuite.swift; sourceTree = "<group>"; };
|
|
38
36
|
/* End PBXFileReference section */
|
|
@@ -62,9 +60,8 @@
|
|
|
62
60
|
F4FF95D6245B92E800C19C63 /* SecuritySuite.swift */,
|
|
63
61
|
B3E7B5891CC2AC0600A0062D /* SecuritySuite.mm */,
|
|
64
62
|
F4FF95D5245B92E700C19C63 /* SecuritySuite-Bridging-Header.h */,
|
|
65
|
-
|
|
63
|
+
CB4CA3792B9DBDB90077433B /* DataHashingMethods.swift */,
|
|
66
64
|
48C650202A751374001FA3B0 /* StorageEncryption.swift */,
|
|
67
|
-
4895B17A2A7545930068E02B /* DataHashingMethods.swift */,
|
|
68
65
|
4895B1782A7545930068E02B /* SslPinning.swift */,
|
|
69
66
|
134814211AA4EA7D00B7C361 /* Products */,
|
|
70
67
|
);
|
|
@@ -127,9 +124,8 @@
|
|
|
127
124
|
isa = PBXSourcesBuildPhase;
|
|
128
125
|
buildActionMask = 2147483647;
|
|
129
126
|
files = (
|
|
130
|
-
48C650232A751374001FA3B0 /* DataHashingMethods.swift in Sources */,
|
|
131
|
-
4895B17C2A7545930068E02B /* DataHashingMethods.swift in Sources */,
|
|
132
127
|
4895B17B2A7545930068E02B /* SslPinning.swift in Sources */,
|
|
128
|
+
CB4CA37A2B9DBDB90077433B /* DataHashingMethods.swift in Sources */,
|
|
133
129
|
48C650222A751374001FA3B0 /* StorageEncryption.swift in Sources */,
|
|
134
130
|
F4FF95D7245B92E800C19C63 /* SecuritySuite.swift in Sources */,
|
|
135
131
|
);
|
|
Binary file
|
package/lib/commonjs/index.js
CHANGED
|
@@ -26,7 +26,10 @@ const SecuritySuite = _reactNative.NativeModules.SecuritySuite ? _reactNative.Na
|
|
|
26
26
|
throw new Error(LINKING_ERROR);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
const getPublicKey = ()
|
|
29
|
+
const getPublicKey = function () {
|
|
30
|
+
let ellipticCurve = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'p256';
|
|
31
|
+
return SecuritySuite.getPublicKey(ellipticCurve);
|
|
32
|
+
};
|
|
30
33
|
exports.getPublicKey = getPublicKey;
|
|
31
34
|
const getSharedKey = serverPublicKey => SecuritySuite.getSharedKey(serverPublicKey);
|
|
32
35
|
exports.getSharedKey = getSharedKey;
|
|
@@ -191,8 +194,10 @@ function fetch(url, options) {
|
|
|
191
194
|
});
|
|
192
195
|
try {
|
|
193
196
|
if (error === null) {
|
|
194
|
-
|
|
195
|
-
|
|
197
|
+
resolve({
|
|
198
|
+
...result,
|
|
199
|
+
json: () => (0, _helpers.jsonParse)(result.response)
|
|
200
|
+
});
|
|
196
201
|
} else {
|
|
197
202
|
const errorJson = (0, _helpers.jsonParse)(error.error);
|
|
198
203
|
reject({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_asyncStorage","_interopRequireDefault","_helpers","_events","obj","__esModule","default","LINKING_ERROR","Platform","select","ios","SecuritySuite","NativeModules","Proxy","get","Error","getPublicKey","exports","getSharedKey","serverPublicKey","encryptBySharedKey","input","encrypt","decryptBySharedKey","decrypt","getDeviceId","Promise","resolve","reject","result","error","hardEncryption","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_asyncStorage","_interopRequireDefault","_helpers","_events","obj","__esModule","default","LINKING_ERROR","Platform","select","ios","SecuritySuite","NativeModules","Proxy","get","Error","getPublicKey","ellipticCurve","arguments","length","undefined","exports","getSharedKey","serverPublicKey","encryptBySharedKey","input","encrypt","decryptBySharedKey","decrypt","getDeviceId","Promise","resolve","reject","result","error","hardEncryption","secretKey","storageEncrypt","storageDecrypt","SecureStorage","setItem","key","value","encryptedKey","encryptedValue","AsyncStorage","e","console","getItem","encryptedData","mergeItem","data","isJsonString","mergedData","JSON","stringify","Object","assign","parse","removeItem","getAllKeys","encryptedKeys","all","map","item","decryptedKey","multiSet","keyValuePairs","encryptedKeyValuePairs","multiGet","keys","Array","isArray","encryptedItems","decryptedalue","multiMerge","multiRemove","clear","fetch","url","options","SSEventEmitter","emit","response","json","jsonParse","errorJson","status","curl","deviceHasSecurityRisk","EventEmitter","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
|
package/lib/module/index.js
CHANGED
|
@@ -16,7 +16,10 @@ const SecuritySuite = NativeModules.SecuritySuite ? NativeModules.SecuritySuite
|
|
|
16
16
|
throw new Error(LINKING_ERROR);
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
-
export const getPublicKey = ()
|
|
19
|
+
export const getPublicKey = function () {
|
|
20
|
+
let ellipticCurve = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'p256';
|
|
21
|
+
return SecuritySuite.getPublicKey(ellipticCurve);
|
|
22
|
+
};
|
|
20
23
|
export const getSharedKey = serverPublicKey => SecuritySuite.getSharedKey(serverPublicKey);
|
|
21
24
|
export const encryptBySharedKey = input => input && typeof input === 'string' ? SecuritySuite.encrypt(input) : '';
|
|
22
25
|
export const decryptBySharedKey = input => input && typeof input === 'string' ? SecuritySuite.decrypt(input) : '';
|
|
@@ -173,8 +176,10 @@ export function fetch(url, options) {
|
|
|
173
176
|
});
|
|
174
177
|
try {
|
|
175
178
|
if (error === null) {
|
|
176
|
-
|
|
177
|
-
|
|
179
|
+
resolve({
|
|
180
|
+
...result,
|
|
181
|
+
json: () => jsonParse(result.response)
|
|
182
|
+
});
|
|
178
183
|
} else {
|
|
179
184
|
const errorJson = jsonParse(error.error);
|
|
180
185
|
reject({
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","AsyncStorage","isJsonString","jsonParse","EventEmitter","LINKING_ERROR","select","ios","default","SecuritySuite","Proxy","get","Error","getPublicKey","getSharedKey","serverPublicKey","encryptBySharedKey","input","encrypt","decryptBySharedKey","decrypt","getDeviceId","Promise","resolve","reject","result","error","hardEncryption","
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","AsyncStorage","isJsonString","jsonParse","EventEmitter","LINKING_ERROR","select","ios","default","SecuritySuite","Proxy","get","Error","getPublicKey","ellipticCurve","arguments","length","undefined","getSharedKey","serverPublicKey","encryptBySharedKey","input","encrypt","decryptBySharedKey","decrypt","getDeviceId","Promise","resolve","reject","result","error","hardEncryption","secretKey","storageEncrypt","storageDecrypt","SecureStorage","setItem","key","value","encryptedKey","encryptedValue","e","console","getItem","encryptedData","mergeItem","data","mergedData","JSON","stringify","Object","assign","parse","removeItem","getAllKeys","encryptedKeys","all","map","item","decryptedKey","multiSet","keyValuePairs","encryptedKeyValuePairs","multiGet","keys","Array","isArray","encryptedItems","decryptedalue","multiMerge","multiRemove","clear","fetch","url","options","SSEventEmitter","emit","response","json","errorJson","status","curl","deviceHasSecurityRisk"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
|
|
@@ -50,8 +50,9 @@ export interface FetchEventResponse {
|
|
|
50
50
|
duration: string;
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
+
export type EllipticCurveTypes = 'p256' | 'p384' | 'p512';
|
|
53
54
|
declare const SecuritySuite: any;
|
|
54
|
-
export declare const getPublicKey: () => Promise<string>;
|
|
55
|
+
export declare const getPublicKey: (ellipticCurve?: EllipticCurveTypes) => Promise<string>;
|
|
55
56
|
export declare const getSharedKey: (serverPublicKey: string) => Promise<string>;
|
|
56
57
|
export declare const encryptBySharedKey: (input: string) => Promise<string>;
|
|
57
58
|
export declare const decryptBySharedKey: (input: string) => any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,MAAM;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,OAAO,CAAC;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-security-suite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Security solution for React Native",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -92,7 +92,6 @@
|
|
|
92
92
|
"engines": {
|
|
93
93
|
"node": ">= 16.0.0"
|
|
94
94
|
},
|
|
95
|
-
"packageManager": "^yarn@1.22.15",
|
|
96
95
|
"jest": {
|
|
97
96
|
"preset": "react-native",
|
|
98
97
|
"modulePathIgnorePatterns": [
|
package/src/index.tsx
CHANGED
|
@@ -56,6 +56,8 @@ export interface FetchEventResponse {
|
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
export type EllipticCurveTypes = 'p256' | 'p384' | 'p512';
|
|
60
|
+
|
|
59
61
|
const LINKING_ERROR =
|
|
60
62
|
`The package 'react-native-security-suite' doesn't seem to be linked. Make sure: \n\n` +
|
|
61
63
|
Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
|
|
@@ -73,7 +75,9 @@ const SecuritySuite = NativeModules.SecuritySuite
|
|
|
73
75
|
}
|
|
74
76
|
);
|
|
75
77
|
|
|
76
|
-
export const getPublicKey = (
|
|
78
|
+
export const getPublicKey = (
|
|
79
|
+
ellipticCurve: EllipticCurveTypes = 'p256'
|
|
80
|
+
): Promise<string> => SecuritySuite.getPublicKey(ellipticCurve);
|
|
77
81
|
|
|
78
82
|
export const getSharedKey = (serverPublicKey: string): Promise<string> =>
|
|
79
83
|
SecuritySuite.getSharedKey(serverPublicKey);
|
|
@@ -290,8 +294,10 @@ export function fetch(
|
|
|
290
294
|
|
|
291
295
|
try {
|
|
292
296
|
if (error === null) {
|
|
293
|
-
|
|
294
|
-
|
|
297
|
+
resolve({
|
|
298
|
+
...result,
|
|
299
|
+
json: () => jsonParse(result.response),
|
|
300
|
+
});
|
|
295
301
|
} else {
|
|
296
302
|
const errorJson = jsonParse(error.error);
|
|
297
303
|
reject({
|
|
Binary file
|