Skip to content

Commit 89ab65a

Browse files
committed
[WIP]: Use GetByteArrayRegion/SetByteArrayRegion
1 parent 5e7d1a5 commit 89ab65a

File tree

1 file changed

+45
-53
lines changed

1 file changed

+45
-53
lines changed

jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c

Lines changed: 45 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)