diff options
| author | J08nY | 2024-03-27 19:00:46 +0100 |
|---|---|---|
| committer | J08nY | 2024-03-27 19:00:46 +0100 |
| commit | 5f58325077f2fa6b999ae3455b45334785b94f76 (patch) | |
| tree | 7f006016bf858f54503da0aa0af52b21a7205b4b /standalone/src | |
| parent | 1b26fc1298ba3dae380f7608ecffb508e1c3687d (diff) | |
| download | ECTester-5f58325077f2fa6b999ae3455b45334785b94f76.tar.gz ECTester-5f58325077f2fa6b999ae3455b45334785b94f76.tar.zst ECTester-5f58325077f2fa6b999ae3455b45334785b94f76.zip | |
Fix LibreSSL build (they removed binary curves).
Diffstat (limited to 'standalone/src')
| -rw-r--r-- | standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/libressl.c | 69 |
1 files changed, 4 insertions, 65 deletions
diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/libressl.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/libressl.c index 79227f8..2a1eaa7 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/libressl.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/libressl.c @@ -153,26 +153,7 @@ static EC_GROUP *create_curve(JNIEnv *env, jobject params) { BN_free(a_bn); BN_free(b_bn); BN_free(gx_bn); BN_free(gy_bn); EC_POINT_free(g_point); EC_GROUP_free(result); return NULL; } - } else if ((*env)->IsInstanceOf(env, field, f2m_field_class)) { - jmethodID get_reduction_poly = (*env)->GetMethodID(env, f2m_field_class, "getReductionPolynomial", "()Ljava/math/BigInteger;"); - jobject red_poly = (*env)->CallObjectMethod(env, field, get_reduction_poly); - - BIGNUM *p_bn = biginteger_to_bignum(env, red_poly); - result = EC_GROUP_new_curve_GF2m(p_bn, a_bn, b_bn, NULL); - BN_free(p_bn); - if (!result) { - throw_new(env, "java/security/InvalidAlgorithmParameterException", "Error creating EC_GROUP, EC_GROUP_new_curve_GF2m."); - BN_free(a_bn); BN_free(b_bn); BN_free(gx_bn); BN_free(gy_bn); - return NULL; - } - - g_point = EC_POINT_new(result); - if(!EC_POINT_set_affine_coordinates_GF2m(result, g_point, gx_bn, gy_bn, NULL)) { - throw_new(env, "java/security/InvalidAlgorithmParameterException", "Error creating EC_GROUP, EC_POINT_set_affine_coordinates_GF2m."); - BN_free(a_bn); BN_free(b_bn); BN_free(gx_bn); BN_free(gy_bn); EC_POINT_free(g_point); EC_GROUP_free(result); - return NULL; - } - } else { + } else { return NULL; } @@ -210,6 +191,9 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPa if ((*env)->IsInstanceOf(env, params, ec_parameter_spec_class)) { EC_GROUP *curve = create_curve(env, params); + if (!curve) { + return JNI_FALSE; + } jboolean result = (EC_GROUP_check(curve, NULL) == 1) ? JNI_TRUE : JNI_FALSE; EC_GROUP_free(curve); return result; @@ -268,51 +252,6 @@ static jobject create_ec_param_spec(JNIEnv *env, const EC_GROUP *curve) { BN_free(a); BN_free(b); BN_free(gx); BN_free(gy); return NULL; } - } else if (field_type == NID_X9_62_characteristic_two_field) { - if (!EC_GROUP_get_curve_GF2m(curve, NULL, a, b, NULL)) { - throw_new(env, "java/security/InvalidAlgorithmParameterException", "Error creating ECParameterSpec, EC_GROUP_get_curve_GF2m."); - BN_free(a); BN_free(b); - return NULL; - } - - int basis_type = EC_GROUP_get_basis_type(curve); - jintArray ks; - jint *ks_data; - 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, (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); - return NULL; - } - } 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, (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); - return NULL; - } - } else { - return NULL; - } - (*env)->ReleaseIntArrayElements(env, ks, ks_data, 0); - - jint m = EC_GROUP_get_degree(curve); - - jmethodID f2m_field_init = (*env)->GetMethodID(env, f2m_field_class, "<init>", "(I[I)V"); - field = (*env)->NewObject(env, f2m_field_class, f2m_field_init, m, ks); - - gx = BN_new(); - gy = BN_new(); - if (!EC_POINT_get_affine_coordinates_GF2m(curve, EC_GROUP_get0_generator(curve), gx, gy, NULL)) { - throw_new(env, "java/security/InvalidAlgorithmParameterException", "Error creating ECParameterSpec, EC_POINT_get_affine_coordinates_GF2m."); - BN_free(a); BN_free(b); BN_free(gx); BN_free(gy); - return NULL; - } } else { return NULL; } |
