diff --git a/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c b/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c index 1c18b1b..1617a2c 100644 --- a/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c +++ b/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c @@ -1403,15 +1403,6 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 CHECKRESULT((*penv)->GetArrayLength(penv, jpok64) != 64, "pok64 length must be 64 bytes"); -// for (i = 0; i < jn_participants; i++) -// { -// jbyteArray id33 = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jids33, i); -// size = (*penv)->GetArrayLength(penv, id33); -// CHECKRESULT(size != 33, "invalid id33 size"); -// ids33[i] = (*penv)->GetByteArrayElements(penv, id33, 0); -// (*penv)->ReleaseByteArrayElements(penv, id33, ids33[i], 0); -// } - for (i = 0; i < jn_participants; i++) { jbyteArray jid33 = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jids33, i); @@ -2014,22 +2005,23 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 * Signature: (J[[BI[B[B[B[[B[B[B)[B */ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1frost_1nonce_1process - (JNIEnv *penv, jclass clazz, jlong jctx, jobjectArray jpubnonces, jint n_pubnonces, jbyteArray jmsg32, jbyteArray jpubkey, jbyteArray jmy_id33, jobjectArray jids33, jbyteArray jtweak_cache, jbyteArray jadaptor) + (JNIEnv *penv, jclass clazz, jlong jctx, jobjectArray jpubnonces, jint n_pubnonces, jbyteArray jmsg32, jbyteArray jaggregate_public_key, jbyteArray jmy_id33, jobjectArray jids33, jbyteArray jtweak_cache, jbyteArray jadaptor) { secp256k1_context *ctx = (secp256k1_context *)jctx; secp256k1_frost_session session; secp256k1_frost_pubnonce **pubnonces; - jbyte *in66, *pub, *my_id33; + jbyte *in66, *public_key_bytes; jbyteArray jpubnonce; unsigned char msg32[32]; + unsigned char my_id33[33]; - secp256k1_xonly_pubkey public_key; + secp256k1_xonly_pubkey aggregate_public_key; - unsigned char *ids33[n_pubnonces]; + const unsigned char *ids33[n_pubnonces]; secp256k1_frost_tweak_cache tweak_cache; secp256k1_pubkey adaptor; @@ -2045,7 +2037,7 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 if (jmsg32 == NULL) return NULL; - if (jpubkey == NULL) + if (jaggregate_public_key == NULL) return NULL; if (jmy_id33 == NULL) @@ -2080,17 +2072,17 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 CHECKRESULT(size != 32, "invalid message size"); copy_bytes_from_java(penv, jmsg32, size, msg32); - CHECKRESULT((*penv)->GetArrayLength(penv, jpubkey) != 32, "public key must be 32 bytes"); - pub = (*penv)->GetByteArrayElements(penv, jpubkey, 0); - result = secp256k1_xonly_pubkey_parse(ctx, &public_key, (unsigned char *)pub); - (*penv)->ReleaseByteArrayElements(penv, jpubkey, pub, 0); + CHECKRESULT((*penv)->GetArrayLength(penv, jaggregate_public_key) != 32, "public key must be 32 bytes"); + public_key_bytes = (*penv)->GetByteArrayElements(penv, jaggregate_public_key, 0); + result = secp256k1_xonly_pubkey_parse(ctx, &aggregate_public_key, (unsigned char *)public_key_bytes); + (*penv)->ReleaseByteArrayElements(penv, jaggregate_public_key, public_key_bytes, 0); CHECKRESULT(!result, "secp256k1_xonly_pubkey_parse failed"); - my_id33 = (*penv)->GetByteArrayElements(penv, jmy_id33, 0); - (*penv)->ReleaseByteArrayElements(penv, jmy_id33, my_id33, 0); + size = (*penv)->GetArrayLength(penv, jmy_id33); + CHECKRESULT(size != 33, "invalid my_id33 size"); + copy_bytes_from_java(penv, jmy_id33, size, my_id33); CHECKRESULT((*penv)->GetArrayLength(penv, jids33) != n_pubnonces, "invalid ids33 array size"); - for (i = 0; i < n_pubnonces; i++) { jbyteArray jid33 = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jids33, i); @@ -2113,9 +2105,9 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 size = (*penv)->GetArrayLength(penv, jadaptor); CHECKRESULT((size != 33) && (size != 65), "invalid public key size"); - pub = (*penv)->GetByteArrayElements(penv, jadaptor, 0); - result = secp256k1_ec_pubkey_parse(ctx, &adaptor, (unsigned char *)pub, size); - (*penv)->ReleaseByteArrayElements(penv, jadaptor, pub, 0); + public_key_bytes = (*penv)->GetByteArrayElements(penv, jadaptor, 0); + result = secp256k1_ec_pubkey_parse(ctx, &adaptor, (unsigned char *)public_key_bytes, size); + (*penv)->ReleaseByteArrayElements(penv, jadaptor, public_key_bytes, 0); CHECKRESULT(!result, "secp256k1_ec_pubkey_parse failed"); } @@ -2125,9 +2117,9 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 (const secp256k1_frost_pubnonce *const *)pubnonces, n_pubnonces, msg32, - &public_key, + &aggregate_public_key, my_id33, - (const unsigned char * const*) ids33, + ids33, jtweak_cache == NULL ? NULL : &tweak_cache, jadaptor == NULL ? NULL : &adaptor ); diff --git a/src/nativeMain/kotlin/fr/acinq/secp256k1/Secp256k1Native.kt b/src/nativeMain/kotlin/fr/acinq/secp256k1/Secp256k1Native.kt index 74551fb..cf36d42 100644 --- a/src/nativeMain/kotlin/fr/acinq/secp256k1/Secp256k1Native.kt +++ b/src/nativeMain/kotlin/fr/acinq/secp256k1/Secp256k1Native.kt @@ -830,6 +830,7 @@ public object Secp256k1Native : Secp256k1 { val nAdaptor = adaptor?.let { allocPublicKey(it).ptr } + secp256k1_frost_nonce_process( ctx = ctx, session = nSession.ptr,