1+ #include < jni.h>
2+ #include " react-native-fast-openpgp.h"
3+ #include < android/log.h>
4+ #include < libopenpgp_bridge.h>
5+
6+ extern " C"
7+ JNIEXPORT void JNICALL
8+ Java_com_reactnativefastopenpgp_FastOpenpgpModule_initialize (JNIEnv *env, jobject thiz,
9+ jlong jsi_ptr) {
10+ __android_log_print (ANDROID_LOG_VERBOSE , " react-native-fast-openpgp" ,
11+ " Initializing" );
12+ fastOpenPGP::install (*reinterpret_cast <facebook::jsi::Runtime *>(jsi_ptr));
13+ }
14+
15+ extern " C"
16+ JNIEXPORT void JNICALL
17+ Java_com_reactnativefastopenpgp_FastOpenpgpModule_destruct (JNIEnv *env, jobject thiz) {
18+ fastOpenPGP::cleanup ();
19+ }
20+ extern " C"
21+ JNIEXPORT jbyteArray JNICALL
22+ Java_com_reactnativefastopenpgp_FastOpenpgpModule_call (JNIEnv *env, jobject thiz,
23+ jstring name, jbyteArray payload) {
24+
25+ jboolean iscopy;
26+ auto nameConstChar = env->GetStringUTFChars (name, &iscopy);
27+ auto payloadBytes = env->GetByteArrayElements (payload, &iscopy);
28+ auto size = env->GetArrayLength (payload);
29+
30+ auto nameChar = const_cast <char *>(nameConstChar);
31+ auto response = OpenPGPBridgeCall (nameChar, payloadBytes, size);
32+ // env->ReleaseStringUTFChars(name, nameConstChar);
33+
34+ if (response->error != nullptr ) {
35+ auto error = response->error ;
36+ // free(response);
37+ jclass Exception = env->FindClass (" java/lang/Exception" );
38+ env->ThrowNew (Exception, error);
39+ return nullptr ;
40+ }
41+
42+ auto result = env->NewByteArray (response->size );
43+ memcpy (result, response->message , response->size );
44+ // free(response);
45+ return result;
46+ }
47+
48+
49+ extern " C"
50+ JNIEXPORT jbyteArray JNICALL
51+ Java_com_reactnativefastopenpgp_FastOpenpgpModule_callJSI (JNIEnv *env, jobject thiz, jlong jsi_ptr,
52+ jstring name, jbyteArray payload) {
53+ auto runtime = reinterpret_cast <jsi::Runtime *>(jsi_ptr);
54+ jboolean iscopy;
55+ auto nameConstChar = env->GetStringUTFChars (name, &iscopy);
56+ auto nameValue = jsi::String::createFromAscii (*runtime, nameConstChar);
57+ env->ReleaseStringUTFChars (name, nameConstChar);
58+
59+ auto payloadArray = env->GetByteArrayElements (payload, &iscopy);
60+ int size = env->GetArrayLength (payload);
61+
62+ auto arrayBuffer = runtime->global ().getPropertyAsFunction (*runtime, " ArrayBuffer" );
63+ jsi::Object o = arrayBuffer.callAsConstructor (*runtime, size).getObject (*runtime);
64+ jsi::ArrayBuffer payloadValue = o.getArrayBuffer (*runtime);
65+ memcpy (payloadValue.data (*runtime), payloadArray, size);
66+
67+ auto response = fastOpenPGP::call (*runtime, nameValue, payloadValue);
68+
69+ if (response.isString ()) {
70+ auto error = response.asString (*runtime);
71+ jclass Exception = env->FindClass (" java/lang/Exception" );
72+ env->ThrowNew (Exception, error.utf8 (*runtime).c_str ());
73+ return nullptr ;
74+
75+ }
76+ auto byteResult = response.asObject (*runtime).getArrayBuffer (*runtime);
77+ auto sizeResult = byteResult.size (*runtime);
78+ auto result = env->NewByteArray (sizeResult);
79+ memcpy (result, byteResult.data (*runtime), sizeResult);
80+ return result;
81+ }
0 commit comments