diff options
| author | J08nY | 2024-06-14 14:45:03 +0200 |
|---|---|---|
| committer | J08nY | 2024-06-14 14:45:03 +0200 |
| commit | e27e478c0a3ecf37b6e83d63986cc8c53d851095 (patch) | |
| tree | fea629d12c132ea146753d4db1fb02110aa3dede /standalone/src | |
| parent | b2e85d46c029965f76e5f93b11e33cf782386f33 (diff) | |
| download | ECTester-e27e478c0a3ecf37b6e83d63986cc8c53d851095.tar.gz ECTester-e27e478c0a3ecf37b6e83d63986cc8c53d851095.tar.zst ECTester-e27e478c0a3ecf37b6e83d63986cc8c53d851095.zip | |
Diffstat (limited to 'standalone/src')
| -rw-r--r-- | standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/openssl.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/openssl.c b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/openssl.c index fc02e9d..7a6070d 100644 --- a/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/openssl.c +++ b/standalone/src/main/resources/cz/crcs/ectester/standalone/libs/jni/openssl.c @@ -455,10 +455,19 @@ 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, (unsigned char *) pub_data, pub_len, NULL); + int retval = 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); + if (!retval) { + EC_POINT_free(pub_point); + throw_new(env, "java/security/GeneralSecurityException", "Error loading key, EC_POINT_oct2point."); + return NULL; + } + retval = EC_KEY_set_public_key(result, pub_point); EC_POINT_free(pub_point); + if (!retval) { + throw_new(env, "java/security/GeneralSecurityException", "Error loading key, EC_KEY_set_public_key."); + return NULL; + } return result; } @@ -469,8 +478,12 @@ EC_KEY *barray_to_privkey(JNIEnv *env, const EC_GROUP *curve, jbyteArray priv) jbyte *priv_data = (*env)->GetByteArrayElements(env, priv, 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); + int retval = EC_KEY_set_private_key(result, s); BN_free(s); + if (!retval) { + throw_new(env, "java/security/GeneralSecurityException", "Error loading key, EC_KEY_set_private_key."); + return NULL; + } return result; } @@ -482,7 +495,13 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeKey } EC_KEY *pub = barray_to_pubkey(env, curve, pubkey); + if (!pub) { + return NULL; + } EC_KEY *priv = barray_to_privkey(env, curve, privkey); + if (!priv) { + return NULL; + } int field_size = EC_GROUP_get_degree(curve); size_t secret_len = (field_size + 7)/8; @@ -526,6 +545,9 @@ JNIEXPORT jbyteArray JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSig } EC_KEY *priv = barray_to_privkey(env, curve, privkey); + if (!priv) { + return NULL; + } jsize data_size = (*env)->GetArrayLength(env, data); jbyte *data_data = (*env)->GetByteArrayElements(env, data, NULL); @@ -566,6 +588,9 @@ JNIEXPORT jboolean JNICALL Java_cz_crcs_ectester_standalone_libs_jni_NativeSigna } EC_KEY *pub = barray_to_pubkey(env, curve, pubkey); + if (!pub) { + return JNI_FALSE; + } jsize sig_len = (*env)->GetArrayLength(env, signature); jbyte *sig_data = (*env)->GetByteArrayElements(env, signature, NULL); |
