aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/standalone/libs/jni/c_utils.h
blob: b767b618f14bbbcedcb2a303a58ad3e298124b83 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#pragma once

#include "native.h"

/**
 * Classes that are accessed alot are cached here, manually.
 */
extern jclass ec_parameter_spec_class;
extern jclass ecgen_parameter_spec_class;
extern jclass secret_key_spec_class;
extern jclass pubkey_class;
extern jclass privkey_class;
extern jclass keypair_class;
extern jclass elliptic_curve_class;
extern jclass fp_field_class;
extern jclass f2m_field_class;
extern jclass point_class;
extern jclass biginteger_class;
extern jclass illegal_state_exception_class;

/**
 * Initialize the classes.
 */
void init_classes(JNIEnv *env, const char* lib_name);

/**
 * Throw a new exception of class with message.
 */
void throw_new(JNIEnv *env, const char *class, const char *message);

/**
 * Throw a new exception of class, with formatted message.
 */
void throw_new_var(JNIEnv *env, const char *class, const char *format, ...);

/**
 * Get the size of the specified key algorithm in bits, for ECDH KDF output size.
 */
jint get_kdf_bits(JNIEnv *env, jstring algorithm);

/**
 * Some useful defines to init the provider.
 */
#define INIT_PROVIDER(env, provider_class) jmethodID provider_put = (*env)->GetMethodID(env, provider_class, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")
#define ADD_PROPERTY(env, self, base_name, base_class, prop_name, prop_class) do {                                                              \
                                                                           jstring ec = (*env)->NewStringUTF(env, base_name prop_name);         \
                                                                           jstring ec_value = (*env)->NewStringUTF(env, base_class prop_class); \
                                                                           (*env)->CallObjectMethod(env, self, provider_put, ec, ec_value);     \
                                                                       } while (0)
#define ADD_KPG(env, self, kpg_name, kpg_class)       ADD_PROPERTY(env, self, "KeyPairGenerator.", "cz.crcs.ectester.standalone.libs.jni.NativeKeyPairGeneratorSpi$", kpg_name, kpg_class)
#define ADD_KA(env, self, ka_name, ka_class)          ADD_PROPERTY(env, self, "KeyAgreement.", "cz.crcs.ectester.standalone.libs.jni.NativeKeyAgreementSpi$", ka_name, ka_class)
#define ADD_SIG(env, self, sig_name, sig_class)       ADD_PROPERTY(env, self, "Signature.", "cz.crcs.ectester.standalone.libs.jni.NativeSignatureSpi$", sig_name, sig_class)