From 83141916e8a793639a4d135189d64a2e29bc0803 Mon Sep 17 00:00:00 2001 From: kngako Date: Tue, 20 Aug 2024 02:19:43 +0200 Subject: [PATCH] JVM Tests hacks --- .../fr_acinq_secp256k1_Secp256k1CFunctions.c | 7 +- .../kotlin/fr/acinq/secp256k1/FrostTest.kt | 14 ++- .../frost/share_gen_signers_vectors.json | 105 ++++++++++++++++++ 3 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 tests/src/commonTest/resources/frost/share_gen_signers_vectors.json diff --git a/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c b/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c index 4171a23..c84808d 100644 --- a/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c +++ b/jni/c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c @@ -1413,8 +1413,10 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 for (i = 0; i < jn_participants; i++) { jbyteArray id33 = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jids33, i); - // TODO: Check id33 size is 33... + size = (*penv)->GetArrayLength(penv, id33); + CHECKRESULT(size != 32, "invalid id33 size"); ids33[i] = (*penv)->GetByteArrayElements(penv, id33, 0); + (*penv)->ReleaseByteArrayElements(penv, id33, ids33[i], 0); } int sharesLength = jn_participants * 32; @@ -2089,8 +2091,9 @@ JNIEXPORT jbyteArray JNICALL Java_fr_acinq_secp256k1_Secp256k1CFunctions_secp256 for (i = 0; i < n_pubnonces; i++) { jbyteArray id33 = (jbyteArray)(*penv)->GetObjectArrayElement(penv, jids33, i); - // TODO: Check id33 size is 33... + CHECKRESULT(size != 32, "invalid id33 size"); ids33[i] = (*penv)->GetByteArrayElements(penv, id33, 0); + (*penv)->ReleaseByteArrayElements(penv, id33, ids33[i], 0); } diff --git a/tests/src/commonTest/kotlin/fr/acinq/secp256k1/FrostTest.kt b/tests/src/commonTest/kotlin/fr/acinq/secp256k1/FrostTest.kt index 5d804e2..54659ff 100644 --- a/tests/src/commonTest/kotlin/fr/acinq/secp256k1/FrostTest.kt +++ b/tests/src/commonTest/kotlin/fr/acinq/secp256k1/FrostTest.kt @@ -6,9 +6,8 @@ import kotlin.test.* class FrostTest: BaseTest() { - // Frost Share Generation @Test - fun `frost share generation`() { + fun `frost share generation test cases`() { val tests = readData("frost/share_gen_vectors.json") val pubkeys = tests.jsonObject["pubkeys"]!!.jsonArray.map { Hex.decode(it.jsonPrimitive.content) } @@ -21,6 +20,8 @@ class FrostTest: BaseTest() { val threshold = validTestCases.jsonObject["threshold"]!!.jsonPrimitive.int val ids33 = keyIndices.map { pubkeys[it] }.toTypedArray() + println("Testing ${Hex.encode(seed32)}") + val result = Secp256k1.frostSharesGen( seed32, threshold, @@ -54,6 +55,13 @@ class FrostTest: BaseTest() { message = "Unexpected pok64 for $keyIndices test case" ) } + } + + @Test + fun `frost share generation signers`() { + val tests = readData("frost/share_gen_signers_vectors.json") + val pubkeys = tests.jsonObject["pubkeys"]!!.jsonArray.map { Hex.decode(it.jsonPrimitive.content) } + val signerShareGenTestCase = tests.jsonObject["valid_signers_share_gen_test_case"]!! val keyIndices = signerShareGenTestCase.jsonObject["key_indices"]!!.jsonArray.map { it.jsonPrimitive.int } @@ -64,6 +72,8 @@ class FrostTest: BaseTest() { signerShareGenTestCase.jsonObject["signers"]!!.jsonArray.forEachIndexed { signerIndex, signer -> val seed32 = Hex.decode(signer.jsonObject["seed"]!!.jsonPrimitive.content) + println("Testing ${signer.jsonObject["seed"]!!.jsonPrimitive.content}") + // There seems to be a bug that causes a crash if we call frost_share_gen too often val result = Secp256k1.frostSharesGen( seed32, diff --git a/tests/src/commonTest/resources/frost/share_gen_signers_vectors.json b/tests/src/commonTest/resources/frost/share_gen_signers_vectors.json new file mode 100644 index 0000000..5c6978f --- /dev/null +++ b/tests/src/commonTest/resources/frost/share_gen_signers_vectors.json @@ -0,0 +1,105 @@ +{ + "pubkeys": [ + "023590a94e768f8e1815c2f24b4d80a8e3149316c3518ce7b7ad338368d038ca66", + "02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9", + "03935f972da013f80ae011890fa89b67a27b7be6ccb24d3274d18b2d4067f261a9", + "03dff1d77f2a671c5f36183726db2341be58feae1da2deced843240f7b502ba659", + "04f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9" + ], + "valid_signers_share_gen_test_case": { + "key_indices": [0, 1, 2, 3, 4], + "threshold": 3, + "signers": [ + { + "seed": "0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F", + "expected": { + "frost_share": [ + "9a04e37bc40df0e1c3e05b82e7a7af6b7cdaadf337ec3eaa2b50bb9ffdb2da99", + "8d7b24fa2421a9157ce01b7a900fe4b06dbb922def5d0f8a6b6f420e94310d27", + "8cda987d0a9817ecb544f1ffcd7912006c6406bb95c9a9a45b70d641f6a0300c", + "bf0eaac669eac6ac43d094bb2e07e4fa7fd4b1d317188c690aad7ea211b49bdb", + "00c266074c34720f6d9a8511e4ec82bed44e104f93f20d9bbfbff8e2edf44400" + ], + "vss_commitment": [ + "04bc2f60d5a7494d506e6517c49db2104b05e087536ccb1cb2730282f469782bb93e2c0029d733beeea75120e831ed71255adde4ddbd0be049419572502d7b73b9", + "04ced2029d64827253175b5382cb327123fd2cdcdb5b2092e66020e9b6ece639f675029e36604347735eef9bf64137474b14d92d2996e67f5721705ee574c916a1", + "044f34156e0a6d49c96298a845fd07a122490dee82b80f090b3214162ed2b030c88a2cec6cac580d63d770f1d2933f21e58ec8d4b94ca1939e590add1616f6ea38" + ], + "pok64": "8f63ac15582fd77b4c50eef4ca7f5810e9d31ff86a5e7c0c14483edc076290bcfdb481e5c41b24419c65ac7525560a8d3bbbcc303c8c232d63650252e7aff576" + } + }, + { + "seed": "F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0", + "expected": { + "frost_share": [ + "7adaa6dbd9df3f0944a516d13b6d7a826a956d05412a9f656b26b36e6507ff0c", + "69cedd07db8a28a4cfd70fcd672b573b842675a9a0222239173c2dcc2f300dd1", + "ca1df886e57b1ede4501a09b2c8e433f4503bdf9627784369650fd76a7ada20c", + "f53e5fb436fae00581f5077cb4736af110d5fe1ceb9c4047852adfea6fa2e8b0", + "8addd4121d313a0458b3649466f27dafadc5cb6dba441f7e1e5c4f2fb62139c0" + ], + "vss_commitment": [ + "0498fce8a40dd9fc23fd87cc4fecd572bd87a6d961576ba7eef3e140f61655c9ee276942ef761cf0cd2845d1c6f149c73e411c2869ac8e4faeedcc6235d0954460", + "04581308e2c7b7367f5f711a95c6f72a99b53f138cf8eafd6c0119ea038e18b51ec8e1bab854e22c42f56e0ddf6922bcac4064254700194a5a9abcdb619e96e701", + "04ebb8b0c4fcecb70d91b9e65ea897ed8930f6d7b41cdcd150718ebbcef40b50f7fb9817fd425b598e09f3133a9100d513e9ba97bcb26b8ef371ada9669a6ed11f" + ], + "pok64": "b2d68140014812cfa83116100deba8a6152a20a243ea73e3e4edf7f25031805f25f3dd78e6d921de1bcebc0d9a57069af905d3f1d613896f6ef69820c601e651" + } + }, + { + "seed": "7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DFE8D76D7F2D1007671", + "expected": { + "frost_share": [ + "7bde839ba686bdadce0dd854f1f71455c2dd9257b2bfd1995a92e7601dc8ebb8", + "15b62e7af6dfbc1035197fa1439b0b93639798e52a52efb964ff8eb118f0218e", + "6a4179474660abdda21b9cb0c7f27f487b18dd96b7a78f24b2b3b2e7d53504f6", + "97c53a07bd8b7a27a1ba83e3be7b913d55d3112a9ece472c0e3ab2f3e18e34df", + "f5bb1c36ec28f1a2845dcfb10af91772609f401d5ab4357a2a23e4c4d4e1be0d" + ], + "vss_commitment": [ + "046b17a9bca13b4cec2ae589973ab0471915fd77c93374d7d5dfcfacac9da7132bf2d07f55f98caf84927c97fe2946174d73609afe7d9aba0364b0abe2d174d544", + "04abaab1242f669205aa0eb26a876a89cbe80c6c7364b1fba0d095d8181767b96d3d44e5014c2d5a82cc9cf7b9e5ae269e5bc22ffe0212ef1a0b7a2379778be500", + "0415d97c46268a919acbfadcdc0a23fb463d94473787365a6bdd8f5bce95d6d83156448f2582bddcbdbb9bfc58cde1db47e5fb6350530bfb1102b7d0d44a70b5c0" + ], + "pok64": "5cca5711ca05df39c82fe518e4afcd2871654bbfe6fed31b97101bfc27e1d0083d1cbc2cb3d3fa7a972bd84c7c025f71042a3a0aec27311732ae8b679bdebda3" + } + }, + { + "seed": "F95466D086770E689964664219266FE5ED215C92AE20BAB5C9D79ADDDDF3C0CF", + "expected": { + "frost_share": [ + "28b9d1730cd16190c0e9903144bc93f1ea5febf0046a290e00887540c7f726cf", + "d423aafb512cb983b00bdca3e8b398d2f197db8339889b4d0934852f3a0be1cb", + "3d71eab243f39cb2a83ccf78cb611f24544d01dc53a14616cfcf7044f4cfd8c3", + "78b75d47b540a9f29937e7a9187abc31286e7fcafb112c25829ddec7ae73f2d8", + "0a917790664eb85b54b2527449fe445c93a9c384b31ccc8b9ade6638ff55dd96" + ], + "vss_commitment": [ + "04919b0ecff3c10aebec20d55f6eff6736df2cb9b0e549d633ea1711eea4def643c00c89025bd567b79e7fd808c821bca9e6516542ebd689a06f97f52bb8937b7c", + "041583c3a25ebab0fbddbc9c9c491f889ff1df5991b0963c3c6363c6040eb505f2a9e279987f70d30415ddae2bcace1ccf2f96f1d220016c526a363aebed6c02a8", + "04e53ec77bf28672cb36a527fd5ac2ec90b88ab99dfd54c734b4837ea84759332ff7259e9044af6a9847c9432f023a5c7039f95313d564572a326b0e34b3e2299d" + ], + "pok64": "ff6bf4b90faf7a66dc54bfa2cd047be44e1c42622410d6e3a23697d30212d3bde11fc7fb4e61b2bc1e4310ad86089721ba912191d7ca561b9c5dcbcb604116fc" + } + }, + { + "seed": "012ABBCB52B3016AC03AD82395A1A415C48B93DEF78718E62A7A90052FE224FB", + "expected": { + "frost_share": [ + "638248e2dd3f9a1b9cc2368ce6540aa841d04ae712ce6ccc9a417076aeda779e", + "fc5f214938b6d348504c400783763bc40055c4ad1e7a9f5c0fc2bb8880b9150e", + "613a34d878e85be35e57e6816ee23942ea5e394a5fb88247f748eead74e22f65", + "ac4e7c9132c25867f06e6b13a39c7714982a5dfd7ba8748323900cf05a8f0712", + "89cf905e2f716d0707baa735baa28c096bc6c8561e8f83d11334102e7b4d3774" + ], + "vss_commitment": [ + "04f63b636f91fda4fa756c64cd34c186e4595a5b4a6ed6351ba0e99961f2a189001f6f708312ed0ac8c1e291d6064e236e265f2b1b561925a29a39c2d3ad9f866b", + "040269fedd5bdb0d7bed5dd50f9fec28415d51694441dc6c5b0b3e2fd577429c40832c6263e9d218f6ae8cc6a87f72d69d3dc0096a8779d7530fec4983ed6c95b1", + "04fa8cf2f9a25d2d5b52872dd27afd89dfff5bad33f3335726fc56b49989f64c041e765acd4719bad295620393b00ec3f1b5420f02bad4794998d5f26c435deee5" + ], + "pok64": "6888a2ffd199e69806e2c067befc41bd58de0605407542163031e8d75dd1cf80b7fae9e12c8e618081cf79a84d2a3a293dd260234383e5ab587f4459c5963d15" + } + } + ] + } +} \ No newline at end of file