From 212f5bd92e3659f2d72fb71432a70dfd5490ac65 Mon Sep 17 00:00:00 2001 From: getsadzeg Date: Tue, 7 Jun 2016 11:16:59 +0400 Subject: [PATCH 1/5] trying to make generateKey public --- RNCryptorNative.iml | 19 +++ benchmark/benchmark.iml | 121 ++++++++++++++++++ .../java/tgio/benchmark/MainActivity.java | 2 + jncryptor/jncryptor.iml | 116 +++++++++++++++++ rncryptor-native/rncryptor-native.iml | 106 +++++++++++++++ .../java/tgio/rncryptor/RNCryptorNative.java | 1 + .../src/main/jni/rncryptor-native.cpp | 9 ++ .../src/main/jni/rncryptor-native.h | 1 + rncryptor-native/src/main/jni/rncryptor.cpp | 3 +- rncryptor-native/src/main/jni/rncryptor.h | 4 +- 10 files changed, 379 insertions(+), 3 deletions(-) create mode 100644 RNCryptorNative.iml create mode 100644 benchmark/benchmark.iml create mode 100644 jncryptor/jncryptor.iml create mode 100644 rncryptor-native/rncryptor-native.iml diff --git a/RNCryptorNative.iml b/RNCryptorNative.iml new file mode 100644 index 0000000..1d61e86 --- /dev/null +++ b/RNCryptorNative.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/benchmark/benchmark.iml b/benchmark/benchmark.iml new file mode 100644 index 0000000..6325582 --- /dev/null +++ b/benchmark/benchmark.iml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/benchmark/src/main/java/tgio/benchmark/MainActivity.java b/benchmark/src/main/java/tgio/benchmark/MainActivity.java index ab888a7..55de7be 100644 --- a/benchmark/src/main/java/tgio/benchmark/MainActivity.java +++ b/benchmark/src/main/java/tgio/benchmark/MainActivity.java @@ -54,6 +54,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); + RNCryptorNative rn = new RNCryptorNative(); + handler = new Handler(); mChart = (BarChart) findViewById(R.id.chart1); diff --git a/jncryptor/jncryptor.iml b/jncryptor/jncryptor.iml new file mode 100644 index 0000000..918e942 --- /dev/null +++ b/jncryptor/jncryptor.iml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rncryptor-native/rncryptor-native.iml b/rncryptor-native/rncryptor-native.iml new file mode 100644 index 0000000..3687938 --- /dev/null +++ b/rncryptor-native/rncryptor-native.iml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java index 81762bf..e1bf4a5 100644 --- a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java +++ b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java @@ -54,6 +54,7 @@ public class RNCryptorNative { */ public native String decrypt(String encrypted, String password); + public native String generateKey(final String salt, final String password); /** * Decrypts encrypted base64 string and returns via callback diff --git a/rncryptor-native/src/main/jni/rncryptor-native.cpp b/rncryptor-native/src/main/jni/rncryptor-native.cpp index d0e6293..21a0408 100644 --- a/rncryptor-native/src/main/jni/rncryptor-native.cpp +++ b/rncryptor-native/src/main/jni/rncryptor-native.cpp @@ -68,6 +68,15 @@ Java_tgio_rncryptor_RNCryptorNative_getABI(JNIEnv *env, jobject thiz) { #endif return (env)->NewStringUTF(ABI); } +jstring Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_) + { + const char *salt = env->GetStringUTFChars(salt_, 0); + const char *password = env->GetStringUTFChars(password_, 0); + RNCryptor *cryptor = new RNCryptor(); + string value = (char * )cryptor->generateKey(salt, password).data(); + delete cryptor; + return env->NewStringUTF(value.c_str()); +} jbyteArray Java_tgio_rncryptor_RNCryptorNative_encrypt(JNIEnv *env, jobject instance, jstring raw_, jstring password_) { const char *raw = env->GetStringUTFChars(raw_, 0); diff --git a/rncryptor-native/src/main/jni/rncryptor-native.h b/rncryptor-native/src/main/jni/rncryptor-native.h index 14f99f1..b0d0c0f 100644 --- a/rncryptor-native/src/main/jni/rncryptor-native.h +++ b/rncryptor-native/src/main/jni/rncryptor-native.h @@ -26,6 +26,7 @@ extern "C" { JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_getABI(JNIEnv* env, jobject thiz); JNIEXPORT jbyteArray JNICALL Java_tgio_rncryptor_RNCryptorNative_encrypt(JNIEnv *env, jobject instance, jstring raw_, jstring password_); JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_decrypt(JNIEnv *env, jobject instance, jstring encrypted_, jstring password_); + JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_); #ifdef __cplusplus } #endif diff --git a/rncryptor-native/src/main/jni/rncryptor.cpp b/rncryptor-native/src/main/jni/rncryptor.cpp index 5186b0c..ba41464 100755 --- a/rncryptor-native/src/main/jni/rncryptor.cpp +++ b/rncryptor-native/src/main/jni/rncryptor.cpp @@ -130,8 +130,7 @@ string RNCryptor::generateHmac(RNCryptorPayloadComponents components, string pas return hmac; } - -SecByteBlock RNCryptor::generateKey(const string salt, const string password) + SecByteBlock RNCryptor::generateKey(const string salt, const string password) { SecByteBlock key(RNCryptor::pbkdf2_keyLength); diff --git a/rncryptor-native/src/main/jni/rncryptor.h b/rncryptor-native/src/main/jni/rncryptor.h index d3b1a24..2c2bb3b 100755 --- a/rncryptor-native/src/main/jni/rncryptor.h +++ b/rncryptor-native/src/main/jni/rncryptor.h @@ -57,7 +57,7 @@ class RNCryptor { RNCryptorHmacAlgorithm hmac_algorithm; string generateHmac(RNCryptorPayloadComponents components, string password); - SecByteBlock generateKey(const string salt, const string password); + static string base64_encode(string plaintext); static string base64_decode(string encoded); @@ -72,9 +72,11 @@ class RNCryptor { static const int pbkdf2_iterations = 10000; static const short pbkdf2_keyLength = 32; static const short hmac_length = 32; + static SecByteBlock generateKey(const string salt, const string password); RNCryptor(); void configureSettings(RNCryptorSchema schemaVersion); + }; #endif From 4efa597b8c0735a093e0567fdc163e9db5a89875 Mon Sep 17 00:00:00 2001 From: getsadzeg Date: Tue, 7 Jun 2016 12:48:06 +0400 Subject: [PATCH 2/5] clean up --- .gitignore | 3 + RNCryptorNative.iml | 19 --- benchmark/benchmark.iml | 121 ------------------ .../java/tgio/benchmark/MainActivity.java | 2 +- rncryptor-native/rncryptor-native.iml | 106 --------------- .../java/tgio/rncryptor/RNCryptorNative.java | 6 + 6 files changed, 10 insertions(+), 247 deletions(-) delete mode 100644 RNCryptorNative.iml delete mode 100644 benchmark/benchmark.iml delete mode 100644 rncryptor-native/rncryptor-native.iml diff --git a/.gitignore b/.gitignore index af472cb..1fd03d6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ obj/ app/obj/* /secrets +*.iml +benchmark/benchmark.iml +rncryptor-native/rncryptor-native.iml diff --git a/RNCryptorNative.iml b/RNCryptorNative.iml deleted file mode 100644 index 1d61e86..0000000 --- a/RNCryptorNative.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/benchmark/benchmark.iml b/benchmark/benchmark.iml deleted file mode 100644 index 6325582..0000000 --- a/benchmark/benchmark.iml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/benchmark/src/main/java/tgio/benchmark/MainActivity.java b/benchmark/src/main/java/tgio/benchmark/MainActivity.java index 55de7be..5194270 100644 --- a/benchmark/src/main/java/tgio/benchmark/MainActivity.java +++ b/benchmark/src/main/java/tgio/benchmark/MainActivity.java @@ -54,7 +54,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); - RNCryptorNative rn = new RNCryptorNative(); + handler = new Handler(); diff --git a/rncryptor-native/rncryptor-native.iml b/rncryptor-native/rncryptor-native.iml deleted file mode 100644 index 3687938..0000000 --- a/rncryptor-native/rncryptor-native.iml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java index e1bf4a5..7bd094a 100644 --- a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java +++ b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java @@ -54,6 +54,12 @@ public class RNCryptorNative { */ public native String decrypt(String encrypted, String password); + /** + * Generates Key with salt and password. + * @param salt + * @param password + + */ public native String generateKey(final String salt, final String password); /** From 79745d2c279156e542b3dc5366ecdeaac6371191 Mon Sep 17 00:00:00 2001 From: getsadzeg Date: Sat, 25 Jun 2016 20:22:20 +0400 Subject: [PATCH 3/5] update dependencies & make generateKey static --- benchmark/build.gradle | 3 ++- benchmark/src/main/java/tgio/benchmark/MainActivity.java | 1 + build.gradle | 2 +- .../src/main/java/tgio/rncryptor/RNCryptorNative.java | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 2c21b12..4940a88 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -27,7 +27,8 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' - compile 'com.github.tgio:rncryptor-native:0.0.8' + //compile 'com.github.tgio:rncryptor-native:0.0.8' compile project(':jncryptor') + compile project(':rncryptor-native') compile 'com.github.PhilJay:MPAndroidChart:v2.2.4' } diff --git a/benchmark/src/main/java/tgio/benchmark/MainActivity.java b/benchmark/src/main/java/tgio/benchmark/MainActivity.java index 5194270..ec9bbad 100644 --- a/benchmark/src/main/java/tgio/benchmark/MainActivity.java +++ b/benchmark/src/main/java/tgio/benchmark/MainActivity.java @@ -108,6 +108,7 @@ public void run() { }); } + void setupStrings() { RandomString rnstr = new RandomString(200); for (int i = 0; i < INTSTRINGS_COUNT; i++) { diff --git a/build.gradle b/build.gradle index d54de86..fa2afb2 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.1.2' classpath "com.android.tools.build:gradle-experimental:0.7.0" classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' diff --git a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java index 7bd094a..e219fff 100644 --- a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java +++ b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java @@ -60,7 +60,7 @@ public class RNCryptorNative { * @param password */ - public native String generateKey(final String salt, final String password); + public static native String generateKey(final String salt, final String password); /** * Decrypts encrypted base64 string and returns via callback From a5e305ebe4e53c515fbcef81c4a9a11785963e2a Mon Sep 17 00:00:00 2001 From: getsadzeg Date: Tue, 28 Jun 2016 18:17:06 +0400 Subject: [PATCH 4/5] generateKey with no JNI errors --- .../main/java/tgio/benchmark/MainActivity.java | 8 +++++++- .../java/tgio/rncryptor/RNCryptorNative.java | 3 ++- .../src/main/jni/rncryptor-native.cpp | 17 +++++++++++++---- .../src/main/jni/rncryptor-native.h | 2 +- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/benchmark/src/main/java/tgio/benchmark/MainActivity.java b/benchmark/src/main/java/tgio/benchmark/MainActivity.java index ec9bbad..1c99d90 100644 --- a/benchmark/src/main/java/tgio/benchmark/MainActivity.java +++ b/benchmark/src/main/java/tgio/benchmark/MainActivity.java @@ -57,6 +57,12 @@ protected void onCreate(Bundle savedInstanceState) { + char[] arr = new char[1024]; + arr = RNCryptorNative.generateKey("12", password); + String key = String.valueOf(arr); + System.out.println(key); + + handler = new Handler(); mChart = (BarChart) findViewById(R.id.chart1); mChart.setOnChartValueSelectedListener(this); @@ -108,7 +114,7 @@ public void run() { }); } - + void setupStrings() { RandomString rnstr = new RandomString(200); for (int i = 0; i < INTSTRINGS_COUNT; i++) { diff --git a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java index e219fff..e676c82 100644 --- a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java +++ b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java @@ -60,7 +60,8 @@ public class RNCryptorNative { * @param password */ - public static native String generateKey(final String salt, final String password); + public static native char[] generateKey(final String salt, final String password); + /** * Decrypts encrypted base64 string and returns via callback diff --git a/rncryptor-native/src/main/jni/rncryptor-native.cpp b/rncryptor-native/src/main/jni/rncryptor-native.cpp index 21a0408..f730661 100644 --- a/rncryptor-native/src/main/jni/rncryptor-native.cpp +++ b/rncryptor-native/src/main/jni/rncryptor-native.cpp @@ -68,14 +68,23 @@ Java_tgio_rncryptor_RNCryptorNative_getABI(JNIEnv *env, jobject thiz) { #endif return (env)->NewStringUTF(ABI); } -jstring Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_) - { +jcharArray Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_) { const char *salt = env->GetStringUTFChars(salt_, 0); const char *password = env->GetStringUTFChars(password_, 0); RNCryptor *cryptor = new RNCryptor(); - string value = (char * )cryptor->generateKey(salt, password).data(); + string value = (char *) cryptor->generateKey(salt, password).data(); + + delete cryptor; - return env->NewStringUTF(value.c_str()); + env->ReleaseStringUTFChars(salt_, salt); + env->ReleaseStringUTFChars(password_, password); + char array[1024]; + strcpy(array, value.c_str()); + jcharArray charArr = env->NewCharArray(1024); + env->SetCharArrayRegion(charArr, 0, 1024, (jchar *) array); + return charArr; + + } jbyteArray Java_tgio_rncryptor_RNCryptorNative_encrypt(JNIEnv *env, jobject instance, jstring raw_, jstring password_) { diff --git a/rncryptor-native/src/main/jni/rncryptor-native.h b/rncryptor-native/src/main/jni/rncryptor-native.h index b0d0c0f..9628152 100644 --- a/rncryptor-native/src/main/jni/rncryptor-native.h +++ b/rncryptor-native/src/main/jni/rncryptor-native.h @@ -26,7 +26,7 @@ extern "C" { JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_getABI(JNIEnv* env, jobject thiz); JNIEXPORT jbyteArray JNICALL Java_tgio_rncryptor_RNCryptorNative_encrypt(JNIEnv *env, jobject instance, jstring raw_, jstring password_); JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_decrypt(JNIEnv *env, jobject instance, jstring encrypted_, jstring password_); - JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_); + JNIEXPORT jcharArray JNICALL Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_); #ifdef __cplusplus } #endif From f0662939347309101da4c1b614ee070a6be3027c Mon Sep 17 00:00:00 2001 From: getsadzeg Date: Tue, 28 Jun 2016 21:40:48 +0400 Subject: [PATCH 5/5] returning bytes instead of char array --- .../src/main/java/tgio/benchmark/MainActivity.java | 8 +++++--- .../src/main/java/tgio/rncryptor/RNCryptorNative.java | 2 +- rncryptor-native/src/main/jni/rncryptor-native.cpp | 11 +++++++---- rncryptor-native/src/main/jni/rncryptor-native.h | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/benchmark/src/main/java/tgio/benchmark/MainActivity.java b/benchmark/src/main/java/tgio/benchmark/MainActivity.java index 1c99d90..b601571 100644 --- a/benchmark/src/main/java/tgio/benchmark/MainActivity.java +++ b/benchmark/src/main/java/tgio/benchmark/MainActivity.java @@ -57,11 +57,13 @@ protected void onCreate(Bundle savedInstanceState) { - char[] arr = new char[1024]; + /*char[] arr = new char[1024]; arr = RNCryptorNative.generateKey("12", password); String key = String.valueOf(arr); - System.out.println(key); - + System.out.println(key);*/ + byte[] arr = new byte[1024]; + arr = RNCryptorNative.generateKey("1298", password); + handler = new Handler(); mChart = (BarChart) findViewById(R.id.chart1); diff --git a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java index e676c82..c646c5a 100644 --- a/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java +++ b/rncryptor-native/src/main/java/tgio/rncryptor/RNCryptorNative.java @@ -60,7 +60,7 @@ public class RNCryptorNative { * @param password */ - public static native char[] generateKey(final String salt, final String password); + public static native byte[] generateKey(final String salt, final String password); /** diff --git a/rncryptor-native/src/main/jni/rncryptor-native.cpp b/rncryptor-native/src/main/jni/rncryptor-native.cpp index f730661..ba78495 100644 --- a/rncryptor-native/src/main/jni/rncryptor-native.cpp +++ b/rncryptor-native/src/main/jni/rncryptor-native.cpp @@ -68,21 +68,24 @@ Java_tgio_rncryptor_RNCryptorNative_getABI(JNIEnv *env, jobject thiz) { #endif return (env)->NewStringUTF(ABI); } -jcharArray Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_) { +jbyteArray Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_) { const char *salt = env->GetStringUTFChars(salt_, 0); const char *password = env->GetStringUTFChars(password_, 0); RNCryptor *cryptor = new RNCryptor(); string value = (char *) cryptor->generateKey(salt, password).data(); - + const char *buf = value.c_str(); delete cryptor; env->ReleaseStringUTFChars(salt_, salt); env->ReleaseStringUTFChars(password_, password); - char array[1024]; + jbyteArray array = env->NewByteArray (1024); + env->SetByteArrayRegion (array, 0, 1024, (jbyte *)(buf)); + return array; + /*char array[1024]; strcpy(array, value.c_str()); jcharArray charArr = env->NewCharArray(1024); env->SetCharArrayRegion(charArr, 0, 1024, (jchar *) array); - return charArr; + return charArr;*/ } diff --git a/rncryptor-native/src/main/jni/rncryptor-native.h b/rncryptor-native/src/main/jni/rncryptor-native.h index 9628152..27eb474 100644 --- a/rncryptor-native/src/main/jni/rncryptor-native.h +++ b/rncryptor-native/src/main/jni/rncryptor-native.h @@ -26,7 +26,7 @@ extern "C" { JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_getABI(JNIEnv* env, jobject thiz); JNIEXPORT jbyteArray JNICALL Java_tgio_rncryptor_RNCryptorNative_encrypt(JNIEnv *env, jobject instance, jstring raw_, jstring password_); JNIEXPORT jstring JNICALL Java_tgio_rncryptor_RNCryptorNative_decrypt(JNIEnv *env, jobject instance, jstring encrypted_, jstring password_); - JNIEXPORT jcharArray JNICALL Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_); + JNIEXPORT jbyteArray JNICALL Java_tgio_rncryptor_RNCryptorNative_generateKey(JNIEnv *env, jobject instance, const jstring salt_, const jstring password_); #ifdef __cplusplus } #endif