aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2018-10-21 14:26:26 +0200
committerJ08nY2018-10-21 14:26:26 +0200
commit0f144016e44b7e2071a6934d3a1e785c97ae8729 (patch)
tree51406ca8ab95144ec77540943bc55f9f44c38233
parentb40e99c4d175e5085fa029b98709a06992873de8 (diff)
downloadECTester-0f144016e44b7e2071a6934d3a1e785c97ae8729.tar.gz
ECTester-0f144016e44b7e2071a6934d3a1e785c97ae8729.tar.zst
ECTester-0f144016e44b7e2071a6934d3a1e785c97ae8729.zip
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/boringssl.c25
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/botan.cpp10
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/c_utils.c8
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp10
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c10
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/openssl.c28
-rw-r--r--src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c16
7 files changed, 54 insertions, 53 deletions
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c b/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c
index 965e396..cb1ea77 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c
+++ b/src/cz/crcs/ectester/standalone/libs/jni/boringssl.c
@@ -87,7 +87,7 @@ static jobject bignum_to_biginteger(JNIEnv *env, const BIGNUM *bn) {
int size = BN_num_bytes(bn);
jbyteArray bytes = (*env)->NewByteArray(env, size);
jbyte *data = (*env)->GetByteArrayElements(env, bytes, NULL);
- BN_bn2bin(bn, data);
+ BN_bn2bin(bn, (unsigned char *) data);
(*env)->ReleaseByteArrayElements(env, bytes, data, 0);
jobject result = (*env)->NewObject(env, biginteger_class, biginteger_init, 1, bytes);
return result;
@@ -99,7 +99,7 @@ static BIGNUM *biginteger_to_bignum(JNIEnv *env, jobject bigint) {
jbyteArray byte_array = (jbyteArray) (*env)->CallObjectMethod(env, bigint, to_byte_array);
jsize byte_length = (*env)->GetArrayLength(env, byte_array);
jbyte *byte_data = (*env)->GetByteArrayElements(env, byte_array, NULL);
- BIGNUM *result = BN_bin2bn(byte_data, byte_length, NULL);
+ BIGNUM *result = BN_bin2bn((unsigned char *) byte_data, byte_length, NULL);
(*env)->ReleaseByteArrayElements(env, byte_array, byte_data, JNI_ABORT);
return result;
}
@@ -115,10 +115,6 @@ static EC_GROUP *create_curve(JNIEnv *env, jobject params) {
return NULL;
}
- jmethodID get_bits = (*env)->GetMethodID(env, fp_field_class, "getFieldSize", "()I");
- jint bits = (*env)->CallIntMethod(env, field, get_bits);
- jint bytes = (bits + 7) / 8;
-
jmethodID get_a = (*env)->GetMethodID(env, elliptic_curve_class, "getA", "()Ljava/math/BigInteger;");
jobject a = (*env)->CallObjectMethod(env, elliptic_curve, get_a);
BIGNUM *a_bn = biginteger_to_bignum(env, a);
@@ -218,7 +214,6 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPa
}
static jobject create_ec_param_spec(JNIEnv *env, const EC_GROUP *curve) {
- int field_type = EC_METHOD_get_field_type(EC_GROUP_method_of(curve));
BIGNUM *a;
BIGNUM *b;
@@ -292,13 +287,13 @@ static jobject generate_from_curve(JNIEnv *env, const EC_GROUP *curve) {
jbyteArray priv_bytes = (*env)->NewByteArray(env, key_bytes);
jbyte *key_priv = (*env)->GetByteArrayElements(env, priv_bytes, NULL);
- BN_bn2bin_padded(key_priv, key_bytes, EC_KEY_get0_private_key(key));
+ BN_bn2bin_padded((unsigned char *) key_priv, key_bytes, EC_KEY_get0_private_key(key));
(*env)->ReleaseByteArrayElements(env, priv_bytes, key_priv, 0);
unsigned long key_len = 2*key_bytes + 1;
jbyteArray pub_bytes = (*env)->NewByteArray(env, key_len);
jbyte *key_pub = (*env)->GetByteArrayElements(env, pub_bytes, NULL);
- EC_POINT_point2oct(curve, EC_KEY_get0_public_key(key), POINT_CONVERSION_UNCOMPRESSED, key_pub, key_len, NULL);
+ EC_POINT_point2oct(curve, EC_KEY_get0_public_key(key), POINT_CONVERSION_UNCOMPRESSED, (unsigned char *) key_pub, key_len, NULL);
(*env)->ReleaseByteArrayElements(env, pub_bytes, key_pub, 0);
EC_KEY_free(key);
@@ -307,7 +302,7 @@ static jobject generate_from_curve(JNIEnv *env, const EC_GROUP *curve) {
jobject ec_pub_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
jmethodID ec_pub_init = (*env)->GetMethodID(env, pubkey_class, "<init>", "([BLjava/security/spec/ECParameterSpec;)V");
- jobject pubkey = (*env)->NewObject(env, pubkey_class, ec_pub_init, pub_bytes, ec_param_spec);
+ jobject pubkey = (*env)->NewObject(env, pubkey_class, ec_pub_init, pub_bytes, ec_pub_param_spec);
jobject ec_priv_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
jmethodID ec_priv_init = (*env)->GetMethodID(env, privkey_class, "<init>", "([BLjava/security/spec/ECParameterSpec;)V");
@@ -354,7 +349,7 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai
size_t ncurves = EC_get_builtin_curves(NULL, 0);
EC_builtin_curve curves[ncurves];
EC_get_builtin_curves(curves, ncurves);
- EC_GROUP *curve;
+ EC_GROUP *curve = NULL;
for (size_t i = 0; i < ncurves; ++i) {
if (strcasecmp(utf_name, OBJ_nid2sn(curves[i].nid)) == 0) {
curve = EC_GROUP_new_by_curve_name(curves[i].nid);
@@ -381,7 +376,7 @@ EC_KEY *barray_to_pubkey(JNIEnv *env, const EC_GROUP *curve, jbyteArray pub) {
jsize pub_len = (*env)->GetArrayLength(env, pub);
jbyte *pub_data = (*env)->GetByteArrayElements(env, pub, NULL);
EC_POINT *pub_point = EC_POINT_new(curve);
- EC_POINT_oct2point(curve, pub_point, pub_data, pub_len, NULL);
+ EC_POINT_oct2point(curve, pub_point, (unsigned char *) pub_data, pub_len, NULL);
(*env)->ReleaseByteArrayElements(env, pub, pub_data, JNI_ABORT);
EC_KEY_set_public_key(result, pub_point);
EC_POINT_free(pub_point);
@@ -393,7 +388,7 @@ EC_KEY *barray_to_privkey(JNIEnv *env, const EC_GROUP *curve, jbyteArray priv)
EC_KEY_set_group(result, curve);
jsize priv_len = (*env)->GetArrayLength(env, priv);
jbyte *priv_data = (*env)->GetByteArrayElements(env, priv, NULL);
- BIGNUM *s = BN_bin2bn(priv_data, priv_len, NULL);
+ BIGNUM *s = BN_bin2bn((unsigned char *) priv_data, priv_len, NULL);
(*env)->ReleaseByteArrayElements(env, priv, priv_data, JNI_ABORT);
EC_KEY_set_private_key(result, s);
BN_free(s);
@@ -448,7 +443,7 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig
jsize data_size = (*env)->GetArrayLength(env, data);
jbyte *data_data = (*env)->GetByteArrayElements(env, data, NULL);
// TODO: Do more Signatures here, maybe use the EVP interface to get to the hashes easier and not hash manually?
- ECDSA_SIG *signature = ECDSA_do_sign(data_data, data_size, priv);
+ ECDSA_SIG *signature = ECDSA_do_sign((unsigned char *) data_data, data_size, priv);
(*env)->ReleaseByteArrayElements(env, data, data_data, JNI_ABORT);
if (!signature) {
throw_new(env, "java/security/GeneralSecurityException", "Error signing, ECDSA_do_sign.");
@@ -486,7 +481,7 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna
jsize data_size = (*env)->GetArrayLength(env, data);
jbyte *data_data = (*env)->GetByteArrayElements(env, data, NULL);
- int result = ECDSA_do_verify(data_data, data_size, sig_obj, pub);
+ int result = ECDSA_do_verify((unsigned char *) data_data, data_size, sig_obj, pub);
if (result < 0) {
throw_new(env, "java/security/GeneralSecurityException", "Error verifying, ECDSA_do_verify.");
EC_KEY_free(pub); EC_GROUP_free(curve); ECDSA_SIG_free(sig_obj);
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp b/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp
index 207532d..5de9dd3 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp
+++ b/src/cz/crcs/ectester/standalone/libs/jni/botan.cpp
@@ -145,7 +145,7 @@ static Botan::BigInt bigint_from_biginteger(JNIEnv *env, jobject biginteger) {
jbyteArray byte_array = (jbyteArray) env->CallObjectMethod(biginteger, to_byte_array);
jsize byte_length = env->GetArrayLength(byte_array);
jbyte *byte_data = env->GetByteArrayElements(byte_array, NULL);
- Botan::BigInt result((unsigned uint8_t*) byte_data, byte_length);
+ Botan::BigInt result((unsigned char *) byte_data, byte_length);
env->ReleaseByteArrayElements(byte_array, byte_data, JNI_ABORT);
return result;
}
@@ -157,10 +157,6 @@ static Botan::EC_Group group_from_params(JNIEnv *env, jobject params) {
jmethodID get_field = env->GetMethodID(elliptic_curve_class, "getField", "()Ljava/security/spec/ECField;");
jobject field = env->CallObjectMethod(elliptic_curve, get_field);
-
- jmethodID get_bits = env->GetMethodID(fp_field_class, "getFieldSize", "()I");
- jint bits = env->CallIntMethod(field, get_bits);
- jint bytes = (bits + 7) / 8;
jmethodID get_a = env->GetMethodID(elliptic_curve_class, "getA", "()Ljava/math/BigInteger;");
jobject a = env->CallObjectMethod(elliptic_curve, get_a);
@@ -299,7 +295,7 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai
for (auto it = curves.begin(); it != curves.end(); ++it) {
Botan::EC_Group curve_group = Botan::EC_Group(*it);
size_t curve_size = curve_group.get_p_bits();
- if (curve_size == keysize) {
+ if (curve_size == (size_t) keysize) {
//generate on this group. Even thou no default groups are present...
return generate_from_group(env, self, curve_group);
}
@@ -349,7 +345,7 @@ jbyteArray generate_secret(JNIEnv *env, jobject self, jbyteArray pubkey, jbyteAr
jsize privkey_length = env->GetArrayLength(privkey);
jbyte *privkey_data = env->GetByteArrayElements(privkey, NULL);
- Botan::BigInt privkey_scalar((unsigned uint8_t*) privkey_data, privkey_length);
+ Botan::BigInt privkey_scalar((unsigned char *) privkey_data, privkey_length);
env->ReleaseByteArrayElements(privkey, privkey_data, JNI_ABORT);
Botan::AutoSeeded_RNG rng;
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c b/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
index c36d3c9..81d1fb8 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
+++ b/src/cz/crcs/ectester/standalone/libs/jni/c_utils.c
@@ -198,10 +198,16 @@ bool asn1_der_decode(JNIEnv *env, jbyteArray sig, jbyte **r_data, size_t *r_len,
memcpy(s_out, data + i, s_length);
i += s_length;
+ (*env)->ReleaseByteArrayElements(env, sig, data, JNI_ABORT);
+ if (i != sig_len) {
+ free(r_out);
+ free(s_out);
+ return false;
+ }
+
*r_len = r_length;
*r_data = r_out;
*s_len = s_length;
*s_data = s_out;
- (*env)->ReleaseByteArrayElements(env, sig, data, JNI_ABORT);
return true;
} \ No newline at end of file
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp b/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp
index 32121c5..1e212de 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp
+++ b/src/cz/crcs/ectester/standalone/libs/jni/cryptopp.cpp
@@ -89,7 +89,7 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_CryptoppLib_crea
std::stringstream ss;
ss << lib_name << " ";
ss << info_str[0];
- for (int i = 1; i < info_str.size(); ++i) {
+ for (size_t i = 1; i < info_str.size(); ++i) {
ss << "." << info_str[i];
}
@@ -470,6 +470,8 @@ template <> jobject params_from_group<EC2N>(JNIEnv *env, DL_GroupParameters_EC<E
//pentanomial
ks = env->NewIntArray(3);
to_find = 3;
+ } else {
+ return NULL;
}
jint *ks_data = env->GetIntArrayElements(ks, NULL);
for (int i = m - 1; i > 0 && found < to_find; --i) {
@@ -594,6 +596,10 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKey
return NULL;
}
}
+ if (!success) {
+ throw_new(env, "java/security/GeneralSecurityException", "Agreement was unsuccessful.");
+ return NULL;
+ }
jbyteArray result = env->NewByteArray(secret->size());
jbyte *result_data = env->GetByteArrayElements(result, NULL);
@@ -648,7 +654,7 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig
Integer private_key_x((byte *) privkey_data, (size_t) privkey_length);
env->ReleaseByteArrayElements(privkey, privkey_data, JNI_ABORT);
- jbyteArray result;
+ jbyteArray result = NULL;
std::unique_ptr<DL_GroupParameters_EC<ECP>> ecp_group = fp_group_from_params(env, params);
if (ecp_group == nullptr) {
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c b/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c
index 0ba94c6..1186d30 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c
+++ b/src/cz/crcs/ectester/standalone/libs/jni/gcrypt.c
@@ -85,6 +85,7 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPa
return JNI_FALSE;
}
+/*
static void print_sexp(gcry_sexp_t sexp) {
size_t len = gcry_sexp_sprint(sexp, GCRYSEXP_FMT_ADVANCED, NULL, 0);
char string[len];
@@ -99,6 +100,7 @@ static void print_chrray(unsigned char *arr, size_t len) {
}
printf("\n");
}
+*/
JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024Gcrypt_paramsSupported(JNIEnv *env, jobject this, jobject params) {
if (params == NULL) {
@@ -131,7 +133,7 @@ static gcry_mpi_t bytearray_to_mpi(JNIEnv *env, jbyteArray array) {
gcry_mpi_t result;
size_t length = (*env)->GetArrayLength(env, array);
- char data[length + 1];
+ jbyte data[length + 1];
data[0] = 0;
(*env)->GetByteArrayRegion(env, array, 0, length, data + 1);
gcry_mpi_scan(&result, GCRYMPI_FMT_USG, data, length + 1, NULL);
@@ -286,7 +288,7 @@ static jobject generate_from_sexp(JNIEnv *env, gcry_sexp_t gen_sexp) {
gcry_mpi_print(GCRYMPI_FMT_USG, NULL, 0, &priv_len, d);
jbyteArray priv_bytes = (*env)->NewByteArray(env, priv_len);
jbyte *key_priv = (*env)->GetByteArrayElements(env, priv_bytes, NULL);
- gcry_mpi_print(GCRYMPI_FMT_USG, key_priv, priv_len, NULL, d);
+ gcry_mpi_print(GCRYMPI_FMT_USG, (unsigned char *) key_priv, priv_len, NULL, d);
(*env)->ReleaseByteArrayElements(env, priv_bytes, key_priv, 0);
jobject ec_pub_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
@@ -339,7 +341,6 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai
}
static gcry_sexp_t create_key(JNIEnv *env, jobject ec_param_spec, const char *key_fmt, gcry_mpi_t q, gcry_mpi_t d) {
- gcry_sexp_t inner;
gcry_mpi_t p, a, b, g, n, h;
jmethodID get_curve = (*env)->GetMethodID(env, ec_parameter_spec_class, "getCurve", "()Ljava/security/spec/EllipticCurve;");
@@ -397,7 +398,8 @@ static gcry_sexp_t create_key(JNIEnv *env, jobject ec_param_spec, const char *ke
jmethodID get_h = (*env)->GetMethodID(env, ec_parameter_spec_class, "getCofactor", "()I");
jint jh = (*env)->CallIntMethod(env, ec_param_spec, get_h);
h = gcry_mpi_set_ui(NULL, jh);
-
+
+ gcry_sexp_t inner = NULL;
if (q && d) {
gcry_sexp_build(&inner, NULL, "(ecc (flags param) (p %M) (a %M) (b %M) (g %M) (n %M) (h %M) (q %M) (d %M))", p, a, b, g, n, h, q, d, NULL);
} else if (q && !d) {
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/openssl.c b/src/cz/crcs/ectester/standalone/libs/jni/openssl.c
index 4ea5f6c..639503a 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/openssl.c
+++ b/src/cz/crcs/ectester/standalone/libs/jni/openssl.c
@@ -87,7 +87,7 @@ static jobject bignum_to_biginteger(JNIEnv *env, const BIGNUM *bn) {
int size = BN_num_bytes(bn);
jbyteArray bytes = (*env)->NewByteArray(env, size);
jbyte *data = (*env)->GetByteArrayElements(env, bytes, NULL);
- BN_bn2bin(bn, data);
+ BN_bn2bin(bn, (unsigned char *) data);
(*env)->ReleaseByteArrayElements(env, bytes, data, 0);
jobject result = (*env)->NewObject(env, biginteger_class, biginteger_init, 1, bytes);
return result;
@@ -99,7 +99,7 @@ static BIGNUM *biginteger_to_bignum(JNIEnv *env, jobject bigint) {
jbyteArray byte_array = (jbyteArray) (*env)->CallObjectMethod(env, bigint, to_byte_array);
jsize byte_length = (*env)->GetArrayLength(env, byte_array);
jbyte *byte_data = (*env)->GetByteArrayElements(env, byte_array, NULL);
- BIGNUM *result = BN_bin2bn(byte_data, byte_length, NULL);
+ BIGNUM *result = BN_bin2bn((unsigned char *) byte_data, byte_length, NULL);
(*env)->ReleaseByteArrayElements(env, byte_array, byte_data, JNI_ABORT);
return result;
}
@@ -111,10 +111,6 @@ static EC_GROUP *create_curve(JNIEnv *env, jobject params) {
jmethodID get_field = (*env)->GetMethodID(env, elliptic_curve_class, "getField", "()Ljava/security/spec/ECField;");
jobject field = (*env)->CallObjectMethod(env, elliptic_curve, get_field);
- jmethodID get_bits = (*env)->GetMethodID(env, fp_field_class, "getFieldSize", "()I");
- jint bits = (*env)->CallIntMethod(env, field, get_bits);
- jint bytes = (bits + 7) / 8;
-
jmethodID get_a = (*env)->GetMethodID(env, elliptic_curve_class, "getA", "()Ljava/math/BigInteger;");
jobject a = (*env)->CallObjectMethod(env, elliptic_curve, get_a);
BIGNUM *a_bn = biginteger_to_bignum(env, a);
@@ -285,7 +281,7 @@ static jobject create_ec_param_spec(JNIEnv *env, const EC_GROUP *curve) {
if (basis_type == NID_X9_62_tpBasis) {
ks = (*env)->NewIntArray(env, 1);
ks_data = (*env)->GetIntArrayElements(env, ks, NULL);
- if (!EC_GROUP_get_trinomial_basis(curve, &ks_data[0])) {
+ if (!EC_GROUP_get_trinomial_basis(curve, (unsigned int *) &ks_data[0])) {
throw_new(env, "java/security/InvalidAlgorithmParameterException", "Error creating ECParameterSpec, EC_GROUP_get_trinomial_basis.");
BN_free(a); BN_free(b);
(*env)->ReleaseIntArrayElements(env, ks, ks_data, JNI_ABORT);
@@ -294,7 +290,7 @@ static jobject create_ec_param_spec(JNIEnv *env, const EC_GROUP *curve) {
} else if (basis_type == NID_X9_62_ppBasis) {
ks = (*env)->NewIntArray(env, 3);
ks_data = (*env)->GetIntArrayElements(env, ks, NULL);
- if (!EC_GROUP_get_pentanomial_basis(curve, &ks_data[0], &ks_data[1], &ks_data[2])) {
+ if (!EC_GROUP_get_pentanomial_basis(curve, (unsigned int *) &ks_data[0], (unsigned int *) &ks_data[1], (unsigned int *) &ks_data[2])) {
throw_new(env, "java/security/InvalidAlgorithmParameterException", "Error creating ECParameterSpec, EC_GROUP_get_pentanomial_basis.");
BN_free(a); BN_free(b);
(*env)->ReleaseIntArrayElements(env, ks, ks_data, JNI_ABORT);
@@ -360,13 +356,13 @@ static jobject generate_from_curve(JNIEnv *env, const EC_GROUP *curve) {
jbyteArray priv_bytes = (*env)->NewByteArray(env, key_bytes);
jbyte *key_priv = (*env)->GetByteArrayElements(env, priv_bytes, NULL);
- BN_bn2binpad(EC_KEY_get0_private_key(key), key_priv, key_bytes);
+ BN_bn2binpad(EC_KEY_get0_private_key(key), (unsigned char *) key_priv, key_bytes);
(*env)->ReleaseByteArrayElements(env, priv_bytes, key_priv, 0);
unsigned long key_len = 2*key_bytes + 1;
jbyteArray pub_bytes = (*env)->NewByteArray(env, key_len);
jbyte *key_pub = (*env)->GetByteArrayElements(env, pub_bytes, NULL);
- EC_POINT_point2oct(curve, EC_KEY_get0_public_key(key), POINT_CONVERSION_UNCOMPRESSED, key_pub, key_len, NULL);
+ EC_POINT_point2oct(curve, EC_KEY_get0_public_key(key), POINT_CONVERSION_UNCOMPRESSED, (unsigned char *) key_pub, key_len, NULL);
(*env)->ReleaseByteArrayElements(env, pub_bytes, key_pub, 0);
EC_KEY_free(key);
@@ -375,7 +371,7 @@ static jobject generate_from_curve(JNIEnv *env, const EC_GROUP *curve) {
jobject ec_pub_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
jmethodID ec_pub_init = (*env)->GetMethodID(env, pubkey_class, "<init>", "([BLjava/security/spec/ECParameterSpec;)V");
- jobject pubkey = (*env)->NewObject(env, pubkey_class, ec_pub_init, pub_bytes, ec_param_spec);
+ jobject pubkey = (*env)->NewObject(env, pubkey_class, ec_pub_init, pub_bytes, ec_pub_param_spec);
jobject ec_priv_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
jmethodID ec_priv_init = (*env)->GetMethodID(env, privkey_class, "<init>", "([BLjava/security/spec/ECParameterSpec;)V");
@@ -422,7 +418,7 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai
size_t ncurves = EC_get_builtin_curves(NULL, 0);
EC_builtin_curve curves[ncurves];
EC_get_builtin_curves(curves, ncurves);
- EC_GROUP *curve;
+ EC_GROUP *curve = NULL;
for (size_t i = 0; i < ncurves; ++i) {
if (strcasecmp(utf_name, OBJ_nid2sn(curves[i].nid)) == 0) {
curve = EC_GROUP_new_by_curve_name(curves[i].nid);
@@ -449,7 +445,7 @@ EC_KEY *barray_to_pubkey(JNIEnv *env, const EC_GROUP *curve, jbyteArray pub) {
jsize pub_len = (*env)->GetArrayLength(env, pub);
jbyte *pub_data = (*env)->GetByteArrayElements(env, pub, NULL);
EC_POINT *pub_point = EC_POINT_new(curve);
- EC_POINT_oct2point(curve, pub_point, pub_data, pub_len, NULL);
+ EC_POINT_oct2point(curve, pub_point, (unsigned char *) pub_data, pub_len, NULL);
(*env)->ReleaseByteArrayElements(env, pub, pub_data, JNI_ABORT);
EC_KEY_set_public_key(result, pub_point);
EC_POINT_free(pub_point);
@@ -461,7 +457,7 @@ EC_KEY *barray_to_privkey(JNIEnv *env, const EC_GROUP *curve, jbyteArray priv)
EC_KEY_set_group(result, curve);
jsize priv_len = (*env)->GetArrayLength(env, priv);
jbyte *priv_data = (*env)->GetByteArrayElements(env, priv, NULL);
- BIGNUM *s = BN_bin2bn(priv_data, priv_len, NULL);
+ BIGNUM *s = BN_bin2bn((unsigned char *) priv_data, priv_len, NULL);
(*env)->ReleaseByteArrayElements(env, priv, priv_data, JNI_ABORT);
EC_KEY_set_private_key(result, s);
BN_free(s);
@@ -516,7 +512,7 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig
jsize data_size = (*env)->GetArrayLength(env, data);
jbyte *data_data = (*env)->GetByteArrayElements(env, data, NULL);
// TODO: Do more Signatures here, maybe use the EVP interface to get to the hashes easier and not hash manually?
- ECDSA_SIG *signature = ECDSA_do_sign(data_data, data_size, priv);
+ ECDSA_SIG *signature = ECDSA_do_sign((unsigned char *) data_data, data_size, priv);
(*env)->ReleaseByteArrayElements(env, data, data_data, JNI_ABORT);
if (!signature) {
throw_new(env, "java/security/GeneralSecurityException", "Error signing, ECDSA_do_sign.");
@@ -554,7 +550,7 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna
jsize data_size = (*env)->GetArrayLength(env, data);
jbyte *data_data = (*env)->GetByteArrayElements(env, data, NULL);
- int result = ECDSA_do_verify(data_data, data_size, sig_obj, pub);
+ int result = ECDSA_do_verify((unsigned char *) data_data, data_size, sig_obj, pub);
if (result < 0) {
throw_new(env, "java/security/GeneralSecurityException", "Error verifying, ECDSA_do_verify.");
EC_KEY_free(pub); EC_GROUP_free(curve); ECDSA_SIG_free(sig_obj);
diff --git a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c
index fdf5663..49e997a 100644
--- a/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c
+++ b/src/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c
@@ -251,18 +251,18 @@ static jobject generate_from_curve(JNIEnv *env, const ltc_ecc_set_type *curve) {
unsigned long key_len = 2*curve->size + 1;
jbyteArray pub_bytes = (*env)->NewByteArray(env, key_len);
jbyte *key_pub = (*env)->GetByteArrayElements(env, pub_bytes, NULL);
- ecc_ansi_x963_export(&key, key_pub, &key_len);
+ ecc_ansi_x963_export(&key, (unsigned char *) key_pub, &key_len);
(*env)->ReleaseByteArrayElements(env, pub_bytes, key_pub, 0);
jobject ec_param_spec = create_ec_param_spec(env, curve);
jobject ec_pub_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
jmethodID ec_pub_init = (*env)->GetMethodID(env, pubkey_class, "<init>", "([BLjava/security/spec/ECParameterSpec;)V");
- jobject pubkey = (*env)->NewObject(env, pubkey_class, ec_pub_init, pub_bytes, ec_param_spec);
+ jobject pubkey = (*env)->NewObject(env, pubkey_class, ec_pub_init, pub_bytes, ec_pub_param_spec);
jbyteArray priv_bytes = (*env)->NewByteArray(env, curve->size);
jbyte *key_priv = (*env)->GetByteArrayElements(env, priv_bytes, NULL);
- ltc_mp.unsigned_write(key.k, key_priv);
+ ltc_mp.unsigned_write(key.k, (unsigned char *) key_priv);
(*env)->ReleaseByteArrayElements(env, priv_bytes, key_priv, 0);
jobject ec_priv_param_spec = (*env)->NewLocalRef(env, ec_param_spec);
@@ -334,7 +334,7 @@ static jboolean privkey_from_bytes(JNIEnv *env, jbyteArray privkey, const ltc_ec
out->idx = -1;
out->dp = curve;
ltc_mp.init(&out->k);
- ltc_mp.unsigned_read(out->k, priv_data, (unsigned long) curve->size);
+ ltc_mp.unsigned_read(out->k, (unsigned char *) priv_data, (unsigned long) curve->size);
(*env)->ReleaseByteArrayElements(env, privkey, priv_data, JNI_ABORT);
return JNI_TRUE;
@@ -355,8 +355,8 @@ static jboolean pubkey_from_bytes(JNIEnv *env, jbyteArray pubkey, const ltc_ecc_
out->dp = curve;
ltc_init_multi(&out->pubkey.x, &out->pubkey.y, &out->pubkey.z, NULL);
ltc_mp.set_int(out->pubkey.z, 1);
- ltc_mp.unsigned_read(out->pubkey.x, pub_data + 1, (unsigned long) curve->size);
- ltc_mp.unsigned_read(out->pubkey.y, pub_data + 1 + curve->size, (unsigned long) curve->size);
+ ltc_mp.unsigned_read(out->pubkey.x, (unsigned char *) pub_data + 1, (unsigned long) curve->size);
+ ltc_mp.unsigned_read(out->pubkey.y, (unsigned char *) pub_data + 1 + curve->size, (unsigned long) curve->size);
(*env)->ReleaseByteArrayElements(env, pubkey, pub_data, JNI_ABORT);
@@ -417,7 +417,7 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig
unsigned char result[curve->size*4];
unsigned long output_len = curve->size*4;
int err;
- if ((err = ecc_sign_hash(data_data, data_size, result, &output_len, &ltc_prng, find_prng("yarrow"), &priv)) != CRYPT_OK) {
+ if ((err = ecc_sign_hash((unsigned char *) data_data, data_size, result, &output_len, &ltc_prng, find_prng("yarrow"), &priv)) != CRYPT_OK) {
throw_new(env, "java/security/GeneralSecurityException", error_to_string(err));
free_curve(curve);
(*env)->ReleaseByteArrayElements(env, data, data_data, JNI_ABORT);
@@ -452,7 +452,7 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna
int err;
int result;
- if ((err = ecc_verify_hash(sig_data, sig_size, data_data, data_size, &result, &pub)) != CRYPT_OK) {
+ if ((err = ecc_verify_hash((unsigned char *) sig_data, sig_size, (unsigned char *) data_data, data_size, &result, &pub)) != CRYPT_OK) {
throw_new(env, "java/security/GeneralSecurityException", error_to_string(err));
free_curve(curve);
(*env)->ReleaseByteArrayElements(env, data, data_data, JNI_ABORT);