From dc062db15317de6819c41b00c4784be1b64a84f3 Mon Sep 17 00:00:00 2001 From: mrnazu Date: Thu, 14 Nov 2024 16:34:10 -0800 Subject: [PATCH] feat(secp256k1 JNI): improve context management, error handling, and portability --- .../src/java/org_bitcoin_Secp256k1Context.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c index a52939e7e7..68977b562d 100644 --- a/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c +++ b/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c @@ -6,10 +6,22 @@ SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context (JNIEnv* env, jclass classObject) { - secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); + secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); - (void)classObject;(void)env; + if (ctx == NULL) { + (*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/RuntimeException"), "Failed to initialize secp256k1 context"); + return 0; + } - return (uintptr_t)ctx; + (void)classObject; (void)env; + return (jlong)(intptr_t)ctx; } +SECP256K1_API void JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1destroy_1context + (JNIEnv* env, jclass classObject, jlong ctx_l) +{ + secp256k1_context *ctx = (secp256k1_context*) (intptr_t) ctx_l; + secp256k1_context_destroy(ctx); + + (void)classObject; (void)env; +} \ No newline at end of file