diff --git a/.codespell-ignore-words.txt b/.codespell-ignore-words.txt index 5c0c89e5..8957ca0c 100644 --- a/.codespell-ignore-words.txt +++ b/.codespell-ignore-words.txt @@ -4,7 +4,7 @@ subspecs crate crates ethereum -poseidon2 +poseidon1 keccak blake merkle diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3702e08b..7053a0a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -119,10 +119,10 @@ jobs: - name: Checkout leanSpec uses: actions/checkout@v4 - - name: Set up Python 3.12 + - name: Set up Python 3.14 uses: actions/setup-python@v5 with: - python-version: "3.12" + python-version: "3.14" - name: Install uv uses: astral-sh/setup-uv@v4 @@ -134,6 +134,7 @@ jobs: run: | uv run pytest tests/interop/ \ -v \ + --no-cov \ --timeout=120 \ -x \ --tb=short \ diff --git a/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py b/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py index 734f6cfb..5ee274e3 100644 --- a/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py +++ b/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py @@ -33,6 +33,7 @@ ) from lean_spec.subspecs.containers.block.types import ( AggregatedAttestations, + AttestationSignatures, ) from lean_spec.subspecs.containers.checkpoint import Checkpoint from lean_spec.subspecs.containers.slot import Slot @@ -456,7 +457,7 @@ def _build_block_from_spec( # # block_payloads contains explicit spec attestations only. parent_state = store.states[parent_root] - final_block, post_state, _, _ = parent_state.build_block( + final_block, post_state, _, block_proofs = parent_state.build_block( slot=spec.slot, proposer_index=proposer_index, parent_root=parent_root, @@ -464,15 +465,6 @@ def _build_block_from_spec( aggregated_payloads=merged_store.latest_known_aggregated_payloads, ) - # Sign everything - # - # Aggregate signatures for attestations in the block body. - # Sign the block root with the proposer's proposal key. - attestation_signatures_blob = key_manager.build_attestation_signatures( - final_block.body.attestations, - attestation_signatures, - ) - proposer_signature = key_manager.sign_block_root( proposer_index, spec.slot, @@ -483,7 +475,7 @@ def _build_block_from_spec( return SignedBlock( block=final_block, signature=BlockSignatures( - attestation_signatures=attestation_signatures_blob, + attestation_signatures=AttestationSignatures(data=block_proofs), proposer_signature=proposer_signature, ), ) diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json index 78197d5a..158b3a8f 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json @@ -1,6 +1,6 @@ { - "attestation_public": "cd64341d83f28533f239153535b45209592342325ed31a5792b2e61935648748d41c384850baf6386c43bf19bfb63f53eb2c8c0b", - "attestation_secret": "dc34cb2e1838ddd848c6dfa212d3b1ceb7aa7964769e241963834c11c441d510d41c384850baf6386c43bf19bfb63f53eb2c8c0b00000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000f3f0ed2da9b5bf259e55155af62d6c7a3d62db360a32b47c78d76f601dcc464f76549d1be95bad257dfea8682401b70dfb02ed4324bb3f2615fe2d34aabe731000000000000000000c0000004459dc571aee1d106487e76807885f310ca96f59e01b974ad71e2a09be5e42657c42b82c318c54084976ee718192366479c5b43aed1dac54927f017e10dcec3000000000000000000c0000005e89f300aee4057dd072396d451e75432d56223070093031e75eed49df04834eba5f42058fd8df74f790824c2ab7b54b6a905d4587bd356659c5c1104bf2522a00000000000000000c000000f29b3e2924c84a332c059b33b6dc3d1dab063c47cc6bcd6e45acd9679e1e405a8deed17ddd60fb35cd3387701de2bc5a5feb6729c8c579783c1a863413e30f4600000000000000000c000000cd64341d83f28533f239153535b45209592342325ed31a5792b2e61935648748f23dab31177e147114a45508435dfa24c2b2ff40c39ed82a619a7a3ea2a82036080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000d433943375c51d4b12cfed48a8ecbb5abe2e076e1365fa77bed46e73f5f5de467f15f14b8125277326c5242869ccc76fafdee8619fb6eb71677abb3e01411810109fe220525fad0456669971f9161d131e33351e7a528954ebbbb8571bc9847d29174d60f9d0526048120c764851bf3620f480433a820e36a3e4300703aa2b6b5a538f3ac4a2ac368a19b631eaf9be5dcc1b4949fddf11568bedc31684bc5b3e8f66db3e771db1188d4e0862b9da8e1562d63b3ad8eb41126b29c62aa3a95744a6d41c4147f52929bd6f4a1b83f0d60b69914923c0e9de5db0f1344796d1d312734e666b5c658b6ef4db660e6c99fd3cc5d1a55a4b0e9b5addc3e13ddb58874f4dec8855c926c014f6d8fb3fffd2535ca4638e2738b27154251a2032c34ec03dc5d9b058337cd920e29f2b5f54401a193a91623f3bf0c6547d87ba5483568069e2afe259a05d600c2392da299363e46cb43f104c54debc5e2e33d575757e004a627e3d42b4610406152a0f56d06cae447c912f22e63f80521824a430827e5d392fa98a1833eb534a1c06f615bd0b0e2cfe9fa9483a3f4e739c65a515a2693b60cd9a6e7903f218060c046226d200e3477bb70e6d3618ad1ed975177c81db6a1caa5e580e874dbe770e7fa66dedc26a123a958f0a6c5e201f26c839596daefb08fd02a62bc06ee169360918790415271a4cd7086619fed744055ffe76233ec93a00000000000000000c00000029a0c31f8b8eaa4c934738086ba7da13123a393a3e87a6797820da66bbf36f0789fe66633a68d4406fc24a3a50c2a209f3e2673c4a9d8f4d6e79120fcba9eb640c90767ea9fcfc41ec79642c9d7c7c5483657412e69a6760230d4962454e414fe3acc14e0f2d6a7915e57a1699e2041dfef42f5c0ad0ca2fd64d74020c12fa701b4a3b6bb850e818dbda6850c3203d6e51009e07f3784f352768a81e84ca4701d00fe94a1f6a675f78bc7f357f532f5e4fab5c7c233e5a73faa189089f7ade62ea411345d59fc36911a66e58ec43fe7bcb2e2f0c9f7bac3fc28b431660dc19553c965d4fd813a8515cf6882268d4ce5acedc8c4a44fa1a6da5cf481ff085725e00000000000000000c000000e4f0590a9c867237d72d3c23e7548915ca4b9a53fc591d318e746047510e81032bf8ec1fdf31e17ce984093d5a05294404a273175c41ea1f3509d4596c102d2e4678a94e0b2eb646f7faac2062f10e6665df564236065c2a8ba2f14d9ed68d2ae857c917bbc55f30fb8dba6d97e9767a08e9e242dffd44385253802c87d0332900000000000000000c000000ff657821a1e5322176d55f1caf5dfa35f1eca322607ba641ff59120d86ff153b5e464b267f7c473760d21336936f5576ce125f459e1cef75d1b8ff488818865000000000000000000c000000f3f0ed2da9b5bf259e55155af62d6c7a3d62db360a32b47c78d76f601dcc464f080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000c3b7e47113f8fb4056951a28ad63ad3feffebc53d9c0a23970817c4843a8f17db855234ea5c707203520d65e9e7c482ab13af850d8750c73a5916347dfe50651c00b8a276d6aae688518812dbe02950289a49870a416110dd36a512c553d3a020181046b9f75566c1e5a4164f11d117b86527f323147cf0435204d1485da7b30210cf86241669e2b4d5c856ebf621f12858732739d00dc4d2453f1267bf51d2e24e36c098beca858456e5e732c09087409949004f321906624d4d95557fa490df1d4901116d1fe2868d7bb634e8c25512a5650173e75b73e7cf56a5ab894ff743127a47e1d6e2c313e1a6535853d6023125ac45d9a91a205fd17806668a9a12227ab226578f0c64c16d8524e2a0ecf383400a64c41e458136cdf746c6f82cc4b2f2e0f4f8168af25b69f6856585c0e76e835475a8c72500784e0ac22eaec35671e2ee91a88513061d4bb96189b6b340ee7cd1d44e5c26168975d2e6f7390d461459ac3359887e67c070d5e229d5d2b5122ce90504d71a060d7f6b437f60dc5695f3a3735f97ac11fe7c842732f6db46106ebfc6c734ebc619aadc11704d09730180cd07848f9f16691ec7268b402d05af3732a008c92302933c06d52b76af97c5a9f3c1050a9bc5201e26d1d4c8633672d80941aea4ad73a35492346515f822f22e05a0a3c617c21d856891feab7b62d380b8e739d46d13a92e6c07468b5e05c08000000000000000c0000006f0484548c399b1cf2b0080b714f0164fd6f9a59e7213066907e0f0395f86b4165e0115e4f52e05306b1fe08284fd841b7c6f11367bf6d1b6cf44f0bb033e55912c34c7393ec873da289df6bb3163579596b9207d13bdc63c2602001233b260f6ad25d6be5529f06b7d126766b0a6949be5246516dd93330f970be049a305b2e75ed16372b0763399ef2ac34973dd31986549f5aba5358035cb9f04d3d701b2fca41d25724eccc2476c09a0fb4eff81632ddf858bb1bc13a3addd06040f9b42aff3629620bea02773ecb5e6ffa138a057f89423ff4fb0e7864327750c52f8d43f5f7a0561fcb912cf23d863b4c95be6a3d695d5955b05f1fa96ab351bdd7bd0704000000000000000c0000002b66de1a9d91f42df231d1079619c54d6351bd137e919608f2daa20de94ce218288502718c03f837cf7f5f14e6a1904b1e723b26a52d2b51e8af9d37122f72553ad62959c06a650fd634a7366f26750ff0e96f27ffcdba688dc8d439991d6823f1098a7239c79f3f7cdc5c121e9e1235ec2e1e7b0932c63d4fefc81ba4fa3a3002000000000000000c000000da6c9871caca726641fc2d3f76712c4738b8c2382038bf7050ecfd0d0513065d4550e57514957c5dc8d2626b5a822e0d8e7de86a1d924f67b680a72038ecd45b01000000000000000c00000076549d1be95bad257dfea8682401b70dfb02ed4324bb3f2615fe2d34aabe7310", - "proposal_public": "5eba321a84f55461e2c0e94036d24e5107720876752d5c4f6e03183a7e7f1856e372c60dbc6fbc0450c26e58ba402f1da6952a73", - "proposal_secret": "633d36908b6524f852edfd6aaaeb4ad7d64eb57ee97ba3a2ae624951efba43f5e372c60dbc6fbc0450c26e58ba402f1da6952a7300000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000206204602bfa254efbb6bb7dfc36022d1ce7126fb895f470de1f8c50cb1c47678a62c444d4f46645b1e7bd596d286367f371641f9410c01cc78cd42890d1b01200000000000000000c0000008775217baf83ff3ed1b3aa572e9e837b2479e44a62a8532caee3c04d1acd6f28ca0de11d58873e72b6b28f12cf7bb77bf05b9d5cadf3ac71c3fd563b95b9c72500000000000000000c0000005bf05e5c97ce8a258d71683155d70c4a464205151828a16a9e65b94f75dadf506e76682ad83b0a2be07e16406921811b64a9397ae56a72765230054b4c7aba3500000000000000000c0000001f8a3026d773047533027b70579ab35b43d20716d97ca26bf6624f498dd189569bdf3e5855cbe83e89d8942f2ea358511c11b67b58ddef583280c62950b8e83500000000000000000c0000005eba321a84f55461e2c0e94036d24e5107720876752d5c4f6e03183a7e7f1856f4feb9669016ef4f73a6d37955f9624fea33670b5dbe1b2fdb8b9f63ba932633080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000007665202caa89be164276a46d18d8fd7b7e56d322a8c9616a5608e613d9f97f180645ad4f2f4f36618024fe29f8211d0b047ca82c1b6e3b132d32077644e6d409b72f4866591bca6e05f74728fee07328118a51638aa0cb4f6fd0921dcf5255778a5c1e4c695b6c105eae036bb8883f364d33820dc9cad454f3c7dd661e07fd778cc1527e5e89a25dc1737c4b4fa5c6139b2f112e2c7bba3ed53ee304dc68942c13d1600b101d1d175ea72333a8f7166fa114820dbeb7415f462d457cc9969562dc57b13148a3877ac5feeb0c0153322d82097a74e1984758524ed83bf26489368ec1660fdd8fb24efe363931a015e83bcb48c954e9c785192c66e83fa6738541c772be062252d1525ba54c208a7db55cd69c9659d14fb1145119bc1e5fd1e74a10e24f60a595f91e5ad98157dd4a000471aa99725ab9ce6b099b8d167590643940387d1b2a12b306f9c7f15cfa45ee5fd2203446a464275777aa50431dc14e442389a03ba61e21597f3643312faa2420562e026b5c1d43728c322e7b497e3538079b0512bc380930c556392491822a0413b65077a12f052734efa025d386f336aa463e3f8df52d3cc049073881ba085db9aa743988ffa706b470df0ba2b37c586af2c1536db72537ce564478bcf5c10c7808e2391d53d708408ce3786d65993c365d1d387693cd2d98d8922fc72fbf317b4b9e67a9dd011c204e9369cbd4943d00000000000000000c0000006dafa31ef8f33a145b37584c21c1d55537843b1eb83992365f89a62cf9fef84db4041d0eef298f365065fa5529c2c01b3ebc827c7b8d9f4b7fdb812d6abe395fd427556e50c0a90e99e7ac38b5a3ac6a85e8f916a6e56d7ab9b2d90c06aea72e42301b253ab885782b708f020e626c486deb427847275540f895445e1afeff4e6270577cea763e0d2fff752c5f571e5d80b6c01fbfd2fa75069cd2708929b76c70b49e0e1e17f41dbaea7856178f6f2bb89465218d1b517e6784123d1ac3e05b5df2c93be3fc7b5e989ef853bd87d141c6923763ed07914f30f02172cfd9e34b789de74d7cf97b6bc51d6c08cec8571dbcabdf58f655bc02d0abda46a4b76a5700000000000000000c000000e2bd716188ee9155a2a61916c566fb7640c10e58c92d2a5dc56d83734c76a039914c8d1b71d84d04191872221a040e64d437ac7c6d9da127fa3d2829e35ede12f49adc00fb702756892483091eddcc79adeffb1a2a29591639690b71a6b0614564ffeb55d0db3e4081a1d515514d3b764234111d5798e50502a05b35495f123300000000000000000c000000ad8bd3207b68a73b95b0ac1d145cb9622fce0b649b02c5604e933a2ad507264be198e17dcd3ff758a9e86e7bb14c9e06db4ead40b3a8204691a4dc32fcab041600000000000000000c000000206204602bfa254efbb6bb7dfc36022d1ce7126fb895f470de1f8c50cb1c4767080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000022f3095917bde63093c6940d7f261034459ab81e0dcf9c3468f4724cb3150f57d3a0535d7665c07039f13b0816197e6d30935538b60ab427e60845206ae56d1c20ac3628780c98197a9bff54b6e48120e994271cc81e6d2a7536a567637ef0560efd753b07768a758419d05890ac5e32dd552909630bed601ab81f6507f7b962306e2813b703a013d8d23b6dfb9a821e83d5886e1ea8e3272238040f92da7f63ad7ce8071feff01c6bd73e7e2ad6eb72fd9e623bbb5d365d3e68ef6a4d89731a4535aa10123058683107db746cbc712e6144774f9648ad3cda680d12742e8c6045534338cd04f55bda883428390034449c49333c29641210c911034a517e48366f852c0c98b7ce1002e20c41e192a05ee3b2e33dc25f9a0615c7517d1bf6f700088b36563178f444ca5ece3deaf5b35b4d4e3f0dd3a12f410eca360d8a70dc6d7d75ab669d030c610091a4780756a532bf3b9a4ab5639519c1456f10e7201b6885afd824c5a4db62a0d3614b72cb647d3f67e3275d6d461820681626b34d990bf38c2066e5688e55ca40da5231d6097dd089725f55b6ef0a5e8e683e79e2356991503d661493ee57b1496f19a08c531ba61b574ca1bdd8696f5e8c0642170d4fced0456bf215bc0f9139dd39ef31174b99d00b315b4acb41c1346374b0f9476ff809816723851304f2ccf50ad695221456d12677c69111017c09c5770b55b53c08000000000000000c000000e6d095401507765f7b59993fea972d6aa290355421f70536b0a378586543d12a338ee418fd9c8377feb7c82fe4ff386cf7657f2fb0268b588f065e19ddaba801cbcac9340786fd75566fef52c15def7a0d952473896bf24cd3b7471e261ea37ac95afe479a0f5a5e80d2557496ed06439e7c5412300462762b218a4f83c91c147bd87107be7a374451e1cf430cb77c0d1d8c0b55e306813fa82fdf0f724e5403f3c6025be7c319637d67db6ff2504d642db1b910db51ab1aa37b3076b7aec03180d56e220997c41e464c803df7e4090301dd2b7816c26074d682ae2abb0c8a5f03f97a43a296126117899d0dde215403037c594a36fff42a4ebd874b2cd4733e04000000000000000c0000007917fd01e7430348f618484514392e59d13e3862bc84a05d30ebb93e384e7a302d765f3b3bd79d7855a8102398abc3113ea104757de06f6266f09858059f4a47bd90fd4c0f20210e27fb6031e6ce5e28be022507d5caef19a163e60cc927fd02ca37b94558123e308da63f26cfa3877e91452173ddff511efb2d030fd736b73d02000000000000000c000000259b475704733545355f3053446a386dbaf0b31aa5401a475917155f14c7eb0649ad093b35a33a7edda40c2b7b2d647a65e38e6a193e451e03b99b46be3e016801000000000000000c0000008a62c444d4f46645b1e7bd596d286367f371641f9410c01cc78cd42890d1b012" + "attestation_public": "80a6f13b39b9c26cd91edb542bdb9e051b61223a15f5de18e53e6a361720cd65c06a114e87531241cc535f39156f0f2cf0877647", + "attestation_secret": "e96e640ef019b5faa0a2d0a611700fcdfc7c9a609cb77f6fd3fc68b5a59438dcc06a114e87531241cc535f39156f0f2cf087764700000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000a310405b6a973534daf7ca4049d2aa3a0d9e6a7c7312192e99e3e37966aa225bb3d0227036ac4c209de1c06f266eb633f14b0e0f60db7052c1d70a40b90b911f322d903034508f57d327ec494272b301b9eb70732959ae387510435576879e4138588046cddfd150c34f6b79c5230163a18b815a422c2a57e6d79c5b0a2725499c66385f27d6c63ed1fe8b0d7bba582a0d16c031a27b3530123f7b47e6f812467597351d2a9ff00c6227523c9dc212560a64c323f7707f6c740b9924601acd46fc35c35716d9f56193def020aced0163fc6bfb6ef06e310a5b31c8119cd3680dafe9bd0bf0d3e174fe7e2331e870f419f81c73607e1c1b1096abfa6f29e8901100000000000000000c000000782fb902d2ccbc2904520a6777ac4c5e9609af2ac204646aa19c2838f03e401e553d7146cef1003249c6ea1fbb43317d4e5018608d7bdb43bbc06319067b511df9ff1e0a71beb65dbbfeea6ff383d06aa3ce206f299a847080f1b3715741ed55b8190000349b1b634974b429e3ce1e2da080b65108d17f2ee57f07688d1a1e4600000000000000000c000000ae91e43566485e2804d8f3178c3c5913ae15070bb83a2961b8524f3eef4036503ead3351b4c721344dbe3273593c8f01b1d0b205566ce075be746f7235a6901100000000000000000c000000b3ab984863e8b210d1c2a97b7994382ab96bd83fd466da188af94748f9e4d97ba81341658de6e5087ca0140b6188122e701b5a7785fe5d0aebefbd28b063106b00000000000000000c00000080a6f13b39b9c26cd91edb542bdb9e051b61223a15f5de18e53e6a361720cd65dae85e0f4e1e564cd95f0568e866d62b60c1c679a61b997112c0e16c9169ee73080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000df6a537d6d506502a94f8277034d5d322194a80dcdc6684900109b4253f5cb04c402fb7968d9ad385e8ca3702695221b819f864401167515aa743224879f956e36f2ac247fb9901e2e72b64ae885825441c13d70d14deb25a338ad007b4de433b4aeb54c303e4d7caa1c0638143dce0a0ce2f1232346e92688572d234e736705f77fb77d27e3122fc3f5de65f8f4c642729c925ad99e9f51dfcf10778332641e4544b7330fe448764ff77d6a7c09595be1b1a0021e72c5448e01027b47950f315d66293c0cd94b6fa67447309e808364b0dbc1365adb795759ee1c2d004af0513d627e6be87db13a10e7e55fb78fe047b139d92550c5e02fc1304b51a63a7c3c4f44e70c39e6ef01b9661c0a4cb1205f12eec10ac6b40e28b4d282088134e03fc15f2c4c71ddcb7ef8f752499e3fe666f947c044de5b2200d82c446f1a5fd52b2013ea7bbd033b4b0e5e473b5983fd2eb062ed5a51d1411c5938702cf3520f4b3aac201cc6fad6173e243e074b38cf63250feb51c85d8c4b6f36916bdfd6286e278b3661cdf1aa74ffda4472f39e625a5a9ce166cdb2583ddd003451d2ef132bb2df202e51264673937057174fad836006d9f4748c546b6d0a087f73f618685e59c71c08d8af6a4bfe0a467d689897049b792d1459051e103fa2426615c5c73680faf650ec1a7d2144cdcf24f2a41867c082ba78308c8e4b2d79e971b4c4050300000000000000000c0000001997d03acfb5775a286925216d8bda4417195a2efa8f6f029c1f3f6cb1a72474ab96876e42a2114d0b206526a353315f8067a81ce2e1774a02cd9e01cdef574d0e1c8c56f6bacb2a5c00ea58235a2726fd00ad6a503eb022b520c31e43a0b56e7d6c1b6578c1a024e0111b65ae6938018ba22648361f8e6079821f081dc8c73780993b3a6931632c5a8cee1ede0f5336b126737d21983a508836cd548c85c91e8bd7e04eb5fa3256b322017b6a34f25ef270096dee6b6167afb0a5467f9e7a23970e715aced68b20197f7877dadc693422f5795b5eae0c03cfb91a346741f075972b5c12f0f73b3c90ac1705ae7baf3e5ed38a54a26ffe3be91bd6261322561100000000000000000c0000006855d45ee7bf301b2945394d90edaa4284fd5f230ca7dd77413ece1215d71571e8f7a244f92fe95ae1dc182b18e7f12e1eeb8474214ec67264e4c32b2b26a516e34cc778c1fe3f08cdb09059ef036a0e07a9ee04d222f216b8bffa5e26aee364157bfe4a43b03a2058744452d14c31775d5560501b525863eeeda90ddabd607200000000000000000c000000cd2e6c4e347485355988f4662c3d1a4ad9693a3028c8f933f10ffc540cfdcb1601169e291154c42baf8f4406d09a071ff8e0397385069c3e7d90f724f0742a0100000000000000000c000000a310405b6a973534daf7ca4049d2aa3a0d9e6a7c7312192e99e3e37966aa225b080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000070e1477bb194267680ce3c3f567b552227954157abcc5d5a075cc223a35e97648f29d320914e7b5e3b821d12961abc33f027b10d7937af54b197cf6b9265873b9518be207d1948238aee3d4574becb147b71164ea12f36375fb1f914d4e0fe18251d6e162423280e76a6601a4081d479ceaadd4fd72dcf5487da56114f0930750f21683a0d5af966f0302774d52ab5413045b406fb206c7bcd0aa36775cfd25ac7b3581ea71f6d43cd824e5cac415907075ad612dc7e810430eff25ff3048f0a2cdf61371e3b834d73b01c5ba82957767bf8c75d43d3354591d9ad331192c47b9fcbf362c8492c347ea17c2f13ee6d5505656f74113b482ecc22ff0601478b770af50267e3f82e37b0089a6533e9d90043ba44788688e4136bb9a505a015796128429f1af3547a315cd48a0f918afe1e8e36ff715472264b35863d3bf5d4417d2f2e8826c4b8175c47c9a62f0aaa3b75d033ea05cd87a373e67cf8352fb6c645e4fd3c177dcd696aca99083ffbe60a46bbcd444270547e592afc2c56b5248c77682481360177a86877736e725f3c5d5591975663acf80c4414537a1d2beae25e5a747d7cf7acce4bbfca4f2c51226301aedf40737e07284b525b115679bb99314b944f28d414034a3a66111aaab37b1c259f4659703b1e403043fd73a1cadd36d04f761381e49f262f1de57aaebf3d397ea37546a4c2b5391a2e70470dfd532e08000000000000000c000000376a71353352204a01e02159017b8a3e78594a4c0cdf214a58b0cb3e182f9605cc3b79381fb9a83e46c8fd5dc7eab01ad1fa4e3de6c82723e41f955151a53e28cb4f32503a3d5d6b7ec98040695b9d1d7b713c62b167db64c0bf5939329d1f7b65beb92b86fd440b99350b3c463ff14fabe66a008c20a22d13f5f62a5c28b6151f089d66ac167d2801c6a72c55a6e81d2a0cf07be925f01145a27330abfb2f364e4cdc2e12b7a43096b4cf6e7f9ea86946516a4e7791682820b90a3a55dd5c281a6033613ddca04803c63702b2f7b22efbcb5543d3912c0a82471f6c5de31846b77fdd6526d33a313e940c78fc6f1902dd099c4308cab3244b27c730ede3265104000000000000000c0000002ddca138f712240484fa070e6e0ddf64db9d10744267055a3031096d73ecc134d8ab7b0dbc24713140532934a0f18a5fd59e121f10f8ab13e5010074ed077416d890794d1054a9077ad6ea241e63ed5ae4bdca385994ef6b713c7f5183244562ca859728cd01bd68006f846cb8ea530c73141856189e4b706c3afb4422f5395302000000000000000c000000a87c764675b42a325971285f8f78421b236ab55ca4d3594db919b05a00baf01b7fdaeb19a9f28733ce89506decd078153b0b010ae4092626273b7a6a7f4ef51801000000000000000c000000b3d0227036ac4c209de1c06f266eb633f14b0e0f60db7052c1d70a40b90b911f", + "proposal_public": "dedd8e5a890a2c339ffbca1ce85b710384670508df73ce33116bcd60befbef5a560e6304e3635a58e12b6b542c1bc6583a16455a", + "proposal_secret": "8d8b377094dec40853220281348fc76a911daa85c78dd66a110143585a391071560e6304e3635a58e12b6b542c1bc6583a16455a00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000e8bd295e92c602470385ed2fdf24ab215078b804cb5db7071749ae2cd30e447010a2da663acda228da719c3b10319e36890fe2162bc49b1fc971013d90dbbf1dce75bf3d4ce8de645a26073b162ec03906802b47f51a84395b438e6f67c32a392aeef46b57456f7bd3910f2de717a75d0322286af110f56bb082373eedaf992d01ec141b06ba77098252ab754759262f249ee54216ca281365f9c22626d69620e4482166a7ddbd7da12ca95f747a656b1d349518d1e2c11d4d6b0a445706937c88c0dd7c800e5255e4a6f439cc7e1e2b026a6a1bdadda55b644db36937c1582bb929c849535dfd2d8f076a26221a2f1c6846561e214ab937b2a6564515462b1600000000000000000c0000008d3c7e4f5ac0172cd992f94f358490647228c619c89b923d33eb0a4d26ca5f5b5b052b69cc7ea4221210c32f7f84fd3df95178184f4cf2492c5f68247ad51c6dd6f9d1796559bf3619a67424037c051fefdbdf432a5610324d3b824c3ef9f00cecbd864f572ec80ef4029b05ae4358613eb71d7280d90427a49a42511dbfed3100000000000000000c00000004c76c61a7e0ac62632e2f35ef022d1bffd9b7551e6f2909a3d5a20eff266114d973a74ba42d48459ccb7b7e010a03169f00ee18d659e063de928b0531a4650700000000000000000c000000aba961326da59b779052225ba239137a128a7a15c4952a591d35ba1c38957d5173426f2e8eed114a9c941b4ec0196c7a841995174d2c16756336b01c79571d7000000000000000000c000000dedd8e5a890a2c339ffbca1ce85b710384670508df73ce33116bcd60befbef5a8d8f99712f70e47cb099565a5bfdf142bee0e61791837852c06c6b28b5323424080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000009df8027e24cc764683be7d62f5850f0798d184307ceb765215f7b03724016773ac58920dfeecd60901ddf52ed1c7da14dfd411445650535892e57f773bce96769ce2693817ec6c2830b0b118705c455858badd2b19e0733de5a4071d4f9da65a7a7d6776450c8e4e531100790414413fb4b1e946d75a395b8f99c978e29533575f9ac21d88000a5cc657b76f0d9f17795b193856d1671e13240acb53fca07c6709c3b055f812e51112430c1b5c117105a6ca062177d0747bbf0c3b51255316020b873c46abb74c665b59e44dfa5b932a5dfef127093c831cdeb63d023377fe3ad3a9946c358f8f1b4b46ee3e88994760632eea1399a7a9065f981a50f7d28c162f879911aec8d05f2f214469dfea446a6c0ae9583f0128748b3bb008bc305d21c52572594e0c5e09af26a7725d2a567cb65ab76dd967fd5f80994a1849afcb56c9b31b45ccc90d61d49b2a70c2b970425811c1117cac8219ace5e1316d140a4b2b896772259a8c70ee77887e49897c703f537744a19c1d1d2e4abe2809c4c76029c80109a7468f7be05cb92a2f804b72d1212832d0d4fc630387ff2b3f00b749a44121561fae63650d4c7e279b5fbf75f629225534112e0ca21b076a6b16e721396d9f06b1f0db6404da746ec626a65803105a55782be1171fcfac7bda719136c0c90a0162af0b5720f798649560ef5a2a3d2b558a0f1c08e559fa1fee33092000000000000000000c00000006b2f3780348810988547c3c8a1b3f24d9554e373190623187a75e4f1c019251a526ff7733c7625ef9122811407029050720ee3a92b7445ec1c5ae1eccbb0d45e3f2c82a2ef96e5d7eb18e48d683320515bae35e960cae5ed599661093b812472969a44ae8ff1913c57bd059a0a5925150c3295de41cd002373d5a0eed54be049297cc32e63d8d1f662a0307f763eb7c93772168f2364050d00b661c01f9450cb7188f200d4ef43149c2d50f2390e14598b4b532d72e4f33f85af416eaecd97866349a00b0cf1872e1337b548651c77efdc4c6293f0eba3f2a534014daa5ef6b4d64742ceccacd314143c262e1243f1ea8bfce07dff0d34378966143dea4c92700000000000000000c000000f3f079183ba6f81ea6c2747a66238d3dcbf28856f070b92f064e196e7aa4c2527748c933a3d6b94aa1549d2950256f58e0792346729bc37d6d5d86327631b3179463d1452b68db466aa97d49e27bb20a87e1685a583aea2660e5c4663ad80e4488c65c4d9e12c92317ab192b3267e22b522fdd3fed42be2795f45953f7bbe92200000000000000000c0000003d26b714f6721810f5c466377e0d09034e2bc22b01f4de6229dafb76008cfa319ad79e4e6f2dc951750beb5092958225d730212e7fbfc8555ed6e42a7f2c142600000000000000000c000000e8bd295e92c602470385ed2fdf24ab215078b804cb5db7071749ae2cd30e4470080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000f33784165086557c6e515f1cbcc7b21b82c2e06bce580d58b3cea3749be76256a86ea10f384f46725f874025fd4bf1434fe0c4779bf22d47ab16fc145c736a5f8e59eb19ff93303192e4cc53d865c4175f24e77532fd805d8189e3769291b73e54ab1836e94c570754b7ac62f92f912b6d2fac75de748b1290aaa028d89cd87584023c0ffe7b2c0e87b7776e92c6452bbc3f7a5fe8c4b4119fee8e2e94cf1e68e0c86e77723bd63878826a6f96806b32dcf17a444f11c7233439081d77f31502ffe32e5b075de20bff5d945da6dffc64bb88852c41af334ba042cb002b16f411fa527f3d76449d6abf75ca67ef72107aaa82d43d46ab5c54f74733617f308a47c2888114970e310b93aec6422de52f6695829246600481540e9661174ac1243217d19d620169996c2af04041d83a5440fd21442b326c993ff579a70d21bb060d4183de1e8a4de01e5e90530919a893314967d94557af1e29c02308447b9599025528b2441e24885ba24c962cc33b20799dbffc01195d2f6455fda37b904ac35cfae2fe3158c3a81d65433f3a18b7f16b9c098e1bac52be0a1326ca6824cfca2f29b5cb281c6a9d290a14eb1b4621065e3081240193adb96f8854845d9ccc9e05aac5bb594b9bd723d949650f6e6ef103ce3a26258f86cc7341deb036c80a7d19466881551215802f913d0f515ba1682ee4cff45102616068d5415c12d5bdc67408000000000000000c000000795f4824a6b97b579fd2212ff30dc61950ae365f7fa634141bad614077a1781507c5436bf26ee11840482b10a991f63a28846f0e9644914e3db57e417b49f1623340645921aa1029ead0f47b5457f11a65f5430b857a4061df90a419adcaa940b1730e156cc7557b51864e4ab40f5a6b8fe65773d4092a1c77a3e36f747e1a34248e2a2ab79a577e2f1cb21c8a69d41bf38fb04846f42f6c103c9a10db4c4227819e642e489d8f770cfaac6783e99b6c40ac4938f9bfae4fad706c2656329c2bb2353f0cd5fa41268773bc1faf6ec80071f07e63c264a6610507bf68b67aa1400b4ee1545bbb8b7d606d7b49cb1183582fde7d1c16a27a487a2bad099c63615304000000000000000c000000af5cfd2fb252e128ac45a37699b3876f1b57c216fdf1d803d7ec79571f37674848d377017ae6af1e21a84d27abf8cf4e34e05f6a6e8b8f5101cc1c15bae87561f54d523e25501c40db090f3f49cdca5e825714149aaa2d6efca5d17d5f2879526968773cb1f3b54e5cd56417cc784d048b4d1d002ad9c25dcc8f2f11cffeaf5f02000000000000000c000000f6ec0b4b419b0b0f601ba7340da60a29b0b4dc63e754396b20c3df67ec7dfb1e64afd66d1d0d4e64b41b576e16da98741364a2089fc41218aea6ea79725d813a01000000000000000c00000010a2da663acda228da719c3b10319e36890fe2162bc49b1fc971013d90dbbf1d" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json index 8e28eb3b..c924d876 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json @@ -1,6 +1,6 @@ { - "attestation_public": "0c8f12450a0f4375d8f387643a66bd4084a76a522062790d8e961b38dfe3497444af494376e3c76f3007681a4016221434cdf51d", - "attestation_secret": "1fc475cbac3acfca76988f8c4b8fc11a6d6fb77266e23fb6d2615c132c5ef8e944af494376e3c76f3007681a4016221434cdf51d00000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c00000091313d49c42e5e374b484834dc6beb271c2b764432c2214f091a136457caa4375743701501bebd4f4f6dfa24830af26ee9b62e31e38fb45a02353c502562f33800000000000000000c0000000d20e56e408e4f587ab11b565edfb604b676a878c706f4790975c35f48641473f102ec69ce808c2f092349734ee9f92634ed447452dbf640040fb9012ca24a3800000000000000000c000000de8d3908a49d235679542a2f483a11338c346828d0c2b82964c87a0e6df174240ec52c7233e1c715efec243f0918a36b357883450a748b147040335b928da32f00000000000000000c0000000559b52ae098453322064d3e27bb450b06eb1941f853dd2144dd041784b3a4364612b43363271a42fb74ec5f3216a83c9fdb252e8309dc5b5a54595f3659cd5b00000000000000000c0000000c8f12450a0f4375d8f387643a66bd4084a76a522062790d8e961b38dfe3497464776b5c11629f0ece67f70fce4190284dd5480c70d1b00fa8ab95030194787d080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000831f214ea2c8c15e4cc8071120eb775846537a768712e7160af64116e8e1ba776ba25800424a257db4ec9f4d20a902338d804529b9a3f843df742b6d292c3f14f288653545fd2d2ad52e524ca5560d01b9aeff3f622c2b26c172eb38f129df05a39b1c1bc6b57659feb2654edd955c2fea005b2591a2bb3a90a20b0c9133d86ecc19e42dac7ae73203e3a53d83a6e946801fb911bc1bad088373405426df70329d413d0c4b5812099ac32d51cde1cf3f7c7df650cb18245ccb454b63fcc8c00776fe1d71820b6d1a2ad3535081c7b75c96e17250f9bb4957aa9d4e6b92cfe75e7f188652763dbd74693a8342f13ba424297e8b3ffa001649bf34d83bccaac2576f9a106568f009036bd25a3fed0db5411fae3c528541845f21722a16c495176c84d6173323a2315bb8a22b130f4f78798f752e4b42c0272e34bb8e3f2a44983de3fb3831c790864cf674237e77c2a31d60f3bd0375f0366410a45008ca20ad0185104d6d04436f6e5682de350e316c56274cce2e4398bc1465ce6f7cc4b21b564c76480ae37aec1630a83c48c8a4ea295c7ddf1646ce10411a692e7cfa36d378184bdf6752a6671b211ef816d1b47c0acc42b577959d983e3f8256377c2f67774f64ac56822af012dd75e07a98d75b0a3dc54056f5f871579a860b1214a69b5eddbd26370a7ba83b4897267825d3776a285c7655ac632730732048341ac41f4d00000000000000000c0000003714700db6209332626d78293f7ca073b4780f318019a2658442e34f341e960665184b43fb26cf0b86ff4d1328d98331c77d4e7e81e16505996ac02500d023395015a576af717400c47a83006d2ca63679e01d553e80f538c3104574efdd02587430011df49bfa17ea7d9f449a3bb10723ef0e61813d174ae19f4b30eb03de7aef403b71e20ae96d3c1fa77512f9fc6ffccb6a13e868b71c2ae5fe23d8664644ba4e301c0873dc0ec248174d567ed43968ff086a28e0066f9eb52b5e9da1a53ba80a3d68bc02a9294839d60345b9e0398468af4fda078b4999a7aa676b4ea102fcb3cd03254de40cf4bd042fb7eb20118300aa293313a11ca4fdef1bba37483d00000000000000000c0000003afe3f29bf053f41e973a356a0ca033ab826fd609fd80e0da2b5c13401e9754a1b4f4366e855da2f7ceed20ceab97d3aa582ba4e8f46d75588eadb160d973a3a20003c076291456b93e94058cc120216c2325e41d7c05339b47b7e1dd9ca1b38d6357355805594733e71060cd12257479de57352fed4ca7922038f3669a21d4a00000000000000000c000000d23e18610e862a4fd5cb7c7c3ed5a83f526f086a2a26411b43547f5337a8c41a20f34c20730592734650d95b2a80cb58bba0740c9be6ab5afdb34c34b6e7530100000000000000000c00000091313d49c42e5e374b484834dc6beb271c2b764432c2214f091a136457caa437080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000cf5d6754e7521929a4818f7b0925e178e91c890a4c85da171c3896504d5eb263f285ed6dd992b5276b4803068c32c04f59e87d2797f7015ce3f7c04fdcdc48730d6c8265986d686715ae1b7c9c0faa38c26476282a78835a517c823ac727fb666e23bf181a917c069f331a34aa463d75d12a9a23f947791525562b43f0719e312148fc4560c8603032ca546f8b6b7c7492a13d5717a6a05e11e6ea2101ace36d0efe83495b6a5a4331c92279b1ddbe5bc3aff6140394af3ca5ff334d6bca7e39c89198431a6380645c556325088f846ee871691ff79b3c62519c2f3438815f02e7648728eb50256b3c445b40b4cf4c4e8a5773751a431b6b9f16ad78835b4a32a987350379b3766420498b0462c12b15a765c50e58edd6611f64f82a97363b127adc982f2309af026a1b032ded294462da7e731435e76752e416fd46c163826069e8b655aa64590a9d00ed5ffb6dfe43d5095f5c65463d72cdb4595ab89aa146bbcd4854b5e08c11e06b671aea68cf492bd2162dbc553e77400d500239c29605f23f4b401c80c94acfaf486aba986c540aae5e4eb3a6db69ad00ec3515fa4b3d4252881f36ce363c18d21475754f886e2adba455d16f350dd11e6e4b9db108223660351c4910eb2ffce29742b43d0150fe0f434c2bd8865b2ca6706eec88f74c56adae26983fd535ced6fb74ce0eae4f4a9ffb374d9d70540caeb97baffb613e08000000000000000c000000a6ef052b092230140f5f9b05d42eb22ce2723c55419eb000a31e9b5c98506d70e8ac2a3c9f852b2ba315c6627f784849879e9e37022ae1380707f46b8f016a14470cdf01a989aa538cc75113ae31366763bb5b07a8a4826fc02a310c90ae5a29f978901093921f274ca70612ee44e26fa5dd9048050ea438eb075630bba1cc22d7dcce5d1801444a3717f8000a098c4cdd6c743fb014745dd2f9ba272237040d454bf410c77c1d479dc51e3480897636f9e1cc24a023b7160bf2080092c35a068e70ae018a448004124bcf1f87d659743aaf24499b1d955cca93df363dd1700c8327d63ab195e961b764f8692c08d114c33e705b0f00c328d0695048bb6eff2604000000000000000c000000427c9e682f0410516ea71d2493db093ddd73ab185cb1d6487a43443463da8b16ec04fa79926fc226f1e41e0065887f3f0003686a6df4583f2e684d079f73aa7e1ac3d308178df54dbe8b551315794100bad4402b7455bc619100fa113dfea5307e154f612073e029889d245247eed1657168133ec834f40a44a7e74295c64d6f02000000000000000c0000007e5d6341af264468b509f2199345343ceedcf8706ecbe047c1d88c6d8609cb1e1c3c050a6aa9a62ab9112e3e90042321e3bd2c6cc634455ca29dd0601251ab5001000000000000000c0000005743701501bebd4f4f6dfa24830af26ee9b62e31e38fb45a02353c502562f338", - "proposal_public": "8b31ba434a9e116dcd99a11535d8fb480fe67517c20eb1117157ca1b1b6b0c5c9d9a632e3268986f35856c337fc18d7b6d4f926a", - "proposal_secret": "2b390ffd597a3f353dd9398b8f79caac87d88d0cfecab9d8f4ba315cff52579c9d9a632e3268986f35856c337fc18d7b6d4f926a00000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000c794a85b6d83911c21ae1a432a6dba471f41967a2e61bb45c1b83b44bf133708dab5fd2b7c87bd79f5da7d5f6ce8396299375b6d695ada4bba33ac19e2511c0500000000000000000c0000002381d51d323d853134f9e41be84e292a085e6038026b5a42a67c5431badd9460d9c2cf6b0ecaa33a07b0f406a82f6048b858ec33282ed90bbd6a122778cecf7900000000000000000c000000adb204253234e11b0cc780364f4e2b1863cc6441dd977506c9af471c7b1f9272af53ed1ab51cf9722357a863b574691fb2633d155e53815db72ee8198f0e1c4400000000000000000c00000042041b1b79aea377b334057cec34a965a60c4a1591ec1879cdcd5f2fda2f326aa65eb24b13d14a7aac436d69dfd89874e246757ea919601492fea17600163e7d00000000000000000c0000008b31ba434a9e116dcd99a11535d8fb480fe67517c20eb1117157ca1b1b6b0c5c8bc769345f7da0606b2cbc2efc929e326f438b114ed10532575b901b7265ce7d080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000049b2b64f27982463438e7e7d86168a20ac5e5e4af7ae2870be90076941fe6d60e74efe0bd0fc7876e7e96a780b6ecb08dc963d27f9e3c7558ef0fb31b02ccd40560ae23ad606a03640d91d5cb0cc825b754b9217083ce53e6fc6fd28a428913ef5d99b7934300c693da52d63b0a1d81ad4d05f2069b09b32a8b2b12367d01c0d10bdf34776a5b851e9e2ac6289e5e54122497265e2d62e107e04524ac9978544f29c6e4806d1bd5c4629de5d83b5c54025e78751e3ded85d4ab9ab2bb13795250910803a9b4dc24e218c915607745a50acd1836b567cbf787d07ed2ae66dc13c1351364df8e4cd0758c67a7394c6d410be83e10473237c33a1f929716bb2910e8457e72a7ca2b65cb52ac8214b9e9f11d271c61154d3415bef1cac14c161af334468243205ab711e46af750439d85e4f0d9db639b748d84717d0dd07768bd7115853655470cc8632850aea0cae5aa40fa815c479d7cbaf79ea50963e9b215d297f8cf109641ec6411cb40d35d3d3f066e8439e5d09b3f14099906d7432dcd862635e0e33b7308149ab75e03588a6f31b415cfd74f1d9c93a88bc2e39cf0a681c1e5c3b76f132235decedf271c354342ab83aef2a74a8d722df62625ddafd416a787a43752b56807da4321f385845091011d86e48378723299d187a1659a76026fb62886556446f4033471e048a0b990d5e27d329dadd904b29d7c66dbaaa610f00000000000000000c000000e725c5785214730d1ce86e484559c60f3d54864fa887836abc5ad22b2192077c825ae942f1b85b39be2865267dbdb0171e4e5c3d6497ef217ea7de00ee316c5741393f46ff02992f1aed22735cecfc101a31091e9a4cbb2d2d645c0460c4707a110dcb661ff03d384ade2d5ab50b8223b050b53e06aa563f00176d70b85152076bbb660cbb1e0128ed0c480daf37a050cc4893167b6a835a5d57ad5ddf980b015352f6544585de6f4de9d756ba81a954a787e37a98924b295d7fa95b2a7ab35cf85b4875abaf740ea8071d6a38b7165aa8347b12a8c808040ef7c0583ebaf40582c66928c41df14261cf0a10cbc77e71ad6c651c712fcd2baf02901c7059153700000000000000000c000000b484e9138e8f586b2a80d078d188112d7906fb1c1b9da95b60bb7414c5273a5233d6a92889892c38bfee6525572fab015eb72f0757921030a0ec2507b482383d98f9134d3b8fde163e6ca550964e463f64f36978cfc9536dfdac4d4280363e5b1842e977a219ed51b4f172365d1b6a269130e43009320f20c1c9f13aa4ecee0300000000000000000c000000e455c767849a697c863dac01f285f40f5063a96653b762633a88a75ddc00fa03848985677d644e52d97cbe34d78ad22a84009958121da45a4d9eb37e71bef80200000000000000000c000000c794a85b6d83911c21ae1a432a6dba471f41967a2e61bb45c1b83b44bf133708080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000015620251c79cbb49df8d7d14cef524797fdc2c18ae3e1947f11c0e14e488535d00936331b8d781217357782e09c3245c1819a23046e0d71ffdad1144a0d26a5693a27a381c17086918a6eb7b195ac570bd24170d6bc24e6db997e65609c2ea0032cbda7e3442e52c34b3f1781645a92caac89d7254d46960c67d7818b7ad44057a00c8612ef7ed1855ebf4594ef8f307737728408502d819aa289b7e16e54745d0a1dd7ade0d5c402097d018b99b2f06fa22c60b8b6e7249c296652d67d2307cbf1f6151ee17ea26b7baa478ad2caa45d9ea9849d0ce777c59f0bc652a573a55f12fcd0be5045107dabb802ce7b1520e9989a07917deb55cb5d102476a2fdd248c2b4c1d86cd04112531577efa569c1a1f2ea02735ee0803a8a2bf15a9fe610b6a822f562bed13220d39e576dc00457d4c87771be7eef335642eeb529b0c0e4ca814051eb4f1846e3b808332a5d98806c8d0691dc324c021c100c316b899d52f3fb3000f467f270127eef55c67ae4f1c8cd5b9004189723fb9607857f5e3aa515d71e46f55a19275adc1d63a8878225ab0893f5c14aa2166727eb3055668ab71a2a49a0bb3b59f6e57739f4ee7f1183ab1ddb46635134e24e9a37d4f6262c22b4d6b230582cd0275b610e74f8e1fd715bcdced13cd7f3e2dc45a6a704185457d810cc05668007e0cf2f84c52378fa4233e00b726edb111598e22214850cd870e08000000000000000c000000e8384426c8dcfd2afeac69306449687125239b0bda9ff25d740d476e02fef53b8b14851c07304f088e035866e0cb2f6463103b31f4e3e173b4ca9b685cbc2e42e6ecc72f03570056503a2d21c2d1bb783cb6936ee8543d28c76f487ef2b42851f79efb7042c85d4f71edd43f106cee455309ce6cdf4bf02666fd924a996afa28be159a795bdabe41244b250aa880fc6d7b8bfb388c6be61ee7912c29b5a2763071a3e1678a27642a4f0f3110b837ce2b460fcb4907d6923d75c9d7194452041d0ce0dc6074e40b0269f32940f29e6e1c2d315310542bb46f5f79366acb001f0b9c0c54080eeacb63242efe6b006c10143871835df629104dfd4d3d4e7a9f924704000000000000000c000000eac0ee37d5eb637e250d2b5e2d6e5018463d282065fdbc470b9a80795d80f42e25dcef3d519e38408711da519f417e2e25631143e7f4c84927f5bd6461311a1514dcce5530759f00d74f1956f281df379627b97bd64bd6195137e66d0f9bf43bf88a4957285b2a4ed8ad715a7032b9348719e63b51e4bc17634c7f0813536a7202000000000000000c000000e31e543003a1436b13201465adf99f5620ad8e28e1a92951e140ca4e3e33e16b9330ea545cc463059b15bf685af8bf49684a306aed1f6323ddbaa355443df65d01000000000000000c000000dab5fd2b7c87bd79f5da7d5f6ce8396299375b6d695ada4bba33ac19e2511c05" + "attestation_public": "7612d36fb7667d1c2f19a821d6a63b3cc17f214baedecb57e6eed4600dabf055185de12c6418db6b79f71004303bfe3a753c9727", + "attestation_secret": "62bc13190668e5e5ef575db855c028ad8a9ca5c9e35a542eacf397a5a62e3e68185de12c6418db6b79f71004303bfe3a753c972700000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000023da6930d4ba990e25904131e0e9b854ca7c383b9cc89b5bf23a242c52780679f743a430b2ccce562fc12944b7e9347a1b8f7527f320f33d41119174b7228275b2df4f04992c5923ff4a34454730273fee5144316598c028bc52536b177b7e06bc78070bd7c9702bbff836785299222fe813a12791eb84005ff73b71c972540713b5a072fac51f2f2028402a16dcfa60c17b792a230a6e1a529b762b5eed8960f5f3b32c1918c2339c7d081ed8da7918d87b3555f3da0166e47e0f1afe4dfc572ad44d7231adfd7a82f1f50d898f5315fb7e4b3dd63ef265afc86940bb9b89244df2866e9670ec1642bffe4c2fff29798ba6bd1dfecd4e2f0e774669150c652300000000000000000c0000001f3add2b0f99aa7e73245f12ce8b835035b2e728cea4ce0a7de1af1960f04654d705d8006f55ec5784b4a2524ff28015092a80739889f7664e200f144175016e86c140740a593744e2b85563ed298e1d369e5b4c79f93d656d4237318341fe1016c5964cb8b80e04052d6c60459a8d66a665c7796da12143969b921a12dfa45400000000000000000c000000d15d3d13e16db64f39c3551ee85ac50899e1e021fb58312dab8f4655ad1f45446bf697673686317c7270c417ecd81856206f09461a6d3b100393c279f211bd4200000000000000000c000000dc9ac87ef7fcb9330546736db616f56c2991a62e28c9cb57c0200776e87109186e6b146f49ce0f0013e1f77adb739b00bc610c0678c8f23d2ec51c06a164f25b00000000000000000c0000007612d36fb7667d1c2f19a821d6a63b3cc17f214baedecb57e6eed4600dabf0559ddfd61e5e43006dbb1bad0d211af618a6d7f11597b4f745c7b76072b5ef4478080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000002b92f15583a7aa01ce47665740623a3d50b01d09bbcf9624fe0219732d4a9f500466c628f787f51fc827261c9acfd04c35e09b7d1a47af46acf4d665fda2b304a73040675a143e6b730a6a06793ac7119d1e3f2f1b52004d10800136e0c710663affb85c12061219c7051c3c4d75557cab9c4545d3a458206df252084b5bee5e08b51a4353dc130b6b76872a49c1903179246f15a56dbf0343e28d414b5f201f3fc8945c8298ec373efa715574ac574d5b2f6254435f6563e0557f5be926b3176588c9127a7964300652c85af67faf2062c06034b730a03980992d0cfc693b3f53df24440450e36a4905201eb7f1e4224aedc03d8f7cfb60c1f2641d23f1e37af230e075d19e765f2878696398647429491db413f1313808097a0b21c5fc0b6467456120f7a87539e1f4d628196cad119f9d7a2091cd8343731df15180b953202e5a07736020c920ec02bf3a8a980348f5a83401d3bb98772b4fd0102947d700e1dd4e3fbabab02794a5f0589bec1709ceb46c6924306e75c0fb6c6bfac71249109aaf3a9ffafe413aa8e639d7d52e74ad16f231b86e7261b52f6a6bee240a5d15c5a94c3f51bb14572a4d1193ea7e31277f185eef469f2d504abc4bb4683a109aee42428f522c20eb05e03acc7aa7464ec3aa66ea7d2816d6b3c52d9438945473a6862864fa0d4e0c0b68001cc93544e5d2533508f14d1db893d515054c795700000000000000000c00000072698400a50ed86b4e72f647dc08790eaa57cb3f9076527de9e9ae36b83dba3be6c7295b203a8578e973fa0c9e0fe36d2fbad117ab9c481d542a463ad428ae68be870135a2026a5fed62c1460bf643570c2ef74b1f5ed14109ef4b4d1051c00114b41520d571db61aac2632d9af71461d18fdb11e9c25d6f2707774558a91648f39fb8333edf6053735a6c416c38c60d37e54c5341e2921b15cb276c155c321c4072d868ba2eac488dd4d01b5c36b036113a4f23dafe9317d5d63332bc0b36489457b22b813329165690617182a7093b37aae829916b02114e46325c00e53f6336e94c28670739734893ef70713808626d6f5b2945edc7129b3f456f4176e57100000000000000000c000000db002e39f5b54c4f078ee314da97585ece5a260f600f2f4e73e8190063d0374fc61d6221fa9f1821473a4b200d67850e90237d5a8bf3956958860d7723d12f5f3c955f10319b4e2309d33a2d0fee886cdd160620c2c9c72e8cd5ce53a6418279fa1d961feab7aa0b4c22032da424c357a7b13b70866be14951a6b2718fff570f00000000000000000c00000082750f6cd9455c3a03a8f35dc7dd10478908f43b6178ea2771f61702820ddd1473f11739ee2c3678d309a104ec559c7636fd590ec35708626446b9199f37ec4300000000000000000c00000023da6930d4ba990e25904131e0e9b854ca7c383b9cc89b5bf23a242c52780679080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000e650c94ea096e71b4c995128ed0f480647f0e37da82b052f3a5f392183b1614c200b65756443a7415aea4124f42221705e38844c375d5279a8354219f7d91d2b5cee5b51286f6022b65015238af0d23e2388ab3a0216d04f3123102c940def65df07c772c661257a4175567990c7443f1c7ba4604d80c825313a883b4844a71df5e3c74a765af47c55c5ef3824a33740994a626f57de55678b25454ece854e35e84e36152924411481088a3df183055645e52c488ba37e7a85231e738c0a9f53dfed6c528f200a25dd86ad457fa4785c9802e20f3430c13a7e8a121c2b8a55789c39c137a02d1e153f73270bc89679215202ce34b8a52b17ebf4ab70b99621799c228e0f5ea2a35225195805c395c35e9d6f9671e0ef092640937f7a0d19867679c141064b30e47ad42af72c5c089a23f6c8f269f4b615406803016dea1c4b2a0bed752502428f6aa434282277743902abb7b35cb24e3b58df1f6e165ef43f1c61d0004b037feb70d8ba0d2bcfa47e01db1e93325c33a622bef840608d1f4e7bab774023d85f4c29681d88537ce58f499858f21f1c06fd382288f45265e5bf5126be446dfcafde4f76d76e7b17537d1090dca40f6e5aa16bb792bc7a8f6cf9669b17c6175b7bda5f166a0b197ae398431abd81616f24934543cce40cb875eb6273d0470360ab01651201fc0557b26d2201ffc94466f11534d29f782dc336b85c08000000000000000c000000e9aca527ccbfca7c7e33075e06d96d20cc31336eaa9e120be26a55553f43a46270c8005fd2249d405085ce4a8dc5fe13277c100eff2b007abcbc3a03edbac36ac4faa61ffeab7a5103422f3ad2ca1e2723e89600c88ee11ee43729029d8f2e489d00f0728d33d30ab446016639781555741d640383db0e4b9a81c54bd70ac057b2453401e761771b31ab227c36bbd91dc31940014cc3ca1511f4e535045a1e0b60163166dc5a9a60e99e805b90288324eece2b4972070d300597eb1e4f09154d2ca0d83445b7356a524791601673976aa97d7e607bf4912914e8687c7bc99348e4e7ee02433eb40abfc10a0de3c4e6257ea46c15ab0ba1785287325333b4835404000000000000000c000000efa9e10f2d80c2331c9d28594cec180f5d51f820b77da2765775904cf671676cbfdd846a1e99782dfd964e41ee67e64618f84c5cf06ada12aace3a372757832e1a0c66364189d046a0b7c00c496af05d7289be4041391443d70c1a5e77050862490c1a1436a5ca08efd9710a462f325ab86b247509c3773aa53bae10f78eaf4e02000000000000000c00000064917d694077ec2cda25696d01127a1121804b08ae2bdb5e968581749ced662007a1fe07853b9464871ccb7e2dc0c460374b161081267632712af74706155f1d01000000000000000c000000f743a430b2ccce562fc12944b7e9347a1b8f7527f320f33d41119174b7228275", + "proposal_public": "1dcca64f8f9956470c2a427ca669d9359f22f202387ba24440e77200ec57983515451279124ee834a62f77560b1c166b0eb2885b", + "proposal_secret": "7455d7d8e82f2a81f7556acf46db46ee309978f3d45ac6bb260e7553a387336615451279124ee834a62f77560b1c166b0eb2885b00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000005f17693a7356ca5d9ff659643e9de63df17a101c9c0a7d68a2fd504ac87820574fa077732f21a2261d242f350d1f7107807c9a27ce6a0e30fc78b97820e69a1377b99733da8cba3a80af9247c02d4a439a1e9f3c7a874564f767c10ce2192163dbaeb84bd60e113a5773f34f1eacc43af2f62a65ecb4fa5e5ed36e3c4c1d6c72b52a2505b9cb693f5f9abf2af9c8ca2a03e9964bf42f2d3f335eba4e5e9022705216ac7148e6c12e9a13416b8fbedb5dcb28900d813b5b3c0da8fd5cc20ff065f097573a81d5f73ac4e5d029c3300f3373b8b209e2b10105266d120944c41b1544925f60b2baa92f3c9bbe381b6f4251fad1df24fd3a047a075f485a78c1a85d00000000000000000c000000b87963583bb6b72b8210b03ec096ab0395d7e23ee2005b39af08130d4f38684bb875b1445eb9910bf29b44558ad8ce112ea47e3caa9823122b2ebe0a0bb6f75880252640a85e2b5208346d6488e2ce6c8b8fbc52eeca707687965c25cfad9e14e817c648253a7604806c163e4835864409dae6638262fb756a66ed25bf30353b00000000000000000c0000004e8e6c06f666a81b23e4fd2967c51c1ec90a5c2f9033133f42bd4539a2558f20fd66357203c6a904d5355c2e6185180ce09de26e5fbfd376dea48108d6163f7500000000000000000c000000a8969d393d4b9c04c762c1055b22b60e48305662acd9d057b508700457b54243506c033c12ddf06d82b3243ae34a840226f8a232fb8d4829da88316a3283921c00000000000000000c0000001dcca64f8f9956470c2a427ca669d9359f22f202387ba24440e77200ec579835e57f3a20a49f3e242addc0233db2c4079f916b584ad61346811cc74e4290ef27080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f7f7c36af533fe74340142391949350faa20581a5c87d64c53ee6720102b6e3099e7253e0629fb103cccb87d0c87512d682a890b355c2d59fa0e257849e3026e9592f231d6ce4661de3da67c5a8657616465ca274a9a9c0cdd427828add55b7036713b135353a93e0044741aa48b646159f3f6331eea202a0fda1c233bdd163467a45959ce4b1f3b659e9e0da1a7b1300d4f4b6dacc94a4fa1ab5775f40574550538a424b3b1af0ad120323ad7c1db042167e2294b7e3553e1be1b05931c224db281cf61a940e36c51d6964b63fb3411f29c5b4f82ab393a82a49e5d9cf65c6409cceb025031dc7d5c531362cd66b706a7847611839ae41b57a6c15ff2966b2c87d0bc2ce8ecd04984eada0bb929840bc680bd7542b7bc14eeeea551284b155536174c13da499b0a89abcd1e4ea13829a11af6177ed6332fc116a6583ba2387464ab3f4ebf94935b8a2bb35f174654694b1cd22917ed7b7d17d45b02ce88bd1ee333c36ec404c93cb4700c054665064327746b5430ee774b1c52cf09ddd90e36208e990fc363cb7d7f6e594037e0590b263f750fcf2068706fc1f627ed0f790c6b130b55ff45ce5fa2f2f30800fb306392c93a009c9575135577a36ef0da5326acbafb6ef698d06ee278424eaa6cba02be16be30e1a617666980194402d8841068970f01b9d072104359667471763f1c8757ec57c5bb037d0db9797e5cff200100000000000000000c000000a00b546aba1fc923d31c8721a5b65a45beeae0173dda983d3d0c56674d37cd19ac25be52c7f2cd41fecd2756aef78b04bba0d34f4318ae79c9e6e413243bd1175a32355fb3a2cb7378c88103f2a28d05fb5c326b4b9d2a5301b0d0727a6530144720751a47e647338bdc0d55a729f53854af9c39707bb13292e7cf18003ec4233e1a2a6d9a659b2188232054d11abb534bc7b54e30f37b2053af277e8607db401aa2475a860a463ee64c3073d8513c777dd9523431f83b0959a1fc12faf4421cbc656638c818a5463e39ff254489ff2cc52ab947410d2b01b1963f06f82a983c5781467ac9c50d2d56a49f741dd22a7393efae196f1e7a3ab83863705463690a00000000000000000c000000ebe7014146522e456180605a602e8e7a384be30c3d41da2066cbd83f0ecd47099f041f05011f6602e4ca627225214046aac8a9160acacb2700e2c4069ea84c5514228c6557753f5348ca24446d903535f0af6107bd81572d3ac77756363f033d691d3c1b4256dd627b42667533402f217f55dd65c3b2dd15554ccd02dc64a55a00000000000000000c000000a14c29647f7ca84d2ccd1c1e1e701230e6688b150b517803011f5a4f3964c75af5ed2d332f0dcf04e6b08c39f7bfbf2f7b5d9a466c63fa0f12585848b431972a00000000000000000c0000005f17693a7356ca5d9ff659643e9de63df17a101c9c0a7d68a2fd504ac8782057080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000007f2b4741ea5d545c14ddf23969033a116e44eb28f9f4c30cde8d8114a921d07b6d2a343776b4c40efd4b164f497d65311854aa4d4b36470c98ed6d2fb8e89f6a42ac7614f4826d36ffc4c975010bde1b0fe28274338aa0237b456c4f9f18fd4bcc16c77922a0f73f55f5da6f73c47e504b91c650e2c3b56a4b9cd82d818cde7c57264c336b22c4506b55e2756d33ee352cb4442abf8cc00c8475412e0b5a314f9abb2866f14d0858366ec21cfb5d5d545a7f2c792e2c92623adaad63cd7ee931b1bdb33b5c9dd70066acb660b92cbf005c860075aa60255e0e31934825a1f22f152cd22d5eeff6649cf3a971486ade66d80c5f0fd1a7f47bf777bb0f7587396aa301c93c52a3385bf19ebd68172ee65ac06f673b9ce2e13dcff89e0b33e34004431d813b64dca35be07cba4e577404705b0f8c100e686c31ea2d5f04e9edf75684c123358df6a331ff3f3a05364d3901a3d2be1c99f26403d2cde272ae00f06b150d50487668f251d9d66950348d4169fd6fed4e41090a06233d15786da11608bbc80227ffa43858b69b5b132233d74ed47b4e2e17076f454d3eec510e5c612f1034f437861a4c60b9c39a6bdae9e604bbd63f6155eb4b742c5b4d3ddf89423d20727f36999aa90b801bbb7c74fa064daf87d91b05dbb03d9002542ee2803b7d2a330416956ec4778c2ca14311eeee051099781e0111af01d8d98d7aaac83e3308000000000000000c0000006533023d3a206862c141ff7c5e268f07d5e6a17089386b3ce7c26c23484c04267a28ce174faf3525f201ea050ab1c750a8d53f0b3194ec7ea6dff621ea73695672a0e04d0f036c0d0f425114317bf72a7e93d859928c3344838407738f73f02a883d943447a3152c2837f2741379d51e3aa7a0484d1e380b9bad1330c65c1059d2d3b913f4cdd226e2250c121851c37a2e8afc3867f38c706fdf214da752c420765fd504b0a35a5fa2dc0a723ddaa31918f8b232e96e71744f743c2c52b1e430f2daa160e0cede5b82b20128080a9a02efcc1d4ccf0d4e63a67063700f633061ebf2cb2140e0450cd8cad16236a63a363c05614ae5b7af254185d77d0d2af06e04000000000000000c0000001d44d867ecd0d415353cf2579376e74340247b22fb9e3378f30f996a1ab56743f6533b1840587014e3cb02723a979e0f4bd03b7d64efec0f46e85356daf2a6782040f37af9c6321b3cc1957eb8e6753c4d6d37371114d511c0087a317426574bae4b31716020a556fcaca8552f89243123612817ec79395b52851650e52bad5f02000000000000000c0000003343dc4008320e659c97407c7f166d0aa6ae2e446c588d03b9401a76bd814d2ff857d2568c2e3041b3e4f24eb1fed46cc699e46890e2095fc6a7e60eb2d24c5a01000000000000000c0000004fa077732f21a2261d242f350d1f7107807c9a27ce6a0e30fc78b97820e69a13" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json index 3d3279fa..18065762 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json @@ -1,6 +1,6 @@ { - "attestation_public": "1ae58b0b0a58156ab01c693762f5684981b9fc2086c23640cf626e0ed4d58d6a6963661a3b1f533023d6e40d6f67911c47b7f202", - "attestation_secret": "cdba6abad5f5f2b886981279b5b6df728c98f097cba13b791903778c7837ba986963661a3b1f533023d6e40d6f67911c47b7f20200000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000728b34329944f474ac2ac811c305393a9ee865061190560a1bd0b319e91e021134aa3d05da09452f86b7655b5e8d6930aa8a5b1ae06667147245511ac0babb0000000000000000000c000000d9c07270a0cda40ec754a600903aba204c596c438d7964030333501fe30fe24d6b1fd4659c52a31331610448cb745a1269aaf71f4be26f57767b0933ea17f93300000000000000000c000000d38b746c3456204f58048b536570dd728ff8b876b29f9a6697a2fc75b32d96283e4c1c6a929b741fce2f7055861dff3e40b867186e582d2356154310f3dd2e0c00000000000000000c00000023ba07194db0db08e2a5155f0be8f61d94f5fb4c2e48850207a43c322a11d55290fd4e412091d364ac374428ae17851346166c5d7ebb2275f6857321fad8fc0500000000000000000c0000001ae58b0b0a58156ab01c693762f5684981b9fc2086c23640cf626e0ed4d58d6a459c6b0426501111eb9ec034b51df968a0773a542507543117b8db0945eec919080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000018f61552f9da6c52b901981f8f6bd1590fa96c516b58006e0bd70d52941e060bef6718659c5b705b6d475c6b21b6cb536113375f085c8e773d87041e3c83e26dee303a5e6ab52f6798853c3e66f6e733aedfea66a9ec244bb64f723b96a70a2af1f5fb5991b12a28f6a0732000854227846c4d5f45c1721353bb93223b26d75d3d4896512c387c6ef2f3604eee617c682c294e68cfa91c5266247b1ce6c0fa6d11f1d5504b810c44de990973ceba591db3f4a20f2d93a651f36b2301d52211735a3bf84c9fadda2733f59b429d6313287c781023b6051908a998873bee80df1f0963cb4e1e7d5b40972c527267575d79e007c242079ee26c0f74eb6e8f4963341c5c7344dc8a98407ec9441156596f0aec1ccd1a78f4625830100014a451e240e9778a2a1baaf13d3c4dcc5a241f5039d9b14f1e1bdde3431f26f20c1952274d107a605a062f076c91546c6e144d1d12426df34a248c9550dc8f30128fc5ab70a875e740718c766d4e19246a05ea020d86984e60ca3f940e152bf666e8d6a943aea6907b597e841760bed928e6fd843bce39320f8c5c5f0c21839878be9a3c752ddd447e0bb6df08a420095a4a54d144f0438426dea8bb203e150970a840b84a409479057323a520331a4537bfde661d479d4442c47456139453956e4eec064c4138fe2fc76e2745d0945431a111c93f31d12374061a473db3945f44a221024d00000000000000000c000000febbd916ebc245056dad735eed501644adc1d1528a8c6d17cea6d939cd37946652a677048365fa71dbc180072d543170334bd54a3281401771ab8c6e14097226c823cb0a31a3c57ec040fa55037e4d03b38fa10cb5afbd32041a686d1256a330fe84eb77bc50672cee1429364a6e7f4bd29409328d9345476901b4747496a60efd8a9f09118f71712a74ba7ad6ad6040ccc0724c85a2f679c4d42278e6fdea18514b5557392f631f99757a7c4cc66b62cbe8c4524f9c88345f4c5573c3816461445a591face6415e32707104f6156a7e953ac5230ffd5103e6c5df67b287a901f9c9c50a22e9c705258d723e2e054a61972d934727bff012b72dc116ab4da91400000000000000000c00000016c11d094ff29a1fa59bd40fa3b5ff154f867d0c8be1c72b201e2d29cf0d6e0e849374116d58db366e56bd557be9d512493ef231debfd0714f204733eef7926766b2117c7982037861047d5d4a361467eaec9b132b05a22bcc677a21952b6c7824225c43ba81c6794021627836732c3e24d0db1c14ebf64c7195a038873d6d2c00000000000000000c000000198bf7400fc07241d723746a26613f0d552c9179d07aaa111ead864f5fa2e9457cf0cb04c8300335ea82f06f2c2b5a0608e2a878e4bf765e77deaf3344a61c7300000000000000000c000000728b34329944f474ac2ac811c305393a9ee865061190560a1bd0b319e91e0211080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000067b51a0116344e5f5dc9a3207e35657aed18e7519026a50970514e080099c34443ea592c9359a240f6da5271408c8d4e26c7c148b2559049c520eb187e780469a230604976824515f73e167047ce673339cf9963692be843203ade5413933341217f0321bfa1be5ae87075200172d62db6ebd574ae3a483a94765c232ea82735e86d8c328a1b2d174dd22f0289645942bf28334bd98672200e44bb6ec70d4573dfa80d20246bb24e61205e4cdfff17194f348c58948fcf6805486a29d80f6339f1bc90235e64851e207b835d75c3d34d8f2bfe0d4d3db64dadc5eb317fb0c369fc131633d617473ea8234155d28d55304ad8cb25a2099326d53bc8474fa84868838bac6f14da0048216ee672eb8d6f69f00791696f7f4100abd9640dc9aa8048901c6e09460f0e3ef17453622f269e2fc959c43ca5d035317309750837d8224d2e92207c75136756dedefe100a8e3c3c7b4f84424e43770c19455a7021a41652863c5932f55f1351d816656b1ae34301ce35646f97d62e53a9788c61c281432f504145336ae7505c99e80b2406818d6b36c4891c7a2c2b0b462b4f0fb5b3c1682acd7470bca5c223991eee305530125a3c4b7d2824e5fb6c59d1e9280a6bf81861375f216e398a4d85efbf1435c8287a9d6b5e4c4fd8453f4edf13466f0c024862f2d119ab12ea2eb031f66d6a7ed636ae2ad218c28e3671cfe54207d73fb41408000000000000000c00000024a4dc5bd581c91d78d34f01239fc54bbff4f04c247eae08abfc6c5940eff121a28d9c654c28601e1ec8eb38f95a2c0be44e353e5605b473baa7371fe40b09264730cf71163cfc329e8d6872c6b9731d04cb072dd25ef630651ab139914e990861fb936dcfc4dc499586fe2687ded02876339f4ba1c6434c752d966ab57fd05ae0e4634e53af647705581147e467d5716c953669ec740603a422290a98e5d95b47300e2118e5df70c9ef335d50786b315b1f8054e585a908aeee4d314c37b624d934e8490e00c00de797c65c585b3741c4a72e402d2bcc3bb113096aa1f12270f30fb20472f22641dfa3c76b79e3ca0543dc7f367f4ba50c2ede8e4bdd63d57704000000000000000c000000c115810eb97a9062ec27ee3cee5e4643b26ff11b5112bd20a690a334190bee36741a2400f9803608b0223d16c29c0a681fcb062669eb347a1e59216317c7ea563ff4c33f26ecc645e1b14339d7a59009399d015ea78a9477ca385f0f98569d3c5c1e0002e6dd44248c28646fa48ad01359c467304c768d67d32ef043ae2bb87c02000000000000000c0000009d56201a09e5b00682388a7a58bcb85eba95271be133622c7da4587986a4681ff4626631e8875551c892682ed2b3cf119157341661be9e56a80d3156b5b79a6401000000000000000c00000034aa3d05da09452f86b7655b5e8d6930aa8a5b1ae06667147245511ac0babb00", - "proposal_public": "20c22b58a0312427d9b38f1901f53e5fb793c6037be2ba3db0e02823b8db0c79eb49ef516b6659781020b47e1641d412f065b946", - "proposal_secret": "4ee5e6c7e65382397ae1e9025037aa5dbc10d56b0d351aa348a5981be706e188eb49ef516b6659781020b47e1641d412f065b94600000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c0000002f17405b7c694034b73858799ccf596bb37c2127494f6f520d89561354fbf30b4dd3cb544950df63a10133466d026d06fc82af2b98d5ac3479dd4109d1f74b7e00000000000000000c000000d19906130140100ced4b0e5066067250a51c5f618a342b0b5a00c21e8a793448b8b05211643ec332850fa34ab619b303571a967210b42a25fef5ee5faff3893300000000000000000c000000736724267f20af3f9587055a026c8b0d3ffa297a2484d9702dc1690e8ccb57041091615a0a3ea25c49f6e663f14b9006641ade1166632443b2b3ed0a83002a1200000000000000000c00000089104a493a4ec15a888d24093e9fc4615691510e047ea01e53676d6466c64e1f1783144257388d1ba1a1927a615861550697466653f75e5811ebed7d97845c0500000000000000000c00000020c22b58a0312427d9b38f1901f53e5fb793c6037be2ba3db0e02823b8db0c79240db40f65b18a44a70dc761f1f13f635a3bdd2eb7acc033d260751e1b316d48080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000008d13f845b74d5b4776db69077623ad5f3132714184239d6e07ad527bc50d9711c694c834d1f48b3ec67cf67ab70aef12d4b58a521feacc051770b63b3050466714bbf93cef25b2777b72170e3248b329f254517c9575765091deaa27dcc313347c55ef7dd27c11513d557c2e8ebd0d398bdd226f5e60ea6b3dc1d75b0fccfc5de6d04d40dc726361d9898b5b668c3239f5fb0668c75099453ec8915051031763669b430b03bf483f1390080295e8cc5572bbda0b8b11da5cc77f6368f3421653c465c23b9326636db632095bc1a7fe07939fed02365595076eb45b1ab3e2ce0226a35b1222a9d17ab1b30271f5855f5b1350f46641e82f79c4fb1c25dc3bca2ef4147d5155c2f62126f5d00e6864314e2e8d976c1a178c4e6eaf6c58be0d4b3f77e1ca3d0a99f011b233db2d0a129d2c5e45074136f9a5669c0df169e214e97cda97ef3dba5d472e4ec93e4d47ab8d759182f84eb61fdb6186d51a7849f002715546ab7e78b4e62dff990d3c9df52339e53c2d485b46c333ecd58329fbe2bb1ce33b2f607987061eeb93b35466b1a90b4e1fe93cdd63d379843ef24778b21c517b2e97552259ec443da45212a102370a1a922854499ccb08d611145534774f40ebdaa43a4dbb7504487e6c0af15a1618a3e487215e26821a978e3425c426f82f6a36137011726613e5a40959edd15d3712123b089982bc3c76b413701235ce6e00000000000000000c000000ebe67f4ead315c46d0022e43e339dd3c950fa764b157cb3c1cac1f1513b4aa1135e7705486342d587921fc6aacc6170c889d997204825b1080ca4915909ee157a711a528fc0fba7e240fa0277170a54ab0fa48212fbed07258f8fe12a8203d60c6f2a91801ab852a5c1cbc009a55894ffd0ada161143d5738d64a968e709575a7cda683f4811eb055d3c7440c77a2d22abd9f4151e462921f4d5b9129d3a0e50bfe5e161215626782eb9b6650683ec2d03d61521e371d514b992ef5fd33afd09d14c0e770c3b170c5703da654e1a54047e263310748727595e53cf76c8fc033af1881d004c215120e8d83216b59d857553488a2e712d09091bf3dc64ad93151200000000000000000c000000669535066f59961d1dea5b1dc11e046bd621793379f4ec43cd001072b4b9a43cc01cbf73e99aca6811d7a10d0bba2e26d50eb3502b8bcf57248f8d5ef51d9d403f0afb2cc915730bcdc0023f4ea1ae44c40352443ded290ef7879078eea25f7ef95999669936d643029b3b66c15f827155c6f9595f1f212f33f5b7599016234200000000000000000c000000b515d645787051268a4f0c1298aab53658589014fab8dd2cda1c382a4384c013ee64a62799056f482ca18f586d02ea4f449ed0631356964a9f9e50769f1c160c00000000000000000c0000002f17405b7c694034b73858799ccf596bb37c2127494f6f520d89561354fbf30b080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000ee840a1a9073a85b5246b603d256186233d9f42e5f784d7861adfd02d36b9d5c1bda917a912d843f40bb14546dba6f3d6a9f254898d9986ec4600f12027c57347bf82f504b0e3f34d92f8e4db450d91ea3fcfa1ffc785337fc62773060395747d4249d50d605715287042e5a3e6d757221123e167c2d4674df787e69503c2e5e9c83dd5fe9ba074ef7f336216f64094fde95a3766d216c70eec0d2500f38fa193312de2e7ee99d3b8f7ab36647b58301d252ab1aaf9b52073e65e8355c38f25c63d4bd59307fa64ee94d2a5f7d814325e8d213089b4a01526a3c535c879248674a963d26ae44ac01a6eb74781c27412fae826c72a5539f4bdb78ca4ce347e16af991a56eb00ee04a977b1254d682ff0f8bfec12ef8c20c4c96c5bd2fc4837e5518734855c6a842528d5e543c8751cb3d9ede6460e532866d573d8064cad9e9322b90c43b9804b768b3aae60842176a2e33200d6e5df19266033edb240e2d7d5f14a2bb43cca25c38a7581f491e9d92760d895540e380840576c98c0283b146065280f2004122e52eed9da7630ee3c942b6b12e2701dbfc2742538e4540b31345fad8e4660a55b02d3d41ef0d688a4c3241e23c2f40d1011a83dd7c77ddb06111a0111f49b330187d27b43a3b489fff2911d96232cb44ac6ce9143f506683586a509b97425a289411d9db573c9e872b3fa8e5ac707a9dea65509a245473b9464808000000000000000c000000dbf1c848d44f1f6982784f69dadb3d5036f1730467f592453c45447a01163849b971741b760dbd363724ad2c1db79d2aa1240164a50ce3790c08af74a5bd7a0c1f7b0677a648cf340c22e25cf609d57424c4a85e709068130aadf2633469735c2b66a33bb8a06d7a244de2327be0d651e3c25507d72fa864c12db33d7084513b31ff27554cfe0740e7e2314c363da03162abda38c36f6c421aa527199e7a0e516aa4543ed1172917227411422f88da2b01484e563303665fbb11c413285c2d6e2b7bd36ecdf066396573c94ff6a73c454de5bd09bc477d5f867691538684bf4d3430b43db0f6332877f30710e8756e73079dcc54862c901cc8d10e189df3122404000000000000000c000000581a51049708e025664ad633e8878011930092608a2a0b21210f6903fd283946e0c32148e4243f2fdfc72e3de84c1e0c91ded270a15b906bc8559f32b601de39ea159f4b6b6935406ccd19159bed8a6f47894413baaed05454220c6c930912677f78e86da4ef09604bb67411a85bbe03deeda26e18ad5e5e8b1077558798923502000000000000000c000000225ca768a51641263022ae1f721d5d223fe3762717f9521c90cc0f3ce54bf15b5f32fd23be311766e4a04109f3357642337dd90459fbea584aefda4300134d6701000000000000000c0000004dd3cb544950df63a10133466d026d06fc82af2b98d5ac3479dd4109d1f74b7e" + "attestation_public": "089c9148194c024ce9340b203ba8e129a3e31e610912ad2f4feba3521acdc378b1c7a75948e4702b2ee90f461a44fc357d069d69", + "attestation_secret": "fc89a3a98fb54ecb2184f4a2b705b3b1bb485bf8719c0d79af72736d91aaabb4b1c7a75948e4702b2ee90f461a44fc357d069d6900000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000eb2cbf44840a6b0df2689100e8178b0e377570177b9f5024c0f00866afd67e043ca28d416fbffe53ae97b127dd16a46f4ab5294309715a3867ab472d48ebc1636cf1011d85809c66b8384349fb73b412cde5b804b8846950ff8b2f1a1c40437a725b315b8b79f325de6dcf7de517e6182a9c9e12ff54071175a9c66738f19314c5391411d6ba551e175db6742246cc49394dbc062fb1f76c9c1e9b6ab10c3a7eb86bdc639d7cc430fac96f59050c711fad16da6b85799f4a4017421ab9fc2645f93b4d4c22fb120e7a81bc1b83b43e0ac76afa452fb6fc5ad914665320fd0e47919b7346d81cb661fcae61379391f82577929c175f9cae573219566abaa5a32100000000000000000c0000002e93ad7a4a21ae60b014ec355cfa98653dd47d636eb7ae31e7e1ba283bb57600cbe9a53b440caf688de8682d83afc2386895e63eff81e9364fa8a97a225e4c4c6522e179f9e72a51666e311e08e8fb043232ba63f8a1c6491720b528a11ad97af3d8573f0d798f5d1d663d3d9f89cf34084ab818cc76db5b6d8ae402d7ec6c3f00000000000000000c000000989e946bd18b10699649490a41f2dd14e117f33b2091574521454d7467084b66c8e66540f8fb090f77685e3f4588e246743dd30791b1866b97cd014f01d0ae4700000000000000000c000000fa196114345c6f46af98573f9586005cca49bc60e6e3ff358d7ab97aa532fa024d9ff9749ee9c46618e6db2a43fd0c090b58c938e297257c87546246027f314d00000000000000000c000000089c9148194c024ce9340b203ba8e129a3e31e610912ad2f4feba3521acdc3783dd1e96b844c73795f610d6900fbae0bdee3c70176f45858786796516a4d1209080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f2d4a9615cd51b514e38994648034c1b57c11a6f008bf179ace237052e6be3180f167145897fba7277bce56483a68d65aa10cd2e82984268a2d008524309b27256a4e70df579562c106fa2663ca9d5521a8425237c17b33300cd7a5f2265ae54558fb829ebedb709221b2864c4d08505b644e63edd16ef2b0d3ca472761b2368c7330b783ed9064a68ad6a03635f5a2d13b73305bfc7f124b6c6600d1dca722bb811c148482b4e4c8c12e160a653625b962d3e309d532b0fedad8215eb5c653e42b2cc1c98e61c7dfd898f2c6a9b3117400a363df53bff390b67cd1fb8edd14d49f67c3fd6910c0ebe05b945dedfc60a0d1ccd217a36a4644a4b4c24b67894705c3eb31373abcf762d95b517c0645f74fa62cf7585f10c683fbb720f2424b16bb74c2a27ca528325ae9c736f10099a07f0278316f8c1d16e8589f2309f7c5b71ce7bcc28f0a6ea13e3cfaf464280503299d3ff4fe6df0671c7a3ac2f8f0c2035f353b63b8ee6ca7269a75716af2d621b3de98f54354f0018d69f6333978e2071a8e21856a9b8d922805cd91683a1601725dc2d5132c3e723c143896918ce6e20845bf4613a3c667daa5c1220abd1da5628891713beca21636a07260bc147135a7539375cdc88a50f0c3a5d0b05a29927aa57104f17de002da694b91232dadd2881338a1b673f4f047420c2345ebd9a51f63dd148d99f4078ab7edf2d7f5f997800000000000000000c000000ca4119195e7c5472b243694815bc2d62a69e293f854ec0379ecc86247e0201597878086e4480967934da2f7e82ad120aa869d9127a8eb766f6bdd16b8b6bb83985bca745764a7b3572e4cd1bf7b62b61b7152763224bc357c9713e3225b8950d54b1d67d0dcb2c485a4f1136d790bd703e9ff056c2bd1769691a921e53eed47767c8d80adeb3d37a43be076c94784b3aacaf1a1027d5ae5e571f060ce6d7715a09fb8d7b706a534cae904f3e54b1e7041e6d7f7470a16d32bb5edc5a403ec65831c56e1e11fa83450d50f621ec5323749fd5e0145bf5f2098d47e738707f923fe94ca759d0bfe73e4f0baf089b10c1028c06a629eff9d41b7db09024dd56762b00000000000000000c00000040c3d6008f9ed3386aa5e0700c1b457934cba25969cff175e6d1ab545412b959acd3707781c9b213ea3cc70fd1c8c66b5c94ec3fd96f5c6560bd8a0189ddd531ee0f7a4690e70f35711401216084265596866008d7730c2c213da36c5f61c2080c641d2ee0fa5934c9c76974a8065d10c0228a7a98eacd6ce2fd30465c3a176600000000000000000c0000009924c308a33ebd5ce7f26418b0afde5c7fed18040e1c980029a2db0919bdbb021c633947b4b4757e3cba7f2ce7dfd56e3b59791dbfe6f40df286d26b8b530f4e00000000000000000c000000eb2cbf44840a6b0df2689100e8178b0e377570177b9f5024c0f00866afd67e04080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000008ee9847d6d2ab76a763feb100e3a1e3b691ba62a3f7e8315ef848055431da94f0e018c45fe55d35d61ab9c216b37fe30f6c4fa61a59d0a67e168c5051d05bd43cd337868948bc110dd6bca50406e90263e8c7579c9823652f9caad0814dd4c024f7c8170ed23c35fa268b04d7eefd577c3861a1989261816496acd4b152ad177c7c23e60f70fe9341ab28a6fea5a532f1c77ae621e43e26dcf974726297e3270cb7c933035b70c6aebc80870b575bc08e858d16fb5f15631adb22f08bbdbf06874ddcb48e2bf72376e052e017313663d49ec627e45c06022251d504bc81c2f5c62fd742438995209458e5e4f9e065d569fdda325ea007464d8b1d66f33b5911e8afa8e6e3f770a2adb17512f1e91126656eeab30c31749289c04db1ce951086d30d5d04d6ff0d65bf5854e04732cd25f85685a2d0fe2981ae8d2745cd36a0d28b807fa5fedb1f10e7e70e23b10686419bc28ad41f9095d7ed53f492b4256125093fbdf5f356f8f513ded0f05cc6df0603473451b46987e1d9b90916564a0a243bb554d25df65176f5bbaf52cc13d8a5e32207e5899a591080a8f1d7a89a1c25d099e9850e725736b6845de286ad7794f68e2325403dd9b4512a9c71faaebf7187d297154795e72719b8efe3c63660a0f89806278250c02300cc35f3ec6d7cc6e8e2597165212d45f66cf33018baa51752a8cf557cf89a93944fcf734f8bdf75e08000000000000000c000000d6200c3d2908235b47076f052ab09c6dc5a74b02edf4ec6f9f3593364f9fc62b04174c5cd444081326982c42a0d6ab52a8b31210e47b1c6503c5187467537a1f137f8b7e0bc82534ce145f28a871ae0de248eb300b3dbe13914c72059ecf4e5db5b2656f17cc7a206910610d9f2f267592fab763d13e8a75005db1426193510a37dd5260a28ac92261efbf2b79a3582737c779720191ee61391bb5630062c323c5ae007c94ca136aeda8ef4d812166656d6a914220c11245fb1afb0cd2734414cfc28a3778d5726482bda84fa9fc966752b8f65f7194f55eb5acdc53e907f93efde4290eeea72c18b202d61c530d3f61babc2f3382eeac60b9731a44d893650204000000000000000c000000d9524e1b2489f522f737ef3ccd8c0f368371fb119aa6241bb8772b5ecc50431b5c783747ea69c95ab35f90007b468c100346150873343d43a0356442d07f1637df48ac344844fb12af236846f87a4f46583c5d2d1792a442c70d5d49c2cd9017c3c727587d6fbd17cdb1c425526dad597cdb3c005a4a846f250c57649e1beb7102000000000000000c0000002b4c9101e6ccd72a798f326da6b95c3c9869096fa5578f762e8e926a88cae57487611450f6d7cf067411d1256fcc011c7eeea15e9f27fa7e2b9a2e592262af3001000000000000000c0000003ca28d416fbffe53ae97b127dd16a46f4ab5294309715a3867ab472d48ebc163", + "proposal_public": "4722a447db4884420c9527339d914132d9980173d2c9331f9f93f214ffb918141205cf76cd534506de662a6fc537b077bc6b324c", + "proposal_secret": "54158dd7885d9790965e8d4403806c325de9c4d58e010cf1b1cd7b9d221b4c1c1205cf76cd534506de662a6fc537b077bc6b324c00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000000c80ba1731d72a0cb766f21ce78206133a8fc17dd01eef06ad0116189adeae4e6a622a1687a44511dd4ec103a0496d0a82944f06642d3f13ade2e23cdd02c10ebc58ac1f746a6502bbff811a986f5e45f2532f6fe6b65704edf0592cb702b76280339d4a91c73811cad8014a06274004e63a3152d4b3e5154616bb7d6d8dca5c849dfa402abb4e4971b96227b0ef46695e14ae1845b03236474b026a8e7e11615a25991895b1350b511167017bcc02738abc5f0c7800ee2bba345f545cb942703866f81691584364b610686c280beb1ee12da61a36aa3278eef8822596fb94142f34a307fe7b9f15389d6568aa4ebc3790e5da155e30c30e98c29e1abfa53c5700000000000000000c0000004312445cc7f9ee3d74931d024c20004021033a2c4bdeec713a90450edd04fc46f2694c71e6bf707c35cb251236acee50a8b47d63c47fd754a7328e3bc555ea3b723b4413ce67df6a645b1c164f510d4ee201955e75c77366b22fd74e6f675a4b9938c00012ae5418794828429de44e7d7dc66843cea8e717eed6b300d2dca95800000000000000000c0000004af44d3937fb8d344e1eac1b6c754c0d8eaf654dea06376d59bfe5744d61df1ca002845dd9e8973346875553c044ef62b7f6ab68160a8d42f65c386a96443b5c00000000000000000c000000fc4f193cf0189a6942d481245895f7044de26126bd9357640ae96454bb42953fc3cd4e7314618461048c100ac8f6241bb1f514266b6f0e614cfdcf3bd9b7c95200000000000000000c0000004722a447db4884420c9527339d914132d9980173d2c9331f9f93f214ffb9181455f8dc41a6a22c4445e8621d77514a08a307686f04c7de615a06bd2234634274080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000008110b4709e2a3e15b5c00603ff239111edd3c121d0b49651bda22b48e649ef5c6e064a0b15efe96dc49eff7736cc8d6e79788560abf6af0c8abaf056b98faa0e6356bb4da970791dcb06610c6333001657379729c5b0a05a8822d67ef47fcb760d344a526c76fd495a4ced6c14cd577a39306e2938da8c6fc51f664c484be61c08a48b64901cd47ba0f79b456707ee12082d686b99d1ec7af713bd48aa1bcc1d801f6c6a50f2e72e0091db45cfe8ed5543a0ae29e2d0be6c4bcef705045145386c40745ae905f05324d190159743125080c0bf536c46047a3f86b75f75819d52297efb251d791a69b93c650de8edbf1ffcf77e3db388f46386bbd82bc190cb23a3f41f6815f62d513e07e94e89d36672e9efb8104f18061e53eef65349b51a6f7605ab01ab244a66633716550324a7790f64e230d2f29a13371846657cbaa75ece9f584dff063c0be03abe5c695b28211cad4d2b44cf0342279c2b466a31da6f6aa85d353e6f6b1f4a64685b3ab6c34af67aa561aef3f63c5dc556205be2bd096959480f84fc5878688f072538bf207e597dac27c31c9f5db34d1c3529bf6456524d2b1d6c46b03a5915031a81bb401a37e0c7210af5874f3d7e4752888860643831b318fc42f804c3f9874f9be731124d201323defcdc491c135919062dd52f9586295919ef7e74e2e9b76d4626424689e3617a777f7b0dddb108057655f22200000000000000000c000000e0985f2f1cc0905b418164014286b423684dce22a0dc4b16e446fe2f0db7a4049dde607a0d53ee5c85a3bb38b795a2319bcb572420f0b315b5739d7005b0733ab7842d176a0d201973a3bc37978a690efd8ed078f2bd503ee22cec3b6954cb62695093292a28426d460542319017181e5bc4cb0776c21868e06470387ec1e14c990d125d2d57f039c658cf38a1e25453697b242a1a173558e7272f4600e4963c9cdad75010ee9d2cbac7b80c4ea4d552f8e34f4e1035e74eb0f35049e0dff142ac39750d8eb8ef27a0442d365da239343d79706e4b989975b84ca42114f8b06b9579510ec360110b74475e2575c2c568d5b4e544165ee02258c05d28f828266500000000000000000c0000006e41416aa25bd82b56d836035db91e1e33110e16678ba31f74b18158c4d7864e33fa6d21cfda0824989fcd602f336424ba5e7c46cc161d3706c38825fd99f70b4a7da66da048421d82945924053053129979742e6538d4078e765b5734705d0c8724695c24b9c975023d405ccfca790680fbed442f3f8f1625d116530aeea73e00000000000000000c0000000d392e43365a566ff9e8122e1d440735186b6c5889b66b19acbedc0ea948fb304b0b836530b0b274077a1959c4ab2c58da4e3a4e4c9f7b205a7f8463a3af4e6700000000000000000c0000000c80ba1731d72a0cb766f21ce78206133a8fc17dd01eef06ad0116189adeae4e080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000005d645f4843d62f59b89c157c8a246d68a0801e18a290541221a4ae563ad0bd644e51966739d2d63012c14b617da2ee246bf84b50f824886239d9ae74d92a4827a887dd2ae75d0a095bda265634be054384f1675c1e0be078b885c50b3374a866da474a579f216a6e709efd6fabc9dc7cbf66fb5e3a7a4c0121884c5e87f0b2642bacb77d98f0ed0f36a70d221c8ba6080daa0a108d0e3e01cc7fe15645911212ab5d2c7d9dcf20174b04a2554044a537c2b36e1a2f28335017ef106630aafe35ad3d3d181c12b2021e4d256a29e54b2f5051012b6c2d27590d75d615f54c050861c1d83c1ff0833a0b4901655e80326d722afc7a58ed51578c41aa7ef0a92f43040bf31b98054c4d6be1ac443e76333f0054ba721550ef779c4a745f2214191b3eb450656bf4285a93cfbe06545fbf0e15d3c553dec2834e4fba0930ac90fe4678f5d06022cb531efcd987767e2007188913860598ba7f48dabee520ba0ea256c63db86c28c175280e735877599e1e1d2903775c121fc72b8f89517b7101c541151890523562d947d38e540e3b69813dfe9cb223d234aa26588c9f04cc5f267b1b2b2b7dc60da541fc4e7662d8fdd518f5b7a64f1569c54970565b24af8ce03f962f4d2b9d2aa3791f7ed117f64407773951851cbec92145b617b800d375db22b66e554f7452317a830be901c421172de1a43c1ae299d43cd5dbb2040134941e08000000000000000c0000007d4b13089ab4b5668e141f5dcbc4351a3f86fd69a927292e9baeae04e12db81bbac9152e0e6d2f411794bc0a63d28f0fb5b2d974530c5630bd1c2e392c9ee25b1b8dc5181d6bf61d37765a5440fda31f6750b226ae070814eb81860710ef7f5b3544aa13a5db95237a0fe03aa499d727bb5ac9142715224d2970a047b8e9d61a1c4ea952add5cc3590096e1def7fc11e96e2d573ffcff93f3bb9b64fb7fd101a1b412b778b861260e3b5e12e4455b73ef6b573598a33f17d7f09a00fe408af602332ae07776c411e0b985073d702d55ab705ee09a9c51f2ad9a5320289b9270c9b84701f7fc94429338f5830dbc9a53a8b3382746605cf75b5e53a1a82894c4404000000000000000c0000005fc4d36da38f852e27c16940e4154e102d99647d4afc8332574ab5617a495a79e9d70b7c41964834e67c765ee9767769b3057122538146277087a527502411372c0da37dde2bbd2a56f0ce1b7c0f463e17622365f454541b246c57369c60ed3f5706891a3863d21852cd9f5e0178d004d41448428aff475397cb155529a61d0002000000000000000c00000075631248b8d92316adf54259d3b75c70545ebf3e39e09b6e3753895ffc13d248bd4dd03636f83870e887122d3f47036fe9d5523787dade4bafbf802a1ed2056201000000000000000c0000006a622a1687a44511dd4ec103a0496d0a82944f06642d3f13ade2e23cdd02c10e" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json index 1e369cd9..ff6f7726 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json @@ -1,6 +1,6 @@ { - "attestation_public": "6896ce362c90600b0ccabd6c03065822c8518237c4eb156140a5752158175c0c2d3b575bc6c989607c80c43f90ccb76c34a00f23", - "attestation_secret": "4a1103e4c738b9212f93a99c71e142e9a3ac6e1a53a0d07a0d5e11acb2e246cf2d3b575bc6c989607c80c43f90ccb76c34a00f2300000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000f7e0005b0facf22ddda8073017a8591431b8c857b74809735007f11413a3f37331b1175e3edc7e2e09aa197a453a344e808ede1dcdfa9b26992cfe4bd82af21e00000000000000000c000000cc03382a322dcb0206b99642714aea13acdf7c1eb73e780e0b061e76a4c7ce1cb1811103df8d9c015311d25f00677b4a42e73f44afeb71208ae7943e8d00b00200000000000000000c0000006ea2760fcdd576100417e573a153b877c0092e210442047953260016545d6b53009cbd5947150247c07f8d1e153e3f1d02f9d72399c805530e19e50f0f90eb2900000000000000000c0000008f4d66016fb9763d573625169d3c0e0db9b4551e6615661fd35337780333e85971a70957ae148631a42a616714e9df040dd979225b24f646df68ec4c101b7a0600000000000000000c0000006896ce362c90600b0ccabd6c03065822c8518237c4eb156140a5752158175c0c1ae847298a67c61f1e461f7bfce59f3a8c4a592b4d26700098aa93785cea0329080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000007ef63806df39180f814cdb50ddce3f2fd540200a871a736025b6d932e2f41a55084f5426a7d95f433fc22806ff1b9070e6c34c140409ee0af5e49c5c8c3dfa6604b98b78154c1c2c028b464320053866cf7be7015cc87960926d5c101fbb6b4bb9cd5c1bb50ecd45655a504e87fa3b4fac64525ce5bcd8340aa4ed25fcf5a84ff16ea639302d857d46d3ef3538d69d364510820dce70bd1e906767007f4e445ecb5a330badd4ec5d541c7316e0a11c482d1ce52dbadef8059a53d83c7d80ee516d301e6ab904ba410d836f513aa48f4cdf743c4fdd660257a82c8765f406ee373b941641bbdd8303fff934234f2d98320c237c078bd4ec79f9dbf163c855301dbec7bb79bacda0072f48ce54e465857099ebd92120ebd45267e2642bbf7be34fe225f53953493b36943e33530919016c5e5caf72c94c127062ccd1219de22767f246a01f3c1846249508982efa9edb3ef488094bf24ceb0585d6e94f2073f268819013039ee82b69e189a935604f560ceb4db239baf35a792e5fbe6593c6b119a56d5e47788fb8733d51d67634e9bf4a2e9b692157a5825e2b16a7292bd16600c36c2f54951e0013654b313bc3feab22eeb6ed2c1a04c93ce51e74344fc6912f9ed7a543b6c7031adc3e5160990dac3d636db6400ddae316148b290b355b7a0930ed2a5a273df85cfc95e45a9d8cd52465f7c85e7afb2b7cea14bc51486f974500000000000000000c000000e208687a8d7a4c47445ddc162476e414c960ff745c6f7f01adcc9a5d98f4f6784b5ac65c498d20588320af04ff9f5b14c9cc985e78112d497651bc5bf3a1146f44da5707867a270459a4bd1a8699a636762a040916d190670afc0e230c3ada2bffd3c113070e030fa91e3547c7aabc7129d4f86348d1db7c34df177b0713a574198cd271cf5aeb420a300766ef0855324a2ca5565dad3d2973a79d65da606344c9e4997cecbc7a457492fd7caae5261869c20946b7aac96ce4c5ca4d670eff0247e75a4f5d074a320e398a4e6382d75b5c107030f5022849d9ef427b1e3b2e27c446f7240c8b9e31138bbb738e1b9b0dd4a914798233d638eafe0c6a4283037600000000000000000c000000eb1b6e3bcd09b2548a86e27ebb2d3e3bae2efe06ea13a56045bae15ac23eda770229d9183400172ca32a0724c1a8102f3d917c6266369c08dab19e14ddf29621d7e25474b1b51e057f96f97e442cad692af0e466af1d0a14e6266b65e3046f3155db9c575c48db5865cfa40c25be312816ab142e3c543a75898de5204e3a2a0f00000000000000000c0000007d11ae67a9eecc65d6b56e722b82d92b49a2dc16abad1b2a6321ec7cea091449df419f3cc732765cedba8d7378b0c404b6007a2812c54065f2ee9a5f1487772f00000000000000000c000000f7e0005b0facf22ddda8073017a8591431b8c857b74809735007f11413a3f373080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000acb83f69c753a15e6864617c437a4743106ee26492e2dc62892d032a418c9a7940beb8245263596047cf38255babc83d80537452bd1bac70931caa2f6138de6cd201d66e07291f247361ce3a1afce84bdb861a0cdd41d3759fc5ec46fff02144196a1a6dfc82eb65819f983963158a45e0641b246d59aa4ac4fbce088dde92130991dd49fc499607d8aa800dba8ec004998dc750d7022608508a495d989635335e856801b829846ead99d51fbd3e75691edce83b547a8e6b9cc6a875bb1ad97147a7ed65977aab3d9aca40666b254f3e9f9f4a31d8b922504e876e27d8f61f07f19ff41c6e98a8636e0ea1692515f40bc805d87c204b4d2868277f67489e373fdd99d42e5a7973674ee58d3b54e89622ef15367ece95e6571db17219f3b0035a3f04bc35db09387937a3d0708788a066b206f93af6d0564934fb286aa8052b3e4ae7e511b1b7cc39e56feb36fc8775237d133f06e80c8572b5ae42007bb39655f66f446856a09202f22f0f4f3f5aca7e90815959419fde520e107178a181e25f9d79a64cc11e465d714dd7489fabea06f5095e19568512060b6bd15ecf1b8629c895ad2b12d5ce0573040b1f9ab60246ee598705d3ca9e461589e94f67fb83405a010c2edb286d1c2c947b004b434b11ff13a439db65365c93c49b7af5489a12eb90604875f30f45c2237d5c1f83e139f15d3409c434f00e958c26496a7c3d3008000000000000000c0000006142b348e7e5de0e28ceb621a042eb669fc60c38327d7262c795905c6284d077333bf40189a00245f288d06cdfdeb646d51c95739c3eed020f4bcd1d0a400151ecaef0740498ce58b865995dcae74b0165a8fe3a14a17e57d3bcc11ceb33251e2b314637549a144e9e4dab77b4f1907cd50cb74696e00d4f07c2f246a3267f6ea1a28458113b136f38ff1036e18efb698e02667a3f11a3238bb3c840d19d803f56cb15013a58c13c77c14b7285afb90fc63c912e64594c062f590f02b09189256e71e30f08b86133e7901f4eba971a5882fa625f5460f03406b2db55d986f827289ece2d5bf81c74cc90012d58587e60dd9fb92df2cef5095ff60e3263b3b57404000000000000000c000000b5da5e106977242d32960b51de17d83873d2614dcabcbb053b653350ecfedd711ea122028f59674df2ae382d8011ee12dac7b44be9500729e3ad9c2fb803ff119a01b0103235e21aa83b9f47a1593966c4689e6a9d943159a2e20816c237625b6ee9de0625556911abe2754bb25b9043cbdd47221c082c72f3eda016b87f9c5c02000000000000000c00000023714133bbb8aa0ab3e9f35b05a51328120c8645482c217167d8be00ad9eb631354bd14df0414815a886501c43c43b24ff39e46fc007547b4e38f3078313300a01000000000000000c00000031b1175e3edc7e2e09aa197a453a344e808ede1dcdfa9b26992cfe4bd82af21e", - "proposal_public": "5e628465d9a677545dc20a69358075097101ba12ee404812481eaf414360647288a33a5495833f74b8cf2022ae422544c3915140", - "proposal_secret": "3514b997d3d65c012fd1a3235c19a361355dc5b55bfdd2e4e867878bfba8b59e88a33a5495833f74b8cf2022ae422544c391514000000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000ba33ff309639e55d9c356f5ab48a0f5e0c4c544049332f2ebca4de0d658541661229557eb8324e0ce21ca97a64f2174ad9d1e54435385b4f40174749fcf0046000000000000000000c0000001df6c865415c5055de00472ec0c7ac2909b0f8062add55212e520630a483021cac4821232150a26fc08f1a232d677768fdf49b123992124d58cf7c3e8ce4a33b00000000000000000c00000010cfa97ab58e3937882d3b3184675149f83a845cd67b520bc58883692538653092960146b90c865b505950389b2995450a42ee765b05860066ba9a528af4c85500000000000000000c000000c7b6920116e1595a03f3a81280516b07b9fdd13622dd7129651f5e4e32e5ee183a52a415cb08a040d1a6d52bbf134f4561fc5121d50d47387115ce46cc12592a00000000000000000c0000005e628465d9a677545dc20a69358075097101ba12ee404812481eaf4143606472c71ae86149d5a468d6981f14361b5e64e970f47dbd06e267744c2b3455ad7e28080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f38b8533bb912e11e3c7fb4f8d57ce079b26913e8f0dfb6e22baad69c1266936f082b5252077915b641bdc73f3d9113386599c61db53c4214b86fa57a210955d44ce8d7c0f82a15c99c4d6405f0d860c18311c65d322172824d8631e97e12a47c13791597d0ca74adf10f95740057207b9130e6c31629435b6516b18ce08c642fdb812678eff9304f0b2ee15e3817208a5d728413e462a687cc7c04551398a403011c065646fb25ba5ec697195efb650d89b955a55b4de4d813fe02591129f1dcb53523f56018c32eceb506af184354e0ec7eb186845f726a5026f0dbbc0af7145bc780e1653b43381a1eb77156fd74d6b74c872db68d55fd40f6856ce7e300736510c30c9dfe94d2e57452aa1c4f02371067d7aee72e97025d59e727a45524af8b745626a62d17cffb3362446f35b649f10ba3c5f074600918d923a4541eb26e25d937d10ab030c8919d21fdc96c039a536935e26fd2960d165ed1e0b9bb03098b9ca4881365061c35cee3142da863da7d72d5f0e23956f16d0af619d39ac73cbfebe4699142c4cf7486137f51e883a4376583fcc313e0b472bf6267a8ddf40b8893c7e4181921e3a47a62cf41d6d0f04cdea4201d3587bd1820438c5be8b2475141274e731191c55f8ed7bf73fa46e2256c360379fb56d67efb722b178f84e3913fc5d5199b2400b606e501a9c7209af4a3f352172636bd4fd5d72cabf5c2d00000000000000000c000000c2dc93165a212d2fce73743a6faeae2601cf292e471d61129b74315314acd508fc57a563e15281498d524b208bae4604ed6ac92c07034a1409437b2926a3452ba4545e34b302b173a1017e13c43740376fea0069d6c1cf1c7ada4c3a7ad3fc473756c371f5987e54898373029bf7c172c0e45700db39b7423315c663c88d23741be2e56300c07601b5d8924746362c74c6263b339a09841c7fd37135823bce7c8a96ce17a74197100050890dd19edd52947fb119737d4a7bce9d714d00bdb150853a1b1a3fe5e205f5e3395dda9508450806fd56aae89912ea82555bc26a785b5d585d3cd8f4ec75ff7f262fd732502deea6e371811f6d2b71e4bb5b4622762900000000000000000c000000fb16a0412ce466355cdeb920ba066927946ad031bf0dc31a5d56f226de545e0272dcda3de01a6217d194415c4026ce38cc93130f8834487ef30455671540f20868d7f60bc286807bb034305a557db36e8bd30e369100ef22ccdfe241874a2626f7f0862c73e0f261d78fcf5399cdda02bad62d41727ff640ab89c3684c496b6500000000000000000c000000832e73629428d3461361a27b97dccd6c1bf02c6042832667503eee6071e5577cb7b1b14efefbb35bca6c485af7a5d55e0fbdd57ed132b136a9b15f75b68c9c2400000000000000000c000000ba33ff309639e55d9c356f5ab48a0f5e0c4c544049332f2ebca4de0d65854166080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000066bfa771397a6452744e4b5eca9771620dd62f7e6188022386b396718ee8191e1bbc474fd5018464f3142510dc2061478c0b910bd20fb3701ae0e72b9e03931e2ed08b29f48dd2239569a90cf5c4c345ee682636d6320f0e3d26182f8b541521a10fcc7ad6144a6f10e33a612adee17839c80c6a339a936c06318d7bb19143256da6c966f597a0035e162440f582397a9d5d6d1cea8d0c7b912efd13868b757da1728157f40d7255b550991d8718241fcbbbd0199599be1a09f3d406600c190f31f00517f112c00a5a35dc3b6d663505fcc762555b178641809d465d6690650fb0fa6c266431704f7e024c39e84b6a055a646279a890110c49a90a594c90ab6ce83b3362c648a5247e9f1700f8569913b6b4702a9aef2c71998a353fdeff101eca5ce22ccbccc21639169f48d20cbe0fddece6191546f46fdf57a5583bb17872a5c7c26c127a633dd12b603a5258194b2b4f0906a63a0a6539429b315805471f827aba043d28252956e2730bafc1bf60e6f4dd53b9bc03699d11a34594952714fac8904df66d8432c483d1571a6f5d677e063d38195b160f0f9849210622ae3bffbc5936d25b9807bf0ac91cf3359f50c8c87262eca6432075f5f73baa6f161028146c2dea768970928eae277c45235a6c3f3413759ca85d31f5b84780c9924a55f2380a8668946fd0fc2a15d3898c034289c70f91644315ee5b025be09f737208000000000000000c00000017bcd0033883d56c87f4ca45f8ca1e6c2a6a3a37fd96d9053f0be816a0bc7736252d990abe23524cc5618d61b59b362c4d8db5538de50a5e08b65971b9b64f1d43556577778a8d41e7c4df3431b9c23bb6f36b0b7eaf5478d2c4196f08fdbf3ea44d745485cea97ccc317205eb7bf52174a10a07f3e59b6247b338553f448f7d6cca53521e7f390005e08d44cf20d25fa40d842239ba4f14e73a2643ce317457e24e721fd0de675df9e5f95a98743535a3f8b628ed4a461fe50fac3c78600b0bfaac6460ea81d32f66de32497924536daca14a4ae0302b18997e386b14ff7f5f6d12da1b3035db4e941bc436076f5d1ddc65813066ff9c291466447694ccab6b04000000000000000c00000059581055eb86495592003b7b24d3b41429ce0750d2db2f7ef3304f235a0b8c30d66ea95e7f0643795166c05bb95add5b43403b156d5b7f3e48129240495cf5349cdfd10b1655ed78df1f0145a0eed47905f4aa49d453925abd86e321f83ec752330e7b2981bf2c28a3ae907a541eee273d79740919a36e17188a4f2af4ccab7e02000000000000000c000000fbcda21f3b661f71b793f0231b689b4a038d481174d00f4e7817db3262b75d69ff654e35315273453647d5000b5348670c9d7d2cbf91dc77d0e8ac0594ba1d6701000000000000000c0000001229557eb8324e0ce21ca97a64f2174ad9d1e54435385b4f40174749fcf00460" + "attestation_public": "66a84b4332343d2f7d6ae007b1a47336e881211984e605417ae0c872ffdbaa6dafa8c35a54d8ed5be0978f4624b1e82e1953fc11", + "attestation_secret": "9f8cd99b18c52fcce661961853a1e6743c0fce7acef3b25b258dfee0a52501ebafa8c35a54d8ed5be0978f4624b1e82e1953fc1100000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000007baa6f3ca6b92806c12c8d4936b6ec2beb1ca46e7a345117b048e6453187261f7e21e8258a839e1bc9c05524a5f7fe7d03ff9a6ba634a209a1f6dd67e1123475667ef65f7e5cf34833cb5620e301f40a3bcd141fc2486c5d99a97d01f5118779bb12093badee5b66abaa655f4d5c3c3e821294691792651eb2bbe24181be1707d976fa1daedf9d1ea0ffe929cb660d7b50ac79779ade3a389498a75fc6964a2c87a958752fb7d411170ee83bd9161a184ae77a3af1704f52c554303ccc7a1727a3439d31b64e860340e8b74645b0f674e567cf03d7d9ca371df5e3276056c168f097080b09338d090157541d25acf9121f05ec33dc19ba39a6c840601f8c096e00000000000000000c0000005369b45887e537097bee9d38f8eb22070bd8e535c181806eba2fb664ca833f4a5a96cf4c6069935ed855700797a035257250b6715f631b5edd3558433b138c6c35d80a2224bd65572466db77a1b08a25c4cc14095ce5e77632ce5b0b35824a4d465c5a61432cbd760429e72e4b024255cd5eb43808541a4ce444a27933bb803800000000000000000c000000817464435935ab6ebbfe27235414c376957eca7b6c6b2a50b3979544e5dcf72cdb782547eedc6a22a3f93e55931eb33260763d2852ed7531b9368f3077f61d6f00000000000000000c0000008c19b403613a763d3719af4a00e733198f152c065e9a7b74207b533d50f7361f1b24cc6537d70a0b6464a56657ca3d3bb7446711aca2075fce01035804d7043400000000000000000c00000066a84b4332343d2f7d6ae007b1a47336e881211984e605417ae0c872ffdbaa6d0e4541040788c200bacfb8419e27445150ae033923b19772f377a15385412a08080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000a16de36701cc6014f714940f92b6c02352c586239496ae1bf6045e012953660a9232ee72ae25632bb8b69131e93e41134c2ea652bd9c22345ade737e16629172979e6d1dc9e6af05e379a316eaceff6f2c0db9211800f908177cf024067b9b52886b412a145f5b59963ef31ec7abc22744c1b05e16db0c421c87a915fe3a192db10ae928dab44c6dd2196271d6887d635a581a787ca28d68fe1d5339b41c0c4c7ca9ee1aa5fdf642ec43f05ae300f14a870ae842690c1b11530be943ab030b3c040a3e58a69b4c7459a4c013a3284f710076cb584ae4df174819934d98aa274737694b0809a3354c915095698a69a4317324630da5a5d30691efb536002ede5f9149424974660871fdcbb64c2964f34a45930636712269560549350df5c6272f8fe36c60e590e46f27f5d2786a9e463a37627330cca31b0def48d834a12d0a0a72173a5ea0202c5960d724291304972cae78691fc274711ccca27027f2a0e5651beec44210612a19db275f3affd07d643994f33f1d72010bef95cc244852f66a70e80079b45c8074b4016e76ad611e23493c515e1ed33719bf9bff4b54e53d4689fd427d1e98bb527fdc3a58ab94c374642ab7745c1a0e6a605cf27ac276b90879d8644cd7d7115a56b88431aca83703c9582b3a85605c508780f13413f2d6391a7fa17b7f3f2c0bfde6b24a1008870bd391fb32108d2f1bdfc34d0e480b4a7e00000000000000000c000000922017448a9f7a5377352612f8e3f7415032b51c81235e2df4c5b2180cc5113cf78dca5682ac2600d67ad0735a01e871b844bf463d73343951a3b7567a372b584c771750ec668726c9307b70ec85de4b73581a09b534c91d79bc072920469705b23e2e3f9e5c78205314e33920f0457814664e41bab7994a7bbdca09dbb7b134ee233a504b94c662e8f0f36a6979b71cb4de552ffc9a577e17084e319076bf26c9b48957187a22394826a040b3603d1176be185f39c3c51928ce1a5ce916a41f8658346b6bc67117d723216db5d83513e657c36bd5477169df103073aaa3cd0e7c303e01ec1bfe0fdabb40155db08c12e8ea190996a61209efa6c917c417065400000000000000000c000000b793b90d5b06fe1fb62c5317e0669f0886793f6daef47e466ec4b83aa613af4421ffaa02bfb3ee325436395f4b36041d92c4bd46a592594bcf4e2962a47f8c14065f8e384532793cd014f22065721260dc52ba31ee644b11c306f279d5d86a504f3bed2b5670de3dcea4ce26e38e2d612c6f52024aee9263bac99d20c5141d3b00000000000000000c000000b3414e2af6b53920943dcd51ceef9d71871ce8585300fb09a9f459354e722d07203c8352f70696310cd44264c107d208bcf84452f11d390151ba774b19e3740400000000000000000c0000007baa6f3ca6b92806c12c8d4936b6ec2beb1ca46e7a345117b048e6453187261f080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000061633c60592f7f0c3fb2d06e8e26c47131754d3990f1037e6878b4442bd84c7633f25357246fc10a150bf303319ee60d6c3ef726b6be03745da949621085146feca12421e3df2667be7b8f121cd75c0e06479370979159098f419e2e33a8f1406d15195a2f8a9039fdde3561463682220e35b45a9f62d32400b9a772c54255312820d8367f538e497974d82e3bad812c18adbd75fc2bd43b9b35814a90bc7a4cf01c4a04ced40e733950350c4e73c13633cb4d6ef51b9f611b929a481ce2ae6644ea0d3c75455d5419de1f2022c8f2268ea4c22b1f9cf6667c7a83420fedca2b79fd363d010d577755d2cd066da68e366558a249c74f7f0d4d70796a40749c61e13786669ae83d1a6b1abb12638b2c59369ebd234328412fd8e6cd37d3f87e2e8efad803f8b32d1720a3b714bff042360335040a49fb103d39dd1b5fe74e7219e4753760e7f92e63538eed67bcc83336715bc901c396ed0428d96e3f07c3076fb4564a304518972243cc2557d8817074de6522513d688c70ec24cc0d042c3e63ded62a535d4a3f7d70a2f208a42c1a483649a55917d77a6e0733605f7c3d4919d3f3eb59b7842c1c40d24768ddb65c719283fd248495d308c3a8b728634bfb20366d4e2ce7bf00149e40f471cb8c6f13c81b047c7cac6b1e55ac7248bc62534bda59156aa9f5682335ba631afcdc32500589197714a8870c9146d563f565814108000000000000000c000000331ecb3ef39946647714956e5209ce7b7509e8236c42b41741fb5f19b17b5d56dcd5885c79ed9564adffd83763316b507c9d217af071752c4bdc26593baaf320a57dcf295bff97504c125001fda08e1dcda4003e4b9fc616d727715a46421d190e2ae3096501874bf585de5723a74548cac1931102aff72742a5567b111f9b23be407d4c8f62722352c7592a54a32c49996a97305fd644159b65507517589b4332b9312acb794e6d73f8367a77cb1c0bb9272e09aabfdb52d8318207cbb6f70813f71948805e4608680df743bdf37a451e942c04eb2f8e32bf55584304c3670e6623232abaac737dba462e3d3326667c29032a429aa2f32e09c26b15eaceb72004000000000000000c0000001d72823040fcd9439f3d1d32f2ac190f66f5e82e95101531db5e39251ceb415cf5693d5313a7d2355732282241a9041414cf4b75f3a1a967de65a67259ef464e49625d739e301a361150651f3b40890373d60704c524ca22f8bb2569b9b1a913ece64e73e4385427d69c0a09ddd02142d20b29102489727e47e8352af721214d02000000000000000c0000005d29784682226f0dc577592753ba841c4c3c0c406158fc13e7be3222a0ed63303ed3100e5596703dafd0183aaeb8ed3ce914382186c81c23c1b62a399b2d072a01000000000000000c0000007e21e8258a839e1bc9c05524a5f7fe7d03ff9a6ba634a209a1f6dd67e1123475", + "proposal_public": "452f8d0831763a7397175c6bde59c0506078515f742b256d9a2a6359b6362a2c7da2800b3f3d74613afda91cea52de6c1eef3351", + "proposal_secret": "5d05b79e774f6471be76cd10259e8c7c9dfec6786f404d5bb91e1d07fa15705e7da2800b3f3d74613afda91cea52de6c1eef335100000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000ca3dd94bdf28c25df088d21b3720fd452b42ae20aee84a2d0d7747594114bc513f31ae25c1f7706bf46cc346cb3f556a4bcbbb043ebe523bda291f670028b65e69ccb12bab1348038859db26def4ef6693a60a4285fe92605d007d4a84df293e74c9262721ce6d7c45932f61c237c27b36b3476ed9b21a595899f81a6c348a29d697825a58263a7da760e6373122c33e8303cb19bb931b386f0b14344f576a04f5e9da34c1165a3821703854ebe11250d8fe8b651a5f00489c9d266380e07b302ba801028a78330b2c25721ba264a944fe3c236132fdd766d27f9c6b0c807314f0d9424bf3951b0cdcdb404c6727f33c52655e423eb61e256d306e72a49b191700000000000000000c000000732b613792aff3027a8d203a6a078f1fdebde41c4d0f164a07c67f00e005e116045c6779f867ad425fbfe91509f2fa16df6f2758bbdd5b1380224749a40a5326cd550733b237dd131dcf5f26a452071d8528315e63f9495dfc6b0a216b048372aa252e5a6480871030873e0666c49a1ace6ba70cabb13d366d32e239316e3e0200000000000000000c000000ea40244150adcb5c81ef462dc732d220b2f27e3d519c3e5bd4ab557019c19648a884501e943601410e89fe63cdbd5503f833af3347a26f011c96387c047c5a2f00000000000000000c0000003bedb978bb0c705528dbb125dfe387517e2f961ad4bf0e26c954b80df6e9ce5473d4313d38c088391d1c4f5dd3eece794a6cc46a4e2bac05911a9f46a2e7c96100000000000000000c000000452f8d0831763a7397175c6bde59c0506078515f742b256d9a2a6359b6362a2ce0cb004f49c36d081b887c7030a15b156f4af85b4d235e71984048672034313a080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000002b527f6cd80efe729e187e1c87a98e2e9d8a990736a2311300650e123deb826d555ebe230b119809a98ca426e051855d258b7964e55cff07a09011646c5b21504263276542d22876f7bd7868ea2fb410f4d3504a9797043b6473e92f318a0307acf67662acf505343c88c8268680286e1363cc1f09472c6aa565b368c9e9e142309f0e1ec179d77a2dad577d2c9184257b439f74b602e355fe7ba040447e235f06b734742331fe776f68cd150685ac22cfc1506b11b99d545e1e102d61e74b483a7c502cec312e468e745265bfc6ae2a6c9ef856330f7032c525be4c3c96f63dae58e065687cec57c6705c020db223195c5cd56577dca35a1db93836983f262476c9bf444a38b07e971d0b7efe86320800d3641ffb7011145e595f0eb6e6155dd1ec9b2eed3537743c3f223b5361c624afa1fe571768f150a89aec29c4f30504df60c476eda07d069dda7a75b609ce33e408b464a8c705312744eb14b933257020643c66d9e1bf5775a5d41c8a928812a2be852127d802367ad0527bbaf9d71d808afc0c20afec18ac3f7c487b5853086815155bab839d2481f77a62eff80a63d9be3256ffd7a65d9c748b59e7b7a04745b8235ab151497cf9ef2c7dec08293493c418397018fa14ac094c0ce2b98625f183dc4c9b3ca01d6716ee6c4c9dc8769c21bf513491514d0de1155710fef81abfb0920468ac8d37cd84015bbc4d076600000000000000000c000000270788197ded6241db3cdb2845765c5edb35016832a2d44689b2084a3a6d4326c0b8101b8a68a5041bb3070aa0aaf81ae382b4571aa8a0254fec087794484526ea90635f4f953d1234f49f63ab15f45d4a82dc6ca2ed7f6ac7dcdd7e9f264c1267fbd70c53f4d419177a66053676c33c71cd383da0a64b6abb04a6709fcbe30eb7140f215b60f93ef023ca39f3fdf75dad800148227b652a6a5d52265d4d8c3e07ca9a497d377e4a5aff6c011e643e5792b45550258771297c2b952906c1d61c85435374c7510018bc1f2a227efb056b52981510e7283f4f3cf8ee1a4050820df0e93b70c66dcf0554af9511adecea29094b8e5492ae784e49ce4f27e66da01600000000000000000c000000e0b25776b0ff1f6885f6bd101c83dc1d661c670eb42e6819c8e8ae59e096d810212823155eca961d066422372c5fc9722fdfc26ac72bdc6e0378b614a00bb622a789c0662036c06749f3ff736608ba3f99a2795c28e6b176ca64d42a63072c60f025f32b359fd3398fb82341a08c7500a2924906c502901e7ec69f34351a2a7100000000000000000c000000d48d3f39477b6c5330d669620127720680f38363b622ca250458a87ab8fef31216cabf32412a200509fef60efcc28d72d757ea7dd5d75932fc192467aae9b17e00000000000000000c000000ca3dd94bdf28c25df088d21b3720fd452b42ae20aee84a2d0d7747594114bc51080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000a8f72273a212ec002eb9235b2d50e04572db525de75c2330f87f8210f5a239015a10406e7a68817b6fa0811b13cf1d60c563d50a0aff333b74a54f3006128e7c92ad844f15d1b82ae1f5b47ccf405176f69b762ff888d468eec1507a6696df1b61bbb76be01acb3b40e4b92347d13d7de662607cb689f54381cef329e1274a493f4aa657603da950161f4679df354a10b6de6143b87ded2c182c8255a1011c4f27c2646a77c7d0200cbb91290ed9f45af53a72267bac37120cc5b837fcf6270f40086641d599e62bc900431a363ce746198f933d00b481227d3e9d6d42ba7e41a8bfaf67ff770601dc478a32722f3f0690b67426fd32ac01a20d7f4311b0ac268e7a9f5bbae3076308751b73fba18d1f19cb591734aa8a522ad1e305a962c34c77b4ac5b2e65221096dfee03aa173d08126e701b532ae53db711091db81c7d1397c09e1b483d6f13b4ac21025c622e6b3903d83c23590570402f6d07c5e65d5e3512c930cc872406c1648a5a78bf2d24fb3d704ae2236b52cb4d7626a1e7e27eccf24a4f79f73a4b6160275dd06682362f488f25c47097635530e66891e0bb5851da566a82e64a068589321928cf0a57c3693f6054f0f80b93c50d7bb13ea05d0b7ff31fd5f9b56c4e28c8406059931e7cca933827e1ad36751c504e00496e2e5bbdfb0f2762d576285fff623674f60d65aaad026927ce4073041f1c74a6080608000000000000000c000000fda1714b0418b87a0363944d199df10348a28b085b86502305f9c239699c1c6772f23e39bbc9151a2652976cf10bb55c761f726909163d6d8cade2676471f31cb4700164b423562ff2946e707b598b5f12d8ad3eb5b70f5dc8aeb66889296a46b761052412d618656de72b307587131bbbae821a96a95c651b5e164380984b3da57a1d049b0dcf1c9611d652702d2d0176f282454329e25bb96f0b0988595200c634b33bf253d85b1acc7b2a7a1d8c33ac403751b14b005aaf4b6478eee2fd13aa046f35948fd773c305b0642741220086bd240635f57b22b5e92961d9515558aaf4f55975452b71e041f036d569be09a38db236da78e77de6fced382d24501d04000000000000000c00000028bb4877126ec43a4528e066a3d8f77854bd841bf2e10b472f2d61214c0f642b60748e4cae8ccc44df371d43e1a873565e7d0f06263f0036112b9630bcd6fc5e9f84a55fefeb851b594c2a3d8049f6090197f272fbd9fb6b2dd124296f8ecb284dd78a37cf4f376c98ed220789b1fa5554ca0c3af9918274df775d4892f8b31202000000000000000c0000004693f8232db0f5679ccbbe60355dac27546dd54c3134d845398e9c0ed0651c4037f8334323a0056adf2a503895515571c1d33964f00c174a5fb6452630df992201000000000000000c0000003f31ae25c1f7706bf46cc346cb3f556a4bcbbb043ebe523bda291f670028b65e" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json index 7e0e66b1..3dddffd3 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json @@ -1,6 +1,6 @@ { - "attestation_public": "454d107dc0156e61baee057497d5667adb027d68f6fffb2bc61c6a38e45eed3531c9bd77e64f610044b26b1ec4047929bcfed946", - "attestation_secret": "488d6606753c22fe418f0c599c86acf3e44017875b0d079b4ef0be81f106f87c31c9bd77e64f610044b26b1ec4047929bcfed94600000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c0000003a99b56104bd494eaedd175a8501cd518f2b621e64ec5a404a008f7db5cd6a04740060545dc3c0013c192b1cec5ebd3555c9501a2d192e62b28d7158018ef67500000000000000000c000000ed066b57ba04a41bc9ba042647ce2425bf3c2b0e45f0677894332b2844519a58c51e627970d79f3c65524229cada870439de3140a3e86839e238ba22241cde0c00000000000000000c00000075251b56dccbf248e7d5a61a7ee9902f989b9f13a0a18c52cc30833b777380304108a706fd58634010a3db012844bc1fb81f62114635df64c2a2be6cca27f56300000000000000000c000000f2618223df3ef733384bca1f4edbc369df42e75ab8a7d02d39262b2de103b955fe657571e34a805364d4c26ceb19ba525bc17036dd18327c0166d83ffb78bf2900000000000000000c000000454d107dc0156e61baee057497d5667adb027d68f6fffb2bc61c6a38e45eed35fb384203f1e47930b4faa15f4a508b1c6b39980494491f31a540e51c4c2c0657080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000002140d90c9d08b87b806d4a41d922d03293129520d27fc74fc392012eb6f02a6a147a186666f9fe78c70cbe69f13a420fd51fde4a46565f657b24f079482d700d5c26d1282fc14e59f01f7b4e7685132e52f496319c1ee177ab474b57d8c8c55578ea3d06c06ee30961a2775f7dfa194a635e2c5599ed150c7e3cb926924d031f61515927a8aed47af16a5875697bef29b911ad5a4d1c8125665acb7d1e6c48465d72480a5fdcc83a74bfd955490d405cc33376645a2ff86cbe0d665715aea1452d8e65701a6e2a067a78eb74c84c0750a866bf6e9c93d921decca045ffa7054c71029b1dce7b89040837ba1db8b43b685b24af70c09a8a56b7eaa830a3a825595b648118e2f52b7610011455d40dd50c9af0b94c5d4c791e7efd6e2f75e5117172e0943fb51b2c606ea70830f494375dbba3c904923b803177d86a56c4ac71783995c00dc28bc96096b97107b95b125f8ed41477e7470e1e9cc8a14d85b7646c01db873ec62bda1af17a3c4b6695264af266661c84531c6f3835e70de99b1d7cfea6690f62a7ad36418c2a647a463e0dd13a0c2f6b7c08181de8ac170d131c21595f303ab504c36b0e073a0dc1ee1c6c4e8b8d0d82cc10693e9abe7d44ae3372c8b650155e830a444a3bb74d9ba2a7684fec3a1aea18c76cc45ebf6f775fc1263017fb0d7e8a523d933aa81068a7df5f6635f75165574b03f084b569fce1e61f00000000000000000c000000e997bf4aab237731a8113d29c78c5710e1db4157bcd2f52ce1a8537b3cf536049eb8bb1b52992869103a5c3f81492a752457bd40c1b7bb1f7771fa5a6628342776b042528d6e1157bde3e6100eee9d48ecb7cb3af951f810c24e26176df49358ee0a430eaa2b03608c37cc5ced67ab612c0b31237f4a03574e7ceb2d8bc8bc1cacb7df7b750810166acaba353c226b057be9e442ac43455f13fea944b4135d2f013ee164489fbd56447748304956f307d0e49668264fa27516086944ba97401153c18e501d9ea064ed8b763030911d4dbde72a6f36b03967c34051357ade3f4de6dfc03fd3f2c94e246b7e72e169d00f3499f06b64bbda72252ff86c0805f21a00000000000000000c0000004385677a5e556143d42b604e9f760d0944a2b01a2c056f521a996c315b151e2a4afcdb0d5eff3f081eb16525d323345fae8519721b783e4b360d56358f1bbc4af1c8c92df91b1b2b90a3306c371bee2190e7132f13f7a37bfb5dbe6b747d0d236cc6a3768598434e43b1f56958bd8554cd797c2f0a67387e620de4050015d83500000000000000000c00000018852544318ee44d1ee7af4408203c73c67a176ad41d586f2878714ea18edf0822e9a904a7dc79438b6750227740796541650562cd3e1510426f1a444e28323000000000000000000c0000003a99b56104bd494eaedd175a8501cd518f2b621e64ec5a404a008f7db5cd6a04080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000466a192d29106e2535a2d938afaa7c470da4167d0a8b6f43c76c553fcb01243c4618f11994f1fe0626bda52dd43b2f19401e0b1b235f946fdce9a87a5570b3071b83bd052fb5ff744464062203a2245bd8b5c354f603b27631049d13bd7c3f24f200791620066b586505a049743f7068ca096e1fb0c4ff2c9e1cec3f573bd9589f988979ee2a3047ce73940386b8af1aa3018d3243202f160be9ba06aa94af05989dd85d87de284d53769163ae7d3313cae056233b4deb727f2f542aab16e93aecb6a22f9c40b5615a34b3439c1f437bb62983786b073850bfebd147553d3f5cd72c14627173ff0bb7de1c615dd22f1eb427ef6b933b536e02b0c83a49ed705351cbc8465bb8fc164109372aee527422fbc5de00f941a8753fca075333a664153688cb2d6595392cc2582f116a9f93289882987c42998a7407f0783dd90e191b23d1d46fc4100711f3ab212ff9b2420375609b590718e426e692da7414372d4092678d5afca50f3b75c91728bb74345e6e73ab0464868f1fa9609d1c1963ca66168c1b2c2947711e6e2d6678d2078d0046e8e63cfeda4d0008c7181622610926013d0a75575e08040e83e9548ccadc2c7693fd2895c49157f682e00fd343b2384bce61072c18c70a3be78b079026d82423ccff73d623525ed3381719dc74fb53bd5bdc738979c24ccec2fc23a92d541ff13dbf2bdf54612001ae3f5f7f87e93408000000000000000c000000f2716352cf38104ecfc578381d5ecd5a87a5bb07bc42b17b15416a1985d052428e73323ce6ec03491cc97518bb26bd107641461c0526c3151ee92928193dc217c350b168005f7e683b547c0017f2ca4c64544148b57382748789b9446f0eef7c24e9b228ff1d46400acfbd5dede3cd49f60db92572671571005b4519ba47ec592ea54c65c9a7013ca24d8d107294504271146934f13e0335d815817d7acd3a6370d3001ee7271325fa01d836ee2c8b03a9f753793f54cf09a509235dc8f9f25f0bdef520d1fd48727f9d755d6cdff4735b215a256320b954ea49413f6bdd0522581b7e778410781999c44229c0e7732ad3007270ba22d96c803eae3e7d106b2d04000000000000000c000000031ac722a4a9271ae1c7257c6632fc17f4ffdd5bc7144b0b522bb76c6ddc5717eb3f372902bfec3b02dd5868ed15404186f04c770581885f0d5f756be31a5c21753789086c6e58117e66314abe565d4815f21d32b2f8333882f56849c9583b108786511c93cecb17d49a5a42a5183a3ec8a7b7236219fd36d4d9ec623a5ce85802000000000000000c000000819e4f5689975b312ffe7d51a653a364216ff640bcd7fa20a2ac792b2a5799792a24871be3a7072473fd763a1ab46f0b81e2ce2cb9a1931f1639c45085342a6e01000000000000000c000000740060545dc3c0013c192b1cec5ebd3555c9501a2d192e62b28d7158018ef675", - "proposal_public": "ac91d91a23744669bb2a5356605a161a5ae28c1e872fcf1d1e8cc63cb278447d8b889c77ea21884bbd8ecf2ad4824c66ae098a12", - "proposal_secret": "ddf3183a1f36d13458d6e8708363f9d93d857de77eb4b9dd5617ee634cf075628b889c77ea21884bbd8ecf2ad4824c66ae098a1200000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000a741e13b18883a3b675d7307cab82936cfcfab22187c8e269d20f2040b45192f85338a088b5dfa618459693669ade71999bf0d08caa84d779be1ea57684a6d0500000000000000000c0000004934ef733abd0242be3cda36a590983b5cbcef37770e7e274a1e6c50ded3581a77c506104f41fa3bdcf5a27262baf52ac67d4d2cbe113323fa27ac6d0c57c01d00000000000000000c000000d978570ec4ee117d2644ed0b4caa3e4bdff3d51dabcc15129f1dbe2a43bbed0377e7ba0c5d480d7884dae10f19b59d5bd0bfa12494a87f2ce0013a35d4b1cb5f00000000000000000c000000090e0458f9d18212ffa2a1784fa24b76d3692f0075b4fb30d5ee812e70e05b716a74013f7f11cd019a277d0a8faf95265ef9df367caf4744897398043efd3c3a00000000000000000c000000ac91d91a23744669bb2a5356605a161a5ae28c1e872fcf1d1e8cc63cb278447d9342c649622df173681518510547556b54ea4422a7f184432f1f4c2c26b10e5b080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000003ee9a6041ea8b1ae53c16326e9d317332410817d90a5112890d30174207a70a44c7d6400a149e5a0945402c78b5f0278405f950d783636810a70d19fe37a873f30bb31b6525d344fd65884d2b441b06db18ca3ea245ea21812ee5754f054629e9512d4ee66a101264cc823c3241fe48f995b923685b0c18d398591fd8619f6dc354243cf61bab5df6759c6989e8de4bc57cf144b8acbc016832db2559a5ce002fc778615611610d6f7c0828a032224023103570d743746688ab2978c700db7ced7ed44719c0b23d92079c23850df77441ec7a563349d672ae86aa59724ff035f97dfa5f6da94859606f46697e279a3735efe971c2cdf2795e23816cbf27ea2878a6c32184b629629709eb4826770d35e504884434bc2874be656c590d75fc7b80c29e5602be5e7499319f22dd89071245a875611335ae21053c6f3864f8e1494091db00f5075a4aca669b73590e116da05621513e24046ab02b844f2d62ff575b589f717831b856f804d47353b774726a4e9044636aa929e7f12c5dc12392024e0deb00ce985f491d07a16c922a5e18a1b1da06b1aaca753811c51fe372871fe0c37d70537f3200f85e6c04f0d32e773df558102827e53d1c940d581e3fa378727223390dab9e4bc6aff0179ebb13757a0e8a7c17108063f6d4bd2ee9a0ee745e4fc82c8dc36337cf32e26af7e9545b4fd9c81d73d8d800ce62b728455f6f7200000000000000000c00000031bc755d2e621b20fe5e7f2b6fd1f466be3b7f6b2ae146497c8e432a0f0420319f0b0805442dcb4e454512272e5693355b0b261d1a25695a08fc284efd5c1016a284ba3f6fdf21560237a642358cf36c71da2f5325bda050eb49ec345467684db913a47b49aa4c458f89bd4127b59418a3d4b64700897b142f0567369cbc731ba7bd1b15401ee13c995f351e2ea4394dd1086629296fee660bd0d95cd6160e358e68a8109f473418f80cf00127a8800c9f9f6074a0a01b348268e9624134e9196c86ac687ce7a13ac89f5743e9a5f01ede4333722184610db1b75f5e82fc5610db66ed3732f69d6fcfc9c835976a39478fcea9579809676c26584d6d39352d0c00000000000000000c000000c5a1d57c697b6e55edea330235b2c94a81b8d329964cac1f86ede821aaffc84c06a2fe348254f17b62611b4a18edde5c8b1ae56b9b2fb5012a7388648dfe850eb42b4736004e33201508fd19e9e55551ab1e670aea4e193245d79f243d0aa20ce67898756b533f0489f2ec334b38e37617f04d6a9fcb4a5a150539262766960100000000000000000c000000d18e41336755db50381635441e07e4493a81f6718e6bff5b7980d528c0c28806e8754416d4dfed7a4f46304c36b02e4a93328129a59cdc00d2485d333a9ea73d00000000000000000c000000a741e13b18883a3b675d7307cab82936cfcfab22187c8e269d20f2040b45192f080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000061fde7552a4310436ff5cb3693fbb97655c4bd0d42afec3e2ac3df52ba9c3034434a5656de0f6045573afd221ff9db1b8920426820669d6af8ba8c7b8ce9c65889cf37035a3ce96880d8da45754deb1011aba70fa207290256525c1305b55f08feb9ad06d06eb70d99900c52402a25531e77a242ee514d0d678d3722e285a926a471723561258c6a9d3307150f5838410feea9714c1e304fe36df94ceca9bf4a3bb4d04ef5e788274189d60c97a1c111885b7c378bf8323861751f2000c7ae3908f14012ac54907cea88ec59eeddb43d71b15845a6c05c24289e4a4d9bc594640b88f00e11d7884faabc2f2770984413509a10155b13d12f0622b601d1ca502bb4b3c8233621ea267d75084849a5531f2d9cbb4b37d7b8020f5a894d6d95e73716d4e06614bf3856f087bb271f22bb34e90acb1bce2fc7488d410f2341cab50fc0bd3a35dfa49a7933698110bde194329041af32e0a2727649499d66f285205a536fd44a2068792e003721173ba7343d80a2945cc6b9662dd9195111fcc2c24145ac446f57ac695ab3f07820c361076986ebb8276f85602a5eef6d54123dbd4342db9e65d0f61f151e5347224ad40164eac9f872bfb53c3907b6b620a6faa07cf2958534de6c0f6266d50d4ce29abc33dec613701973667e93d73b0c6a3e306d84d5c01e076f74504dc8e26dfc474b75b3b7da7919908d5905b0872a58056e3308000000000000000c000000f477314e64e08d779b448d047c2691532b81a542bd2a681a44706b43d01cd5374cea091362f22e7d38474c1d0ff3d84333884c3a93bd100be8f1975735181652a9af1d78a88703032c1548049f2c6552fc63bc3b7d2ded2a02642d003522fb1ef5d55c2818b8f51d140fb206eb4d535171614e1d491bf04f920b9c20d1d7f6596e9ce2543829ff5601c8aa442f25a426f1ac6a5d0850ce37c4e797286f11845b4cb41043d6e2fe37ea76190882dcdf19da976d47ec98e37a43271a260698813f0ce38d440e6d1f61e8bb5825f24a8e0f9c81d72a0137e777b9156741078db9569c62ad56dba48835558c0e34f1784b754c2e995b2c2ac00df244253f3fdd883b04000000000000000c0000002036d731602d9815e1d0993f93c1ae5aece88037e4752d4a85579943c0b80b1db95acf6182adea657772f7613880f3275e2129791c732f32c165ce30a935db41dfe79942fa13f979c0ee0332326e884f62a1bd39cc123c38b5c0395412a7ff70c748c029452f2f417477c9572b39fe680481e23ab02b907257d8141f15a5bd7a02000000000000000c0000008af2e43ed11fa547035b704a9b9d141dbf7e893ff69571451a650e6d235aa502407d09620026e7212ba20a5e6761893153ffcc0f61548d56ba9efe576186196001000000000000000c00000085338a088b5dfa618459693669ade71999bf0d08caa84d779be1ea57684a6d05" + "attestation_public": "d703e67ce93c9b61b2ae88063ce60f13822efe03d8f089582615032e2b44346fa0199c2320dca35012ec1d414dc3b835da11cd73", + "attestation_secret": "8d5d6f82b410547f7ed9e0c9cc3caa31b53ae029f816a269c07199caa9ff7a9ea0199c2320dca35012ec1d414dc3b835da11cd7300000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000ab580905fd7bff216ed3fb3f6e43034639bdb06f34b3542a54f9c3759a5f1463730ab83f6f8a27082cd53567fcf8f17e0f8c6f47c6d1856f1e124b76c36ae7065f8b7237e6b5002f912e3264af77dc6e0375f21b14151b5510e3596e9bd8714ba780fa615a9ae40ddba3110cbdc5c104b058194635c6ae3bbb83b36ae33c931517daa472f9657f3455ada8751e2fe75b03530b427f74987c4b801206024cae27523cc410e2ec182923ff16631abd733741420d549b6b7e38f7c4542f128ef624d1c48034dd0f56319b5b6b5ee9bbee18674f5645b39e8d54316e6249b30ac66cc82be10a05d75855e5002d19714c3a259554e212edaafe571c14ba4ab30eb54f00000000000000000c000000ee21d06011e90e5502b00d17eb27c06185def55ad7b5bd33b0f6740cb20a304fa2c9de2f7585de3ca08709489f44db466c877c781940eb6c25c3735a0c3c5908e7efbc7d3583f017c7fc605651a3524326db3c75ad9c096bc9b5d8560d7b4028314272420987213fbb8c703fb06b6d1719a75d7378c752517814fe036df9aa5d00000000000000000c00000075d938630de3fe051ab7c12755d8af5926d0271cd75385546ead1417763cb803ecbc8f6ad14c1d01fe943167a309175c695dec79efbdc9513e9b20103cc4833f00000000000000000c000000b0d6df292af42864206bd01cd78b34209767e7524f6e9d154f5e26226b411638dfdaa10e26689106afb5b338e1d7747cfc11fd6ee4a1ab79756022403a41102300000000000000000c000000d703e67ce93c9b61b2ae88063ce60f13822efe03d8f089582615032e2b44346f4fa4fd0f14c3d33056ee5311e5613d31b330ba64aa0dad134c6814103fb47119080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000001d0c6568b3197e6eac3a57215c918f5b3bc4261add0eb374e28e6d77f6bde440df6c353c7a6ca35cc21d3c19616c693908525311efc247304c8f7d1d9d1c6c5d8284d05501206a1b0a43d053f6ee0d1cb19d011776b67e0321c2b10fe8524b196c2fbe48b30cc31f0625c87a64a1dd59a0f64b0127de6c5a1b7a3b6623839e243355e942a030406397a988367178a0331ddef66c94940a5796aff548df5a863958efc7781a918617b47d8e454a317b78181c393dac3f1b468725e049a1ede045e261333bcdd5162e398a187156d49a6bb1d31930926c7b290a7f1e65ab839e3635deb80ec3cd2b6c22714f52962c296b7b8ae57ece6ccf617f37d85555017012ed92de3541a06b4341d07675bc0f8c5e7c076a5105e40b72c14abb315528505720d80513e3eaa2558015fa60bea5467b19e08e337736cf286a14db4b6af26d423500e34d0e3e0d67a267e66c65ec9e14820db06fba6aa601e753af14c1e2174307520e1bc160056f64c98a7c3f0d080c4c477d3f2924f61f0ed61447e5e47864331acb44ee539825853cfc74138dbd3c3e173b4e7a3c506b6af62f3a133c79241d07765d0ac38228286cba685b46fe578b6fea56ccf104707cc45b3f0b2f9132b2864e02200d5c7565d3103fab6fe5590213da488f6e5b3cd11a6613e547ed2a44991059dc94a629e8ce97112fccb937e1ecba57d39c8b05c0009d4dd214d42200000000000000000c000000e123b67d9cc2a24b92233f1fa1e4eb192e18fc09dd234d57c9d7af575799bd4184590b238429501b238da71200ad4a203b90552943575f6fe86d07479bfbda25332ae5672263d5773117e3457e634e1ca4a8b7363352bc149941084f8b0d980005e9604d823145282fcf7b376f007260ca275149fea71167777647742a9c3745d9c49e001e35db2709406e410d8a96451519581bf597ef284a0fda1a23ae2e5d6ee1d403cb0ab04de03b694d4e84662c09d51d40b1095a3cb4308d4b88454a4b03acf92b524e3036f70c2343d688d049602f997181056f2f44e43b00e975086969d4ef74e113b86054ad7d2541f6c56f265935197b26e7026f7a673f9552d90600000000000000000c000000b246203b613f7f09b2141a71d0977a4e28c7450ddee740146e45eb33cab34520917fad5e45986c18ce245e12448806530c0d0313b0c7fa426358b90b99a7244ad7e20515c18b241e267521248770bd455cd0813429723a6482b99127a91f4b56080699322d5b082825dbad746ed21f21cc72b21bbf23a013545a903a3dbb463a00000000000000000c000000ab480909c3b1b93ae167af27ea026e1cab8ef94bc6ce512d0c17b53bbd3d3c79364fad32a3724635080c443abff3db28d31ca46b1d0bb2655eec9441543b595100000000000000000c000000ab580905fd7bff216ed3fb3f6e43034639bdb06f34b3542a54f9c3759a5f1463080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000c8936859bd58c11ef2f738429a419d4900db58219188d716703d0833d64f8e6c4930c55178324b26c5794743e5c6aa755e21432ea8654c3ff3302456aaf105618f9d0653b2223514cfc87746f5dd3b2255cdcc7aa8cfa071151efc5617695607514d0a7648676404e97421444a1eca525526db73443ce5651418fa22fa64af39eff7146cfd2b772ab73bed5ce9196a593c62e72449781d1578293b1bad43b442f2ffae20f5d3e51d2488af69549fa34a77f5313212868e349539b14cf17e990f6a0f5f3d5ceb000cc7d6550454b5d8397b8fc401a0ba605f5d39941f93c4f946e6f0690df42a9f484a54c4374b4ca2083013bc711c5efb53d133c25264c3a35e32b8905b7ad75b196101b45a595ca832089e2b2c1b84b509ba56c36b92070c21d15962608cee9d6d75e70a262dd6dc74cdcecf55e7d918379afb067cb680417175a4bf177553515b08bc626e8bc48f1a4ebbc77752fd4d3bc3e3c74fcef0396f094945704ce5dc7d90aac0533092e261745ae97c460e9522cee16328b355123d8092b41b7efb9d38d526bc68fc743434a7cd9c2638974930d8f68d5db8cf042ac65ba60919853256937a527ef152eb39d0d7f64b6030e04ad919405097aeea342315df3da1d5133b5a47ba4ed122cc458c6a01494374604d215a7d7ab92e9728213c22278dce9a7ab4b3c520192a81002cf95e438a399a6f7381d65fe0e4552008000000000000000c0000000557722298d72f738ace9c483f37522987e1296af8ad2108288745336d86055703185e7c9d8709685840c909f6d87b67d0f08473f682c80080247d614b3073727a6fc6586d066f63e86ee55728f89a4f78ab4f4ebad1d478748f5a529d15ad545c002f5273670e2dae18dc40396f21452d3ff75dc254931b37d88c155920a47c5ff7de049f39904c23760f489e868d6657af4d332ff19b62540cf81f6b446869fb68003837c8eb7daad342681e75d65e867f2f266b29b52bd4dfa706dc064105b306ba744cfdaf688fa533760a68e019be545328b382fd66af9238718ab8fd6b8c27845a7ef8d760bb555439a8391413b58b945a67eb223e52e4b2103dd5af3b04000000000000000c000000b908f06cbee68a1f0c546f5cd4cfd476ad940c69ed92d3240af9322b6b8a25495c4fa545f86c6b7ed187f30bf0e90d7c31d50c695ff9650727907050edcbe004dbce6b16454d9952d7d6915175e84035be27601b4f4c016158407d26ed5cf5451bed6d0d51796d4c5bc1890ca6ff804c2af95d53bd2fe75089b8353a0659ef7802000000000000000c000000aa0c3644f451496d426d1b2ab4514c68c1d9bf5e75265605dc7ef4172295f831f0cbf2024de35b48e871ed77a9ad5e2ac47a29109bf6bd4b0babc03b5e4fd04801000000000000000c000000730ab83f6f8a27082cd53567fcf8f17e0f8c6f47c6d1856f1e124b76c36ae706", + "proposal_public": "9ee9237afcc3d75c0a8271412f2ac10f03c0da760e545a21cc7eb8331381f62bec027d1dac093b7a09057c187dd46e6231c0c007", + "proposal_secret": "c08a0ff34dc42f90543348e06baec18160e8fe836d1158124acfc3f912a836e9ec027d1dac093b7a09057c187dd46e6231c0c00700000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000006c255f02c8fd2c034abef1061ad0d47aa1dda51cf7d9186d2667dc431a44b40967d07423c0cbbf69c6258f4b8766e4488eb7885f9ae1a4669caa0b2af02ec256f34eef2b4b490419aec5787ebc914006e006414c8faeeb740215c763e996c72566873d6b3ec6c05b70d3e32f2d76216b9ccc8313a6e9d322a309683b91fc4e3c8f42e4619bd37b29ded82543758121167f97416a2b1ece035249f6241aef6b173304441192092275a2c0c34cf1c5bc5a67f90f6e2bcaae5cc52d83273008c631a3085f49bc79015e5e38c06598911f6783ca23056202fd370960301e50993673ddc01674fa22a62b1bdbb13f0acd3d1ce6409b23c92b8a1006ed183db148843100000000000000000c000000aac3c21e8943d27eb3e96e14514ed30209a0e948a6958c1b473bbd79b69ec72ca11f6571a6e72e6067552f59c9a97d26c2bd9f104487ad48b5f7281c0ea5c260b37d0b427765af6ce4fc0d724a4b766f9f035d213e00ff478bd83115ef7b6c0f53fc0e2c2da471282c971b7cdfd9994e53af106d2695f64edf893709dbd1195d00000000000000000c0000007906d66e6c67396d1c93964446c1b6385c866a5d94e5972c787e524ce556030590755e1af7e92814ebf62e0791da5331a68718513f616c160d2e102819389d0c00000000000000000c0000001a26dd01fec9cf6d63eaab06ee201b384646d74f9312ff69f8805945f77769716818ca747dbfb93fe20031646d152f660f13b92424e62175bd4a0053b2e3395600000000000000000c0000009ee9237afcc3d75c0a8271412f2ac10f03c0da760e545a21cc7eb8331381f62b35e52c1b0c062244755ad1335756d00c7843c77687921e10185bf63e0494e92a080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000016d73b26e388ff533d7f0f12cc969e0a13d05a681446495335f52431c663f0244a40bc073cd55724eab0d06e77589f63df0c9a69bb9b6f0882fc2a4ebe251a2fc5c04e38b0c4d27e7f894d2a965f3d60b8708b19d440e819d18382231a595b7733372a0bb449d13f059003321b565f37a8960f6c1eb6851c85cbc4548c85d51b3f67882bbe1e5736b07c364d690b59688c3668392cc9a73a3e3d4b6fd323801df8a40c1bed471622b2ae61576a856378827911041d134a01c1fd306bf281ef7649fe562d7e5a993422bf0b7923af99038fface3dc0599125021be038631f72529f40ad5f1a6fff3d0498166e1c4f664ba2df8b2741a8355aecd2eb09283b6f56263f9d01dbcb073e318ff95f94c8ab2836b63b53a42e032695fb7364b3e2c249d41f0f0be89f98620347b25f30893f02d03d6e48a885f8060973200a54b68f4cb17f404c6757e6006181bb362d754e5e07763c5ca2bfae11146baa03b57b475b58636b62f64fe2275e02432b41793a2b12137e4a1af48c05bf78bf11a35cdc3410ebbc3fb1c56e38b942751d655bec19a259db5d90f29d2893d4b003ac245a2aaed06e18cafd744cfd2b0269c1fa3709c53f9d52e481d3154a4d48452b380004ceb9651e2c283703566171075facad75b480b64a3b66a9417277d7608b473269d2c19f7cc2bfea610cfd5d6ee519af1d18ecb92923cda01fb9b1272b8edc6b5600000000000000000c000000c469d12c812c4b5d3a5ebf203925922ff6e5291f42f40260f852174fc2060f239906726766381123f6e64d40a414c60990acb5616bf11b23b3b2825809230e12b323d13a3e6b7376fe6dd43eef7a93385e04550df8fc4678a9389608453d075476a79a10a19c0b54de169b274cffc34641ad7e67eff1f91a7ab2c148e38d885222316a1cdbae5912335ea7389b714603ad6c861ffc49293617f01516a819272ffcc9e45701cadf4a80a05b1ec870846629d2300ee56b9312a85d472c4eb3421393d17a043497b46f8683136bf8760a283a822f0ef44e5e5203bc0629646edf5553112a45d0c53a4ea2ba167c59bb652d0fe0e92c7ee563089753163d5ca6167200000000000000000c0000008119bd670f701d42497e6b1471f7a067a1997a5c62093e1b22657f7611381231a810a341b58f956ca00386168867470ba1ef7f74fbfff974e7cd720b85ff67782dca656b15a13d15820eb631b6d7a4764c294c026dd9a13124c3b50998a39a1b1e98522f8e53d267e94d484c7c09ad1035702c6fb3d7fc42b2f68559f7647c1800000000000000000c000000f6321f35570ff34c75cf902aebc200063ca51e512d9bf00b8f375117f3d415344a9fbb6c9f46271e30ef1a67560de604978a9234879734178c2efc0f0effab2b00000000000000000c0000006c255f02c8fd2c034abef1061ad0d47aa1dda51cf7d9186d2667dc431a44b409080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000e299743dd391376d3c20f21564a75e17b7e905686482e3190d73d45b1cd0ab683a7255725a87d33b8ddf8c0265a7db3f2d7efc70fae9df65310f786ecf97bd6d9f24d6649f87c25661f2d50469325140cbeef5751e7f391a659cf5569816895a9e12655723f25c6ef7febc2d9fe80e15c4971f03b6a3c039c7dab3154a1ea748a2fc204ede659c4ae4a8934d68d5166a98dc7a7613542573c555c566676ffb5a54eebe0f2ff3843b81a2d36a0b6e173551d36a663f48467118139b0869c47b45a79af11c719f8828821c3f7cd88326719b941d04ac669f19fbb0254f3303b5476404aa5410f44f0fe8aacc6d1c1307415749ef4502f4b32343855e0b77b2403bca20c4413338c50df2ab096603741b6e6639f13ef7b7ab30eae17b6fc8dab042e2f8e836053d86465bd5532c08157e57468a9a0d09d2a7454452b071b51b0965718a60340518cb64ccd3135a507de5352eefc40059a28b027539b949c3a1456a43b97043e30b6b2b5e99ee705c8b9b17406f375df2c6255f8034a94bc36fbb68ea3e1d5526a2cc47c002e9472c93c41c1338301ed9a02a0de5635a02dcbe487c319f8351c569c7169c9bd9129ae9fc0dd7599e4d9c3b7a6df4ec7377465c5854ce13030932ca3906b937e3194f81ca3d0ed88e3ef3a40413936a9351e47d2a38e8f7570b1312f7385c21b264c79c867256b0fa35b88d6118f6f62f50f4b0ef1808000000000000000c00000064f95930cc90b83914525b0cb98e14245ce0820990bccb7439f83f6b62f2cd0f72e4765c569f875fc0efa2794b6523579fab233548843041e048fe258a67163809211a21f7ec8552e569545e43eaf3163103994b780f7b21586ee74ec151592e3e00df1c20fc0651b15e614a347d2829df9e08773892c1454034af635169c34827b902295772db4a76156866de1765727058b555afba3730f27b2935848223324a8e11632ece1b5645af2f74c78f5a2affb01251782e845f4b5b7c1badd3c047a23d763e53984e1765826b22c081b973a4fde944fb2cd54a5b32d56c2375175328a06d5bdfbabd5e7c4a2a205ef2162a61ff911016dd614b6eec52387c4b676e04000000000000000c0000008d106b2cd4094e2df4289465181b253e94601b1f711cac413ee48c0875e9841544a3a77590020a220d1cd4054ca8876f2d197a3618081731692fee2512a0c154d4537f37b1091b34f104fc03c99593111167412cbb3ba93b93c2292c572fad1184e23f4a5a637e01e35a8e1bb2f2302b58f7b327d52d1955463c30234a7cd53f02000000000000000c00000013f4ac44b6e9914bbda6d7152ee4635c3ab5e25d0342dc4c8efba64337c66140e41c52513534c45459f0164b25fa5e004841396c0c469f2b7f489306b2efa77d01000000000000000c00000067d07423c0cbbf69c6258f4b8766e4488eb7885f9ae1a4669caa0b2af02ec256" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json index ace50932..830656e0 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json @@ -1,6 +1,6 @@ { - "attestation_public": "f19bf07520b1e97b131a55666bfe3e74cca720785f414d6b3e5d6f1616f35f7ab0e82123e74c2c766f970a233d0d19725a7d4d36", - "attestation_secret": "d16b06b8eb936f5576dc217fc1dfe61313758268d53b94a4e8864884189e9808b0e82123e74c2c766f970a233d0d19725a7d4d3600000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c0000006cd576048b43df0476508f1d3819ef127e0a5b391b658b22317f3c37eb5afc133ae00d4c555b8a1a0021802f0740761709128c1b0a9ef6548ec2670a537d3e5e00000000000000000c000000d0df256d523979458a4c995337313f6cd6b6bc367115ec08f8e8ef529579693533c5d0385675987afd50b02749c36b717502fe5cef7aba6e05870d01f4a07d1e00000000000000000c000000f32ec7575326906663d1056e0cb5e955a63f63037921ad2bc3cba44d0059eb03c5113a596c0464132dc2a163409197022cbdfc1c8fe9680b15d5ca665a646c4900000000000000000c000000da0916252e8a0a0389233e2cbb6fbd2fe980df7a7d0f26781dba8573b53d4a4dddb19b2d42f1d259ae1b475d6f628e662bbe02242b60581488d28d4b2c32db7d00000000000000000c000000f19bf07520b1e97b131a55666bfe3e74cca720785f414d6b3e5d6f1616f35f7a576b27408dcc281e7ae12d76bf7b0e2d4c3e4c075c8da93efd3a4b29745ce958080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000e12c0f05c9ffa06851759365385d7c34fc44693dd131be3e10c696183712904145c93b49ba2d9017be0e733ecbdae65f21a00e298ced821cb9a9642cb2b65138f1fa3428f799ba3771d18933ec3bd047fc82150d8dd7ad7cf76e733b358e162fabd97850f230a321a184371337e9da57d041c922c9c2c55d1fa104496f127a48124caa10bbc6745f7eb326706a343d09418a466a1ca69b245854d83e5137842b4fda4b1aa06f604a35874e1de7e9e07d0da17750d72b5b70744b4658f4f459529f792910d6f1322e5e3927550b4f175a0cb37246f77fe25479169b47bb7e3142a4624c21ee75b67932cdb9584e5cc775f014827a8c46a158d31d5d63c793204b5c0a007b46bd3d5c5cf380140f92aa34e3d2d1132dfde1135475114b4ea402139ad7fc5c9d748339df4b2c42e27be70ff0bd4a02ca91a92a6ac0001758f1d51a82b6606a89f56a28289d861cab5de4051907866229d98073b92a300e40213d60c715760284dc7d481ee0f90971180b443472fd6eec6dcd06693b2c745acfc96afd919433b8e1777a6941e657a1a6153855037c30fdfadb4da55bf319d0dfab735bb5c53080b73463e5a06379f8e9ad0e10bf71155d28d12870408b7d61d97d481c4c4834cec42c1c5781d815de3a5015f644ba091e76e003e935ca57219ef1712c71760f7c421b02cccb924834e017146d1efb7a52c7613b70d6612a51129c2c00000000000000000c0000001f675f2abf91e62886b00b58ac37ab771eea9b54304f017527c9fa77867c3666aa789d69e587bc54965051685893ab2210119349c40ea72380e6a55aaaae806a89ff667a655f4d4e4524c0390320af140f425b7805831645dfdf0e71d65e2972d9f5477554f90b11535b0b09bea45936a398bb7a9478045088f75517f970b20a0670ad7b7c1864384797c32a5699f71f61c5d107b9a0574cfe5cf934f063915b5bae056469c63523b1d9e57a87cc336542f7b26893e40d6bb093757241257f18e1f0e0595966ce3d620f8579ff93dc4adb5a1a563cdf0d7df9aa4b5ddd623f4b5133af3c6b08e141c3d96f54f5adba1170816f7873341e754649b2361acfc57d00000000000000000c0000001f29c3550ede2b08da2d1251f9f5ab3e9e057c190962bf4748964d015d106f2b499f3315a7fa9672854eb36cfe24d771f892b159a397493b4c6edf3ae210f2643bc20b1a1bd1632341e0be1ab7aa4039251ea6538dad1524d82d530202ab2c3cfa8c5b2efa520621ad782b291948791b1072ca10ff583b0d3d2e450ecef8160d00000000000000000c000000721e2071607c0e1aa3f11516f24c532e47f7ba43e407cd178e3b1277ad9aac234793eb4fc6383f1feff65c7d8ec8694bbe3ae53dfccced3c91cb17650851e26200000000000000000c0000006cd576048b43df0476508f1d3819ef127e0a5b391b658b22317f3c37eb5afc13080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000524e04295747882da3b2c7426db1374b7a69924e5d5831168fb9640bdd1f743def5f936da475262b07f0387e2036ef5eea85852bf3732f0db918d362bfcf0056c6c4442d142e6b3344fc780b8f63841ec6a5346e8628d00f5bfde5520d418579cc3cc300765e6316f12f3367ac86b91e1b9a876dd26e2a7d4bc1fa63c17ece29669ab1040ae9fc677aa18951f170561712515c22ecb61473aa26044e626dbd7986d13b602497c46cd60f0e1c52e0aa5caa9b4f27ff9ba12dd44ebf4b88bac85e29ce454f1104015b1b10a4173959291443a9a979acef106eb314c07b19b7cd400bc11749823fc85fe262c84c20770b6c3b62543736558d0cb805507344f41771dc8b571d8ed63e548c61ff6996edf57549fd905fe9e72456ec26107d698852438db7480bbffc7e4389299a2f23e5293e3cf41e0a56785d4a32e1dd772ee5130bcd7bd4474fbbfc01c38b1142124e351e46ce4733f302f257e16a65078ee5e407eedc730cf9f8f964862c182c44ea52203566436e8a5c666e32e64c4935a8900eedaa6d12ca38093b4f2db44fef81ee4c1e62052e04271834932b96792b80cf31a6117506e4be1f4a7fd3e4318e9f993907cec345c287a936d668c745e3d0de1cdb21185ad227d92f22c3956f3a973830162456450c780d63713ed2235105776b7ab7ef06ee1d450796a3666dbd7a502a1a865c68188b766ab89f1c1cce78313108000000000000000c00000094c381291b253951ef06471a2ba702438f8c2d14b0a1a95c4f0ead4c5ea6ac72f274f82be71e5d2101e4466940b70c744751451bca4a556057fe8d33f8b3a64663320538fa0daf26c4fb8e2a0d0aee72c1c9be299748e87d6ccf383cf286a3104708ec3094e7a20d05885a32a0996a77a06c3c380bd7e20bfe48ff4bb4981d5ed3ca3f7ef9093151b259282899104e2d74095c431c65d9491af70c5638f8ca55e9d9ca2f14ae6203404e6e6e72cb6807f23f271fe9cf5b34cc698c5afd4fc602f9521f5e3dfec0429b5b02323bcb5b614a444c60a825fa685f682640bbb0562ea7785e60cffe5a603ec6dd1143720040112c3e4de908d32ffef8a968c6e11e0304000000000000000c0000006d88170a7ad7790e7250291ed092de2046febb0c93cc9d640365a4792f2213058c2079493a6d30389344fc4aec50b132f5a3ae0fd88b3d757a236860e76541314f61f21b8504005026eed678ada504075426784a5d54aa1bb084e86cbb100d69c63ed617197d726861ad4f75ea38b669ca65fa0a0d46fa6496634f4ec268b30a02000000000000000c0000001a66c9471d495e76c56d906bd357467e19b9d110db60e666478d1f11230ccb2f352bfb321a7264786d9b5e2509e1362512bb872769c0bd601a49e01970dcc73901000000000000000c0000003ae00d4c555b8a1a0021802f0740761709128c1b0a9ef6548ec2670a537d3e5e", - "proposal_public": "2327c12fc91cac0dc3593a5edb9c4a3c35ee9b5abc12883d28354b6965811c15ea1b926e86b8e16470d3586985293a5944d19b77", - "proposal_secret": "7b68b607f25fb4c7f1ff6f57b286806b815b467fa3e97d148007db1f2eb97930ea1b926e86b8e16470d3586985293a5944d19b7700000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000a85d802f6fe3da3af09ae552bfabda351a6c4b634f5d725953bc1a512852a95553f48c46e0d262427859eb5d73c5be6190c1cb320394da040ecc6b1e7cbd032b00000000000000000c000000c2b65b13df906c2eb18b125592859a7cd0dd5a3e2fdd7f4664047e4171bd95710b0da83690a67d636d40dc4997c1d33fb526b1013115096b2ac0a97e06eec31e00000000000000000c0000009f47312e21ff9a5d085ff23f71361138283ff6125768154f7f517f5dadd9754ec5cced5cc5911535ce374855c3b3ae700418813689e01c13ba7f1547e56bbc4f00000000000000000c0000005cde7d78defedb02a9e8e1374241363f312c3507325cfa29b2d67c0cac53d20ead9de931d7b8ed2e4b443d5f296d08131fcf280fdffed270850c94739b52e32d00000000000000000c0000002327c12fc91cac0dc3593a5edb9c4a3c35ee9b5abc12883d28354b6965811c15f92a51374c2c493cb2c9b76d6011f629ac2d9a7062f5e92d1e377c45b9a53277080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f7faf15802a20962efa3165f34f8fc18e7661929095dde232727a50ef76ae26a84c0b40ff2d23246f3abad18601fd316b41f9037cc8beb1f30170565aaed9f4386747121f812e55af3cea2254d48474e5797ff1eaecb1f43d6b449135eb81741452e640bdb15705678f263214a759d6ab870f333fe30b1292c9f153d376f6e26ed4d720d43681d708e770933b1e9af4290877034a91c70380b0cfd474e93f2583bb7ff50253b7a791635596963fc335bd6567d6b648bf7774f54db457e6afb0ba0a2b85db960c22783b34e1f761aeb27db0e3c6a56bfbd3e427c4533039ae90555a617677602e90c402dfa226dd09619d4f11e3411ffcc5b9ba5d7011921af66547e902a6ca921401da24c4dbe90494a458eb503bbf9226b7b89e25e1977ed4dc7e1a118048b70621c0194489a1ac25f6069483fb30b88748210fa5e7a649a6db6f5406e05d18e3786101011db89675631a019581f87cb3e72d702561a7bb55bcf009f1b5389ac28f172643f1da4a2756afb895eea60045375bba06147672c2f3220ff103d24577bc1ea2355b79ae213ec9e4a5f669bfa4bde0c5512b40fe4675ca8140b439aa22e7e9201261bead649242f0b5c4a751b66309d991e2f48d82eea67dc2baef30e390802ca0febc86b3777f49d55e24bb37d424484641182b3039905df4d142eeb201a83095628ca7279da23cd15c107595f98f6f71430ebb96100000000000000000c000000732a2123f29e6d785eb41f33e8258f318612ae45418faa327cfd4d6d54e2e563115fc740b0f4d354e01d2c29a57b1f2683ba361edc6061527234022a19d45215b2962a246bc53d6e6ff26f78ffa0c32506cb951939b06b3b3a4d482d62dac676237b8b3fa2ee9d67fc82042c24aad55758ae69433662853114731d7a5355b75af894d158f581662e38ada82a052f4834355eba43227fa76d75d8ab373156cd62bb86a055a203d479393dfd66ed36b36b5e003932862b364dc7cc3867b5ff601aa4142e522e4171668305b51966eed83dd92e8c241455b80172e3a97610644910d43e3f0c8f4504121de8444c515e762c303094728cdd226634fc0500696eb71500000000000000000c0000000acf614488783e6339ed51150dc1f67c1349746339a465798f76f536b55c8142d99ec947664d4d6d7bc05221f02ba80c3aca1d5e8032fb753b1ff540b40be26f9103c62c7b3375301aba7a5beefe6940285aec17fda7c379ace28d3fe8e04f44e7732935c92e305eabfbaa6b87350f4f8b25cd5287a3197bc1a92d393e97600500000000000000000c0000000f4ab147fd37b875496c2a5d830e6d5f957f1a57ce8c4116f063821917d8dc663f8a021726b7b85f7a22e4276f73716c98baef7584759e3cc8571111b114a81e00000000000000000c000000a85d802f6fe3da3af09ae552bfabda351a6c4b634f5d725953bc1a512852a955080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000085d6d5550548aa2156034c1ffc67d8259a46997e001ea53a1c886e640f7e7125f214d14eca5e3420645b530b43d9c7609b8b5737474e180dd1e26d784f0a57517236186ac385f528b959f23bfef3ed3c94ddd66d1ca6210599f64b7234c42d1d0350056320c1830bd3a30056dfe6c944a2c7ef5d04086c7cba3e083a66ef1f0f3713af1006d84f5f86fc9817a6c197494d69cf52218bc21e9e58d22a0ed4015d3ce3c05104329b1d3de4f937b0b53b6dfca0a15b8a28db6877cb635efa7a22015e633643c6c3bd7763f6ec4c008daa5b30d50300e0acc047d58d6d3fff39c10b4570670343741827f2e2b3749683c868a32da332dcd5cd77fa81387bafd81b0a1cad634f6061172a995df52deae47038c1c3fa1e7082032609629a0b5e5c985f60c99b45335c6d0124965e471e08f8537617e824823eeb083f5889192c9c8e55b679a314899f1569d9fca1102053766316518221ead95e4dd5ce913f9a97ba50661b07505330d3159efa516ce6f2ec37b98b6f39af514314b688db354824f2650efaf26223d63c0fbe05cf78746d1434d5678718716955715ad81049ebd3f37350a8d15bf08ea90b2283c017cd4e860005c26a0bf71c8c2db57dd11e2e0c2e560282fa5697f9d53bc6abd319c1f1334c956700548f7e215ea9e2734439a25c1f1f55026be7830e429c5a664c902a0205338a1a3d1de89258daea85022525db2308000000000000000c000000e331f34feadedb495389a4630ae33a4b105f850474323c27887dc9035f8fd52e7e7f8b3d16635d2a8b77562526e1d149db89fe29d8b4bc5cf76d642fe194ed4932ed5f195d2b4061b61b1200727c373e2fe24f222e26166107f21b5d069733061294d46ee31c550fbc621d2b237ff2213f4adc3989ce820e37794231784a7e5d4fe31a20f284582fbafde343379cba1ad3730b18649c1c50e964ac3dc3507b2485a2c241f24bd73c1f40a615415f7747f399db35c1ba680d9907d60d022e564363f99b4dc4839e39e357934f1429fb02a9471f7a31e2fd3677461749f56f6922f5dce805d9950838a24b7c52dc5c1541ed317f4a7926094e8ed81a0be0f9746004000000000000000c00000083744f6016bcb458954b2e5c29d3c343479b351a46ca140d9f0afb0757a80c399a2d17674f1a9c6dcef152664d41f5758b0620313b34a62a03204c3c68a6c7467611ed056019685b7c492c4a3743044e6e2f546fa75e3171431b7f4f77d2ad30f76d8d52340b150260e49e6b1a704f5c91e7f70b2d03a542f5ed5b02ce18ca4302000000000000000c00000023aad02b6fe3201fcdfc871326267b3715722f0b7695a705b536d20dccd0bb4cf6add126ea01d35a945585723d16340fdc7a9e145e004010affc676967cb910e01000000000000000c00000053f48c46e0d262427859eb5d73c5be6190c1cb320394da040ecc6b1e7cbd032b" + "attestation_public": "e41f343f892528158dccae5404bd7262106386597fd4a35ae2c682374c6f15706dd8062ddac61b1851020e0918e7970917e30b06", + "attestation_secret": "5c5d46718b0ed73e06c71f407dc354e4dd8b2cd901afeb7820196fcce2331b016dd8062ddac61b1851020e0918e7970917e30b0600000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000cd8b5b01e9012850874637277a91296530b3675ca1dde6178732333d94d5c41747cc5c3ad57045797889b8744703ed3789a87b2bd7cbf94a8deab86aa2394e21d680b528cffc2b255030dd44f6985c5739b6f86e7f67cd4426883723ee9dfe0d916dcb64e696c27be5c2111b16847f639a47aa7b6a416615c945f4512b30161782704e4360826d23280bf14dec4958355079a40c5153fd5f2da6fb7241b6e142e1801d4670c4536c161f336dbed85e02f049c2146ea8a9577e97af086815b94bebd99177774413241263a779f5e14b75f80bcb7868d0dd0a8261e274480d4b791c7e724f4cb380773404d631fc7cd97c7f34f73126ed424b54b45f4fe5d7683b00000000000000000c000000aad97f2940807656959c655470799e5440806e6b4dcc17590687f719c7db934a688d0f51fb78343ea16b264b29b15b30872c1b5026906a301068112176ca556e2243e34264dedd6f07af4a22f872434530cf052b8eb61865f254cb7b316763306e5e6145e0a5912079206b41a74ad97599261c4b225a444ecfe8da546cb67c1000000000000000000c000000395841008afdc328d2f388117efb881011e64c22f7724e101aa06476220abd183d103a1bff0f21549d6d7e16d7661564d7e7cf5fac73057ce8c9101abb64ff1700000000000000000c000000cf6890506886230e013f4478d09daf7675b0ff1833d3d11b9a18113ad9367c1c85ad043bd7805237ebcf2753ba30340b3c19c163e99d8c6a1dfc621d62a7a17500000000000000000c000000e41f343f892528158dccae5404bd7262106386597fd4a35ae2c682374c6f15700ccc994105ea91006415b15c0887171fd2ce456b9500e41ea6394f28c1ad590a080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000004486497b6a50ae796a79ff2e41e5754648335526e34a2f5a51fcf6589390933914ebdc5fca60e40330693076df41e53854baf7760911a25339a46c7c7102f96b5e0a367e894d6a2170509b3fcff98b2da181946d5e3b755eb56e6a44e68ea8670d65eb46dfea06369246b93efc81ae4bbf75ba72c111350ab29f7b062e1f7025de9a945e89a4287195b9de500282e2557089822eaa9a425ee250c258ecc4d63a3eef913bc0a73908674b654eb417ee2ae061ef2f3b4dae700b754c32a477706a6465a77d7f7ab40ac482ad660e22e954d1b8581097b5e320e5ccbc473bc8ca1842075147bba80023a8585f64e0a7f47c88c96c4a1e381f378923be333cd9ba2f0a82d763507fc4244b068936a1253211fb24097a0f4283304a75006b56b1420fcf0b530914628768d226da7de8d2e90664a72143cb8d3e2929d99e61958aaf04bdac51150a98d53ca5a836394432893b6c5f2f171b2874606a9d9e6a3dc832553d58be4aa98725466f816155114d175850ab584c8394db56e2524a29b3b1bc64cad2ce720cdbd32c395a342863587d6dc4a4a123b3455309db83ef1219a21143a6fbe2230e5c7b1fb417a75337bc193b91a5d750cd8a1d21ddc1244a085d487a02f03f7a8736425d4022a365dacf7210f33c813367ed9035edd23826be8c447d06fce1153b510a01fb8e5810233ef51a48664b77569149241b5af76cc4c30d3d00000000000000000c00000084a230776421e63fd78ea14a389fbd6bc9f2cd5dd1a02d4e7e90505e7d0c8774247c4a407f71bd459205345f635d640d4c9db5661e572c2b19b4277b5d47855828a37c231744b730d359bd7b0e27953d1341a4490330972076763c1dd429e375a16f2543026e714abcbd0930cd127f307efdb7602a39ad21a9593052e8dea47c2205eb435d33d923cfb82631703ddc4a607df21a157d6c3d00661b00630b6b144bd902240b4b241493103e736b6d9b79bb41fe3d22a3470e0b5d571b21b10e113c1a4a1edd8b6f1c82ba1972f559c634d1a72f2246a51e7dc7bb3e225b64ea444691c25d8980327a77370139af31c13da1f03628486f4e5c754b92070458c75b00000000000000000c000000737c7106bbcc2a0b8888070d9d165d2e047b4409c409b05582b885510dfb5f3db2eb37316f771e7ce772fd1227f18b2485b8e0282106fd4d5403430649916075d7e37e184653a06753545225508b474b50bfd10c841ccf0f59c44d595e62f15df766ee36f06e78568d3b752e6b56ce0799efc22a0b70292482dfcb072799385e00000000000000000c000000bbe6282abe4d194cb1df723b08e58960367b461468301152ab597a75d5a75b5e8e7e57398e38e27c146dfe19f3cf837e40281e359fc64c35e957096ae8c0eb7d00000000000000000c000000cd8b5b01e9012850874637277a91296530b3675ca1dde6178732333d94d5c417080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000ab6ddf7ab4a1a551caa44418c34a0c302908af31f9036d18419e8017a560e86f04ebf951f83dae5cdb371968d33bd41a7f9b017c849bf93efeec9e0a7197c56452390f1151e7103085521c0fc514701f9af7a040328faa11bdc48709ecb46f13f18d505bfddd17398e9053262923a119894cac439c320d505e84376143e27806145f2f79c9fba9347a664f577e61827ead78ed458dbc513d3895503cd37f1068347c4c62772b8c4a5537b71c94c5881c42e7357993c87b32f07b446912b1df32bd988c1be19ca72de07648310cbc9266bbf59e19e339655d906c421c18eaa502e0800a177b20770d0629f81a15bfac7cb686911fac929672d92dcc7614a1e206dc4276037539d3484d5dac7e1596094303363a44fcdea2137e600d1998fac91177d2b44e0aa8382335cd2213d71d8555efb39e0ebb91c40ca61ac529ebb95823c984d40137ba271e709e9a57b258fc43d0cdee2afdbfa86f68844729e145b93a8fbf1666ffc1df66e2ade5758b6980715f06800a563fbc747c3e376915e5a6678ff408394c8579012d438253a2558636c4e9456116574c52aca515115bb2d05732bbb72b2b2afa66892b9a5ac61832698d5b7507215f75272b721b319e3a2448df97e575b0b52275ba9bc77571c5125cb0e60502a49a7d564ef3e11f9a5be7456417744a44ee7d358235d374a1711e712b86447a6112a10ff572b249266d285f08000000000000000c0000000219765be0c1d31703b34d508247923332190828c0931c38583a123e43ce5b2be0dad877afbfcb3a0c72044077e50257df777231bfdf125c25bc841cd8238505bf17451311ece824c3def30f52871264370e9053d2b8476a0a3c9b7e44ca3a71d8e52642e625ac3099911d1b5db94b0fe2b023545eb34a46b640ff3fe5d1d131ef825269cd29fd7035fd2e7a2c09d715c69e7f4653165a59ad840a3a0178bd17056b917d9db7b53041687b18c842646737adcd1fe4ccd15532a8e65885cbed278ca55c4145a306654fb6c2437207e143d0cffc7bc6c1e276ef82ca6c995be171cd81c9562db5433abda3ac59b4fe5c586913357a1750d943ef2d16204f97c65c04000000000000000c000000db9ff4534bc3e7730936b25c80e4152b180fef51b9aa421a04d52666279ba02e3454377da13a6c3deed94b76b96ab2041962e526c58cbe4f47864735beb5861b8ebb2413854df57cbfbf1c09bec2bb3992f3a166f691056596363b0a4d9da2191a02c62f954148455a8c541fdac7807986bc9d084354e72da292c71f972ab24f02000000000000000c000000bccb8c49119c9c3c9140c0791c8d1d28cdd6a109c3b86c044891291bce159507abd470136af91b16fb3741651660a24bae4cd9565815fa0a4f71225dac6b287301000000000000000c00000047cc5c3ad57045797889b8744703ed3789a87b2bd7cbf94a8deab86aa2394e21", + "proposal_public": "57ffb567b826fb60dd07da58f6939b05aa93cd4bb2d9794308d3232878caa5076e9628292e96406c2d8faa3f8108922cdcf37e56", + "proposal_secret": "9215dfcafdeedec09afa80228a38b0e459e270f449cd7e6f2e609842c309d8d56e9628292e96406c2d8faa3f8108922cdcf37e5600000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000007e7d2b1926fecf446735fd4353a171533521754cf2e190114d1a777b585c4d5e7228023e34a63646dcb7281732a758281afd253df39d6306be68610d0071f5164f3a4801da7b00476a03d0145550f32c4227d441edc4e3662bec0b051b23560e41c47319e9e56e5ef0dadc2a0d0d0370f719342f7c05d769cae8d63227812619f6a5e2463209fc2cbad2160cd8027c17016b532a6246395a90a5fa04e1d6326feac4b151b256842b2639a8090d12d179d618346276540e7ad5a0776ad508780dd3554f129724ef447da25515d8a5db7ac61cfa2a19036a19150b8d4f09b4ed4a2f13dc4c203690282cadfe2296cfb801d1495a7bc58b4b4ac8601e78e22e1b0000000000000000000c0000000ab83e39f8494e038654d90dd05af61a4a3c58163dfd075a78e2cf62d035655f47354f64a268e1054c71a343cf1ba2257e2cf51d830d60004e124f61c8706a7a1c52890cc1b848514c3dd11fdf83e13ea8e4630b8fd10b424b27be17949ce522f57b6f444e8cba1a8f48662a96a37f30d9b4452d9b4ff742fb15716074008f4800000000000000000c00000094d1f27496755d09f0abe30ef1225339b7bece44dfbd5e6ebddf6c50d5662f5f2899d90e1320d95e047bad3e1b10352c223ac116ba36697ddc28bd56ace4405000000000000000000c0000001f484208a479ae6e13d5a95bc4ce851fe3cd73609fe1437b59d0440e46b2b06ae3c21133c4b8af547606e33de27f5b620b6cad06d564a96fc03f0576b2744e0200000000000000000c00000057ffb567b826fb60dd07da58f6939b05aa93cd4bb2d9794308d3232878caa507e1193740ab8b54724416860f32852026d6593328e9638a55dd2bd51e1b481965080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f495d9271f6b154e56b5ae038ffdc2268a06e353dd54287c112e49287352240b511b0f71f4a1444e48dc460ecfd9592e491a42307635b01e97230554e965d0204726b402da422c2ededcf944c6bca064c5daad53cd53cc3f6cf63a2e9f3b8335327b7660c12ce65a8227593e8b02bf02be714e60eae33d289f76261c123da823153719259131a76c461dab4cbc1e6b04e7213035a3043a70d759eb52024e871cb2318e0d5ed74e5444d79653de357c1f84b4be0d867a264fc6603172b15ed5734707fd085700f04694953837f22f345d430f8b1a80b305686af61e46686ed6069f4b5378c33c657aa29d514c049dea5dcca3772e15632c0863abbf44d9b9bc2fdac7137aaf246c2645701419d39643496c640a23a50a5f0f27d04e4ad517db0aa46ae92b7177412deec78b598cebfd61bf76c174453f4873a8b597225f9b6463aa1d7433f2c92d71ea7a7729760c337919b0d13fefbb09240d169c0ab23adb37b614b651f09b921698452d4b2c45fb784edf076320848d155de08f574fdaa91a32ff7c12df036423daa50e7c68d49d250320cc4a009c702d1f8388375f9bb73ef987b34eee2c364dea340f4d5e4f205caab1a726151b5014ccbcf230d1c9043cd862052c71b95b1da9be88653a83011f8dff69310dc8e56434973f042832bd1f5136f5781ca06963d85acf4dd6460840b958ca70b686f17878e7bc52b334d95300000000000000000c000000316e7f48b397d22b8c7aaa213ec0693a403da961bb06fa5615b12e563bd75d26cb581634bb079d5177c24a257c3973403e816e0ef260d602c103135e36913874f0fc562b5dddb024395be26fc8aff46d99c3d0782f07c702e428551f9661883e947f42303a20002d23119345b9112767e932e152529af83a88b6d84638f4db7742b6c57d4248d017b2a97804b748924a55fcdf79500b9d5151358e468354ea0bd20d3b0654e6487ae39db4498278d350d436f226591e30664c4b0738fa313b50d6a66d651af70a1d0864bc1504670e30821abd31ec835560ac1f9842d105e64e6e427513684bd9795ef59b1a981383563d9fff06254fc81414dd334d91a8ec1900000000000000000c0000000578f44e6228042c27ab021c8eb426185cfea33dac667c044d175d5fbeeeb909a50b3b7a58d94719a1e6816f71de374b7d33937612b3ef7eda18070066c817115bd41b6b4bc0f95031ac3e5f05a5773708b1957e36dbb4154760d2417cc9c1189092af7aaff0680d41915b10298436470c54bd417ae75b6ea39a1453ec8d354b00000000000000000c00000023cf39047c74bc0504adfd5ad850c5273c2c7e5c363792324d7fd56db7955e7199753f7399f2a459f0fac446337879602e108744af2f775ca5333323d91f862600000000000000000c0000007e7d2b1926fecf446735fd4353a171533521754cf2e190114d1a777b585c4d5e080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000009e0cd372d9b4df3346f44e2edad0f923b3ed3d266be4d70ecd32f05f11fc5b403195372808f08e0e28b3a57514c0a638f7890d531872e35a3a318c43d3c4ae134d9e6b3b3d43773bdd3c9674342cff77c16c2b2c8508b7207e8e90665f4a4f085494e50547dcc30270430a643171e77d8373f3369c1d7068a55ebc4907b56f19af463978f2408550b42e88288a1c5e3c8474aa02efea7279d019093c6beb9529d8ed4b3b44851d6dc2a79864385c5f00102888497ae8b133bc0d6d3aa2d6d0792b6cb34d9d34340d47feb522db549a1ef5db3070b899b3788490b0225d25f233941ab279f6187a5e8aaa8408d660576bc670f6622562831a70c67a6ffea042631c4a9c3fe0fac91274b98b2814075341a329cf00c7336f39f4d8ab2c0a32ae1884bd60737da7584ab7a71b79e5c616212dd56a4f47ed95597394d7452b989807999ca11b45c93b138cd5dc1ed24d137e3bbb4666c84ee02add40a5727511e2409f259d3987778319ba15d76631ff15077866c4015d891d465e11383247b0a80b6c2a172a6242147a944a350ee20c526e46f841472a96e150714891487f1fff046449e16b5e019713c240332494ee2301e1421c7e789bcb09ff9df73d30335a1de3fa737285c43f754b6194353183f678cd88641826c9f47018c65d0538ff65729cbf8d1423d6890d437fc34f9738323f5f45913f24987b128f1649087d32af2408000000000000000c000000c67c6a0f237ea81f41129949c2d9ff7c8a7187001970ea5d4c67725e80a3543973f6d306ed22cb1c02c2ea6a7b8c045743919b5bb8ff6440c5fdae4a864ca520ad53d16a6ae5931bf7226c7ec6bfd51e4f358f0cedaa1d3f4e822661e0e25c1bd13d3c5183ff4c681429f627bd36c7580f28551e4cb4042599382347108edc74baaeea05afdf63658d23c00fb3c670115ef9706e6a58eb4f5192a2553cd73735ef89f4646aa03d188ace3c654bb7332c63235a0e0a76df28d4091e0e96bae7447b4272115c186042eb41a9017dd9f9592ea40707b166b65cb8dea41ca21f136d3714f54e042be06ce6c8897d7e58db2b0b05174abb8d9d1d2df6c25d9e57ed4804000000000000000c0000004b1c763d09d02d41f441c64ede70dd6a737ebf66ef6feb46f0707754c17aea73ed6c54556bc3890808d34e1190d96446cdc0784e96af756744f9ca5684d2020b04a6c95d4bc4147345463900b19ae26187b2d33ea31b771ea3976b57fd4d8e46e982f45f52ca850bc858e447b4056d2b6b07cb45132a4f0666d5bb1b6134e21002000000000000000c000000fbe07f496026254f055ab8193f44d104fd87e92500e93a566e314c1fc6254b3b21bd63561c66857e61f5cb725281bc4907c4e2657cb9ee27741f7674d58eba4401000000000000000c0000007228023e34a63646dcb7281732a758281afd253df39d6306be68610d0071f516" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json index 3f93f7c8..df3fbbc8 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json @@ -1,6 +1,6 @@ { - "attestation_public": "4f4474010e829808734d51051d4a4656568e10247e1fc004b13c836f4f4d954f81cf9d193c40d3513ad9436e10a9354ca07adc24", - "attestation_secret": "4681489d975db9b812b13973a614d07a2e7572bd64a241351c29e6b994f77bb281cf9d193c40d3513ad9436e10a9354ca07adc2400000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c00000080c0b323e0d435268ab62e33b4ab19551cf5c42cbcc8e11dcd103058cca0316ac0ebeb06bd6274329729d9766f1e3b11787b2428e956353fad7b9368899ae73a00000000000000000c00000090e8554f3792733700bfa62369e0806811558852fe3b511468898f1cd835ed74c6389177d170d8369e1ed07a9c21a65ebaebf30866057c7861a4cd542cf7261f00000000000000000c000000a45dd364aa06b86454ca8b5d2dd26f1cbd154c5d3e29d47d08d88861041f5a7ac0eb4159501e0e29c2a52c0b3d6e6f24f9f89a25bef7d2491a414b7d3fbde54f00000000000000000c000000ba675c349343ae3aa934a84deabdec4267bac37aeaaa2310f54e47539883622981eb997a053c49153bc51d79f0a02818d378da4d98f939281d27ac6c53faa06c00000000000000000c0000004f4474010e829808734d51051d4a4656568e10247e1fc004b13c836f4f4d954fc28962201dfa8c45db9ab969587a2f40d2faf356d9275e3c80f6a820c27fe50d080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f789041488759117586ca27cbebe0d756c70ee1388899a07428eb17b252fd902109d49019b8b5b040390c05f2ac3fa38611f44062b0f6864ddaef03045e2cd5d7f3a6b710628d018745b572181cdbe4eca7efa4380deaa605c81156057ff2c64899ed3482cf0eb0474568e034fcb17780011b07cc386063bf5808c2437cdec454940087c1f8061796224276d98b0eb0437394023319f4c0f6e39483c55b3490ec6c38a60982d8246cfbab9017610ac325c0f296ce8a0772df043e23199eea73c3b5d52530fdc8148ae5204781c99f02d8db0116e17c3125a97270a5cdfee5624eb0e022df327e12915c25e23cebed7085cbd390d99e394427e76e26e449a990ef28ea5214ca2374cfcbf2c2192fe3b72b480af644f5dda627db0e15e622dee511f2a825d8b4982597a16d42cc4ef2e593350a7375b0be618ff167a386d60a77d3a81e535aaf76151880cd8580f20d63dff650152863aaa26a0a13b724a89a51e214c9e6f1693e1045aa5923eb0f48e39f2f5ad4ec715895375d751429714482c86809b117554416d0d22597eaceade53d5f75549488c42263976291f8b85174210077e3cb48933140534de54676dce3eb5a60440a2a9dc49f671753838a54d255cfb465d75da1874486132040989330eeeba7d6cdb9d0b143ccd653b397c024645f016270e04522873bbf4270817067b699b2f057c38fb4be6d3190703caf22700000000000000000c00000075ffb04672c3534b6c70585559b48849ac9ab93fb1936a65c4e3ee7970996e201e82780d6b575e64821f317b94c8d279c47af136d2795552244c607193419e5d44938b684c06844096035c6e79acbb15d76f1a48dbf4827e113d4476970d19548317752d3c43423dc3577b4c378a693fcdb9553ad2535f7140403e21d07e9a4cce5000146aafa61bbf809e5cd6f89e07f91f8662e9da5520862dfd2a87b6a8707c27dd37ad589e78856f04326a3d95006ed7d468eec05263f713b930e8c3e11b58eb5a291eb35c68f2f86511c2954a64b69fbf5baf8c297a27b5282dc47a683dc95ba854a3997350b6dece62c0b0f52a912d7a57db405a6191db160b6983312700000000000000000c000000be2888786a8cf5696124792b3fab2e0e553587024a1e7039f77e805a955df47ae2b5945852e8a26f051a1129f6476b661951680534ff1d7297aca93448440844cbd7c374c1fcd12073a2a5404c7fc94b7d7fd836464140586f52b15eb9ab8f430112281a58cf817d60b4f225c3003d1d5492f94075ad8a74a3edba790c8bd01900000000000000000c000000e45f3436e3c9ce586fef9d6f3b274b04956e09377ccda1000252a744f174f32dbb30bd3ecb87124e2b16b0113cbbe0521bc17f5eaeb07b34a1205a1b3543134500000000000000000c00000080c0b323e0d435268ab62e33b4ab19551cf5c42cbcc8e11dcd103058cca0316a080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000fd529a16359b82674b868a549263381ea1893634567834516cf1e0683a94a01e5e826f7da0819b624842c3366d55a62767e9ea248cbe647d98b3ca5e550a1b1110e42d4c4814bc3116f421643277294b307ccd37b441cb62ee536436d4d0ff55fa3bea72cf4b90689c84112816881d0c6551f21792f5383c90839d08c69f9e4a7edc1508be581c764a4bea3b1b728a369cea2612c0fe681138c7f322ce923a3336c2371ead468826045c9d639ecf48429cfd710ecc629a5f786ce04e44c77404db3e7755d659bf630e83463f711e476cc3313a5de8d2963ec30e695966d6dd4e8af348576216ae14933926016fe06567fc73d06b2d93fb1c772c3f25128ea865097ff543d5814e176273bc05d45e4029e6f87f58ae754e669dac7e022ce5c64372a0281ca808264ff5974b08afea3765be2707359615203b7bd7a3691c7db2453311965517bcaa7b95a08a7abe16b64d2c2a5f3d6011244034b6dc607cb95b1ec749c336b0c09e73815ca3279944c9546c89ac4708ec38522ab8dc381167740f875c213313a0732785a9a91d7e99c22406ac4866596e7f381e65a201ca5d405757d113505ff9a0450ce990645e02961f5abee1728dbc8c18e246f7179a212f52999178195991ae0ecce12e30779dd71a2a169c0c7757000a59e8b3734d1f522a18db4f08dfd33619eb1a831e071e5c315a601d3c62a05d14c2b52d5137e8607a08000000000000000c000000b171aa624c02e549e77044747ab2105edca6dd159c83bb5b53de7d3742dc7c3d3e4da551e8836c1d79d90512c1c48044706f5943dec41253d815d432106a322c65ffc6412f760f24cf9eff630f2d971546e5c13508dc31197a083d28d833e440c82ee4102d09b93fa2458e5df429980ecebeea5c15eef242ec957067e867c10a991dd0263c14e618f285d04f4a8a1a0e57bbd543e0bbe911af1d81319e916b053b74eb6e164cbd4e20ebb33e1e7fd938c14e0b43fc8b44745f2337525d79a84e70184f1977bfc47a9910661725cdfd368d7b8f4482416362f9149e7e3b1ae732a8a2912fcd1cf33c0cd19b793421525a6b6bbb49760c2d01b8c08d228fe0175404000000000000000c000000ff339717d56c1749ff778d502d6b7e59c238e2201a0b7233c0ec913778cb371c8952320806cf287c405e2516664096262979cf218c346f5caf3c69616575625883fef02488d1a63e52ec8e614a89eb5796f2815928c5f2278634253c406b5b1fe8fa326f910eed32b5618b00304d47240c2b852a480f7c6b96f1811fdb3b582b02000000000000000c000000a74d35743d67440dca9fbb3de7eca1568d09b3740e7f230886b21e3d97a329291f32563f662eb7581b30b13bb35b6869a166500a8df5394b4a05c57019a2a87101000000000000000c000000c0ebeb06bd6274329729d9766f1e3b11787b2428e956353fad7b9368899ae73a", - "proposal_public": "92cf4f08c7cc302da1ef19446f4942503267246bb3ad8e4ca162f466d86d604f71cfe419f6726223282bb171a6670178e87ebb73", - "proposal_secret": "c6944d84c7dce0d3b0081a2e8fbc649cc6dc00b17a7dcfef039dbe764d9defe471cfe419f6726223282bb171a6670178e87ebb7300000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000ed0bf6106c344772492ad80117e7eb0495610e0201831807b8cc9324bdeaa4457cd94e5a56bc611e3b6cd533c4f17a08e88d1113f31e7156a0cc317b394ff53500000000000000000c000000d73d8f2edee2cb1302b59e4707860a15186f5d7571560506316f6179d4cdd00efa1c2071265270635e9a6d001c5c8c517afaa91fec559b417d34073b83115f7200000000000000000c0000007f8b8349907e973c9900187a74e9c31b06cc4a275c86c8309796892562617140d500e06a6b2775740e887b4de961155ad2a47d1cff3e3e2d5942bb0cf11d6d2b00000000000000000c000000485e1951e4a80b19d650ed0fbaed75144471ed1fb6c1727004501c2bc75f236099216b590db02c6149da6a6a86f02c4e248dfd0b7385fa5b37e07159df5b5a5100000000000000000c00000092cf4f08c7cc302da1ef19446f4942503267246bb3ad8e4ca162f466d86d604f15234b47b63b5e0056f4744ec7633705286a3a3d96359a4f0f2f465ddf8bc05e080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000de890d104c035b36c15ea023078525571b1cfa69bcf0c53ceb538f53b84d1416ddd6e5317bc88363fbdee14239e67638a9a44f2594757a02b2d62b1fce026a68a62bae036ebdc81066ca201eb6c43c18503da11eb3d19b5a9bfb87589dad704855560b5943f4b014e1a0bb6bd6e21f19b732b20cb02dae2b00694d557b85086b71935441dde89b69011ab62951a78570f83e7466b556ba6a59e7fa73d455620a581bdb722d2179541704460ef0eaf400b5a48f438da4443c5e22982238d7960dd2aaf60d1ece9403227d320eb9117371bd3e0f439743886c0eaac0285c12c247ccdbe42235c4b41e49ea883c389bed56ecbea2545641c47d39714c70b615e7705f29eb2ac71da12ab4e2402793cdf77c9e372a7a981c9636cf9958396c9a7d4c96a67f6a3059df1bb859400514f13f4486efb7782758386b482af23d1cf9856bb11e2f17197e8d61a29bf5548e7c25308e63763e56ce7458309d941d21603d0f1840e559617d55186787c44b177b4118e153a320f0d8d63a1c34285f06ceae5089d2d610cd62484264628838a84cfd086ac0e25374a5ba6a4181615f6477743a27377457efeca4715c346a04e23edf2ab7f334649ae5e433a0c6bd4ab6d4b34e6b147f3a6d17520c1149546ad91753117eef666c348a2211f677913eb818c84edd4226311fd4976979827d18de3a106fdc1fad47d0b54842a7ecfc1a460d937800000000000000000c00000033c0d52d6efeca00f6a161280159f8458fa6de2a414c073d8f4638686b369e782d078c2b2b9d606eba99722b3465e06cb8afd4476f0fee57040dd06d4dfec20ff6e8d95f86035c6c301111539a6a87708b16827226e12e103c2b6550e1050d307f6ae3231529f4384a79665d3b8b1217f7ea4c4b994aae0d3513b254736c0b5d2de0e6330a5c72674066ee32b0ac29051f3ab948e4138356aed4f053fd2d240e114e2e4311f0cb051816e109f2a3fd0f0d4ab67c5d313244f6557607a8fbd50016973a4de382b8562040b00cf35bf131781b240d8673ae3d32128241d278204e47b48174369b2936f59c5f7a63a2ae147964932c78b85e30ef278878ab4ed33200000000000000000c00000088e8d861c54d103a3f643d4e9cb84f20516276244ecc133ba22aa168fbc45054afa1145e0661ce1acc940f30c9bf487e26e7ec4ad1d85802ce89da47c3e69f4b7684fa285900357c4763a970fc9db1038d628f617304c065c39d0d0328d10179e11b473c332f0e04538cf50eeebf6c40fb2fa403b5d9f54a782d2421369aa36c00000000000000000c00000089307731831e475107a7aa0705369e63bc8de22ff9bab66c290e24001a17cc15eda19462f709c10f9502fc6c445027603d9715368886855eb17ca402bd0e403b00000000000000000c000000ed0bf6106c344772492ad80117e7eb0495610e0201831807b8cc9324bdeaa445080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000064da4d5929b9567ac685114cf494b17b5d52cd1d0bcae4756e7d9f6aab3d0555de5fc21a63c5be47b9ea7c4ad863fe0f3ecaee15073226631776e667ace7290fe53de445abc89b0413953b1354854974281ff073ec2c1039aa6e9472fdeeb3431a78154c473b8c3a44e7bb424ae49534717612789691553abc96d8633eec07133ea78f0bac5698781cb8c77c9ddf65159025245fe261b632fbfd5f7a8cdb6e3ed852301149d10b1ba3dd325be5d77b49dadce95929aabb722bbea418a06f484617621a346ea02c06b338a567f2f48c297a74404892dcc3783268ac357b22ab50966b373242b452461c09aa6469215b35b6506014c51430310e59f31fcb3bd006a1ebb763692571026587ba1d425de4461c791749dad7f12a43840f1455eb3d0e1f77a92336e43745e9094801da92a45f800a9932b4a31715bcdc8e2b2fab291edefd575431cf6863c435fe2fcf855d24a2a4aa3eeffaba76592cb77eec2e3c2aa79920428ba10934c38dc710c47bf3795ef46c5bac4bf2799d8b5f106e9cd077703b391cf1acc37b0e00777c2621cf199dab154b84983e63340cc124b1958c637ce14f7c2454aa3289fbb14b5496f943e6120e29921f6d151fb5a01d8be4684becc5302c4e487440550ede63aa263f4d6138334cb8507d32ba1f2d331aa15612f0cfaf6de5d5a77893e58248eec302110d795e54ca19d52157d9eb6a56adca7408000000000000000c000000abbd2947e20f1d2f41963b76e01fe27947c6d012565105753725f755b2da4c3cb1b2cf4fc011435453e1c47a80e5a54f023482337bbde24ac708c3505c50847424a64e2ce8ea826553d8e60a4c382816b76a8b4edf5dea667856c3754755981070383349222b36643be0eb4d4f95ca6920da2e77f75e2921d3ee173094b9d45a6fc1dd6cdef75c63b931c65db583da4a18ae795cec3de02110327b22ea962079caeb065c0e3efd6f770b6441104c9157e521e530bc21d425592a0f65e0027e413a49ea73fe85cb181552b37ce8305b249091117369a3966e0441ff31d0c1f944b6b41978e5e1af619b45170441ca3b6d1432ec1e728dca371b3ce106d6fbb44b04000000000000000c0000000a541f030130a044a81369068bafeb71187fc200632a01116e225472b8fd8a1bda895c494fe1577d8ad47d0a0120205531ca586e4498266dc10c1d033aaeed133e2b2410b2925352c7a5b466541a320673b1812547a51552e270866f43d36e1df827190a916f5a06f6d0f91ae12e6541e92b461684617825f30e2b1d7a3fbf3602000000000000000c000000346c1b1b479f39619aa318694503fb5fe9af667cd85a950ffbc74e13d3635724c429ba09a6c0763fbaa136124a0c4731d1c2cb3f0f3efa09a3ec5f48324a3e2b01000000000000000c0000007cd94e5a56bc611e3b6cd533c4f17a08e88d1113f31e7156a0cc317b394ff535" + "attestation_public": "8276347211a4c768a823454b927ee07a8895a24ccf0a7d2f08b298122476c746d4df7c63754e521d62343044ff48e30bb090e472", + "attestation_secret": "611ae73cb5b424449c0d6ba5b7d4d3034ca1b2e94c1251f4a8243849c4ea9960d4df7c63754e521d62343044ff48e30bb090e47200000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000010343301b8544d78e728b776946dc8458a3d3b4b0368620a0e835a4077ab39095d55e16ebb16b10e3edf534e845bfa0b82ad13195f16ff36a2d0d15e458c615113952543334ab40589a220115c92dc55697d2d2baabd4154f1f40e1d0521a703dc240b28b1886c77de08ed6e8afb29261c8de626bfd1796800b448257cec8023d61fa042e4a47521cdaee4250de7c74a27829163196a497ae6b8e433808ad17c003a0c58f2f28a05d3c90409a4fa960d41130f53ff10c41819cad556a7aee01b619986191ecbf779c386b742ac7e957725201a4a5441d357cf35792e438ba8748ac16e6c2513cc07615cb15899a04c6408207413717c904fd6b7b877db595c2100000000000000000c0000008948841f87a80502e9fc5525ce86856919394b39b67a856555973357d09fda093f6ba4055074763e98efd3354a4b2a201c34690ea566c00aad80fa25bcdfff0191d52327af869c31170819218c99ba7b81618d107059e4187c551c6c4950f91c7492b73da6c2003daa96c5642cb5045239e4fe4f6ee5ea37ea37a565b8ffb15100000000000000000c00000048ed894544d3ee061e46a14d7a30a25aaea2ba1e7288cf6bcbe40456f295414b79f6a164544aaf2f11c63057cb7c6a225075251240251c58ca41556283d7bc2000000000000000000c000000a199c8100396f71b790af23bf8e6372ceaea7f20aaa89f4c899cb721583ce12e87ef4e2e51b4b54d4f5b7330082adb3305d66a025426dd430b2de1106a1a611f00000000000000000c0000008276347211a4c768a823454b927ee07a8895a24ccf0a7d2f08b298122476c746ecd6046318f44a6d1d54e64cd2be365b001a9f3ef9e1b0171f78585d0700be1e080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000074ac5962f3bda214f1ab586202ecc26ed82f151b10019876118cbe6f4d85183514369f0e3a603034c2e284019645b768f1ae456769fba5302afae878361cd608fd6eb821cf815350fca8c65485abee70b9780e34cdb4b074d15034024823c46356307a5cd363dc6ced424a2f00504f0eee42456dd7030a02ee624c117cb96520de09a5731dda7b2be51f3e3f4a041b610a6f7d735cc86775a5e9d74fa117ab1be244ba062fff6619d3392d41439fbd71e31b36104578c359c0a04c6b6d0d34770f81796e2a0ead296bc03e7c2d9dd7170f88c23d0c63d576bbfb6757478ba31de18d924ffbce735467a6a24f58b789379f423b3a8d480863adc4a70cc2463c562cda156f30fd15194a417d3688688225fc85c66233958824ffe80e22a3040c707f1097044037a07e69cc6e01452303714b52e16ef83660351848527dc6bae76cfb9db73d98001629b70ad80f5dbf576c88cf61240003d21ab498f917e2f00314765d2648a28acc24d9c23613931e2970ee76c93827e5854fdb20e13f5a73f576836a8531ba5cc76e854df434f0991b0a77c3d17e0f4c7853a0b7d84bda2f28617e1e260fc4e4941165611338775e994c0e6014453bb4277173dbb83f030e8e7eb7fde411a434cf0f776f2f2cd6567c1f0bd6916934bf4604aa4b6b42e28da40fdaada84ffa3939399b71b86d7a014970fcaa67004f55027d9e08865f630cb73100000000000000000c00000075697d538a096210fb78c6566ab2de3c83ea193a92dffa6278ef6b4f599f8e464ca9f7093f34346ebcfa1747a2bd853e5aa0ea1d1d22007ec50b951662b2d56819f3f4751c850f54a2b3347d7516bc68dd2dda33b94f18770a757927fc24b6385b47c043d164d32376a08b452f42d832f9fb7a0ba1a4c6611542b6652c6e603a564d00774d4cbf08426a94577f5c3f171f501c2ec4ed5941f233082f0351155d5e4e5f7b715b9d74381e472c93589822400f0508feedac302b957e71ebb49218de42a406a470944b4d40b4550a8c4f240f04a315c72d2b6666a4b34871cf0d2e0448ac7623861c0c69e62466ab90b638d1e240151607024079605835ec85664b00000000000000000c000000dfb2ac14388d5d333a59236db1528667b4057c3f6c0f5253a8452d2c0a36044689a91f68ebe8f3083defd57d9331191c2deb77390dc0cf51392f811aa459f976d5f4852331d6425ad8deae64295897385203944d09a9be2e334bf10ba4d1632dcd72d05e813a293ad3e19a18c1384d5f9aa88b3a8f792305e322c222b3e1cb1400000000000000000c0000001ab341480ca7fb3c00d1e56bf6f1585bab375f621663150502df0d4b2c71253c9706255225bc194b0f42d01e57f9112fcc1d8a34b6153500ba757118aa58db1200000000000000000c00000010343301b8544d78e728b776946dc8458a3d3b4b0368620a0e835a4077ab3909080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000f9fc012d22b348257a574d65f45ea775765b6e19b9071673c010f616104305439d39e04199c24f0b0bf29b4a9c802432e7966f41a4e68b381d91485a27ea2e497a67010e876c153f1cb8526236e86d506c85e42048c8eb2e18164b4403f85066ea5a7f0dcba9c809ddcef0498f0c5109beba991bd3598928f259d821cf1a862a0fac6c37a7cafd0a655a0a5c6fe91565e27e6e4d40f6755dea552b643a183805950bb76816c022547bee4649fa56513bf6886b4f0ebaae0ae740476d06414700a82d727d4229d25f1364621a0658c43b0304b86d442f425b62810e2ce1073051b990400938ae77213e1d39020ea2d675ca20f05cd472016c4817484395a5165331545844738feb4a392d862e7f877803590d6b1187e78219fc582b092fb84e3459419151073c162ed15bc0669738be4cd961b34c47ea262bc2ab4e236b9da57c2d043a78f137377272eeb35f74b71127d7d05045b8f7904148bf6637edc0f34a3b7dbd2703d6790de317a62dcee03c174e1edc48754ca4013594cf0f58df5674a10cdc5859ce830062761c0a0ff3653ba37f73538e10d030df51945ea2d0dd10d105323adaf9c44a354a7147971daf3b5405dc484fdcba40032dde73688c0e5ec6c2a40247dfcb0f3e97fd16f425b5701236a266aff02d40ba7a582008a8a07bc604496aa9443a4e6ce2ad41fe48237cd5beae52db8d194527fc054fdb8e626608000000000000000c0000001e8d8c23a6871520100271729c609e387e8519132b13806c63bfe45cdb2b7a6856080410ea5d427b5cc15e7afa3af5228dbe9276ae8c0b1687a16131fa130b47bb922a53617e9d43d81b1d66114837213a2dac64eff228536845076262dcbd12abd1ff192af1240f5037376cc268de44fe8833448eeb2f31bf5681120de8f63d5b370213bb89df2f19435b4738f3e85282d948380cd9b771e337131f7280e31015ab957a2d212b25ee49244ec89a2f5cc5ed1e25445f430862aec90c7a634d13735823786bb5d1214b6f8b460c1edf7ef5713038966daf6a8c67b114d4db311816473c6c54700f33824fe8247de5026279a59b06533d33462ab16b3e9986721b04000000000000000c000000a49d0716e36aef2c5162df21fd030269178498172169816514404440a16ff11c959f7104f4c878535e20d84b5fdaa4567760d42918919b5b8f72a133c95b2f24848ddd6a71752e055babca5d2e429b7be2982f138aec40218c78d05c0fee117dc097c33704a42024fe8614014c883d6641eac70558cc462de21e2b55be16796302000000000000000c00000051a210473b6c892563a8cf6aa66a8a280514b409a834731128d0f76470aaec79cdae551b4ea69e731a303a66b520b0530f7baa0b8a08ba0faf0b170830f23b0e01000000000000000c0000005d55e16ebb16b10e3edf534e845bfa0b82ad13195f16ff36a2d0d15e458c6151", + "proposal_public": "3a527d4a67783d7ae9077b250565370cf6c5f34e5f038362a9308f414cb68657fa888a161182dd0b4456771885a2b82861fe170c", + "proposal_secret": "2129666b77b38ad29387e4a260f351ca5890edb7c27e1ab0d7a39695cc42e8eafa888a161182dd0b4456771885a2b82861fe170c00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000038bafc5398a9475ac368a01d04a24072cb5d7663a373246b7d42e03735383a3c788a11682aba62587840d802064722713ffdb81297392825b97b9439fd96360e7342690aee55014a936efa439c18f435cc36f25ce6d7fe3e04020b38d272824e26ccf949c46efe0b86113e73d2f61f5e9b62f6083c1db44205c21031cc802e246ac1af4efe7504038b74422911ebfa280abeb422e155050d14176845946bb314f45afb47b8bcac2b2ee4515cf94a8c56e5e04b55532364335b58c4413124592e1b79a86a119be974ce12c91f7d0d3d0a58223b42389fb335fdb55d3d9147c354ebd9c6341f2f304eaa6e0f1e2bbd6869499e3a44c7331d47b2e911772583730100000000000000000c00000084398b1dbd80e64a58247f3c325784495dd7fd178dbc3c48f36d845aadaf33257b5ea07e568b1b4e8cd5d92881ee07348a6e4e1f1a5700658f504802d5dfbc2e45043a3843814a1a6d04302c50557123b9c4431441e33c37a9b4d470181b2c3cd2fdbd5f58741162b2d6cb4496874254bc7462495283c904d778c5207b85c41000000000000000000c0000002b13ca1589a0eb3e445ebf32ca01643b07e2e35b4d4609377e720479af01ed4a7d47b644e4149857a2bfc950eddff54e0883a84ce4fe577512f73e362d40ba3700000000000000000c000000a3e534014fa2a04c0f103c32aa1c6b6f5dce5b7c670c113d9c6d3a7d37f8eb25451b02727d1bd813f1f4786328118547a2615f3063ec007e9b8fa84e6d4e740200000000000000000c0000003a527d4a67783d7ae9077b250565370cf6c5f34e5f038362a9308f414cb68657f6873b1761b0435f40068873eb8c8943509a0e56480d166898d82e40b7b09c55080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000002183a66a3770b25af420366b3bbd944346d645092aa7db468270802a084c7772b61e5549a0e9ed5e9f619c3b2416fb5da33fad546b90d92f2747f91cad25da125faaf36046d66c5046f4d454cdedc91cf2c7f9026fa8481f116ea773a3759604ba61dc578bd7d37e3b974b25dd8d3d72c640ab02e1e7ed54aa57cd433f814d16af51d368e3d28a37144ecb3984ad934295b69b5bacfbae570e079a4fe7f56f632362d817d11a5873af80ea2ae1cf2e72e5b47f05e1948442414abb40fad7a57c35de5613cbaf1540c99610698e2b616f967560242241ac7900a85804a603a97a00578b357332ba4f2a233e63bbd00027d82d9601cc44fd5eb0ab4a780f9a485ccbfe48736de66609f3e94657d54e943948aad35b77ed6b0d84bd171acc149a5f1f341b45a8d81d431935b50177a6e343c4d4303885f1c82c02329936b5a46b6c66ed170c85d8ae7086d76c11c1dd98303eca6201938bf5679336c67c55635e52e49708228591e61df37b646223e3a55b7a6bec20b624642edec16e08b7292b5a0f2fe23b6d22853891bc5410d457ab025a5ed2125752f04568dee54648d85e571ae155629f991b5c9ceec31b70198b5808389b7a374027787a5180260770600442280061cb086f3bef901d661507e41857bfb0136797256eaec1303c4404db5b5c1db479dc4c832c0ad5e3650e0a69200aff4e5a4d61c82428ba374a0bc75a4200000000000000000c0000005805f0739823181f181bd4054cab7933fc00663deb85702e3430e24fe5f99919d27b883516103359712b09747e0418437129565d6f537c0e5f81dc33666573515530e52db4909d2dc3724e2d8c0a546d8e0b951b5a8f6c294e6fa27076ee7b6f6c947e205da8ec10cb61a43514fb2d62b102d07a081d70482a8cd805e0ff9f606bbdda25fbe21b3945b8164446d6db36adef691743987f1f27c15e559d615c5c035aa64eed52216aa570725e22f2ec22f5b3e56e1124a61939c3cf6e484ac71a11b4b515fa334d1dd6d3c524ece1d90b6f840c1070e84972fd5954144856b54a00955d639750ec42b096fe3fddad3966fe56a75eff2c78291ed4704f7260e27000000000000000000c00000071177f08671128037b0bcb23939dc64ed0a9e35fd83ccd48cb7cce5f477f801664eda26b3a8cdb31a2ab381e1e825c2039acc06b63fd36560456ef3304a86618ccd7944d1e9a6007ec131c76132b6a251553e02828fd376da06d4e7aeeea384d4d7c592d2591e04f2fdeb646b1e0f924c9cf950245daf37a79cdbb03d7cc7d3500000000000000000c00000037f65948d0e3fa562306b1039254b1390c4c9b5b0c14261b351b265d4ca7ac14affe8c4517d8221ed1834a293105072af9489c45bc160d310bd4a04037dca04800000000000000000c00000038bafc5398a9475ac368a01d04a24072cb5d7663a373246b7d42e03735383a3c080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000008b72c2174e3da74ff0e5dc6f26a6355c50daa94bc3e1337a94660069c8b5634bb784e66d58343e7b5049d36bb666a7436f06f77ed70b0c4cacbb9e1160c5eb7a38bf74545625f659cab07909b76e713578b3d505c9e7e52e10baaa141e970d5db5ac9a3d34cd7b298026d210b4201a6e5a15966bc7eee342a7027a129b55f243694b9741fbbb24489e523e565941b30b6d789c18436bfc56e38cc5198217ec6c3292cd3b3e69dc0cede6e7483de5b81b57eb6026bf041e5b23125a28571d9611b6a30f215d9edc508687350f949b3274a4c9c24cfea140241a40645c70c2521f511cea60c550f337135e5210693c6b0a2b7b40036fb45e677d71f034b1bf2c3f1394ac2846bec02fa4f13a5a732c594754b16a6a953c69695173c25c02e0b1536070a452b6aae35778260608de8ef70fcb2c27660684ac4b180d940fa85fe730d02cf721e4c1640b5ad78802ee99ff750a53fc0dc1b56f0e5862b4180e57e86780b6ee5deeea124d0b23cc0a3f61fc1784ebb21aa67ebd6001410c5c03cd42319365081780f54500a0f589760b9381428ee6375b301ef27a61191f370ba5a92f5f83e71bd28bef1a82f2c02f4e4ede55e17b6b2eb2458c6cfd89ca5f38271300f8e9300829962169ec06c5192e4a273f794c250a715b3615010e7f62000629203be0aa1ca9e02d423e2ca955487ae0702c0545188e2a115af1fc852d5a6c014008000000000000000c0000004459ab6d9cfe82023ae0e10bb276ee1bce13f83c14acb8311a7a14776fc7343511231e177040b52e7a1dac2aa6b6ea69c9d5662074bce410c2543c161232fe011356d963c3f90d29a1c1a75df414cb10574356030c5fef473f19e36e8480e077dd43742f9de0ad684995ff078e16b172070d8b000d31c813bf219678f8343d61bb6397722ef75379ef70d138114c8b6202463c6d3182fe05d5d099786e421f65ac56ad032f5abe46b5bbee3875b44a59f2172b16314d8a214a4a9959038f1e6b641ba20e73084f46782445504cd39926bd09e854fe074c2e31494a55df6b31105865326c6d2a8b236e9f824c48081939a685494f4ab0206aebb83c04b4d3c83a04000000000000000c0000008cfe13423269c164915f71511b482a77a1e53c6db50e091de11e480bd717a464ddba1f7b02203770f23f741550841f2b62d89d048c4ea36f1016f06b9e2d937158c0fc21b0a4bf21ae504308b5ef08148d7b6e11020a6f359a6a6e09b81e537e799adf20e6ab3478528df43c1304960f8be35a4583ab1e4d2ff75c59c9b2b64802000000000000000c000000045b92485f71a8092989ca057e6e23300fb4395640ec7c0198a5ad77d67e6a1f396e2d2d8d4f69324c18742a82139c5eca7c3b3258b1af1ff9266d0d352ebd1401000000000000000c000000788a11682aba62587840d802064722713ffdb81297392825b97b9439fd96360e" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json index 097ad2b3..06c6f7ad 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json @@ -1,6 +1,6 @@ { - "attestation_public": "8211d250c8c5e55178edd51b6657a50a21b1257898aeaf2b2c48524cc796d259056b0769dd8c434944b1934ddcaec2462f3d5839", - "attestation_secret": "d732b51af33e514f4f09c90735c48ce9bdbfd6b6b25b2d9bd0d69341c5809129056b0769dd8c434944b1934ddcaec2462f3d583900000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000167baf0e35b69768ed8723319e5d93470e8f4b722e289d6529bbb04a0676ad3d5cf85668ea3a447bc746275f6089843f6f08400261d5722216aca13bf1bee82800000000000000000c000000233da41df8ccd123e26b6924bc20784780ce85712a748057bb7c7a740ad03e4db8487151e8529a48673123076b80956b2f6a0b1018ac9e6277321c3e524d8b1800000000000000000c000000c5f7c7264a41281b8c1deb047697012457681b404a34f67bb3c5bd1a2d2bf63c20c42743dd55e077acbc3a1612ac886fc033225c2e6ac01ec9e872386ef0300400000000000000000c000000796a540fc4c3626a2d6a217c5b0e71590560263125beb92651a14c7be5649051674a541e653100096154987113c2c1424872f300a9c35f0c25f93023b564242a00000000000000000c0000008211d250c8c5e55178edd51b6657a50a21b1257898aeaf2b2c48524cc796d2592a43b074aac41365e713920407aae957fcafb103cc9f730e6cee2e3bce0f9c70080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000663ac75e2dfe65527519fa7a3bd13e49c2b5665d92fdd309cd45c13a8397e460b5e15a4becb01e30f6dd3b1ff0c98c0ae7d6c01075169f46e22b754359c9a63f36aaff300ffc394162d6dc27c946c5248d6f5a3dca0eb132d9029e7150bfb7187366aa07cc85d6333e0e8f1f2abeb926c6be6c5ad058351682b15418659f2b2e5d462f7e013d145e1ae19b029540d16073eff00bf030fa2577615844ec0d6e1ad135c358443cee39c3ad9738030a72432f2c3f43a490652fe3a2144baabd3229c657a3383c9a16485853bc4b5d1db521fc146a0a0bdf093afde7542672acfd4b0323a5265a031001591b1f7356713a4ca9a16363c9e97e61f2b9ec1f98abd26768fe626a26994741ca68585ceda9fc7ab4204f17c83dc17e472d8e578a66de30fe543c02d11e6a1c1dbdbb3963519b7c2299df4845ba9866bb8a4d0e8027cf03f5f4ec5d1d4cc74da294ac556d345f5bb53d631e7d250665c5fe9c0014571529a7284a6a94d5623c36012e5df7f8d976ac52dd69ba52697174a8f03d9d40c10447d39f6a6aa0c262cf2a937323ec2a57f6f69d081197f90787d50905c4fd1579b5160e5bc6a1c429ceed6877d50a0c6ae7c5624318b1ae034ddd5447676ed97eb6e2974a259bcf6f96b88731d37b4826863bc2030288e549039a3e725b893c502d236220faf79a1866abe00d36d3fe61d71ae744ecddc260126dd22a39091a7c00000000000000000c00000013408a7b4c9ebb56f24565347830642e8fbf044ffd4f1e662defc2407daf2230f9e3024e16b04b776d17123ca6a89b06bd3168564b3f2d4972c7644d093e667ecb1d50604ab3dd5c5039f1703c8a8c7782a4ba3517d96a39efb82a2cedb3626b7af59c2b1821b53be7b0e378e442ad3ec08df210b42b3104a1d63114cf231e3a4dc2a75bb2c1807c8140d70cdbcc2638eabde942c72909763667274e22415e4a2542a03a10f86016c4b606773be2291951bbcd2afddd9c374ae4550458883149d9fb2f3b7cae3007f9823a7c1e2c7234f555817268037147a9a6b56c86faf43f2adac61d6acecb2ee7ea88328a834b2b38b4fb28510f674063a3dc12a6a1ae0a00000000000000000c0000007194b13422c9d61b8a0f001d90030a162d0d0812c80dfb3f4e0b34061eb197442cc2a20495e1fd79a8ee4d38c503e61a7734a924938b160deae277598700cc7e53332570b480da568d827c4129c19d129759b83e1549474717da8b375586ff1502b7912a309fd3433652aa4b7567566144b65f64be185c607a037b52f460320500000000000000000c000000476b177ddddd04087b2d1e024c3969563ebf9728d3cea76941c19e2f814da658a6773c2fa9aa0762ca678e072d8b583031fc0457c1e6421b6b1e91511104611700000000000000000c000000167baf0e35b69768ed8723319e5d93470e8f4b722e289d6529bbb04a0676ad3d080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000006e71f736862e4c49ab98196b08c46b25251f3f57e2f23902cb086a07b2afea17c081943669b5075665f0bc217aa3eb62a2564c2f839a0129db730a1ec96a7a38e45b3f437745bb0abb172e2b76d4e156bd497f56c13c2a7b48a4d3765414dd22ec9f5b33e4e37b093fefa83990578f7acfdcfc569e9c2e11d66eb05904bcd462851c6e705c42601a031c912648df3b50f61c035b552026412b521041b5a6ff3b0478e17833037503def4bc4e74140230b5df2e264d61b70a397fda02e5d8f10f531bde7961ecb115f909ae549642410294e83e113050734c3d417174e0177857d0dcbd75e4910c18f2fac505553c767e9dbbcd4bfb46c352b06c3a6791eb5a274c215f4b5a653c6b20d23e5fb27ef04fc699fc41580b9817a6cec611ef88027394abbd27051c52166280de1aa2b6e41d2cfaee761b136e0e9b3ab375528f6f2e3f376f151b8dd662df1434608b4f015b421de36d852a210437a66f3f883f6e3630ac3c1ecc91aa482dfd6236d67a0b2444287f73367b33745e70730ea05fb20701a508087b0309627ff909555959d331555f5515fd3a746877556727b2caf2537954a24088f7e732d3a0b07162904b2534a4a572f042eb023d4c4223169cca5eafefa65fd70cb132ec54696a974b5f30a92b5e2ada3eb0480a12f06b12c9d14a6f47c364552d80132a103c521bfb2c40bfde3620852316769cb52a75ccbc812908000000000000000c000000ddd67770984db11627ee787dfe97831965cb686699b9a9092d7cc362d2ec85276f4c75225c288e4e1d7d0b386584ad583b7fe92caecaf934938b1b3a244b9f4aef14801ff8a9df70d004e44e23608d4d74a9020ba9a48c15b0ca016d1a6ad13c88b6a07a833a807aff9952524b796561d92a7c5d84eff411a326741762f66b19edf07d4f0f95395fcfb322200a33b94d6448bc04ae627867e969b31c267b233a2852436b8b5f5b3caee55e5f3607f94791b66b1521042d746ce9341dc337a1207e7b6540a2327a3dac2335545b82a6572d286c33457bbc38925b68015d67640c6779c7066f65f2569fa12534b11a3312144110149a824e5063fd1a2fe5f15f4d04000000000000000c0000009c3e0424eda1ef3e17529c7d7b8b67140eb1554db53aa420a805de1d47735d7555cc9a692c80175e8f2173711365e61280cf8934a14e0205efe722400f2c783f60a69a3a7deb165ead78aa533f592c0a524dfe56e9a99b1f323bbb15de589b77523c0f47e301f6592538037451ec6f0ffe41352fbea56e39434f5329b30ddd1702000000000000000c000000c84aa351497c534aeb3e0313b09a504d07313704cbff723d866d9b2a60d9936c072a3a5d5100765c7009d51405a264208785417a093acb0a365d6d4af9f9e60301000000000000000c0000005cf85668ea3a447bc746275f6089843f6f08400261d5722216aca13bf1bee828", - "proposal_public": "b1a04c55e41c6c7347f37979b2cac65941619336e9ca7d210bb2916e8049867e3e66997e9ed5db6d875a10718ddb980d812bb164", - "proposal_secret": "4a19a321932712d463f6fcbd9ea74fa2e17f2e478870b45f7f636966dc0809113e66997e9ed5db6d875a10718ddb980d812bb16400000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c00000039d5d378755bdf24ecf0c41f047a017586e7da0d51c31d0f0d0d322878708f5cc17b57279bd10007155a5c7cf8442b5e8f3519025ea14b65950d1c128d68802000000000000000000c000000915e177420afc866293ed14d2bfe284250c4816668690573b83e1a02d109662553f5943d8d56af7d4709d5515cccad0b52fad0694465831e0bca0f3c935ac86a00000000000000000c0000008499c71c52202719d6d890128e8bc63dabf7cf0dd92cfa10c54187398017466020bea9270b74e42d737a7139cbca9a70d455d302e4627778b3bbc24e3f33205700000000000000000c000000f181f85f0706992d921e163397d9ef076552ed78405443633c86ec014945b570dde8b264a85b99380bed4b45ae11be61f2e1c9126dacc5254bea13210952387300000000000000000c000000b1a04c55e41c6c7347f37979b2cac65941619336e9ca7d210bb2916e8049867e17c9ea49888c6f2ea6a16650b8624d46e564e64d5f217a3d0ddad062446a4708080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000ce815b313f53c85d7bb52c6ba7031e3427d2ab6e6767793f8866a60bd62f4a58b8963d7c8869fd1fcc90473a68165123da0df566d0d8c244f9b24507f363cb67ad1c202d97ee53420d03da41a354db738212b3521cd0e87e194287691e88c755944ec64bc850d56d09cfdd45c54ce76ac00e99035a9c29078ef1c101363bd7776f38997cccbfc7513e8deb7deda8de5d7747bd2c12ed8a7a7224481f6827ef3b6be4cb47955e480eccfc3071c11c1e25a9a41c2f1ed56f283e07093898f5585712c30421009f4e49bee61d6eebbd13408b58cf1ca400e64260ce31412717d9128a484c3611ebc62b319719071794c41f90ee7642b36a345f76caad39c1c6a7194bf3c569bf53ef489ddf5f5211ae140199bd3258b7bf50788001cc12c1345e6c9b09606c846e3f5932caf8268eb9e00e58c8a43d0830c946e7b81324ca937716686fc956f86fae100124bf46ddc97010e5ad00366e34a25c3a53ac1cca16af55b35e0c73e23dd312fc461f7c738b8d4fa1d85801e0837e58afc7db7b7a519a1956ac4f356b305f070254ff5b9d7e3963a2dcfe46094df14ef7aa1c43ea5507219185db464eb4e65673fbb975c5640d014c50cc3c03b6f22a1793370a41525e725067c5448b86315745b5ec5372e0193d2b54b92c6762b41f3802ff51822d4e717eb35565ffe1163069a71e200e71375c89ec99386814535b502a0257fb44611000000000000000000c000000cd3918430a329b1308d6e70b337b7d152843322d85c3d0231b4ca662aea65968e223031027f8b5760b1c2808ee98fc440184bf269893405a16830f77fd26fa5517eb26184bbdc93d7987d32f92727755d52bdc51622f9c2862180959a365a13943729e46f0679e7d29c2640f6393dc6ce67fc844da6d840d25bc3a185e525202d7ffd051d8ae74483ebbde789576a80e7650347a40e456214c49150657c6263c993b4411706a4d2e17580a2eb5dede160012ad66f526e63b864a5017952af1768fcf9b5d87d52c77bc4ebd3d4b4d896e92067917fce7d51f26262d33ca3bf31fe3a1a405219fee57eedc453ba80b0e6e3a9040202eb1dc53aa916944056b415900000000000000000c000000434b9976cd96573ddfdbcd54b03eff38cf614d4d9f63d056e18f1a346ca8560c887f580a6e922161f6347b3d2a858329463ea9012da5d2457f4c39649648935a59ea0863a6035d303d352c3addb01f0933e4a35e4e14501ebdbc690abb21a94616f49b3696cfa80b2772213fafa0515ad64eae5854380a1bea0ee049768af97d00000000000000000c00000030193152188adc216fe2de00671dfc72090015367b423966f9902438fb13d20d85c9ef021a87952c5a2f8a131758e313b04f7e753cada16f04ed8b626fb0ba7a00000000000000000c00000039d5d378755bdf24ecf0c41f047a017586e7da0d51c31d0f0d0d322878708f5c080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000daeb982c9cb273645227655c48910d2976122b1a0c140f002565c93f8b58686482d09e143794ce1beef1fa23eb268e74a9ee2a74618e464b4eeee4269d2d0713282a9d0858b73d3ed10b3a6c980e212c5b4ac72e8854625d669f802dcfab687810b0af4166b79f597689cf1858770977f7431c2c78f0b95b7459c510d4a67f2f032b540e1d146c59aca346684f2cb9347eb95b694b47e001ba04942f1e47894a95fa3d680d70e36ba2be9e26577af17ea7309912382e127d7fc628618def3f4fb7b55442e7e5c838c7af6545c6a1462d0e1a5f3bfda16920857b270be57ffe6b859cbb11c624792970034f43a86dff3d007f93493af5c16e47dc8012bff8502ba744647b16ef8d3bc353982a570a5a3aaae175090be1193e3f782401a320cb2397cf0c592f0e4b3ca0380a106298d521d08796322e63ef025ea09a575832bf7a04bfef03fb9ff934e0aa911d02fa59747f28b72346cce6564f9aeb1dc6c9f57ce7def321fe566e51b2a19234467753734e444d391c0c932d0966e10083005d0e1cf51a4a18620e5cf6fdef5b63ea5b32bc3e812ff50df50a0595507ad4cd095d0e2bc032e23705021587cf36a45bb925bba56d7e2a99e51e890fc6616347eb5cdd3a87495a38b8757595143051eab309a177f64d733deb678641233fd97afd3fe40e167cf80f41044f514f2f96c8601e4b3fa3563296aa4f8dec673aa34e751f08000000000000000c0000002b6d5f3b8919760510ec7f7953dcf33188d73d4450668b7b78cde566ef50a07da180a527e948774600b33a546a051d7612cf9c67149fb54e699a550912fb860a29ef5a3d90ad3f02d5987c08cddcd95922ea490f76e85508df36b57310af0d786b320d3334c0fb0f6c9b90693ca8523fc7be2622f3ec3b15918fc46b0a7c2506a1c1660201a5c1743ec54769bc4f922e351f2b5c5340c73b870fa66c1c1e9611a85d4111b66b3f1d6d0b95299d2255368d15516be115612352afa15de176540494c2ec603be0b714d423812d8235097dd0a64d60c74b7f625893c65e0932ba4ac9cce802905df5051bb77816799b620dcee3117db6e64a743d989c628b66a82e04000000000000000c00000078814b61585f587c3535925b9a839d3d2bf4b92d1b31e71fe7cd027d253ccd57e4e3150106c814360309c47a3e35f872b53c810e07ecce0c01f9f05866170f061120176e043f3a4d37d7be787a744c15b261714130d051105944667247c45d77a4902466d3a96b685cd947679dc40a617ddc8125961f4b4b5f4c265b7883900e02000000000000000c0000005e45283b0672ea4d07bfdc2e0458df0ff45e2e345331f6372c3fe631ce42540c6840232a94dd9b6f1943bf4a27335c5c1eccdb126bbaa542fb77771e7fca697a01000000000000000c000000c17b57279bd10007155a5c7cf8442b5e8f3519025ea14b65950d1c128d688020" + "attestation_public": "3e956459bc3031258823bc4cf7e24f3c00cc7341a633d138997149635cf7096f5bf13468a9c5be7c67ab357b62724446819b1513", + "attestation_secret": "eeef8eb39e626aa4b5c8408ac00efb8bec58716b55a61ceebb8398036fcc3f755bf13468a9c5be7c67ab357b62724446819b151300000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000003b566a7521399115bdf2df33f4c5ea1e08f5ec3758b6bb0a56d9373ea1f5790af544484a41d36905cd90c0258fc8ab72317b6a0ac034c5179fbcbf7dc9a6d3154035c04586084a76ea4bf64303d04d649cc63f3782d3397534bacb55a105e96b468a5a22119b5507f6f8c60d9969c540efd27e3b66ff142f888aff0153303c4820f93c7d6d5217393131e96cba49a947b1f77d3031f9b34452a8ff70cf170c4ce20a481db37b44439a2171752eb96b07e8e10f6fb194d625e96cd7088af0fb3d79256065e4aa49014db5c9629cf15c044399de32f6a196661635f227a5c81f53152ade27d1aa750331735c31b6b9e756d93a4f342c01476abe71e25f5442ce6f00000000000000000c00000030681326c1a7bb4c8529b602f45d8d69c14db60d55cd282772837958e93a466d7a3504203e17a93b64271a1ca03d4b2873f13d18f601465d83d6b603ff5d8d40ded1c660d44c2026584b2861b3059b06c6596240db54320671141c355af1bb212131a904231dcd6b2841aa540b5bbb3d885dc15862bf6c53aa0ab23b69a4082300000000000000000c000000f9a54f01f546a02c85062a63bfa70e41a341db417acbdc6048fa5d2dd1b90b55c138d52dec448f019a5bf26040a79c1cc447740c4882f11120a09c7c3bac940600000000000000000c0000003097850698e9e27ee0702c2a0add830733603125b20bb067fc9fce0dcc40ae24c5acbf4772f7fd0e34a0fe163a20be250d2cc36b58d62c2ac6175e191ad6b83a00000000000000000c0000003e956459bc3031258823bc4cf7e24f3c00cc7341a633d138997149635cf7096f8dc5be39e119ea6e5b37806cf1af9f149a2c1e6e861d7363744a933d33db0305080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000233bcd1c0cb9e45addfe66115775d54962961268751ea54cc9fd4458f17e763616ba08376366ad16107606099615ca6017e2580c99d1eb7614d6da665a271e493fabdc19d043ca0989a7707de634df3a4e93275778348a1ce8232624fe4b1f5503d55721cf9ce811a08b0508d23cce56d154900af05df05cabecf83c6b10c640c0ecc213e1afef16b8951551465d110cc9c39b0affd1e5512a665d7a440ec13716e8c5478fe1f1612516df2d6e97c57aff1c227c4fbc6c39af4bf803de5246314d5bc90cd66148458a1e4c5a6995f60240354f739be81a62b9c0930e40157a1ece0aa257437986256d5cee352398b240e7fbc6609995f1308fb542799eda736c01d6126a76cae4509e0965192df50879a6216208c113d429558d845512003f1ae0665f454342836cda4b360c877b565eacbd547c7d5fa40784057c2b457f0a11d9c01d7a869e8114e8148557a2d2424f6d762e107f37a429ea2db17e4d6ed607ffda796552d4dc1cfbbcfe5c22fe7f46edd2fa592c1b8a63ce71056d2b94ec600e271b65dbf442064136bb6302a4f50c44c2560b0dd9406b216ab35088d9340020c14a1fe8e0d425b50db178bcb8db5c0c07e5514075841e1f8c1e7e035206421e1a8d402f784b20a5065236306890111930fb3075ddee0952461c3263343410e7d6fe3832052144a8d4835715c9e853b365c257f19dc504185a9c007726567b00000000000000000c00000036ce705f479ddc2e9672af651171f333022d85350a305a0154f1a737ad00c55565cd016dc31b3459a5a8282e2646556a25891d7cd398e67b86f35a5a291ced7c40365e2218088d77208db027f35eec073a4dc23d14e66670f27eb432b1221510a9aeae472618b700aa6e500e85ac67542ffe7c67fd796773f4c79a10703502218abca2503520a2231406d330af26073910577d222b4d637678a4917b396b405c62f87a584af3e310c5de09414fd9e06f3b4d553e8c97fb5470cf7e420892347c74c2f03f5495f42c03c64e1139fea96551f67c006622a77c24506d74a1fec5121c0f6258b2184e4e2c7f6026e7fb123068f0fb4fd7ecee44fb1c936e6a19180000000000000000000c000000a915783babdc775810a8c202cd7c51669937757a32f08f3219b4345f25130955b593ab6136480d6ef74f306eb78d4538d612fe08878bff1865c193788954af3071966e21b8bd62695d94561a9c7db160eb38e9113c07b44bd1e0cf75db60ca0047623d77043b0f49c1428b13e531d06f5ce0a31b3530726a79234f5dba8b914b00000000000000000c00000082643e4881f36d701fd887441ae13e5bd8b05411a86f422d1f9e055a78487810dee98b61ff47d1589ab49f247df1ca51e2d9be5f796b7c3d82450952f5fc717b00000000000000000c0000003b566a7521399115bdf2df33f4c5ea1e08f5ec3758b6bb0a56d9373ea1f5790a080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000005f3037180edf5a22fd79e066e08de732ec1d19761df5344a17ecc27e45ff7b3e5c07091eb59949415898480efcf4235cd0734a61c71c91646d5bde25d4a5914155f4a259a00a517a249ffd15e347f81485f1f577cd944a2e16bfc5374fcb06473c7a2766f45ccb4ccb0a69098dbeb73d02e5906b2590a92521d62c3c667b6a741b4f28517c05e112413afe0625d2dd7674f27448c907f91309d8a0088259ab3d21df4c19f9c97f1c1da8cb3ea200533764ac0a2dc389e56c2b58b04e15676a4a590e860b07fab15308f7b23b1745cf55ed2a7c05be99da2356091c57e434ba1ca3166f0dde58ef1938a17167ef8059278317073e44c10043351a726e969b591b616ca07b3153976d0209663ac535d43c828e6d09546e052f1fb5fe2227da583caba5405b7ba29703fe5152352b8296229f443666cd94a67537d50e214598af3487bc6c22327ca767b1a90c6d3bbad833628e0100b5695f57e34c413768e219099cf47360d00bdc2f6f2eea0018b85f2e84bfe30855b5865b3605487c0d995f00caf56a4a0b791f4c04e0be53edcb483c1f7e5f1805af9d65363cfe24cb7f9056f3be420984f028006cc9f1197c91c07dabdd2c5f7bc2a944a5c35a25f83d7c44900ffa5945cee46eb0e943161fe034407197360956254a05ee60227b2746ee55e0fe7d3c4150e5076795cd086867bd7716770b699a4b801bd47c26514c1d876f08000000000000000c0000008534df1a124e1f1b5b4f2c307c2a2c700816bb023d04f32caf5fe77950e67407e5e6c720b3a53f26303a1c3692102d3e57c6e263113b5463bde81f58e6ae076ba0e5cc6e53e4ac1700c5806e3ed120628cdc174379d16229f4ecbd238e27d7682870813aacada07b1dd7d067dd16d36efcd17a7c629afc22ebc37f47cd64e604584062368000d54950f97945bbd3bc5d0a06e5535136e1120067ad10ca585866ba2fba3dad24d50c7eb9ee4c3537817628b02417ad762b01d14a4f55c5f87007da669845cf038f0c73003010003fe23ed112a50809803e436288d612f755f748f4742d0ec708e648addf161fbde25538517e386e8bb6ab3a38f73659058ac00d04000000000000000c000000aea7f73885c20101b5b9d2717e1ff044f8eb67752954d02f06d84e59dc9a3221e341c74630a2dc0609c38513ff3ca32d40df73176c47e139e1e4111dccfc0c69507dbd13bdc63c5d1f1e8c7c3f0b616e996b500e5cb9f302fc94a31db31a4d02eabefb080a30dd4cafbd1031a427835cd8993325e10d0d5db444f508ef9b1b3902000000000000000c00000001c7cc70c254946836a1c825536c03514efb6b76d3b36e7de1a05c255a6f3b654b8c905f04548761d294df30c86219744ba73f2279947a0c19ee895b634c407d01000000000000000c000000f544484a41d36905cd90c0258fc8ab72317b6a0ac034c5179fbcbf7dc9a6d315", + "proposal_public": "92614a0d3a3c1801cce44829ba31ad3738c748509278b32b384561072216840f218791726fc46a56ca2fff3802e4852ad975e730", + "proposal_secret": "608b665a2d27da16524c5e5045ca6491606f15c73e8a6485edfec04b61e32c7e218791726fc46a56ca2fff3802e4852ad975e73000000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000be28c1121801e62d28a12c5084dbe3656e55391681d45848e2851c2beeddaf709aefb3293d03ee13c719021713170e460a1cc3092ec6bd1782a56d116b036d2dcafd941e9c239b7343fbfd38da445e6bc755f926e20a9b34750739134386d92a0f2ebe57d6f9c652654d9a7d833ca466d563be64dda1494a4985436f6b352c6343da044710189e44f564ee09e7a4561c797e3c764b66274921859c2bc0a0be4c35c21372e2cf924c7feb343833994d35b71fee6cbaf08073dc03864f5081fe2f725c7358a4f29e08844537094b81c970c40d9615bd82b421f956421ce8d39f648db2c25e0a7165135643574ab5c5523746e42a5ebaff7120b3b0d843f3067b7700000000000000000c000000565b362317946e581452931bdea973471111905e26cfd0589746ae5a200adc668807e42ab5e3a33d852f59787c2303488272ba2a45eab266530b6733ba586f1d3e58ce6f73f4a220bf76182365593f6d3efb925be371783762ba2b5bc715377051a0c935cb9eb7318064107e5ae7b21925c2cd1723ca1541dc48b742c664ce2800000000000000000c0000005861097603f2555d24f51518f71d9f6e3e7f2f081a34eb5d61b3f2442d72e5551a9e2417ef75e1143b37100e2461a75bef2bc34d2dc51b055c120a0d9ee8e13200000000000000000c000000b441ff575c52491680c896746ca5ae69a8fbd342048c632f648b4941a924dd67d53501130c98e949cb323f105d31d86526d9094882d17b6d3621696a63f73d3700000000000000000c00000092614a0d3a3c1801cce44829ba31ad3738c748509278b32b384561072216840f96bb045ac02538516310e16b515c310f11fc375160f402554faaac47f6cc1f5e080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000d424bd2bd750b12b3c13af79596e070c3347764cacc2f602dfa0435af46f6f045c813443b0176d34157432561c25aa1886fe7b1f32d87330a5e7d07941f1081c5ba50f653d229b00d07b8171f2df820ac0d6a51a486728743ba60e2a9e429b1b6d20c4435103aa0610113668d2cfd260bd372c64302a0210710eb65d3d873f240b01ab1ebf29341d568e9b00df77d761797d55003719c621ef867760c619cd0b1d440b02a8731224cfc9e473d839d870bcc2ab23d9fa092f29801a70bc1a7b37269841553c7d8738df49c31265e2c61e02d8324e24bf362e83e68c08f0965e1b35f3981c6873023c60af7b5f6a107760cd19f62a44c2932b9fc7c47df4580841c3039e7b8b6b1d75d8e5db1e0e4e0e6a1069b8404b43e37286877f64ae4ecd0fe6655618289eb40169639f45b6037a3cc97eef2189360578de7cf839c636ef7c4468d508a53c945362502f7a037ea26e01a1230c5e4ed82098342a5ffeb10d6791d7550725791345d566865c9f74c714ad08fa410787da26d3f4f64a38d76a6d639a9804b1f15428dc41365c82177b6b3a220a3db80f225b0a19db2350a1863e1f563117841608712ea3e97d9b5ec27db654691f5261f871b41f26331b206111f2b0b547d20d843d44e2d33d3c871737aebfad1dcaa9b70cd01cd639f96f846aa73bfa281a287d145795427c857c053275bb340d2286d860d5c3167c6169272a00000000000000000c00000091188e338d880379f5523d00770a806a32cc791cf7f37470220bcc1a95df965dc81e6e5b7aaabf5e5e8d5a1c7e4ef12a05ac7a0b1aec5d0bd0a9b21acd5e8c59c7288760da2cec2d6548233601aeb96a908ba93bc97b3841bd0233066f3db540599c975cb03ea975935c1d5a4ad5ab43513a2d0f0ccab97605d38754580f02099bccbd01be8a201788eec00d254b3e1cc3e2b938cffba6280d6acb592cec9d454440d946ec47e2442a99ce20b8b870473e73e46561018e195d9814365ba751712d86214f7ef29574091e17768676b5643541a778b3b5f93493d6790f6c2cab6d204acd465025fd279da3ab709976fb291cf0603b0cc8ec6145b8ba4dfe3ba74500000000000000000c0000007d83d0022493501c48385f147e5582075575866a221bf03e47ec0f0a60ee644939bee316f569f76f827b287d5dfeee48ea61b00a315d7068de36e3747079276024ba0348e5f50718f893b104fa5e7e4ae60f6b3cab428a659cf1e01491fc6e1ff91df46e74a10f7995f4e2243d86f92cfd260e55dd39e42c7f3fbf11bb028d3b00000000000000000c0000005b9f145a11c2206fe1710545d9a32f790d55ee11ababc3686e47fd773be92d1cdaf4de506764d81dc075b617ea9d064ddd1b6c5cfd0bd644ceaa330d90dc077300000000000000000c000000be28c1121801e62d28a12c5084dbe3656e55391681d45848e2851c2beeddaf70080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000473d972c3149084beb06eb5804f84628b6848665c9ad90416cbc2d19e7210078df73b536f381ef273837383a0f45516a36eab75b9d22d272d2a6a72a95b90768efdb6373e3a31675055bfa42ef724a146b20be0e9f85ff21d70c451d04541d22c581d24926344317d5f57417af7a3666d6b6460d1ac647036f1075788505180154db245d42d0b86e77a94d278404c6648448951ed873ea47e6384260688000627daa806dbf50140db7fb9e0ee8c58c2fd3e55f65eebab456d35fb760883f893a2a1532666043924cdaa2a55aa579de554925ee41d633796756ac745181ea3729228867660df34b56eebdd371666bff6fc69b8a5ef5460d199277a74ddc197f4b6b118638a9caf106c7ca957ddec58f4b3d2d2d5b74807048384bab6a4e18931ad5c5655b97c1cd185bde3d39ecd19e48fd74403e5f6a505bad7495164cbe83489e86f40667f2a93e32a3dd79953ef90c2ab7fe43b06b0e2cd7001c1f5841121c39f88d6bbdf8c63dc7997a310a24d57b88f71248fde4277979e77b5182a6f54558cfd9400859fd62386bdf1e6e27a00a979eca6a5c4a3e51f4503b3037c8596cb91ceb4b641cd7304e0cdf03e70fc45359eb8b2a1d20d0626b505f5250cdc86d4a0b4a06be58560cf1c06726af866327c094b551b7a9273596aeae2349991d269bb5e865d2706377bb342969cee6f23a53f5f26e0553f9110478bd631df3666d08000000000000000c00000085d51a0fab1ff5078de85067f351e41a4c56e34a72e8e70db883c16e56529835b174645ed78c11213469c65848fac12a0d3c2820b7f96202615a432e1b9af55747cb1a37e4291569f454274491685359cb0306525044b6478f9d9c0e036bb93df0816e7e37aaf3315f3e4155d3a48055d3fb555d5cd6ae5e9b41e521f3616a20a440de234596bd5adf501776dcaac9335848085ca064da6bd7df3813bdf15d058cb4a07bdb9ca223c8ea5f776faf995997917c5ffb76d4147729eb592626345cfaa6fb3d1527661e87215d0a935e7b587bec6961edffdb1ec0780d17da938e19ade2ca63b5f1ae67bc43c2079cfc82233c0c81517d6744604624522284bd262104000000000000000c000000df7f9003ecc8cc2b22ab1c5b3c552102af135b5ff1641a104139c059d2e4fc3172dcb355358b0e2de451003e7c017406b4fd4429165fab21fff283603b5c4c7e46a734152e76623af07f292dfc55f36c476a6f29029b3e1082cf98415200cc022f074b5a0dad5223dd90753ac49731106a6e2e00a040f242898e633bda17224e02000000000000000c0000005d650a7a3b918302c26b11039d784449429fea1491bc3d3689d7af2fe9db24465c2b06792476ee365fd73a6e8b160e593b63a51da9e6d474279ea80b4613814001000000000000000c0000009aefb3293d03ee13c719021713170e460a1cc3092ec6bd1782a56d116b036d2d" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json index b497ddbc..83fd1997 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json @@ -1,6 +1,6 @@ { - "attestation_public": "9629d25415dd57261bd9a041e9afe7089aa7f548b9023b580d466f7239ae5b53a24d5e0a307db6420fc2cc67d1435c0547dabe30", - "attestation_secret": "d68054521c9bbbc0c63ebcf3d85de1651e7021a6628e9efea5a770bf98acad04a24d5e0a307db6420fc2cc67d1435c0547dabe3000000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000f80f8b31e787cf70af02434b512c3a57d950b639f882c8772e950e4faef4ed69b3751e07b87e5f5e624faa736ce1e62a3a262d6721c08a5bca22451adf78282400000000000000000c00000019decf220252e26aad0f770423324b6a80a215477555aa3548b2ac7dfff46d4dc0697c2712de6a1718ce535f7eb13f5b2bf2bc1ff4298e35038cbb2456b6124b00000000000000000c0000000504a2011237390d2a5f9e274a7cec1532155926afe0667bdbb7b9670923225fafda3e5371263710703da71863cf55516f6801723fef352a6f09bb384e23ea0900000000000000000c000000a3f9840d26940a708b90a049f9e9e01450b97718bbf0a8001fd75335d2807600d418946a72910e5e8ace79087b01bb35647e9e3f17525010db3991330fbaa82100000000000000000c0000009629d25415dd57261bd9a041e9afe7089aa7f548b9023b580d466f7239ae5b531b95c8334d6541496fe5fe68d33f2312ab36407a117ccd634a6d4e20536c3a66080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000ae62b47562cefc11a682b4099ea61e0d3eacc25be7570678faa829089c696f11791d8f10647339047104500b17e62140a78d616390afa83740652f683747350fe001920db44e5143c37cec662ea807266c55a20234bff35e4fa5bd3f6443e9654ed2450df2980c2d55495c00421abf74263603604c29dd161696ae0d955978775f3c6a6e1d2b2e2d7ec56c26ad4a2b3a8e02c3210667a53f1db2ad688ce4b26b640d870cb1f3d36113e4ca52721d656a1d159b109efe1445702fc60c5c51d5561eb6c8362e58695ec5c53924d17aec01541c425b2871431f814bd62009dc021bfaf1ea2caf1e7a6e817dd913d678ba3941df760bcd43bf52c1fb3704142b35137371ee3e0202593d0c831258bc89382fe162455f23be4b5faafca8587665dc04713ad77d151f397e2ccb9b262f793b5f160c7f00e0737e5135fd1935e59df3382891923cf5c7732a151748683ccee26f6058ab3e1c3261287c4eb633449968630a70bf412bdc2a16e4aaf662cf91d61c1b4ca3701b89382da27c1554ff38b371943a946465449a0494bd2437cbe77b0dd16e1b638108ca25055b12604882b43a6ee4413d0872f9634e2c46659cb7e50c29186108dc8100470ff520763039d73726347a0b65a6dd5507140949286df52236bde94862c8b4642147f4744e6353778d0a4818f392372d71f0925d8839b94532733d29f612fa39839d947ab8b4221500000000000000000c00000007d62f672c15b822510728778d41780ca31e0c4bfa0cac0490c06e24a10586758a6244338236017c7843e268f463f031403f467a025437737e01f11c1839cd4eb51aad5542c2fa05fff237421430746adc20a22f6191915820057b7b69892d6250555d75fb62f341566ab168fd10204d31437e2decd27436ea5fb0147188355feab1a431a2d497328b7dba30a9bf9c7894fba220986c453f147415012ad544799acb9733bdec4859eec82b27b1b46f6404462b15f97cd8417368645010f16b3c8e4fb24909a82052cc7d1956bd0a44436d1ad156f548e6051cc5003a3cd9f333106ba6067e62d74950230d05242b8c3230ecf6403eb1190cbdafc6679ca7021d00000000000000000c00000069b7b02b7d5dbd0272233147a82a871fe17f0642bd31a259d0f5cb56af49fd63f75abb172a2ebe00534cfe4f2deb04550816df262c650b56408df24279441a4df3b3115b46c1c8139dc52c7180b27615a79a7e6540a3ed3ff7b56e2fffe1c8166052d418c2bc42662e5eff19b6539613e766916aa0130716fd0e834ecbb6f41000000000000000000c000000482ee6614778190befac3725860bd33a0dfd154f64417774c7953c08a413ca7c124b3f0a82c49e6bf8dc2c1f71d2e743bfeb0d68ab81fb323069590a612c480c00000000000000000c000000f80f8b31e787cf70af02434b512c3a57d950b639f882c8772e950e4faef4ed69080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000e124f36c59acdf15d8d1b65be745415c0c523448bcbe2240db9e2215f08492617c186049b1603d1a6103ac1d3616083894557d730d34a05d0bee297c6a9bf40db754e0783075a74e75caba4df2fade11f3522973548bb16cf0c37a74e85c381cee2672691ff0186db43fdf3bab80916ef044f62561ccfd1fa065fa75e1b5a815e377813cad8a002b5bdc9536be15b1135e7ea1387aa68c4f60fa35152c2f9f46ddbf044cb8682a1543d5ad1fe192090297cbc45b0e952d0785c316081a6990139cad62793650bf6eb23c310c0b235369947cc16129f3c04297414c01fbcb5e2e303ae04f8b7145044e61bc3e27d4bc741271a63eec120e3849dd082c7d153967eeb2b6437c94c007c28dab53aa83c870f3b2c5356222a73b890b8a5d68032d2f11104f77f16fa34ea02c1640d81b7f5fb9ab5c5b8d35c07636fef80d65afdc63d86af61c7760761976e582284514032f0c0f51026d6f125758bbfc0b3f17025e8594bc3a46607a5944e68e741abdaf72a8724b2e1293d8153565022f2c2d44356c6bc0686cdf7c7be8508d088a639f6397492105f2560e23d055a23d668432134db489282ac9a37c696ee048b5acf5772ab21944b392a76b184c4c0f307e4d3e270b545f9a71f87ca4f3025a5b732e5d2588d01b317d2f71835ab528dab5740ba59a05758232924072b28c07de718667c8a67e6f50e0f64c8688bf55d473a22e08000000000000000c000000ab33982632f73e0e9b5cd045495ec47a88c0837052b13750d57f742799649817cee0b25617899761a749a02452ec3738e2e0a44e9229d60b6146dd2c0205bb2933e4934d58935357ffcc8f6265840d446a784e4b08eb47576d39e023d6d085617a11515d3a1a4a0fd5c8686a2fe07c17a195bb3ee33506292759226ea07eff4df9ac3a6b243fb537a494473d19a07616a46aa70da7034c25aa3cef074a87cf2ea3e7ae1cfab1d7339b9b17461eccf5390ad6a721443f410b98b41674d76f0b2686b5fb4c59bc1a0f01540245991d4d5cbc759753ff27e06af7dcca4e6ada590238598570d4d8c9256a09125358a1f52071bbca0eb0ce4157964e997086ab827804000000000000000c000000d0d83d253c274e7e48c96f180595a31afa4e4233ba1f9f730bfc4c593542061d50a09902406d3d1e3f0f1409f100f556956e0b369025f615783d163a0b6f8f5ab897e83e61c0a42d6ed348009e5968094212924e97d512548fb03b3d20a5ea185815984e194e62746d2cfd4add159732d1204f5d2f397576a92b5f6d7aa9171002000000000000000c0000005ba4d516906fe063069f1b71c3622a27d738a1613ea52177bb99b0124116c84db35be17ddaf1bd10413aab1fd538645920a4363e1d749f001d5ea97e6939887a01000000000000000c000000b3751e07b87e5f5e624faa736ce1e62a3a262d6721c08a5bca22451adf782824", - "proposal_public": "14f0a56560a11e20276ea3375789f44e8c2b8100d7d7466a879a9b2f5ef419273cd770265faa826e82c32260b72f5c44e09e8c70", - "proposal_secret": "61d86520f291e7d64abe6786124fef860f1b3842b8303cc0bd8af9d84c703a443cd770265faa826e82c32260b72f5c44e09e8c7000000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000c7edae2591178150c472f36b4c8ed9311b0b69085d52ca3c8fa1061520de8d09bf1e94604eecf04673116e361923e3112240192c6e5bd773bbef0761bdd2172600000000000000000c000000f43d9055a6cbe8481440b406d717793cd541b72603209e2b401d8a1682312d7b36a0a70e2233b74236b8ad16c92cc13d6302ad6d11d6ce63b0fc4370592aef0000000000000000000c0000002f155e0941d93b7464382631bdc10016846f253cd306972672dc290ea603d041302c353778eb803525c94437ccc9ae1297b3d156849d98706d1007477198b31400000000000000000c00000013316d5803d3ad6e3e2000406db9e872f2ea1c2b9ee5456cc09f1a6831ae1c3a5e7c0c26593e0e383e75da6ccbebd622fa32cf1379e1a62c18de206a37eecf6300000000000000000c00000014f0a56560a11e20276ea3375789f44e8c2b8100d7d7466a879a9b2f5ef4192779a54e31eed123643d408c3ca9542839445545419a263b1d86437b1f477b7874080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000419b0177dd2279178ce41529adea6916b700da4bcac82b705488c13328f8ce69bace0b43349a9c682a96275ac11a6f009c55626c09b15e49957a5634bc99be1a58a977661408d4547cf877702a993361b8ba61051b93db1e2a96c35a230b243157969e06da1e3b3f3fe1d90d99369b26649aa50de1742a7ed0149e5a92e9d953b04cb66ad0ac4c24e1412a10b1c6737cbdc2eb51d391b568ee96f014abe9d50b34b3f2686d91c113daf0917ae24bdc3557e16541564fb02903c8402dda7aee385dce8a5c60adc923f154333564d31a7276637e15c93420087f5b5e753220cf197054fd087865a06be5486070a5b3c9583a389922973dc75c43c82705bf092b75cb07101ceb96df21368e5f629002062537f1845c071ec230f9aa044273508c0714005b604f836065a163d52bcb914d4c612bf35a52863b5940bb5223071b8d5114c41b113aab9b445bb42331b4888011c4b1a82d8c57d6499ba851630e632965a6bb4701a45351761db36842e523607e4044cd3e2d691b5f09e8d5736c19b323ab468a068f9393399072a01a832a3f0daeee3a1d9b827c2e7b9588523eb246235d7b245f5ab3bb4d5daaa40cd4495707f5332916ecb795078011a47427ed736bd6965066cedd476d4c1b5f7ac07b094a49530c11a2da8e28cd31d60d7f17bb399c784060d6c49f1f1532b90ef51ba061f92c8b2ca9aa615566f677412923b92300000000000000000c0000007d3bcb2c0db11811a3b1194da0bc3c7e56c6797376a0b25020e9e71ed1e9a8287209b13258a15a6ce70077660a976855124e6f3525d96a13bfcf2a60049bbb109cea0e42e739ac5e6252140d01db813a0b348c1a8d4e8749d7f558489b1b4d72ec69cc430f08d84cde254f20ee67fe7d91bf093e288d251fb1fb92004157984a7dc9ca277fd40c6f1308a061de94ce680473b276f8a16e43b14ca7260afba97c22a6e1544b8f88124baaa55940e86a155c171b786453461f3c22be466b35575264ce3e3184de236ec66038739cdf882ebbff436a8581b837bb70dc005475494f60194f2840a4c014f4e3403b2201411a03468c06cb538c32aad8552168f91d2d00000000000000000c00000034137a011962bd4d0d23f244aaabdf5237411033df32c947a4e8c32d322dc20194e4dd4cb479270c938e710f1c05e06d83edb43428f4ae52b09c4e496860501893f7442018c8875d863948698fb3185ab318c62cd76d8c1030b9a538ab954b4186faa5673854a902b7fb493fb3cf434f6b59da24dfa11156bd35660fb678380300000000000000000c0000003a3388785ba6d33810d8c6606dfa685c9b4d243d4030f16192732c71ff7a1e486eb794617ff81b7dd1891b4c91dee6407522d34743c7d344191bc6771f46095600000000000000000c000000c7edae2591178150c472f36b4c8ed9311b0b69085d52ca3c8fa1061520de8d09080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000003a92e1cb513645dacb2e37314172a02b6b71b725ccb9a2c730efa611c608d15cf93b15267b1dc5a0842a053e7efa03dd0d4061639d7ab008bb19824e25b5043ca2a5e669987dd324d64825b7501522e996ada4386451e604a983b13e551077a51ee114e3bb77a3bd5e96e6b49ace173aa6c6b0232684e7112645f786bc8cd6c59de547a9e97000b2b539b66f55f3e406f65eb3b3bb52734ce817f70f54b002c8e3af93ad517713e0bc66a738532775ce9196d7023ea196d0fe84e138e8571178a58450456c66847fbacfc70978b795e11adbc4dbaeb70046215e35ff021fd367453784df5cd560bc2200c4c6a3e184acfb7140dcdd1be057a484410dec39c57f4c80653d2c57f29694f514c56862f674dcfe77934ddc764b3a4ce1c7d391623940594438d1240377346011e1cccce21fd80423ef7185762ac6c0d57d16900405b85a72b8951981ace6ca538176b740ee91e5c78f6dc24026c4ca00bb7c05903b05fcb120f61a3339ca21b4319abe41e9c5d2a54e7cd8b4d29f45c4f57f6d20cd61fa25717910456de9fbc2f147227183033467d5b25e327c539311eef898d1ba0f3197e0f703a2b69028b04a9dd1c648f42d97765b3ea62539aae4bab2e3e0bdcb5731660988d656aac710e339e2770b2cca34e702ea95f3379686df617ef396e4e1e4d4141644ef39b7c409610ed2ace6d7d4b117e15166f3a6e0c77cfb57708000000000000000c0000007556f957c238406da88e050932b22373875c595c8f92bb23dad21225341c0508527d66113d945247ae304a1940ca712a0445c737eff88524961501368a7ef9372108df783af9b62db00bb3385898ff439ec4140a5a5e911ad36c905588bc37030511715f27ca10391d5f914a05691f3da2c6583a103e283c1b6295380994646fd8783340858e2d7e14273c49fcf52f51ef0d345fd6936e2273e78904951d0a14e2617f341e406e0530e11b3ecd4608258bc17b3972179d782a1a0b748019f445745f35273164ad79c0e884373222cd39ba6cff0d39341b791eef4716717f614c86cdd92087f9e726f64cd25d142f754158fd1e7534cee10df6220c222171452204000000000000000c0000008aab3c03f8fb9f238a818d08c07a7d43480ccb3d53eee32a94315b5725312137fe2ad169eaf0710efded784926779a718da3c038a19aac2d8473913943621a5c2222a17e47ff1b702b0a8c46f9ab5c395c81026de975182f9606d309a888064f9bc44b6b716dc91544066e3dc17fb2329fbf026e77ff1b08ff1f292ee8c73b1f02000000000000000c00000059289e50888049770beed3016333f875f7840333b6e2025723401014cb03196b0e9a600ea735f449c5211c6fe264bb3bed0bc95d71c26b3695269d623c0dac4101000000000000000c000000bf1e94604eecf04673116e361923e3112240192c6e5bd773bbef0761bdd21726" + "attestation_public": "eb3a4219238a832b42395107025de92b78534b615f717b2e657b1615d53eef16e00ff86909c67d60a1b57f3c938fb27369973a09", + "attestation_secret": "3e89fe1b08ee282e9ba6bc6d5b952f1fd1a51c430de7623e7817d14f053e30dce00ff86909c67d60a1b57f3c938fb27369973a0900000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000003b62bc3c44d3b529aadb185c8ae68c78fe6c164150d1070182f19e7329c5ab7437dd6f57788adb2373bee528cb97ad7da3c08355e978806c40aafb4a1fc9d16f518bdf2821744f45c87d854061ec57744f06c8384b627335dc893e21b162a15d0009cc521dc63e5f9ad9d0455eb63118e7e46012bda64b577c87d66df53d34585755810dddf2b7101698c6174b85192f6099040777b26752420d9a7ba125b20569934844e9be00421873260228fda04adb06146204df080506de8f35a784e4121d7f0d6ed95bc43ade181877a10ab17df3617e7520764d13007af627586c0e28007294349f2a566ce50cd3466f4a9126434cae67cbe909769d18413b1d59392100000000000000000c0000006a00171f26966b134c67da4dcef2a83ddb24e736b4a3ba4e40aeff18a48778286796b0748f4f066154ffe24a10a8847df0b05e3e59b4753350614b45c37bb769ecb46674c00c8a350684eb0db95a074a59a13d2c1985c9227efa802b5b475908789e160f2b1d9159737ccb3742d3b96f51dff4645548fa7364b8cf4c9034452f00000000000000000c000000859f4c6110e3e71bb5251b774c20c5762976d5728a58964d8ecb634fc951cc6d181b037684afbb664e28d22efc690077c907261893044d6a98f93e5b5227f33400000000000000000c0000008eda0458411af70a80fd4b1e27649843aae7ad79f7177b1b9ab3c6199d8f0602b475f220da25b60c71f3f32171693e6015692f2cf674d16a30ff777d0977843700000000000000000c000000eb3a4219238a832b42395107025de92b78534b615f717b2e657b1615d53eef161bd4a877d7933b08bfed6d3bce7e6b4d9d7eb05a0430cf5d3a491007625f9523080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000001ba9fe351e5b11564b900e6ca9c6005f38a1917c056de82078b42e13e168f02668534735da72b73b24923f132ed6ad0264787c270ce82f4fedafd911664d1539a5ddee0cf8d5a57c61d964490ec2c351f48d9d55cc43415e32b0120e663bea64a15acc2159a0135b6433ae511b9f8b2fb6080b525315f169df8a897a30fe576efa85a16f2a1f14579743e6418e12fd5512189f3a8b513c5058beac58b02db402cf5a264e4ab09c789d7b457536265501b64b8c46905e8c6f9df35963870f774dc8e773660a44630f52a5dc33b5835e58a7a2df040221215ebe00590cb7fa0864c72b3a2a2f18756e9d29cc4f4431821e74fb3a322d734c76d0db2f320cfd0141bd5af87c01f34253fa5cde68a2f3d73501c83126cb38e04cb99ce661ff67444b3adde020a5b7975bf301202dcab9672576829516faa53e3903dd1028a093d102811f366fc3b3ab57b793013bb4f01237d7121105fe269d4ed483766a3127f674790a9107a2c96242e85b3e231a41177250fd14172422265359522a48e972e819fb25f8178c99e449cba982317080215521315d6d0e9d245e37ecf067858eb816a92c2250be35c07e29f7b464c438037444bf68327ed15372774d8f63b44a50696c9c0d39a0deee5f97e45d3dbd664e3ab0a6b2313c9b61200662195ca463a652040a3b50bed97a781039184410e8fe13c39a1a2f1e595e1aa2272b6d0808ca0d00000000000000000c000000a997b56dd7922d2dc8e65e3391f43d7a05a77e004c140a68fe6c724eeff4585b7b48b2711019c8291a07d82fd1a7954d1b91ae1109686d3163762d76de578f08739fdf70a2debe3f1f9422647d1c2e3ab214c626bcabe53784a6ec54f9789267afdd295bd2f841702b840b1de07c1a123fb9112e2263570718eabe2368d34207a7ea8f044e91ba38cda6216596c3490905b78266c0c3982ce6dc9c2e9847d56f344f504b26d9e64111111e728772eb280bdc746a33935335759c421a5ddcd475bd73f34d27d2a928343bee0b3b0b4408ff31117a34da004e392bae54ebd24b3ff264e1716be6e1011d842c18da7a04256a3f43362efbcd0279e573172d40e45a00000000000000000c000000b8e8ec5e71208a1c884413248b572c459d365b3104db81046e426503cdb4056a9829f3571401d96ff1bbd410de9fd86f07d4eb43ec519226f4a2030768d77269bd38e91b8f38ea72b7f99b10483e507e45564b77e869455536b5a370cd3beb0f304d2b1ee5709017a136ff27b2ee7901d0cd9b129482ba0487aeff77cb87fc7000000000000000000c000000664fda0d06e0b401739892482cfe816468971863ccd2372882df472da97e374abfe743120e99993efce27f06f8af9841775fc15b3e4f210356bfa422642b382a00000000000000000c0000003b62bc3c44d3b529aadb185c8ae68c78fe6c164150d1070182f19e7329c5ab74080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000005044e16bb2cc22562329da00054c8142ed681541fe30a76b4f274a0514875d2c2e601342703bed3133756704c85e12416cb9c64696f17c531a650c3a3da9c50fc7b6416c5e9a7b4405275e3028db2e4dd560776d227eb871fb244a228068ad517eb117361ec1cc00d537fc0b1828116423990f40eefc2b11a6c49a520259d830af2d527c4267805bbdd74f6522eea24af02f3179dc9f467d16b0883523d61222cbcec06bfe7a8f77c125496a4617e966c11f5720091e0b685b3dc84ba6d4fb57369e79386978df0e1f89c0577401b03ae28cf0026d4310174486e324887c312dd5d4995f7d14fb025905644c18837c5e12f73254cc5865398fac313800f0a62f07d37a4466b11c12f9a58c4965c2b24f2447d33bda16b92273d0286d73cd5746f7fe0e340873ea61f75150769040081d32cfdf4502af7a112a6dcc225b7ff516d2556a5b4dbc9d302daad411dbead04b98e9e97c14d25f05fdc58c1c4b76e44805a9ed0a7fd59a4e4df30e308b4c1147ccbd806ef4fbd674d0b6b4683037b82cfb47171c1aa0626fd45704543dc7656b3adc91394a3e0170a94a07759befa04efc4e0426476c6b24faa0db75de0bfc370712e549b5f0222e7efb8051c4f1232c778182587b0ab909c48a8c38f182521098a12411c4f6d234851fe95251c97265f60c946c07ddf33ff2b57d754f242772e2f3086b0de8ba4251a4a200ed79090708000000000000000c00000090645928d0d43665215cc67cf0018b66dfa15f2f1e7a8c2abfb065745b11b526db568238c6cde617443e82771ea3715994235013f8654b573c3192049dc77b2d75cad00354bfa5428ecc976989b1707b3a986d7826b1b426756341443626ba50da87024c78fe23354989944ea7600b092261e97017cd0e37c2c67a0f127fce720db35c700ea1c11f81dd305aaba5b1396e06291d5f019950bef8280ac4149d7e8f71c235a3cd0217c5b1e004257a1e7e22502c3bd233c439629fee4389f3601124a1bc2c1f19b05c2d2c2e65c10e934064c8c575256eec25e6d6df11b32fa3205c2db0084fb75c394726f9225085c02a31f8962357b65137c867c9212f52227c04000000000000000c00000034af166c1655e34a56138b2931a15339572a306f0506b31b65a75711ea763b2a951ed222af7a9722eb717d257e813778590da10d8ea7e124f3d93a1a172bae167f24382a5c9e30115c6b6479eaf77c34db4edc018b31870def3cb527809c884db8782b3d9ade631dc2386f2e232c637924ca972df36e5b3a0f8bf51d7ffa950d02000000000000000c000000589c522252e0596f5944a96a6b7e5c179ff7030af0b68c18cc30cf1f62da9f1ba0c5612d8e6f4e2f768cf01775228e1274e19225adadfa6ec38cad52e6818f0601000000000000000c00000037dd6f57788adb2373bee528cb97ad7da3c08355e978806c40aafb4a1fc9d16f", + "proposal_public": "b9dacc060827fa328d44b65461fc74305f6586664e83f8436f435754df6bd5060c570e5985ca6b779213f717bb57742757a9cb75", + "proposal_secret": "3c74502ba8379ed994a89f98d78f9122d19c28ccc16f0d7df3b4ec5da1d4c5e60c570e5985ca6b779213f717bb57742757a9cb7500000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000002555cd177b2bdb50c825be76df7a1155a7b5011a1a8ecf47e95b3f7d449b813a9d4afd2e1cbbd73faa8e785d1c44391485dded453618745611c97d6d37261750a157770735ae851aa367e947895691478f85127ef7a6b658391cc0596e8df65b71903b7062e2c01813183c59e185a35b205ea575d1cf5f593ac3a35dadef4d2b44a7075a27e9d5323b77f7789bc3352cf426a93a0be73243e611a653798971457dbdbc232862a119dd62bf4dd6d2ff5b94ee7d23d38a7b58a4cee876a5764c2194f6fd5dedd66e6fa2c237469c9da71e8bfd707251ae564835dbce6e4686382324b8bb31fc816b155f3ae35ed6728c68ab6efb12c581ff0bb8b53348f847df7400000000000000000c0000005e175a1ceec50c3d4af95a0ed0a53923e9425933504db953bb7c526d04d30174c367444654d7935dcc6136156094bc0d0d26295c9ad6c70545e6a52044712813c72811263c10d51ec3e93c713af8f55d3c3a161216f7752696a6fc3bb77880514f6cf55e21e5f80f57b6876aa204f7247d1d0a125cc95f7efeeb611b1b83710600000000000000000c0000006e36bb51d7724c632307f227c5a9462ccfb91f35d8cebc09b5c52027a6d059601b69902523bf417abc67bc450e24376b01b568007a453f3a23dc0c25e025a55500000000000000000c00000047b0c40072cd1b6f8238e547814d6400ab6c900779f3a01fd005f95f36c86067776fbe76d00e396362509b6b9839a275a5ba4418a939f20c1938c847dc44bd4b00000000000000000c000000b9dacc060827fa328d44b65461fc74305f6586664e83f8436f435754df6bd5068da8450678e64a46e16f394d2085770be8299042e2303971ffbeaa7483f3662e080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000aa23da0d39e7d04dc54f5875ece29f2b89510a25cb7cc839f412551bfefee21a0684a119ca33035e7ac5a8647cc570288596132d488177211887b87507c54350e800851a24d8652ad28fe77170a98074784df477418cf3200363d61dea4c3747c5e5e52f62e4dc6009d66f0cbe63c03cc8c4e46535b23925efa8f754412ea6133796c9032cf86d388ab48c29147e753d38570e7052536776c1439262c63d043b8f9ea941f3beb90c7009814bd4284627b1c2ec355e09cf4a4655794a4c42b82c85d9a24b5319b16209b6467b4a9773798d86593b7b566229a5beff5dcb2cff262bbe2513359b8648d0e4f95fa19a23012efd1459e5ea9a500c191e156907134dda1b2968657fce74e396c307cf1a6454e5c5e911e4fef2138eea0622cabc3a4ee7073e43914d166446f42848c27ad615e7b06b79fe1e4c0d311bb639059c04293aa29024538e6178bc66b21ec9a8d679af056e0febdc686ef658f53d54b31d6f46092a65ad94584d75024b7c01f6842d4cbd2d65183d88650bb9c206d0f5e86fdbab04523011497b86220c1e259ac07c8aec0573d0292726b2fb7f0400f7ee5de8713e7592d527426c73183dd749e720615129181dee8e4b4313ca4043def5213783c0329b59cf63296bc14865e6fa7e26057c24e42a117c3add4909f45a21021753ec0bcd50c2281b46b05cff4b7e30245d374dd6bf890ce899295d6b76954f00000000000000000c000000a3cae5720a6bc51af2c72e12026571503784370e5c4f31435f3a1163aa18ce18b0980600b2f1570ebc257c3f37fc4e6b38f53637de7c8647eafdf90b8c85eb00bcc095574f718f3a246e7133f3666452d0d1f452691ba90b52cd17421ab50f5459b7a26256cd3c760aa7b715eca9e33195888e6a48822322ac78500dfa17f553f194a026d644d313b8e87c3afbfede1fb0606e5e0c88cb02e2426e1d5f3f326ce65f1f7209963c10698f7f525645fa3bf649760d5149e338e8074d2dfd457c397725f4172378cf32515f56049eeade3fcd17d864ac8338777704970ac1df066e8f30381392180b0fa9758458217d5c76af167a4467ad4275e3f4b3540d40f84d00000000000000000c000000a3bc147b69d1db14773cf66bb6e6d477fc2be94f5591746d4673907ba889217c19900e6d0cc0266de6d3ed68242239055988567697eab84c0a6d134b44c58905c409de6d393f2336442780666e5b1f3c061a0a04df0158545b3e0624db456e789596a015fff2c3135ec0b00cf70c3c63f9bdee5017ef5a208e127f406b86fc3c00000000000000000c00000002aa3431c4301a511d62f81cd0657933c724466cc8a153212f958a57abd79d11bd764d09ac74354f90d024543b1c015d147500363442f61d5ea7aa1e3357744b00000000000000000c0000002555cd177b2bdb50c825be76df7a1155a7b5011a1a8ecf47e95b3f7d449b813a080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000080343b081e63db5695e4be1941d17377a6976f54611ee6518ab97557497d5a77ba10a92ec0cbd8237975151b01e33d132fcff7768f485510b343381071dabb6a697af615e6ca0056b9198b5e20d71e5d7dd85d20587bad566266494403e3473de4e17f31fcd561765b660d0b9e60c000b8078b65e3b81a7cf8e53423aa7c76205beb2460bf8f046e0e7a7d7161faa765baad846283a27c79c4df875513b62b004ab67472aeba2c797f83315c0461875467821771feeed9075775683cacc22a4a3f36b73ad572053fc8545a1996ed75599b40b66e16ef950136310474575da61381fba54ec62872592825cc5614e9c00ee672e755ffbae332ceadf620f302c737d124517e5bff631b0b702f6eb9eb3e40e9134f287b990e3c7ccdbf10ff105031feee5b37610eae1845121161645fbb5aa5ea6867a2ab3a3b3e4d50349a98db3aa666b81c7dd1433fb30ab14441cd823c3ce0521ce32e29785d44377c8e12a969daf55b602c1ed46d77f1ab337cc86f1472afed2b76d8144c098aec2c94806a40bb82040648e5f866308bfd0d2953de367c717761510fcf42c996dc12489a401ddf546173b91c9c298edd3b290f65a671c388033c50bbe265970a8b6aac2a2b1fc9dc08795f7cd4602adeb137a07940371e541c5c765df57ab8bb3c22be274b3473e4fc774c05026a3d7fc87e50a81c72263c482168901a19de17ad36c8f7212808000000000000000c000000e24ac93b1b6bfa28570d214719d6803ff7cd461ee49ed01ff9c7f070a957b72993176f6ffe7e5c1838ec8346e39b6271d989cd0b1962ee0847fb927774789b7ec571975a41769737ecebee58446a3844705f9403dcfe673f22070273025a7d576c147e21a2a3ac5fa7d41b7dfed83b658c6680180322aa679298a55f172bf96a1b3c14169d31713683b1b76d8194fc31f67fa27c270d980b463a1b3b2c02a415785c8a351a2f7d14cd728c389818530e6be55344f1924b667f9dde7279faaa68f3ebb25c10fb177a18a27e0c6d98fc5ba959881d8d06e1127a2267091d16192ef79e3a260b324310c4440644619dcf4f3b4f2d29c988b7015e20cd3e310c005504000000000000000c00000010c0aa601250301b46fb2c40c268381518d14f0b0d38be1433f85236849db8434e8ea4284a3ce6565df6cf3320b0027d70e68420019ffd02c7222b0928ca625686d62f4f18af2c0d4cf39a070c91db6e2c147c1360db5603384d8e237cce2132042ee749177f54166cde5f67626c30324f4a9833f0ff9e77219b1707e8f3af0a02000000000000000c000000171b127a491c621f9cb9206e4529a6677b820203b91aab5619783d63c7779a721eb680258acd432d2b55d17a17965505923e374eacf531723c785366490f655f01000000000000000c0000009d4afd2e1cbbd73faa8e785d1c44391485dded453618745611c97d6d37261750" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json index 0fbed6a7..ac195978 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json @@ -1,6 +1,6 @@ { - "attestation_public": "7675f751a6c1821f92daa3513134d055f75b155011f44058b1376919bd623318a5ae8541557404301f3c8d14c15109654f2eab44", - "attestation_secret": "571d11ca22653c8dc50001f47d46990b948021ac520188e8aae65053c085552ba5ae8541557404301f3c8d14c15109654f2eab4400000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000e8a7222c6e9e9124b081695d42f67f031f930f6e7a026710753ae43e386efa6cf0082c63e4cec17002080b6738d9bb67a911b37bc859ea15206f9e7c3d56496a00000000000000000c0000001ea9b42904ab07392439d33c8469260ea930bb67a74e507b56bf702da2ca557b84a3065968d2d44b222bcd46651e24659438e90664164b2438614d3fdcca946b00000000000000000c0000006c149d385712ec3ed0aaeb37b80a612d9e96ce2dc1553e0c0611610422d4d75f4296e177cc9d6075e2a1310df786900e2a763a75eb5e7e25d276935e2aa4677800000000000000000c00000090a54f77060827492115f114ea71730276bc037366404a0a43143477b826030f25bd4e6b871b117d2daef6128318a229a2be53275ee383076b30d20283a39b1a00000000000000000c0000007675f751a6c1821f92daa3513134d055f75b155011f44058b1376919bd623318b6485a640665ce1c48e6a147944a8d10c36c2a35bc3b9d5508a38b186fb7b564080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000001f4aad20f035c230f53cd877a89b3637601c3d23ea23593a435af42707f21526cd54f62d3b9b6c2da54b89382337f4630ee56a5d7eb88a7e81e00976c1c6ec760dc03703702f2665c87d8b70ed38f1396422b225101cbb74f47d18105cff2043dfc08273d02dca2a3e1b9323f5cff47052cd7c6e1fc9802465588557ed7afe06f4b4a55fba77db3879a89d6562eace0260dfd73e6c1cc37a3b52721f490de34dee4527503767151861c19a14d3640728753fb6412f3144582e056429755cca6f4f25572ac00e4045cb41477de9a02e194ab6ec5f039b0c17a5805b4b0bb4b713a5b0181f9ec8362eb951e4309374211655597450302cbe225ff9362d392b474996787f52c4d42571737f7a776cf18331f87bce54570e381eed5579212459ae356058ef54c2cf0a50b3324a3d6575694f61d96618628b432805e5f4101e80bd17c06d0f0f6a7f7b68a0700e78cb4e323cb7ba9d7d7732964300656511d2a82e4718db833695746e7519866e3caa83002bfecfcc72b928256b936395027a0a1a3faa3f7a25600b0d66dd48c331722c565c2a175222ddb8c87538b560426595ae68005acb3bcc6b9b033dda3f421e4bfc432b26817cb0150c55d1c4950dde19fc60ea59222c80c89310f4815a2889e28306ba6b02380a0bfa27c3398209637f7612263bcd5debf8731449855c52469c103dafeb83171616db29266a790800306b6b00000000000000000c000000cac8690394c20f07d8bf4f74fe48eb04c77813495c1ce631d3b3dd3e87de5769d990116a461f0676d932e93116867f133f575075e123e7061562fc6804a0ca5a73b50222f65c5c392a2fd27595da2d401429c265adb01b67bf5dee5066e083586944df4a3ea92f20d86cbb48f3e4890cd1ccdd72cdcc42120a950d76b8148e729ff32018ef6cc57a980fea33a864f475297be43a958e5e6bab59a95ffd1a5663a5b22b511a97013a352ffb03e574981f4dec032cbef6b05a59b6493ac812f329aedfc9734b635a49f5ae165339f872042b13ca022239211925931711c0b507068875b3333614c02319411804af59781afc53f6501cf5af36d632df6dc9b8f70d00000000000000000c0000003b80c955f285a77e5beaa8394768934fc0a0b10cd6face4db132077e80ff9214586de02ef8406a498493956f2db964617231fb02d470a102bac14d1a62909c4d6eada558a994901a76e5944a18328861774f6403e9f9be624e2f3e7350ae641ee4232606aae99538a326385b79d016056c2ac11fc1ea7968fa707912ec372d0200000000000000000c00000024d8093be88f27559f5cc624b5537251931b981f50958137005bb919d23a25669d03fb005503b229f497b11cf8f395712b90fd4b7e920c0cda54f52dc1138c6f00000000000000000c000000e8a7222c6e9e9124b081695d42f67f031f930f6e7a026710753ae43e386efa6c080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000088916006a4bb1541a982ad0610270b45ab39a3053172f85493cbf5174725ee4efacac12cb7930d240fefd827fd5f9c32df6ae91ad7bda0473941896067c65a42cf8378082c59e559a487275adae7000f18e135728cf0737cb922035516770243bfc4ba44b17a4a4c0337ba6097cba5431858415a7961504f1633234929ce98435c62b27176294e552d315a172b6a96577ae8084bb7323067b586ed4264d4f203dc33be69c75fcb4de69c260fe9dd101041a88f737dfe0122c91a83371355551bd5059231ce3d656367df2a2001f9184aa483ea2dd8a80d63d4089e3184c729444ebb2b0175cb293da3ac5d2879ccb870e4cebc6a19f0944848fb73766e59e5579e41d14fb361744fd4dfd0401f30bb6d109d6a56102ce7057f95a43092d760501b1d516bbbacf1314c4e251b49c06a62f8e0e81a00cf882197a6d63ffb621b19c1f278463f26b530ab0f3671dce22038049eb75b37f0790be71f173327a7be5e6479123d13335a0642ccde66e3a22538609f172a7be16c1c25cd63397d605320229caa1b014b104311db654e6c100a20e006691884fb7e648ec5191d73fcc903f6a2a6313474b304f73c7e76ff2c5a7ccd20d644773bb11a1fffbf691d4644774e266b396ba34c11e9ec1610327b2c4726cccd4ca3a4d3360722c16c590bf7108f2f503441466a251998d25f639f3042d856795ac709f3169000c31a6482981308000000000000000c00000005ac337c6fdbd631b1bc574e0828d11729e95f3201f2c92cca5a1a3d264834324ed4474a1a640d4df4639d5bc622e05edd6ab56b5940f1530711256485951b26f61add62f167154fd0210c12a282212d1b2d976f228bb0490f9acc1a7da8c80dc75a6a23fab1a306b482640e628e3e0304edf238c19cb01e050f594d22d2ac1d64109f1c75739e078ca07459c07f0d4c646a7a247473c82376884559bab9a81dc354b7208961e1629c8af50ea3f4ea58e06eef5829fa8f246e5aa660e6da6267a1e77e1a9cba99511e0c6715fc61733bea2103400256ad2d11516523f3d2a03a1ec7646a60ce5a6d980a253c51e1f73a9ab6404ea7af9935a09720192915f86304000000000000000c000000bf9b692826a55f63ed48da691bbb256a80dacf580fe9be1ba357af24edec0244b9d99c0f4f6b9d181427524bb4cefe71d057357dcb677d54cf9ec17b2c110c48e478cd61e3cda02e99ae1a67cc366b3e13ec0234eca591171542e01ba1acb172f3062d1956a206519584b305706c662337943735124c661d5e93f94bd2d2832202000000000000000c000000d63dc0546d31a451aba78321de32dc08713d0c0861e4ae23272ba32d09023e507f36824e99e1f45224474b5e2b0526024ede8135c2fa087635eca55ad2a2350f01000000000000000c000000f0082c63e4cec17002080b6738d9bb67a911b37bc859ea15206f9e7c3d56496a", - "proposal_public": "3a0c56152f245f3c68162e5f21e42752a85c7545b8f6f133216d467a96ad276c2046f80d6e13a14704e50c1e7947c82651407b0d", - "proposal_secret": "ca576dfb2923da37f8d5e2b752b9f54623ae16a19dfd30e652eb6d8d7c22c9982046f80d6e13a14704e50c1e7947c82651407b0d00000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000a4025e4762f1050017acd46bac9a204a86c4d33bc7c2365ba5ef166c43eac668515d162f0e9f55129e5cd40008f16f631e35c36227fa3300610071214089181200000000000000000c00000004a0dd3e23fb2638554f325f8fd9ba68ac2f862c95de445802bcd1708b61da4eaca09f1cce83f737bdb4a33ebfd92e73ece65260f81bcf42411e756b119d525a00000000000000000c0000001e68053faafc627a1ee0d75c2911d731a12e902bd63685210ebe272637e74467b523273636b55d196fbba259cd5fde3f4e7b4d00880c580495dbdf1fccaa587800000000000000000c000000a7a47658adc21743dc45594b8ede315ef2f5934dacbe0c30950183584f672368d6abf20f48a6da05822665595ae8773953e55f3c0323e62dd52da512d8c4095f00000000000000000c0000003a0c56152f245f3c68162e5f21e42752a85c7545b8f6f133216d467a96ad276cb29a37257896c5348f3a72728e0d3f392a45d23b6863487113bdac721ab2ba5e080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000008de4510f51994e73df85260732e0d7275859954795bcaf0779c103393e959737218def2b452c521a96bb854a9527e6123e40951de3ff564b39417c0a6eb06f78158ae91e5628007c82bc3f7c6488c9606b05da0565fbb30d5debb86a605a2502531b2e63a97bf05d8ca8cf05cd54065901476a7b7070bd5564300066a653e165e34e4860e75d9d565ad06242abb0bb55d111e069fd52d11c8139cf1cd3c96c30c98df46537b681228bab153f90c38c1273f351376fde61709219a146f38e0f03640fbf1d2405331406bc920f9d7f4a4b85f77d45411bbe0d2eb05144760cac42a3a4d54fbe825b4801811c66ae5e8e3910357d23ad031969e7cb3640b3aabb6590044627da442e4be3c12d445c7313530354cc7468ea217d39d5fe3bba4c0710c888a276c133716ae8a03468f9d0a82496148606e27926451eaa816d1c322e5207bc736c45c4261f06f470693042565307ea8555c24c620ea125ad61d873aa1aeceeab20ed240c664a4008262cf7ef4afb4de70f8671b94a723ed3377fc9751dc9d2d305c21bb03a578c77627f932260bd993c607c4634608ad1b0754439be771d30f84cec39b4502451d07d81c2f01a809f024f9aa69b12cbe3505b07e89c25f43db03414d0e62995566851cd80983a9ed4a531984c152a9401444acecb231525e8d04122722f584f938769e27eb67cfd318b233b8f2644e432a0332a70172800000000000000000c000000d83ca20c6cd4161f49ec5a743597d359fbc3646eb2eca8011e1d8c6d8c0de81726b8ff2b43fb7444a7fc1114ac70ec616c73d2145321ef5b16f6d06e2929697adcd5bf40d5fedb2b65796b2b1c2f4517f31ccb76cbede8168c551b0918d2053140e85d1d4c3631331f39961525aa7d7a319937096368a65f5fc2591179909f641bbe226216ccf515c1495523769eed4f303e6c17cfa83075cd3328327ffc325f142e0e76d660ed3dfa231969ae4f4230c4b2c8152f14c3508f6fb56a98a25044890c0a4a65fc1d4fd7007309caf6d047168e8126ca1ee648697ce063ad2fa008e2a5da67df868b33a1c8187795ae7b15cc489976186d5e236c9115739c097a7800000000000000000c0000003beaf159c973550e592def4d9bd47d710b24db7d5310426bd468663b6b090c3ecb1b9a2b557e370cde1f726b51f7b42ac5d8555fa47d0264342a3e51a6d7137bc7bcb74ff29bdf7c4f997470937f7c1be14995390727b845ece0da7a308b68793de5c82e16c780795152a55e9b412d5080d6ce1200e5020c777d7a6b9682906c00000000000000000c000000120d82355574143f696684408881e83f8b6e600673d7a276405d345829d235583c49653a13db011110578c0b80e90212fd320b5549ecf1492e0d7631f7d7673000000000000000000c000000a4025e4762f1050017acd46bac9a204a86c4d33bc7c2365ba5ef166c43eac668080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000005364e202d181f30f5037253ad3b986070b997609c2e37b45317508591d8a3c504398c90e6bd8fa71f846d20230425948ce89966bf5910873e582043fddb20709a78a7b5bf9181677c7b8be12ffb8a96e98ccc01d451a1874b554d826827f9b0b65b24d16368763693d49e8320930df7c2571582a0ed5ee1ef9b0f31d069ff45defa880124b3d556aa23bd01816bbcb1103a67d4b03ed612229aaa27661cb9a4a8f64f43f4d1f2b199d3748713684b325e29ce561a1ceb459bf87386295000e5001fe4a3b8fee5e126a60cd3745932a487fce6a1bfbfbd411e8abb038f5d99b3ec0f6181ac1a4c275b5c00203548b0b47f291794cdf4ea06647b21956b6128148e2c16174a5bb4c08c26d6421fbc8a63c362a1f32d5e63a76589b8f7af790eb54a1bda33fa3068866305b231fd8ca944139a5ef0d3c99237c073d861edb2f7b681fddd110ed112629f24d4e1cfd512c37e8e4f35e3cb77d12a2a3923c7b38cd78d447c502b9aa76233255a41201bb3727e6cf900a306083005283c725bdd76d67c7daf340e19f6f63d534b042e8a4196d7e0a842c760696536f220b022678de2da602785a051e6911e052bb44d8287b22db307e43c9dacd7ad195ed70b4df1439991a7c0fec780c4273d06612e1d1f75b7eb9e164a6c01341810c1e751a468109f8627c5e8dbffd0b8c9d2c2bd1e161601ba9a54f9fa6105b0ffafa291550353e08000000000000000c0000004d0535333b39171902eb421f7ec02d2d905f2d16b950fb48addcc61f08b8a3199974796c4a4d085e077f985e6baa6d6d10b4b020a78f3c2068caf04b2c36ce5fb8ea6557c6f4f428f9a4bd25c92e56257ba2f23717463f686827d3020577a56a94b0413b82751c189b5c202d0ba1ac50552df0114fd77b05f54ecf4aa7363d0f19492f2af0c1115ce9f49a07caa1221c703bb74d92f42d2b5554303f29541404850b055449f22c72550b23748036ef17d352832b05d01e44cbe91312d29d292f1b67fa7276c8a531c6e015402fb83723bf56445b1729090c1232c97a427f1c4091a7933a1223104ab1e9144b9d7f16140053e264d5546f7a886f9d5bef237c3404000000000000000c000000eefd9771db1c3c0dde638d3978f98a413c1aa5028c3e7c1b01421d65428ee0136b26d10cb35b430a6b32fb4e5ed80608208f7e6777caac49d66b200b39fc4352337d1552bce6a24e4e26a860b8c5d0486fdb8b0b406eda1883ba4b4e08fe0b161d4ab52088fb7e67747abf20b2c8e776a02171558b597e0e6a0494069207eb2b02000000000000000c0000009222236654337a2c1b2bf7449f57c1700736dd60b51f7a7befb73a15db891306dc30d6042a79d0117029187e4f422c2c635686208d05b138d835d1536e3e347401000000000000000c000000515d162f0e9f55129e5cd40008f16f631e35c36227fa33006100712140891812" + "attestation_public": "b943ea3a05d88c48bb793031dd29a90b922ea654b2a7ed55ea5956396cb951321a24987c07bee00ff4c56823809bac214472884e", + "attestation_secret": "5e979ae0fdb5a04ff009128b8f7b498191b74e67f281503757e09d09fe4d213e1a24987c07bee00ff4c56823809bac214472884e00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000150d7143a59be521baf8216b1cf72a42583a2b3c3650867d4ef85426637d38392d5b290f02db294cd6fd7d52aa22944a1ec5635565454c5ba203a860a3759e512e05541bc8451d1829d0ff1e26d47b58970c4724cb5ca7320b7bf33bf97b4e7b6ef0c02122af9214b59aef20a7c7e71f6f6f6d6a42e2985c5e854249a47c9f7ed3a10935ba7d352def8dc8680cf6723e761c32111a2368793adc611a8c635221f5c9227be9b4a3121b8e5e267ca358799720023f845373183e294561b19acc32e4367763fb36a32e45605159550dd95b3ef8142cc9232e572ae812638def552eab1ef950eade867da2552218753e1770e2a32b563c9c1079bf6c0332d0e00f4200000000000000000c0000004f0f760a23e238495fd56f2581c40a4a6704f855df93c15c783a52418dbb802296651216303db87651709421a6beb1459dacae3b81d17209ac31b341c3e3c106ac669f55c0498741ad217272e281483a248af36a31b50e2f2b830d716da0097447769f67560c7a5e671bf61469aca20dba667552bc6f600bb3f6c804acbecb6a00000000000000000c000000d97a1c2d61d9d92bcde4ba0cfdf38f6c0ff22d4b0565e2753118774e8e0013660b3298778cf6380bed7147228bdf9b64785bb93cebdb84263e17164412f5802300000000000000000c000000b1daa15a26306f307485a40cd54de70299a6531822518768732e2a55832914318a81490b8c32c541500bc511100e0422290bbb44bba7ae5b034c14532727ce6a00000000000000000c000000b943ea3a05d88c48bb793031dd29a90b922ea654b2a7ed55ea5956396cb951328d8a462784921617b4d5635279d4ae5d526fc85ade29d63c3e5467579fe58f68080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000000ac39a1d7443325e54b96715c5d6de79102bab2ecfa6af3b9ade2b3d9f3d1b4a9333dc2595119818822499567a8fd831b56e007d1d324b306bfc27272c0e213f74b0397c611fa465b8e8fd1b4ad5c222ccfaa2205dd99754dfb7f24047924973d37f531b8f6cbc2198c5826ea189cb6e9ce5f954cdcd901444fa987e915e7011b23de50bfbe2c652965ec74a82d1485557711b22dba63c4980ff66447f204e29fd645a7b854bcf7ae277025aa901c22a466ba8029b213d223654ed3d5a530f04bf5356601c679a5ac63b6f7cdc008804c734f10587c3042085a0bd00d2b1645539adcb7e4327f56eaf76977dedbad26c57d7a24f94688655a982c70c05c80e7bb4260603b7727b04256af770741a561c5877d71119ac0d13d5c02c5a3830847644de1407d7d1af6191a1670d0317ad5c0bfbd239670b27309e4d870dbcc66b6d8954f670c9f2e35be731110132ba796fe5fca23ca8fb7861cae6465135b59871f86b564514fd8838b0f6794f1089f55c9903a24f54ede3429d2de273f8ff601c44d3b408d5d7c7068ebed449d83441762b50c55884722f6e1db37c3a5154213ea2dacf5603c7d160e35c265785e6eb6cdd62df04b57b216d1432d34c654aea79f2f0b2091404dc18fe6411773ffa0663d36be47006385c7d1bb6964c45fb271b5a143d4de68f32145a59865ef4fe293782399e2bc69c207e1d381b1f091efe3d00000000000000000c0000005a38f968a475f22e0a664857f0ee144e9b052a2b001c9409780ecc71e42e0331a6269f18e4a2ea317c55126015797f135361ed75d600382560fea532a1ca876c9196565d20bbdb6fcdefc81b4615c956a3a2130a44e3635e57e75600b797026b05980a397efca06359553776100450645c8dfb2e2e958433d1555641694dc94550be3329fce3667d6fbfa534d472540c5187b56614cc43071857c445cde652014dda970e7e0f30172d1b25481de0d61260fac85e487c7b1615614e4667eae11245b13519a9c3cd3bbc74a52e599a286aca5dc674516af96f99fa977bbc09853abf9f2534ef462c2c00646875f63eea0bbcc1ed5a2a021316564ddd1fb828386e00000000000000000c0000008df8400940cc2c468adb995d25d0c76e7a23b73678088a126e4bcd23d565933df25dd851d3c2da4691852428014cb203af270459ea55bf4a57766826eb9f750129b8b0218ee0fc22234fe43e0137db332d46ca683bdbb829bf04d451da60323a5c46c2658c17b1557e33075b46bb111f5726c20fea8910775d59fa1275a5225500000000000000000c00000077e40e45994d6c325fa7d02bf8b7a001eff7f327f538fb254886f0284e914a1396fa514e2f3f1f6f94e1a654a36f1924ad0ef36d712f5c00ac851d5ae426334000000000000000000c000000150d7143a59be521baf8216b1cf72a42583a2b3c3650867d4ef85426637d3839080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000db95044218a09d6729375023509293319546217ded4e091f06196057dcecbf345a9a10530365922b1c52ee59ce81863b43985e5aa3872e3674106b3ca0e2004b867f201ba645c341e7d7882cf415b42956deaf3c14d9580b8675d322a375f5477234e43684424c235860dc2cebc4e762f15f794278c0c82b2eccea2ac264766f237cf91bd0b962059b285001cf1c336742cd9e2970f91d721f915b1f3a372d2cfb8aa673ef3e6d1a3cea510bdb2f7750f496cd08008037236e58760aff77db1d9a416561af19572cfe26da2a2566a4321251e93caa1d9e2fd21e8a540499a25591e765617b940a0c542e09550736bd183d5d805be4b1c264e0f69e0e623e7901974a5449b9eeb5066e068c0e66a36e2e58e8732324b6f25d0d1e1c71506b15024e20c77df1bfd14b323c0e1fec2e017cc064de7ba426760871befb6c0cc797538bb5f96ae32e0c0cea17e038a8e84b4148fbe46d8d783f17ff25794737863f72b328ee5ce0d28a4cf93e7b130572b34f5bae397e0baadc7a6392157792cf1c5e33c1764a1aa5a145fa21ca4d20b5c87829d5e71866d2193d00a440792781d34775f6ed2cc4c0821a398535791d55136ac7d6b33033ffcb7267ee577964efe26ee1d17a362097131e84e4c5201ce46e45a5e663310c517320418ad349ab31bc76feb6a15979e15c7355184217ae2e8c34ecb28553fede0d132cb18c711174535d08000000000000000c0000001c70c7401308925cb1336d68a211e2096d996724d32dbc0ca0662a273de0807edd0521797516005762f76e48fde8c5167329575926fb0a45455b3161035c7e2ad9e137058b37ac3b4d54102a43b97155ee8203038944505a938b64570ed0a60155d377279d288b5856655f4f309e0b6f853f5349d718f51800fc9b6c0aaaf8212cc2ea1ba0649344a49b8f71870b93466c1e1015b100ab5a4bf69d6c39ab2c11aeb2aa4d4b9098282a08e3261fd9424173f5a43437c2645f65e02c60ba8a8b4dce7cae14b7c6dc3f2d6052773fda77028402da0815336c4921ccc84f50c9912c535be776998dd64c56a3633a3073117509106e27ce9d56012ab8897738f3181804000000000000000c0000005d9e1e12fe63554009a1c84a3ecc7c3a123700549ed969282e127d02ff3caf22b2dfaf6f4591233c19045f7188b90e341453765090f2d75d6afbe819c7238666ff158861d6bd61791ede99127c0ccf6ba38cba665d4e253fb2d81f0783f13721a7d42d49a721d5108caad93d9858d95329a1d2177d9ecd39ca1c88657057191802000000000000000c0000005333f637e676ea22d97202505d06cf43d2860137c03ca709bc99387e6a32d333fddd5733e2392e4ba99c5f35c45cfa11cce45727a8a0bf6cad237001e6fe3a3d01000000000000000c0000002d5b290f02db294cd6fd7d52aa22944a1ec5635565454c5ba203a860a3759e51", + "proposal_public": "cf02f74f4e96a556ad3c90422cb7e874c88e5d365dedf754178f74110247ec7d39f0df2b9385cb0b0d837278fb64572b1419b05d", + "proposal_secret": "74625e46271f2a9ae9f05a5ad2f830a28e7b347de33482dcfea921742d644a1b39f0df2b9385cb0b0d837278fb64572b1419b05d00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000009913566f58862c1063e7a3332a388938365eca48c18c9b7d33b2b22a6d2bcd11c3cfce39fbd1ae54a71fcb2d96db7b750397fe1ca22dce2df5a3cb08cc80d555b1400f7212c344306e29aa4714d7e1050852f24f3e896241059534122b4f2d5a84d1a0265040c33c10450145f90bbc43724f00219dcfd46d7a4bbf7abba2a05401d44b6a4c89ac67984213268919477a99911b6ec8494758c9b3c34d33c6466c04f8e9751b8a9810f2331f19b100906cbffdc330a0651d0eb72a826888f1317e9eb142787467b02e46b0ca23fa27167cc848731f9ba81107798ee32ebe3bb21b1a40c45f0db3d61da4e7224ae8a1406c8633595ad0023501e68cde19129cec0500000000000000000c000000ae0b455918a0674f54728f5d02bbee0dd2363a74c27b703fd9f8c57c6978d5121855d9550f3e5449d31899731522327b9da0ab54ea0b2d28e71f487ec89cdb09ce42243b0c4c0c6692ec4526da883208593c132e2418ee2ba581930375f1361a8b0f31512b06203fc3fc56458fc7ac1767fe9e27dc33967589202a45b127d57400000000000000000c000000f05d45459b7e7c1e612c070a4e931311c1119f135224b42f75a04810312e9e4d0773ed28368ff61dd5e1c42099dfe72f257974732298150940ad503e5bc7985600000000000000000c00000091cc8d3bdb3622191aabf20970154a073a369449d53557191085ab2f1647d50073896b2ed6305c7c9d7a341c8427f66491a40a50e528bb145f3fe12e9aaf043c00000000000000000c000000cf02f74f4e96a556ad3c90422cb7e874c88e5d365dedf754178f74110247ec7dc0fabc1587be730a06f0121110b78a7a8820165e8c4dae5b3bd0072976ad5e72080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000c8feec547c72ec035123034dd8bc86785872de6b8549ee336a2d8b49f76fab7c1ae1b72732c524244f4ae407c3211a0089ca6b7abb8544291e05955809363008dfac453c5420b125b61dd309b124964937d8ac330932a84ab282902b4250ab09875dd7102331f702f17b1f4d4f7faf5459ea624ce736ec262c63ff4c75bda93861da3078b319ac22e6983755c03c1a055b66f935281c2220c685100c80a72d08af3adf0bbde1fb51f7076a3aef7cd759936be24e64992c7a8bf3803978dd597ade601a0d4977495ce2adb76aa5c89b6a4be32014dda4081accceb9586b49f83bb9bd6375d1d4962ac2e938762aff4f696f0b0b269d4d1130f90be043d7f8111db0f960371fdf9e3eb4f8515ae3256c7908b74b0357c2a37c6097d050bc89463db50f9b331247b8548163d239a1bed626ff93754614224f24f2b46978f6ed0635017d84571aca3c7737ed1f0c8ad3881c7b51894d27fed8340a392816771cb918cd8f260dcb252b5f1031eb691ce69e3a7c4a2827056465011956f435dd63063fc3b0050e45fb6358437188663b47310d44c3dc3f0ebe3021d90a7b2c1faba77b3368c41c140b173cdf7af70bc56e0f108f6ecd2cb87cec088a25e139e266af4a1a86f52898d88706ea74dc61f4d4c46a73e9a21f1f68150ac8f2112e866b9209bbc4730983dc067d1ab62946bdaf411f6712611c8f88ae7e64bbac23bb42094200000000000000000c000000bb14c01d2119ee6778c645411913d41be3cf292e49d3db609e1bc6179b626a0b5f186f5016db00706d0aaf59bb94d33df87d5925707c3165b536b6202aba411c020b6d721b874a70e40b945c4a299b0ae426f433aaf92d364a82a94ede1eff4023e3444fdadd1e25ad05ef7016dc2542422531709670224b171ccd26f166fa4e47cba70fc7672224a77b6e122df8b6245f42e26b49cf6f69496a015ed75b12695a46991e94ae423058198a250c00e543d32db926e7a69b7174e8593b769db853b65483529d9f7442c5ab2c6b59ae7d1ae1a7f61aee118f7d6a840c16cd52881095015a324debf067dbe6444eb4caa362a5bae70d5d297e5ebc54367dc0afee7000000000000000000c0000001ea03c10a0ac2f1e535f4c6459f384003a17a869189f2a291667dd14f60759685bbc501339bbda0bf0528a1df67fce220d591d5ca1be0707c0fc1476c58cf418f55f515da6f7616952b01830bdf4755d85fb202b76698b05d4c1ea5dc262d61dc77edc0a0d36f3034f63a560043f587753f9d00556825b22c5bc406ffbbcc05000000000000000000c0000001162817ea17b33324bd5ef191648841b6d64e869dcf6d5779d0fb041f5372c4058d6e86b44ca865f99f7c826dce13e315d6ee126fb03c06510b93e473aedf84a00000000000000000c0000009913566f58862c1063e7a3332a388938365eca48c18c9b7d33b2b22a6d2bcd11080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000c7bb0b08bc67370360dd8745a6966a2eb58c2c2bb953a407c8f8b164be4d7f44c88c7218b8fd766e1918d91dae75b733135959553fba18254569e6226982f947082b3674a531273b225b5d345a6f84767650fb7e5cca1b09221e031a2396476bbd5b2b1c0b054573b8b6044f002e21189eeef563e69fd365df9baa177497591340d756004a27e53bd8b1ec239cb7af4da4e041201e613d42a13a354c17e3a52e988eed74e484f818dd4754359bdca20017f504261aa2033e2c28db56d54af419f2722f553d27eb13a84412432a34e60dbcc71202622d102f60b9923613413b156c52d7114ed9773ed75f0368db3fdc086a7d1f694497c85f0ee55a24480262587f643179bd2b5e55c9c8f450f3e2a35e63ee190e89df713a20f53601bab4df13f60cf47d20218e56f538336b1f218402a12248504986a673c5ed011a0116053da59b7f5828a6635e5b662d44b1e32979072ce81349e35a3e861be756be9d68331a481163ad8d847232b7fe1a9616b3143862212fc1ddce48cf34e82e4bd9b20f4bf4372d2802ae652a5e3a06a920033ac42e276f02f7ce22e0b1802d72eb002af6b78d77352601357576f949d685d606acbe24535422ad6fb458a70d9a83b368bb492b593eae7c2116fbe178a5e6c91403690e6c83a51300c5c1f778910a22349dd3b17183072f2120ab542c3be9cb7b87847b203508fc44c7f2e41c0dad017e08000000000000000c0000004e9b06010f5d8d66b7a6ee45988f1833fa638267fc1bd50ef21a711a75e6b66413ebe02dc0642435ea71d82189a397465666931e527ac764800c4d36b87ff5736347ce003db5061ac7823b5323d14b145f94d6454a990c0464ad3f11cdad660406798e4fcbc7f60cabbaba76d808280d2dd0b63a7f5ace30e7984c0884aae777add55b34b56342497e3cd41faf1b3b5c8a091a072c5ccc5ed5498a5306f2a87418127f5a18f35d178803dd3f88aad373920ec627c92ea427ed7e6d6cdacc111402dbae45cd10d87ab43b3c26ae23636635c7cd0bf6a6fc61b73f5e28fb7e10422df8671ad3ddfa1bde7b095e545d020915bf2443a4d64d146ff1a80c33d4b42104000000000000000c000000daf11b0112ae0f5c3e646f2aa6b05035cffb6a4d9f1f237b879d2136c457c726e719a44ca581b12798765a52ec7ea463ee68ed6412cc0906fdc7845211f1fe4b08e3d30639453918f03ee66c46650c432adc4439defde27249458e229f6fb82101076b611114a165148dea4308fddd0db9bb3f5607f1ba2e583ecb5e2d9ca07b02000000000000000c0000007f3de655e71c9867387bdb6dc1f1125f60896d00342a9b3e725d504e5e470d47036549618ae7e50486454f435812b94ec5491a648296c560a0969e1d6d8f857d01000000000000000c000000c3cfce39fbd1ae54a71fcb2d96db7b750397fe1ca22dce2df5a3cb08cc80d555" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json index 8caa7aba..2f82254d 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json @@ -1,6 +1,6 @@ { - "attestation_public": "2613016582d86a2e74c1f040efde24203e247f0769d15362b7ae885537b5532cc7383d4b64ab89203854bd21ba4f893f33e1ec7c", - "attestation_secret": "063667f2fb3ab8f625cd2147cb1796609b25188574927b34d12f916723bb28b0c7383d4b64ab89203854bd21ba4f893f33e1ec7c00000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c000000c75d0e74a95f434d6057c42288e8f71db23a0f3ebe9e251c67588168be8c903854492b1f7306fd425958a51080a5bf4cbb90135af0ad287d71e3320b5a339c5600000000000000000c000000ff2bf416a8d2ea01ac434030bc2f0d467157a94235ed516db0e7f25c3136ac3a547019236269ce3a86b55875d407da2183845e6a8713f30f0c719f298aab4e4200000000000000000c000000b8501d163bc94d7311f85328aa10701821b68c26dad2536d3c4b585d64d291641cfdd7232abacd2f2704343d0623501f49b35a077b83cd3db765632a7b37814c00000000000000000c000000fd59950382edf45fffdd29742ba4871031a45979491321103da5d01eab5f3f7cafc741675c69b033a94c063c757767459200695bf37c504125764037a895276900000000000000000c0000002613016582d86a2e74c1f040efde24203e247f0769d15362b7ae885537b5532c8965676b311cbd330e16bb436063fc26bbd5a073b7cbde5f7bc44d29d9275511080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000004dfabe7cec0ffd3ae813c930190d6b71a9ca23486fad2244314827630902ba236f228c622ac0857cfebe663af0ff60309032cb0c2bc7bd28d463644ec3bab13ac65ad70eae2d7b60ec442a0cc7124e0bd95d7e2c9835ba5e925552557509411dade40d64cce21c32452c773c81545b4fc2bc712472fe272e0a47e653ec6dfb74eef5c633165fae6445c47679d08905475a7c9e397fce281be179fd6664d6eb786c0d86240f063d55baf07c302267331f7992631c7b94b05bdf5d7a555fcfbc348bd5c3385436516f67dd872685f5672cf121f306e4b37d7e50a4ee3431e2842992d8684ed6fc3b33e6d901001b1ce06b01df842aa6cc8557be367b22f61d7d11c68363536f2d2014b15a37469c396276a02c18325d6aed0c2dbc8a05a39c611f23d645777ab7484648bb623e60f71c4f1da6f66aace14c4fe8a1706bd522bf37daa58767bd782e5093eec00244d3ca7665144a4e7602c85f4463eb1841a792102d9f016c3f535f755a56c972666d187e4ac11128e3171767d6b0d358846e99647952b21ab22665441e97f974eff7fd2955784b0ca34d0c50dbbfed327070cd7ad0d63b38e54ff65a2a45867a5a3d7356db45ff5acc5f6535c93c1a0418a25967ef6bd34e79e5b730de75495266176f10ecb85c10b6c85e71fb5ebe0a196acc0b2aa26233249b3b6134ba0b33c4537718c84252293bd8ea081324015489f30f3d00000000000000000c0000002d4654045eeeec5f09e9f8376d07886537a9bd4d11cc392b478368389b8ea9048ee1b635e9e67171a5cd83571fffcc340e7e5c0ef1bafb04709d5013c1a66760a9ce22140cfbc745da96543a4ba8e009b8f926656c351926842c115a4f59c5092795af03032415244c09476dbe8075480086bb22931856414802ec02bc37ff42de5000354a911a0dd08bdd6ca9e89343e9a6106e0492f22f9560bf4672898212aa04c177e6fef468720cc30a451069100fb0ff7e6ae711233bdaf4594881910209ba2e78dbbd45643d055b180cce5b015a87b566567b5067c9194134f5a23448192f955fc17942451f58fb3a4158ed0e2fffcf1f8d5b7d43ac33ff5eccda196500000000000000000c000000c1de0558e35f91765ba81a32599b3f5bfd7cec693180525677d0505484d0f644931843788e1dbf7c339e3f452536326e1a9d5a45aef79d2f4baa207822c1ee1d8443167cfc858a36e8a6832ee770eb6ea0a5e75e9be967360db74d7d64d7a5339f65934bfc7b70573e517c5115f9c4194b820e676a91525bdcc38b5c1b5c046d00000000000000000c0000008980457a344ff4676e1ba53dc26687672d175c03a5130769d2b44f09a49e3b5a94253d561be1da64af63ac6344a38078c8aa32215db2aa15d15b846714074f6b00000000000000000c000000c75d0e74a95f434d6057c42288e8f71db23a0f3ebe9e251c67588168be8c9038080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000001cde321a44da525160ad495221f14b7d14445d3a46253c189411e5371c23236d53e7be1652f6d40d2dd7ca4915dcc03f86be3f13d7acb6538247821bfffff7107c3612652f1f103f72afc973f787371fdb464319fd394d0407385f2618f5357343de684202b1cc15507e0e18f9704e17b6a694375cde7629f4be582acf12720192c4f83bd0a2800253c3c6324627cc70bf7d5031ac962d57b2b9c567a60e511b5a99151d07586d385160a80a0636fa20ca7e7a318e6fb0548526787308e50c2a5b821b6000443e4cf332280a9a17a908983a501710328239ebf1de5a5b15994965de08268234842b4c1a33613ac84c75fd96fb5f90620a1c74c5816c80ba6c03ffa96465cd18ba4c90ce2362c06860790ad4847537178a35a4a6224f95c40e65bf34af1bf03c7e09d8b572386aaef309bd3a871f8c71c500a4ce9f3c69d87841b15dd0668e6b93459b0a5c7977343847dde8a5225d3f10728df91f721950743c3603d546e42ac757e8425955f773335bc437cf3ca9f688579322c832076d5750b1b32c1293d4ad65ea83ab71a3b2bc32a8ffd1020a62c64569b3771e871d575c69e10f62f9369a66a1605f18a1a07702f10cd86bbcbb80363edc663f3eb8086136c7cf1926dd5a219664a21caf9cde31561ee16fdecaca47e91cb362aedb0220ec118016ba48c80429b94203229bd86d769f6f48c43ee174b198b2205ebedf2608000000000000000c000000afbc522b3f05fc62fe2264397f7de074a6a6800e310119748712917c90d3e45ac3ab7a753e26de4e3fdd1215a029c83b7d1d0834fc96110ec1c50d3995dcee01b4d83f22944841554e2a27153c12ac43b72e8b4aad210c6765e10469bfc10f36e254db2ca63ebf7a306b932579c6be5514f2995a2bb073118b8e7b03d36449136958951a35a22b33e8d8f113a28da413ae69bc01d9b39324584cd51a9bd892329c6d637c9c96a1267a568302ac1cf15c89c80d656f2a887219dde7157453ad77f64891420399b552006831448f0b27794561620dd4e1694125b19045027f792eb3a9453ddc62577a45453a1993beb65a2f3ddd50b5df1f75202b6c2d8a2f2d3704000000000000000c000000bfe135183a41cc07ffbdcf4e4704e11978652d27af1db4479f4e292ca4b97062f140eb590340d508405b9e74ae04e65c0d3be255c7f0755c3265fa03c672d16fe994fe387c4fac2b0a0eb33ae93aed33b7c3885472a28c07eff17466a8447448d8d3ad33e257645f5f1905400bfcbc3fc9be8e2784cee44e8765d00732d7bc4202000000000000000c00000017f8753c69a3c166d5f6032d420e650243251e26ebe66443d2a9b81196eac944e428f85354f11356467c237711d52a615329cd0942cc306c72b53a31378c4f2401000000000000000c00000054492b1f7306fd425958a51080a5bf4cbb90135af0ad287d71e3320b5a339c56", - "proposal_public": "0a60101631e36e0d8ab0d663c37f6b4494c1646ad26fd3193ffb233471e5d80ccb2aaa1bd089fc022a26f83689cfa057f0d0aa5f", - "proposal_secret": "08d01f29a09772f5565173a3d928be0290f6fcb7a8789dc69bdcf8a2d580ada2cb2aaa1bd089fc022a26f83689cfa057f0d0aa5f00000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c00000068ae6a23a677593ef24f0960139ab440187800422019357cd054f315c2bb6123e4d6a453a89f94603499d463dd07a64785406048d1581f71167a3c2da9db083d00000000000000000c0000009028922b300e0038a44931261589ac310d090d78fc6f68067069802053e5751f39a0c03d09795645ba43ee5e1b5d2e7e714e8877c5e546395f84b02d59ffda7e00000000000000000c00000024c8612500246209f7d1b966950abd15ed69513c5534487e67335b0b7f1f8b48693162024c7f600059a55b5c8a310b5e23a09e73a7fb5e5d94108e52c557176e00000000000000000c000000a02ce737485fdd247c5c626ecbf5892e6d2dd322a7cf1f74ce6f342ad29e896aa51a2b4d57c7550619b300704d80a0150073ec17494e44009ff0014c10fa152400000000000000000c0000000a60101631e36e0d8ab0d663c37f6b4494c1646ad26fd3193ffb233471e5d80c386bed6d724436162c37992f34f8277a1680c959e3b62544dc01842113fe1830080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000366ac81b0f48b1165f9d976a1737ec0cb64ee2437a6b6d503fe878223f2c1a5540c4bd5ea092f96cf4fa55791eda9b44a3870c5586eb722c93a74d4c33caf11f8cc8777834241e33406f2420fce0005dbf3d60027773fe7cc67ed4483d8f206169d75c231845bb01db71132a32c1ad5e6d206171b392d02e632f9b48684d9a622afba31366e6aa224670544fd0e335088737ec6da46c6f640b213466d5345d23e4853d0f4cd0be71807ab6368a36eb1825862126af83463de20dfc1060e4317befc41c554167c81151fde6005abbf5770d8fdf3a1b56320c9cea82015a7ab314d0bdb6549c4ab510f2c7cd1fac921c7e25161f34e8d567641aea4e7dfca11d26e21e84639d671946c81837391b01c04cb095f23dfae031211642f52016a5f223ef5d87613ed581098569e5066c72b80ce8168e21988d3e0b27e04a2d3eff47091429d21ad688742963f3f169276c546354f72c2f77b28e0ea92cc875262438003bbfe656fcfce526b24a810ba5db155566c6880e7cd07c47c8a57338b2b9182913bbee216faf5e55b045cb636878d351564d3c1fd3828076f18c0370d118c742a73d8a1272fcc27c8354c43cab2c6112efdba563ff503a5483489139bb9936334d014535734b9d53c3bfa069a923f457b8919f661d37f9317796083edaa06c005ef8bf174c7c3360425f8867e4939d3aaca6b60a1afdd911fc17be53630d7e4a00000000000000000c000000b124754c9b1aee1e7d7c8b785881d85136503a2d6062bd3e3be7606fda117925b04a4b417b309118a2ec7e0ea821681ac15e0923e267037411f5ee6304f59768a1cd824dfef0ad3eacc9975714b6aa29ddf22b29db86753d4cb4820d7f05385006a9844455689351f7fcdd5b428edb0fb3bdd97ce8c777482cc893762aa9836b3b34ea2728bb4d1b2b70521c9c5d24617fca475d3651a868b2bdb03dbe0e454d266f931b2513eb2579a055737ba2c31adecc73166580ff071dd70275dff9a7670429b46ea057fe3fa7f48c208f7e3b442fbb6338856b095475f45a5d6da7195a67a2d849cbd17d3f0dea6e057034a608dad6df6636ec7d36f4a36b0ab754426d00000000000000000c000000d1402533fa8ba33a7044955f1c062c3c381e30633533cc766c238a206cc8af027485ce7b29e7b033d45b0377147f334edbfd604aa49c853497d1ff31906eb17d086b1d3e1f362c2072658972ebccb7355de1bf4a0275f1317e991d3e06e0ca6b4aa6944a7ba3046463ac7157b0e81170fa0e162e54de75135beb2514c2de8a6e00000000000000000c000000e4dc3963fc577c4089e55b4ea38fc42d32a49079bc90b85b1cfc67574b4cb43174e1a220a9918855ecc15841ea15552f808f683e48d6a363ad186c47f8717b2f00000000000000000c00000068ae6a23a677593ef24f0960139ab440187800422019357cd054f315c2bb6123080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000003fc21532aff7ce0b4152e506ebc0b97159afed62e24dec39aa2eae323fcf1d7e93a9423c3cb96e30de845f7d6695066fa6c8c810c78e101c949a7e0316713e2afb21cc1e9e68ac3ac519330a0664131cee1e092f05e945288a837363537950791df64e0b41ced1032c77df11d9154a08b604fb435b18872b0d621957e3c38307c087af3a32ee0e674408aa6b584ba41ab13c2b34217a1f512a1b283b5620bd3d9af6a25a7228b13e65ccb6755ec61152ec7adc6fe073e056e6939b790cc8c20188dfcc6895bd9a5bc1c4621fe9be60755cda7e75a14ecc3a145c982ac6d4887537c76822a0298966ac2ecc799d6ca160e779596a6c7f720561c05c1e04bcac1bc0907d07893c6d227aee0274b5018202e388687ef4ad1041baa32f3f50e94f3480815b5f19e28954ddfb83333f85d7122cfca342e541c974926ac31f777c307cf7deba6fd3e5df2b6ed0d52e351c1838b5939039fc347e4f70a0e06555826d3e5e1f297516ea334dc4db2e0377db9e4da647b152741c38765d126a712fa7f8382606cf30ff163d78b8a22e21ec4ff05b8c948545b14b1863bd86c426bebd8f4166ae181276b27e6f399390400a38cc3265d6e5206dfde81f9f32940b5f97377a6e77ca0253dba63830e8d031ed8a83633ff64205b93a0d30bdc1d90cd08dc160389d9a68a13ef97579cfa739907bb42488de6a7d8805cc273a8a4c7447705d4708000000000000000c000000abe4ee3316d1ae208b18920b9663ac20869f4b5865c7a2752a764802d1f5044c9f7d71657d10612a79e141422fe2661c8ac1f636d65c17194cfd44378d48704a0345333b940ba4309598397ed38079779a2c4b6e6c02436be778a83e88d9d064ccfd6f2d69e635240133eb72d2add9171aa894497c3cdb7714c50a3f3578ac492adc963b633047142af4b87b55caa57aa8efd23633c97a72a01da14bdf1be04586c33203914f5a213bea533e5a19e34e10fc3e4116337f2e2ab53d7a0377d822e8da3232bb78f14474f656050f092e6700aa2b08554ef7366be887043dee727976533a7d9b035c5020ae7954b95f7e6e0b1a807152c05232a029ba67eafe984104000000000000000c00000035040c69a66f937d5efbad3065404b5f313121784340d66ebac7116010fe7b10435e77626aeb430ae7010508b4718b00f5abbe5a2cecfc640149556dc570573da32dfa133162f70aafe17a0b45b261186a5ec360d2039c0b456b2a047bb9b552d8bace302866ff78083b5d4491377863f879670053ece14d7c74001f841af30602000000000000000c0000005f47797219547f7450193e7424f99851e817ef1c2617c152890b714c1b1d4e02c8ab434b6bbde7683a73a851722b3c0693fdfd61dbe2a818efa69012947d121101000000000000000c000000e4d6a453a89f94603499d463dd07a64785406048d1581f71167a3c2da9db083d" + "attestation_public": "cc5028236575c50d7c9d325e2bbf4e46924c023137f3614e5329e06f8bf4481b58137d2fa79dc11e1826c729746e503c7cbfeb23", + "attestation_secret": "b291a62d3393ad22ef64a85763727c1250da7666ee987743deefd0eb4bf29be658137d2fa79dc11e1826c729746e503c7cbfeb2300000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000a1e3047313404e54bbaad95c06b7fc533b88536a1b1dcb0853457a7777255056fe2baa7dcff5fc249ba9fe7baf30a5060922fe733febc44adf54cc58862b4943a627ee0e77ec4d543209bd1eab728e4bcb34ea5b860f991db9cf5a602e757f40a9716765238dd31cbd00971455631c6e97b36f4247ba4a0ff0131d77696fe131381563615a50482879456b39b95e762187c69b65f0f0723b23e3b844aa92d8157ee2683f8863ec791667d940dc4bbd427b4beb63908844760fd17f71744b7325d883f0110409cf13628975352c4360522f07c73bb0461916e7b4ce7483d8a41d2a01aa2f70791051410ff7554c98a14e904adb5af904b5088076797421f56d6200000000000000000c0000007613446e25cbc701b589f362fdf3335a5c82363ac58f8755a7bf497440551d6265f5fc4044a5f555bdd32f7bfc408c1a294a073b9b398d17f8ef997df996f74453a24f1ab2f8c92d47bf2c03b5e537791e0c2c1dfdb4e335d67bba5e48dd8163c9d8513a867abd70222f6c590a0b6b0c2d54140adad8ba30c4bb22631554e03900000000000000000c0000006cc4492622700c282b0195594be38d1f44d23b05003c217cec8bdb11c654507ec7d3810e5685b604cb629e4901b8277d3576410772a7fd5b4cb43d0eb398021a00000000000000000c000000fd677660083ce177f9a4f45930e6b14a25daf23da335fe586336ca47f3c66f1ec753d812ba9dde242fdd822a5cc6973cec09b863b686b66dcba56608e22a0b7100000000000000000c000000cc5028236575c50d7c9d325e2bbf4e46924c023137f3614e5329e06f8bf4481b2b33eb6473aa2e0dc59ff93e43bf8e635aaa836a5cbddd2bb89278464158f64d080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000441be741ed2001606d2415130d5e8c2ce2788a770fb79f3f5e826f3f79acf902707b5622f51a205ba201d72911c01431365534203caaa92babd5475e7b2b2a4937af103947f850456032cd3cf40b676495f645210eb494080077994582035e6cd6d03c7ec3f4c1425840355cef7986248d0bf0553d4d8023b96ab90241a7cb1ee11ca4380de0c4583217405d52ce6059924ea4530b0e0b27ae14694d1814254d74780063e727501285eb22689ff97c10b641702d4656ed5f106a291fb4a3ee584723ac7cc4497158c117aa21df4b1d1a9a126211b55ee97a333c2a3852dae825583462028e075c31e615ec05b26c0351fb6d8b1e477ff405a66fe123dd118c3f516b107b18bf7b0a5400756ef5a1c108111cf70412c1b323b23dcb7d3e0594779ccb290c3ca00b47b6a5ea1a57d28621e8498b6a9808a253e4a7833511b587230e54f81dbef21570e1071361517f277b0550c76613d05d646626e8483daeef727a278212b625a04f167fc85285b95b0cc093dd54e50bbd6b9dc852238f0c653051ad0038de91e81aac6d4f1681d6ea631860a50f80c3e861bf5de404d6236420f2176d75160c503f689fb7308bbcde7123d13c05f0df306f21d0e46fbe1d5a1ddeb0da0e8e2ca46a347ea44c44d37b601befdf5f5059df7e23ac367555ba9925d1dde7080d898606670104553e86b806938a897529b9277db15645205a854d0c00000000000000000c000000a1153b2426d6d71244d84b359e1a254e4f23457865cb517d2ed0003a35ab2f1c6dee5372b6b23412ca177027776ab43a2a96157834e9e547e679d047278e78180fcbfe4622cd3e48f90b797821dac45f6d452c26d53ef65a439f521eefa95d4793438d3eec0dfb152837571421bfdc6ece8ebc76d512b162853ae4014852145a2852db0bb9c376777393df18c290ee7cfc8dc2539fc7b33c3b794a0171ebdc5282289e6adeadcb2426517c211d3d9d17092ff669a98bf1418064503a1b16c1341dc9dd40eca37e510439fa2ed773af688e78f65c23d53356899b8744609ca61a139be66525a71b74c5849a1bbf5f7b107e96a2706e41b66c7dd0da1e120dea4200000000000000000c00000087d88174fc7191030acc363d46882e764e98d92acbe7060f3d329d2edc91d01c8827761ae9487b19f6638f447fe0f316d4d25e0c11458a0898cc7b14ce19ad6f5a327f79661df570cc3fbb5ad37b6f7548789e66e4c3fe77d7b4f03d7043d458422598574d1b9e1919ce506ac6f7df4107a7802c67b85f090238386197ea2d0000000000000000000c0000005f9f2d4a59388b5eee84e31c60a61f7eb608db4329eb5f4578c61a223d282d4cd83bed5ffba35f7ad656a50cb62aa7614c291f3db204d3627317ae02b3c8961d00000000000000000c000000a1e3047313404e54bbaad95c06b7fc533b88536a1b1dcb0853457a7777255056080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000879bff4a01590d0ec1bfd3623ff28848c4298b6876876b755d386c488777c81e0705a72197abfc77ab073121e5872a06fdd1741f0359c022b5bc1406ad90b448e5e38337b1f4be0815551838af675969a6446f43b0b4e929e5d65f02b6664e6f6b02751224220a58859eaa5c54fb956b3ed6c86d9b3e3630324519471738991880f64c408b859f35a7f85a60d2e34943bf715008683edf289fe48c06af2205449f039737024baf6372a756728aaae64f88a7f93ea482394288f0b525b4bc6c5b575252060b07e0288341565415ef4473d7b98930185c9465d367a63329e9575b09debb0499fa0b1f90509166dff6f6230f4d8966f0efbf5a4591f874460be3327c859c246768193f35d8d515b9d81a0bc1509826e32e7e27c49e1022ed25e55390a7b707c2e3c83f750f770eaf69d50893e3cc65074bed7ebf17c20bb1754a5eff65a47ce3744e42855ebb1ffbd91a7cdcc9345c3eee96728cdd4a3d22d30948f1a585000067ee08c305443a4a096678a28cec27d91a780cb1b93b3e8bd8bb27e9242122a0120316fe0a3469d48b411634d4e41b0f4bc52c136f592539740e6559beaa0622991538af406e1130c6a371f2cb76252f6a0a2518276633776c69773967c94cb66ffa112867ea1d6a709242b3472c1176cfda1db5769b4eca488f4302bb04550e9ae96eed654e0b6167af0da931c05fd274567e52ba3d1c2c11335108000000000000000c000000cd69990813138245d3fad255ccde742585f2463e9e8404608059d126e48a9a1233f9814c4b18d04772c2440f833aa534b5414810674cf57781af220c6abb0f6493d7b041bb91c04311ef684e81515856eead0d3e188be16fe9910809d800bb16b84e01333e38a25eebe4d27812b1bb640b58dd49e0abc921b2443d15d98c89529747d17d65209f5e4478f143f5f38e39e3e650026f8c1e2ca93cc629353aef04992fb82bdf66a832984299457c2ac158d436a45b8dc06d13ef7d9044f3019e1dfa9a224c063c89049672b808c2bc894cf38f737b06219f31281b40596170e1066e9a4b743dddcd1cec239044e2c79d33ffec40544d2ceb14a6342337dbe0273f04000000000000000c00000092651d2d6f78a84059273377a091156fc0ebc80029e8634e360d1d180b49271a55bf8337e44e8469dc69767d68d59a65c6ede26a32996c2c2d648f60b09b5f732a387c2a2a32e612ba1cd419f93002137ed69e621f5f33308d291e64687b5910f2f939537c54e902dbc5f801375d074fa9a26f095085e4319c69f334414f0f7602000000000000000c0000007ebd974c6cba3c4b38cfb56946327760de2c796edb4b9b236d0728666cd921763a160a19045ac40715838a2a71d0266bf5c6501a8437f6571b16217dc0b54d7701000000000000000c000000fe2baa7dcff5fc249ba9fe7baf30a5060922fe733febc44adf54cc58862b4943", + "proposal_public": "a4d8a960f852b80d2f81ba0628d5654a130f34250bae3467eae4f628c98e160ca8c0424c5a536e03fafa496eae9b1a69f1405d05", + "proposal_secret": "d08bbdcbeac7cc5ecc9e33582e1340519ef65ae9bf57090de527954d5b4c643ba8c0424c5a536e03fafa496eae9b1a69f1405d0500000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000004bdc5066758df30022dae929eb502660d1658040c646762c7aa6cb525b99a21de36f9718cb2ad65a84685b6073f9e0309ab5e33ac51b6f1d22b6b002f0efea4daab569561f1c1b2bd4768418de406a6b826ae2744b9269126e59e868b10a0408e002f548d087020d783ce30c275c725c4d02f263af0bfc6cac001313811d1e5a2369ec15076f30161d73c71fe75734182ef765214463506be8985d0d05296a67243b321e80bfa82cc414ad5372baf42c361b797022ca7a712003e15eb753ea2601e851374ca8d1486a40d51e38394e7e7dce2d36f9ccc60f0e35ac2a3d41b663edc6c61e3acf6264f4340121719d0f23cba57a3b959a657139a5436a20b5a60d00000000000000000c000000d6231d2c7cb3ce3ed51fcd31ea4d8363bd5c872900881b6bd7358528abebeb1e6b88e4058b18224ea441226a00d7ba3efecbcd26189fa528b36a46627f2f2379ef0b174f1687e148a77c0c25011bb9146716f80a45c8c07a35d34e6381255c68674a9751d6bc091c0c57bf2f7873211c7c089957b9cb466bd16663472e33324f00000000000000000c00000022040741192674187193be542a3aa2606a642a07139bd3411e8bc75cd2c6764f71dfc2355a4c7004580dc6252dc3da73d541af5e33c509201adc794ae27f557700000000000000000c000000ea33b75229ab264aaaca9a2f16832b7a3107ad49f00fde4c42ae2c2ea3ddbe0dc0232625eddc3520f83e075c29cf400b07a10b05df09c10c9ecdcf5a7106880c00000000000000000c000000a4d8a960f852b80d2f81ba0628d5654a130f34250bae3467eae4f628c98e160cc0e6eb4680b41e3e159e011ecc605214f8f3fa3063c2747ace66b83612d7914f080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000096eddc15c9d8b206c7c9ef66d7f1990c556e4920e727184960bb254bda05424816fad97bdff4ca12f9b9755e19442f0e00fc1f6f1a0509219cecef732e76d918bfbca901b0c337527f4ad85a0f48e257e4ce312b5a5eea1bc781c75ae3cd596278177343e57ee32d346eff134776650c4825b71bd2df4444ac362618dff5232af32a30537a03b42275ca3c2a84fe827108e28173054984593ef0c90e681a86192982cb273460c97e566eae02550ab61fca6c147b5aed31018500dd25880e2c0b4ab5b441f7b6ac54b4e78f7ead66872cad5d7e429c9ab278d0156759183f76344b2cec39ae0fe96a127f3e6648dcb92273bf976293e76318e03733579c57916382e3813eb872af7a958f490b5ffd5b6f0c50aa52b8bfb74bd9e3543308d3c6201670d3463cfa0659f6d9875d102a5454a5fa6b43cc9a7b49bb03ad52f8169c357b60f401277742650619e104a4a73c020bc4416bc052bd5a11907d43479bf111ec7d8e614fc12a514a9a85195f74901432696115b22f6924c7a900610ab5d84a6820307316a2e650bca3e36641aaf403d454da44b969255bdee1b0575bcf6e13c989201b16b3530a64b4bc23ac26023edd63b41abdca2d044ac7424c3aa45a3c40176c349d88c5105862c70a9956dc25b45f522edfa79d099a633b2fcf36fd709938d66c169ef810705e38699eaed125a2db3b1af3ab923f7240583fcd75eb3600000000000000000c000000688e047c4fc4754514d65308d5bab32437c82a18cfec0576c4a8045cf64aae28510f427cb75c0b77b6af43474e87064d45efcc086e2b3c1e5bf8e13000cc5077243f880b8632615e39c12759b30d2f20c8b86a151c77cd5702b1150150d8c0068f84080e30f42f59cd18287be06c157abbfc422bccf2755142ece06763311405e4363b0a4f49ed5626d0514f1e9816277c649f5448fa9303143d5944a31c523bc84f1241977ac54d0a34b5339605166bfe2ad32f8a1b13008b291c4fa7b39359ea604d07956cb57c698050104f21665a4d139a08bc722846183c032cb3f76f32b5ea4f3b27ca890d473abb3296dc1c0b05fd20561ba1316884ed1c42c1df657900000000000000000c000000be52ee2294703303e56c291c8b3f9614786c9006c2fbcf042b0ad263f0f8cf5002440a52ae8a8c42d8c0a0215029fa6374b873101cd239169f1f996edc67746d5ea6761c277c382fe3dc855c452a6d7755b03f7723c5c54bc8cf9241481a6f7cdd80954a6a3ca0754591366903ee964d489fa376bcbfc22aa42bda0bceb0841e00000000000000000c0000000cca5771236eef6397361b5c77044d1569cc8c32fca3973bb43a2e4cc2295238f8342767c44f5e42176c021efc4e8b2d40c72c1d8f9bfd635c046038bad7fc3800000000000000000c0000004bdc5066758df30022dae929eb502660d1658040c646762c7aa6cb525b99a21d080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000001377f64cc69a6d6ee5d99711ab765f2825b1001c09ac8c52e9cb1142ad403d233c8904367498165e8a4cf67651a27803fce1867628a6b96d35e96d0d0c4d990a795dc46d6b96a1626f0f28435dfb380a2c81cc557a03a36ac488355dbe45f215ed0f676118e69934412ea00f92a0fd49340e625042062f652f72a12c12731a050211df7132228b3448990f14fceebe5481bc4009eea036605e1dae381eef77127c438a7af2610c12355a4d357bc6765c0db4dc2a7e9e661f9fcfcb36f4230d2be64c6b4fd2980323db42ba766cedf81380e0bd70f4bfaf1f7348895cff761b0f0c157938b210f370a7b01f578894b631019ecd125781262f0cf82d23b37a0b1a7eb7033874b8827e49871a222e0eed10c149861df8e08b3c037015636b23c662336ca1128e105e298099d50bbce8394059fb3d63ed8d03478e3d1a031c74ba2dc1689e5b9d73bb1905991d14e77c404be10e024a7535f53003011227236e1f5843ede877aeeeb674687a6e27ee00da1297b30512a40a5a7cb70d252f3e2d117c6721ae74027a4d607ba401071f3f2035bd34511e6f925b49c9f6577500742f2f61994c6a04e8a20858009d30c9e7777c673e0d4d78a1bd27c4ff837c02994858382d2a398d4ea00a31a5c95eb341102fd4bfd01108fd1e4c0bb67b72976a05350d700e7688df026295f92f09d8176a79af4e403fd12049602f9d9029c2fb035a08000000000000000c0000005e114d245a86f41a3b62d379d8682134622911411cf5925a14e07340778cd04e42193640e3e3cd19f6bfcc4ae817a209b0c98e597cd56e3b3f56b85fe0b11f7cea134a46cdbdcc5d57e77651f19d0b613edc2b1a512b0548ffa06c5309d3a64886804d4f4824aa51b901367e8db50c57ab54a37ca26f501238df483137914433f95af54f4103f82cacd1eb5a9b60cb41e952797e12e0bd0f4f3a84062c428771203d497c46e40473c901cd2a7cc11552904098262882b675ff975b1d541d8f1dd0a0f510409bfb4951b3b934bb7e4441066ef02b117fea406f996269f5900d1960d4c9229fc6a27a21a83c5151256b1cbbd480500519f1523d3c194f6bbc976c04000000000000000c000000901185500b9ac771b363bf47e288e47626d3927e272637302a33f06fddcdce27301fcb121044715d7e72a332bcefb628c238351b999c300012148d72fb16de28a9f94427ff9b16194e4b9e36a613c15843e9ea51e777a2366c8e1048fe738134a56ff07c5e33122b756b9e568dc7ac1a3d549a2dc5c0b14f7eb75a39900edb1102000000000000000c00000094d7bd731fd52718ca35b000c0622453591ce62bcc748862bc25991f0f39604966543d453bfd0d77e982242668532d762afc3b17c9bccb266371061ad891311d01000000000000000c000000e36f9718cb2ad65a84685b6073f9e0309ab5e33ac51b6f1d22b6b002f0efea4d" } \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json index 301828c7..35a8f7ed 100644 --- a/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json @@ -1,6 +1,6 @@ { - "attestation_public": "36846e17116bbb09d7dce812b2a0901f2725b47e7c0fac174e7d8c2287c7a77e61982d1b7620991ce6e16641dc8c333a23ed1317", - "attestation_secret": "d7295f8ab7c6818db63df6845237e0c126baef9980cd71c107f6eb50984106af61982d1b7620991ce6e16641dc8c333a23ed131700000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c0000006e4fa763d694c249d835d67910a580425f4a9a79fde14552be0ea45b8ce7e701190d3b3036b4002b691c436b44d3d05d91e4d72dbce6f50fc017f4438461824800000000000000000c000000fe8fa1208aa9c1031023f727397b950e64df81029371b41a87369442c2889d0686bbe509de22aa123760f33814b0a81341a2d164737b4352229431466636eb0600000000000000000c0000003ca8cf38b25c10256ab38f4f60ca5461fd7df35a2fa58c76ccaff010602e15114565bf0b32890d03c4ba09426a89cd6f9485354aa834463b81fb551b10dafc0b00000000000000000c000000de74192a752dc156af6d0940a625f32e6c3ac836257e704154542077252c457cbcedc823b569142a04c8c62628a9f8310c8afd6bd028c67e3d61836ef6b5385e00000000000000000c00000036846e17116bbb09d7dce812b2a0901f2725b47e7c0fac174e7d8c2287c7a77e69257114fd1187438237db1d83a58479bba03b05e1403c3939abb44ce5f2f462080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000a683bc195d85653a61f65635872916782bda5f462a2840778a5d9e2993a5472619b985214a745b298e91bf63574af65d4d9b5f7e7d0c254c2916274e82f8fa75057413669ba37645066feb2a9234656afb718851888ace0bae08cb01fff3040b93b21a7b61ad90727e3b5533e9494b17ff11e57a2f41b608bb166d2bfc930b7976fed7504b5e535312955d6cc9aaf2337a16392967f1e63bbfcc3b1a2b9bf259746d49621cb7016a1fbc99435c94fa205b94144a63642855dab3e717e5bbe37d435d6d560817b922a4ab75195c58e52dd0a21b5b1a044b382cf9165c5e4b6e362d8905545ee3b0621f968d23e81b496e1c4bbf515b6e804ae0321823323d9b33bf9eac131d9bd93563db0e378946db1a3cb3614460295c08832745547431214c7259ce276b853a5be074a9768182e87ace58872ca3737404d09b511e66a12750133d097e2c0e3d6d7a9c6d0e6fb8763658a1dc1d123d5f7866b52604b32ca207a3b4454b340dc93bfb2064671705380b988ee6784b36b01a7b8bb41745ec1478e3f9ec5e623e203e204c3e55d7e2bc47518c0331dc1a3149d520d051163e0646d140d710dedb4a0a87c5c41c08271b1781eddb6771c64d1bbfc2f4051f606230b1bc9d38e7c6ee5eab9ddd30ae6dc221e273907b0db26f1efd24b86069c5e30d45675a3c8a6836559f49c33f5ddb8753bcc97d246c258a730943414be258096f00000000000000000c00000076407078e5e1ee27de66925e98b1086cb23c766adde9886ae971d17af6ff29034cf41b6190681c70d7956e7a6b5f4f54fd8e3b62ffd259614d99517972c3ce00d33f337edf4d510e53105213799a2c2f7e6c8451e7c8442594c7a6614354c175d67ac73d1cf157359e16ed43353524798467a16bf1e90c21d68edb0a3461d34593608c4ef2fb3b0ddfbc881d85837f45795b540fa041967ab63d941a9742cb49d468f2521458115ba2097374f30dea4a620fca2d9b8dee4d1e0c7a07580d810ea200fa46a31c7267fcd266751cdb52645ea6f469f88115200581443a9b5a8137a13beb2570698d55c5cbda729eb380680591e8294d2a7267b6c72536bd5bf30c00000000000000000c00000041f6e02b933fe0539d492f78d5951453db461431bb26c13f733ffe71bacd705e2bfc0b1f8f35996b96dcd517247eb553897f3a024d95d208a850a64cdc7d0a5cfaafef6076357148e23b2940af08f2619e25f67181f1db37a51df329bd8b521f43ca030c1559164bd77a571e3f7d4446e82b4745fa8f8b406d37460e8fb0fe5900000000000000000c0000008a8adc2062bdc10ebb6a8f243cf580112c017b4606173333c1498d7a2ecdf10233e0b86056454276a1ed8472858fba0d96d6a87942114423ff9b5877df96e84a00000000000000000c0000006e4fa763d694c249d835d67910a580425f4a9a79fde14552be0ea45b8ce7e701080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000004717993422bf8f6916ec2e1e3c012f6ef8193d1c757c4d495c6a14771f669314ce63e8555a2f570f78787b514f824108e9332b32d3969042ad13ad109472513d85afe963451f5d4a43082a4040becc4a556ea6627f3ea1422d26780d51822c3ba9144a1e8eaecb1d16eb910d67367159e0a20b630662ab606e58244f279aaf08ee08b770049eff50b9761b62bd7d8c6aa55d375dfb5160544976816e0d5a5045191f3e2c6a186615d69f875157a3f205300c6269f179105f220b5d71ab401e3d76622e6f15d33624897c6d2af1235c74ba49bd4fc7cbc7333645641ebbda87789c960b1fad446651c38d0d2754381c5e71208060dd50b2230fca663250af3c1af68d415bbed7d20435c25b5ecf4b6803c6ad586d494b1b6cfd1b8a2ac27725546a74c953d2d1575f68bfaf257a7403309980b836860a1106ddb12a21b95c9e582825b40d64c5215e564d7d13f5b5db1587dc805e27325d50597ac75ead0fe7433b04514f595a187a8f001d0b94757072f939222914d5a217c7891510c04cda63fd55b958f1be205792b1f82ab25e86600b143461c4c8da3b4c10af21788c74597d4b366355d9af634e0e6a3dd2a83632ce4bbd41a597124adfca5f2df5a27f2c5b649d6caaf27f09b2fac81b6f3e950f32c80208cfafa75b0cb2ac22e305593d49b5a836a1c8a36b1720ca235de53f3025c4465bb975dd0da7fc3c460c65116008000000000000000c000000fc5201623e76d1121a96b508db92151eceba8b1484b832691763b8437531a42fbed63d610a8cca1ba819d64111a8b325e883cf48c21c693d85869f5441b4d57b0311e3081fc2921cdc11037ef1aa2062fe68780102798a073221154bab69e303d151ff221212fe3dfccf1d6967ceb2122db11f3b2feaf00bdaca2a4a1a2a6d3313f85649b0c2aa2123ef2b3974c7c30565fffd2f306b4b57b21e896cbe6a105189ee514591a9ae63d992ca1681eb4d791e0f207a8031e80a886fbd408e029f338caac9510ddced291fcad04588ad97366e0a557cc440624f0574007ac1ee3d410f2b4a639954a54c4871d01884967c471d4a676040e1be0e99e01a60eae90b1e04000000000000000c0000009ad51779047470192e3a6664836ea91efbf14254840f810a54e94831be17295a9ef1cc0dc9e61e0de9969519af4e054006ef32746161ef24d494e461f78d2b6284ec967adef5e119d6749e70e037493fe42b8823325b2c01bafb551e39b6a86d4e4409387bab7757676b506822853e045e68ed1039bee63305ee16730229cb6002000000000000000c0000000d96a344273d89738d901b1c542b60116eed51717c3e2817675ab058c31ebc5e7c4e653a4d92a969242b0b524d7f2c6d7d4bee1f542a974c1f1d1f466fd4fa5701000000000000000c000000190d3b3036b4002b691c436b44d3d05d91e4d72dbce6f50fc017f44384618248", - "proposal_public": "be1d2d75bb42c22e455d6d22302b6762a320d078435dfd19e0ae5f64d658ec0c0daa724c76a77779c792c66bf6550a3ea7c84368", - "proposal_secret": "93408d5e7185059db4cacb9867db391352dbd04b81af243d2819100d8a97a3310daa724c76a77779c792c66bf6550a3ea7c8436800000000000000002000000000000000580000000000000000000000fc0100004006000008000000000000000400000000000000140000001400000060000000ac000000f80000004401000000000000000000000c0000002166c343da875d08b84dcf2bd7f0723f7ec84769077101225c72fe2703dda749a11cc337da72e3032c4050215698975f37db6c565e21193205350a289cfd876f00000000000000000c0000009f5aaf56979ecb0ba57827520383e62b96a0213e80881b6057dbb20803de770d1776130c38f8fb604449722e7f6ac0083df18e65d390e22362b97049f5abaa1500000000000000000c00000087289848cc968124c1159b6c4c01977b1b1de02e793fe51e238e6c2ec901a341f983c65acc494472bc71ba4d539a00238bd8e31666a8177edb5a216e4efccf4200000000000000000c0000005273fe3c5d4bf912bb5a815a44a9386a4389802c9fc6ab35c5a961780f86d640cf64d276183bd341ee196909a0989f43337b39788363a602fe48b10e87677f5a00000000000000000c000000be1d2d75bb42c22e455d6d22302b6762a320d078435dfd19e0ae5f64d658ec0cb9fb29637100a168d03e990b4103295a7d546747c806703f8a77a70a5ec4ed78080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000e1e3bf2eae9ffb4f5923da5f4e6ae476bd7a7d00e2c67033ed393436eb5f2856adef264663632b5868371f2f4405277e5270aa2f8202837af69fd25da4a89e503c9cd41ae358276b5bf7fd2128a61058420828290911c83a97103940e0ea5f5288d8254a6824ae25d455605047b96d4e9efd3462f0a8a72980627c230df5bb2f124a427d8227b1394aa6ca634761861acf7b4e27303d2245c6ffef16c888bb49c145b3122ba0e15eb87e106e230eb91bb5f93103a8a64e78e09d8b0058c23b6db1d7f961e992b7023786a43bc1649a16d7f3d4482102c070edf5603fac4ab276d0aabb3b31e1c8494f798f52465050493cebd35ce3b4ad7ba12e795ec51e8f2c0cc6063cf4a6375bb6d353587f419c7818f9442240d88a705751161823ce32117fb2a0776eb4a1119e081a2ac1236d4d692ac854eb6a5a43b43bf5259746de787b18ad1ca106985c1dcef2657e8edb3541cf262d684b776f5439e34a9ed49b4c3a444a34a6651d55dfd54a4f057a925248442d715ef5d26aee6854007261ea367777ff163e03f118fb72ca36b370ab589783d17e1d3d247e595c903101d8ff69ad15622764d0917a0d595b1b330e047954fffa307f99f05065bf463f01eeb85566986364377ff673ad768675d99b9068be502f799d2617517ee30558bef2054f7dc4fc5123ee373f79976f731374c921e1bbbc3d65920d597638c80df528bc0400000000000000000c000000a4b6270287d8b35ac3f5a77c99f9c457a1f71f23213306216874b54f869e661ff509204aa8ab331e93b1694203efdb28d75d823034148c5fffa7e95c505e1734e5396c68411e294c4ffa4f7610b18a2efa35fd136b83f0572e614d1df28ec0150e2d9369c581ef6268a9871666f4c8387efd882bffd39a599d5cd60fc8e8211c22fd1f3207ea9435e185bb1f5fea4e6d86fa7d1e3432576a1afe804970a955026be1777d12741838533d92590502900d3de0136549368a178b497128e3173e0911bce870bd0e7a3812423245c228ea7363e247173d885d0d2b7def6f3025e174769966243cde9b69d9b41246a6b54500f13104225a18970b323d70255195ea2e00000000000000000c0000007d90ff550de1db44012543258fdecf786f669771e9355c6a292e1c53d890c15b512f7572ca268e34e727e30567ec837b55773d05a0eff8496acaa614b4fceb0ae98a39307d00766a3a071a76043c531a12209377bb4f312d8abbd300f4a00419dc023c3998a61a2d1123263a9dd74656ab39d06a723c4a20e2256c27b3a70e3500000000000000000c0000006ec0b43ea96bde540a0b9e0f4b860d272dc7ff5fe6aa651ea0825d46b8b5791fcca17b46cc0d006db7fc1e58f413e40dac7d2e2a4955640db358194dfb5c370800000000000000000c0000002166c343da875d08b84dcf2bd7f0723f7ec84769077101225c72fe2703dda749080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000fa07e1659cb7684e90d4296283f7d04e5afbe921940270392e678072b0c82c234e693a6a25a76521e8dd3e240b569d3e46944e406b83f019414cef75df5c4a264a18862b4374575783088d3c52b23d5401a6cb46f2ba5d69cfb7352579c72169057a1b2e1e6f212858a59d40cceabc0527cb9f7328742532e0ab1207c709af4a01ae331da82b3417e9c23f7ea82f314402fc2a72ca8177650ad875553106d20ec891b57541f4bb1604035f5a774f807ac9506b38128c2e78d96ef30904bcd6295db72a03e44c1f4070282043bf442105dafd282846b4dc4a42263f3bd141ab7155c5646c4822c44786d78a7ade46be642885a754871a386e922022523d20f23fb4cec00ca65e140bd0479970fa8fd72d92c44b17e8491e6ccbc8f34955368e44e66c8f6e6408a2427ddd8f636f7026415288ba2bce69e05f7ba6530f8c01aa00f0467f3fd7f4866a2a37be0513332d62eeb72c37f67a861ce687390e4fe6ad5a40ab637a6609e651ac363a36f1dc5d2daeffc621acdc7a39355dbe4b1b67651eaf28b51326a9847274ad9c23a7eeb10de53fdc5a4e94b055d9e0fa2ca38d9d25551b6873ba7e5671461ff32ca64fab30381dd7637faaf60582c05e6849f73a7734262e6a87c44073a6779026a400f06266039f166bb9fe206309495bf80a8d66ce6d2e693ab4db202cb56b2464bd884038bf6a05dfb480555df5ca2b93a8ea2a08000000000000000c00000033aade7cc2e9c90ad3fb0938b1c7551eec4beb0c0511be5edd64d45b1ac95542cc5f891c940b93238c2bef74669bb476b2ce5d75e81d3a65854f636a0a59f24dec1d8614d35c385b52a0485868085e4ba9ca5a6b77d43f1cd844e83fdb94267a30c2a578371d924b6b820506f7400036c2563320a9a2904f64cda4437626962301757c0f7be47d5b4533ae6a0775c064cfd17725e28fc00d1d24141901c7841279095448a61df07c6b53dd1ea0a7a359c4e6f430cf510634e046724a2da90d3ed135a30fa109112340ae4c763c565f2c60b3f4465024b335027401494e846a53df6d0c7592560a04db21706d99f4d5538f9a47226dcbbf043b616c7037c1db2904000000000000000c000000b1a9d32e11a6e308ec139703c1b8c435782c2a4f002f546da148fd66f4492505c8b72664a5bb403ba495a16e618bba38c8f8d00eb6e8ff3297a2ee6fc198de05181fb3215b73966ad55eb30859cd0e389b09f05be305327b8e1dcd7d605b2a0308cc2d3f62d5f914734d325dc1d1cd58d98f3d56f150d229102c9a61e7f4b13702000000000000000c000000b513ac5d9dcb4e14b840ac0a39c4ff6f008acb143a1fef0d0d3f7f2a1a0caa55d6adfd7cde4a9c62408ba0448b8ce2213df24e2b9748862e637e847e98f16f0401000000000000000c000000a11cc337da72e3032c4050215698975f37db6c565e21193205350a289cfd876f" + "attestation_public": "53c0bf40afaefe6a2dce7345305a020885ce15560cf49f16a43f370c63232b5d6a0167696b4d7c742ad9f3379da72027bc331a31", + "attestation_secret": "2503db0a14e58d5606e34b7e86fe7b60ca5ee4ad8fe8506f59005077b412dcdc6a0167696b4d7c742ad9f3379da72027bc331a3100000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000008c952243757ea30e8c7cac57a8c3bb79c5267273d8d3d94b459744126c6a4f137f7dd878ce0ba8107480e429974d294427aaa64debfe6838c02a3234ac07727bd90b2a4f80f2587d7ef7983a6abfed6b41cd6a3c34684c382c551e6d272ab06120781601e9612056f150d74efcd51965123d4231d77742653daf8d4578ab994cd4073f5540c1df2d1ce2bc1d2687470e61ae974415d519117aaedb73808a7a00d5e51d40b2776d6e2a5d88142218e83a1ffaad7d91c4eb5b3da6fd70aff50267fa06016e73f8db45b3df7b45d04537792ca8b50c1543923acb82ce71485cb634ec941a291bcd6a7e23eb5f5af48b202f619be8418c960f0f8e976b5ec3539d0000000000000000000c0000007a637c3d02491e18dd3834737c39575cb76f807bc357872571aeb977d4b40c0a33bc3d5ac973a200b3a0632edf736c3be22bbd427821024090a5d67c1168af7b07ac4553ad66114e7df00c6d2a504363279bf35cbcef833cd97e3775ca0c4b189fbf9c6d3982fd22bf8c7e3c9d24935f0101c22093ee5b419a67ea10b504283d00000000000000000c0000004cfb0e230dbd932dc79cf921d2ac9a3ef6ceba391bcc692efc44403a976fe621883f10661945461cb8891b0a1dba1f17c6c8c400f81bd17755bdcf5d0556571300000000000000000c000000bcdd1e7a95392e681de6372d74dfe76b113a2b77ead4f07d50fed92b3624b8655238f7483ec1a90b44e0937669f6b3696edfa002c30df226f051ad2ee86e956b00000000000000000c00000053c0bf40afaefe6a2dce7345305a020885ce15560cf49f16a43f370c63232b5ddd53e06961f0931b99ca7c0e16279d4a07882662d7b86f5c13b51c1192992255080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000d32a1d30aa81fb39fdd657248213eb1e36f8086c6cbfa925e9f2ce52728aa405c3c3735906ffe02926fcb319296aed6921406e025bd50d0bd2b23a05821a910ed50adb1d5c1c41682db3285f324549318b4238283c21a82b3d9158085653ef4917bddb103fdc4d5b43d76872919ac35265bad6051dbc9e6a382b09420fd6743d2da39d65870e2b7c841e551b8b0ed20525ad832d9ca06104ea96770cfc4c3865e4a83b568d51c92e153f377d3548976b343f3c49c6ccde6456dfdb5970411c6d1e681f71699dcc37ab22ff681bc578606da58d18473cc84e5496bc59aad3e13dbfcf1d13c94f3166906cc01b895531670cae184c3fcc19226138b01bdea8dd6b9717a6447f7f3668b4483c1528d060135da93d6b07166e3da11de173aac4f32e11f4301890acba3bdaaebf5bc1cb591218e47e7b79cf883529239b644f9b93476f913506eb8cba29d8537416c4921e7641afcb37c328ac1c7c27aa5b968ba7660f1cd32511afb0482d752638da45732cbb68894677fa7807f73aab657758f675d64bee0f5d25f54ff69322737b05916fa25d1c7af3efa20a82b52716d63a2a2ce7cf4a101be9336991351f6cbb6a9859e09caf0527dffc14c1c7630be9d1c1070f0eb135e75616723e525c592a02fb4bcb420c34db858a141c370f2c043e3d5d83faf012f90ebd0c9e15c435d3276842db6ef743412f774bd18ae07e34fa606c00000000000000000c0000000e29041af90f0a7022ceb86477d38d747b0bf3222badd16709ef8b282983c72a57a3ec745edaff32bb44d454ef1089117b62eb2d375d9d39712a8917857dc47c6b700a20ca72561aa21b6c1391acc52ff31ab76f741a8f334d6e3c7ad0f72e1324fa3f18f5ab4d2b889b9e0f6bc7b85dc024e50fa8504722b5d54b04cc6e4c5ee54a0b1eab645c2edf08bf4a888f5d0cd7747d7319c96207d83a504d2b34717cb3d5f34448ecbb044bf06215ededd7556af4c71c0491e9247908f3304c0bc462a98dde2cc35375494089927afe2eee6d8370473a37d1ff335c819c62c8136604d1604015b956936daa594f085e9a17628f5be351d589e9171d8f4d561a47825400000000000000000c000000b3c88739badbb303b825d4544b92e800a71c32439b321e3a1ea8b34121fd9c2e242d630850bdad666b9b40184684c54ae020011aeae84671b8debd5ff0826e4f3dd028300514b169a9365e3b41d9376918b15c3d229ac806109b7a42b0d13310889df156d4722e3ad0ad6a4a8f957110e7795a0538debe257e6dbc14211abe2600000000000000000c000000f4843878e746094ff138c83659d2b564fbea7863339df67e1c908a2a1fb7c745cd084a4e8792fd5f124c784239d6a33f86880c41ae78c4420345ff0567d0dc6e00000000000000000c0000008c952243757ea30e8c7cac57a8c3bb79c5267273d8d3d94b459744126c6a4f13080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000d9091a68ef0ad87106031b6d07088261a592de11a4e06c4316dcdc15a2c2bb1322a12231d7007a25bde47c56f8eb03140e35613d490a2818f1493f1ea8f9f209c96734643b9f517e58e0d37d527ba86c9ba5493411044c477c1b083ba2e0dc4298098b0ad745f61956544328b5dd973cffc52e6fd10118037f8aa01e90babf3517c7714742f7ab4e0875ec166494701cadac1b3aa452354a3e1a9027dcd9165762194266f3eaed5945b77734b5b4094cdd10be7ba58b8e78349b4e2424f914792be0e33552fe4f1bd1c08d07fb4e9e093200c304ddfcc0089350ec198ef72461294d164a4448bc5226020c0f0606680223f5254e8011d236f7d03819d4f6437e1919f4744073eb3d8373a90dc611110ff29aee2768d353153938bf7058d8be6c728ff058ff892729e690127b924e525122bb087856677a54d62e3346ddcc5936d9d6202d9d4e9834e19926608d6a441035e21d53502d366676e6af64c7b20c6eee8d4559cbe7d038c947b718b507be17c5796225fc3f272b0660783592de2461c63d7a499f7d1c43b3d6252e3f20bb5e92d814040c256a5ff7dc2d448dc1372e2175540769630c0f745bb55df672634e2c86d23e559e5b655bf0836a1134ae54a5d23302dc3eac2a524af222a708376008524f258633a35ac1ed486458c38945a11e453bb4bb7b08940f1a393d5b951815e6020f2c180a7c780bf47289cbc30208000000000000000c000000ea87db354dcc0b205253c0443a4e123bd4c34411b5ab9e6bf40dc9187a560b2ce20c6a69add246477c581d2076c8291faab28c23b09ef33f78fdde03b59b747901232136534d263529d945637987307d70f4c0502287bf1082a0e200cc45a364672f7a5d64439969ec080e2eae805e4c5833b85f5d5552037ac4d11342d7a21ec0be544552b63925e7ea717b94e0544556155578a5ecc42b77a795693f39f404e9e1e90019864c69fc57d07dc0c2090bc79cde11c4fc8b2b8265ec6e5ad0dc2d5d9922418c3c2b774364572e269d0104df20883b133dd476ecc100204814ea6b519b1840d6b99d0e9e4b6a1d32356c04feacf7681b22bb133d0c12563c01d84404000000000000000c000000762b7866b728cf03b7f4d008a4206d05cd3a545f27ee95041bd7a60fc41b156238bc823f56a8f445ed8fac784a7dd9231e32412d44ea9b0d991bc4334cda843c79627138e17a1064e088120f3df33f152cc22672b709f31e0b14ed59949a7f2c3a7e756f9d5e61715332f8557bf73b14b3738d1a044d26729b7ecc790f0f0a7a02000000000000000c00000074f0e6216913280ec3eece14bce3d6464e67e4263ca7ed0e7cccea4a85b5de4004f4cc560e37076bca245059f2f3de224af2d0497324031e32ddb919c707790901000000000000000c0000007f7dd878ce0ba8107480e429974d294427aaa64debfe6838c02a3234ac07727b", + "proposal_public": "e342561cebe3cc35685c5138a8508a13c6023976c68c5d2fbefb9e32de277f6ed2afca101ca9e44adcdd640f412299284c6b5113", + "proposal_secret": "7a6a5152c26b715cf8f9b321701733dd7f46e3d63e5c843a75cde5e62644561ad2afca101ca9e44adcdd640f412299284c6b511300000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000563bcb03763afa6315fcca2bc7d63e0f1d35134be119ed3569e1e5487f5cc35aadc4476440a2177766cbf02aacc83951126dd57d4a0ba4584bc5ec547a29846cf008424d6b51a120080b5777ddc16c1cd56c3a09869d74448193dc4590883458f441796db303c0691637b861af82b53c97f60205dfdf7a6691e8d032b6c26a4e757f3e73699ed5053f014072e00952426178d72fe17ac47859aea019efc70e4de07e5f3c68be5c50273fbf4fdc1dc02d00d0bd5acb398d5bba25eb2cf13e593cd8512846bf7ab57cabf08d3c389ccc445beaa4724300dd778cd05354f3cb3977d7ab5115b339f643b8d38909aa89c50db0fd073a7ccfb80284b1475f124c191600000000000000000c00000049780b0e2441434a324b71269651e406ebe8f15d86385d0a0589a80d61307678e8b80230bd5eba5f2f09574b958a4c1b6134dc0e4535d61902ca7449b06d306f6de49405f96f3b5e245fae174e635622fab8a26d97ccf8756bd9a9658cd60e6c14b5ca2bb95db66efe56c566a4dc0d106743d301f8006507090fca7534dad61300000000000000000c00000065d267445725af57bdfb1746b9a5406df56da31b951b9e72c739bf01a859922a1dd61e5e4a52e12353234e331b582f31a0d0950f1b0d8c77f5b99276042fcb6400000000000000000c0000004e988072fc21f32744fca810ffe0816718c3a4224f6f5f586e0e6b1362f68c6306ded4174e7ae04124630120f003a733199fca357acca912960188553170991a00000000000000000c000000e342561cebe3cc35685c5138a8508a13c6023976c68c5d2fbefb9e32de277f6e61d8613d7bdbe96171fd877a2c40cd4e1be88c10ed2f7c75bb06f90e5d657e7b080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000006892b530162fc24011f9800c6520ee710e94071877e5d320c3867014c1c89856b12eb629a0f864022eac2155af47bf541b1e623db5d5f31ddf6dbb2f78f6206e2cd46b285b7f3c3d6b3fb41b12b53640333ca45a1c31b251857c400fa867480206312a49aea2ff64bbe1c83149bcce708425b246fc6d8748d4e92d120a304a4818330c6c45536359bed01849e92cd454b9e6b11d27355255990c7d1689f3541686d318019e7a323af80a8f23742e29422950b3114fcb7f121ceac53ac339760eab1cf90bbbf08b2ba2ac7c28b752e011238b9f0afd6ce733d93bf813d036cf68dce26b3db7435168fc05910806c7bf74c88a2b02c2527b009924b46cc9fc4b2aa24c863400bd2533bb7e8a0882f9d25d5dd8ad3db8519d2ec043c16990b432763be10727ccc86b0fe30a8f301b368b375e276c01e4a022000e8a5745bc10176ee5acc21a7de67730e9dd9b69d7898c5e1bb8db0c2695b66ddff8ea38a7282e404b7ef44b2a8ee344fa3db80da17aa337a1e36e76af79e95cb22ba4641344093a4a9d052a327d83616876345a57f0d4131245c468c77d150e5c1419217227835223f345113e53782a49ce22523429cb6e7039b85c9e8be43fc22936047fe53f6ecec0e831ce5990320e8b6949efc142002e8adb553c327e6d5a8e4b5b3a71814e7da08f538e34493e967a3007ba90e93d8be0a3114a07865d95042e30cc5e2f7c00000000000000000c0000004db57d32e20fbf37209dcc4c767c811f3b81123f1225407339ac92115d128a7bfdcee750d1db4c568d4a497d48e6e61cffd522572560fc6ffa128e649bdf7e758185da3ca6d92c2abd4d7357f4a3c130bc7c8e1bd98d196735db1b30c59efd7127719b32b106e15a0af624488d08643ef47d32266015e1184747414149728825f1520a4bb0e14c566a264d49f949e27765813529f814313491d092616747bd76bbdf5b4abc17886daeb75967906c3e5fb587d44c1eb12679e89ae21a4f4c526aa8e698590cc3901f45796f10d1b8047a9a7f0467a13c9760a01ee06e82b1fa0db9641355c21c730be641837e980b974ca6fcc819b445bc630f0cbd48ea6cf12500000000000000000c0000007d740a3a7440e02a7231e200f5d1a661d66a8e173b786a183e21fe227aa1dd68dad83754ad70966941fefe13ec5e3e094ea0c843d1373010d433be2b487e0f5dc844461aaaa5a80b5dde5869ae7c4936101a956f116b3d3fd54b296ca54d48710284542f2fd26574a820c8121eb5bc0b81c8176ec13e585d1d4109512cc5db4500000000000000000c0000009ac5830b38861c4a8508e309e4151b31967d0a4348a6ec678fda2e52dfce3d269d02504e39d2777b18e92c1b47ae7012f79cff2fdfaa826802abf07dca99150400000000000000000c000000563bcb03763afa6315fcca2bc7d63e0f1d35134be119ed3569e1e5487f5cc35a080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000005d458113593a4202215a396f3dfaf0622b50fd68f47f4e28aac9a41c6744517cdea0d73dd58f9a5a33a8a8010667394519df6a7039f462227322c867d7cdb45c25bc646a5f175f77137db5312a0c58270f94d13640bb064dbe09a226300c661c0c7bc06cdf5f790f97d3a62ee8da1f5ac11c3b57c0ab50223afd455c6573f631d978a61b446d650cc025b50c02349032e46016748b3f522ac0cded3bc972b73af87dbb58dff721311c1fb5355753ac3cc5e70d41b647f04aba23cc107c9fe45bbd44624209bf7e7e7c2d8343af3f31205f8cb56fc0ec5f4e4b077f7589576710ccc4dc5f25f8682aca47002f392a800294c65c6dfbe5cd476880b6187bbca321ec93f566dd46904173ef536c0fb4e6732aba4b0d1723492f6e7df03783f078590472ef3667925177dd15a93abe991615fef8d975b17baa30b24dea46cfb0ee1c881dbc756537f9208aae024c323d603c7480a12c6edf8e43ca41db535aa2fa582c94e476ff48b95476de2e37b2449709d54cd37d2586e32fbbdcbc141fc38e128c3f61372f1cf920182d1806ba4b5f506033f7213e1d18468d6f6878164d607333a7fb4005d59b11376194504a03066b9b25a243765df538327dab762c3666522e27703816731b4af83f6a45df827f40a2f2cc5989a0697e15bab66576b3a6549da5b004f0b2077da6649639186b8e1af2123d724a362e2d5bb7d67933c0816f08000000000000000c0000001da3907587bcfd28516f0b375aad6f2ee98ac80dc6df877b392d6b0a9e5bc34f34254574367d33308aae8d57826eee02d9288260011daf75688ead34254e2538ef6040673c5e705350d6856d5080eb797d7f0d2348724f64af598736791563371873160f0c0e9a5be069786863b0011b3245fb6238741460908ecc3884deec64767ce621a8f2701b5c3ade251fefc47cb2d5fa2ceccec15dea0a6d6475345c1ef1917b4f2b341156986e8d6afd62927cd0f425635549d724ca77ad0526ea3b2b55b31735ec6587221eabd178804c3f71b6648c032cc0441eaf8bb832da6a2133763c9c4bb04c8f1da59ab1707351986d1e32b4709209c71c7014d66e3d01d30204000000000000000c000000256aef093f6edd7051989e493a569c1acea5a6106b27a2207c21a75ffc06f3562b6d09387bb2981640dc3959e7b4b92336e34c74d9a64b420ee73313ee546f2d437b267b7fbec2526fee1d54bfb17b1af13fc9654a3cd5166511eb150168e92f20b5ff18679343465a68407945d0b838dc364d7054bab4742ad974682475c53c02000000000000000c0000009238cf272b098c46b88ffc0f008952577f164e1fc608b45d7fdef43470c8c250044e5c655ee71f6cc9399e401d7d2c7480e1217cf5cd191158da6425829b946a01000000000000000c000000adc4476440a2177766cbf02aacc83951126dd57d4a0ba4584bc5ec547a29846c" } \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 4c108d7d..5fb7e534 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ requires-python = ">=3.12" dependencies = [ "pydantic>=2.12.0,<3", "typing-extensions>=4.4", - "lean-multisig-py>=0.1.0", + "lean-multisig-py>=0.0.1", "httpx>=0.28.0,<1", "aiohttp>=3.11.0,<4", "cryptography>=46.0.0", @@ -117,6 +117,8 @@ timeout = 300 [tool.coverage.run] source = ["src"] branch = true + +[tool.coverage.report] fail_under = 80 [tool.mdformat] @@ -131,18 +133,18 @@ members = ["packages/*"] [tool.uv.sources] lean-ethereum-testing = { workspace = true } -lean-multisig-py = { git = "https://github.com/anshalshukla/leanMultisig-py", branch = "devnet2" } +lean-multisig-py = { git = "https://github.com/anshalshukla/leanMultisig-py", branch = "devnet4" } [dependency-groups] test = [ "pytest>=8.3.3,<9", "pytest-cov>=6.0.0,<7", "pytest-xdist>=3.6.1,<4", - "pytest-asyncio>=0.24.0,<1", + "pytest-asyncio>=1.0.0", "pytest-timeout>=2.2.0,<3", "hypothesis>=6.138.14", "lean-ethereum-testing", - "lean-multisig-py>=0.1.0", + "lean-multisig-py>=0.0.1", "pycryptodome>=3.20.0,<4", ] lint = [ diff --git a/src/lean_spec/subspecs/containers/__init__.py b/src/lean_spec/subspecs/containers/__init__.py index d5588d5b..6dffe32d 100644 --- a/src/lean_spec/subspecs/containers/__init__.py +++ b/src/lean_spec/subspecs/containers/__init__.py @@ -5,7 +5,7 @@ efficient merkleization. Hash functions used for merkleization differ by devnet. Early devnets use -SHA256. Later devnets will switch to Poseidon2 for better SNARK compatibility. +SHA256. Later devnets will switch to Poseidon1 for better SNARK compatibility. """ from .attestation import ( diff --git a/src/lean_spec/subspecs/containers/state/state.py b/src/lean_spec/subspecs/containers/state/state.py index f21b06f9..fae56186 100644 --- a/src/lean_spec/subspecs/containers/state/state.py +++ b/src/lean_spec/subspecs/containers/state/state.py @@ -774,7 +774,6 @@ def aggregate( attestation_signatures: dict[AttestationData, set[AttestationSignatureEntry]] | None = None, new_payloads: dict[AttestationData, set[AggregatedSignatureProof]] | None = None, known_payloads: dict[AttestationData, set[AggregatedSignatureProof]] | None = None, - recursive: bool = False, ) -> list[tuple[AggregatedAttestation, AggregatedSignatureProof]]: """ Aggregate gossip signatures using new payloads, with known payloads as helpers. @@ -783,9 +782,6 @@ def aggregate( attestation_signatures: Raw XMSS signatures from gossip, keyed by attestation data. new_payloads: Aggregated proofs pending processing (child proofs). known_payloads: Known aggregated proofs already accepted. - recursive: If True, greedily select child proofs from new/known payloads to - extend aggregation. If False, only attestation_signatures are used (bindings - do not support recursive aggregation yet). Returns: List of (attestation, proof) pairs from aggregation. @@ -795,75 +791,47 @@ def aggregate( new_payloads = new_payloads or {} known_payloads = known_payloads or {} - if recursive: - # Recursive aggregation: extend with child proofs from new/known payloads. - # Once bindings support recursive aggregation, keep this path and remove the - # plain block below. - attestation_keys = set(new_payloads.keys()) | set(gossip_signatures.keys()) - if not attestation_keys: - return results - for data in attestation_keys: - child_proofs: list[AggregatedSignatureProof] = [] - covered_validators: set[ValidatorIndex] = set() - self._extend_proofs_greedily( - new_payloads.get(data), child_proofs, covered_validators - ) - self._extend_proofs_greedily( - known_payloads.get(data), child_proofs, covered_validators - ) - raw_entries = [] - for entry in sorted( - gossip_signatures.get(data, set()), key=lambda e: e.validator_id - ): - if entry.validator_id in covered_validators: - continue - public_key = self.validators[entry.validator_id].get_attestation_pubkey() - raw_entries.append((entry.validator_id, public_key, entry.signature)) - covered_validators.add(entry.validator_id) - if not raw_entries and len(child_proofs) < 2: - continue - raw_entries = sorted(raw_entries, key=lambda e: e[0]) - raw_xmss = [(pk, sig) for _, pk, sig in raw_entries] - xmss_participants = AggregationBits.from_validator_indices( - ValidatorIndices(data=[e[0] for e in raw_entries]) - ) - proof = AggregatedSignatureProof.aggregate( - xmss_participants=xmss_participants, - children=child_proofs, - raw_xmss=raw_xmss, - message=data.data_root_bytes(), - slot=data.slot, - ) - attestation = AggregatedAttestation(aggregation_bits=proof.participants, data=data) - results.append((attestation, proof)) - else: - # Plain aggregation: only attestation_signatures. Remove this block once - # bindings support recursive aggregation. - attestation_keys = set(gossip_signatures.keys()) - if not attestation_keys: - return results - for data in attestation_keys: - raw_entries = [] - for entry in sorted( - gossip_signatures.get(data, set()), key=lambda e: e.validator_id - ): - public_key = self.validators[entry.validator_id].get_attestation_pubkey() - raw_entries.append((entry.validator_id, public_key, entry.signature)) - if not raw_entries: + attestation_keys = set(new_payloads.keys()) | set(gossip_signatures.keys()) + if not attestation_keys: + return results + for data in attestation_keys: + child_proofs: list[AggregatedSignatureProof] = [] + covered_validators: set[ValidatorIndex] = set() + self._extend_proofs_greedily(new_payloads.get(data), child_proofs, covered_validators) + self._extend_proofs_greedily(known_payloads.get(data), child_proofs, covered_validators) + raw_entries = [] + for entry in sorted(gossip_signatures.get(data, set()), key=lambda e: e.validator_id): + if entry.validator_id in covered_validators: continue - raw_entries = sorted(raw_entries, key=lambda e: e[0]) - raw_xmss = [(pk, sig) for _, pk, sig in raw_entries] - xmss_participants = AggregationBits.from_validator_indices( - ValidatorIndices(data=[e[0] for e in raw_entries]) - ) - proof = AggregatedSignatureProof.aggregate( - xmss_participants=xmss_participants, - children=[], - raw_xmss=raw_xmss, - message=data.data_root_bytes(), - slot=data.slot, + public_key = self.validators[entry.validator_id].get_attestation_pubkey() + raw_entries.append((entry.validator_id, public_key, entry.signature)) + covered_validators.add(entry.validator_id) + if not raw_entries and len(child_proofs) < 2: + continue + raw_entries = sorted(raw_entries, key=lambda e: e[0]) + raw_xmss = [(pk, sig) for _, pk, sig in raw_entries] + xmss_participants = AggregationBits.from_validator_indices( + ValidatorIndices(data=[e[0] for e in raw_entries]) + ) + + children = [ + ( + child, + [ + self.validators[vid].get_attestation_pubkey() + for vid in child.participants.to_validator_indices() + ], ) - attestation = AggregatedAttestation(aggregation_bits=proof.participants, data=data) - results.append((attestation, proof)) + for child in child_proofs + ] + proof = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=children, + raw_xmss=raw_xmss, + message=data.data_root_bytes(), + slot=data.slot, + ) + attestation = AggregatedAttestation(aggregation_bits=proof.participants, data=data) + results.append((attestation, proof)) return results diff --git a/src/lean_spec/subspecs/forkchoice/store.py b/src/lean_spec/subspecs/forkchoice/store.py index b9b5e6f0..2fb1de76 100644 --- a/src/lean_spec/subspecs/forkchoice/store.py +++ b/src/lean_spec/subspecs/forkchoice/store.py @@ -919,86 +919,42 @@ def update_safe_target(self) -> "Store": # The head and attestation pools remain unchanged. return self.model_copy(update={"safe_target": safe_target}) - def aggregate( - self, recursive: bool = False - ) -> tuple["Store", list[SignedAggregatedAttestation]]: + def aggregate(self) -> tuple["Store", list[SignedAggregatedAttestation]]: """ Aggregate committee signatures and payloads together. This method aggregates signatures from the attestation_signatures map. - Args: - recursive: When True, previously produced payloads are only used as inputs - during recursive aggregation and are not carried forward to the next interval. - Returns: Tuple of (new Store with updated payloads, list of new SignedAggregatedAttestation). """ head_state = self.states[self.head] - if recursive: - # Recursive aggregation: state uses new/known payloads; do not carry - # forward existing new payloads. Once bindings support recursive aggregation, - # keep this path and remove the else block below. - aggregated_results = head_state.aggregate( - attestation_signatures=self.attestation_signatures, - new_payloads=self.latest_new_aggregated_payloads, - known_payloads=self.latest_known_aggregated_payloads, - recursive=True, - ) - new_aggregates: list[SignedAggregatedAttestation] = [] - new_aggregated_payloads: dict[AttestationData, set[AggregatedSignatureProof]] = {} - aggregated_attestation_data: set[AttestationData] = set() - for att, proof in aggregated_results: - aggregated_attestation_data.add(att.data) - new_aggregates.append(SignedAggregatedAttestation(data=att.data, proof=proof)) - new_aggregated_payloads.setdefault(att.data, set()).add(proof) - remaining_attestation_signatures = { - attestation_data: signatures - for attestation_data, signatures in self.attestation_signatures.items() - if attestation_data not in aggregated_attestation_data - } - return self.model_copy( - update={ - "latest_new_aggregated_payloads": new_aggregated_payloads, - "attestation_signatures": remaining_attestation_signatures, - } - ), new_aggregates - else: - # Plain aggregation: only attestation_signatures. TODO: Remove this block once - # bindings support recursive aggregation. - # - # Freshly aggregated proofs go directly to latest_known because they are - # our own aggregation output and can be used immediately for block building - # and fork choice. Proofs from on_gossip_aggregated_attestation remain in - # latest_new until accepted at interval 4. - aggregated_results = head_state.aggregate( - attestation_signatures=self.attestation_signatures, - new_payloads=None, - known_payloads=None, - recursive=False, - ) - new_aggregates = [] - new_aggregated_payloads = { - attestation_data: set(proofs) - for attestation_data, proofs in self.latest_known_aggregated_payloads.items() - } - aggregated_attestation_data = set() - for att, proof in aggregated_results: - aggregated_attestation_data.add(att.data) - new_aggregates.append(SignedAggregatedAttestation(data=att.data, proof=proof)) - new_aggregated_payloads.setdefault(att.data, set()).add(proof) - remaining_attestation_signatures = { - attestation_data: signatures - for attestation_data, signatures in self.attestation_signatures.items() - if attestation_data not in aggregated_attestation_data + aggregated_results = head_state.aggregate( + attestation_signatures=self.attestation_signatures, + new_payloads=self.latest_new_aggregated_payloads, + known_payloads=self.latest_known_aggregated_payloads, + ) + + new_aggregates: list[SignedAggregatedAttestation] = [] + new_aggregated_payloads: dict[AttestationData, set[AggregatedSignatureProof]] = {} + aggregated_attestation_data: set[AttestationData] = set() + for att, proof in aggregated_results: + aggregated_attestation_data.add(att.data) + new_aggregates.append(SignedAggregatedAttestation(data=att.data, proof=proof)) + new_aggregated_payloads.setdefault(att.data, set()).add(proof) + remaining_attestation_signatures = { + attestation_data: signatures + for attestation_data, signatures in self.attestation_signatures.items() + if attestation_data not in aggregated_attestation_data + } + + return self.model_copy( + update={ + "latest_new_aggregated_payloads": new_aggregated_payloads, + "attestation_signatures": remaining_attestation_signatures, } - return self.model_copy( - update={ - "latest_new_aggregated_payloads": new_aggregated_payloads, - "attestation_signatures": remaining_attestation_signatures, - } - ), new_aggregates + ), new_aggregates def tick_interval( self, has_proposal: bool, is_aggregator: bool = False diff --git a/src/lean_spec/subspecs/networking/config.py b/src/lean_spec/subspecs/networking/config.py index 3a8a6edc..258865cb 100644 --- a/src/lean_spec/subspecs/networking/config.py +++ b/src/lean_spec/subspecs/networking/config.py @@ -47,7 +47,7 @@ GOSSIPSUB_PROTOCOL_ID_V12: Final = ProtocolId("/meshsub/1.2.0") """Gossipsub v1.2 protocol ID - IDONTWANT bandwidth optimization.""" -GOSSIPSUB_DEFAULT_PROTOCOL_ID: Final = GOSSIPSUB_PROTOCOL_ID_V11 +GOSSIPSUB_DEFAULT_PROTOCOL_ID: Final = GOSSIPSUB_PROTOCOL_ID_V12 """ Default protocol ID per Ethereum consensus spec requirements. diff --git a/src/lean_spec/subspecs/poseidon1/__init__.py b/src/lean_spec/subspecs/poseidon1/__init__.py new file mode 100644 index 00000000..04f4932f --- /dev/null +++ b/src/lean_spec/subspecs/poseidon1/__init__.py @@ -0,0 +1,15 @@ +"""Specification for the Poseidon1 permutation.""" + +from .permutation import ( + PARAMS_16, + PARAMS_24, + Poseidon1, + Poseidon1Params, +) + +__all__ = [ + "Poseidon1", + "Poseidon1Params", + "PARAMS_16", + "PARAMS_24", +] diff --git a/src/lean_spec/subspecs/poseidon1/constants.py b/src/lean_spec/subspecs/poseidon1/constants.py new file mode 100644 index 00000000..39c4159b --- /dev/null +++ b/src/lean_spec/subspecs/poseidon1/constants.py @@ -0,0 +1,1219 @@ +"""Round constants for the Poseidon1 permutation over the KoalaBear field.""" + +from __future__ import annotations + +from ..koalabear.field import Fp + +# For width 16: 28 rounds x 16 = 448 constants +# Layout: initial_full (4 x 16) + partial (20 x 16) + terminal_full (4 x 16) +_RAW_CONSTANTS_16: list[int] = [ + # Initial full rounds (4 rounds x 16 constants) + 0x7EE56A48, + 0x11367045, + 0x12E41941, + 0x7EBBC12B, + 0x1970B7D5, + 0x662B60E8, + 0x3E4990C6, + 0x679F91F5, + 0x350813BB, + 0x00874AD4, + 0x28A0081A, + 0x18FA5872, + 0x5F25B071, + 0x5E5D5998, + 0x5E6FD3E7, + 0x5B2E2660, + 0x6F1837BF, + 0x3FE6182B, + 0x1EDD7AC5, + 0x57470D00, + 0x43D486D5, + 0x1982C70F, + 0x0EA53AF9, + 0x61D6165B, + 0x51639C00, + 0x2DEC352C, + 0x2950E531, + 0x2D2CB947, + 0x08256CEF, + 0x1A0109F6, + 0x1F51FAF3, + 0x5CEF1C62, + 0x3D65E50E, + 0x33D91626, + 0x133D5A1E, + 0x0FF49B0D, + 0x38900CD1, + 0x2C22CC3F, + 0x28852BB2, + 0x06C65A02, + 0x7B2CF7BC, + 0x68016E1A, + 0x15E16BC0, + 0x5248149A, + 0x6DD212A0, + 0x18D6830A, + 0x5001BE82, + 0x64DAC34E, + 0x5902B287, + 0x426583A0, + 0x0C921632, + 0x3FE028A5, + 0x245F8E49, + 0x43BB297E, + 0x7873DBD9, + 0x3CC987DF, + 0x286BB4CE, + 0x640A8DCD, + 0x512A8E36, + 0x03A4CF55, + 0x481837A2, + 0x03D6DA84, + 0x73726AC7, + 0x760E7FDF, + # Partial rounds (20 rounds x 16 constants) + 0x54DFEB5D, + 0x7D40AFD6, + 0x722CB316, + 0x106A4573, + 0x45A7CCDB, + 0x44061375, + 0x154077A5, + 0x45744FAA, + 0x4EB5E5EE, + 0x3794E83F, + 0x47C7093C, + 0x5694903C, + 0x69CB6299, + 0x373DF84C, + 0x46A0DF58, + 0x46B8758A, + 0x3241EBCB, + 0x0B09D233, + 0x1AF42357, + 0x1E66CEC2, + 0x43E7DC24, + 0x259A5D61, + 0x27E85A3B, + 0x1B9133FA, + 0x343E5628, + 0x485CD4C2, + 0x16E269F5, + 0x165B60C6, + 0x25F683D9, + 0x124F81F9, + 0x174331F9, + 0x77344DC5, + 0x5A821DBA, + 0x5FC4177F, + 0x54153BF5, + 0x5E3F1194, + 0x3BDBF191, + 0x088C84A3, + 0x68256C9B, + 0x3C90BBC6, + 0x6846166A, + 0x03F4238D, + 0x463335FB, + 0x5E3D3551, + 0x6E59AE6F, + 0x32D06CC0, + 0x596293F3, + 0x6C87EDB2, + 0x08FC60B5, + 0x34BCCA80, + 0x24F007F3, + 0x62731C6F, + 0x1E1DB6C6, + 0x0CA409BB, + 0x585C1E78, + 0x56E94EDC, + 0x16D22734, + 0x18E11467, + 0x7B2C3730, + 0x770075E4, + 0x35D1B18C, + 0x22BE3DB5, + 0x4FB1FBB7, + 0x477CB3ED, + 0x7D5311C6, + 0x5B62AE7D, + 0x559C5FA8, + 0x77F15048, + 0x3211570B, + 0x490FEF6A, + 0x77EC311F, + 0x2247171B, + 0x4E0AC711, + 0x2EDF69C9, + 0x3B5A8850, + 0x65809421, + 0x5619B4AA, + 0x362019A7, + 0x6BF9D4ED, + 0x5B413DFF, + 0x617E181E, + 0x5E7AB57B, + 0x33AD7833, + 0x3466C7CA, + 0x6488DFF4, + 0x71F068F4, + 0x056E891F, + 0x04F1ECCC, + 0x663257D5, + 0x671E31B9, + 0x5871987C, + 0x280C109E, + 0x2A227761, + 0x350A25E9, + 0x5B91B1C4, + 0x7A073546, + 0x01826270, + 0x53A67720, + 0x0ED4B074, + 0x34CF0C4E, + 0x6E751E88, + 0x29BD5F59, + 0x49EC32DF, + 0x7693452B, + 0x3CF09E58, + 0x6BA0E2BF, + 0x7AB93ACF, + 0x3CE597DF, + 0x536E3D42, + 0x147A808D, + 0x5E32EB56, + 0x5A203323, + 0x50965766, + 0x6D44B7C5, + 0x6698636A, + 0x57B84F9F, + 0x554B61B9, + 0x6DA0AB28, + 0x1585B6AC, + 0x6705A2B4, + 0x152872F6, + 0x0F4409FD, + 0x23A9DD60, + 0x6F2B18D4, + 0x65AC9FD4, + 0x2F0EFBEA, + 0x591E67FD, + 0x217CA19B, + 0x469C90CA, + 0x03D60EF5, + 0x4EA7857E, + 0x07C86A4F, + 0x288ED461, + 0x2FE51B22, + 0x7E293614, + 0x2C4BEB85, + 0x5B0B7D11, + 0x1E17DFF6, + 0x089BEAE1, + 0x0A5ACF1A, + 0x2FC33D8F, + 0x60422DC6, + 0x6E1DC939, + 0x635351B9, + 0x55522FC0, + 0x3EB94EF7, + 0x2A24A65C, + 0x2E139C76, + 0x51391144, + 0x78CC0742, + 0x579538F9, + 0x44DE9AAE, + 0x3C2F1E2E, + 0x195747BE, + 0x2496339C, + 0x650B2E39, + 0x52899665, + 0x6CB35558, + 0x0F461C1C, + 0x70F6B270, + 0x3FAAA36F, + 0x62E3348A, + 0x672167CB, + 0x394C880B, + 0x2A46BA82, + 0x63FFB74A, + 0x1CF875D6, + 0x53D12772, + 0x036A4552, + 0x3BDD9F2B, + 0x02F72C24, + 0x02B6006C, + 0x077FE158, + 0x1F9D6EA4, + 0x20904D6F, + 0x5D6534FA, + 0x066D8974, + 0x6198F1F4, + 0x26301AB4, + 0x41F274C2, + 0x00EAC15C, + 0x28B54B47, + 0x2339739D, + 0x48C6281C, + 0x4ED935FC, + 0x3F9187FA, + 0x4A1930A6, + 0x3AD4D736, + 0x0F3F1889, + 0x635A388F, + 0x2862C145, + 0x277ED1E8, + 0x4DB23CAD, + 0x1F1B11F5, + 0x1F3DBA2B, + 0x1C26EB4E, + 0x0F7F5546, + 0x6CD024B0, + 0x67C47902, + 0x793B8900, + 0x0E8A283C, + 0x4590B7EA, + 0x6F567A2B, + 0x5DC97300, + 0x15247BC6, + 0x50567FCB, + 0x133EFF84, + 0x547DC2EF, + 0x34EB3DBB, + 0x12402317, + 0x66C6AE49, + 0x174338B6, + 0x24251008, + 0x1B514927, + 0x062D98D6, + 0x7AF30BBC, + 0x26AF15E8, + 0x70D907A3, + 0x5DFC5CAC, + 0x731F27EC, + 0x53AA7D3F, + 0x63AB0EC6, + 0x216053F4, + 0x18796B39, + 0x19156AFD, + 0x5EEA6973, + 0x6704C6A9, + 0x0DCE002B, + 0x331169C0, + 0x714D7178, + 0x3DDAFFAF, + 0x7E464957, + 0x20CA59EA, + 0x679820C9, + 0x42EF21A1, + 0x798EA089, + 0x14A74FA3, + 0x0C06CF18, + 0x6A4C8D52, + 0x620F6D81, + 0x2220901A, + 0x5277BB90, + 0x230BF95E, + 0x0AD8847A, + 0x5E96E8B6, + 0x77B4056E, + 0x70A50D2C, + 0x5F0EED59, + 0x3646C4DF, + 0x10EB9A87, + 0x21EED6B7, + 0x534ADD36, + 0x6E3E7421, + 0x2B25810E, + 0x1D8F707B, + 0x45318A1A, + 0x677F8FF2, + 0x0258C9E0, + 0x4CD02A00, + 0x2E24FF15, + 0x634A715D, + 0x4AC01E59, + 0x601511E1, + 0x26E9C01A, + 0x4C165C6E, + 0x57CD1140, + 0x3AC6543B, + 0x6787D847, + 0x037DFBF9, + 0x6DD9D079, + 0x4D24B281, + 0x2A6F407D, + 0x0131DF8E, + 0x4B8A7896, + 0x23700858, + 0x2CF5E534, + 0x12AAFC3F, + 0x54568D03, + 0x1A250735, + 0x5331686D, + 0x4CE76D91, + 0x799C1A8C, + 0x2B7A8AC9, + 0x60AEE672, + 0x74F7421C, + 0x3C42146D, + 0x26D369C5, + 0x4AE54A12, + 0x7EEA16D1, + 0x5CE3EAE8, + 0x69F28994, + 0x262B8642, + 0x610D4CC4, + 0x5E1AF21C, + 0x1A8526D0, + 0x316B127B, + 0x3576FE5D, + 0x02D968A0, + 0x4BA00F51, + 0x40BED993, + 0x377FB907, + 0x7859216E, + 0x1931D9D1, + 0x53B0934E, + 0x71914FF7, + 0x4EABAE6C, + 0x7196468E, + 0x164B3CC2, + 0x58CB66C0, + 0x4C147307, + 0x6B3AFCCD, + 0x4236518B, + 0x4AD85605, + 0x291382E1, + 0x1E89B6CF, + 0x5E16C3A8, + 0x2E675921, + 0x24300954, + 0x05E555C3, + 0x78880A24, + # Terminal full rounds (4 rounds x 16 constants) + 0x763A3125, + 0x4F53B240, + 0x18B7FA43, + 0x2BBE8A73, + 0x1C9A12F2, + 0x3F6FD40D, + 0x0E1D4EC4, + 0x1361C64D, + 0x09A8F470, + 0x03D23A40, + 0x109AD290, + 0x28C2FB88, + 0x3B6498F2, + 0x74D8BE57, + 0x6A4277D2, + 0x18C2B3D4, + 0x6252C30C, + 0x07CC2560, + 0x209FE15B, + 0x52A55FAC, + 0x4DF19EB7, + 0x02521116, + 0x5E414FF1, + 0x3CD9A1F4, + 0x005AAD15, + 0x27A53F00, + 0x72BBE9CB, + 0x71D8BD7D, + 0x4194B79A, + 0x48E87A72, + 0x3341553C, + 0x63D34FAA, + 0x132A01E3, + 0x3833E2D9, + 0x49726E04, + 0x054957F8, + 0x7B71BCE4, + 0x73EEC57D, + 0x556E5533, + 0x1FA93FDE, + 0x346A8CA8, + 0x1162DFDE, + 0x5C30D028, + 0x094A4294, + 0x3052DCDA, + 0x37988498, + 0x51F06B97, + 0x65848779, + 0x7599B0D4, + 0x436FDABC, + 0x66C5B77D, + 0x40C86A9E, + 0x27E7055B, + 0x6D0DD9D8, + 0x7E5598B5, + 0x1A4D04F3, + 0x5E3B2BC7, + 0x533B5B2F, + 0x3E33A125, + 0x664D71CE, + 0x382E6C2A, + 0x24C4EB6E, + 0x13F246F7, + 0x07E2D7EF, +] + +# For width 24: 31 rounds x 24 = 744 constants +# Layout: initial_full (4 x 24) + partial (23 x 24) + terminal_full (4 x 24) +_RAW_CONSTANTS_24: list[int] = [ + # Initial full rounds (4 rounds x 24 constants) + 0x1D0939DC, + 0x6D050F8D, + 0x628058AD, + 0x2681385D, + 0x3E3C62BE, + 0x032CFAD8, + 0x5A91BA3C, + 0x015A56E6, + 0x696B889C, + 0x0DBCD780, + 0x5881B5C9, + 0x2A076F2E, + 0x55393055, + 0x6513A085, + 0x547AC78F, + 0x4281C5B8, + 0x3E7A3F6C, + 0x34562C19, + 0x2C04E679, + 0x0ED78234, + 0x5F7A1AA9, + 0x0177640E, + 0x0EA4F8D1, + 0x15BE7692, + 0x6EAFDD62, + 0x71A572C6, + 0x72416F0A, + 0x31CE1AD3, + 0x2136A0CF, + 0x1507C0EB, + 0x1EB6E07A, + 0x3A0CCF7B, + 0x38E4BF31, + 0x44128286, + 0x6B05E976, + 0x244A9B92, + 0x6E4B32A8, + 0x78EE2496, + 0x4761115B, + 0x3D3A7077, + 0x75D3C670, + 0x396A2475, + 0x26DD00B4, + 0x7DF50F59, + 0x0CB922DF, + 0x0568B190, + 0x5BD3FCD6, + 0x1351F58E, + 0x52191B5F, + 0x119171B8, + 0x1E8BB727, + 0x27D21F26, + 0x36146613, + 0x1EE817A2, + 0x71ABE84E, + 0x44B88070, + 0x5DC04410, + 0x2AEAA2F6, + 0x2B7BB311, + 0x6906884D, + 0x0522E053, + 0x0C45A214, + 0x1B016998, + 0x479B1052, + 0x3ACC89BE, + 0x0776021A, + 0x7A34A1F5, + 0x70F87911, + 0x2CAF9D9E, + 0x026AFF1B, + 0x2C42468E, + 0x67726B45, + 0x09B6F53C, + 0x73D76589, + 0x5793EEB0, + 0x29E720F3, + 0x75FC8BDF, + 0x4C2FAE0E, + 0x20B41DB3, + 0x7E491510, + 0x2CADEF18, + 0x57FC24D6, + 0x4D1ADE4A, + 0x36BF8E3C, + 0x3511B63C, + 0x64D8476F, + 0x732BA706, + 0x46634978, + 0x0521C17C, + 0x5EE69212, + 0x3559CBA9, + 0x2B33DF89, + 0x653538D6, + 0x5FDE8344, + 0x4091605D, + 0x2933BDDE, + # Partial rounds (23 rounds x 24 constants) + 0x1395D4CA, + 0x5DBAC049, + 0x51FC2727, + 0x13407399, + 0x39AC6953, + 0x45E8726C, + 0x75A7311C, + 0x599F82C9, + 0x702CF13B, + 0x026B8955, + 0x44E09BBC, + 0x2211207F, + 0x5128B4E3, + 0x591C41AF, + 0x674F5C68, + 0x3981D0D3, + 0x2D82F898, + 0x707CD267, + 0x3B4CCA45, + 0x2AD0DC3C, + 0x0CB79B37, + 0x23F2F4E8, + 0x3DE4E739, + 0x7D232359, + 0x389D82F9, + 0x259B2E6C, + 0x45A94DEF, + 0x0D497380, + 0x5B049135, + 0x3C268399, + 0x78FEB2F9, + 0x300A3EEC, + 0x505165BB, + 0x20300973, + 0x2327C081, + 0x1A45A2F4, + 0x5B32EA2E, + 0x2D5D1A70, + 0x053E613E, + 0x5433E39F, + 0x495529F0, + 0x1EAA1AA9, + 0x578F572A, + 0x698EDE71, + 0x5A0F9DBA, + 0x398A2E96, + 0x0C7B2925, + 0x2E6B9564, + 0x026B00DE, + 0x7644C1E9, + 0x5C23D0BD, + 0x3470B5EF, + 0x6013CF3A, + 0x48747288, + 0x13B7A543, + 0x3EAEBD44, + 0x0004E60C, + 0x1E8363A2, + 0x2343259A, + 0x69DA0C2A, + 0x06E3E4C4, + 0x1095018E, + 0x0DEEA348, + 0x1F4C5513, + 0x4F9A3A98, + 0x3179112B, + 0x524ABB1F, + 0x21615BA2, + 0x23AB4065, + 0x1202A1D1, + 0x21D25B83, + 0x6ED17C2F, + 0x391E6B09, + 0x5E4ED894, + 0x6A2F58F2, + 0x5D980D70, + 0x3FA48C5E, + 0x1F6366F7, + 0x63540F5F, + 0x6A8235ED, + 0x14C12A78, + 0x6EDDE1C9, + 0x58CE1C22, + 0x718588BB, + 0x334313AD, + 0x7478DBC7, + 0x647AD52F, + 0x39E82049, + 0x6FEE146A, + 0x082C2F24, + 0x1F093015, + 0x30173C18, + 0x53F70C0D, + 0x6028AB0C, + 0x2F47A1EE, + 0x26A6780E, + 0x3540BC83, + 0x1812B49F, + 0x5149C827, + 0x631DD925, + 0x001F2DEA, + 0x7DC05194, + 0x3789672E, + 0x7CABF72E, + 0x242DBE2F, + 0x0B07A51D, + 0x38653650, + 0x50785C4E, + 0x60E8A7E0, + 0x07464338, + 0x3482D6E1, + 0x08A69F1E, + 0x3F2AFF24, + 0x5814C30D, + 0x13FECAB2, + 0x61CB291A, + 0x68C8226F, + 0x5C757EEA, + 0x289B4E1E, + 0x0198D9B3, + 0x070A92E6, + 0x2F1B6CB3, + 0x535008BB, + 0x35AF339A, + 0x7A38E92C, + 0x4FF71B5C, + 0x3B193ABA, + 0x34D12A1E, + 0x17E94240, + 0x2EC214DC, + 0x43E09385, + 0x7D546918, + 0x71AF9DFD, + 0x761A21BB, + 0x43FDC986, + 0x05DDA714, + 0x2D0E78B5, + 0x1FCD387B, + 0x76E10A76, + 0x28A112D5, + 0x1A7BD787, + 0x40190DE2, + 0x2E27906A, + 0x2033954E, + 0x20AFD2C8, + 0x71B5ECB2, + 0x57828FB3, + 0x222851D8, + 0x732DF0E9, + 0x73F48435, + 0x7E63EA98, + 0x058BE348, + 0x229E7A5F, + 0x04576A2F, + 0x29939F10, + 0x7AFD830A, + 0x5D6DD961, + 0x0EB65D94, + 0x39DA2B79, + 0x36BCE8BA, + 0x5F53A7D4, + 0x383B1CD2, + 0x1FDC3C5F, + 0x7D9CA544, + 0x77480711, + 0x36C51A1A, + 0x009EA59B, + 0x731B17FD, + 0x201359BD, + 0x22BF6499, + 0x610F1A29, + 0x3C73AA45, + 0x6A092599, + 0x1C7CB703, + 0x79533459, + 0x7EF62D86, + 0x5AB925AB, + 0x67722AB1, + 0x33CA4CFF, + 0x007F7DCE, + 0x0EEAC41E, + 0x4724BEA7, + 0x45EAF64F, + 0x21A6C90F, + 0x094B4150, + 0x0D942630, + 0x18712C30, + 0x3A470338, + 0x6EBA7720, + 0x487827C8, + 0x77013A6D, + 0x4AD07390, + 0x57D802EA, + 0x720F5FD4, + 0x5B8A5357, + 0x3649DB1F, + 0x35EA476A, + 0x4C6589F5, + 0x02C9F31F, + 0x16D04670, + 0x62D74B20, + 0x1DE813CC, + 0x189966ED, + 0x527ADD06, + 0x1704F5AF, + 0x000F1703, + 0x00152A1F, + 0x2F49A365, + 0x40EE4288, + 0x0AB86260, + 0x080C8576, + 0x36C6CC05, + 0x0AB9346F, + 0x62AA3EC8, + 0x51109797, + 0x0FEB1585, + 0x04700024, + 0x01DEE723, + 0x5CD4AAA8, + 0x1FE43CE5, + 0x25C31267, + 0x58512B48, + 0x54147539, + 0x4E340AB9, + 0x563FBAEB, + 0x60C8353A, + 0x65A12D49, + 0x6C499FB2, + 0x7EA07556, + 0x396E2BBB, + 0x31A318F1, + 0x11F855AE, + 0x6EDFFB87, + 0x59977042, + 0x6EC5FA94, + 0x75B4F690, + 0x44B6FC61, + 0x02A8BED8, + 0x4C88C824, + 0x08E31432, + 0x09A4C09F, + 0x4796B47D, + 0x215B7E75, + 0x0C639599, + 0x0D93DD4C, + 0x2FAC41DE, + 0x4F46DADD, + 0x03905848, + 0x2B1C39C1, + 0x25FFF199, + 0x38621F7B, + 0x69E59315, + 0x1874C308, + 0x024A3959, + 0x2BAE1F12, + 0x3C200626, + 0x6BA5D369, + 0x2FE9B97E, + 0x674CC08E, + 0x2CBB9657, + 0x550E56C2, + 0x5B80E0EC, + 0x6549CCFF, + 0x54E3E61A, + 0x0FA689E3, + 0x2C534848, + 0x1EB24382, + 0x61B959B5, + 0x4D5F001E, + 0x003A95CD, + 0x1EDD4507, + 0x621E895D, + 0x7DC6E599, + 0x0FBC2771, + 0x152D0879, + 0x77801087, + 0x6A2DD731, + 0x3644ABA2, + 0x2E43A814, + 0x12FF923F, + 0x01CFE2C9, + 0x35F8A572, + 0x5789FD35, + 0x16F39E7A, + 0x7C0CA31C, + 0x01016283, + 0x2C9DCD96, + 0x5D3C6F4E, + 0x0058A186, + 0x16354360, + 0x502A262B, + 0x2B56F93E, + 0x0BC41ECB, + 0x33C83E8B, + 0x21968FC3, + 0x6364490C, + 0x16A45AA5, + 0x286D873F, + 0x2BE17254, + 0x381FBC06, + 0x0DF309AA, + 0x15D48B84, + 0x0FB2C5DD, + 0x7C440D21, + 0x74908F00, + 0x75520624, + 0x7E58F065, + 0x141E1E41, + 0x6582F4AE, + 0x2C4479E5, + 0x7A09FFF8, + 0x1BAA979F, + 0x45AB39BD, + 0x774F78BC, + 0x3C5F9AA2, + 0x115D9DC9, + 0x4B1546D7, + 0x196C1A55, + 0x6A88FB5E, + 0x4C1CA910, + 0x34869067, + 0x2662DCBB, + 0x0A4625D4, + 0x25B121C8, + 0x1A50CCD2, + 0x490EA316, + 0x42556FFA, + 0x6B5E4F88, + 0x329FAF33, + 0x54F39A88, + 0x3B411E09, + 0x6950AE8E, + 0x310A912C, + 0x63BDDCBA, + 0x347977C0, + 0x52831335, + 0x41F32FC6, + 0x67DD5ACB, + 0x41AE544E, + 0x1D83750A, + 0x4BB58D20, + 0x2F5496EE, + 0x353819EC, + 0x412EE425, + 0x1BFD2747, + 0x32A14699, + 0x2F7BE906, + 0x38AFDA41, + 0x5B1E6316, + 0x7B810B48, + 0x6AEBB30D, + 0x55D94F89, + 0x69DB4833, + 0x3A6ECB6C, + 0x50E7D206, + 0x148A4B69, + 0x1AC5548D, + 0x40019CF9, + 0x1E566F2A, + 0x0998A950, + 0x5BC887F0, + 0x73FBBD18, + 0x341E05A8, + 0x7D0597D5, + 0x582308D9, + 0x7A98ADDF, + 0x0938B854, + 0x544BF13D, + 0x50090144, + 0x13BAF374, + 0x1896A8D5, + 0x75EA7475, + 0x23510DD8, + 0x72C93BCC, + 0x1C41410E, + 0x4B72D5F9, + 0x103CCC4E, + 0x3896BEF2, + 0x2C5E0B1C, + 0x1E2096DE, + 0x15594D47, + 0x04E035CE, + 0x2785D1B1, + 0x795BC87D, + 0x373FECBF, + 0x0B18C3A0, + 0x6516874A, + 0x2B567BE9, + 0x5A2A3D1B, + 0x74D99C04, + 0x437DE605, + 0x047DF991, + 0x322FAAD4, + 0x2EF2F76F, + 0x5F9E7278, + 0x62740235, + 0x18C1E8C2, + 0x0691E203, + 0x3324646D, + 0x59542C9F, + 0x32433D0D, + 0x42C17492, + 0x45AC808A, + 0x685394E0, + 0x316F7193, + 0x5EA108A0, + 0x6BB3F12F, + 0x232F8865, + 0x7C162B62, + 0x52AA9E45, + 0x1B69F8DB, + 0x3EC35206, + 0x1EF086DD, + 0x34D7A5E3, + 0x33AEEA57, + 0x03565CC8, + 0x5BC5FD47, + 0x47ADC343, + 0x1D5857A2, + 0x5E7ECE76, + 0x0239FBA3, + 0x58BDEAD4, + 0x41671AEF, + 0x3C8A9189, + 0x7342ED52, + 0x19871456, + 0x573A02C8, + 0x2EC8AD55, + 0x09C4A997, + 0x34B9B63A, + 0x226DA984, + 0x6B31D16E, + 0x458384D2, + 0x353911E1, + 0x4CFD1256, + 0x163C23AF, + 0x7609C5E0, + 0x76596C08, + 0x087ADAC7, + 0x4FD4B62C, + 0x3692A037, + 0x51C54B62, + 0x133DAF4D, + 0x0C76F623, + 0x387D21F3, + 0x6034ABE5, + 0x7C982E2B, + 0x63A266B4, + 0x4F2B17B8, + 0x0BD62F1D, + 0x70E37A7C, + 0x4F162DA9, + 0x38F0E527, + 0x6CE798D7, + 0x6C74250B, + 0x606F2FAD, + 0x212B041D, + 0x6724FD32, + 0x73AAF9AF, + 0x3AE9B76B, + 0x014FE151, + 0x37687943, + 0x36BB7786, + 0x01DA85EF, + 0x28C618AE, + 0x36706580, + 0x3F5F610D, + 0x2E0B9391, + 0x5750E38D, + 0x00B48D71, + 0x0F1F1D7A, + 0x7107C415, + 0x35C1E287, + 0x26CCCE2F, + 0x4E29277A, + 0x1580EE9D, + 0x18136F74, + 0x530F32AD, + 0x5A19B05D, + 0x3D38B320, + 0x6A3BF1E4, + 0x39E9EDBB, + 0x2CE6A59E, + 0x2DF215E1, + 0x216A17BA, + 0x3A8F3CFA, + 0x0A14D990, + 0x1162E529, + 0x1213C181, + 0x3DAA68F5, + 0x16C570FF, + 0x1063321C, + 0x06A2D0E8, + 0x17C094A4, + 0x39A5D9C9, + 0x086D4802, + 0x67AB7FE3, + 0x67F51392, + 0x3649C2AC, + 0x62AA8CF8, + 0x55B6FDBB, + 0x55C3E972, + 0x2F865724, + 0x314FA653, + 0x029F66F1, + 0x016F80A2, + 0x4B70E0C2, + 0x1782F9AB, + 0x697578EE, + 0x07B2C8B7, + 0x123F6681, + 0x2B78DB24, + 0x2CD8DB9D, + 0x302947B1, + 0x04F4C99A, + 0x1F8BCBBD, + 0x61C782EA, + 0x3459928C, + 0x3EFEC720, + 0x24F2B8F6, + 0x5DEC66B5, + 0x622386CC, + 0x26B70002, + 0x1FA0D640, + 0x6EDEAA0A, + 0x670FF3E1, + 0x18641D8E, + 0x43B68197, + 0x315B1707, + 0x46DB526A, + 0x02FA5277, + 0x36F6EDF9, + 0x31AD912B, + 0x7D518EBD, + 0x61DB2EEA, + 0x0BA28BAD, + 0x3C839E59, + 0x7ED007F1, + 0x74447F8A, + 0x6B4CE5B7, + 0x7272E3A4, + 0x192257D1, + 0x5F882281, + 0x5F890768, + 0x47EEC4CB, + 0x2EF3E6C8, + 0x43D6E4E2, + 0x668CE6BA, + 0x50679E00, + 0x24C067A8, + 0x605BE47C, + 0x324AC2EC, + # Terminal full rounds (4 rounds x 24 constants) + 0x5883788F, + 0x7EBA66AF, + 0x23620F78, + 0x44492C9A, + 0x7CC098A4, + 0x705191FA, + 0x2F7185E2, + 0x6EBBB07E, + 0x23508C3B, + 0x6CB0F0F4, + 0x1190A8C0, + 0x60F8F1D0, + 0x316C16A1, + 0x440742C7, + 0x7643F142, + 0x642F9668, + 0x214B7566, + 0x52A5C469, + 0x1BFD90DA, + 0x1D7D8076, + 0x6E06D1E8, + 0x7D672E6D, + 0x6FD2E3E3, + 0x3257AE18, + 0x75861A51, + 0x0E2996FE, + 0x2BDC228B, + 0x6879FCB8, + 0x14CA9B1C, + 0x29953D92, + 0x36EE671D, + 0x31366E47, + 0x79C4F5F2, + 0x2B8C8639, + 0x073A293D, + 0x32802C31, + 0x4894D32F, + 0x06ACC989, + 0x40D852B1, + 0x508857C4, + 0x2FFE504D, + 0x18BE00C1, + 0x75A114E9, + 0x4ED5922A, + 0x1060EE72, + 0x2176563C, + 0x0B91B242, + 0x6BFBF1A4, + 0x06F94470, + 0x694F4383, + 0x53CADA3E, + 0x1527BFD8, + 0x2BDFE868, + 0x120C2D2C, + 0x7DFD6309, + 0x10B619C2, + 0x0550BC7F, + 0x488CF3DC, + 0x4C5454A2, + 0x00BE2976, + 0x349C9669, + 0x2B4EB07D, + 0x0450BF40, + 0x58DE7343, + 0x3495A265, + 0x2305E3B7, + 0x661DD781, + 0x1C183983, + 0x46992791, + 0x3EB3751F, + 0x38F728C8, + 0x775D0A30, + 0x7636645A, + 0x7125AA5D, + 0x0C3F2DCA, + 0x13B595CC, + 0x5A5E9BCE, + 0x54BB3456, + 0x069A1A5A, + 0x7B9F15EE, + 0x50150189, + 0x68C9157B, + 0x07E06E22, + 0x568AECDB, + 0x1403F847, + 0x436CF5DA, + 0x3F09C026, + 0x652F7B1B, + 0x3E8607F3, + 0x5BB37C57, + 0x1B1A9ECF, + 0x39D11CB0, + 0x1841A51C, + 0x1251AD48, + 0x74FB5EDD, + 0x21FA33C6, +] + +# For width 16 (needs (8 + 20) * 16 = 448 constants). +ROUND_CONSTANTS_16: list[Fp] = [Fp(value=v) for v in _RAW_CONSTANTS_16] + +# For width 24 (needs (8 + 23) * 24 = 744 constants). +ROUND_CONSTANTS_24: list[Fp] = [Fp(value=v) for v in _RAW_CONSTANTS_24] diff --git a/src/lean_spec/subspecs/poseidon1/permutation.py b/src/lean_spec/subspecs/poseidon1/permutation.py new file mode 100644 index 00000000..e7558b7f --- /dev/null +++ b/src/lean_spec/subspecs/poseidon1/permutation.py @@ -0,0 +1,285 @@ +""" +A minimal Python specification for the Poseidon1 permutation. + +Based on "Poseidon: A New Hash Function for Zero-Knowledge Proof Systems". +See https://eprint.iacr.org/2019/458. + +Uses Numba JIT compilation for native-speed permutation. +""" + +from __future__ import annotations + +from typing import Self + +import numpy as np +from numba import njit +from numpy.typing import NDArray +from pydantic import Field, model_validator + +from ...types import StrictBaseModel +from ..koalabear.field import Fp, P +from .constants import ( + ROUND_CONSTANTS_16, + ROUND_CONSTANTS_24, +) + + +def _build_circulant_mds(first_row: list[int], n: int, p: int) -> NDArray[np.int64]: + """ + Expand a circulant matrix from its first row into a dense NxN matrix. + + A circulant matrix C defined by first row [r0, r1, ..., rn-1]: + C[i][j] = r[(j - i) mod n] + """ + matrix = np.zeros((n, n), dtype=np.int64) + for i in range(n): + for j in range(n): + matrix[i][j] = first_row[(j - i) % n] % p + return matrix + + +@njit(cache=True) +def _mds_multiply_jit( + state: NDArray[np.int64], mds: NDArray[np.int64], p: int +) -> NDArray[np.int64]: + """ + Dense MDS matrix-vector multiplication. + + Computes y = MDS * x where MDS is the circulant MDS matrix. + Each product is reduced mod p before accumulation to prevent overflow. + """ + n = state.shape[0] + result = np.empty(n, dtype=np.int64) + for i in range(n): + s = np.int64(0) + for j in range(n): + s += mds[i, j] * state[j] % p + result[i] = s % p + return result + + +@njit(cache=True) +def _permute_jit( + state: NDArray[np.int64], + round_constants: NDArray[np.int64], + mds: NDArray[np.int64], + width: int, + half_rounds_f: int, + rounds_p: int, + p: int, +) -> None: + """ + Full Poseidon1 permutation, compiled to native code. + + Modifies state array in-place. + S-box: x^3 computed as (x*x % p) * x % p to avoid int64 overflow. + + Round structure: AddRoundConstants -> S-box -> MDS multiply. + Unlike Poseidon2, there is no initial linear layer. + """ + const_idx = 0 + + # 1. First half of full rounds. + # + # Full rounds apply the S-box to every state element. + # Note: for S_BOX_DEGREE=3, state**3 would overflow int64 before modulo. + # Expand S-box to `(state*state % P) * state % P` to stay in range. + for _ in range(half_rounds_f): + # Add round constants to entire state. + state[:] = (state + round_constants[const_idx : const_idx + width]) % p + const_idx += width + + # Apply S-box (x -> x^d) to full state. + state[:] = (state * state % p) * state % p + + # Apply dense MDS multiply for diffusion. + state[:] = _mds_multiply_jit(state, mds, p) + + # 2. Partial rounds. + # + # Partial rounds add constants to ALL state elements but apply + # the S-box only to state[0]. The same dense MDS matrix is used. + for _ in range(rounds_p): + # Add round constants to entire state. + state[:] = (state + round_constants[const_idx : const_idx + width]) % p + const_idx += width + + # Apply S-box to first element only. + # This is the main optimization of the Hades design. + state[0] = (state[0] * state[0] % p) * state[0] % p + + # Apply dense MDS multiply. + state[:] = _mds_multiply_jit(state, mds, p) + + # 3. Second half of full rounds. + for _ in range(half_rounds_f): + # Add round constants to entire state. + state[:] = (state + round_constants[const_idx : const_idx + width]) % p + const_idx += width + + # Apply S-box to full state. + state[:] = (state * state % p) * state % p + + # Apply dense MDS multiply for diffusion. + state[:] = _mds_multiply_jit(state, mds, p) + + +class Poseidon1Params(StrictBaseModel): + """Parameters for a specific Poseidon1 instance.""" + + width: int = Field(gt=0, description="The size of the state (t).") + rounds_f: int = Field(gt=0, description="Total number of 'full' rounds.") + rounds_p: int = Field(ge=0, description="Total number of 'partial' rounds.") + mds_first_row: list[Fp] = Field( + min_length=1, + description="First row of the circulant MDS matrix.", + ) + round_constants: list[Fp] = Field( + min_length=1, + description="The list of pre-computed constants for all rounds.", + ) + + @model_validator(mode="after") + def check_lengths(self) -> Self: + """Ensures vector lengths match the configuration.""" + if len(self.mds_first_row) != self.width: + raise ValueError("Length of mds_first_row must equal width.") + + expected_constants = (self.rounds_f + self.rounds_p) * self.width + if len(self.round_constants) != expected_constants: + raise ValueError("Incorrect number of round constants provided.") + + return self + + +class Poseidon1: + """ + Optimized execution engine for Poseidon1. + + Pre-processes parameters into numpy arrays during initialization. + Minimizes overhead during permute calls. + """ + + __slots__ = ("_width", "_half_rounds_f", "_rounds_p", "_mds", "_round_constants") + + _width: int + """State size (t).""" + + _half_rounds_f: int + """Full rounds divided by 2.""" + + _rounds_p: int + """Number of partial rounds.""" + + _mds: NDArray[np.int64] + """Dense circulant MDS matrix.""" + + _round_constants: NDArray[np.int64] + """Flattened array of all round constants.""" + + def __init__(self, params: Poseidon1Params) -> None: + """ + Initialize the engine with validated parameters. + + Converts Fp lists to int64 numpy arrays for speed. + Builds the dense circulant MDS matrix from the first row. + """ + self._width = params.width + self._half_rounds_f = params.rounds_f // 2 + self._rounds_p = params.rounds_p + + # Build the dense circulant MDS matrix from first row. + first_row_ints = [fp.value for fp in params.mds_first_row] + self._mds = _build_circulant_mds(first_row_ints, params.width, P) + + # Pre-convert round constants to numpy array. + self._round_constants = np.array( + [fp.value for fp in params.round_constants], dtype=np.int64 + ) + + def permute(self, current_state: list[Fp]) -> list[Fp]: + """ + Perform the full Poseidon1 permutation. + + Structure: + + 1. First half of full rounds + 2. Partial rounds + 3. Second half of full rounds + + Args: + current_state: List of Fp elements representing the current state. + + Returns: + New state after applying the permutation. + """ + if len(current_state) != self._width: + raise ValueError(f"Input state must have length {self._width}") + + state = np.array([fp.value for fp in current_state], dtype=np.int64) + + _permute_jit( + state, + self._round_constants, + self._mds, + self._width, + self._half_rounds_f, + self._rounds_p, + P, + ) + + return [Fp(value=int(x)) for x in state] + + +# MDS first row for WIDTH = 16 +# +# From Plonky3: koala-bear/src/mds.rs +_MDS_FIRST_ROW_16: list[int] = [1, 1, 51, 1, 11, 17, 2, 1, 101, 63, 15, 2, 67, 22, 13, 3] + +# MDS first row for WIDTH = 24 +# +# From Plonky3: koala-bear/src/mds.rs +_MDS_FIRST_ROW_24: list[int] = [ + 0x2D0AAAAB, + 0x64850517, + 0x17F5551D, + 0x04ECBEB5, + 0x6D91A8D5, + 0x60703026, + 0x18D6F3CA, + 0x729601A7, + 0x77CDA9E2, + 0x3C0F5038, + 0x26D52A61, + 0x0360405D, + 0x68FC71C8, + 0x2495A71D, + 0x5D57AFC2, + 0x1689DD98, + 0x3C2C3DBE, + 0x0C23DC41, + 0x0524C7F2, + 0x6BE4DF69, + 0x0A6E572C, + 0x5C7790FA, + 0x17E118F6, + 0x0878A07F, +] + +# Parameters for WIDTH = 16 +PARAMS_16 = Poseidon1Params( + width=16, + rounds_f=8, + rounds_p=20, + mds_first_row=[Fp(value=v) for v in _MDS_FIRST_ROW_16], + round_constants=ROUND_CONSTANTS_16, +) + +# Parameters for WIDTH = 24 +PARAMS_24 = Poseidon1Params( + width=24, + rounds_f=8, + rounds_p=23, + mds_first_row=[Fp(value=v) for v in _MDS_FIRST_ROW_24], + round_constants=ROUND_CONSTANTS_24, +) diff --git a/src/lean_spec/subspecs/poseidon2/__init__.py b/src/lean_spec/subspecs/poseidon2/__init__.py deleted file mode 100644 index 7f7b1f90..00000000 --- a/src/lean_spec/subspecs/poseidon2/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Specification for the Poseidon2 permutation.""" - -from .permutation import ( - PARAMS_16, - PARAMS_24, - Poseidon2, - Poseidon2Params, -) - -__all__ = [ - "Poseidon2", - "Poseidon2Params", - "PARAMS_16", - "PARAMS_24", -] diff --git a/src/lean_spec/subspecs/poseidon2/constants.py b/src/lean_spec/subspecs/poseidon2/constants.py deleted file mode 100644 index bc567662..00000000 --- a/src/lean_spec/subspecs/poseidon2/constants.py +++ /dev/null @@ -1,388 +0,0 @@ -"""Round constants for the Poseidon2 permutation over the KoalaBear field.""" - -from __future__ import annotations - -from ..koalabear.field import Fp - -# For width 16: 64 external_initial + 20 internal + 64 external_final = 148 constants -_RAW_CONSTANTS_16: list[int] = [ - # External initial (4 rounds × 16 = 64 constants) - 2128964168, - 288780357, - 316938561, - 2126233899, - 426817493, - 1714118888, - 1045008582, - 1738510837, - 889721787, - 8866516, - 681576474, - 419059826, - 1596305521, - 1583176088, - 1584387047, - 1529751136, - 1863858111, - 1072044075, - 517831365, - 1464274176, - 1138001621, - 428001039, - 245709561, - 1641420379, - 1365482496, - 770454828, - 693167409, - 757905735, - 136670447, - 436275702, - 525466355, - 1559174242, - 1030087950, - 869864998, - 322787870, - 267688717, - 948964561, - 740478015, - 679816114, - 113662466, - 2066544572, - 1744924186, - 367094720, - 1380455578, - 1842483872, - 416711434, - 1342291586, - 1692058446, - 1493348999, - 1113949088, - 210900530, - 1071655077, - 610242121, - 1136339326, - 2020858841, - 1019840479, - 678147278, - 1678413261, - 1361743414, - 61132629, - 1209546658, - 64412292, - 1936878279, - 1980661727, - # Internal (20 constants) - 2102596038, - 1533193853, - 1436311464, - 2012303432, - 839997195, - 1225781098, - 2011967775, - 575084315, - 1309329169, - 786393545, - 995788880, - 1702925345, - 1444525226, - 908073383, - 1811535085, - 1531002367, - 1635653662, - 1585100155, - 867006515, - 879151050, - # External final (4 rounds × 16 = 64 constants) - 1423960925, - 2101391318, - 1915532054, - 275400051, - 1168624859, - 1141248885, - 356546469, - 1165250474, - 1320543726, - 932505663, - 1204226364, - 1452576828, - 1774936729, - 926808140, - 1184948056, - 1186493834, - 843181003, - 185193011, - 452207447, - 510054082, - 1139268644, - 630873441, - 669538875, - 462500858, - 876500520, - 1214043330, - 383937013, - 375087302, - 636912601, - 307200505, - 390279673, - 1999916485, - 1518476730, - 1606686591, - 1410677749, - 1581191572, - 1004269969, - 143426723, - 1747283099, - 1016118214, - 1749423722, - 66331533, - 1177761275, - 1581069649, - 1851371119, - 852520128, - 1499632627, - 1820847538, - 150757557, - 884787840, - 619710451, - 1651711087, - 505263814, - 212076987, - 1482432120, - 1458130652, - 382871348, - 417404007, - 2066495280, - 1996518884, - 902934924, - 582892981, - 1337064375, - 1199354861, -] - -# For width 24: 96 external_initial + 23 internal + 96 external_final = 215 constants -_RAW_CONSTANTS_24: list[int] = [ - # External initial (4 rounds × 24 = 96 constants) - 487143900, - 1829048205, - 1652578477, - 646002781, - 1044144830, - 53279448, - 1519499836, - 22697702, - 1768655004, - 230479744, - 1484895689, - 705130286, - 1429811285, - 1695785093, - 1417332623, - 1115801016, - 1048199020, - 878062617, - 738518649, - 249004596, - 1601837737, - 24601614, - 245692625, - 364803730, - 1857019234, - 1906668230, - 1916890890, - 835590867, - 557228239, - 352829675, - 515301498, - 973918075, - 954515249, - 1142063750, - 1795549558, - 608869266, - 1850421928, - 2028872854, - 1197543771, - 1027240055, - 1976813168, - 963257461, - 652017844, - 2113212249, - 213459679, - 90747280, - 1540619478, - 324138382, - 1377377119, - 294744504, - 512472871, - 668081958, - 907306515, - 518526882, - 1907091534, - 1152942192, - 1572881424, - 720020214, - 729527057, - 1762035789, - 86171731, - 205890068, - 453077400, - 1201344594, - 986483134, - 125174298, - 2050269685, - 1895332113, - 749706654, - 40566555, - 742540942, - 1735551813, - 162985276, - 1943496073, - 1469312688, - 703013107, - 1979485151, - 1278193166, - 548674995, - 2118718736, - 749596440, - 1476142294, - 1293606474, - 918523452, - 890353212, - 1691895663, - 1932240646, - 1180911992, - 86098300, - 1592168978, - 895077289, - 724819849, - 1697986774, - 1608418116, - 1083269213, - 691256798, - # Internal (23 constants) - 893435011, - 403879071, - 1363789863, - 1662900517, - 2043370, - 2109755796, - 931751726, - 2091644718, - 606977583, - 185050397, - 946157136, - 1350065230, - 1625860064, - 122045240, - 880989921, - 145137438, - 1059782436, - 1477755661, - 335465138, - 1640704282, - 1757946479, - 1551204074, - 681266718, - # External final (4 rounds × 24 = 96 constants) - 328586442, - 1572520009, - 1375479591, - 322991001, - 967600467, - 1172861548, - 1973891356, - 1503625929, - 1881993531, - 40601941, - 1155570620, - 571547775, - 1361622243, - 1495024047, - 1733254248, - 964808915, - 763558040, - 1887228519, - 994888261, - 718330940, - 213359415, - 603124968, - 1038411577, - 2099454809, - 949846777, - 630926956, - 1168723439, - 222917504, - 1527025973, - 1009157017, - 2029957881, - 805977836, - 1347511739, - 540019059, - 589807745, - 440771316, - 1530063406, - 761076336, - 87974206, - 1412686751, - 1230318064, - 514464425, - 1469011754, - 1770970737, - 1510972858, - 965357206, - 209398053, - 778802532, - 40567006, - 1984217577, - 1545851069, - 879801839, - 1611910970, - 1215591048, - 330802499, - 1051639108, - 321036, - 511927202, - 591603098, - 1775897642, - 115598532, - 278200718, - 233743176, - 525096211, - 1335507608, - 830017835, - 1380629279, - 560028578, - 598425701, - 302162385, - 567434115, - 1859222575, - 958294793, - 1582225556, - 1781487858, - 1570246000, - 1067748446, - 526608119, - 1666453343, - 1786918381, - 348203640, - 1860035017, - 1489902626, - 1904576699, - 860033965, - 1954077639, - 1685771567, - 971513929, - 1877873770, - 137113380, - 520695829, - 806829080, - 1408699405, - 1613277964, - 793223662, - 648443918, -] - -# For width 16 (needs 8*16 + 20 = 148 constants). -ROUND_CONSTANTS_16: list[Fp] = [Fp(value=v) for v in _RAW_CONSTANTS_16] - -# For width 24 (needs 8*24 + 23 = 215 constants). -ROUND_CONSTANTS_24: list[Fp] = [Fp(value=v) for v in _RAW_CONSTANTS_24] diff --git a/src/lean_spec/subspecs/poseidon2/permutation.py b/src/lean_spec/subspecs/poseidon2/permutation.py deleted file mode 100644 index 7db0e654..00000000 --- a/src/lean_spec/subspecs/poseidon2/permutation.py +++ /dev/null @@ -1,355 +0,0 @@ -""" -A minimal Python specification for the Poseidon2 permutation. - -Based on "Poseidon2: A Faster Version of the Poseidon Hash Function". -See https://eprint.iacr.org/2023/323. - -Uses Numba JIT compilation for native-speed permutation. -""" - -from __future__ import annotations - -from typing import Final, Self - -import numpy as np -from numba import njit -from numpy.typing import NDArray -from pydantic import Field, model_validator - -from ...types import StrictBaseModel -from ..koalabear.field import Fp, P -from .constants import ( - ROUND_CONSTANTS_16, - ROUND_CONSTANTS_24, -) - -_M4_T: Final[NDArray[np.int64]] = np.array( - [ - [2, 3, 1, 1], - [1, 2, 3, 1], - [1, 1, 2, 3], - [3, 1, 1, 2], - ], - dtype=np.int64, -).T -""" -Base 4x4 MDS matrix, pre-transposed. - -Pre-transposition enables efficient row-vector multiplication: `v @ M.T`. -""" - - -@njit(cache=True) -def _m4_multiply(chunks: NDArray[np.int64], m4t: NDArray[np.int64], p: int) -> NDArray[np.int64]: - """ - Multiply each row of `chunks` by the M4 matrix. - - Equivalent to `chunks @ m4t % p`. - Numba's `@` operator requires scipy and float arrays, - so we use an explicit loop instead. Numba unrolls these - small fixed-size loops, so overhead is ~12% vs native matmul. - """ - result = np.empty_like(chunks) - for c in range(chunks.shape[0]): - for j in range(4): - s = np.int64(0) - for k in range(4): - s += chunks[c, k] * m4t[k, j] - result[c, j] = s % p - return result - - -@njit(cache=True) -def _external_linear_layer_jit( - state: NDArray[np.int64], m4t: NDArray[np.int64], p: int -) -> NDArray[np.int64]: - """ - Apply the external linear layer (M_E). - - Provides strong diffusion across the entire state. - Used in full rounds. - - For state size t=4k, constructed from M4 to form a circulant-like matrix. - Efficient while ensuring any single element change affects all others. - - See Appendix B of the paper. - """ - # Apply M4 to each 4-element chunk. - # Provides strong local diffusion within each block. - chunks = state.reshape(-1, 4) - chunks = _m4_multiply(chunks, m4t, p) - - # Apply outer circulant structure for global diffusion. - # Equivalent to multiplying by circ(2*I, I, ..., I) after M4 stage. - sums = np.zeros(4, dtype=np.int64) - for c in range(chunks.shape[0]): - for i in range(4): - sums[i] += chunks[c, i] - - # Add corresponding sum to each element. - return (chunks + sums).reshape(-1) % p - - -@njit(cache=True) -def _internal_linear_layer_jit( - state: NDArray[np.int64], diag_vector: NDArray[np.int64], p: int -) -> NDArray[np.int64]: - """ - Apply the internal linear layer (M_I). - - Used during partial rounds. - Optimized for speed. - - Matrix structure: M_I = J + D - - - J is the all-ones matrix - - D is a diagonal matrix - - This allows O(t) computation instead of O(t^2): - - M_I * s = J*s + D*s - - J*s is a vector where each element equals the sum of all elements in s. - """ - # J*state: sum of all elements (broadcast to vector). - # D*state: element-wise multiplication with diagonal. - state_sum = state.sum() - - # new_state[i] = state_sum + diag_vector[i] * state[i] - return (state_sum + (diag_vector * state)) % p - - -@njit(cache=True) -def _permute_jit( - state: NDArray[np.int64], - round_constants: NDArray[np.int64], - diag_vector: NDArray[np.int64], - m4t: NDArray[np.int64], - width: int, - half_rounds_f: int, - rounds_p: int, - p: int, -) -> None: - """ - Full Poseidon2 permutation, compiled to native code. - - Modifies state array in-place. - S-box: x^3 computed as (x*x % p) * x % p to avoid int64 overflow. - """ - const_idx = 0 - - # 1. Initial linear layer. - # - # Prevents certain algebraic attacks. - # Ensures the permutation begins with a diffusion layer. - state[:] = _external_linear_layer_jit(state, m4t, p) - - # 2. First half of full rounds. - # - # Note: for S_BOX_DEGREE=3, state**3 would overflow int64 before modulo. - # Values reach up to 2^93, but int64 max is 2^63. - # Expand S-box to `(state*state % P) * state % P` to stay in range. - for _ in range(half_rounds_f): - # Add round constants to entire state. - state[:] = (state + round_constants[const_idx : const_idx + width]) % p - const_idx += width - - # Apply S-box (x -> x^d) to full state. - state[:] = (state * state % p) * state % p - - # Apply external linear layer for diffusion. - state[:] = _external_linear_layer_jit(state, m4t, p) - - # 3. Partial rounds. - for _ in range(rounds_p): - # Add single round constant to first element. - state[0] = (state[0] + round_constants[const_idx]) % p - const_idx += 1 - - # Apply S-box to first element only. - # This is the main optimization of the Hades design. - state[0] = (state[0] * state[0] % p) * state[0] % p - - # Apply internal linear layer. - state[:] = _internal_linear_layer_jit(state, diag_vector, p) - - # 4. Second half of full rounds. - for _ in range(half_rounds_f): - # Add round constants to entire state. - state[:] = (state + round_constants[const_idx : const_idx + width]) % p - const_idx += width - - # Apply S-box to full state. - state[:] = (state * state % p) * state % p - - # Apply external linear layer for diffusion. - state[:] = _external_linear_layer_jit(state, m4t, p) - - -class Poseidon2Params(StrictBaseModel): - """Parameters for a specific Poseidon2 instance.""" - - width: int = Field(gt=0, description="The size of the state (t).") - rounds_f: int = Field(gt=0, description="Total number of 'full' rounds.") - rounds_p: int = Field(ge=0, description="Total number of 'partial' rounds.") - internal_diag_vectors: list[Fp] = Field( - min_length=1, - description=("Diagonal vectors for the efficient internal linear layer matrix (M_I)."), - ) - round_constants: list[Fp] = Field( - min_length=1, - description="The list of pre-computed constants for all rounds.", - ) - - @model_validator(mode="after") - def check_lengths(self) -> Self: - """Ensures vector lengths match the configuration.""" - if len(self.internal_diag_vectors) != self.width: - raise ValueError("Length of internal_diag_vectors must equal width.") - - expected_constants = (self.rounds_f * self.width) + self.rounds_p - if len(self.round_constants) != expected_constants: - raise ValueError("Incorrect number of round constants provided.") - - return self - - -class Poseidon2: - """ - Optimized execution engine for Poseidon2. - - Pre-processes parameters into numpy arrays during initialization. - Minimizes overhead during permute calls. - """ - - __slots__ = ("_width", "_half_rounds_f", "_rounds_p", "_diag_vector", "_round_constants") - - _width: int - """State size (t).""" - - _half_rounds_f: int - """Full rounds divided by 2.""" - - _rounds_p: int - """Number of partial rounds.""" - - _diag_vector: NDArray[np.int64] - """Diagonal vector for internal linear layer (M_I).""" - - _round_constants: NDArray[np.int64] - """Flattened array of all round constants.""" - - def __init__(self, params: Poseidon2Params) -> None: - """ - Initialize the engine with validated parameters. - - Converts Fp lists to int64 numpy arrays for speed. - """ - self._width = params.width - self._half_rounds_f = params.rounds_f // 2 - self._rounds_p = params.rounds_p - - # Pre-convert to numpy arrays. - # Avoids overhead in the hot loop. - self._diag_vector = np.array( - [fp.value for fp in params.internal_diag_vectors], dtype=np.int64 - ) - self._round_constants = np.array( - [fp.value for fp in params.round_constants], dtype=np.int64 - ) - - def permute(self, current_state: list[Fp]) -> list[Fp]: - """ - Perform the full Poseidon2 permutation. - - Structure: - - 1. Initial linear layer - 2. First half of full rounds - 3. Partial rounds - 4. Second half of full rounds - - Args: - current_state: List of Fp elements representing the current state. - - Returns: - New state after applying the permutation. - """ - if len(current_state) != self._width: - raise ValueError(f"Input state must have length {self._width}") - - state = np.array([fp.value for fp in current_state], dtype=np.int64) - - _permute_jit( - state, - self._round_constants, - self._diag_vector, - _M4_T, - self._width, - self._half_rounds_f, - self._rounds_p, - P, - ) - - return [Fp(value=int(x)) for x in state] - - -# Parameters for WIDTH = 16 -PARAMS_16 = Poseidon2Params( - width=16, - rounds_f=8, - rounds_p=20, - internal_diag_vectors=[ - Fp(value=-2), - Fp(value=1), - Fp(value=2), - Fp(value=1) / Fp(value=2), - Fp(value=3), - Fp(value=4), - Fp(value=-1) / Fp(value=2), - Fp(value=-3), - Fp(value=-4), - Fp(value=1) / Fp(value=2**8), - Fp(value=1) / Fp(value=8), - Fp(value=1) / Fp(value=2**24), - Fp(value=-1) / Fp(value=2**8), - Fp(value=-1) / Fp(value=8), - Fp(value=-1) / Fp(value=16), - Fp(value=-1) / Fp(value=2**24), - ], - round_constants=ROUND_CONSTANTS_16, -) - -# Parameters for WIDTH = 24 -PARAMS_24 = Poseidon2Params( - width=24, - rounds_f=8, - rounds_p=23, - internal_diag_vectors=[ - Fp(value=-2), - Fp(value=1), - Fp(value=2), - Fp(value=1) / Fp(value=2), - Fp(value=3), - Fp(value=4), - Fp(value=-1) / Fp(value=2), - Fp(value=-3), - Fp(value=-4), - Fp(value=1) / Fp(value=2**8), - Fp(value=1) / Fp(value=4), - Fp(value=1) / Fp(value=8), - Fp(value=1) / Fp(value=16), - Fp(value=1) / Fp(value=32), - Fp(value=1) / Fp(value=64), - Fp(value=1) / Fp(value=2**24), - Fp(value=-1) / Fp(value=2**8), - Fp(value=-1) / Fp(value=8), - Fp(value=-1) / Fp(value=16), - Fp(value=-1) / Fp(value=32), - Fp(value=-1) / Fp(value=64), - Fp(value=-1) / Fp(value=2**7), - Fp(value=-1) / Fp(value=2**9), - Fp(value=-1) / Fp(value=2**24), - ], - round_constants=ROUND_CONSTANTS_24, -) diff --git a/src/lean_spec/subspecs/validator/registry.py b/src/lean_spec/subspecs/validator/registry.py index 82bc6ed7..02b7fe4f 100644 --- a/src/lean_spec/subspecs/validator/registry.py +++ b/src/lean_spec/subspecs/validator/registry.py @@ -15,7 +15,7 @@ 2. **validator-keys-manifest.yaml** - Contains key metadata and file paths: key_scheme: SIGTopLevelTargetSumLifetime32Dim64Base8 - hash_function: Poseidon2 + hash_function: Poseidon1 num_validators: 3 validators: - index: 0 @@ -88,7 +88,7 @@ class ValidatorManifest(BaseModel): """Signature scheme identifier (e.g., SIGTopLevelTargetSumLifetime32Dim64Base8).""" hash_function: str - """Hash function used (e.g., Poseidon2).""" + """Hash function used (e.g., Poseidon1).""" encoding: str """Encoding type (e.g., TargetSum).""" diff --git a/src/lean_spec/subspecs/xmss/aggregation.py b/src/lean_spec/subspecs/xmss/aggregation.py index eb87d8f6..cc99eee3 100644 --- a/src/lean_spec/subspecs/xmss/aggregation.py +++ b/src/lean_spec/subspecs/xmss/aggregation.py @@ -20,6 +20,19 @@ from .containers import PublicKey, Signature +LOG_INV_RATE_TEST = 1 +""" +Inverse rate exponent for test mode (fastest, biggest proofs). + +This parameter is forwarded to `lean_multisig_py` prover and controls a performance/size trade-off: + +- Lower values generate proofs faster but increase proof size. +- Higher values reduce proof size but increase prover work. +""" + +LOG_INV_RATE_PROD = 2 +"""Inverse rate exponent for production mode (balanced speed vs proof size).""" + class AggregationError(Exception): """Raised when signature aggregation or verification fails.""" @@ -45,19 +58,11 @@ class AggregatedSignatureProof(Container): proof_data: ByteListMiB """The raw aggregated proof bytes from leanVM.""" - # TODO: Add bytecode-point claim data from recursive aggregation. - # bytecode_point: ByteListMiB | None = None - # """ - # Serialized bytecode-point claim data from recursive aggregation. - - # If the bytecode point is not provided, the proof is not recursive. - # """ - @classmethod def aggregate( cls, xmss_participants: AggregationBits | None, - children: Sequence[Self], + children: Sequence[tuple[Self, Sequence[PublicKey]]], raw_xmss: Sequence[tuple[PublicKey, Signature]], message: Bytes32, slot: Slot, @@ -66,11 +71,9 @@ def aggregate( """ Aggregate raw_xmss signatures and children proofs into a single proof. - The API supports recursive aggregation but the bindings currently do not. - Args: xmss_participants: Bitfield of validators whose raw_signatures are provided. - children: Sequence of child proofs to aggregate. + children: Sequence of (child_proof, public_keys) tuples to aggregate. raw_xmss: Sequence of (public key, signature) tuples to aggregate. message: The 32-byte message that was signed. slot: The slot in which the signatures were created. @@ -101,20 +104,30 @@ def aggregate( raise AggregationError("Raw signature count does not match XMSS participant count") # Include child participants in the aggregated participants - for child in children: - aggregated_validator_ids.update(child.participants.to_validator_indices()) + for child_proof, _ in children: + aggregated_validator_ids.update(child_proof.participants.to_validator_indices()) participants = AggregationBits.from_validator_indices( - ValidatorIndices(data=sorted(aggregated_validator_ids)) + ValidatorIndices(data=list(aggregated_validator_ids)) ) mode = mode or LEAN_ENV setup_prover(mode=mode) + try: - proof_bytes = aggregate_signatures( + children_bytes = [ + ( + [pk.encode_bytes() for pk in child_pks], + child_proof.proof_data.encode_bytes(), + ) + for child_proof, child_pks in children + ] + _, proof_bytes = aggregate_signatures( [pk.encode_bytes() for pk, _ in raw_xmss], [sig.encode_bytes() for _, sig in raw_xmss], message, slot, + LOG_INV_RATE_TEST if mode == "test" else LOG_INV_RATE_PROD, + children_bytes=children_bytes, mode=mode, ) return cls( @@ -135,7 +148,7 @@ def verify( Verify this aggregated signature proof. Args: - public_keys: Public keys of the participants (order must match participants bitfield). + public_keys: Public keys of the participants. message: The 32-byte message that was signed. slot: The slot in which the signatures were created. mode: The mode to use for the verification (test or prod). @@ -145,6 +158,7 @@ def verify( """ mode = mode or LEAN_ENV setup_verifier(mode=mode) + try: verify_aggregated_signatures( [pk.encode_bytes() for pk in public_keys], diff --git a/src/lean_spec/subspecs/xmss/constants.py b/src/lean_spec/subspecs/xmss/constants.py index 3c391827..7cc9f03b 100644 --- a/src/lean_spec/subspecs/xmss/constants.py +++ b/src/lean_spec/subspecs/xmss/constants.py @@ -11,13 +11,16 @@ from __future__ import annotations +import math from typing import Final +from pydantic import model_validator + from lean_spec.config import LEAN_ENV from lean_spec.types import StrictBaseModel, Uint64 from lean_spec.types.constants import OFFSET_BYTE_LENGTH -from ..koalabear import P_BYTES, Fp +from ..koalabear import P_BYTES, Fp, P class XmssConfig(StrictBaseModel): @@ -45,8 +48,11 @@ def LIFETIME(self) -> Uint64: # noqa: N802 BASE: int """The alphabet size for the digits of the encoded message.""" - FINAL_LAYER: int - """Number of top layers of the hypercube to map the hash output into.""" + Z: int + """Number of base-`BASE` digits extracted from each field element.""" + + Q: int + """Quotient such that `Q * BASE^Z == P - 1`.""" TARGET_SUM: int """The required sum of all codeword chunks for a signature to be valid.""" @@ -79,18 +85,19 @@ def LIFETIME(self) -> Uint64: # noqa: N802 """The output length of the main tweakable hash function.""" CAPACITY: int - """The capacity of the Poseidon2 sponge, defining its security level.""" + """The capacity of the Poseidon1 sponge, defining its security level.""" - POS_OUTPUT_LEN_PER_INV_FE: int - """Output length per invocation for the message hash.""" - - POS_INVOCATIONS: int - """Number of invocations for the message hash.""" + @model_validator(mode="after") + def _validate_decomposition(self) -> XmssConfig: + """Verify that Q * BASE^Z == P - 1.""" + if self.Q * self.BASE**self.Z != P - 1: + raise ValueError(f"Q * BASE^Z must equal P-1={P - 1}") + return self @property - def POS_OUTPUT_LEN_FE(self) -> int: # noqa: N802 - """Total output length for the message hash.""" - return self.POS_OUTPUT_LEN_PER_INV_FE * self.POS_INVOCATIONS + def MH_HASH_LEN_FE(self) -> int: # noqa: N802 + """Number of Poseidon output field elements needed for the aborting decode.""" + return math.ceil(self.DIMENSION / self.Z) @property def PUBLIC_KEY_LEN_BYTES(self) -> int: # noqa: N802 @@ -121,10 +128,11 @@ def SIGNATURE_LEN_BYTES(self) -> int: # noqa: N802 PROD_CONFIG: Final = XmssConfig( MESSAGE_LENGTH=32, LOG_LIFETIME=32, - DIMENSION=64, + DIMENSION=46, BASE=8, - FINAL_LAYER=77, - TARGET_SUM=375, + Z=8, + Q=127, + TARGET_SUM=200, MAX_TRIES=100_000, PARAMETER_LEN=5, TWEAK_LEN_FE=2, @@ -132,8 +140,6 @@ def SIGNATURE_LEN_BYTES(self) -> int: # noqa: N802 RAND_LEN_FE=7, HASH_LEN_FE=8, CAPACITY=9, - POS_OUTPUT_LEN_PER_INV_FE=15, - POS_INVOCATIONS=1, ) @@ -141,8 +147,9 @@ def SIGNATURE_LEN_BYTES(self) -> int: # noqa: N802 MESSAGE_LENGTH=32, LOG_LIFETIME=8, DIMENSION=4, - BASE=4, - FINAL_LAYER=6, + BASE=8, + Z=8, + Q=127, TARGET_SUM=6, MAX_TRIES=100_000, PARAMETER_LEN=5, @@ -151,8 +158,6 @@ def SIGNATURE_LEN_BYTES(self) -> int: # noqa: N802 RAND_LEN_FE=7, HASH_LEN_FE=8, CAPACITY=9, - POS_OUTPUT_LEN_PER_INV_FE=15, - POS_INVOCATIONS=1, ) diff --git a/src/lean_spec/subspecs/xmss/message_hash.py b/src/lean_spec/subspecs/xmss/message_hash.py index 13deb074..4d07971d 100644 --- a/src/lean_spec/subspecs/xmss/message_hash.py +++ b/src/lean_spec/subspecs/xmss/message_hash.py @@ -1,30 +1,30 @@ """ -Defines the "Top Level" message hashing for the signature scheme. +Defines the message hashing for the signature scheme using aborting hypercube encoding. -### The Challenge: Efficiently Finding a Valid Codeword +### The Challenge: Efficiently Encoding a Message as a Codeword The "Target Sum" signature scheme requires the signer to find a `codeword` whose -digits sum to a specific value. This is equivalent to hashing a message and hoping the -output is on a single, specific "layer" of a high-dimensional hypercube. The -probability of this can be low, forcing the signer to try many times with different -randomness (`rho`). - -### The Solution: "Top Level" Hashing - -This module implements a more efficient approach. Instead of targeting a single layer, -we define a valid codeword as any vertex that lies within the **top `D` layers** of the -hypercube (where `D` is `FINAL_LAYER` in the configuration). This significantly -increases the target space, drastically reducing the number of retries the signer needs. - -This process involves three main stages: -1. **Input Preparation**: All inputs (message, epoch, randomness, etc.) are - unambiguously encoded into a uniform format (lists of field elements). -2. **Extended Hashing**: Poseidon2 is called iteratively to generate a long, - pseudorandom output digest, effectively behaving like an eXtendable-Output - Function (XOF). -3. **Mapping to Hypercube**: The long digest is treated as a large number, which - is then safely and deterministically mapped to a unique vertex within the - allowed top layers of the hypercube. +digits sum to a specific value. This requires hashing a message and mapping the +output to a vertex in a high-dimensional hypercube. + +### The Solution: Aborting Hypercube Encoding + +This module implements a circuit-friendly encoding based on rejection sampling of +individual field elements, eliminating all big-integer arithmetic. + +For KoalaBear (`P = 2^31 - 2^24 + 1`), `P - 1 = Q * BASE^Z`, so each field element +can be decomposed into `Z` base-`BASE` digits after dividing by `Q`. The only reject +case is `A_i == P - 1` (probability ~4.7e-10 per FE — essentially never aborts). + +This is backed by the "Aborting Random Oracles" paper which proves +indifferentiability from a theta-aborting random oracle when modeling Poseidon as a +standard random oracle. + +The encoding proceeds in two stages: + +1. **Input Preparation**: All inputs are encoded into field elements. +2. **Poseidon Hashing + Aborting Decode**: Poseidon1 produces `ceil(DIMENSION/Z)` + field elements, each decoded into `Z` base-`BASE` digits via rejection sampling. """ from __future__ import annotations @@ -38,7 +38,7 @@ ) from lean_spec.types import Bytes32, StrictBaseModel, Uint64 -from ..koalabear import Fp, P +from ..koalabear import Fp from ._validation import enforce_strict_types from .constants import ( PROD_CONFIG, @@ -46,17 +46,12 @@ TWEAK_PREFIX_MESSAGE, XmssConfig, ) -from .hypercube import ( - hypercube_find_layer, - hypercube_part_size, - map_to_vertex, -) from .types import Parameter, Randomness from .utils import int_to_base_p class MessageHasher(StrictBaseModel): - """An instance of the "Top Level" message hasher for a given config.""" + """An instance of the message hasher using aborting hypercube encoding.""" config: XmssConfig """Configuration parameters for the hasher.""" @@ -77,7 +72,7 @@ def encode_message(self, message: Bytes32) -> list[Fp]: The message bytes are interpreted as a single little-endian integer, which is then decomposed into its base-`P` representation, where `P` is the field prime. This provides a canonical mapping from bytes to - the algebraic structure required by Poseidon2. + the algebraic structure required by Poseidon1. """ # Interpret the 32 little-endian bytes as a single large integer. acc = int.from_bytes(message, "little") @@ -99,46 +94,39 @@ def encode_epoch(self, epoch: Uint64) -> list[Fp]: # Decompose the integer into its base-P representation. return int_to_base_p(acc, self.config.TWEAK_LEN_FE) - def _map_into_hypercube_part(self, field_elements: list[Fp]) -> list[int]: + def _aborting_decode(self, field_elements: list[Fp]) -> list[int] | None: """ - Maps a long, pseudorandom digest to a unique vertex within the top layers - of the signature hypercube. + Decodes Poseidon output field elements into base-`BASE` digits via rejection sampling. - This is the core of the "Top Level" strategy. It takes a large, uniformly - random number and maps it to a point in a smaller, highly structured set. + For each field element `A_i`: - ### Mapping Algorithm + 1. If `A_i >= Q * BASE^Z` (i.e. `A_i == P - 1`), abort and return `None`. + 2. Compute `d_i = A_i // Q`, an integer in `[0, BASE^Z - 1]`. + 3. Decompose `d_i` into `Z` base-`BASE` digits, least significant first. - 1. **Integer Reconstruction**: The input list of field elements is - interpreted as the base-P representation of a single, very large integer. - - 2. **Modular Reduction**: This integer is reduced modulo the `domain_size`, - which is the total number of vertices in the target top layers. This - step maps the large random value to a unique index within the target set. - - 3. **Index to Vertex**: This unique index is then deterministically - converted first into a `(layer, offset)` pair, and finally into the - specific coordinates of the corresponding hypercube vertex. + Collect all digits and return the first `DIMENSION` of them. """ - # Get the config for this scheme. config = self.config + threshold = config.Q * config.BASE**config.Z - # Combine field elements into one large integer (big-endian, base-P). - acc = 0 + digits: list[int] = [] for fe in field_elements: - acc = acc * P + fe.value + a = fe.value + + # Rejection: the only failing case is A_i == P - 1. + if a >= threshold: + return None - # Reduce this integer modulo the size of the target domain. - # - # The target domain is the set of all vertices in layers 0..FINAL_LAYER. - domain_size = hypercube_part_size(config.BASE, config.DIMENSION, config.FINAL_LAYER) - acc %= domain_size + # Integer quotient removes the Q-residue, leaving a uniform value in [0, BASE^Z - 1]. + d = a // config.Q - # Find which layer the resulting index falls into, and its offset. - layer, offset = hypercube_find_layer(config.BASE, config.DIMENSION, acc) + # Decompose d into Z base-BASE digits, least significant first. + for _ in range(config.Z): + digits.append(d % config.BASE) + d //= config.BASE - # Map the offset within the layer to a unique vertex. - return map_to_vertex(config.BASE, config.DIMENSION, layer, offset) + # Take exactly DIMENSION digits. + return digits[: config.DIMENSION] def apply( self, @@ -146,21 +134,12 @@ def apply( epoch: Uint64, rho: Randomness, message: Bytes32, - ) -> list[int]: + ) -> list[int] | None: """ - Applies the full "Top Level" message hash and mapping procedure. + Applies message hashing followed by aborting hypercube decode. - This function generates a long pseudorandom digest by iteratively calling - Poseidon2 and then maps this digest to a candidate codeword (a vertex in - the hypercube). - - ### Hashing with Extended Output - - A single Poseidon2 compression call produces a relatively short output. To - generate a sufficiently large random number for the hypercube mapping, this - function calls Poseidon2 multiple times in a loop. The iteration number `i` - is used as a domain separator for each call, effectively creating a simple - eXtendable-Output Function (XOF) from the fixed-output hash. + Hashes the inputs with Poseidon1 to produce `MH_HASH_LEN_FE` field elements, + then decodes them into a candidate codeword via rejection sampling. Args: parameter: The public parameter `P`. @@ -169,27 +148,19 @@ def apply( message: The 32-byte message to be hashed. Returns: - A candidate codeword, represented as a list of `DIMENSION` integers - (the coordinates of a vertex in the hypercube). + A candidate codeword (list of `DIMENSION` digits in `[0, BASE-1]`), + or `None` if the aborting decode rejects. """ # Encode the message and epoch as field elements. message_fe = self.encode_message(message) epoch_fe = self.encode_epoch(epoch) - # Iteratively call Poseidon2 to generate a long hash output. - # - # The base input (rho || P || epoch || message) is reused each iteration. - base_input = list(rho.data) + list(parameter.data) + epoch_fe + message_fe - poseidon_outputs: list[Fp] = [] - output_len = self.config.POS_OUTPUT_LEN_PER_INV_FE - for i in range(self.config.POS_INVOCATIONS): - # Append iteration number as domain separator and hash. - poseidon_outputs.extend( - self.poseidon.compress(base_input + [Fp(value=i)], 24, output_len) - ) - - # Map the final aggregated list of field elements into a hypercube vertex. - return self._map_into_hypercube_part(poseidon_outputs) + # Call Poseidon1 once to produce the required number of output field elements. + base_input = message_fe + list(parameter.data) + epoch_fe + list(rho.data) + poseidon_output = self.poseidon.compress(base_input, 24, self.config.MH_HASH_LEN_FE) + + # Decode the field elements into base-BASE digits via rejection sampling. + return self._aborting_decode(poseidon_output) PROD_MESSAGE_HASHER = MessageHasher(config=PROD_CONFIG, poseidon=PROD_POSEIDON) diff --git a/src/lean_spec/subspecs/xmss/poseidon.py b/src/lean_spec/subspecs/xmss/poseidon.py index cbe0ccf0..20e2a0bc 100644 --- a/src/lean_spec/subspecs/xmss/poseidon.py +++ b/src/lean_spec/subspecs/xmss/poseidon.py @@ -1,18 +1,18 @@ """ -Defines the Poseidon2 hash functions for the Generalized XMSS scheme. +Defines the Poseidon1 hash functions for the Generalized XMSS scheme. -### The Cryptographic Engine: Why Poseidon2? +### The Cryptographic Engine: Why Poseidon1? This module provides the low-level cryptographic engine for all internal hashing -operations. It is built on **Poseidon2** hash function. +operations. It is built on **Poseidon1** hash function. -The choice of Poseidon2 is deliberate and critical for the scheme's ultimate goal. -Unlike traditional hashes like SHA-3, Poseidon2 is an **arithmetization-friendly** +The choice of Poseidon1 is deliberate and critical for the scheme's ultimate goal. +Unlike traditional hashes like SHA-3, Poseidon1 is an **arithmetization-friendly** (or **SNARK-friendly**) hash function. Its algebraic structure is simple, making it exponentially faster to prove and verify inside a zero-knowledge proof system, which is essential for aggregating many signatures into a single, compact proof. -This file provides wrappers for the two primary ways Poseidon2 is used: +This file provides wrappers for the two primary ways Poseidon1 is used: 1. **Compression Mode**: A fast, fixed-input-size mode for hashing small, predictable data structures like a single hash digest or a pair of them. @@ -27,37 +27,37 @@ from lean_spec.types import StrictBaseModel from ..koalabear import Fp -from ..poseidon2.permutation import ( +from ..poseidon1.permutation import ( PARAMS_16, PARAMS_24, - Poseidon2, - Poseidon2Params, + Poseidon1, + Poseidon1Params, ) from ._validation import enforce_strict_types from .utils import int_to_base_p class PoseidonXmss(StrictBaseModel): - """An instance of the Poseidon2 hash engine for the XMSS scheme.""" + """An instance of the Poseidon1 hash engine for the XMSS scheme.""" - params16: Poseidon2Params - """Poseidon2 parameters for 16-width permutation.""" + params16: Poseidon1Params + """Poseidon1 parameters for 16-width permutation.""" - params24: Poseidon2Params - """Poseidon2 parameters for 24-width permutation.""" + params24: Poseidon1Params + """Poseidon1 parameters for 24-width permutation.""" @model_validator(mode="after") def _validate_strict_types(self) -> PoseidonXmss: """Reject subclasses to prevent type confusion attacks.""" - enforce_strict_types(self, params16=Poseidon2Params, params24=Poseidon2Params) + enforce_strict_types(self, params16=Poseidon1Params, params24=Poseidon1Params) return self def compress(self, input_vec: list[Fp], width: int, output_len: int) -> list[Fp]: """ - Implements the Poseidon2 hash in **compression mode**. + Implements the Poseidon1 hash in **compression mode**. This mode is used for hashing fixed-size inputs and is the most efficient - way to use Poseidon2. It is used for traversing hash chains and building + way to use Poseidon1. It is used for traversing hash chains and building the internal nodes of the Merkle tree. ### Compression Algorithm @@ -66,13 +66,13 @@ def compress(self, input_vec: list[Fp], width: int, output_len: int) -> list[Fp] 1. **Padding**: The `input_vec` is padded with zeros to match the full state `width`. 2. **Permutation**: The core cryptographic permutation is applied to the padded state. 3. **Feed-Forward**: The original padded input is added element-wise to the - permuted state. This is a key feature of the Poseidon2 design that + permuted state. This is a key feature of the Poseidon1 design that provides security against certain attacks. 4. **Truncation**: The result is truncated to the desired `output_len`. Args: input_vec: The list of field elements to be hashed. - width: The state width of the Poseidon2 permutation (16 or 24). + width: The state width of the Poseidon1 permutation (16 or 24). output_len: The number of field elements in the output digest. Returns: @@ -90,8 +90,8 @@ def compress(self, input_vec: list[Fp], width: int, output_len: int) -> list[Fp] # Create a padded input by extending with zeros to match the state width. padded_input = list(input_vec) + [Fp(value=0)] * (width - len(input_vec)) - # Apply the Poseidon2 permutation. - permuted_state = Poseidon2(params).permute(padded_input) + # Apply the Poseidon1 permutation. + permuted_state = Poseidon1(params).permute(padded_input) # Apply the feed-forward step, adding the input back element-wise. final_state = [p + i for p, i in zip(permuted_state, padded_input, strict=True)] @@ -138,7 +138,7 @@ def sponge( width: int, ) -> list[Fp]: """ - Implements the Poseidon2 hash using the **sponge construction**. + Implements the Poseidon1 hash using the **sponge construction**. This mode is used for hashing large or variable-length inputs. In this scheme, it is specifically used to hash the Merkle tree leaves, which consist of many @@ -162,7 +162,7 @@ def sponge( input_vec: The input data of arbitrary length. capacity_value: The domain-separating value from `safe_domain_separator`. output_len: The number of field elements in the final output digest. - width: The width of the Poseidon2 permutation. + width: The width of the Poseidon1 permutation. Returns: A hash digest of `output_len` field elements. @@ -182,28 +182,29 @@ def sponge( padded_input = input_vec + [Fp(value=0)] * num_extra # Initialize the state: - # - rate part is zero, - # - capacity part is the domain separator. + # - capacity part (domain separator) at the beginning, + # - rate part (zero) follows. + cap_len = len(capacity_value) state = [Fp(value=0)] * width - state[rate:] = capacity_value + state[:cap_len] = capacity_value # Create the engine once for efficiency. - engine = Poseidon2(params) + engine = Poseidon1(params) - # Absorb the input in rate-sized chunks. + # Absorb the input in rate-sized chunks via replacement. for i in range(0, len(padded_input), rate): chunk = padded_input[i : i + rate] - # Add the chunk to the rate part of the state. + # Replace the rate part of the state with the chunk. for j in range(rate): - state[j] += chunk[j] + state[cap_len + j] = chunk[j] # Apply the cryptographic permutation to mix the state. state = engine.permute(state) # Squeeze the output until enough elements have been generated. output: list[Fp] = [] while len(output) < output_len: - # Extract the rate part of the state as output. - output.extend(state[:rate]) + # Extract the rate part of the state (after capacity) as output. + output.extend(state[cap_len : cap_len + rate]) # Permute the state. state = engine.permute(state) diff --git a/src/lean_spec/subspecs/xmss/target_sum.py b/src/lean_spec/subspecs/xmss/target_sum.py index b6a80f77..fc94cc24 100644 --- a/src/lean_spec/subspecs/xmss/target_sum.py +++ b/src/lean_spec/subspecs/xmss/target_sum.py @@ -75,6 +75,10 @@ def encode( # Hash the inputs to map them to a potential codeword (a vertex in the hypercube). codeword_candidate = self.message_hasher.apply(parameter, epoch, rho, message) + # The aborting decode may reject if a field element equals P - 1. + if codeword_candidate is None: + return None + # A codeword is valid only if it lies on the predefined hypercube layer. # # This is verified by checking if the sum of its coordinates equals TARGET_SUM. diff --git a/src/lean_spec/subspecs/xmss/tweak_hash.py b/src/lean_spec/subspecs/xmss/tweak_hash.py index 3657f051..95e7e051 100644 --- a/src/lean_spec/subspecs/xmss/tweak_hash.py +++ b/src/lean_spec/subspecs/xmss/tweak_hash.py @@ -1,9 +1,9 @@ """ -Defines the Tweakable Hash function using Poseidon2. +Defines the Tweakable Hash function using Poseidon1. ### The Problem: Hash Function Overload -In a complex cryptographic scheme like XMSS, a single hash function (like Poseidon2) +In a complex cryptographic scheme like XMSS, a single hash function (like Poseidon1) is used for many different purposes: 1. Hashing iteratively to form **hash chains**. 2. Hashing pairs of nodes to build the **Merkle tree**. @@ -97,7 +97,7 @@ def _encode_tweak(self, tweak: TreeTweak | ChainTweak, length: int) -> list[Fp]: Encodes a structured tweak object into a list of field elements. It converts a high-level tweak context (like "Merkle tree, level 5, index 3") - into a low-level format that can be consumed by the Poseidon2 hash function. + into a low-level format that can be consumed by the Poseidon1 hash function. ### Encoding Algorithm @@ -144,10 +144,10 @@ def apply( message_parts: list[HashDigestVector], ) -> HashDigestVector: """ - Applies the tweakable Poseidon2 hash function to a message. + Applies the tweakable Poseidon1 hash function to a message. This is the main entry point for all internal hashing operations. It prepares - the inputs and routes them to the appropriate Poseidon2 function based on + the inputs and routes them to the appropriate Poseidon1 function based on the input size, ensuring optimal performance and security. ### Hashing Algorithm @@ -157,7 +157,7 @@ def apply( 2. **Mode Selection**: - For small inputs (1 or 2 `HashDigest` parts), it uses the highly - efficient **compression mode** of Poseidon2. + efficient **compression mode** of Poseidon1. - For large inputs (many `HashDigest` parts, like a Merkle leaf), it uses the more flexible **sponge mode**. @@ -175,12 +175,12 @@ def apply( # Encode the high-level tweak structure into a list of field elements. encoded_tweak = self._encode_tweak(tweak, config.TWEAK_LEN_FE) - # Route to the correct Poseidon2 mode based on the input size. + # Route to the correct Poseidon1 mode based on the input size. if len(message_parts) == 1: # Case 1: Hashing a single digest (used in hash chains). # # We use the efficient width-16 compression mode. - input_vec = parameter.elements + encoded_tweak + message_parts[0].elements + input_vec = message_parts[0].elements + parameter.elements + encoded_tweak result = self.poseidon.compress(input_vec, 16, config.HASH_LEN_FE) elif len(message_parts) == 2: diff --git a/src/lean_spec/subspecs/xmss/types.py b/src/lean_spec/subspecs/xmss/types.py index 99ac8178..41fe7fc0 100644 --- a/src/lean_spec/subspecs/xmss/types.py +++ b/src/lean_spec/subspecs/xmss/types.py @@ -27,7 +27,7 @@ class PRFKey(BaseBytes): The fixed length of a hash digest in field elements. Derived from `TARGET_CONFIG.HASH_LEN_FE`. This corresponds to the output length -of the Poseidon2 hash function used in the XMSS scheme. +of the Poseidon1 hash function used in the XMSS scheme. """ # Calculate the maximum number of nodes in a sparse Merkle tree layer: @@ -49,7 +49,7 @@ class HashDigestVector(SSZVector[Fp]): """ A single hash digest represented as a fixed-size vector of field elements. - This is the SSZ-compliant representation of a Poseidon2 hash output. + This is the SSZ-compliant representation of a Poseidon1 hash output. In SSZ notation: `Vector[Fp, HASH_DIGEST_LENGTH]` The fixed size enables efficient serialization when used in collections, diff --git a/tests/consensus/devnet/fc/test_fork_choice_reorgs.py b/tests/consensus/devnet/fc/test_fork_choice_reorgs.py index c74e2159..a9b64fd0 100644 --- a/tests/consensus/devnet/fc/test_fork_choice_reorgs.py +++ b/tests/consensus/devnet/fc/test_fork_choice_reorgs.py @@ -1028,7 +1028,7 @@ def test_reorg_on_newly_justified_slot( ), ), # Fork A: slot 4 - # Fork A is the heaviest chain (3 blocks from justified slot) + # Fork A is the heaviest chain (3 blocks + 3 attestation votes) BlockStep( block=BlockSpec( slot=Slot(4), diff --git a/tests/consensus/devnet/fc/test_lexicographic_tiebreaker.py b/tests/consensus/devnet/fc/test_lexicographic_tiebreaker.py index 9b86b3f1..e0d26b9e 100644 --- a/tests/consensus/devnet/fc/test_lexicographic_tiebreaker.py +++ b/tests/consensus/devnet/fc/test_lexicographic_tiebreaker.py @@ -7,7 +7,6 @@ import pytest from consensus_testing import ( - AggregatedAttestationSpec, BlockSpec, BlockStep, ForkChoiceTestFiller, @@ -15,7 +14,6 @@ ) from lean_spec.subspecs.containers.slot import Slot -from lean_spec.subspecs.containers.validator import ValidatorIndex pytestmark = pytest.mark.valid_until("Devnet") @@ -61,52 +59,11 @@ def test_equal_weight_forks_use_lexicographic_tiebreaker( head_root_label="fork_a_2", ), ), - # Fork A: second block, carrying attestation for fork_a_2 (weight = 1) + # Fork B: first block BlockStep( - block=BlockSpec( - slot=Slot(3), - parent_label="fork_a_2", - label="fork_a_3", - attestations=[ - AggregatedAttestationSpec( - validator_ids=[ValidatorIndex(0)], - slot=Slot(2), - target_slot=Slot(2), - target_root_label="fork_a_2", - ), - ], - ), - checks=StoreChecks( - head_slot=Slot(3), - head_root_label="fork_a_3", - ), - ), - # Fork B: first block — fork A still leads (weight 1 vs 0) - BlockStep( - block=BlockSpec(slot=Slot(4), parent_label="base", label="fork_b_4"), - checks=StoreChecks( - head_slot=Slot(3), - head_root_label="fork_a_3", - ), - ), - # Fork B: second block, carrying attestation for fork_b_4 (weight = 1) - # Both forks now have equal weight — tiebreaker selects the head - BlockStep( - block=BlockSpec( - slot=Slot(5), - parent_label="fork_b_4", - label="fork_b_5", - attestations=[ - AggregatedAttestationSpec( - validator_ids=[ValidatorIndex(1)], - slot=Slot(4), - target_slot=Slot(4), - target_root_label="fork_b_4", - ), - ], - ), + block=BlockSpec(slot=Slot(3), parent_label="base", label="fork_b_3"), checks=StoreChecks( - lexicographic_head_among=["fork_a_3", "fork_b_5"], + lexicographic_head_among=["fork_a_2", "fork_b_3"], ), ), ], diff --git a/tests/consensus/devnet/verify_signatures/test_invalid_signatures.py b/tests/consensus/devnet/verify_signatures/test_invalid_signatures.py index 25f1dd02..2d1d1def 100644 --- a/tests/consensus/devnet/verify_signatures/test_invalid_signatures.py +++ b/tests/consensus/devnet/verify_signatures/test_invalid_signatures.py @@ -98,45 +98,3 @@ def test_invalid_aggregated_attestation_signature( ), expect_exception=AssertionError, ) - - -def test_valid_signature_wrong_validator( - verify_signatures_test: VerifySignaturesTestFiller, -) -> None: - """ - Test rejection when valid signatures don't match claimed validators. - - Scenario - -------- - - Block at slot 1 with 4 validators - - Aggregated attestation claims validators 0 and 1 - - Signatures are cryptographically valid but from validators 2 and 3 - - Expected Behavior - ----------------- - Verification rejects the attestation. The signatures are valid, but they - were created with different private keys than the claimed validators' keys. - - Why This Matters - ---------------- - Ensures verification checks the binding between validator identity and signature. - A valid signature alone is insufficient - it must correspond to the claimed signer. - This prevents attacks where an adversary substitutes their own valid signature - for another validator's attestation. - """ - verify_signatures_test( - anchor_state=generate_pre_state(num_validators=4), - block=BlockSpec( - slot=Slot(1), - attestations=[ - AggregatedAttestationSpec( - validator_ids=[ValidatorIndex(0), ValidatorIndex(1)], - signer_ids=[ValidatorIndex(2), ValidatorIndex(3)], - slot=Slot(1), - target_slot=Slot(0), - target_root_label="genesis", - ), - ], - ), - expect_exception=AssertionError, - ) diff --git a/tests/interop/test_consensus_lifecycle.py b/tests/interop/test_consensus_lifecycle.py index 4ae84cb5..694df0f0 100644 --- a/tests/interop/test_consensus_lifecycle.py +++ b/tests/interop/test_consensus_lifecycle.py @@ -57,7 +57,7 @@ """ -@pytest.mark.timeout(120) +@pytest.mark.timeout(360) @pytest.mark.num_validators(3) async def test_consensus_lifecycle(node_cluster: NodeCluster) -> None: """ @@ -110,7 +110,7 @@ async def test_consensus_lifecycle(node_cluster: NodeCluster) -> None: # 2. Parent chain integrity - slot numbers strictly increase # 3. Proposer assignment - round-robin matches slot % 3 logger.info("Phase 2: Block production") - reached = await node_cluster.wait_for_slot(target_slot=1, timeout=25) + reached = await node_cluster.wait_for_slot(target_slot=1, timeout=50) diags = node_cluster.log_diagnostics("block-production") checkpoint_history.append(diags) assert reached, f"Block production stalled: head slots {[d.head_slot for d in diags]}" @@ -212,7 +212,7 @@ async def test_consensus_lifecycle(node_cluster: NodeCluster) -> None: # # After reaching slot 3, verify head consistency and block content. logger.info("Phase 4: Continued block production") - reached = await node_cluster.wait_for_slot(target_slot=3, timeout=30) + reached = await node_cluster.wait_for_slot(target_slot=10, timeout=300) diags = node_cluster.log_diagnostics("continued-production") checkpoint_history.append(diags) assert reached, f"Continued production stalled: head slots {[d.head_slot for d in diags]}" diff --git a/tests/lean_spec/subspecs/containers/test_state_aggregation.py b/tests/lean_spec/subspecs/containers/test_state_aggregation.py index 275b424e..56d4fbd9 100644 --- a/tests/lean_spec/subspecs/containers/test_state_aggregation.py +++ b/tests/lean_spec/subspecs/containers/test_state_aggregation.py @@ -37,10 +37,7 @@ def test_aggregated_signatures_prefers_full_gossip_payload( } results = state.aggregate(attestation_signatures=attestation_signatures) - aggregated_atts, aggregated_proofs = ( - [att for att, _ in results], - [proof for _, proof in results], - ) + aggregated_atts, aggregated_proofs = zip(*results, strict=True) assert len(aggregated_atts) == 1 assert len(aggregated_proofs) == 1 @@ -174,10 +171,7 @@ def test_aggregated_signatures_with_multiple_data_groups( } results = state.aggregate(attestation_signatures=attestation_signatures) - aggregated_atts, aggregated_proofs = ( - [att for att, _ in results], - [proof for _, proof in results], - ) + aggregated_atts, aggregated_proofs = zip(*results, strict=True) assert len(aggregated_atts) == 2 assert len(aggregated_proofs) == 2 diff --git a/tests/lean_spec/subspecs/forkchoice/test_store_attestations.py b/tests/lean_spec/subspecs/forkchoice/test_store_attestations.py index 2786f29f..24e2d60a 100644 --- a/tests/lean_spec/subspecs/forkchoice/test_store_attestations.py +++ b/tests/lean_spec/subspecs/forkchoice/test_store_attestations.py @@ -17,7 +17,7 @@ from lean_spec.subspecs.containers.validator import ValidatorIndex, ValidatorIndices from lean_spec.subspecs.forkchoice import AttestationSignatureEntry from lean_spec.subspecs.xmss.aggregation import AggregatedSignatureProof -from lean_spec.types import Bytes32, Uint64 +from lean_spec.types import ByteListMiB, Bytes32, Uint64 from tests.lean_spec.helpers import ( TEST_VALIDATOR_ID, make_aggregated_proof, @@ -354,12 +354,11 @@ def test_attestation_data_used_as_key(self, key_manager: XmssKeyManager) -> None def test_invalid_proof_rejected(self, key_manager: XmssKeyManager) -> None: """ - Invalid aggregated proof is rejected with AssertionError. + Corrupted aggregated proof is rejected with AssertionError. - A proof signed by different validators than claimed should fail verification. + A proof with tampered bytes should fail verification. """ - claimed_participants = [ValidatorIndex(1), ValidatorIndex(2)] - actual_signers = [ValidatorIndex(1), ValidatorIndex(3)] # Different! + signers = [ValidatorIndex(1), ValidatorIndex(2)] store, attestation_data = make_store_with_attestation_data( key_manager, num_validators=4, validator_id=ValidatorIndex(0) @@ -367,17 +366,11 @@ def test_invalid_proof_rejected(self, key_manager: XmssKeyManager) -> None: data_root = attestation_data.data_root_bytes() - # Create proof with WRONG signers (validator 3 signs instead of 2) - xmss_participants = AggregationBits.from_validator_indices( - ValidatorIndices(data=claimed_participants) - ) + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=signers)) raw_xmss = list( zip( - [key_manager[vid].attestation_public for vid in actual_signers], - [ - key_manager.sign_attestation_data(vid, attestation_data) - for vid in actual_signers - ], + [key_manager[vid].attestation_public for vid in signers], + [key_manager.sign_attestation_data(vid, attestation_data) for vid in signers], strict=True, ) ) @@ -389,9 +382,18 @@ def test_invalid_proof_rejected(self, key_manager: XmssKeyManager) -> None: slot=attestation_data.slot, ) + # Corrupt the proof data + corrupted_data = bytearray(proof.proof_data.encode_bytes()) + corrupted_data[10] ^= 0xFF + corrupted_data[20] ^= 0xFF + corrupted_proof = AggregatedSignatureProof( + participants=proof.participants, + proof_data=ByteListMiB(data=bytes(corrupted_data)), + ) + signed_aggregated = SignedAggregatedAttestation( data=attestation_data, - proof=proof, + proof=corrupted_proof, ) with pytest.raises(AssertionError, match="signature verification failed"): diff --git a/tests/lean_spec/subspecs/poseidon1/test_permutation.py b/tests/lean_spec/subspecs/poseidon1/test_permutation.py new file mode 100644 index 00000000..45b0119b --- /dev/null +++ b/tests/lean_spec/subspecs/poseidon1/test_permutation.py @@ -0,0 +1,101 @@ +"""Tests for the Poseidon1 permutation for widths 16 and 24. + +Test vectors are taken from Plonky3 (koala-bear/src/poseidon1.rs). +To verify independently, run `cargo test` in the Plonky3 koala-bear crate. +""" + +import pytest + +from lean_spec.subspecs.koalabear.field import Fp +from lean_spec.subspecs.poseidon1.permutation import ( + PARAMS_16, + PARAMS_24, + Poseidon1, + Poseidon1Params, +) + +# --- Test Vectors (from Plonky3 koala-bear/src/poseidon1.rs) --- + +# Input vector for width 16: [0, 1, 2, ..., 15] +INPUT_16 = [Fp(value=i) for i in range(16)] + +# Expected output for width 16. +# +# From Plonky3. +EXPECTED_16 = [ + Fp(value=610090613), + Fp(value=935319874), + Fp(value=1893335292), + Fp(value=796792199), + Fp(value=356405232), + Fp(value=552237741), + Fp(value=55134556), + Fp(value=1215104204), + Fp(value=1823723405), + Fp(value=1133298033), + Fp(value=1780633798), + Fp(value=1453946561), + Fp(value=710069176), + Fp(value=1128629550), + Fp(value=1917333254), + Fp(value=1175481618), +] + +# Input vector for width 24: [0, 1, 2, ..., 23] +INPUT_24 = [Fp(value=i) for i in range(24)] + +# Expected output for width 24. +# +# From Plonky3. +EXPECTED_24 = [ + Fp(value=511672087), + Fp(value=215882318), + Fp(value=237782537), + Fp(value=740528428), + Fp(value=712760904), + Fp(value=54615367), + Fp(value=751514671), + Fp(value=110231969), + Fp(value=1905276435), + Fp(value=992525666), + Fp(value=918312360), + Fp(value=18628693), + Fp(value=749929200), + Fp(value=1916418953), + Fp(value=691276896), + Fp(value=1112901727), + Fp(value=1163558623), + Fp(value=882867603), + Fp(value=673396520), + Fp(value=1480278156), + Fp(value=1402044758), + Fp(value=1693467175), + Fp(value=1766273044), + Fp(value=433841551), +] + + +@pytest.mark.parametrize( + "params, input_state, expected_output", + [ + (PARAMS_16, INPUT_16, EXPECTED_16), + (PARAMS_24, INPUT_24, EXPECTED_24), + ], + ids=["width_16", "width_24"], +) +def test_permutation_vector( + params: Poseidon1Params, input_state: list[Fp], expected_output: list[Fp] +) -> None: + """ + Test the Poseidon1 permutation against known answer vectors. + + Serves as a regression test to ensure logic consistency. + Reference: Plonky3 koala-bear/src/poseidon1.rs tests. + """ + engine = Poseidon1(params) + output_state = engine.permute(input_state) + + assert len(output_state) == params.width + assert output_state == expected_output, ( + f"Permutation output for width {params.width} did not match." + ) diff --git a/tests/lean_spec/subspecs/poseidon2/test_permutation.py b/tests/lean_spec/subspecs/poseidon2/test_permutation.py deleted file mode 100644 index f141d82e..00000000 --- a/tests/lean_spec/subspecs/poseidon2/test_permutation.py +++ /dev/null @@ -1,132 +0,0 @@ -"""Tests for the Poseidon2 permutation for widths 16 and 24.""" - -import pytest - -from lean_spec.subspecs.koalabear.field import Fp -from lean_spec.subspecs.poseidon2.permutation import ( - PARAMS_16, - PARAMS_24, - Poseidon2, - Poseidon2Params, -) - -# --- Test Vectors --- - -# Input vector for width 16 -INPUT_16 = [ - Fp(value=894848333), - Fp(value=1437655012), - Fp(value=1200606629), - Fp(value=1690012884), - Fp(value=71131202), - Fp(value=1749206695), - Fp(value=1717947831), - Fp(value=120589055), - Fp(value=19776022), - Fp(value=42382981), - Fp(value=1831865506), - Fp(value=724844064), - Fp(value=171220207), - Fp(value=1299207443), - Fp(value=227047920), - Fp(value=1783754913), -] -# Expected output for width 16. -EXPECTED_16 = [ - Fp(value=190453639), - Fp(value=458899855), - Fp(value=383789123), - Fp(value=1958965770), - Fp(value=1470307143), - Fp(value=135446903), - Fp(value=1980271247), - Fp(value=26609194), - Fp(value=337889870), - Fp(value=543343594), - Fp(value=900082402), - Fp(value=1267415354), - Fp(value=1018710090), - Fp(value=902823573), - Fp(value=1161524658), - Fp(value=1483653556), -] - -# Input vector for width 24 -INPUT_24 = [ - Fp(value=886409618), - Fp(value=1327899896), - Fp(value=1902407911), - Fp(value=591953491), - Fp(value=648428576), - Fp(value=1844789031), - Fp(value=1198336108), - Fp(value=355597330), - Fp(value=1799586834), - Fp(value=59617783), - Fp(value=790334801), - Fp(value=1968791836), - Fp(value=559272107), - Fp(value=31054313), - Fp(value=1042221543), - Fp(value=474748436), - Fp(value=135686258), - Fp(value=263665994), - Fp(value=1962340735), - Fp(value=1741539604), - Fp(value=2026927696), - Fp(value=449439011), - Fp(value=1131357108), - Fp(value=50869465), -] -# Expected output for width 24. -EXPECTED_24 = [ - Fp(value=556605495), - Fp(value=885256863), - Fp(value=899046610), - Fp(value=1365261647), - Fp(value=799824470), - Fp(value=1363091631), - Fp(value=588658632), - Fp(value=173515151), - Fp(value=783308499), - Fp(value=1346358755), - Fp(value=1865380489), - Fp(value=1166148328), - Fp(value=1402826941), - Fp(value=434428806), - Fp(value=928050984), - Fp(value=1402941053), - Fp(value=201160368), - Fp(value=1850628943), - Fp(value=651578331), - Fp(value=12196116), - Fp(value=759351756), - Fp(value=948448587), - Fp(value=1529251366), - Fp(value=456048743), -] - - -@pytest.mark.parametrize( - "params, input_state, expected_output", - [ - (PARAMS_16, INPUT_16, EXPECTED_16), - (PARAMS_24, INPUT_24, EXPECTED_24), - ], - ids=["width_16", "width_24"], -) -def test_permutation_vector( - params: Poseidon2Params, input_state: list[Fp], expected_output: list[Fp] -) -> None: - """ - Test the Poseidon2 permutation against known answer vectors. - - Serves as a regression test to ensure logic consistency. - """ - engine = Poseidon2(params) - output_state = engine.permute(input_state) - - assert len(output_state) == params.width - assert output_state == expected_output, ( - f"Permutation output for width {params.width} did not match." - ) diff --git a/tests/lean_spec/subspecs/xmss/test_aggregation.py b/tests/lean_spec/subspecs/xmss/test_aggregation.py new file mode 100644 index 00000000..b42c6c85 --- /dev/null +++ b/tests/lean_spec/subspecs/xmss/test_aggregation.py @@ -0,0 +1,427 @@ +"""Tests for XMSS signature aggregation with children and individual signatures.""" + +from __future__ import annotations + +import pytest +from consensus_testing.keys import XmssKeyManager + +from lean_spec.subspecs.containers.attestation import AggregationBits +from lean_spec.subspecs.containers.checkpoint import Checkpoint +from lean_spec.subspecs.containers.slot import Slot +from lean_spec.subspecs.containers.validator import ValidatorIndex, ValidatorIndices +from lean_spec.subspecs.xmss.aggregation import AggregatedSignatureProof, AggregationError +from lean_spec.types import ByteListMiB +from tests.lean_spec.helpers import make_attestation_data_simple, make_bytes32 + + +def _sign_and_aggregate( + key_manager: XmssKeyManager, + validator_ids: list[ValidatorIndex], + att_data_args: tuple[Slot, int, int, Checkpoint], +) -> AggregatedSignatureProof: + """Sign attestation data with the given validators and aggregate.""" + slot, head, target, source = att_data_args + att_data = make_attestation_data_simple(slot, make_bytes32(head), make_bytes32(target), source) + data_root = att_data.data_root_bytes() + + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=validator_ids)) + raw_xmss = list( + zip( + [key_manager[vid].attestation_public for vid in validator_ids], + [key_manager.sign_attestation_data(vid, att_data) for vid in validator_ids], + strict=True, + ) + ) + proof = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[], + raw_xmss=raw_xmss, + message=data_root, + slot=att_data.slot, + ) + return proof + + +def test_aggregate_rejects_empty_inputs() -> None: + """Aggregation with no signatures and no children raises an error.""" + with pytest.raises(AggregationError, match="At least one raw signature or child proof"): + AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[], + raw_xmss=[], + message=make_bytes32(0), + slot=Slot(0), + ) + + +def test_aggregate_multiple_signatures(key_manager: XmssKeyManager) -> None: + """Multiple validators' signatures can be aggregated into a single proof.""" + source = Checkpoint(root=make_bytes32(10), slot=Slot(0)) + att_data = make_attestation_data_simple(Slot(2), make_bytes32(11), make_bytes32(12), source) + vids = [ValidatorIndex(i) for i in range(4)] + + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=vids)) + raw_xmss = list( + zip( + [key_manager[vid].attestation_public for vid in vids], + [key_manager.sign_attestation_data(vid, att_data) for vid in vids], + strict=True, + ) + ) + + proof = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[], + raw_xmss=raw_xmss, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + assert set(proof.participants.to_validator_indices()) == set(vids) + + public_keys = [key_manager[vid].attestation_public for vid in vids] + proof.verify( + public_keys=public_keys, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + +def test_aggregate_children_with_raw_signatures(key_manager: XmssKeyManager) -> None: + """A child proof can be combined with additional raw signatures.""" + source = Checkpoint(root=make_bytes32(30), slot=Slot(0)) + att_args = (Slot(4), 31, 32, source) + att_data = make_attestation_data_simple( + att_args[0], make_bytes32(att_args[1]), make_bytes32(att_args[2]), att_args[3] + ) + + # Child: validators 0, 1 + child = _sign_and_aggregate(key_manager, [ValidatorIndex(0), ValidatorIndex(1)], att_args) + + # Additional raw signatures: validators 2, 3 + extra_vids = [ValidatorIndex(2), ValidatorIndex(3)] + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=extra_vids)) + raw_xmss = list( + zip( + [key_manager[vid].attestation_public for vid in extra_vids], + [key_manager.sign_attestation_data(vid, att_data) for vid in extra_vids], + strict=True, + ) + ) + + parent = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[(child, [key_manager[ValidatorIndex(i)].attestation_public for i in range(2)])], + raw_xmss=raw_xmss, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + expected_vids = {ValidatorIndex(i) for i in range(4)} + assert set(parent.participants.to_validator_indices()) == expected_vids + + public_keys = [key_manager[ValidatorIndex(i)].attestation_public for i in range(4)] + parent.verify( + public_keys=public_keys, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + +def test_aggregate_three_children(key_manager: XmssKeyManager) -> None: + """Three child proofs can be aggregated together.""" + source = Checkpoint(root=make_bytes32(40), slot=Slot(0)) + att_args = (Slot(5), 41, 42, source) + att_data = make_attestation_data_simple( + att_args[0], make_bytes32(att_args[1]), make_bytes32(att_args[2]), att_args[3] + ) + + child_a = _sign_and_aggregate(key_manager, [ValidatorIndex(0)], att_args) + child_b = _sign_and_aggregate(key_manager, [ValidatorIndex(1)], att_args) + child_c = _sign_and_aggregate(key_manager, [ValidatorIndex(2)], att_args) + + child_a_pks = [key_manager[ValidatorIndex(0)].attestation_public] + child_b_pks = [key_manager[ValidatorIndex(1)].attestation_public] + child_c_pks = [key_manager[ValidatorIndex(2)].attestation_public] + + parent = AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[(child_a, child_a_pks), (child_b, child_b_pks), (child_c, child_c_pks)], + raw_xmss=[], + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + expected_vids = {ValidatorIndex(i) for i in range(3)} + assert set(parent.participants.to_validator_indices()) == expected_vids + + public_keys = [key_manager[ValidatorIndex(i)].attestation_public for i in range(3)] + parent.verify( + public_keys=public_keys, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + +def test_aggregate_children_of_children(key_manager: XmssKeyManager) -> None: + """Two-level recursive aggregation: aggregate proofs that are themselves aggregated.""" + source = Checkpoint(root=make_bytes32(90), slot=Slot(0)) + att_args = (Slot(6), 91, 92, source) + att_data = make_attestation_data_simple( + att_args[0], make_bytes32(att_args[1]), make_bytes32(att_args[2]), att_args[3] + ) + msg = att_data.data_root_bytes() + + # Level 0: four individual leaf proofs + leaf_a = _sign_and_aggregate(key_manager, [ValidatorIndex(0)], att_args) + leaf_b = _sign_and_aggregate(key_manager, [ValidatorIndex(1)], att_args) + leaf_c = _sign_and_aggregate(key_manager, [ValidatorIndex(2)], att_args) + leaf_d = _sign_and_aggregate(key_manager, [ValidatorIndex(3)], att_args) + + leaf_a_pks = [key_manager[ValidatorIndex(0)].attestation_public] + leaf_b_pks = [key_manager[ValidatorIndex(1)].attestation_public] + leaf_c_pks = [key_manager[ValidatorIndex(2)].attestation_public] + leaf_d_pks = [key_manager[ValidatorIndex(3)].attestation_public] + + # Level 1: two intermediate proofs + mid_ab = AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[(leaf_a, leaf_a_pks), (leaf_b, leaf_b_pks)], + raw_xmss=[], + message=msg, + slot=att_data.slot, + ) + mid_cd = AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[(leaf_c, leaf_c_pks), (leaf_d, leaf_d_pks)], + raw_xmss=[], + message=msg, + slot=att_data.slot, + ) + + # Level 2: final root proof + root = AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[(mid_ab, leaf_a_pks + leaf_b_pks), (mid_cd, leaf_c_pks + leaf_d_pks)], + raw_xmss=[], + message=msg, + slot=att_data.slot, + ) + + assert set(root.participants.to_validator_indices()) == {ValidatorIndex(i) for i in range(4)} + root.verify( + public_keys=[key_manager[ValidatorIndex(i)].attestation_public for i in range(4)], + message=msg, + slot=att_data.slot, + ) + + +def test_aggregate_mixed_children_and_raw_multiple(key_manager: XmssKeyManager) -> None: + """Two child proofs combined with additional raw signatures.""" + source = Checkpoint(root=make_bytes32(100), slot=Slot(0)) + att_args = (Slot(7), 101, 102, source) + att_data = make_attestation_data_simple( + att_args[0], make_bytes32(att_args[1]), make_bytes32(att_args[2]), att_args[3] + ) + msg = att_data.data_root_bytes() + + # Two child proofs + child_a = _sign_and_aggregate(key_manager, [ValidatorIndex(0)], att_args) + child_b = _sign_and_aggregate(key_manager, [ValidatorIndex(1)], att_args) + + child_a_pks = [key_manager[ValidatorIndex(0)].attestation_public] + child_b_pks = [key_manager[ValidatorIndex(1)].attestation_public] + + # Additional raw signatures from validators 2 and 3 + extra_vids = [ValidatorIndex(2), ValidatorIndex(3)] + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=extra_vids)) + raw_xmss = list( + zip( + [key_manager[vid].attestation_public for vid in extra_vids], + [key_manager.sign_attestation_data(vid, att_data) for vid in extra_vids], + strict=True, + ) + ) + + proof = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[(child_a, child_a_pks), (child_b, child_b_pks)], + raw_xmss=raw_xmss, + message=msg, + slot=att_data.slot, + ) + + assert set(proof.participants.to_validator_indices()) == {ValidatorIndex(i) for i in range(4)} + proof.verify( + public_keys=[key_manager[ValidatorIndex(i)].attestation_public for i in range(4)], + message=msg, + slot=att_data.slot, + ) + + +def test_aggregate_wrong_message_fails_verification(key_manager: XmssKeyManager) -> None: + """Verification fails when the message doesn't match what was signed.""" + source = Checkpoint(root=make_bytes32(120), slot=Slot(0)) + att_data = make_attestation_data_simple(Slot(1), make_bytes32(121), make_bytes32(122), source) + vid = ValidatorIndex(0) + + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=[vid])) + raw_xmss = [ + ( + key_manager[vid].attestation_public, + key_manager.sign_attestation_data(vid, att_data), + ) + ] + + proof = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[], + raw_xmss=raw_xmss, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + wrong_message = make_bytes32(999) + with pytest.raises(AggregationError, match="verification failed"): + proof.verify( + public_keys=[key_manager[vid].attestation_public], + message=wrong_message, + slot=att_data.slot, + ) + + +def test_aggregate_wrong_slot_fails_verification(key_manager: XmssKeyManager) -> None: + """Verification fails when the slot doesn't match what was signed.""" + source = Checkpoint(root=make_bytes32(130), slot=Slot(0)) + att_data = make_attestation_data_simple(Slot(2), make_bytes32(131), make_bytes32(132), source) + vid = ValidatorIndex(1) + + xmss_participants = AggregationBits.from_validator_indices(ValidatorIndices(data=[vid])) + raw_xmss = [ + ( + key_manager[vid].attestation_public, + key_manager.sign_attestation_data(vid, att_data), + ) + ] + + proof = AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[], + raw_xmss=raw_xmss, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + with pytest.raises(AggregationError, match="verification failed"): + proof.verify( + public_keys=[key_manager[vid].attestation_public], + message=att_data.data_root_bytes(), + slot=Slot(99), + ) + + +def test_aggregate_corrupted_proof_fails_verification(key_manager: XmssKeyManager) -> None: + """Verification fails when proof bytes are corrupted.""" + source = Checkpoint(root=make_bytes32(140), slot=Slot(0)) + att_data = make_attestation_data_simple(Slot(3), make_bytes32(141), make_bytes32(142), source) + vid = ValidatorIndex(2) + + proof = _sign_and_aggregate( + key_manager, + [vid], + (att_data.slot, 141, 142, source), + ) + + # Corrupt the proof data by flipping bytes + corrupted_data = bytearray(proof.proof_data.encode_bytes()) + corrupted_data[10] ^= 0xFF + corrupted_data[20] ^= 0xFF + corrupted_proof = AggregatedSignatureProof( + participants=proof.participants, + proof_data=ByteListMiB(data=bytes(corrupted_data)), + ) + + with pytest.raises(AggregationError, match="verification failed"): + corrupted_proof.verify( + public_keys=[key_manager[vid].attestation_public], + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) + + +def test_aggregate_child_signed_different_message_fails(key_manager: XmssKeyManager) -> None: + """Aggregating children that signed different messages fails.""" + source = Checkpoint(root=make_bytes32(150), slot=Slot(0)) + att_args_a = (Slot(4), 151, 152, source) + att_args_b = (Slot(4), 161, 162, source) + att_data_b = make_attestation_data_simple( + att_args_b[0], make_bytes32(att_args_b[1]), make_bytes32(att_args_b[2]), att_args_b[3] + ) + + # Child A signs message A + child_a = _sign_and_aggregate(key_manager, [ValidatorIndex(0)], att_args_a) + # Child B signs message B (different) + child_b = _sign_and_aggregate(key_manager, [ValidatorIndex(1)], att_args_b) + + child_a_pks = [key_manager[ValidatorIndex(0)].attestation_public] + child_b_pks = [key_manager[ValidatorIndex(1)].attestation_public] + + # Aggregation rejects children that signed different messages + with pytest.raises(AggregationError): + AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[(child_a, child_a_pks), (child_b, child_b_pks)], + raw_xmss=[], + message=att_data_b.data_root_bytes(), + slot=att_data_b.slot, + ) + + +def test_aggregate_rejects_single_child_without_raw(key_manager: XmssKeyManager) -> None: + """A single child without raw signatures is rejected (need at least two children).""" + # Create a stub child proof without calling the Rust bindings + stub_child = AggregatedSignatureProof( + participants=AggregationBits.from_validator_indices( + ValidatorIndices(data=[ValidatorIndex(0)]) + ), + proof_data=ByteListMiB(data=b"\x00"), + ) + + with pytest.raises(AggregationError, match="At least two child proofs"): + AggregatedSignatureProof.aggregate( + xmss_participants=None, + children=[ + (stub_child, [key_manager[ValidatorIndex(i)].attestation_public for i in range(1)]) + ], + raw_xmss=[], + message=make_bytes32(0), + slot=Slot(0), + ) + + +def test_aggregate_rejects_mismatched_participant_count( + key_manager: XmssKeyManager, +) -> None: + """Participant bitfield count must match raw signature count.""" + source = Checkpoint(root=make_bytes32(60), slot=Slot(0)) + att_data = make_attestation_data_simple(Slot(7), make_bytes32(61), make_bytes32(62), source) + + # Claim 2 participants but only provide 1 signature + xmss_participants = AggregationBits.from_validator_indices( + ValidatorIndices(data=[ValidatorIndex(0), ValidatorIndex(1)]) + ) + raw_xmss = [ + ( + key_manager[ValidatorIndex(0)].attestation_public, + key_manager.sign_attestation_data(ValidatorIndex(0), att_data), + ) + ] + + with pytest.raises(AggregationError, match="does not match"): + AggregatedSignatureProof.aggregate( + xmss_participants=xmss_participants, + children=[], + raw_xmss=raw_xmss, + message=att_data.data_root_bytes(), + slot=att_data.slot, + ) diff --git a/tests/lean_spec/subspecs/xmss/test_cross_client_compat.py b/tests/lean_spec/subspecs/xmss/test_cross_client_compat.py deleted file mode 100644 index f65e7dc6..00000000 --- a/tests/lean_spec/subspecs/xmss/test_cross_client_compat.py +++ /dev/null @@ -1,395 +0,0 @@ -"""Cross-client XMSS signature compatibility tests.""" - -from __future__ import annotations - -from typing import override - -import pytest - -from lean_spec.subspecs.containers.slot import Slot -from lean_spec.subspecs.xmss.constants import PROD_CONFIG -from lean_spec.subspecs.xmss.containers import PublicKey -from lean_spec.subspecs.xmss.interface import PROD_SIGNATURE_SCHEME -from lean_spec.subspecs.xmss.types import HashDigestVector, Randomness -from lean_spec.types import Bytes32 -from lean_spec.types.collections import SSZList -from lean_spec.types.container import Container - -PROD_NODE_LIST_LIMIT = 1 << (PROD_CONFIG.LOG_LIFETIME // 2 + 1) - - -class ProdHashDigestList(SSZList[HashDigestVector]): - """Hash digest list with prod-sized limit (works under any LEAN_ENV).""" - - LIMIT = PROD_NODE_LIST_LIMIT - - -class ProdHashTreeOpening(Container): - """Merkle authentication path using prod-sized sibling list.""" - - siblings: ProdHashDigestList - - -class ProdSignature(Container): - """Signature container using prod-sized list limits for decoding.""" - - path: ProdHashTreeOpening - rho: Randomness - hashes: ProdHashDigestList - - @classmethod - @override - def is_fixed_size(cls) -> bool: - """Report as fixed-size, matching ream's `FixedBytes<3112>`.""" - return True - - @classmethod - @override - def get_byte_length(cls) -> int: - """Return the prod signature byte length.""" - return PROD_CONFIG.SIGNATURE_LEN_BYTES - - -REAM_PUBLIC_KEY_HEX = ( - "7bbaf95bd653c827b5775e00b973b24d50ab4743db3373244f29c95fdf4ccc62" - "8788ba2b5b9d635acdb25770e8ceef66bfdecd0a" -) - -REAM_SIGNATURE_HEX = ( - "240000006590c5180f52a57ef4d12153ace9dd1bb346ea1299402d32978bd56f" - "2804000004000000903b927d2ee9cf14087b2164dd418115962e322a6da10a58" - "821ee20dd54f3c6a3f6dba14ebc2340b1aa7cc5647e08d0151024229312973331f" - "669e1a268c8a2429d2353393f0d67a6b02da35e589da5bb099ea1ef931e9770c" - "cae83a31f1454b359a4f4227fa1f17895918649115f3416bfa4e7976c5736170" - "bc4e2acaf58342bf8e7472a2d6871e93bbbd01ebb6f30d51ccc3150e1d1e6c7b" - "bfe15ea42cac218a8b94745184ce1f1098d62a9ea7a20662de0464f588225010" - "84da7cbb58833ef9adfe59c17ac121676d92103a52903fbb70c1694717c46951" - "40411977dfcb0e3da29612e27c590ef56967046817cb3727def54b4544f40314" - "27be0a056ba7633334fd4104b0ba550521b61e16ecad72b5fda17de3e7a03bf6" - "83f55ecefd215235c6481b5a6f873bc8134373f9fafc3053164e5f435c3d2ad7" - "90221601ce274a4117f3104cadb00feb8baf79dd48904c5c1e0c1627c17c41ee" - "7ca3760051ec163eee3e38a7bffa5779570a6cc078a630f5494f4917214954f1" - "da636decff784335944a0674aa82096e5136063ef59c6962e95308074fed4bf6" - "a81301d38a7919149bb24d221e5c44c12f82127c551413fef4f40b6f5ad646f4" - "ca4578baf6f11d3325fe356168925b1f75690c17dbfd74d0d39756106c8a6d10" - "c3bd355f27de621c72ca76734e523ebb8e647ef9fd216093f6bf086f075e4dcc" - "607b5f6ff0603ca71787665a504621bdaf9e0b2924516972dc9c0ee1198f4ae3" - "d6f7109c0c0f4b1708262685c7850709275e6e7f14cf4b74647a04005c501c37" - "6d3a179014dc69d26716199b3811773d77800948ad6a6c620d1d2cd0d038283e" - "10c659bd6c3635fa8634482cc14c1d476fa23a40f94d0dcb542b2230bb4f0283" - "3713357b8f783b9ffaa50c32ef9933265a072bbc34b671800a8807fae7b235d3" - "f2cc62804a4e3efecbb420122e6a6b62154976faff37329de17d7691a5213d54" - "75b92132e48d657993d12c5eb5d0164f6af8589c199c1b61cf4619c60d723580" - "97e43e5c5a676914748541e8d705626ac3654342f749361577056efe50e65e23" - "2fd91c8588576db75cd96e004994278441bc2abac25a51cbdc095764bf7a64ff" - "e05b06cea7bb446f6de72149bf850d795ddd15e464bf7377985f422e937e4ad0" - "0563360340c93fd8d0c2695aaac71776f9476c4e574a7645285f5ca714cc021d" - "88eb317d9c0177305bfa06f35622433447803322bf3833b617852b5cbd1d7abb" - "ca563f124886792d0133298de40c6d4a8c802faa83da52211bdd5f13c1a14404" - "16b40acc044774e083394d5e803a6a4a3123549d208c340448655b633d434784" - "88717ebc9f3a09b514852c709cc77ace7bba083cc3826d3542ec663a55750838" - "b83369521b40683a268413a302f90adb9a2954466d8d432b316021228f9763e7" - "6e7a704866b66d0471626ae5f19c345147b64233266b7a58c7db0c246f370b91" - "b490297ce07130166c424624d96b2adcb3a460fb0cce015f9e33194cc4a128f9" - "153e1ddb24e1509e21793796b5b11fadc22218db97f3650ca8ec0e6003086fab" - "38cf251b71ae2dece3716f3d50e26873ef8346c9951742953e0f720420af17b5" - "30c1720f8f606e19a0c223d7059b6da670d12fd555313205312f7c151af068bb" - "0b3d0f80333f2f73159e63a9c7cb46a88ede5ac4ddc20700bee377ec01f568cc" - "179a6ccfc2e86d03912b779e2c4e5cc3d73d3b53f18001dee0032b276d456b82" - "2d8b242d6d5e27b794ed14a2478e1c13eb5d0866990e4d75a27b1cca956737ca" - "c4b16813ca29191720f632f9826e5cd2d32216a9580646bdcc1f0ff114e00661" - "65f1368a324f27a97c3032a697f3317229782dfe053445921286144fbe7d7e68" - "ac441a91c5cc2543ac6908cc171a67cdb0a638e19bb32f3dc6576b8b4aeb5aa4" - "866a18a458972c1521345fbf885238afa6862b0ee4eb62b1c7b94026b8926f2f" - "ae2f469b8bd02a6706995733b9321edaff6c429311f72ec541c65fccf9646f4e" - "2ceb7c58d7f26e8280641dde221f0cb38cee6ccb9bd7238641fb11c576b02a2b" - "47553858208a7ac9b6805a80474c38e3295d00f147ed3deb3d30503ec4076b25" - "43bf307194b2787be3d53f3227ca3b815541709bbbc77a11eff92f5cccca7c76" - "17e303c1b430799018aa0a94c7b152b154956a7e874507895e1735edc2683bb3" - "28dd576ff11a2e3fc07f1ba086831e534dab1c0320920156155f72cc7e90795c" - "268c2486d1dc4921204c53082dfb1b830bd9238794881c985ab247274990541c" - "fa8f0e5e582e2caf44f7598f068272eb4ee81c5c04663504b745194c8c570169" - "de83626063e20a6847b82c77931f321cd3ac5cbac802476969255a13a2fe6070" - "7f960f5df8095c89cc786ffbe1b86a3e0b7f607f98982b9f10591c9c7bd14d21" - "6bac36de88254da273a3601048cb47cb5c2954f34bae09d33d814162bf3d6da2" - "de8c7a51331d437a8012420f6c1323b063e4085e32ee4d2864a14a66bffc29ef" - "bca2328416901fe998be14033cb00b104d6732bdc8a963357b9d1290043229e3" - "21c25f549c467415472e4061a30b616b23700cc930597e117438293330de628b" - "7c465a8d79b150f0cf913a43e92e6c87e8e644412d0815c0086c46e3028b74d7" - "967a6cf6f5332c4fea10320e90061dc0df4b3f01d0934772291c0cc9b8622b1e" - "e9e120a0178613586b1370f71ef508bcc70c0728894621146a707a9c802321cc" - "f7e50d5d4f8a21c5ced8480117bb11404cbc6eac8ec928507e912474c3fa4ba7" - "dbd22781c28761d19e736f63e0c659c94f243b87271e2424505c2118c30c0dcf" - "d7b719d2a6a549f28da317e1cbeb5748da595c86ada266aed25d18575368" - "6e94914c68af6f4c5b833bd91033bbcb6b89cad52b9b65e110683dc96be38d69" - "0780253c49bf454d783aa25c0838e00929155c943d7c80c83d0a22c65e6e49c7" - "60f50b0623f074ee19138c08671cd6a846faf4237cbc4cee192106ed24545165" - "2c591b5a04fd6537255f54a261f7df231fe13a803f617a4719ba15831c4fa848" - "64f581772539091726fd0d3112a55781440796562a9324936110004039a3e3ec" - "26078f76243e1be93df0166270055dcb65a94f2c14c5813145f4bd680c02c33e" - "042d98d17e1c5a9c22d095ed30ad754144ae7f5150ac0df842d4e9415f849f1b" - "36f2c1ff520be3d0721aab9b31c249df28aac8d9378326184262f53307bc77bc" - "6ca59c3349bb29b90b7464ab666f563e5ac741a6390e6d634620fbb33182f958" - "482746ff1138f53e55b9d1a119800e8d6fe04a46044781f813817514338a60a8" - "044b3333249cc9c93cdf6c8537de140943f4907f7926f5a81ed20f1526fd9447" - "412d81e75a05d93b7610e2e27d851b1163cb96e242c08796493f564e0e51a45e" - "17e74b2619dafa0855922b714b84f1266bfc094e494c29175298d9a44eb5cf2d" - "3a696c744f15a1f21d737fb45ed8af333157e88b1c89018d6322f91e751827c0" - "30a6fb9d03554dee606a39cc6b79147906c18b376b1a39c20249a64c2b0b95e6" - "26204ee24dcfa2665bd5ca0405df11391d15b8604130c3de32f7c43726c10bd5" - "334b16df17f17456605008cb3cf926f0166209bc358562f32293073012bc7425" - "0445e39e6cc14aa2613d77de1143e15c2e101cca14b9543d44b248a17c72279b" - "743b0e18483a2331228bd57a3d5ecfa03f9318d269cbf992765ea15678046038" - "749a04c35638c7984cbb90c40b7b94e657bc70a6760520fb4cbe1bbe62f5f7c1" - "21268168361963cf3bf032f71e01d9555655faeb58e995c916d7b0850f681383" - "0583717d36e9b4a319ccc4797386f072485834f4772d291a3976f1fa799ba0d0" - "07822c011ad959895a4b29c11f3f9f07277a1ce94d1c5d9b0150a1e919528c17" - "340031a204be28ff69ad90c13e4b81f354ef8ec11df62e9c62c1de715981bd4f" - "4095a72d2eb68a5811bc059f0f58a5fa539a9a857e68604248d2fd5c28cabdf1" - "1ae4a4692218a18d49d38ff76a6e2b8956b884ac0a5af9cc6680bfb62cf3d83a" - "14d031f0404cc8930898bda055a934624650064e40665ce21754c72b6be81526" - "62b5e29571be85b01cb7728045c92a5a37764a99062abb535c21260612b3026d" - "1145be6c1b3d5e917ee457102fcfc8c5771d011d61f591271220a01e1dc11d1b" - "441217577a5b5cc113421cd740bbe47556719bb51375eda8173d54706cafe98b" - "6b9ad0f9639708e87e77fcbb2bb822ce59f0bdba7746ca286c5b98447d4ca2f0" - "27b827ea4c7987e96a0429696bf9cfa21d6add9b79f2eddf2e6fe1c23c118ce2" - "035ca0e3022270b628" -) - -REAM_EPOCH = 5 -REAM_MESSAGE = Bytes32(b"\x00" * 32) - -ZEAM_PUBLIC_KEY_HEX = ( - "88119868a1228b6b710ece77f9064d5c9c90ba4e3be5a9246ab3086fc5863d57" - "042575326f573f573016c520398daa7bea98d837" -) - -ZEAM_SIGNATURE_HEX = ( - "2400000013abb160455288173880bb66b439784aaa87fa3e82048858ed545056" - "2804000004000000117cc94e1a3b8c08b057451a7246e86d5e3fe92e12def85a" - "aff7e127b315a22a7ce76405dda87f4b44b15a39edc78759d7e17b3334230907" - "df8bca769709aa106b12672a2870f47c035be3598a64355250575f32e9ea881b" - "9de1fa4d930bca74d919a63a350f5a1b14ebef5b06c2dc1d031abb4cc224436b" - "559c501d9e6f2c47be269772a0f05f77d7fd251bb1013d14bb8dcd64e98a1d0" - "52524f913e713c500c9d67f4914bcd879c073d60c5fc0f36e4dae7e0d4883294" - "25c2e8f354bcc2c72cb2d863fb7ef26257260e64a479d5e31902a373f2e6d613" - "e4c2640403eb13407cb27872896f5931d367e6e5695e27102fde00a56b28c4c0" - "df38a2c34d4dd383a58a96a3607ed3071f832e24d8b711625da8a7a7eda213e5" - "970ee5121834a57434114724725b3e34621157c33b717d307f789b414e1b8585" - "0b9e4e422a6f70f0482a011210185e54e0b1b9e6ab987147c3cbe6a022e3d965" - "152fa3238aa1ac67454c40d4af450c145d65e37211c49e8529348f41e43baaa3" - "0b426086881d1e442794c8624f6275a39faf3402895d96801d315112e7ef9f34" - "b018c135dfa70f62d32049a6052c3315bf706495b53386479c042dd304a80184" - "aea07e7185acd811ab961e02beb9067633b3d8749b94d052437d2ed3f3f046e2" - "683ea2c52b9e84d576fd1114a6a06254a7f741634f25b0b33e7d264053979af6" - "ad9310b5aad0cac2a325c88739fc54a703343b073e216fb0e1e68ed59b107b06" - "aeebbe75ff80869238323ae60a30154194dfd7e55a196a854d1955533a07b4e0" - "3e9b52b7e6cadd8706dcde83fafc13b64a3b7762269fea336a58f9a48608c966" - "41cf6e536cb91af55ada33011b8d594516e1405117ec35a17e19e1741843d7f3" - "4d2810f4b270d3177f72ca51e5b44e822b966260375686505d359f92aac91cd2" - "7c707764f9eff0e57f897c20615af84457a25c629a8f12a2a420f0335902e0f6" - "393f27c1536bcb87c8cbb273530add32fbab7ea5cdb992676d3ea6c7e86f1df4" - "ff4ceae6ed2892f52717a431e712e2c4df5201d41f43bb128632d8c48d1b4737" - "0c50bf9332937be7a162fe7540cf2c846dc7de876d751f9428caf4d34e1c6530" - "59b6eca646414905780d0e0031fa7e43b094eed4ae4131a33d94dca39f5324a1" - "0d2e7412a8aecc01b9a6c6d334ad1f34f401f3440b92fb60f2821f81b8a192a5" - "df4ac9c01ac51570fc474c91c320cbe66e663f21fff66a2427dc050655c74f36" - "a4d5b423251aea456635e9c73bd49826fd553a6544439b46390ec1012ab748d0" - "bcd82be138af0670eaeb3ca0cb484033e0070da124dacd61c5efb746f238ff63" - "268bd7251cd624c2f021d0924fd7f18545211495612f49e42d8e0b249132bf13" - "37b84ea0f8f9af378e79f3c2d1a28180ecf30e12d4aedfa4e95bdb629de28d34" - "45b0cfb028a710a741d3fd67457056860e3e8c932d23ae828f939f32527690a1" - "bb0e2ff2fd333aa4a80679f3261a4fc3f19afe040046aae4a23edb363eb0f1e6" - "eeaafc936a5fc185ea6eb62741e2cf3460ba1ad32c070de428a519a49ff8eec2" - "24abf9a489bdf1271a4460919143ac6549ce67b7a6edcb374b7563a00a111e84" - "350f8754b8f1cf110b91ab16a6e485d4d47313357923bae4c559e700ad09b7b3" - "baba4f40f95dfa82c57fb555cd2336165ad2a8866d9c7c429f4cf395cc1b5da6" - "b6d752640f2c0947a11aa3a4d353d480d54bf5428277c6c18748a640cdb2b735" - "46ab50c326db23e51092a7d3cd2c6a90517738d31bef36b2a4d36a75a575f374" - "afdf32f5222a16e0372413e18a7ef3d39795c1d59dac8842314975b5c9f2fdc6" - "10fe5bd011d8a833f75e7ef32d75b236559806b631fb03c676c71de78cac5b32" - "f704e9a2421429765a1e4f062b681c90466001c0db689e334e9e06e69b37e335" - "53658e61517b9372c9537092826d83907c7fb72106840de5a96fbf769d8bf8f6" - "ca839432891a1802bf1b9e917ae674641e0959631aec0dd04c7404e4c3278480" - "f361aec15af575240ce0951627b761209816040105d058364601b4458a8f82a5" - "032a38c4fe043066b61bbd5301e0e366e83b319232e85283b47d8db3a272c7a7" - "03384ec2cee851510b7eda437b66eef2192de155ac239866b43c4415a89141e7" - "821a94d60a7f8806b48f5dd3694b782325079fa1ba68c1d340fc1c73450aa162" - "6222f191a1a417a4c16b184410917a01d9d93a05ce926173cda9a8e2af8c2e11" - "ad7031e5084341b3f2e43c01a7601347a5d80167dfa184b4e20d5db146e00ae0" - "f22c4e53808f78b5aa1411b0e396d993766536b097d737a321fb3ad3c035ed62" - "013ec673f2c4e0c7c6994407e16de9b445c818a57595bd64784219703db57616" - "4d2ad116cca3f2734a0ddf51bf68cce7cfd4c0745c3e2147b7d684d28374a0a3" - "bc2b0e723c06e263a28711b5f1ad36251abcb774b6223f47190e4b3203891ec1" - "fb57c7d2b67d22e1ff72c6a2b377fe5115ff9eb1a61f88521c1b74575d3dda30" - "8f304373a274d57641dcb9c3c325ae9578a1d3b582357a719dc7c74235a89d07" - "ce82eea1e43bf7d269847657e71bc072b01bf36692d610608996ddb21fa0b0f7" - "49cc52f31318e741cbafc520d79385a049404646d7a53bf411783214ec62da95" - "3094187310e742b7a87cf0e04c50c34304d920767cff314436747d663fee0516" - "b65d6b6460e682965d2ab34096f5ce50fab2ab1518220973873eac403a570496" - "3d6758f07e11382273b53690d7e632e72cb4a457852bbab55dc5d035d7e8a9f3" - "4649e10493d4d2d60efd3484b09acba40dc72b23c4c59ca759b6b3a29cb250a5" - "754c28a79f4c413303ee0ad10aa03086dd4cd5e3d13cccf3d41517c7cdaeacc6" - "b88038b3714839f104051c3238189612ecd94b0230f4f6758b1f41b02d191f80" - "bd93db84789c92d2f73252f4e5b068a3b2bc8c65d4eb94b442784773540f40f4" - "67d033235c526166bff17941c93e95e2afc2b37005035ea03d9456f4d952e052" - "c3504a805009842524cb5cd035c2b2f12b1e24764de13f70db3f97b4e71f4de3" - "5b86fcf04e997c657baf32b4b4478521b61a8d200bb02f0792556af0f5516b11" - "ef8eb4d744413e07efed491758a8cb359d54934538d0acb4096f3795e4cecd11" - "b849be92710df224282e2832c5494dc1e7bdc5476376557376c493020e0c6b30" - "000fe7f0733a99e126036cd3672efda1ae05773288e04dd48c6e4164e5d64936" - "009960e134cb38b0c4033406d7580ea0bb38d3443b644b416743a7c69648ede6" - "06f93042d9601d568da767d20f4d9ca5363f19f1e3ddb1c3cfbeb5f3ba8bdad5" - "85e725d54510ea85038e2322c33dfc6674d5f4d06f980086ccf719023f56c2d7" - "18e649c014a16283d4cc45d0b0ec59b7a38397c76ebed2559a9d98b6504f70c5" - "385b94a1e48b1a311b8842d66cc4cc850cf87c02f07d981414db0f204777fe37" - "0705b2872ec83e935ec403c71e708570733277e4ee2e6366ee41d6d749577590" - "09f24dd5775123a0a8829ab36d193897e6dbda05dfe76966bfd28c52a69ab8f1" - "340785d3cc971d116e34184797e15746bf4b8bc0b0ed5240f12c820004d3c254" - "91c514a6c5fbbbb2ca390020a60708e1fc31ef369de3f083e3f6b9968fffb064" - "3f536e1330f371e481d44ef32c43ee73b13f908771c328c5ce71bd32859e0805" - "1d5727657156dda123b20e0270b443d359183a675eaf5f065468b3a60be2a137" - "8f3b3cb58175efc05934aa65322cffb30f2291f125239d8742e4f781b4638f65" - "c4eac24706be8bb6e542b1b0d70db5563280ebe77b3e1146503e22b28a8056a4" - "c5e0100073e6c9223237e0d16eb5175154b9557746cc3bd006639a9666519cd4" - "19bab55344b1907194556b2453e195e3d8ce0a038f4cdba5ddd8c44567a5dca4" - "69dcc0e4baaf3f3231d5912014991f328cb2b872be9ed197ea032c76c25c7e10" - "43238376b03c1d23151a82a29a8b71e5c2d715c0adfa300396720fe7ceef8254" - "e3f5a535b50331d31bc550f130958ad1ba1d0823ea357d72624692c027536e00" - "59a642c06bc47ca7c34d3776cf577ba42bff18e7ac5bb7a0898fa573da5e9e53" - "79c3d5c3f2b49f71afb0e79517b718c3ff87c5475a33e086c7e3ee05d6138977" - "0a21b5f3e768d8404c565150456b2a808bef5c56878bf757824814e7066b3037" - "5421e22359ce7cf23a688c2499081805f821a0561215ab62e5b38f51d3b4cd41" - "956efa112d03db865afd8f510cd155e01ee54746d4f0ee0325854cb524f17826" - "89948a071403f7a44f6d0493a27f3751a426a714335452b2cc131f54254a5673" - "b772f9f7d5e2dc418" -) - -ZEAM_EPOCH = 10 -ZEAM_MESSAGE = Bytes32(b"\x01" + b"\x00" * 31) - - -@pytest.fixture() -def ream_public_key() -> PublicKey: - """Decode the ream-generated public key from raw SSZ bytes.""" - return PublicKey.decode_bytes(bytes.fromhex(REAM_PUBLIC_KEY_HEX)) - - -@pytest.fixture() -def ream_signature() -> ProdSignature: - """Decode the ream-generated signature from raw SSZ bytes.""" - return ProdSignature.decode_bytes(bytes.fromhex(REAM_SIGNATURE_HEX)) - - -@pytest.fixture() -def zeam_public_key() -> PublicKey: - """Decode the zeam-generated public key from raw SSZ bytes.""" - return PublicKey.decode_bytes(bytes.fromhex(ZEAM_PUBLIC_KEY_HEX)) - - -@pytest.fixture() -def zeam_signature() -> ProdSignature: - """Decode the zeam-generated signature from raw SSZ bytes.""" - return ProdSignature.decode_bytes(bytes.fromhex(ZEAM_SIGNATURE_HEX)) - - -class TestReamCrossClientCompat: - """Verify ream-produced XMSS artifacts decode and verify in leanSpec.""" - - def test_decode_public_key(self, ream_public_key: PublicKey) -> None: - """SSZ decode + re-encode roundtrip for the public key.""" - raw = bytes.fromhex(REAM_PUBLIC_KEY_HEX) - assert len(raw) == PROD_CONFIG.PUBLIC_KEY_LEN_BYTES - assert ream_public_key.encode_bytes() == raw - - def test_decode_signature(self, ream_signature: ProdSignature) -> None: - """SSZ decode + re-encode roundtrip for the signature.""" - raw = bytes.fromhex(REAM_SIGNATURE_HEX) - assert len(raw) == PROD_CONFIG.SIGNATURE_LEN_BYTES - assert ream_signature.encode_bytes() == raw - - def test_verify_signature( - self, ream_public_key: PublicKey, ream_signature: ProdSignature - ) -> None: - """Full XMSS verification of a ream-produced signature.""" - assert PROD_SIGNATURE_SCHEME.verify( - ream_public_key, - Slot(REAM_EPOCH), - REAM_MESSAGE, - ream_signature, # type: ignore[arg-type] - ) - - def test_rejects_wrong_message( - self, ream_public_key: PublicKey, ream_signature: ProdSignature - ) -> None: - """Signature must not verify against a different message.""" - wrong_message = Bytes32(b"\xff" * 32) - assert not PROD_SIGNATURE_SCHEME.verify( - ream_public_key, - Slot(REAM_EPOCH), - wrong_message, - ream_signature, # type: ignore[arg-type] - ) - - def test_rejects_wrong_slot( - self, ream_public_key: PublicKey, ream_signature: ProdSignature - ) -> None: - """Signature must not verify for a different slot.""" - wrong_slot = Slot(REAM_EPOCH + 1) - assert not PROD_SIGNATURE_SCHEME.verify( - ream_public_key, - wrong_slot, - REAM_MESSAGE, - ream_signature, # type: ignore[arg-type] - ) - - -class TestZeamCrossClientCompat: - """Verify zeam-produced XMSS artifacts decode and verify in leanSpec.""" - - def test_decode_public_key(self, zeam_public_key: PublicKey) -> None: - """SSZ decode + re-encode roundtrip for the public key.""" - raw = bytes.fromhex(ZEAM_PUBLIC_KEY_HEX) - assert len(raw) == PROD_CONFIG.PUBLIC_KEY_LEN_BYTES - assert zeam_public_key.encode_bytes() == raw - - def test_decode_signature(self, zeam_signature: ProdSignature) -> None: - """SSZ decode + re-encode roundtrip for the signature.""" - raw = bytes.fromhex(ZEAM_SIGNATURE_HEX) - assert len(raw) == PROD_CONFIG.SIGNATURE_LEN_BYTES - assert zeam_signature.encode_bytes() == raw - - def test_verify_signature( - self, zeam_public_key: PublicKey, zeam_signature: ProdSignature - ) -> None: - """Full XMSS verification of a zeam-produced signature.""" - assert PROD_SIGNATURE_SCHEME.verify( - zeam_public_key, - Slot(ZEAM_EPOCH), - ZEAM_MESSAGE, - zeam_signature, # type: ignore[arg-type] - ) - - def test_rejects_wrong_message( - self, zeam_public_key: PublicKey, zeam_signature: ProdSignature - ) -> None: - """Signature must not verify against a different message.""" - wrong_message = Bytes32(b"\xff" * 32) - assert not PROD_SIGNATURE_SCHEME.verify( - zeam_public_key, - Slot(ZEAM_EPOCH), - wrong_message, - zeam_signature, # type: ignore[arg-type] - ) - - def test_rejects_wrong_slot( - self, zeam_public_key: PublicKey, zeam_signature: ProdSignature - ) -> None: - """Signature must not verify for a different slot.""" - wrong_slot = Slot(ZEAM_EPOCH + 1) - assert not PROD_SIGNATURE_SCHEME.verify( - zeam_public_key, - wrong_slot, - ZEAM_MESSAGE, - zeam_signature, # type: ignore[arg-type] - ) diff --git a/tests/lean_spec/subspecs/xmss/test_message_hash.py b/tests/lean_spec/subspecs/xmss/test_message_hash.py index f5d0175d..a1bb2c0d 100644 --- a/tests/lean_spec/subspecs/xmss/test_message_hash.py +++ b/tests/lean_spec/subspecs/xmss/test_message_hash.py @@ -1,8 +1,8 @@ """ -Tests for the "Top Level" message hashing and encoding logic. +Tests for the message hashing and aborting hypercube encoding logic. """ -from lean_spec.subspecs.koalabear import Fp +from lean_spec.subspecs.koalabear import Fp, P from lean_spec.subspecs.xmss.constants import ( TEST_CONFIG, TWEAK_PREFIX_MESSAGE, @@ -57,10 +57,51 @@ def test_encode_epoch() -> None: seen_encodings.add(encoding) -def test_apply_output_is_in_correct_hypercube_part() -> None: +def test_aborting_decode_known_decomposition() -> None: + """Verifies aborting decode with a hand-computed example.""" + hasher = TEST_MESSAGE_HASHER + config = TEST_CONFIG + + # Pick an arbitrary quotient multiplier to build a valid field element. + d_value = 5 + fe_list = [Fp(value=config.Q * d_value)] * hasher.config.MH_HASH_LEN_FE + result = hasher._aborting_decode(fe_list) + assert result is not None + assert len(result) == config.DIMENSION + + # Each FE decomposes d_value into Z base-BASE digits (LSB first), + # then the first DIMENSION digits are taken across all FEs. + digits_per_fe = [] + remaining = d_value + for _ in range(config.Z): + digits_per_fe.append(remaining % config.BASE) + remaining //= config.BASE + all_digits = (digits_per_fe * hasher.config.MH_HASH_LEN_FE)[: config.DIMENSION] + assert result == all_digits + + +def test_aborting_decode_boundary() -> None: + """Tests that FE = P-2 succeeds and FE = P-1 aborts.""" + hasher = TEST_MESSAGE_HASHER + config = TEST_CONFIG + + # P - 2 is the largest valid value (just below Q * BASE^Z = P - 1). + fe_valid = [Fp(value=P - 2)] * hasher.config.MH_HASH_LEN_FE + result = hasher._aborting_decode(fe_valid) + assert result is not None + assert len(result) == config.DIMENSION + assert all(0 <= d < config.BASE for d in result) + + # P - 1 triggers the abort (A_i >= Q * BASE^Z). + fe_abort = [Fp(value=P - 1)] + result = hasher._aborting_decode(fe_abort) + assert result is None + + +def test_apply_output_is_valid_codeword() -> None: """ - Tests that the output of `apply` is a valid vertex that lies within - the top `FINAL_LAYER` layers of the hypercube. + Tests that the output of `apply` is `None` or a valid codeword with + DIMENSION digits each in `[0, BASE-1]`. """ config = TEST_CONFIG hasher = TEST_MESSAGE_HASHER @@ -73,23 +114,11 @@ def test_apply_output_is_in_correct_hypercube_part() -> None: message = Bytes32(b"\xaa" * 32) # Call the message hash function. - vertex = hasher.apply(parameter, epoch, randomness, message) - - # Verify the properties of the output vertex. - # - # The length of the vertex must be equal to the hypercube's dimension. - assert len(vertex) == config.DIMENSION - # Each coordinate must be smaller than the base `w`. - assert all(0 <= coord < config.BASE for coord in vertex) - - # Check that the vertex lies in the correct set of layers. - # - # By definition, a vertex is in layer `d` if `d = v*(w-1) - sum(coords)`. - # - # We require `d <= FINAL_LAYER`. - # - # This is equivalent to `sum(coords) >= v*(w-1) - FINAL_LAYER`. - coord_sum = sum(vertex) - min_required_sum = (config.BASE - 1) * config.DIMENSION - config.FINAL_LAYER - - assert coord_sum >= min_required_sum, "Vertex is not in the top layers" + result = hasher.apply(parameter, epoch, randomness, message) + + # The aborting decode may return None, but in practice it almost never does. + assert result is not None + + # Verify the properties of the output codeword. + assert len(result) == config.DIMENSION + assert all(0 <= coord < config.BASE for coord in result) diff --git a/tests/lean_spec/subspecs/xmss/test_security_levels.py b/tests/lean_spec/subspecs/xmss/test_security_levels.py new file mode 100644 index 00000000..9f1c14ed --- /dev/null +++ b/tests/lean_spec/subspecs/xmss/test_security_levels.py @@ -0,0 +1,294 @@ +""" +Validates that XMSS parameter choices achieve adequate classical and quantum security. + +Based on: + +- [DKKW25c] "Hash-Based Multi-Signatures for Post-Quantum Ethereum" + (https://eprint.iacr.org/2025/055.pdf) +- [HKKTW26] "Aborting Random Oracles" + (https://eprint.iacr.org/2026/016) + +The security analysis follows the framework of [DKKW25c] Section 6. Theorem 1 +gives an advantage bound as the sum of five terms. Each term divided by attacker +running time must be at most `2^{-(k + log5)}`, yielding four independent +constraints (Parameter Requirements 2 and 3): + +1. Digest (SM-UD/SM-PRE via Eq 8-9 / Eq 15) +2. Public parameter (SM-TCR via Eq 6-7 / Eq 16) +3. Message hash (SM-rTCR via Eq 10 / Eq 13) +4. Randomness (SM-rTCR via Eq 10 / Eq 14) + +The abort correction from [HKKTW26] Corollary 1 and Remark 14 adjusts the +message hash bound: the aborting decode effectively enlarges the output space +to `|H|/(1 - theta)`, where `theta` is the abort probability. +""" + +import math + +import pytest + +from lean_spec.subspecs.koalabear import P +from lean_spec.subspecs.xmss.constants import PROD_CONFIG, XmssConfig +from lean_spec.subspecs.xmss.hypercube import _calculate_layer_size + + +def _compute_security_levels(config: XmssConfig) -> dict[str, float]: + """ + Computes classical and quantum security levels for an XMSS configuration. + + Returns a dict with keys: + + - `k_classical`: effective classical security (bits) + - `k_quantum`: effective quantum security (bits) + - `expected_attempts`: expected signing attempts per message + - `signing_failure_log2`: log2 of probability that all MAX_TRIES attempts fail + """ + v = config.DIMENSION + w_bits = int(math.log2(config.BASE)) + base = config.BASE + + # Bit sizes of the parameter spaces. + # + # Each KoalaBear field element contributes floor(log2(P)) = 31 bits. + fe_bits = 31 + bits_digest = config.HASH_LEN_FE * fe_bits + bits_param = config.PARAMETER_LEN * fe_bits + bits_rand = config.RAND_LEN_FE * fe_bits + + # Raw message hash output: v chunks of w bits each. + bits_msg = v * w_bits + + # Abort correction from [HKKTW26] Corollary 1, Remark 14. + # + # Each field element aborts iff A_i >= Q * BASE^Z (i.e., A_i == P - 1). + # The non-abort probability per FE is (Q * BASE^Z) / P = (P - 1) / P. + # Over ell = ceil(v / Z) field elements, the total non-abort probability is: + # (1 - theta) = ((P - 1) / P) ^ ell + # + # The aborting rTCR bound ([HKKTW26] Corollary 1) gains a factor (1 - theta), + # which is equivalent to hashing into a space of size |H| / (1 - theta). + # This adds -log2(1 - theta) bits to the effective message hash output. + wz = base**config.Z + q = config.Q + ell = math.ceil(v / config.Z) + + non_abort_total = ((q * wz) / P) ** ell + abort_correction_bits = -math.log2(non_abort_total) + + bits_msg_eff = bits_msg + abort_correction_bits + + # Useful logarithmic constants. + log5 = math.log2(5) + log12 = math.log2(12) + log3 = math.log2(3) + log_lifetime = math.log2(config.LIFETIME) + logv = math.log2(v) + log_max_tries = math.log2(config.MAX_TRIES) + logqs = math.log2(config.LIFETIME) + + # Classical security: minimum over four attack surfaces. + # + # Each bound derives from the requirement that each of the five terms in + # Theorem 1 satisfies Adv_i / T(A) <= 2^{-(k_C + log5)}. + k_classical = min( + # [DKKW25c] Eq (15): SM-UD + SM-PRE on the digest hash Th. + bits_digest - log5 - 2 * w_bits - log_lifetime - logv, + # [DKKW25c] Eq (16): SM-TCR on the public parameter space. + bits_param - log5 - 3, + # [DKKW25c] Eq (13) + [HKKTW26] Corollary 1: SM-rTCR on message hash. + bits_msg_eff - log5 - 1, + # [DKKW25c] Eq (14): SM-rTCR randomness reprogramming. + bits_rand - log5 - logqs - log_max_tries - 1, + ) + + # Quantum security: minimum over four attack surfaces. + # + # Uses quantum ROM bounds from [DKKW25c] Table 1. + k_quantum = min( + # [DKKW25c] Eq (15), quantum: digest hash. + bits_digest / 2 - log5 - 2 * w_bits - log_lifetime - logv - log12, + # [DKKW25c] Eq (16), quantum: public parameter. + (bits_param - 5) / 2 - log5 - 2, + # [DKKW25c] Eq (13) + [HKKTW26] Corollary 1, quantum: message hash. + (bits_msg_eff - 3) / 2 - log5 - 1, + # [DKKW25c] Eq (14), quantum: randomness reprogramming. + (bits_rand - logqs) / 2 - log5 - log3 - log_max_tries, + ) + + # Expected signing attempts for target-sum encoding. + # + # [DKKW25c] Construction 6, Lemma 7: the number of valid codewords is + # |C| = #{x in Z_W^v : sum(x_i) = T}, the layer size at distance + # d = v*(W-1) - T from the sink vertex. The inclusion-exclusion formula + # from _calculate_layer_size gives |C|. + # + # Success probability per attempt = P(no abort) * P(target layer | no abort). + d = v * (base - 1) - config.TARGET_SUM + layer_size = _calculate_layer_size(base, v, d) + layer_prob = layer_size / base**v + success_prob = non_abort_total * layer_prob + expected_attempts = 1 / success_prob + + # [DKKW25c] Lemma 3: correctness error is delta^K where delta = 1 - success_prob. + signing_failure_log2 = config.MAX_TRIES * math.log2(1 - success_prob) + + return { + "k_classical": k_classical, + "k_quantum": k_quantum, + "expected_attempts": expected_attempts, + "signing_failure_log2": signing_failure_log2, + } + + +def test_prod_classical_security() -> None: + """Production parameters must achieve at least 128-bit classical security.""" + levels = _compute_security_levels(PROD_CONFIG) + assert levels["k_classical"] >= 128, ( + f"Classical security {levels['k_classical']:.2f} bits is below 128" + ) + + +def test_prod_quantum_security() -> None: + """Production parameters must achieve at least 64-bit quantum security.""" + levels = _compute_security_levels(PROD_CONFIG) + assert levels["k_quantum"] >= 64, f"Quantum security {levels['k_quantum']:.2f} bits is below 64" + + +def test_prod_signing_efficiency() -> None: + """Signing must succeed within a reasonable number of attempts on average.""" + levels = _compute_security_levels(PROD_CONFIG) + + # Expected attempts should be manageable (< 1000). + assert levels["expected_attempts"] < 1000, ( + f"Expected {levels['expected_attempts']:.2f} signing attempts is too high" + ) + + # The probability of MAX_TRIES consecutive failures must be astronomically small. + # log2(failure_prob) < -128 means failure probability < 2^{-128}. + assert levels["signing_failure_log2"] < -128, ( + f"Signing failure probability 2^{levels['signing_failure_log2']:.2f} is too high" + ) + + +def test_prod_abort_probability_is_negligible() -> None: + """ + The aborting decode rejection probability must be negligible. + + From [HKKTW26] Section 6.1: each FE has abort probability 1/P. + Over `ceil(v/Z)` FEs, the total abort probability is approximately + `ceil(v/Z) / P`. + """ + config = PROD_CONFIG + ell = math.ceil(config.DIMENSION / config.Z) + + # Per-FE non-abort probability: (Q * BASE^Z) / P = (P - 1) / P. + non_abort_per_fe = (config.Q * config.BASE**config.Z) / P + total_non_abort = non_abort_per_fe**ell + + # The abort probability should be less than 2^{-28} (~3.7e-9). + abort_prob = 1 - total_non_abort + assert abort_prob < 2**-28, f"Abort probability {abort_prob:.2e} is not negligible" + + +def test_prod_decomposition_invariant() -> None: + """ + Validates the fundamental relationship Q * BASE^Z == P - 1. + + From [HKKTW26] Section 6.1: for KoalaBear, P - 1 = 2^24 * 127. + With BASE = 2^w, the decomposition requires w | 24 so that + Z = 24 / w digits can be extracted from each field element. + """ + config = PROD_CONFIG + + # Core decomposition invariant (also checked at config construction time). + assert config.Q * config.BASE**config.Z == P - 1 + + # w must divide 24 for the rejection sampling to work with KoalaBear. + # + # P - 1 = 2^24 * 127, and BASE = 2^w, so we need w | 24. + w_bits = int(math.log2(config.BASE)) + assert config.BASE == 2**w_bits, "BASE must be a power of 2" + assert 24 % w_bits == 0, f"w={w_bits} must divide 24" + + # Z must equal 24 / w for the optimal decomposition (alpha = 1). + assert config.Z == 24 // w_bits, f"Z={config.Z} must equal 24/w={24 // w_bits}" + + +def test_prod_mh_hash_len_is_consistent() -> None: + """ + The Poseidon output length must produce enough digits to cover DIMENSION. + + From [HKKTW26] Section 6.1: ell = ceil(v / z) field elements produce + ell * z >= v base-w digits. + """ + config = PROD_CONFIG + assert config.MH_HASH_LEN_FE * config.Z >= config.DIMENSION + + +def test_prod_binding_constraint_is_message_hash() -> None: + """ + Verify the binding (smallest) constraint is the message hash for both + classical and quantum security, matching the design intent from [DKKW25c]. + """ + config = PROD_CONFIG + v = config.DIMENSION + w_bits = int(math.log2(config.BASE)) + fe_bits = 31 + + bits_digest = config.HASH_LEN_FE * fe_bits + bits_param = config.PARAMETER_LEN * fe_bits + bits_rand = config.RAND_LEN_FE * fe_bits + bits_msg = v * w_bits + + log5 = math.log2(5) + log_lifetime = math.log2(config.LIFETIME) + logv = math.log2(v) + log_max_tries = math.log2(config.MAX_TRIES) + + # Classical: the message hash bound v*w - log5 - 1 should be the tightest. + classical_bounds = [ + bits_digest - log5 - 2 * w_bits - log_lifetime - logv, + bits_param - log5 - 3, + bits_msg - log5 - 1, + bits_rand - log5 - log_lifetime - log_max_tries - 1, + ] + assert classical_bounds.index(min(classical_bounds)) == 2, ( + "Classical binding constraint should be message hash (index 2)" + ) + + +@pytest.mark.parametrize( + "param_name, value", + [ + ("DIMENSION", 46), + ("BASE", 8), + ("Z", 8), + ("Q", 127), + ("TARGET_SUM", 200), + ("LOG_LIFETIME", 32), + ("PARAMETER_LEN", 5), + ("TWEAK_LEN_FE", 2), + ("MSG_LEN_FE", 9), + ("RAND_LEN_FE", 7), + ("HASH_LEN_FE", 8), + ("CAPACITY", 9), + ], +) +def test_prod_config_matches_reference(param_name: str, value: int) -> None: + """ + Guards against accidental parameter drift. + + These values must match the canonical Rust implementation (leanSig). + """ + assert getattr(PROD_CONFIG, param_name) == value + + +def test_print_security_summary(capsys: pytest.CaptureFixture[str]) -> None: + """Prints a human-readable summary of the security analysis (informational).""" + levels = _compute_security_levels(PROD_CONFIG) + print("\n--- XMSS Production Security Summary ---") + print(f"Classical security: {levels['k_classical']:.2f} bits") + print(f"Quantum security: {levels['k_quantum']:.2f} bits") + print(f"Expected sign attempts: {levels['expected_attempts']:.2f}") + print(f"Signing failure (log2): {levels['signing_failure_log2']:.2f}") + print("----------------------------------------") diff --git a/tests/lean_spec/subspecs/xmss/test_strict_types.py b/tests/lean_spec/subspecs/xmss/test_strict_types.py index a0e45af4..ac27014e 100644 --- a/tests/lean_spec/subspecs/xmss/test_strict_types.py +++ b/tests/lean_spec/subspecs/xmss/test_strict_types.py @@ -8,7 +8,7 @@ import pytest from pydantic import ValidationError -from lean_spec.subspecs.poseidon2.permutation import Poseidon2Params +from lean_spec.subspecs.poseidon1.permutation import Poseidon1Params from lean_spec.subspecs.xmss.constants import PROD_CONFIG, TEST_CONFIG, XmssConfig from lean_spec.subspecs.xmss.interface import GeneralizedXmssScheme from lean_spec.subspecs.xmss.message_hash import PROD_MESSAGE_HASHER, MessageHasher @@ -327,27 +327,27 @@ def test_poseidon_accepts_exact_types(self) -> None: assert poseidon.params16 == PROD_POSEIDON.params16 def test_poseidon_rejects_subclass_params16(self) -> None: - """PoseidonXmss rejects Poseidon2Params subclass for params16.""" + """PoseidonXmss rejects Poseidon1Params subclass for params16.""" - class CustomParams(Poseidon2Params): + class CustomParams(Poseidon1Params): pass - custom_params = Poseidon2Params.__new__(CustomParams) + custom_params = Poseidon1Params.__new__(CustomParams) custom_params.__dict__.update(PROD_POSEIDON.params16.__dict__) - with pytest.raises(TypeError, match="params16 must be exactly Poseidon2Params"): + with pytest.raises(TypeError, match="params16 must be exactly Poseidon1Params"): PoseidonXmss(params16=custom_params, params24=PROD_POSEIDON.params24) def test_poseidon_rejects_subclass_params24(self) -> None: - """PoseidonXmss rejects Poseidon2Params subclass for params24.""" + """PoseidonXmss rejects Poseidon1Params subclass for params24.""" - class CustomParams(Poseidon2Params): + class CustomParams(Poseidon1Params): pass - custom_params = Poseidon2Params.__new__(CustomParams) + custom_params = Poseidon1Params.__new__(CustomParams) custom_params.__dict__.update(PROD_POSEIDON.params24.__dict__) - with pytest.raises(TypeError, match="params24 must be exactly Poseidon2Params"): + with pytest.raises(TypeError, match="params24 must be exactly Poseidon1Params"): PoseidonXmss(params16=PROD_POSEIDON.params16, params24=custom_params) def test_poseidon_rejects_wrong_type_params16(self) -> None: diff --git a/uv.lock b/uv.lock index 70fd9806..cc450aae 100644 --- a/uv.lock +++ b/uv.lock @@ -867,7 +867,7 @@ requires-dist = [ [[package]] name = "lean-multisig-py" version = "0.1.0" -source = { git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet2#13703c11e6e8d98be29e1b0cbe6f2d5a8df51d55" } +source = { git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet4#d6192fa81deae50e199c7004be08e083d570cc7f" } [[package]] name = "lean-spec" @@ -940,7 +940,7 @@ requires-dist = [ { name = "aioquic", specifier = ">=1.2.0,<2" }, { name = "cryptography", specifier = ">=46.0.0" }, { name = "httpx", specifier = ">=0.28.0,<1" }, - { name = "lean-multisig-py", git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet2" }, + { name = "lean-multisig-py", git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet4" }, { name = "numba", specifier = ">=0.61.0,<1" }, { name = "numpy", specifier = ">=2.0.0,<3" }, { name = "prometheus-client", specifier = ">=0.21.0,<1" }, @@ -957,14 +957,14 @@ dev = [ { name = "ipdb", specifier = ">=0.13" }, { name = "ipython", specifier = ">=8.31.0,<9" }, { name = "lean-ethereum-testing", editable = "packages/testing" }, - { name = "lean-multisig-py", git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet2" }, + { name = "lean-multisig-py", git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet4" }, { name = "mdformat", specifier = "==0.7.22" }, { name = "mkdocs", specifier = ">=1.6.1,<2" }, { name = "mkdocs-material", specifier = ">=9.5.45,<10" }, { name = "mkdocstrings", extras = ["python"], specifier = ">=0.27.0,<1" }, { name = "pycryptodome", specifier = ">=3.20.0,<4" }, { name = "pytest", specifier = ">=8.3.3,<9" }, - { name = "pytest-asyncio", specifier = ">=0.24.0,<1" }, + { name = "pytest-asyncio", specifier = ">=1.0.0" }, { name = "pytest-cov", specifier = ">=6.0.0,<7" }, { name = "pytest-timeout", specifier = ">=2.2.0,<3" }, { name = "pytest-xdist", specifier = ">=3.6.1,<4" }, @@ -987,10 +987,10 @@ lint = [ test = [ { name = "hypothesis", specifier = ">=6.138.14" }, { name = "lean-ethereum-testing", editable = "packages/testing" }, - { name = "lean-multisig-py", git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet2" }, + { name = "lean-multisig-py", git = "https://github.com/anshalshukla/leanMultisig-py?branch=devnet4" }, { name = "pycryptodome", specifier = ">=3.20.0,<4" }, { name = "pytest", specifier = ">=8.3.3,<9" }, - { name = "pytest-asyncio", specifier = ">=0.24.0,<1" }, + { name = "pytest-asyncio", specifier = ">=1.0.0" }, { name = "pytest-cov", specifier = ">=6.0.0,<7" }, { name = "pytest-timeout", specifier = ">=2.2.0,<3" }, { name = "pytest-xdist", specifier = ">=3.6.1,<4" }, @@ -1912,14 +1912,15 @@ wheels = [ [[package]] name = "pytest-asyncio" -version = "0.26.0" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/c4/453c52c659521066969523e87d85d54139bbd17b78f09532fb8eb8cdb58e/pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f", size = 54156, upload-time = "2025-03-25T06:22:28.883Z" } +sdist = { url = "https://files.pythonhosted.org/packages/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size = 50087, upload-time = "2025-11-10T16:07:47.256Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/7f/338843f449ace853647ace35870874f69a764d251872ed1b4de9f234822c/pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0", size = 19694, upload-time = "2025-03-25T06:22:27.807Z" }, + { url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" }, ] [[package]]