aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2017-01-02 16:09:48 -0500
committerJack Lloyd <[email protected]>2017-01-02 16:09:48 -0500
commit5666717854244aaa1329d8e8854fa1f338d769ec (patch)
tree7c2eee582d27bd3646cd88a0a1659574f250b1a9 /src
parentfc914bd13659da7ee6590fa535ae6074a2db85f9 (diff)
parentabb759127e4f45c63aace4aaeb18204186c7ccb9 (diff)
Merge GH #790 Add DH tests from NIST CAVP
Diffstat (limited to 'src')
-rw-r--r--src/tests/data/pubkey/dh.vec232
-rw-r--r--src/tests/test_dh.cpp64
-rw-r--r--src/tests/tests.cpp21
-rw-r--r--src/tests/tests.h1
4 files changed, 315 insertions, 3 deletions
diff --git a/src/tests/data/pubkey/dh.vec b/src/tests/data/pubkey/dh.vec
index bdc4eca64..41dfc44b8 100644
--- a/src/tests/data/pubkey/dh.vec
+++ b/src/tests/data/pubkey/dh.vec
@@ -1,4 +1,236 @@
+# Derived from NIST CAVS file 20.1 (Generated on Mon Jun 20 09:02:25 2016)
+# http://csrc.nist.gov/groups/STM/cavp/documents/keymgmt/KASTestVectorsFFC2016.zip
+# [FB - SHA512]
+
+# COUNT = 0 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x74162ac74759e85654e0e7762c2cdd2689009b24dae06d0a85260b81
+Y = 0x86c59d66dc53689cdc6b60ca7628afa58759b27ffa0856d0037d390d60c14d86385bde5ed5bc6f7e0ab8e5f07d08a47b648abd10865d9f4c9ee7cf5f7982c63a52a33b96482a94b1ece4a99022ec4aa41c7453648089152093a84d16e16039d71db9aaa2aa701f483f6297c4d2647079290a2b94c9bf9ecaa6715758135898504130e381795adf7352b37d1be696012a03dcea4750e963365a7698355364cbedf1715abcb31e3b2aa072dfe15ffd4c2e7d69c8ed7dbb138522536b5e74495724fe4e74b662b9af8c5a35616b9dde39c80041cc6ac62aeae2b802f91b62e9be27dae8006797529db42b2ad8a16353ba6a5d25ea25d4431269ea6fc397de3f16ed
+K = 59ae47dfd2893b37bb229b05f19ec181b8bc7bace31d0ac37b27e364ea4ca179bb574d91fc554009195ee13bfd3877baa54ed390eab7aa3dfd6f3a35a776a80f58999d7931a9f0d842eb9bad51a24f2d052e56d09ade631f5e3ba64e957e4d583e20ad35d5336708482dd59b80a351e664a724cdf28a7796d2e93fffc7b113a8288be2b562af9dc3f980c917d56a723351b7f4be2d7384b51f69335cf6a2fde5fa4f151be66529a4c8e8850b9c98dcae3a84d0ac231845e2b3771b9c5583960490994a58ff0d748333f92d835f2886ff26b81ebf4b7d7dd6d052d3f2f3062f137ef3fcab8c95771ad837b0af0378d75285126151db08fd0cea5aa9933ffebc50
+
+# COUNT = 1 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x14c593a439977589c7816268142588d783805e1820a1cae12168f9e0
+Y = 0x5e281505e8c688933a9ba563f7647c37acb4e30284574cb54d3445948f84c2420c108fa951db5398c76713ae414060369be094dceefdd305a22c2cd693298e75e967579326662afdb3bdf7c7b4eac68b3c379b8d14d1ef3bb63a673e7d7d1eddb9a7fd21c84e751150f1c8bb4115b8f7ca3f8816503f723a8b8339c1376cc0d24eb97dfda189e65112b9a1246ad693e91583250a18e1a06b9bf07fa330493123f9d0d66641472dab54ef4bd35a196b6a30e32192889649db8dc2b3e802ca3bb8c92cdc24cf12b06af4c222b15ee493cd3b77b1e03fcfe22f49f71e0b23d07f39b7e624c610957e5c6b4fc1f074012b2e95b8961403b1d7a09638ea00d06f005a
+K = 90a6aa701672b0764d95a1ef3fb1ab68ccb7a8eceb70c96e798ad7fa249a87ebf3228de27db9ea9eea6930190183d309163200df33ad75c17d8db7e82bacbb4a2ca0aa2e9834ade45086c98aacdc57c55b2a1b6639c03e8161c93bc50137f9cba04c70d0b8df077a707ee9fe76c1d8fb2c2bb5c23e3a45ee6b507b59148bb8eba2fbe6ffb3dac19209c3ddd6acb5b45edc527932300ab44e9c2b8813919ec799ce1aa2ef34c306b09b0a30752801d05fd33613cb9371136b4b2c643c752ddc7be1132fba4424d4e4fc920dc85b027ca47c506d7ca27106f0f97f43964fa6e5f89c2e53bc2a2e5b548f7624e89093a846ff390bcaca66dc83dcf60f02c6ffeaaf
+
+# COUNT = 2 (P)
+[Valid]
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x17c19fe66d53b8bf286cf534c9b60322e9dab11618e68b27d0764cac
+Y = 0x91783a82ac39437a411ac79850031ed0cedc8d0a49eba2a2ce508ac164d79fc7ff01610077aaf507cbc85827546d9345972f2b1797b76ea428420291be5dbc6c5e153d3a58180e2569d09539e933f3ddfed7fcbe0299c3f27f036f24daef7de871be4331eaf808544673f4382c1ecc0d05d0310ead7fd6cd18986347e862bcb8a87a0aa6f62e8b4c8d4f4cf41c61c16d2090f44cf01062fff397e51f53f2656b92e098d0621d6de3dde3646075362b1b9edc19a53d7b26f4d8fc67033136feb469248de404f7cfe6ee693a48fda28363ffd4c25a26ec7795a26297cd72434a016254b00553d14a9bf036b313e85d016880bd6262563edfdd686ef445c5217d8f
+K = 698228081a19cbb87eafd31fd23fb31b25d5fffce6dfe81132f1189a4f5602b674ff6dee1784ab9efa564d13c1bf39a2924947d6b798f58f2f4dbb4ade8c8b46eb86fc7d8c494a382a27f83f978e167703b9ea8f76e2a66fe2d82395672eec615824ba02d9fdce76fb3a2b8ff207a0a25b5a3033c5c7a8569d0e34aca63239be9affbaf3c3f261352b861894f9d429f36c3a6f6a35d4529d9e15b540c65c1c1e445e9f21c4934292fa3ea36a531d5b8c1351c8d1c45ec95aaab0ab6862e16d328c51986505281fe6147e28e11d371f616d9a18aaa8bf9e1e117e3a16ab6d5e950044e36cefc5e73908aa10e079ecb976580b1d96c30b21ebc27e71e1a011d4ab
+
+# COUNT = 4 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x071d45a7743d13260c6b2939cc16181296b5698c0bdfc73f1c0092ff
+Y = 0x0b97720ae423204135b8baf6663f28af27fec8f819191978a01b884481b3cbd063e08c6f5501d1b6458b9db2f19ce01874bd5f5e220cf743042cc393c7818e72b72d343eb775b2d6f0148568e6e6512c53d48c95862271783f2396d73cf50da63fe716d0fb54cdca8144293c26af2eea273d8c764529983ce59fc60352c122bba5f6c76f27388f6563ea97f0d312c74113b8c8d6a93b90734d407bcd55cca09dd7355370f5b6b1563d8a7f0c2c0205329fc707185eded3b07f87400eaf00f38361bab642742cdf655ec4beda7c4b4da0f38e9d5668a3ce6bd6247fc8032a5b1f7c3146dd03fb42d3fefc69ce16890a449bd7c298596f129bdaed6d40dea3c2c1
+K = 8d0c190abf8df56730155b559db64d7200f01edecafc50cf8d709546e8b4123f0a81c79694261bc21be8570c79bf39c3f42b059d188e5ae7679c279f0bd2770ddfb59eb5418d38d807874e5fd8a8b311ccd3884ffeb084df72775f33b0120332495ac0af506b9d4822180eff1a41188191dcc877f14fce1fa30f461e7ccb47307661cfe55fd9b263f9e7ae94ce9b2cd8ae2b1a95e80ff83934e066ff4ca8814dde22613b76c2b1d5ab7aeba7a7e0df7738f3bbf3c094aa944c75ca723c105b3ea5d6a982882e1642003418116e6b0bf04473692beff0c1721ae6b8db5a2022ae129537e048b1ebd70840095a390dfd5da5c99332e786ad9254a033b20e46302b
+
+# COUNT = 9 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x24e22d77cf23d38a01e752d5d0520f1bfda273bc3dff79494ac89257
+Y = 0x0a9bea117586f9f292f2fc9618e4526b08d7565911d8ba3da54d9c57371f2b8caaffa07ac919eb9769e50627ebd6d47a6899132c99256a66991a1d7cf930c1a81f3df5fa91081685d60811fdc9418a9f6fc44ca7b31cba7c16e49f4486430f1dbeefc3d13ebd6f8215186ccdcf85021799257e70f68a82958ec621d4c615b311f6aaeab2f87571cffb6d906da64f8ebf49b8960fa0c6758cc7a73c65d63a27f821bede07990ce78c91daab27e3136044ddc27df1fa7ec47722238ae8154485bd60413d706fb5596cbf1b053ee15506e51d6a65d368aa518613e2435d0cd1cac6ceea3f46134f0e9f9af181dcc38f3254479ed135075a298bfcbc4946d9648308
+K = 645ffbc72cda0aa5e282ddc689889c9acb6fd9f137a8f2bbc0d21e91ea7e6af848a147b900e77d5212d86f59753668e5dc47b4b59514fe15650350047dd025a6fa75961b5862805026d4320806914ba892c23e51f168f9a01b2ee7970e1e96d48704afa45f24f9874d46791994d4e512a02cebe4fc80f2ff4239832abdff8e08db38843c39db0be7193f07afd6f527462b3cbb33ac6195f7509648abaa791a456a645667b12b9ce590bd30f478dbd0fe47dd9500a2defa17cdaddbe8f85cc807579d0bc2444ad8515c9a65a9c243db610a301cc581f261d769c9e9c5dbf8fb0e7d3d12da0e6e4487b0f243c0bc07879c0f0b5ca3d7fed4ce4c0a763d7b163d45
+
+# COUNT = 10 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x5947355e82a4e9a8fc344d247d6c8908021f3aa9b9d67cc2e02de825
+Y = 0x50d24594c93e5f66f46b9d949b3077807952b403df2a69c460bab1892e1485503f6ad21fb8512282c65fa878cbc120092295de9bfb1d677b7d165175d86c0c3c612cfd8682d90878641b28180237ff60346447719b13f524a240d29ff8d11b1acb695b2dc0121a5062eb88dd595ca265c2d43746541e0960c79c1cd66dda17de95121209361e6369eb728d1f8da6c6d13ea78a7942c1fe2b1a501d44a5c858d3a8a1c6648241f30fe7933e5d2e130a18c79c052c4dab30b3587cb1600b4634a996a2e834904140cf702c99c5d6a7b1b1af38a0489d6a69710e1c4f93b33a869bf8652a35efaa3f17010ffcc422c6313d6fac0cc1374a316266617dafbaa17e7e
+K = 69bcb1947604551a8480c0b3ebe380a1db70e7608f31bb54ece21656bd453d1b0ae9941c4573ccf24430577bfb3da4a4920ae99e636941d90b9fc98d77846cb653aff4256a165114ac9c0c4990b71385fe7b0cdcd3d6cb40d0c11d436164606f08820d2fec00212a0a30a2ee0f5052ed08738838302a9c6b3121393e75e2f072d32c9a806945be28d3aaa7cd2e7b4b12d6a565655d941389baca6458937bf6f71a1aa773e79fbba8dc0e646ee8d9485bc876428d3c50a8542b6f1cf89f9c9769a2f647a01581c353eaf8f27484976098b93d75a855525b608d9433660f9404b6c4590f068d9d19e5f75353f9b89f342209ad6ca318191c5ab4f9c8ddce5b81ee
+
+# COUNT = 11 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x38253fbac321c8e1690cd607785574c27daaac1af57063c9d29c8603
+Y = 0x344d460bbfdd4d1b6c912af211f741b5da60f365ddb16c766a305785438a4a9f8f41dcc49fc8d06cb89167d91d7e9f558e4613d0163758d2afa88de5dcbe3d0726fafad55e054754ef63a23119e03c9b4165e29f84f5afbf6b1ff965ac23e41f81c54f7165d4096c26681039cf45290e00f9d1440d8ad9d10e724ec9a284581bb6c03039686ffea9e4666d6016fc9abe9c22babf2265376996c5580a8facb0062c2b275c8038941caaf7c3856232aa1d6be02a3b271bfa3e6d24c56744a6c61e5164042d9418452229c42849fa9c384b6b438de54a1bcaac23478959f68ef871a4e1d894389be0afd25ea49d8d7028400484f1daf5220a8beb67b847e7c1e824
+K = 16d2271d2a44ded1a5b63519b71d4c1afc67ee79e71d7b41fc9d70dd52323e749c67ae1ac7e1969a5e34808811b36d5efd315d90754cde96b900a41a3259e9d76df4606d3c8f13d7f62381f1f7f9efca4802a424c3bb06433ddf49631e8b067653d4600b5bd7eae24a33a39afe230c7ab5aad24c3ed6d6bb81e96f2cee58a08ddd6da3f0a1707029e665acc495d5facc21f0e14279dcda78281b99afb84a74c45530a31283f192b8e867b5c6488d8a96380a0e29093dbd1be78681a32c6a9e2842f52ce32b1855dc2e2f0925060eabe6f9bd7885cd60b5af4999cb8b4f43e79b28fbf4668a56365c89341478ca7b9c936364bd06bfed43d6cf7ecf6e27a12ccf
+
+# COUNT = 14 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x867a149143a62b867733713012be81ae3bf57e1857a8e42dfed4f86f
+Y = 0x04307a0ed587c8edb194a6933a128a07e9f8f4635e558f6e9dec0112b6dc006689ed2d89aafb862fefc74cbc7a2176000bbd8249a61527d3bb56e7a9a59ea7daacc591605b111d46d01548693d996c4ee992d799a721f2fb6a4711db2103bed712bb8e0bb99e863cc031d374e085eef0f8f8046d63c6367611883403af83b6935a185cb607416320dbb9d3769892cd917fcba59a106cdba7f528998a851f25fbda6401a8c65a789c34ac6b3d1b466bde658fcc221f341896e87fed14cafc51a47190422457e66c0e55d2482f8c6d9658cd8c2793540b26e2231c199699e403d6811aef3023bf411baad7fb7b7efbe1658e0af02accb5c93d38b350925ac48806
+K = 869c8121f9dd46f9674d8eaf5064d87a0e778f6a3ed38e3a8276b8594061bc07b20436ad7bb5c3681eaeaeed7a48023cf40b222839738c47a72b913288a46bf0c310e491eb27d2b6f0087079a1b42654d77bf3e221d6d10eae405200bb13fa2909066395e242b3d5bfda13971fd16d4c56c58cd7926cac40b7c7c00297aada84a3caac3d0646b8e5bd6e9dbedb99e6680a3cc6974219193f34e8f3cdfaaba88abac7dbc2c952d085e2e338cae61de74272c10a0153548eda5516e4132b852259ecebd9de463e05fb9668af7408dfcf7540de79319345a4719a405768da4e7ac529da19bce56ef2023fc025b92ecfceaf0a8301cae7f8e98a5a95cb1f5b7c1b00
+
+# COUNT = 17 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x7945628fb95f3af0598450f4e511ffd5ee8b599006e51d7fbe8c3a3b
+Y = 0x999c2c2abd5f12d3bef902c3a8baca50610fd7e8dbcd34f181e52168e067b0ddd473bb00b5caeff24b4f4e697b381b1295876507c51f56834664598009a8ecdf905a3323cc99b55e0035bf1aea09ec37736ac7dfe9afec62d9b44a5037937e0bac7ca7e31cabc5a74119d19defceaac2e668f80d01d44779cec5c82e85489bbc2aa0051a95e67bd0e13840debdd18ec8729a72900da940668b03b590b6d1f3217b4777900bbf15688446380a815097c139aa38a79f842ebf15fee34d570f6464968035f20ca3a8ce44f55459e4f2af6186ec3bb9d8fa43bcb4d6dcbb85e95a40f56fa50cc39ed147b4cb9c8d1b7fe5251c689bbfd0edb42669a0a1d5e94081c6
+K = 02ad2fd47468773ab0a800c74eb3f477a23a640b4f1fa98b88136f973da3d531d080fa211e6064a8ccd286249b9f7b85c9687d9fcf89d747ee1dde85a9b17333f4d825f2f93ee702b5665b9efc0e0d5dd983a4df651bff27b9aa9c4e8f14466b5b63b1b041c75f8724d6321d35f69954d783239348f38aded65699bff0525dba2d2c6d5ba1019bef953d95d14205d99d8d2aa8f48a1e50c3d205d1e0dcd0a8bf513d0a2265bcbbe90a8a3ed1af4621cac76615f7ee3a0040c9f3231f3ba1bcb5171a4d665507845a270e97a86db5b6fcc51a1934873c85654545f2196249dc5a7628e87f0e768cbecacd72ab82a23f9a215639cacc1a0b2717edfc099f8dc703
+
+# COUNT = 18 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x3bdd31742f2beca2b8fae780d167d46f2dbf51777839b8c0f478780b
+Y = 0x0a4d27b92418c98ec0748b56246fd0399069db381df6b6c9c7689a7ccdf5b65875c73128919952789ccfac558140c419accd488e600c337f8c5e848e4229b14f021f71cdc1e8b83b1fb8b2b5b4a8fa4ce4667a26cf070bc2d143660e97ff7d17b262395ea14592f9815986dbbb5e611eb0b498b956da021a39478731fddba4877ad370864a6ec1e2c05db31c05d9c9bcb47963a72fdcc574996a94cacf2633d4d17e382394cedfcea517012090537e3bbc943c55b372a39e39537ddce799a40d8d0990ec27c0314b4da9940bfa547370cc11f690415fb1cd330898e3250a8d47e49e71e558306fa3f2d8df9cce19d27d8177df3dd27d743a5300ef055f207006
+K = 167eb8511a00488727920561a4a437339ce8ac5eff88065fdf0693a44298df5d0b59690d23820942241b799089c25d8e265b818834a8de8d87747956171843eea5359f989c6c05a450cbf13bcf5318bbf65cdb35dd1527594ea9a9b6d6a406d09f031cd08070945ff0d6802c2eb4f4df8e9c279380ca5329a4a4cc7bf0cc767ecc458be5a3db1952056bd97c30f6f3928e1d148ad5bb6fde001c61b76d9df424865dc003f397a885ca2a98d57d049578882de7ff460c79ab4fb6f791f16e9bde739130408da73ba93186ffd47804ba506a2552c6609e6952a2503e88bc75419ed1782ef4323ad71602f6cdabbbfe2bd8d6bb9e924fca911d7804c3d0abfa33fc
+
+# COUNT = 19 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x686557c3b4cf1022c8550a58734a127a1e317fb780d9e038d10d8b51
+Y = 0x0abaab43d1fa89fe755e278a6712a7b0773a6607ea4d17ef9e38dc8fa40e5a2ef3591ddb0a5b99145ca4c321d4cb8219c27555a8fd5c56929c0bdd6271c97d70d56eb227e72f8de64b7204b83b2868b2d9426430b6f9aa03f6c68fcb18ba5ef0766e579dba1238f0108991149be19c5fcbbd1803d905cfe54310e56f3fa97dd23e731b01ea3f3f3258e621da0fffa3928e184b2bf7148aee053ca55220d1502fc4a288dbd09980c8448585b12400311c3d6b8fdbebd6a690a40357d80a10475a2eadbbffba89aa1df15266e0a79d7dd13769362dfba4969b57f8a360dfb3d0646405f22080328baf6cf4a839de13161032c0a7332f23732617588ed6cae3df0c
+K = 7427421343e7c10be2d46f549a0189d65727250120078195cd3ac8d53d5b166c0745aec8c3142858563dcbd3f5dd976378236b077167a218d9a01263ba984cf346899af673f0854ddae6cc5b4372cfcfb023854480499cabddd4c7dd9ba6f559ead8eaa0ee3a3a3f4c4773ddef014384452aad53410d0a89843af467d783df22686777365dcacbe5df55612f7a66b966f70424d6ecad8c86373880d98651285d3118f2dfbff5ec5cfa9982bf00efc52524e62cb807706f23b1e838f0997c3b8ca350e1f0800466b67724c3e1df23e51572534c437c66808ea9ab20e9f8e533ca202febff1247f6cf14761bdd7575e2577d2383abffa5a80319977956361bebbf
+
+# COUNT = 21 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x336fdfc37d06d4ce3a9dc420629b8124ee79b19831f9bf416ebb24ca
+Y = 0x59b7ad974cb62312f5a71ad16c770cb374470ef7944de4579e961ccc718ed048ccf5aff00f25dca0d7dcd85b66beb0353c2257b959873cb546f500a20de724ba284d930030e8067f5dd7a836149e9895ae93aa885b21e93975824265c7d5cfd7cfe575940b525fc83b1aa8ed237365e1c01554266b08afa17ff0bd11b4f71be7bca2ccd01cd00e7ade8efa9cca6ab56898747a4a4848dabed3b7409f3cdbea6c8124f1d66c0a7dafb33f9666d5797b7900faadf3776d9179ca610037743efe03896389261c35d63c3b38f834dc571869ae2ca121e52c9629156e582224edee36b916dedb1ec0a207e7bf3d2ca6e62c706306bb97d44fed2c7347c4cc5d8114e1
+K = 5e3f87c1980ff68319a5345130a1fafb2266435ca01c52f8dcfddb4cdde275dea77fe0f9dc8e59413e7008f0564dae7eb4d33ed387c73662fbcb1791cbc9705ecc53157efb2f4fad96fd505ec66e8fa39a22126c2be30e617801d4fd30099e59ad223c4f138798d2e76a9217f39a27f81ed2fb319100b3304936ec7934d87802738b762e13d375a826bec450c8798ce18acc7f908ca2c1fae3bd2107ed0d773db1cfe0c376825535f1d7cd82c0100d548f509a57a58f544af348df0816d602c1bfc48cf7f04c445f9911bf7cc7b0dfd8e1cd09204ea4f253d7af470a7e8a372d1dcec190d16176dd79b662f7d2e6128cdfc212bf1fa05dc5890180fbf7127e69
+
+# COUNT = 22 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x13c957ba6ddb2f948c40f11baaa320502078a11fa162cdbb6a762f11
+Y = 0x41236692833bee0b07a636870dbcd92bff2810a0eb05bdefc9ecbd16ad0cddd2a049cfef6b9ec58ad7c567a42d718cd3bbd6c0d7e8af6d2443676f011c82aeb55d71b3c8945baa3b236146cc0a82c0a54d1688a8b43d0f819454fe5e62cca7fc03ed3b0e07586a6128e62519fe44a2e5ed2aaa25be3aa3e89db53d50e194e5ec7090a5c821b36286d2c153148ef7dfc28ed0af2499efbe684fb898bb86208ee23eba3efabc622a6460eedd7a1b5b34c83a0b774f9332b2695a4f75a970f84db11d96fc4c9a3cb430181f9c125948bb7d72ab99d487080a9f550040ee378a9b9a2a5307b864341449c2f7933dbd9dd327fbbecd060c34e735e626b4118715e43c
+K = 44648d4b06dec1960f979c33183db7952b34a006d2a40a9a57e3fc0041bf80145c9ab49866404d0393c4e1c5e74f047a11a49de9ba0043d648404be35b8d1b8acb882a706b6316bbf2ff785051175232bbb607a0c58a3cb32a3e754b1d492d67881d2001def18e2efcef40f3174d553c6c1502e7b9211047487ab31a9c089c0fff232399b639df51ddfc5f88c028634733d8f20d9c3e4257e52a2411264f9f602760c1657cf3db7031ed62ca9acf58f2d46cece7e1948810de216b8d00c9ba9f225e1e344881ff4a2e66bb3f1274d41782ce8f0a0601870345f831515ef2fbfc4fbabb309c94637ea443b58bd917728d44633b97554abb3cd98722568427e253
+
+# COUNT = 23 (P)
+P = 0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f
+G = 0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc
+Q = 0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d
+X = 0x45806463a27eb0841a362b959150b830dabb83112ebf697e3fce15ca
+Y = 0x37c26ae6fe17f21341180b4fce957aab9c19fc533cd6f7f34356ee38e9868a4a0c142553e5286074f7ce0c0ca54ea897f9be079277fc80cf13f1cd3680395c6a4a299d0643c07798dcf7c78520e87702a176c80182add5bc0b68afb55575f8170531adde656c84e189f76adcea09457faeed089b6e30566149daf7b522fd8cbf8b072a4337b22fd760f2cd92f02e92543425a84339886458cb544d6a4d7b1ab04c2c9e753a471a09fe9fc63ffa54a5d2722eaaece3df51fc43eb20db903fc4f2c25bdb9b03f3d850a528c0adf8fed32329944bcf8c6f0b31ab7042338939ffc259ad93723467c597554fe37898dad2a5f5ca87d3395b1253fcddb4ec962f6062
+K = 773ffbdb1ff196d4fc98812542ceef1678584df359df7a706cb687bd260b33270d8369b32f2d832e752e8078300f81b54c813f8123b2e6b251f617582699d6cdf3a817555c882aea96f536da5e004fddfd1422fe41aeb2a0de41856247dbf8520b0aa467c30903284f935da9b40ca8d15bf3767b8c6dc043554ce7f849d95368f98667e9150e550b354bc87ad7a4353c3bc3ca8bfc15a40a52dd8517a12af0721660051d26d7d79552bcbec64677641594398a5cec8e224f31329989c535ff12ea0984c4cbc46455cc90f17768489919dbc376662089e0bc081434f4bac3332e86c378f270b49fbcede7bba7095ca39a445af68ef9ab1e56fb323cceb3287d69
+
+# [FC - SHA512]
+
+# COUNT = 0 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0xd3c4bf2282c255be84bd33f7a1cc07c862e6db3547786620794d7493ece24f88
+Y = 0x842a9530522af1434e1478b37c7db60ffe17019923220d084e1e1be74d437291900fd5f7bc883f516406b9668f980e1d631ebe1cd3e7bea1c4be8ec8ef841408c94a753b748e3dd6b35998a11f88ae434c16035c43bfdc4f86afabe3266a75164a3582c198685f3a034e8cc22ce6a4110c4b1091c92dff71db8d54883f8fec221ae5d5e26580a9d437f9ed86bdac49a763544d0eb883f68d420db34e866231912219823ccf982fa57a4c95a618517ca5dfda944e5fd4b98918ed308ee7c8ee9e489200d0decbf91e83798d2361630829a15c45976b640625842d89443f23ce0ec7816716716b80354d47e0eaafad23b8b0ba2fe1aa1f87f2de9213d02391b150
+K = 92745336d18970374b779efb43a7471b8de391c7e9015dc3fd50955f75584812c202fc0fb1bc3a652fad66ee5dc1764623ef8c88d64a1651648c1eba87c068a1a82d5bb799d4eebe8db0fce8d7b4c8368e2d7a95fcc67e9586c3bccb42c9ec600f043eb0ace5df9d1a04ec4668522fead92dfbcb374ed7f606287846820f76c5f1960f56d10550395582df99662fa2590ed4b2fcbe94020939c6b3445acc3d20f3ff304eddaa1839e0eab679325487f20cb6568d7f57a4ec1a84337417acfaf4cdb6ea5c2df1f4b16bead8a1dfafbee0d02fe92142f44e12117156919257d5748450110b9236f5113e480e168f310a397e09de66c1e17af7aac2fcbd39f8b5ba
+
+# COUNT = 3 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0xbf48d7c4b97803746c64e3ac2dafd9ea6e4afe9ab5009ef8b9298c243808fb04
+Y = 0x4261475afea612c4a09fa2264ec9f7c74056f606f5075f57c92d94afda757dd73d9275ca823973399ed77cb60457d7414f0208a2f078d4715a12c7f6414cf7ea05070f24ec4ba52280c9d4f0c03e3739dccdaeeba5aca2b6244f55c5355e3db63d47e68698fd764bf8adcb499a4c1d3624e325ce2c4f1b8a1d2a0d3aa872e15935a2974bb6ccf1567fb81f49ded50ff06720692bde564d1a3b65dee7d5af624b97d26b5af930f0a186c0f0854f39d406c59b49cc947f0b9d6061c15679090df43df23d4aeaf12f152be3659a2ac1ad9078f44b5be11cfff1f7c96c697c8aa50d16a07e15eca5ba9c270ee424af02f29bfc18ab21e1b8b18d40f54b9b53392da5
+K = 5f8496f9121a4772661ce0a13fcfecaa8a66e8234a9efcdab68a98cc01e2fde2de535e5f19220a8c85e44c234b2e5c86462a3908fdee02e9eb9aa1cda1e690b0d56e2507f2be8fd47befb94eb09438b166d1d3efa5554a9d225f8456b26d132b979e480c0d894d8cbf4e951703f12b502ee1ad61bb9d5a364171fdb52f89347d60e88a5e963aecc7b2fa093ff849186399ce4cb03f5e2b26dbe0a2435620a18280a433a61c4a51e9ec9bc3cd4714ca4ebb5e57f401f2d693adfe372827fa3a3ba660fbfdd107adddd56d613ccd06aeeff41ee06bcefaa80032da4caca41a69ef906255930fa404a115f024ed0e73c996fd8f07bc2b550b13fbc797a491002e02
+
+# COUNT = 4 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x29553aac124c5c5c1783032e834674c0a7ca139d11ffd4efaed0b87d2f828322
+Y = 0xa7c45691eb71711bdea65c8aaa67ea5c6f5906497f7b6f5f59199b3ddb168490d35fb3f08da48cc37e063e63f1b1fb4bf7a889bfbfb05194248204278fcdbeb2968c89240c97f11fcb74999c062e0919ebd233addb9493ee23824d2166d9b9a38bfa3e37e1e2c8a10c11902ada2a6801747f32dbc300122c07c53c5923e8ed6829853c76610730e913a6ae2bd25b55877368fd4acd78b888bdcaa4dc0c7f632a80c8e7094ef92a05a5070bbec8a88fdbb89f6f86a456782c8133489462fb047b898d4fc9ccac13ced6c08a5971b2bbc8dc32b96eee42a505ae4dbc6c5160da6faf3d4f4d98c44091e6a09f38152ad136f9fd32feb506e5589acfa6e87387a002
+K = 93ff1a7c777de9359dbc75b4f16cb9c4c95db0c00fead0543863ce4ca433993c95994a3414f6bb0d3d33628dcdcc05a22848687396fe5e5d8102d59d25fe5fd4104c11c2b2673aac2d26c695ce871d9f6ebb9884ba7bd2a78569d5b6b7b1c435b8df28133c87760b20b37be20c23502bcd4e10f8867c79a12c64093e7ad1be390e0168d59fa702578fa0988fd45964d7ad2f775a7c425c41dfacb721194f07034f5923caf89a2aba11e7b0bf3597df71ed8d112974e5f30eab45c2eb6704a9f0809ceb04b32120d970249992167c84c9ad659bc46caec466b26a1187b67ceb3c4e387679b54125465983ec75a2e89a2aa50653d658958852799b2d9111849982
+
+# COUNT = 8 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x0011626e2bf0da66eb868f8380e9f050698838dd226abe99fb17e30bcb9e1a83
+Y = 0x377fc68fb119ceddc8662ace3e8244e606f72a119b92439504e283528a2f7af0f550bc0c4320d087e3744c0cba1213ef65ad0f20f8d51806c83e20c83b6b858b57f4b3e22687a6e4c54a6727912d05a7db481b9d9c80b46c167b9b5e10c0659c58d5ce2bf4ef18bb54f8374f7b193d0ebc3f662e8a78465c9d4973f30f47e88ade67e8ffabc1722cb2b9388a70077c703d4c380f7db41fed84f95623f8c2a344a2f6218a10bd9194bd999cce373989c8dfde8b219a02d0dba0be1d126302fb16190e7b9f880261340fe89188fd11f0c45247923a411bc3df2da15e702cdcab077247e33e8bc96a8a7b12025e2498d28955b5df80d7a7d3eaf782b81235e0fbbe
+K = 61c2e605a09e2acdaac1929777e4ff19a0bf22427c080221d7beb461aad73ba89fe3cfbf9192c276f6ff147a1a09fce6c94d041b17138f61bfcd4ab75512a730bf7938308a05f2ce5ea4312cea4cdf735eb2ff15372d158bcf1ab8d4e66b0494c6b93c0c062880d046f68808765348fa05ab3ab6fe73e4a8d1ee6f3d05f7a0ae766ba4b24442bf0459836411ac820f25126955991db14f6f8e1ce152a11d9b8c3bf2cfac9f3641ee285b6e77751b9b43d87023f5f0eb83d7929c2c83b5a29d1a05b7d1d922fdf24a69fe83273651d9fef5865240b2e8d488d2d4503169cf15072e01ac7203df7a2e61e9735597fc23cd732458ae186f76fe6e259fcd43df81f8
+
+# COUNT = 9 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0xadba9012e967827ecd3bbbb7d37d8332b47717c836ff3f4817e6f72d5c8a0203
+Y = 0x9a9911732b3867bccd950d98db26b57c6f590e33af3c37a9878349b14a9a4779c7938192b6efc531e2bfeb139c1b95dd3d12b2a3afdcf57fc187d224de4c7876f7594dceb8d69ed72eaf16ae7b4f1665f207f0de50d6b5249331525e8d5ebaa15c432717a4f1c694977aa4f6bd6537676b918bdb8bbd1a11a50161d372c90fffefd16a5df0aaeb96a1bc3aa1b83c5764883cd5a253319506dae9ac069946c4830324c4fc5e0e809e2f0bfda6d7992152e3f30abf97eb8c5247dcb0863b79eb6095e2125f8748c6076137ce32ff6a5b2a0cbc2643f1127f7195ab4d9ce9b1e57d9ab41c09f328881d06d5a800053aebfe780c2f203815f04d639b928d732b4b45
+K = 119d87df337a53ea200a3b5da30f639b602f298c3c97fcdae05929fc5968e6cd0eab09b7a4589a79b3b0e841911e5601e872b32a8bf1bb6cd4ba5e520712b37bc591e00e8c33a20bbfc61a47f5bd0f8d6782f99d1318750f646002a6f0f4b3b8f3974608a2d3d04a358e603bf31b8f2a95953423892b4bd7dfa6fc0d9534dfdf41debd145e49cefea8e35e0b143b417672e1fecb72429660228667ece76cfb5072e1aa1af04379eb086bef5907f9f81a9bb4e0e832a3786f93c9ffa2363c1e035a1e0540a6583827d51d4d38dbd7c60c904e8737f854d493337a47de932cbaf0b4c6a21fccf5123d110eb2da96b9354fff3697ce30041885c0ae047269367e52
+
+# COUNT = 10 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x6de0eb61d0a1307e25feab40d2d39738712b0609e7a69e6a485e660dc5919b0c
+Y = 0x0f73ed35a690d3de34b5a44aa7b7c307c43964dcb990680f2eeae2b0dc5b66e2ba047308fe0abd58cad1331299bdc3f56708baa0876d48e4a0e852d61cd6be0f4bb7b2a34be16d360323a759fb36ac0d30ad57c08298eee1a276c2750f3aba527072c99e88efca8f13ff00e978564f6b17cfba6fb4753448d062b38a167d286734c45184b696e91866d0f9a43dd134f6fa712314d98c1f72452924c43770ab8b78db24b287987da26b6ee4080f9ab69c909e0c20366e7703ccaa4f0404c6b022949fc5eaa36789a0a5be1ef90a67f25c6cebe17bbb54b540ad891fd74ee4a114aa370df7140a77d94e3193acc4f6dfcefb400ae1f41a797c2186c31f2ed23f92
+K = 64f3f4df8f275d484eabcaceca9be33b2ce9b51c5a2048727ddc383ec0bf2ea5dcaf80cc6f363806798414e8f21bf3f31c80883876e83dbefd766f275f669e57201e2e7affbee315544b24b42d90259fe929ba2876491c1807d6ba6d2b61dfbf42fc91c86ef852bd2d8c376594661dabce335214e5cddc403547b1246d2ccf38ebe99daa6d1faa310c29cdff752ab55897fd30d91bb7c13da8fe5ce585a964ec1f8b923b7551c3ee644ef315d9cb8addb52203140031c101411aa4913d4c6630de8eec50bedbe103800ced184ef001b9f00729f15873298c18f9e880a206ae2c1d7e2cff1fa1a45afce9f91945588424c77fd3e75e01ca43eeb8324bd013130e
+
+# COUNT = 11 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x94a7f7b90f46b2ec57e5844be9bb86d1dac0bec1a84aa773b35e92fbe2f9ddb1
+Y = 0xb54379ef71df296b4355d5a9dd76c22e5f9a16643ca4142f9186702f9bc764150232a46a982a9798384dd88db82881acbdb7750896c6e6a4a626de1c1d6b420496c79324b16d4de7e338dac1619d892fa4738ec3e0c662d75416995fbe977536a81293d4fde3e1f6cba397c5f3a6a0803c24e9e7404e303470745edcd99ed02caf6fbd5a31ce02541a5c83ccd32d918c4cbcf231bec611db75e11886a01d4f56dfdd03e1cdc284c5ab35e29dea30f6a8d1d882dce1d52ebd131bfdb45d7834fff58e10c34db7475ffe0965800fbedc58b5bcede7d2e58d1fc8a4fb0f563381d04026737f86bd0e5a1883070ffacf242d545f415725d467bb25743d5faa6ecf32
+K = d0f0d0dfaee8b5a79efb75d1d2711f06ccadbeac579cb70e0a3d2bfb32c495fb59468fa9e50f29ca2eb10729ec5ac43b329314de21d3e75d794e201dfe257ee3f22a92b5935c4ff288d35ae1d00fc64c165f0f04b40a622117627f852251d059bd920f35f6dbbb991e0ae9025993f9d3f30ab827dc3f076415abd55533d38ae53374bde9b30a9a43f52be217c653e50ad13f5b55c078df8da30d3096f144cc37a2bada6f1aa479c29103eeebc1bbec532c6c628edad7c3c8edcc3a24e424b0c1212fe1d878c52d1e8c6f3529e925ac76cc26e5d39ea58e61305a58ed4e539fc593f7cdb34923f463def9eb5f8d46866b55a3deae0706841653f3ff0c919546c7
+
+# COUNT = 15 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x53eee2bc2f65117ec4cd8756d9eb9681cab98e6a18fd9927b436f6fcacf2c165
+Y = 0x9c91501623bef28e4ddc37719058a9eb2ac50498b68d292b43b4bcbe27aee94cc44b621dc75476e09c8d938b7e4ef82fa9f4fb1be81e7844f79601341cd0ae9583fd5404f8ce33284830ed0c674960a0a3864e33061bc3063a73765cea62cb9f3e66ac4d61b52dbbfcc7d186484d8750556e1081eafbffd9d9f5f80cc3820b8a30d7023f1245d5aa6db5756b6552ce9f18078f17ada80c9a07405133797496038df2415ae5bb58b463904f739a5b0eccd239d2d94f455ee1484e9e2f16fbd2d28f2b96ee9873c520eba5f2f05d591932c9cd9585fc689a6e2cdd6022d82a5b6c5c424568a33b7b333d1c0a1167c6cf96e9f1d61059183e509be2c8d4d2513ee7
+K = 988c2cb7e1f2481d571615fb741ddef6a8d1d5d058737e7610a56053f305d9cc5466f2c0f82cb7f2212d842dc1872416f2f9d6f7dc658bf1e4fea7793fbf2772d4cddb1d6ccb4fb3134764eaea390cbec2bd3dccb64f64815df3c47dbf4e8b9a16aecb5d4171d99b47ff2d2b3e27778b40f6cfb42b0dd3d2d9b0a13a360cd2b27110703c9ac63ebbaba5ad9233934e640e0bbd0f0a553b2e08b63a812e30fb66123d7f3835d17668c7e9729a0e656fb0071fb4a3a1c34400eb61d3a3c83d791b8a5885768c0a0920892617eec8b4663df492abf53f6992a4abaed224e7bc279599ca924a3fb6b9c7e4f4ef286f1dcb8a51a13f9fe5f49351a3c149c4592188ff
+
+# COUNT = 16 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0xcd66f16969ce85c1fed66a88cc4e7f5f434f499accae6fa1400f723c57284772
+Y = 0x5754f09d35d8acdd7b17e2f39b640b80127a549ee7accac88d227b37c3ecb5b9949affd1474c654c377b5faa9037bf456d67800572f828f9d54be1e55c7711e0d253b6d52d528c6cf768e28506b5719a2ab7592ba048f43da9fc7e0b959a432a436f5efccc623684a6e74cc8ed4f858812cf89405ec721fbaad3f5f2b129cd4c4d8713dc2617fe73ba56fbbb5ef5a8829de94ae2d6d677b3a2612b9c34bdbcd37978689befc8d0d919de5fbc96706e8749c81f7b2250c693ca1dc7f0dcf23eaaa83ec2819e5e99edfa5330cd3b9cba6eb8dc5911af270ad9c20170b74d55e0f29b0ae8c8a6179937537207044796fc2860e2439ef8991e0428b5a732a53d4616
+K = 806ad098ea1d67c6ce587091c546e922d3fb9f42d932cd53294c08ce51db53836b5203d39dae884ff15ce2fbb979a1e334f4c0f310976b2cb212be54e5fa5c6622e78a342998fcc453647975b57a71e3bd43e3fc4a379c8b66fbdb024cc260820e02410b518af3e64b2fbb69f59861da357302e204b6edeb0ce4577863560a9f79c082089868d8a7e65d571545306b610f2498ef8900488e317db02b7e6f3bd340ef98dc81a1681118e845e049cbcbe83c1154474af9cabbe2f347559e0799de2c89270160c69e94c0caea6bf69c9bd4320873842f1b49ec4b8a5c65aa4f4904525816a78002db4c3a1d4b92cc2aa28b44fc9140c73b54f989fc0ec3b69a68f3
+
+# COUNT = 17 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x3f5edb5768f231efc04a72dc5a47f5ea490ee5ecea69457a1a5abe243fa1f606
+Y = 0x7bb185e778ee3dc4f0bf891438c2ba1706cc7abc5ca97b52c440be328bfcc0332e3fb11f6f90230c100ba49e0a8ee8c7a82f696a32eef646cc3a9ab32b8856f275ae9c309b7be3438b36496f2c1e9ebf5ece0ade909ed2f2465934dd1715e08472f06b766e6e220604634661994df6f95f27ab079e55e51ac734581fba18414752522258593dc4905c430a4b3749d1180b501b918a89589649c7084b98aedc73aa1bc257659a69da5a74a68c923843d918caf548ba9d343f5f3bbccc3e86dfdb060592d518e3c43c10d2009badf7aaed4c93bf1e289cf5d43c3d1787d27383da3e0978974242976f97cda6c8a056430c03bbf4dd823f3f21f0d077d181a96d8d
+K = 1ffeb9ce6481659ce15d31ed39678e62903220a12953e55cfca2be47060f27e16a1c1ca2a59d81c588c2b873b91e2400bcac7fed015c6257291e0eca46a2323357beee93c8ef2d00b61c19ebff4baf1d8fb97313e2fe1253a61b031289a2752b4782b80db04ee97efec846d2589c131b98fe60f51e2948a417c0870791d7f303767d74f2482abbacd39a803db70fce9310a68786209ae4e359f64437fa2b7e74da1fe3a6d29551e843856642f6a29c3bd300facd559805cec40280ab96b4e2bef0031285c3d160f3f9b74ba22467e260269d70ee5ef948fa21acc37d25b6e5390b81fc5063cf14d38f9b952bf5a86b6f70ef76ee2fe7a09fe77e7176e9e190e1
+
+# COUNT = 18 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0xc4e27b1df03a45d9af64edd16aee99896392549618fa698354274832d076c15a
+Y = 0x6799a78bd72bab332cdb93f4596d81c33447ab1b83d3230c67e44b661dff21cb2877542855c4b9de53477b73eb1ecfc9c2b7d652174263ed130a75e49d41b0475f238ce93966f0a061c5839371f85f47111dbc12edc8e2d1d4f01f4baf3d8862f0188bcd9052a3ef2cb41d6aac6fd018e9969ca6b07d30e149d6a0a4210b5c69624640f285f27ac19157245fd030b940637d7ed684425ccdcf6f83e2639bac50f69db7aab75a0cc21720d3e6dfefbd197066e161237ac0b93f4ce821f68bd2e0bcc9c53d71a4294e5d497b64eb5830e8f9e1b64911bb1169c1820f18c19d3ecf4c4baa3f5f33c9c549f596dba11889510534218d7cfa230e53f0c0f9a420e217
+K = 73c97ce4d32f64d080636a729c5ec4c7ce0573e5737e22ce65a0571ccc10bf4bc6426a9ef7ed0876cb413f919dbde3b970146ea249e04c501f3e1012c304eab9edcbbe8252e7a9d9898634e323530c7342854e7582604db91814cc2bb9eeaf91b48753bd7fd05fbb053483addeeeea4a1a43e7a0f236c13c34cd2318a499ad43acbfc64d646fd2309cfb29ad7dd9c468aeb7611d5290c6476c431b281bab049894a3e65ebb671ccb2cca73c9214e8ff9f5557d81aa15788ef4855402a4628beb96640ab72f82d014a4b3cca54558a30d56e9339f18007f867118953fcad4d24238440e038a52cfaa01cb03d8059cae965ac3f5403d11e41c422a999d14b292b1
+
+# COUNT = 19 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x0f97a69357b5b62af9ca603da8fb0c38d30d0cf9ca1b4bb9dad587378ceb3d49
+Y = 0x118450e30a5459e056da29140db279901b215ba85975feb54e17a2c9b149d124eaa2af82b631e870abb2d43d377e58bab32f0966cd3cec6a56b0726d017ce1bfed426743bbe074db004db995dc0711a6d4b5bde53d96906bc2281cdf6746e39d5c1d21a08259e168db04c7edbe82a5e3297a762b6012922510397cd9b0726764c3ef49ddfc448e35fec52b8a3243484bb6257acb411feeba1cb97380d2dd4e9f0a034aa3dfce63bd506d5432a8206b12c10e762843ac44358448762d28fc6f28d0169f6854a2b4851fe81319b42bb96fad386e64f8a80401eb66ff7dd7d690942392cb898b2ef0738e0c26aca3b56cc7ee9806079c88665bc2d5e7f318fb7a84
+K = 4dbf5a174593e87b261c4aa1e3685396106803aac987fda8656fad2807a945485279270274406de3788caf152a349758760c6f33f651f900c68dde9ac0d92b57942ff137f65e17c76473e98a7b24aeaeef601b25afdb573c0e9fc41e66a26e294ecfe25e05449e8d48c1f7b1043b39c0d72e9a200447e66b76682445521e8c52b5025f28f5535358b3da4feeb333d56e8de2558d1a7d24c807667a82edceff0d231fe1a34c8bb80fccf9d0f0ca65c12a48cf94eec122e7042e7f20b762934cc77dcd1b2a3e3e4194fe39f1589c0297ad8dfc6fa0aa9d76d83fe0be920f05e2b410b75a78b0c624355e42944067009b0582015848f3cb9687d8ac8caea0411d02
+
+# COUNT = 20 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0x61dcba29f04712137c3fcfe6083db62363e0b2744edb4de5151c5b90fff22f36
+Y = 0x5ea3ce0aa2ece97d3ffa2c0c97cfaffea19d5212db74ec0ca49bd05816688ce96e91d2b14fd8173aa8581cbe0b35b4c5d6d84e8cbbb33e173991c9b6e44a0db41cc3800f587134c82ba8bf7a9e129d6bba60a4a00d961d9cd6dc1e80a148ea55674d4efc2293f9f3667ddacba23ab271a909553cd1041e01e4eb6bf5cb6e55c9d972b42bd1634451170cab5cbbbb4e3b38145af03118f64753fda50e047e6483fbc4d5f0e50addfe03588566c7cdcd7da6c641fc1b74ccf4ed2600ea2eb399b6e149b54207e80d80ff9e411338b37cc0187326942b7588becd27f0c00f9569d26e3e9763534e85779b0f6b7359afd7a9e52479a6d7d4fb97a85ce089aa809301
+K = 9c0ce218ebd9f0f895161ac96c576560b3cec0528ff74bfe10307c2533708359d73ad48e55e54656457ce7d82d03d2ac9b97002095d1f705dd0b477904c609c3bd3455176129de9ed9f04e09986fda9fe1e36fda871baf2d73f15c75d74c5af80afb0a9a3d8f10a1f415d64b64d1d67c7ea5f06dc6cec264ed45c16042bb78a15c88ab5e26d1e3f77b886779b84af41c3665c27acf35cb8af086d09f123435ff87018e97c58a88c2332171c5a3115255a4d7bc5047f86d96374acec55295cdb63fdf21a95cb65a37430258636e65b9a3496e7583648acac55254899d72352155211d6b4a6d8a881f40b356ab7e02f34c478d84563bad35899b6c463e955a0ed7
+
+# COUNT = 22 (P)
+P = 0xd5aa4e1f5ef764b6164d96641da973187a804b04ac6e2e690b27c507a610600e6d30bed2eae8486235930e5e33c1a7ee7d629c69679419b3d381a3df8dd9f1a4280ec460f327295f3b99e0252ac391c7d1f4c28bf1d2cbc54b6607f069f3ab146f3475438c425278c09574528dbab1777d273d9db10f2231c9084a737ff35ab81919b5616c16ce6c08ded4b9cf369b7ab6a0cf47a8c8408ee1d76f86ca07fff26b1261e7ad4ed5f9ad97b9ec1542bffb79406575c98be808b073a32d09d8fcd00a1d78601c4c218bb08cf7d9b3b68a3219a160d99acb341f3d91a04e01b8497b3a485814434562ef783245e8c70bc4039ef63068e0c0e94b710b90343220e23b
+G = 0xbb2f5d8599ab7c2b18f6ace7b17c216a28a6c216508224b8415f12befda4bb687acb1051b03be23bbcb286e049b3513eb52c52bcb7bd21f4e1e1d9d15c0e248ef3785c3b6862e98e6819eedad3b9c0ff1f2d1a0f7360d9fd3d0c88b222a3ad822e6f97421a5d8017d6fac656de7915c6418faf7f83ba93fa673a323f18046e55f8eca9db7257fde3f2a529fd88962e659f2087941102645ea82a15ce306ad7b49b405857fdb3b2f2807576a998aea6a4f1810b342bda2a2f07092a0a22e528f49b942219e73cb04a3f0a9af8d2a53578b3d56ef055060616ab789509a1d1d9a194d83a99dd7d6ed024c592f6087d1336fdd3f56a27c58d4c992a708a75de2c4a
+Q = 0xee3e8455d5babd1c9611d1b6f23dfd13efb0fceab1235ce6b03cffbe2b0a1fd7
+X = 0xac3b4e65ce5b3b2c2f6abd8448dfbd9ed9b636e0cffa28854a340fb7594da55c
+Y = 0x3bbe9c83b227014b8a80582e3885220388a11479b8ee4a5abc5b1390a2c173aeafa06de066fe24d9f3bc0ebb44d36f0425ff32efa263ca82a64cb0874fc43bbb6eb702f56b57b1eb250a07f321d8ef1a9359310e4265a917ac02bd5d59a9f0e94eacb4a49c38102b088cfaad9a23fbefc6a2611ad9e76b429fec7189c5918dbf07640bdedee1e4b3cc3f0f6074f84913cc7a1308e9836a133afefd6064ab6f1ecba8d4bed741dea1d3556f19857841c6a92b703747c736fa199ce74d1af36bfd144f95fa736371d35ffe938e388fe79083e3b78462a7b88d6179d5cc2f5ccd3bc79dad15a392bc1dd17748463114bfe3833cb842c39aa610bbd4e59255a4f93f
+K = 270354c2981f33a42693c68101d0730551418e942cd405afba00bc77ab0f0b6d6f838a1d82231be22dd2deb5add7fefa21472759d26fd0255db5f551c046b45575d54872045a3f8954c33f67f39396af7113729ccfb7a2c7b8edbae3c1a627c0fcddef4e4bdc0ac0c84da282cc24727b5567343213cc39baf0d3a0d9c51b12c28f553c2dc42b32e1ec9d8e45cb2cd9d7b0d439cd4f2d3924f1ab138729e80d384128b1e4a815b6254c40f7957ff2f309b23fce4d2ee5eaa4b47f76180e830bb03ff6213ecf94ef56c29ea54ec1e418bc305c6ef935f2d850a9f2a9081843f4a70c202263bc0f8b25d1242ead53fb5a1db831985b5c858e8893c66effabb16bdb
+
+# Test vectors: source unknown
P = 58458002095536094658683755258523362961421200751439456159756164191494576279467
G = 2
X = 46205663093589612668746163860870963912226379131190812163519349848291472898748
diff --git a/src/tests/test_dh.cpp b/src/tests/test_dh.cpp
index 93ac25cee..29e2f835d 100644
--- a/src/tests/test_dh.cpp
+++ b/src/tests/test_dh.cpp
@@ -25,7 +25,7 @@ class Diffie_Hellman_KAT_Tests : public PK_Key_Agreement_Test
"Diffie-Hellman",
"pubkey/dh.vec",
"P,G,X,Y,Msg,OutLen,K",
- "KDF")
+ "Q,KDF")
{}
std::string default_kdf(const VarMap&) const override { return "Raw"; }
@@ -35,8 +35,17 @@ class Diffie_Hellman_KAT_Tests : public PK_Key_Agreement_Test
const Botan::BigInt p = get_req_bn(vars, "P");
const Botan::BigInt g = get_req_bn(vars, "G");
const Botan::BigInt x = get_req_bn(vars, "X");
+ const Botan::BigInt q = get_opt_bn(vars, "Q", 0);
- const Botan::DL_Group grp(p, g);
+ Botan::DL_Group grp;
+ if(q == 0)
+ {
+ grp = Botan::DL_Group(p, g);
+ }
+ else
+ {
+ grp = Botan::DL_Group(p, q, g);
+ }
std::unique_ptr<Botan::Private_Key> key(new Botan::DH_PrivateKey(Test::rng(), grp, x));
return key;
@@ -47,7 +56,17 @@ class Diffie_Hellman_KAT_Tests : public PK_Key_Agreement_Test
const Botan::BigInt p = get_req_bn(vars, "P");
const Botan::BigInt g = get_req_bn(vars, "G");
const Botan::BigInt y = get_req_bn(vars, "Y");
- const Botan::DL_Group grp(p, g);
+ const Botan::BigInt q = get_opt_bn(vars, "Q", 0);
+
+ Botan::DL_Group grp;
+ if(q == 0)
+ {
+ grp = Botan::DL_Group(p, g);
+ }
+ else
+ {
+ grp = Botan::DL_Group(p, q, g);
+ }
Botan::DH_PublicKey key(grp, y);
return key.public_value();
@@ -80,6 +99,45 @@ class Diffie_Hellman_KAT_Tests : public PK_Key_Agreement_Test
kas->derive_key(16, BigInt::encode(too_small));
});
+ // public keys failing checks from NIST CAVS file 20.1 (Generated on Mon Jun 20 09:02:25 2016)
+ // http://csrc.nist.gov/groups/STM/cavp/documents/keymgmt/KASTestVectorsFFC2016.zip
+ const Botan::BigInt g_nist("0x1e2b67448a1869df1ce57517dc5e797b62c5d2c832e23f954bef8bcca74489db6caed2ea496b52a52cb664a168374cb176ddc4bc0068c6eef3a746e561f8dc65195fdaf12b363e90cfffdac18ab3ffefa4b2ad1904b45dd9f6b76b477ef8816802c7bd7cb0c0ab25d378098f5625e7ff737341af63f67cbd00509efbc6470ec38c17b7878a463cebda80053f36558a308923e6b41f465385a4f24fdb303c37fb998fc1e49e3c09ce345ff7cea18e9cd1457eb93daa87dba8a31508fa5695c32ce485962eb1834144413b41ef936db71b79d6fe985c018ac396e3af25054dbbc95e56ab5d4d4b7b61a70670e789c336b46b9f7be43cf6eb0e68b40e33a55d55cc");
+ const Botan::BigInt p_nist("0xa25cb1199622be09d9f473695114963cbb3b109f92df6da1b1dcab5e8511e9a117e2881f30a78f04d6a3472b8064eb6416cdfd7bb8b9891ae5b5a1f1ee1da0cace11dab3ac7a50236b22e105dbeef9e45b53e0384c45c3078acb6ee1ca983511795801da3d14fa9ed82142ec47ea25c0c0b7e86647d41e9f55955b8c469e7e298ea30d88feacf43ade05841008373605808a2f8f8910b195f174bd8af5770e7cd85380d198f4ed2a0c3a2f373436ae6ce9567846a79275765ef829abbc6171718f7746ebd167d406e2546acdea7299194a613660d5ef721cd77e7722095c4ca42b29db3d4436325b47f850af05d411c7a95ccc54555c193384a6eeebb47e6f0f");
+ const Botan::BigInt q_nist("0xa944d488de8c89567b602bae44478632604f8bf7cb4deb851cf6e22d");
+
+ const Botan::DL_Group grp_nist(p_nist, q_nist, g_nist);
+ std::unique_ptr<Botan::Public_Key> key;
+
+ // [FB - SHA512]
+ // COUNT = 5
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x4e2a136cf21a94b4c226fb5c6a4e9be1472acffe8dee6b20f987b1cdf90c6a581a69e2ab25e3615e9ee3681edb2c468af9142fb2d2f4b7333133e107c829e60d00e969c432a204105e75976eea05ee0988dfbbd01cc10d816908b0f616b620d4829ebee50ddd1733d025ebe5abf3d069a3424ec1300d582cd442cacae6f09760cb5f4195fff6fe0c85ac986e14a8b232b33c6f5e7729e0d38fd42fe07f646816e01c6784e029a03663199b2ea6135aee2949f9371045ce7c24a10acd193fb3ed5b53326bae54bf5928fff5548d0877555260ab4475bdade168211fa3a1df87510b08796ebce5ea742112ca7942a7a602d106007a5259624aebb74fe771755050")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
+ // COUNT = 7
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x347852ff2455951a209b19bb1b8a121f5c77c7899ce540ecad4f740aa14bb6b44374a5d5f1427341817618c6d64c49895d77ceeeb04c3d84d0c360e125cc88ef0751dced4e795c6db1819b10f4d0260ff430e934751b1fef76bd0f1b76d884f56c9c8fb008e9a11f5bf52270845be85d792aa041c70a80d7d5f36dfc6a397b5386f01b09f3e50a896b71358b709ffee900e0edfa79bc03d3aa5a5aed148b92dd859c65bd0aebec19ccd1ec327894242999ea8623b9ae9ff1e71a9deb6c5876ecd9e9c4082299196cd90ff8ce87d697888651d1022e418f47305e685057f0437bebf1b5d77887d2bb3cbd936d7a4a4e948962f5e940bfbca7216ae8dce27df3f4")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
+ // COUNT = 13
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x6ca0b830ecbd14bf83fa4c1953723c2ddad8fc49e43e10247fec75507258c17b8a48fccc246797369bb45aad921f76ba174a10d81966668f62dc9cd739a9f19839eb26503f4e7db63c14d706a5b44fe0c5a8f7a343941db5f15a7af008e8ea511ed7c002cf949482d50f35471bac48b1594178c9da13c3264bd86181f9ba9e3bd35aaf23c753413137f0a9eca8f52cdbd33d6a4e4bdc14b30405c5175a9f9b54d9f301a39321623d60133910d424f0985ae7478e1865241d096a07d5d37bdd845a85d7d2ae80f3b973827864a638be440c2e10c9ce3d062cd5a444f774cfb981d47baaca437d10756328980f43615245c3137be8bece09e25614f793f8c81c1e")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
+ // COUNT = 20
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x14065ecaf934ad595e18264d51d79ac23b4b7e82f2f9be8ded8debedd99d59e43f295051ba53bfcfd9bcaf9488641d07e5fd9d1bd3e6ade4c5afe53521d085277d9739ebb70dbc75e531aa2df4ab9f5e9a5efb203c4d9eb2267ca1df7242d68f4fd95a3dac6908a6e3aab3153b27e09f244faebd665ae3196f3b119ff8d1ab30bf4b625a2f30c18c347fb413c02792be1e31fe5a13ade3fd6d068ae2d9e8740707267eb15d326ec0171b90153e2368690160c4073af09885bb215c7a73faf445e24071d5d502803986c6a54288aaf947b67a716d181e822807e82cab3c2bc56620db240a646da43c6091a7ed15c9fa14c7c3a4dde7299fbe908ef65a7d3b29d4")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
+ // [FC - SHA512]
+ // COUNT = 6
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x0596416ae996328fe5a617575711a34ba575a556d4db035ea6c815c8203b0d9f7ca6c7a94cf661196808053edea255540543b63c40ba87f69f418051c3f06394527f0a2741f0d16ee94db40888edd85d4f063cf4e1cfd327505f83a2f3fdf0e83ac4a3f07a57842b15b4cc8e4f14f56ebe01f8dff21609ed0625c99d3745c41219b3791a5a8b544f5f9a891095db63d8be4a0c5b3c9520da5f307524552557b908ad7a978e6bd54ca18f7d55dbc3d75f961cb46d344fcd88c98c56c44f028871e847a01ea8670f58e990fa402a5040d8c7fde63dd38edb5dea1850d193ec53077444517422464df2c463465c169675999e3b0968bf03baf013fcdb05ae484e16")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
+ // COUNT = 12
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x71a6d5dafd1ef49d84c4cd15b47a9594d05199c3be2190a019ee52c6a844b4cf7a579b7e4d16d3591acd1a04e9298f3d3e65f66cc48629478baf16b51f223f8f13b5f6625ba1c013f078361b0fec44485fedc6a84841e744fd6fd73ad716f55bc9f1d18c45a3d7fbeeba754a3a56f215298ea037532341ffeec2a25a91d9a939ea8607a640ad7731612bc040aa98df944bcf0b37f31389deeae5766d6ff1fb21504689ec1681a71e77926f2602db5700415435eae90dd049c5091d941ae5ea3fd542442f2cccab30869f80b51b9002efb0cbcbbea1e45aeff9a92e3d896d722dc8cbd14211db99b40cbf4ba52473da790ea6531664d98d1cca5d49dbc55dc154")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
+ // COUNT = 13
+ key.reset(new Botan::DH_PublicKey(grp_nist, Botan::BigInt("0x15d3595dd8a4bf905cc739c92895135467bcadd3ed96e10ec9a07fcf8a1c693653dcc6caa8ded43d63b856f4516e73353557ace6983be82f4c8ff627ed04f3a2d31f9a827b68e65339fdce5c209d801f2bf99ffed9a5965233aab227b5b11926fb1981660f2ec274768cfe9729e5b72d9b3073716885a69c647e3469f6267eaa77d24c9068bac761aa9c0fb0b25721637fa99f4c4c3b76b0a2a3db7507d66d1bdbf922b10ad4105c05ccb96f4874844103e5a1d84bc46a086fd6d981979f7662695d0c1fed108b942bb481bce19328c9e0834348fa251341088f40a004743958aa5b61ef3ab2ef9be7d264334c21a33b695348f169ee244ab5f2bb92c6ff71a7")));
+ result.test_eq("public key fails checks", key->check_key(Test::rng(), false), false);
+
return{result};
}
diff --git a/src/tests/tests.cpp b/src/tests/tests.cpp
index a6b6bf802..e18603b2d 100644
--- a/src/tests/tests.cpp
+++ b/src/tests/tests.cpp
@@ -672,6 +672,27 @@ Botan::BigInt Text_Based_Test::get_req_bn(const VarMap& vars,
throw Test_Error("Test invalid bigint input '" + i->second + "' for key " + key);
}
}
+
+Botan::BigInt Text_Based_Test::get_opt_bn(const VarMap& vars,
+ const std::string& key,
+ const Botan::BigInt& def_value) const
+
+ {
+ auto i = vars.find(key);
+ if(i == vars.end())
+ {
+ return def_value;
+ }
+
+ try
+ {
+ return Botan::BigInt(i->second);
+ }
+ catch(std::exception&)
+ {
+ throw Test_Error("Test invalid bigint input '" + i->second + "' for key " + key);
+ }
+ }
#endif
std::string Text_Based_Test::get_next_line()
diff --git a/src/tests/tests.h b/src/tests/tests.h
index 824f23304..aa5208325 100644
--- a/src/tests/tests.h
+++ b/src/tests/tests.h
@@ -436,6 +436,7 @@ class Text_Based_Test : public Test
#if defined(BOTAN_HAS_BIGINT)
Botan::BigInt get_req_bn(const VarMap& vars, const std::string& key) const;
+ Botan::BigInt get_opt_bn(const VarMap& vars, const std::string& key, const Botan::BigInt& def_value) const;
#endif
std::string get_req_str(const VarMap& vars, const std::string& key) const;