Skip to content

Commit c267f76

Browse files
authored
Upgrade dependencies (#92)
1 parent 02719d5 commit c267f76

File tree

78 files changed

+690
-591
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+690
-591
lines changed

Diff for: .clang-format

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
BasedOnStyle: Google
2+
ColumnLimit: 0

Diff for: .github/workflows/android.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ jobs:
1111
e2e:
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@v3
14+
- uses: actions/checkout@v4
1515
- id: yarn-cache
16-
uses: actions/cache@v3
16+
uses: actions/cache@v4
1717
with:
1818
path: |
1919
**/node_modules
@@ -22,11 +22,11 @@ jobs:
2222
restore-keys: |
2323
${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
2424
${{ runner.os }}-yarn-
25-
- uses: actions/setup-java@v3
25+
- uses: actions/setup-java@v4
2626
with:
2727
distribution: 'temurin'
2828
java-version: '17'
29-
- uses: android-actions/setup-android@v2
29+
- uses: android-actions/setup-android@v3
3030
- uses: nttld/setup-ndk@v1
3131
id: setup-ndk
3232
with:

Diff for: .github/workflows/ios.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ jobs:
1111
e2e:
1212
runs-on: macos-latest
1313
steps:
14-
- uses: actions/checkout@v3
14+
- uses: actions/checkout@v4
1515
- id: yarn-cache
16-
uses: actions/cache@v3
16+
uses: actions/cache@v4
1717
with:
1818
path: |
1919
**/node_modules

Diff for: .github/workflows/npm.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ jobs:
99
build:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v3
13-
- uses: actions/setup-node@v3
12+
- uses: actions/checkout@v4
13+
- uses: actions/setup-node@v4
1414
with:
15-
node-version: '16'
15+
node-version: '22'
1616
registry-url: https://registry.npmjs.org/
1717
- run: yarn install
1818
- run: npm publish --access public

Diff for: .github/workflows/release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
build:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v3
12+
- uses: actions/checkout@v4
1313
with:
1414
fetch-depth: 0
1515
- uses: scottbrenner/generate-changelog-action@master

Diff for: android/fast-rsa-adapter.cpp

+79-66
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,96 @@
1-
#include <jni.h>
2-
#include "react-native-fast-rsa.h"
31
#include <android/log.h>
2+
#include <jni.h>
43
#include <librsa_bridge.h>
54

6-
extern "C"
7-
JNIEXPORT void JNICALL
8-
Java_com_fastrsa_FastRsaModule_initialize(JNIEnv *env, jobject thiz,
9-
jlong jsi_ptr) {
10-
__android_log_print(ANDROID_LOG_VERBOSE, "react-native-fast-rsa",
11-
"Initializing");
12-
fastRSA::install(*reinterpret_cast<facebook::jsi::Runtime *>(jsi_ptr));
13-
}
5+
#include "react-native-fast-rsa.h"
146

15-
extern "C"
16-
JNIEXPORT void JNICALL
17-
Java_com_fastrsa_FastRsaModule_destruct(JNIEnv *env, jobject thiz) {
18-
fastRSA::cleanup();
19-
}
20-
extern "C"
21-
JNIEXPORT jbyteArray JNICALL
22-
Java_com_fastrsa_FastRsaModule_callNative(JNIEnv *env, jobject thiz,
23-
jstring name, jbyteArray payload) {
7+
extern "C" JNIEXPORT void JNICALL
8+
Java_com_fastrsa_FastRsaModule_initialize(JNIEnv* env,
9+
jobject /* thiz */,
10+
jlong jsContext) {
11+
if (jsContext == 0) {
12+
__android_log_print(ANDROID_LOG_ERROR, "react-native-fast-rsa", "Failed to initialize: jsContext is null");
13+
jclass Exception = env->FindClass("java/lang/IllegalArgumentException");
14+
env->ThrowNew(Exception, "JSI context is null");
15+
return;
16+
}
2417

25-
auto nameConstChar = env->GetStringUTFChars(name, nullptr);
26-
auto payloadBytes = env->GetByteArrayElements(payload, nullptr);
27-
auto size = env->GetArrayLength(payload);
18+
__android_log_print(ANDROID_LOG_VERBOSE, "react-native-fast-rsa", "Initializing JSI bindings");
2819

29-
auto nameChar = const_cast<char *>(nameConstChar);
30-
auto response = RSABridgeCall(nameChar, payloadBytes, size);
20+
try {
21+
auto* runtime = reinterpret_cast<facebook::jsi::Runtime*>(jsContext);
3122

32-
env->ReleaseStringUTFChars(name, nameConstChar);
33-
env->ReleaseByteArrayElements(payload, payloadBytes, 0);
34-
35-
if (response->error != nullptr) {
36-
auto error = response->error;
37-
free(response);
38-
jclass Exception = env->FindClass("java/lang/Exception");
39-
env->ThrowNew(Exception, error);
40-
return nullptr;
41-
}
42-
43-
auto result = env->NewByteArray(response->size);
44-
env->SetByteArrayRegion(result, 0, response->size, (jbyte*) response->message);
45-
free(response);
46-
return result;
23+
fastRSA::install(*runtime);
24+
25+
__android_log_print(ANDROID_LOG_INFO, "react-native-fast-rsa", "JSI bindings successfully installed");
26+
} catch (const std::exception& e) {
27+
__android_log_print(ANDROID_LOG_ERROR, "react-native-fast-rsa", "Exception during initialization: %s", e.what());
28+
jclass Exception = env->FindClass("java/lang/RuntimeException");
29+
env->ThrowNew(Exception, e.what());
30+
} catch (...) {
31+
__android_log_print(ANDROID_LOG_ERROR, "react-native-fast-rsa", "Unknown error during initialization");
32+
jclass Exception = env->FindClass("java/lang/RuntimeException");
33+
env->ThrowNew(Exception, "Unknown error occurred during JSI initialization");
34+
}
35+
}
36+
37+
extern "C" JNIEXPORT void JNICALL
38+
Java_com_fastrsa_FastRsaModule_destruct(JNIEnv* env, jobject thiz) {
39+
fastRSA::cleanup();
4740
}
4841

42+
extern "C" JNIEXPORT jbyteArray JNICALL
43+
Java_com_fastrsa_FastRsaModule_callNative(JNIEnv* env,
44+
jobject thiz,
45+
jstring name,
46+
jbyteArray payload) {
47+
if (name == nullptr || payload == nullptr) {
48+
jclass Exception = env->FindClass("java/lang/NullPointerException");
49+
env->ThrowNew(Exception, "Input parameters 'name' or 'payload' cannot be null");
50+
return nullptr;
51+
}
4952

50-
extern "C"
51-
JNIEXPORT jbyteArray JNICALL
52-
Java_com_fastrsa_FastRsaModule_callJSI(JNIEnv *env, jobject thiz, jlong jsi_ptr,
53-
jstring name, jbyteArray payload) {
54-
auto &runtime = *reinterpret_cast<jsi::Runtime *>(jsi_ptr);
55-
auto nameConstChar = env->GetStringUTFChars(name, nullptr);
56-
auto payloadBytes = env->GetByteArrayElements(payload, nullptr);
57-
auto size = env->GetArrayLength(payload);
53+
const char* nameConstChar = env->GetStringUTFChars(name, nullptr);
54+
if (nameConstChar == nullptr) {
55+
jclass Exception = env->FindClass("java/lang/OutOfMemoryError");
56+
env->ThrowNew(Exception, "Failed to allocate memory for 'name'");
57+
return nullptr;
58+
}
5859

59-
auto nameValue = jsi::String::createFromAscii(runtime, nameConstChar);
60+
jbyte* payloadBytes = env->GetByteArrayElements(payload, nullptr);
61+
if (payloadBytes == nullptr) {
6062
env->ReleaseStringUTFChars(name, nameConstChar);
63+
jclass Exception = env->FindClass("java/lang/OutOfMemoryError");
64+
env->ThrowNew(Exception, "Failed to allocate memory for 'payload'");
65+
return nullptr;
66+
}
6167

68+
jsize size = env->GetArrayLength(payload);
69+
auto response =
70+
RSABridgeCall(const_cast<char*>(nameConstChar), payloadBytes, size);
6271

63-
auto arrayBuffer = runtime.global().getPropertyAsFunction(runtime, "ArrayBuffer");
64-
jsi::Object o = arrayBuffer.callAsConstructor(runtime, size).getObject(runtime);
65-
jsi::ArrayBuffer payloadValue = o.getArrayBuffer(runtime);
66-
memcpy(payloadValue.data(runtime), payloadBytes, size);
67-
env->ReleaseByteArrayElements(payload, payloadBytes, 0);
72+
// Release resources
73+
env->ReleaseStringUTFChars(name, nameConstChar);
74+
env->ReleaseByteArrayElements(payload, payloadBytes, JNI_ABORT);
6875

69-
auto response = fastRSA::call(runtime, nameValue, payloadValue);
76+
if (response->error != nullptr) {
77+
const char* error = response->error;
78+
free(response);
79+
jclass Exception = env->FindClass("java/lang/Exception");
80+
env->ThrowNew(Exception, error);
81+
return nullptr;
82+
}
7083

71-
if (response.isString()) {
72-
auto error = response.asString(runtime);
73-
jclass Exception = env->FindClass("java/lang/Exception");
74-
env->ThrowNew(Exception, error.utf8(runtime).c_str());
75-
return nullptr;
84+
jbyteArray result = env->NewByteArray(response->size);
85+
if (result == nullptr) {
86+
free(response);
87+
jclass Exception = env->FindClass("java/lang/OutOfMemoryError");
88+
env->ThrowNew(Exception, "Failed to allocate memory for result");
89+
return nullptr;
90+
}
7691

77-
}
78-
auto byteResult = response.asObject(runtime).getArrayBuffer(runtime);
79-
auto sizeResult = byteResult.size(runtime);
80-
auto result = env->NewByteArray(sizeResult);
81-
env->SetByteArrayRegion(result, 0, sizeResult, (jbyte*) byteResult.data(runtime));
82-
return result;
83-
}
92+
env->SetByteArrayRegion(result, 0, response->size, reinterpret_cast<jbyte*>(response->message));
93+
free(response);
94+
95+
return result;
96+
}

Diff for: android/gradle.properties

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
FastRsa_kotlinVersion=1.7.0
22
FastRsa_minSdkVersion=21
3-
FastRsa_targetSdkVersion=31
4-
FastRsa_compileSdkVersion=31
5-
FastRsa_ndkversion=21.4.7075529
3+
FastRsa_targetSdkVersion=33
4+
FastRsa_compileSdkVersion=33
5+
FastRsa_ndkversion=23.1.7779620

Diff for: android/src/main/java/com/fastrsa/FastRsaModule.kt

+25-47
Original file line numberDiff line numberDiff line change
@@ -8,78 +8,56 @@ internal class FastRsaModule(reactContext: ReactApplicationContext) :
88

99
val TAG = "[FastRsaModule]"
1010

11-
external fun initialize(jsiPtr: Long);
11+
external fun initialize(jsContext: Long)
1212
external fun destruct();
13-
external fun callJSI(jsiPtr: Long, name: String, payload: ByteArray): ByteArray;
1413
external fun callNative(name: String, payload: ByteArray): ByteArray;
1514

1615
companion object {
1716
init {
1817
System.loadLibrary("fast-rsa")
1918
}
2019
}
21-
22-
@ReactMethod
23-
fun callJSI(name: String, payload: ReadableArray, promise: Promise) {
24-
Thread {
25-
reactApplicationContext.runOnJSQueueThread {
26-
try {
27-
val contextHolder = this.reactApplicationContext.javaScriptContextHolder!!.get()
28-
if (contextHolder.toInt() == 0) {
29-
call(name, payload, promise)
30-
return@runOnJSQueueThread
31-
}
32-
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
33-
val result = callJSI(contextHolder, name, bytes)
34-
val resultList = Arguments.createArray()
35-
for (i in result.indices) {
36-
resultList.pushInt(result[i].toInt())
37-
}
38-
promise.resolve(resultList)
39-
} catch (e: Exception) {
40-
promise.reject(e)
41-
}
42-
}
43-
}.start()
20+
21+
override fun getName(): String {
22+
return "FastRsa"
4423
}
4524

4625
@ReactMethod
4726
fun call(name: String, payload: ReadableArray, promise: Promise) {
4827
Thread {
4928
try {
50-
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
29+
val bytes = ByteArray(payload.size()) { index ->
30+
payload.getInt(index).toByte()
31+
}
5132
val result = callNative(name, bytes)
52-
val resultList = Arguments.createArray()
53-
for (i in result.indices) {
54-
resultList.pushInt(result[i].toInt())
33+
val resultList = Arguments.createArray().apply {
34+
result.forEach { pushInt(it.toInt()) }
5535
}
36+
5637
promise.resolve(resultList)
5738
} catch (e: Exception) {
58-
promise.reject(e)
39+
promise.reject("CALL_ERROR", "An error occurred during native call", e)
5940
}
6041
}.start()
6142
}
6243

6344
@ReactMethod(isBlockingSynchronousMethod = true)
6445
fun install(): Boolean {
65-
Log.d(TAG, "installing")
66-
try {
67-
val contextHolder = this.reactApplicationContext.javaScriptContextHolder!!.get()
68-
if (contextHolder.toInt() == 0) {
69-
Log.d(TAG, "context not available")
70-
return false
46+
Log.d(TAG, "Attempting to install JSI bindings...")
47+
return try {
48+
val contextHolder = reactApplicationContext.javaScriptContextHolder?.get()
49+
if (contextHolder == null || contextHolder.toInt() == 0) {
50+
Log.w(TAG, "JSI context is not available")
51+
false
52+
} else {
53+
initialize(contextHolder)
54+
Log.i(TAG, "JSI bindings successfully installed")
55+
true
56+
}
57+
} catch (e: Exception) {
58+
Log.e(TAG, "Failed to install JSI bindings", e)
59+
false
7160
}
72-
initialize(contextHolder)
73-
Log.i(TAG, "successfully installed")
74-
return true
75-
} catch (exception: java.lang.Exception) {
76-
Log.e(TAG, "failed to install JSI", exception)
77-
return false
78-
}
79-
}
80-
81-
override fun getName(): String {
82-
return "FastRsa"
8361
}
8462

8563
override fun onCatalystInstanceDestroy() {

Diff for: android/src/main/jniLibs/arm64-v8a/librsa_bridge.so

517 KB
Binary file not shown.
429 KB
Binary file not shown.

Diff for: android/src/main/jniLibs/x86/librsa_bridge.so

445 KB
Binary file not shown.

Diff for: android/src/main/jniLibs/x86_64/librsa_bridge.so

545 KB
Binary file not shown.

Diff for: cpp/librsa_bridge.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#include <stdint.h>
22
#include <stdlib.h>
3-
typedef struct { void* message; int size; char* error; } BytesReturn;
3+
typedef struct {
4+
void* message;
5+
int size;
6+
char* error;
7+
} BytesReturn;
48

59
#ifdef __cplusplus
610
extern "C" {

0 commit comments

Comments
 (0)