aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
diff options
context:
space:
mode:
authorJ08nY2017-12-09 19:12:06 +0100
committerJ08nY2017-12-09 19:12:06 +0100
commit26ced2ccee2c83414f7c81dfad583400be0e91af (patch)
treef6859ecef2d1a02495e44382ffcd95f8cdb2d030 /src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
parent95e1d7db217bd93d811aa7c363d87a91e67bd22e (diff)
downloadECTester-26ced2ccee2c83414f7c81dfad583400be0e91af.tar.gz
ECTester-26ced2ccee2c83414f7c81dfad583400be0e91af.tar.zst
ECTester-26ced2ccee2c83414f7c81dfad583400be0e91af.zip
Add Botan library implementation of keygen and ECDH.
Diffstat (limited to 'src/cz/crcs/ectester/standalone/libs/jni/c_utils.c')
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/c_utils.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c b/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
new file mode 100644
index 0000000..230f516
--- /dev/null
+++ b/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
@@ -0,0 +1,61 @@
+#include "c_utils.h"
+#include <string.h>
+
+jclass ec_parameter_spec_class;
+jclass ecgen_parameter_spec_class;
+jclass pubkey_class;
+jclass privkey_class;
+jclass keypair_class;
+jclass elliptic_curve_class;
+jclass fp_field_class;
+jclass f2m_field_class;
+jclass point_class;
+jclass biginteger_class;
+jclass illegal_state_exception_class;
+
+void init_classes(JNIEnv *env, const char* lib_name) {
+ jclass local_ec_parameter_spec_class = (*env)->FindClass(env, "java/security/spec/ECParameterSpec");
+ ec_parameter_spec_class = (*env)->NewGlobalRef(env, local_ec_parameter_spec_class);
+
+ jclass local_ecgen_parameter_spec_class = (*env)->FindClass(env, "java/security/spec/ECGenParameterSpec");
+ ecgen_parameter_spec_class = (*env)->NewGlobalRef(env, local_ecgen_parameter_spec_class);
+
+ const char *pubkey_base = "cz/crcs/ectester/standalone/libs/jni/NativeECPublicKey$";
+ char pubkey_class_name[strlen(pubkey_base) + strlen(lib_name) + 1];
+ pubkey_class_name[0] = 0;
+ strcat(pubkey_class_name, pubkey_base);
+ strcat(pubkey_class_name, lib_name);
+
+ jclass local_pubkey_class = (*env)->FindClass(env, pubkey_class_name);
+ pubkey_class = (*env)->NewGlobalRef(env, local_pubkey_class);
+
+ const char *privkey_base = "cz/crcs/ectester/standalone/libs/jni/NativeECPrivateKey$";
+ char privkey_class_name[strlen(privkey_base) + strlen(lib_name) + 1];
+ privkey_class_name[0] = 0;
+ strcat(privkey_class_name, privkey_base);
+ strcat(privkey_class_name, lib_name);
+
+ jclass local_privkey_class = (*env)->FindClass(env, privkey_class_name);
+ privkey_class = (*env)->NewGlobalRef(env, local_privkey_class);
+
+ jclass local_keypair_class = (*env)->FindClass(env, "java/security/KeyPair");
+ keypair_class = (*env)->NewGlobalRef(env, local_keypair_class);
+
+ jclass local_elliptic_curve_class = (*env)->FindClass(env, "java/security/spec/EllipticCurve");
+ elliptic_curve_class = (*env)->NewGlobalRef(env, local_elliptic_curve_class);
+
+ jclass local_fp_field_class = (*env)->FindClass(env, "java/security/spec/ECFieldFp");
+ fp_field_class = (*env)->NewGlobalRef(env, local_fp_field_class);
+
+ jclass local_f2m_field_class = (*env)->FindClass(env, "java/security/spec/ECFieldF2m");
+ f2m_field_class = (*env)->NewGlobalRef(env, local_f2m_field_class);
+
+ jclass local_biginteger_class = (*env)->FindClass(env, "java/math/BigInteger");
+ biginteger_class = (*env)->NewGlobalRef(env, local_biginteger_class);
+
+ jclass local_point_class = (*env)->FindClass(env, "java/security/spec/ECPoint");
+ point_class = (*env)->NewGlobalRef(env, local_point_class);
+
+ jclass local_illegal_state_exception_class = (*env)->FindClass(env, "java/lang/IllegalStateException");
+ illegal_state_exception_class = (*env)->NewGlobalRef(env, local_illegal_state_exception_class);
+} \ No newline at end of file