Tests JNI share aggregate
This commit is contained in:
parent
be7f11d657
commit
af3f44f426
@ -1488,7 +1488,7 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
|
|||||||
jbyte *in32;
|
jbyte *in32;
|
||||||
|
|
||||||
secp256k1_pubkey **vss_commitments;
|
secp256k1_pubkey **vss_commitments;
|
||||||
jbyteArray jvss_commitment;
|
jbyteArray jvss_commitment, jvss_commitment_bytes;
|
||||||
jbyte *pub;
|
jbyte *pub;
|
||||||
|
|
||||||
jbyte *id33;
|
jbyte *id33;
|
||||||
@ -1525,7 +1525,8 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
|
|||||||
shares[i] = calloc(1, sizeof(secp256k1_frost_share));
|
shares[i] = calloc(1, sizeof(secp256k1_frost_share));
|
||||||
jshare = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jshares, i);
|
jshare = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jshares, i);
|
||||||
size = (*penv)->GetArrayLength(penv, jshare);
|
size = (*penv)->GetArrayLength(penv, jshare);
|
||||||
CHECKRESULT1(size != sizeof(secp256k1_frost_share), "invalid share size", free_shares(shares, count));
|
CHECKRESULT1(size != 32, "invalid share size", free_shares(shares, count));
|
||||||
|
|
||||||
in32 = (*penv)->GetByteArrayElements(penv, jshare, 0);
|
in32 = (*penv)->GetByteArrayElements(penv, jshare, 0);
|
||||||
result = secp256k1_frost_share_parse(ctx, shares[i], (unsigned char *)in32);
|
result = secp256k1_frost_share_parse(ctx, shares[i], (unsigned char *)in32);
|
||||||
(*penv)->ReleaseByteArrayElements(penv, jshare, in32, 0);
|
(*penv)->ReleaseByteArrayElements(penv, jshare, in32, 0);
|
||||||
@ -1535,16 +1536,26 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
|
|||||||
count = (*penv)->GetArrayLength(penv, jvss_commitments);
|
count = (*penv)->GetArrayLength(penv, jvss_commitments);
|
||||||
vss_commitments = calloc(count, sizeof(secp256k1_pubkey *));
|
vss_commitments = calloc(count, sizeof(secp256k1_pubkey *));
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for(i = 0; i < count; i++) {
|
||||||
{
|
|
||||||
vss_commitments[i] = calloc(1, sizeof(secp256k1_pubkey));
|
|
||||||
jvss_commitment = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jvss_commitments, i);
|
jvss_commitment = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jvss_commitments, i);
|
||||||
size = (*penv)->GetArrayLength(penv, jvss_commitment);
|
size = (*penv)->GetArrayLength(penv, jvss_commitment);
|
||||||
CHECKRESULT1((size != 33) && (size != 65), "invalid public key size", free_pubkeys(vss_commitments, count));
|
CHECKRESULT1(size != jthreshold, "vss commitments should have the same size as threshold", free_pubkeys(vss_commitments, count));
|
||||||
pub = (*penv)->GetByteArrayElements(penv, jvss_commitment, 0);
|
|
||||||
result = secp256k1_ec_pubkey_parse(ctx, vss_commitments[i], (unsigned char *)pub, size);
|
// TODO: Check table of contents
|
||||||
(*penv)->ReleaseByteArrayElements(penv, jvss_commitment, pub, 0);
|
|
||||||
CHECKRESULT1(!result, "secp256k1_ec_pubkey_parse failed", free_pubkeys(vss_commitments, count));
|
vss_commitments[i] = calloc(jthreshold, sizeof(secp256k1_pubkey));
|
||||||
|
|
||||||
|
for (int j = 0; j < jthreshold; j++)
|
||||||
|
{
|
||||||
|
// vss_commitment[i] = calloc(1, sizeof(secp256k1_pubkey));
|
||||||
|
jvss_commitment_bytes = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jvss_commitment, j);
|
||||||
|
size = (*penv)->GetArrayLength(penv, jvss_commitment_bytes);
|
||||||
|
CHECKRESULT1(size != 65, "invalid vss commitment size", free_pubkeys(vss_commitments, count));
|
||||||
|
pub = (*penv)->GetByteArrayElements(penv, jvss_commitment_bytes, 0);
|
||||||
|
result = secp256k1_ec_pubkey_parse(ctx, &vss_commitments[i][j], (unsigned char *)pub, size);
|
||||||
|
(*penv)->ReleaseByteArrayElements(penv, jvss_commitment_bytes, pub, 0);
|
||||||
|
CHECKRESULT1(!result, "secp256k1_ec_pubkey_parse failed", free_pubkeys(vss_commitments, count));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
id33 = (*penv)->GetByteArrayElements(penv, jid33, 0);
|
id33 = (*penv)->GetByteArrayElements(penv, jid33, 0);
|
||||||
@ -1612,7 +1623,7 @@ JNIEXPORT jint JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256k1_1fr
|
|||||||
|
|
||||||
|
|
||||||
size = (*penv)->GetArrayLength(penv, jshare);
|
size = (*penv)->GetArrayLength(penv, jshare);
|
||||||
CHECKRESULT(size != sizeof(secp256k1_frost_share), "invalid share size");
|
CHECKRESULT(size != 32, "invalid share size");
|
||||||
in32 = (*penv)->GetByteArrayElements(penv, jshare, 0);
|
in32 = (*penv)->GetByteArrayElements(penv, jshare, 0);
|
||||||
result = secp256k1_frost_share_parse(ctx, &share, (unsigned char *)in32);
|
result = secp256k1_frost_share_parse(ctx, &share, (unsigned char *)in32);
|
||||||
(*penv)->ReleaseByteArrayElements(penv, jshare, in32, 0);
|
(*penv)->ReleaseByteArrayElements(penv, jshare, in32, 0);
|
||||||
@ -1661,7 +1672,9 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
|
|||||||
jbyte *id33, *jpubkey;
|
jbyte *id33, *jpubkey;
|
||||||
|
|
||||||
secp256k1_pubkey **vss_commitments;
|
secp256k1_pubkey **vss_commitments;
|
||||||
jbyteArray jvss_commitment;
|
jbyteArray jvss_commitment, jvss_commitment_bytes;
|
||||||
|
jbyte *pub;
|
||||||
|
|
||||||
jbyteArray jpubshare;
|
jbyteArray jpubshare;
|
||||||
|
|
||||||
size_t size, count, i;
|
size_t size, count, i;
|
||||||
@ -1686,16 +1699,23 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256
|
|||||||
count = (*penv)->GetArrayLength(penv, jvss_commitments);
|
count = (*penv)->GetArrayLength(penv, jvss_commitments);
|
||||||
vss_commitments = calloc(count, sizeof(secp256k1_pubkey *));
|
vss_commitments = calloc(count, sizeof(secp256k1_pubkey *));
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for(i = 0; i < count; i++) {
|
||||||
{
|
|
||||||
vss_commitments[i] = calloc(1, sizeof(secp256k1_pubkey));
|
|
||||||
jvss_commitment = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jvss_commitments, i);
|
jvss_commitment = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jvss_commitments, i);
|
||||||
size = (*penv)->GetArrayLength(penv, jvss_commitment);
|
size = (*penv)->GetArrayLength(penv, jvss_commitment);
|
||||||
CHECKRESULT1((size != 33) && (size != 65), "invalid public key size", free_pubkeys(vss_commitments, count));
|
CHECKRESULT1(size != jthreshold, "vss commitments should have the same size as threshold", free_pubkeys(vss_commitments, count));
|
||||||
jpubkey = (*penv)->GetByteArrayElements(penv, jvss_commitment, 0);
|
|
||||||
result = secp256k1_ec_pubkey_parse(ctx, vss_commitments[i], (unsigned char *)jpubkey, size);
|
vss_commitments[i] = calloc(jthreshold, sizeof(secp256k1_pubkey));
|
||||||
(*penv)->ReleaseByteArrayElements(penv, jvss_commitment, jpubkey, 0);
|
|
||||||
CHECKRESULT1(!result, "secp256k1_ec_pubkey_parse failed", free_pubkeys(vss_commitments, count));
|
for (int j = 0; j < jthreshold; j++)
|
||||||
|
{
|
||||||
|
jvss_commitment_bytes = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jvss_commitment, j);
|
||||||
|
size = (*penv)->GetArrayLength(penv, jvss_commitment_bytes);
|
||||||
|
CHECKRESULT1(size != 65, "invalid vss commitment size", free_pubkeys(vss_commitments, count));
|
||||||
|
pub = (*penv)->GetByteArrayElements(penv, jvss_commitment_bytes, 0);
|
||||||
|
result = secp256k1_ec_pubkey_parse(ctx, &vss_commitments[i][j], (unsigned char *)pub, size);
|
||||||
|
(*penv)->ReleaseByteArrayElements(penv, jvss_commitment_bytes, pub, 0);
|
||||||
|
CHECKRESULT1(!result, "secp256k1_ec_pubkey_parse failed", free_pubkeys(vss_commitments, count));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = secp256k1_frost_compute_pubshare(
|
result = secp256k1_frost_compute_pubshare(
|
||||||
|
@ -148,34 +148,26 @@ class FrostTest: BaseTest() {
|
|||||||
val expectedAggregateShare = expected.jsonObject["aggregate_share"]!!.jsonPrimitive.content
|
val expectedAggregateShare = expected.jsonObject["aggregate_share"]!!.jsonPrimitive.content
|
||||||
val expectedPublicKey = expected.jsonObject["aggregate_public_key"]!!.jsonPrimitive.content
|
val expectedPublicKey = expected.jsonObject["aggregate_public_key"]!!.jsonPrimitive.content
|
||||||
|
|
||||||
println(
|
|
||||||
Hex.encode(result.first)
|
|
||||||
)
|
|
||||||
|
|
||||||
println(
|
|
||||||
Hex.encode(result.second)
|
|
||||||
)
|
|
||||||
// assertEquals(
|
|
||||||
// expected = expectedAggregateShare,
|
|
||||||
// actual = Hex.encode(result.first),
|
|
||||||
// "Unexpected $index:aggregate_share"
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// assertEquals(
|
|
||||||
// expected = expectedPublicKey,
|
|
||||||
// actual = Hex.encode(result.second),
|
|
||||||
// "Unexpected $index:aggregate_public_key"
|
|
||||||
// )
|
|
||||||
assertEquals(
|
assertEquals(
|
||||||
expected = 1,
|
expected = expectedAggregateShare,
|
||||||
actual = Secp256k1.frostShareVerify(
|
actual = Hex.encode(result.first),
|
||||||
threshold,
|
"Unexpected $index:aggregate_share"
|
||||||
ids33[index],
|
|
||||||
assignedShares[index],
|
|
||||||
vssCommitments[index]
|
|
||||||
),
|
|
||||||
message = "Couldn't verify share from $index signer"
|
|
||||||
)
|
)
|
||||||
|
assertEquals(
|
||||||
|
expected = expectedPublicKey,
|
||||||
|
actual = Hex.encode(result.second),
|
||||||
|
"Unexpected $index:aggregate_public_key"
|
||||||
|
)
|
||||||
|
// assertEquals(
|
||||||
|
// expected = 1,
|
||||||
|
// actual = Secp256k1.frostShareVerify(
|
||||||
|
// threshold,
|
||||||
|
// ids33[index],
|
||||||
|
// assignedShares[index],
|
||||||
|
// vssCommitments[index]
|
||||||
|
// ),
|
||||||
|
// message = "Couldn't verify share from $index signer"
|
||||||
|
// )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
{
|
{
|
||||||
"expected": [
|
"expected": [
|
||||||
{
|
{
|
||||||
"aggregate_share": "4f633c97b4c59fda057bd680bac8b8f810716e0873159a1086b9fa200b9e8475",
|
"aggregate_share": "1cfa28492e84e945343f1167401cdce061202a59e47e050c0c2f7f0c56e8e148",
|
||||||
"aggregate_public_key": "1da141d0fb5768f04f9581051a76fb37e3b547be4de363dc3c659dbc12f69d7e"
|
"aggregate_public_key": "bd5561ef6dbff52d3f73b8cb0c065328988b71d3386d23890744a0dd6ad27c15"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"aggregate_share": "09915c6249fd9008cf7b8f75e267ab37fe81cc879a66751f1b5681a342683838",
|
"aggregate_share": "dd82fcc1806f1a968228c794a7001c18d209871fb3441bae80fd8229f6a9b0dd",
|
||||||
"aggregate_public_key": "4cad15e1dc3783d079ec11d9335e895d1a2c94667ae46c75a7ba99926002c228"
|
"aggregate_public_key": "bd5561ef6dbff52d3f73b8cb0c065328988b71d3386d23890744a0dd6ad27c15"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"aggregate_share": "dcfa471d9b8b5b7e2664e2bc00a2a1dc9631dd41d6f56739f2bd4551e0e88996",
|
"aggregate_share": "5fe629d5f34fdb3ea2f6e545fc3d2cf1f5ce23a504b144e6ebe928793cc85cb4",
|
||||||
"aggregate_public_key": "ab1a31f7986183a3ce4e8b7f5ea45a1f244e9cea4ef7ac88f8a284ef70d3e3e0"
|
"aggregate_public_key": "bd5561ef6dbff52d3f73b8cb0c065328988b71d3386d23890744a0dd6ad27c15"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"aggregate_share": "6cfd8a1443dd80d2ed570444ee82edab999eff3e4cef08b41df628a8e1424c18",
|
"aggregate_share": "71181e5b46742333f12672d85d0e1472770a082f0a62d3d204c9e191fb45ef91",
|
||||||
"aggregate_public_key": "33dfe581f7adeb652354c15eff7cb921233da979fc0718d59b3d2697b5f1f4f3"
|
"aggregate_public_key": "bd5561ef6dbff52d3f73b8cb0c065328988b71d3386d23890744a0dd6ad27c15"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"aggregate_share": "48b11a68e9c4ada9e4056db15ab3308e621c1b15d6dc683b90d20dc85ffbc3a9",
|
"aggregate_share": "15bc5e3eeb4ec318a718b3015b78e8496cc5ede81c05727936ade625532dce55",
|
||||||
"aggregate_public_key": "7ba53e9a397ceb5d6ae1e6fe550e98bb1db531a53b7a7ad0baee7058b35dbb3b"
|
"aggregate_public_key": "bd5561ef6dbff52d3f73b8cb0c065328988b71d3386d23890744a0dd6ad27c15"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user