diff --git a/jni/c/headers/java/fr_acinq_secp256k1_Secp256k1CFunctions.h b/jni/c/headers/java/fr_acinq_secp256k1_Secp256k1CFunctions.h index 3981929..8fa0196 100644 --- a/jni/c/headers/java/fr_acinq_secp256k1_Secp256k1CFunctions.h +++ b/jni/c/headers/java/fr_acinq_secp256k1_Secp256k1CFunctions.h @@ -357,11 +357,11 @@ JNIEXPORT jint JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1fr /* * Class: fr_acinq_secp256k1_Secp256k1CFunctions - * Method: secp256k1_frost_partial_sig_aggregate - * Signature: (J[B[[B)[B + * Method: secp256k1_frost_partial_sig_agg + * Signature: (J[B[[BI)[B */ -JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1frost_1partial_1sig_1aggregate - (JNIEnv *, jclass, jlong, jbyteArray, jobjectArray); +JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1frost_1partial_1sig_1agg + (JNIEnv *, jclass, jlong, jbyteArray, jobjectArray, jint); #ifdef __cplusplus } diff --git a/jni/src/main/java/fr/acinq/secp256k1/Secp256k1CFunctions.java b/jni/src/main/java/fr/acinq/secp256k1/Secp256k1CFunctions.java index d798063..e98c498 100644 --- a/jni/src/main/java/fr/acinq/secp256k1/Secp256k1CFunctions.java +++ b/jni/src/main/java/fr/acinq/secp256k1/Secp256k1CFunctions.java @@ -383,6 +383,16 @@ public class Secp256k1CFunctions { */ public static native int secp256k1_frost_partial_sig_verify(long ctx, byte[] partialSig, byte[] publicNonce, byte[] publicShare, byte[] session, byte[] tweakCache); - public static native byte[] secp256k1_frost_partial_sig_aggregate(long ctx, byte[] session, byte[][] partialSignatures); + /** + * Aggregates partial signatures + * + * @param ctx pointer to a context object (not secp256k1_context_static) + * @param session pointer to the session that was created with frost_nonce_process + * @param partialSignatures array of pointers to partial signatures to aggregate + * @param n_sigs number of elements in the partial_sigs array. Must be greater than 0. + * + * @return sig64: complete (but possibly invalid) Schnorr signature + */ + public static native byte[] secp256k1_frost_partial_sig_agg(long ctx, byte[] session, byte[][] partialSignatures, int n_sigs); } diff --git a/jni/src/main/kotlin/fr/acinq/secp256k1/NativeSecp256k1.kt b/jni/src/main/kotlin/fr/acinq/secp256k1/NativeSecp256k1.kt index 8234c21..52d56c1 100644 --- a/jni/src/main/kotlin/fr/acinq/secp256k1/NativeSecp256k1.kt +++ b/jni/src/main/kotlin/fr/acinq/secp256k1/NativeSecp256k1.kt @@ -305,10 +305,11 @@ public object NativeSecp256k1 : Secp256k1 { } override fun frostPartialSignatureAggregate(session: ByteArray, partialSignatures: Array): ByteArray { - return Secp256k1CFunctions.secp256k1_frost_partial_sig_aggregate( + return Secp256k1CFunctions.secp256k1_frost_partial_sig_agg( Secp256k1Context.getContext(), session, - partialSignatures + partialSignatures, + partialSignatures.size ) }