diff options
| author | J08nY | 2024-03-28 17:37:06 +0100 |
|---|---|---|
| committer | J08nY | 2024-03-28 17:37:06 +0100 |
| commit | 59bcf047d2e141a2175aeaeb5bee3e9ce3e4d6ee (patch) | |
| tree | a462bd5303dd399c5c1504d218c9c3b9bf78e365 /standalone/src/main | |
| parent | 6cadd538804714c0e12c18a4fc483452b978aaad (diff) | |
| download | ECTester-59bcf047d2e141a2175aeaeb5bee3e9ce3e4d6ee.tar.gz ECTester-59bcf047d2e141a2175aeaeb5bee3e9ce3e4d6ee.tar.zst ECTester-59bcf047d2e141a2175aeaeb5bee3e9ce3e4d6ee.zip | |
Add test-vector suite to tests.
Diffstat (limited to 'standalone/src/main')
4 files changed, 52 insertions, 10 deletions
diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/botan.cpp b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/botan.cpp index c0d249c..c4441c3 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/botan.cpp +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/botan.cpp @@ -99,7 +99,7 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPa return JNI_TRUE; } -JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024Botan_paramsSupported(JNIEnv *env, jobject self, jobject params){ +jboolean check_params(JNIEnv *env, jobject params) { if (params == NULL) { return JNI_FALSE; } @@ -128,6 +128,10 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPa return JNI_FALSE; } +JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024Botan_paramsSupported(JNIEnv *env, jobject self, jobject params){ + return check_params(env, params); +} + static jobject biginteger_from_bigint(JNIEnv *env, const Botan::BigInt& bigint) { std::vector<uint8_t> bigint_data = Botan::BigInt::encode(bigint); jbyteArray bigint_array = env->NewByteArray(bigint_data.size()); @@ -305,6 +309,10 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai } JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024Botan_generate__Ljava_security_spec_AlgorithmParameterSpec_2Ljava_security_SecureRandom_2(JNIEnv *env, jobject self, jobject params, jobject random){ + if (!check_params(env, params)) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return NULL; + } Botan::EC_Group curve_group = group_from_params(env, params); return generate_from_group(env, self, curve_group); } @@ -340,6 +348,10 @@ static std::string get_kdf(const std::string& type_str, size_t *kdf_bits) { } jbyteArray generate_secret(JNIEnv *env, jobject self, jbyteArray pubkey, jbyteArray privkey, jobject params, jstring algorithm) { + if (!check_params(env, params)) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return NULL; + } Botan::EC_Group curve_group = group_from_params(env, params); jsize privkey_length = env->GetArrayLength(privkey); @@ -400,6 +412,10 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyAgr } JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSignatureSpi_00024Botan_sign(JNIEnv *env, jobject self, jbyteArray data, jbyteArray privkey, jobject params){ + if (!check_params(env, params)) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return NULL; + } Botan::EC_Group curve_group = group_from_params(env, params); jclass botan_sig_class = env->FindClass("cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi$Botan"); @@ -463,6 +479,10 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig } JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSignatureSpi_00024Botan_verify(JNIEnv *env, jobject self, jbyteArray signature, jbyteArray data, jbyteArray pubkey, jobject params){ + if (!check_params(env, params)) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return JNI_FALSE; + } Botan::EC_Group curve_group = group_from_params(env, params); jclass botan_sig_class = env->FindClass("cz/crcs/ectester/standalone/libs/jni/NativeSignatureSpi$Botan"); diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.c index 46286fd..1ace471 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/c_utils.c @@ -232,21 +232,18 @@ char *biginteger_to_hex(JNIEnv *env, jobject big, jint bytes) { jstring big_string = (*env)->CallObjectMethod(env, big, to_string, (jint) 16); jsize len = (*env)->GetStringUTFLength(env, big_string); -#if defined(__WIN32__) || defined(_MSC_VER) - char *raw_string = _alloca(len); -#else - char raw_string[len]; -#endif - (*env)->GetStringUTFRegion(env, big_string, 0, len, raw_string); + const char *raw_string = (*env)->GetStringUTFChars(env, big_string, 0); - char *result = calloc(bytes, 2); + char *result = calloc(bytes, sizeof(char) * 2); if (len >= bytes) { - return strncpy(result, raw_string, 2*bytes); + strncpy(result, raw_string, 2*bytes); } else { jsize diff = bytes - len; for (jint i = 0; i < diff*2; ++i) { result[i] = '0'; } - return strncpy(result + diff*2, raw_string, 2*bytes); + strncpy(result + diff*2, raw_string, 2*bytes); } + (*env)->ReleaseStringUTFChars(env, big_string, raw_string); + return result; }
\ No newline at end of file diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c index a21c7cc..2566b2c 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/mbedtls.c @@ -249,6 +249,11 @@ static int create_curve(JNIEnv *env, jobject params, mbedtls_ecp_group *group) { jmethodID get_field = (*env)->GetMethodID(env, elliptic_curve_class, "getField", "()Ljava/security/spec/ECField;"); jobject field = (*env)->CallObjectMethod(env, curve, get_field); + if (!(*env)->IsInstanceOf(env, field, fp_field_class)) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return 1; + } + jmethodID get_p = (*env)->GetMethodID(env, fp_field_class, "getP", "()Ljava/math/BigInteger;"); jobject p = (*env)->CallObjectMethod(env, field, get_p); mpi_from_biginteger(env, p, &group->P); diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c index 82592f1..4378e9b 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/tomcrypt.c @@ -176,6 +176,10 @@ static ltc_ecc_set_type* 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); + if (!(*env)->IsInstanceOf(env, field, fp_field_class)) { + 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; @@ -284,6 +288,10 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPai JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyPairGeneratorSpi_00024TomCrypt_generate__Ljava_security_spec_AlgorithmParameterSpec_2Ljava_security_SecureRandom_2(JNIEnv *env, jobject this, jobject params, jobject random){ if ((*env)->IsInstanceOf(env, params, ec_parameter_spec_class)) { ltc_ecc_set_type *curve = create_curve(env, params); + if (!curve) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return NULL; + } jobject result = generate_from_curve(env, curve); free_curve(curve); return result; @@ -352,6 +360,10 @@ static jboolean pubkey_from_bytes(JNIEnv *env, jbyteArray pubkey, const ltc_ecc_ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyAgreementSpi_00024TomCrypt_generateSecret___3B_3BLjava_security_spec_ECParameterSpec_2(JNIEnv *env, jobject this, jbyteArray pubkey, jbyteArray privkey, jobject params){ ltc_ecc_set_type *curve = create_curve(env, params); + if (!curve) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return NULL; + } ecc_key pub; if (!pubkey_from_bytes(env, pubkey, curve, &pub)) { @@ -395,6 +407,10 @@ JNIEXPORT jobject JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKeyAgr JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSignatureSpi_00024TomCryptRaw_sign(JNIEnv *env, jobject this, jbyteArray data, jbyteArray privkey, jobject params) { ltc_ecc_set_type *curve = create_curve(env, params); + if (!curve) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return NULL; + } ecc_key priv; if (!privkey_from_bytes(env, privkey, curve, &priv)) { @@ -432,6 +448,10 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSignatureSpi_00024TomCryptRaw_verify(JNIEnv *env, jobject this, jbyteArray signature, jbyteArray data, jbyteArray pubkey, jobject params) { ltc_ecc_set_type *curve = create_curve(env, params); + if (!curve) { + throw_new(env, "java/lang/UnsupportedOperationException", "Not supported."); + return JNI_FALSE; + } ecc_key pub; if (!pubkey_from_bytes(env, pubkey, curve, &pub)) { |
