@@ -1255,29 +1255,26 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
12551255 jbyte * ptr ;
12561256 int result = 0 ;
12571257
1258- if (jctx == 0 )
1259- return NULL ;
1260- if (jsecnonce == NULL )
1261- return NULL ;
1258+ if (jctx == 0 ) return NULL ;
1259+ if (jsecnonce == NULL ) return NULL ;
12621260 CHECKRESULT ((* penv )-> GetArrayLength (penv , jsecnonce ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SECRET_NONCE_SIZE , "invalid secret nonce size" );
1263- if (jprivkey == NULL )
1264- return NULL ;
1261+ if (jprivkey == NULL ) return NULL ;
12651262 CHECKRESULT ((* penv )-> GetArrayLength (penv , jprivkey ) != 32 , "invalid private key size" );
1266- if (jkeyaggcache == NULL )
1267- return NULL ;
1263+ if (jkeyaggcache == NULL ) return NULL ;
12681264 CHECKRESULT ((* penv )-> GetArrayLength (penv , jkeyaggcache ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE , "invalid cache size" );
1269- if (jsession == NULL )
1270- return NULL ;
1265+ if (jsession == NULL ) return NULL ;
12711266 CHECKRESULT ((* penv )-> GetArrayLength (penv , jsession ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , "invalid session size" );
12721267
1273- copy_bytes_from_java (penv , jsecnonce , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SECRET_NONCE_SIZE , secnonce .data );
12741268
1275- copy_bytes_from_java (penv , jprivkey , 32 , seckey );
1269+ (* penv )-> GetByteArrayRegion (penv , jsecnonce , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SECRET_NONCE_SIZE , secnonce .data );
1270+
1271+ (* penv )-> GetByteArrayRegion (penv , jprivkey , 0 , 32 , seckey );
12761272 result = secp256k1_keypair_create (ctx , & keypair , seckey );
12771273 CHECKRESULT (!result , "secp256k1_keypair_create failed" );
12781274
1279- copy_bytes_from_java (penv , jkeyaggcache , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE , keyaggcache .data );
1280- copy_bytes_from_java (penv , jsession , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , session .data );
1275+
1276+ (* penv )-> GetByteArrayRegion (penv , jkeyaggcache , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE , keyaggcache .data );
1277+ (* penv )-> GetByteArrayRegion (penv , jsession , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , session .data );
12811278
12821279 result = secp256k1_musig_partial_sign (ctx , & psig , & secnonce , & keypair , & keyaggcache , & session );
12831280 CHECKRESULT (!result , "secp256k1_musig_partial_sign failed" );
@@ -1286,7 +1283,7 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
12861283 CHECKRESULT (!result , "secp256k1_musig_partial_sig_serialize failed" );
12871284
12881285 jpsig = (* penv )-> NewByteArray (penv , 32 );
1289- copy_bytes_to_java ( penv , jpsig , 32 , seckey );
1286+ ( * penv ) -> SetByteArrayRegion ( penv , jpsig , 0 , 32 , seckey );
12901287 return jpsig ;
12911288}
12921289
@@ -1301,48 +1298,47 @@ JNIEXPORT jint JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1mu
13011298 secp256k1_musig_partial_sig psig ;
13021299 secp256k1_musig_pubnonce pubnonce ;
13031300 secp256k1_pubkey pubkey ;
1301+ jsize pubkeySize ;
13041302 secp256k1_musig_keyagg_cache keyaggcache ;
13051303 secp256k1_musig_session session ;
1306- jbyte * ptr ;
1304+ jbyte buffer [ fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE ] ;
13071305 int result = 0 ;
13081306
1309- if (jctx == 0 )
1310- return 0 ;
1311- if (jpsig == NULL )
1312- return 0 ;
1307+ if (jctx == 0 ) return 0 ;
1308+
1309+ if (jpsig == NULL ) return 0 ;
13131310 CHECKRESULT ((* penv )-> GetArrayLength (penv , jpsig ) != 32 , "invalid partial signature size" );
1314- if ( jpubnonce == NULL )
1315- return 0 ;
1311+
1312+ if ( jpubnonce == NULL ) return 0 ;
13161313 CHECKRESULT ((* penv )-> GetArrayLength (penv , jpubnonce ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_PUBLIC_NONCE_SIZE , "invalid public nonce size" );
1317- if (jpubkey == NULL )
1318- return 0 ;
1319- CHECKRESULT (((* penv )-> GetArrayLength (penv , jpubkey ) != 33 ) && ((* penv )-> GetArrayLength (penv , jpubkey ) != 65 ), "invalid public key size" );
1320- if (jkeyaggcache == NULL )
1321- return 0 ;
1314+
1315+ if (jpubkey == NULL ) return 0 ;
1316+ pubkeySize = (* penv )-> GetArrayLength (penv , jpubkey );
1317+ CHECKRESULT (pubkeySize != 33 && pubkeySize != 65 , "invalid public key size" );
1318+
1319+ if (jkeyaggcache == NULL ) return 0 ;
13221320 CHECKRESULT ((* penv )-> GetArrayLength (penv , jkeyaggcache ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE , "invalid cache size" );
1323- if ( jsession == NULL )
1324- return 0 ;
1321+
1322+ if ( jsession == NULL ) return 0 ;
13251323 CHECKRESULT ((* penv )-> GetArrayLength (penv , jsession ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , "invalid session size" );
13261324
1327- ptr = (* penv )-> GetByteArrayElements (penv , jpsig , 0 );
1328- result = secp256k1_musig_partial_sig_parse (ctx , & psig , (const unsigned char * )ptr );
1329- (* penv )-> ReleaseByteArrayElements (penv , jpsig , ptr , 0 );
1325+ (* penv )-> GetByteArrayRegion (penv , jpsig , 0 , 32 , buffer );
1326+ result = secp256k1_musig_partial_sig_parse (ctx , & psig , buffer );
13301327 CHECKRESULT (!result , "secp256k1_musig_partial_sig_parse failed" );
13311328
1332- ptr = (* penv )-> GetByteArrayElements (penv , jpubnonce , 0 );
1333- result = secp256k1_musig_pubnonce_parse (ctx , & pubnonce , (const unsigned char * )ptr );
1334- (* penv )-> ReleaseByteArrayElements (penv , jpubnonce , ptr , 0 );
1329+ (* penv )-> GetByteArrayRegion (penv , jpubnonce , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_PUBLIC_NONCE_SIZE , buffer );
1330+ result = secp256k1_musig_pubnonce_parse (ctx , & pubnonce , buffer );
13351331 CHECKRESULT (!result , "secp256k1_musig_pubnonce_parse failed" );
13361332
1337- ptr = (* penv )-> GetByteArrayElements (penv , jpubkey , 0 );
1338- result = secp256k1_ec_pubkey_parse (ctx , & pubkey , (const unsigned char * )ptr , (* penv )-> GetArrayLength (penv , jpubkey ));
1339- (* penv )-> ReleaseByteArrayElements (penv , jpubkey , ptr , 0 );
1333+ (* penv )-> GetByteArrayRegion (penv , jpubkey , 0 , pubkeySize , buffer );
1334+ result = secp256k1_ec_pubkey_parse (ctx , & pubkey , buffer , pubkeySize );
13401335 CHECKRESULT (!result , "secp256k1_musig_pubkey_parse failed" );
13411336
1342- copy_bytes_from_java ( penv , jkeyaggcache , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE , keyaggcache .data );
1343- copy_bytes_from_java ( penv , jsession , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , session .data );
1337+ ( * penv ) -> GetByteArrayRegion ( penv , jkeyaggcache , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_KEYAGG_CACHE_SIZE , keyaggcache .data );
1338+ ( * penv ) -> GetByteArrayRegion ( penv , jsession , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , session .data );
13441339
13451340 result = secp256k1_musig_partial_sig_verify (ctx , & psig , & pubnonce , & pubkey , & keyaggcache , & session );
1341+
13461342 return result ;
13471343}
13481344
@@ -1375,15 +1371,12 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
13751371 size_t i ;
13761372 int result = 0 ;
13771373
1378- if (jctx == 0 )
1379- return NULL ;
1380- if (jsession == NULL )
1381- return NULL ;
1374+ if (jctx == 0 ) return NULL ;
1375+ if (jsession == NULL ) return NULL ;
13821376 CHECKRESULT ((* penv )-> GetArrayLength (penv , jsession ) != fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , "invalid session size" );
1383- copy_bytes_from_java (penv , jsession , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , session .data );
1384- if (jpsigs == NULL )
1385- return NULL ;
1377+ (* penv )-> GetByteArrayRegion (penv , jsession , 0 , fr_acinq_secp256k1_Secp256k1CFunctions_SECP256K1_MUSIG_SESSION_SIZE , session .data );
13861378
1379+ if (jpsigs == NULL ) return NULL ;
13871380 count = (* penv )-> GetArrayLength (penv , jpsigs );
13881381 CHECKRESULT (count <= 0 , "partial sigs count cannot be 0" );
13891382
@@ -1394,17 +1387,16 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
13941387 psigs [i ] = calloc (1 , sizeof (secp256k1_musig_partial_sig ));
13951388 jpsig = (jbyteArray )(* penv )-> GetObjectArrayElement (penv , jpsigs , i );
13961389 size = (* penv )-> GetArrayLength (penv , jpsig );
1397- CHECKRESULT1 (size != 32 , "invalid partial signature size" , free_partial_sigs (psigs , count ));
1398- ptr = (* penv )-> GetByteArrayElements (penv , jpsig , 0 );
1399- result = secp256k1_musig_partial_sig_parse (ctx , psigs [i ], (unsigned char * )ptr );
1400- (* penv )-> ReleaseByteArrayElements (penv , jpsig , ptr , 0 );
1401- CHECKRESULT1 (!result , "secp256k1_musig_partial_sig_parse failed" , free_partial_sigs (psigs , count ));
1390+ CHECKRESULT1 (size != 32 , "invalid partial signature size" , free_partial_sigs (psigs , i ));
1391+ (* penv )-> GetByteArrayRegion (penv , jpsig , 0 , 32 , sig64 );
1392+ result = secp256k1_musig_partial_sig_parse (ctx , psigs [i ], sig64 );
1393+ CHECKRESULT1 (!result , "secp256k1_musig_partial_sig_parse failed" , free_partial_sigs (psigs , i ));
14021394 }
14031395 result = secp256k1_musig_partial_sig_agg (ctx , sig64 , & session , (const secp256k1_musig_partial_sig * const * )psigs , count );
14041396 free_partial_sigs (psigs , count );
14051397 CHECKRESULT (!result , "secp256k1_musig_pubkey_agg failed" );
14061398
14071399 jpsig = (* penv )-> NewByteArray (penv , 64 );
1408- copy_bytes_to_java ( penv , jpsig , 64 , sig64 );
1400+ ( * penv ) -> SetByteArrayRegion ( penv , jpsig , 0 , 64 , sig64 );
14091401 return jpsig ;
14101402}
0 commit comments