diff --git a/testvectors_v1/mldsa_44_sign_seed_test.json b/testvectors_v1/mldsa_44_sign_seed_test.json index b2a4a66..1aae5b5 100644 --- a/testvectors_v1/mldsa_44_sign_seed_test.json +++ b/testvectors_v1/mldsa_44_sign_seed_test.json @@ -29,7 +29,7 @@ "description": "The private key has an incorrect length." } }, - "numberOfTests": 84, + "numberOfTests": 85, "schema": "mldsa_sign_seed_schema.json", "testGroups": [ { @@ -1321,6 +1321,30 @@ "mu": "f06188802f2e5edbc95f9f4c8f2998f91261ee003f9017075c129eeadb99abe1e43909881fa0a77ddbb332f011e08b9d5283cf4de0891ff8c3ff064ceb10b943" } ] + }, + { + "type": "MlDsaSign", + "privateSeed": "a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0", + "publicKey": "c90338d0d76b7bbb16a4fbb145ad7c7d093a4ce06a054107af4ca984f543d8f12267e61e3127aec0f9d9eb898c26dc6b9540d404cbc1009e7ac5dcfa5adc904bf7f88a87a4316d9eeaf2ebce301f8f1f9b590abd155e78fb76a069bc07514d472061e132a5caa682057994440e57542541187d0fd3993656578f8b5e7006868f7ecb89bf23198406795655e57220d361615c9548fae360fa10b4a88acb2bb106fee605533d2970d2f858a42895df5a381dd5d8a2293209eef7af0f33e5e7f76498810071eab6650bebc6aed6edd2b59c5a805fdbe2e40e1bed6931061758a3fbcea048ac31568304d8cef02fabadd76c4ef7016a30147dd7659c045c410ef4ad9c9b7a89690a653fb66576e0ae9c806486c83dd9edb10d4afe76bf5978777a13af5c706d3f500ee69c118c41fddc3a66fa92a94b4437a543daca7122d58181a5ed6c7f3b53ffafaa6c576e24ba19974c114ec158732abb92aaf1ccab2c9064aa6567130408072c7b46e8d7a3f28809472af86ce7b5f8f08c423a4c0f1900acb16aaa92eab1df95de4f9808d9cf3b9acd2797e8a7ce7990a26d4a1688839c4a79c5583ed37360db871960e2b2baf455f83d8720fad140969ff265fb2ede72ebb434a7be84d20dcb68ddf1edc18581a9dcafa5757af63ec64ea35b3623017e91e89605c540d7c29f7f44a7723b54bd243e711290519c8cfba027f3d07dd2ccabb292e076530ad1ac78c1695376f6b268b8559ce5f9a239465394d502d21fe4f611e37199864737baa8597b0cd1b1d992c95d9e04fe265954308944208b5811fe1a63ea5c1e7174d27d0a445d094c1402c162e3f57f290bf3e24929b558c181e2e80c8ef2185083e64a3b479bbf932267fb7bdcda0e1a22ea04de9e1fb3ab64ddad23baf1e0316b0d930a8763317c6d591e890a280f31807dda8fbea483da1a5f48427419aee2c6707b30f5644d1e74f4ccc64680e4adf01fcdb1edcb6de0f96ee6d84950a67cb89039c5407ee1929823f2fae55b73207f349fc643a14c5ec122f058e07a05f17d53f2930bea61a696f6db9deee1bf2ef4263f7e921acbf35cb79018692961e2da20b0422da00a7cfd100be7bd0b1a7d52d8e09f5339eb46a8d4c541e87a5f29f6d1e167449a02cb859e9936f327a9cc74a8e22e92c78d95a98a923be5138c0fb609cb9c2452a28852b76d49a67d2bc5034adb2abab1f170cdc0c1f15780078ad89bae88cb19352fc6c7d46f52d5aca0e14c1b0d47c8b694246a00cce7120b152eab57f300da90a7e05878c5d209ee5a3624c548a0178844f59e1ee5916a5e5e3e821a9739a95eed055374a3fe5cd3ea58e82512b46cd75d6b662fa6a225acd671c4e217c562c14a939fc5382d23337bf4597082fb5188ca0191bbb022844902769761ddf30802060f2eaa03a5846c1686478917af2a6b76b49b77df50e3f760ddd693a626d1d98e1855bbd52b1e66677f0b74b4a0a54bafcf61498b1ea5b8088c427acde10dcf4ed01d4d65604a2acd9d0b5ddc73ed0d21053eb4378e0cd5063090262b245960d7f6a695a4bbff9abb074975dc28127a05ba39a972bd1e9a1f149ba63e6f26e1909134edb04fd35ee384720606532432f8c62160dea380faa1b1609ce402d98cce40cdf366f3ef42533bdb4ae24aef25c86e45529728740f13df71cc72709b3c3205598dc9fa95314f2eaea71f078fc76399c9b5db704c26060e71afd3315c745dd791abe9335d5dd8248ee68d2a9d72d52dfbdca05fa6d20f5c00f803b92d0cbeb1c8cbf0777f604e4838d29fe2c026215040d988e5bab78476e81f77376961a8d3359aab83bc4a8dab215579acffddd5947645", + "source": { + "name": "github/trailofbits/wycheproof/vector-forge", + "version": "0.1" + }, + "tests": [ + { + "comment": "deterministic signature with ctx length exactly 255 bytes (upper boundary of FIPS 204 domain separator)", + "ctx": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe", + "flags": [ + "ValidSignature", + "BoundaryCondition" + ], + "msg": "577963686570726f6f66206374782d626f756e6461727920746573743a20637478206c656e6774682065786163746c7920323535206279746573", + "mu": "fda5f2240314857c7d76ff027bbc0be0f072723b6a9c07afef777a29aeae02f1413d1e8f051c34e410407a09f447df372340e2bff1af715862fe74933fc7ff3b", + "result": "valid", + "sig": "8a10342703573f91cb9dec8f94ce46a16d1ec22c2246dfb33e8be1607f5b05fb0a0e751ab1610bb855ed310d6896500f57ef44d7365e991210cea78c0435f2b354ce9b4a59e883d1a8995960f5305f4c4a0fe9a265f88bfd9c652c724b961aa555e52d7aaf20759a7eb717352ffa8ae8939913cf30601bbaa9c866743ef95a3d2b2a73ca5cc8117834e00fee127bbff780d56a87ec3a53e1e11af0f4d1f6f466056f8c52fd33a9ed47f87105893e78cf8e35697cd4d7e8ef886975d78783c7acaf97b25c7ae43eec19d04d22979440901f402cce4fea51f8b34490913010473152a3a2ae6fc3349e95d8d2e500e86f1db6ec2b73ccc734a369d8e637ebf6657c05ea9133e6e3d0d12c5577d4b78ea80a190d50c0bae75bbb921f0ef1775e6a42ff45e8642cf2b30b02dd149881746d43f9867fff87c9ab05fa3e22004135d3528d4723003edfeac3cd08da3420c3aa8942b36fe8f7d86ae23b7e8adda0bdfe264afedd07346f117446537bd80640c867ddc31f46381e8e69573c210db39a25476c9a7930d29f4c36417f4f635ea0edf709b9c221213b6368c99b27905d74365fb35bf3f3a57d3b36780bb481b13ed81883d178d9e01abbe1cc84bf6a988675ab36949475f2c362b61cf32f74bd2ab65a3f296eaa44335b9e99913d0aee606e159e460cf74ecbf208f86a585098279343a92309a3cc39adbade7392456b13ec73797390755d858a910e40200b656016192a6cbf8f3eb27442138d10c929516c003a61001a111dcbdc8da6f223ea26bba0dd0eb970eb6b36e931602ec319421fe9cfe425dacb2faabaa08076a78dadef386528aa8c9f6b0199695797fe453085da79632d5e6209b055d77ba9945414260df6b82a68c44951eae4f10b5fba84cbc85f72b86f01f53a419019488b62c1ac194ddcaef9e74ecb7d99071eef2ed3abd894270f9a7a306c75c9445d1ff4c9ecfb267c968fcdfe382f1e9e0d553179cc84ac6c7676b6763984d7a0bbad9ef4c33f1b27246592cadcec2552e7a2847187a571277e856abdc3b1ecc519c8a9a785ba6b1eb30610df9112c53d094c2abc43d62ca3d5c0e166ab3aec51ac5f3259182b9b946a649f7fb32f04387bd58556f7a5bb3d6736a6b40acdd4b514f1b5b95b7c487f91926b4278e4696a63c6dc71b2470c9721dddcb2776a60a6504b5198169f407bbef933471073d4ba527ea6135612cb836beda357f2ffafadad68887237a85af96d68a19a8dcd60112ef5639bbb6aba6328d45b14a403f436761ded05fb2f72682772f1fba788c138d6ff3648ee9e8d717d63c4b320980a81df1a4b0236d94c19b526c2b29a0ac552e1288758fe8be11f40a47040c7592e7efcb257373a873121ac11784ad0107c0fddd4353b4a566cb8ed81454f171e5a5b6bbaee9911a9c7c396ab9c04039af1e618d6167cb26ba34923682e9984c01c7682060efc392e200961213cfb080ab29bdc0dec7db9871b684ae3cb92422d7a779854709f69daf353b9548a38e49a9c35ee5d6af5e2c992cbe42c12a6435285260befede33b92a745aeffdd6cc88f6b8a206750afdff305ae1361f5b38dda2d82b288fdaa94d5f49b6c061d0c16f073c83e38018f2d7caa0b7b52696a51105237015a7e99b0725f89e471829c9ee81c1d6353974068f110f78b75045ec920a8f4c6871c845c3d2072a810489c8650aaffe710985e727c1a1c17701af66ac6e58c5fb3b0b8028306c057185dd45673e15474a6105ec590a1b79f6ad12e9c19d6cbff1b1dbe417bbbff5d91d90fb3413d7b30278247a1fbfde70ead002659561e76f56ea9eaa492e887b3f61b019518935c6d631cc0a72045861960c52c4df6b189d11117cdc4bf7808166b6657721fb8c543078dac24ae11c4b4e9cffe3e2c5cd462e68048676b2c6b168e63cfb5174725dbadbfeef8ad1a2da22710ecdab12d6448242953f31caa78f7ffdaab540ce971be76c745bedb48f5f80b23aa882f5f1387718954692cb4e51f2662201d1d3c09dd4a657616c87cda76157695aaffceaaea95b5b411f511a9b2e845524fd982086929f932035f6939b078bf82227d120a90433967d9a17191093a8bfc465ea6253406e77a6359f1d8d40a2506493bf4c81ff9489039cdd464a176256f1775b9c04b04c936bf41888b8b39f2c63179c934f2563c310bac74313bd048010d2017db5bf823a309181c097604df76de27eee700f9f4b3bf33eff614045a83ee664c95de2c402046c9d3b6d3fcb112e007f94e06d9f8dd4d2ec18917d10e3261f27830c40c69ca00cab1081347e8885e2a7535e841c143b8c5d5402b4f859f1f0d0faa9dd61755d48a769e5e6b513dfd8133c5d916f95e36c9f41c37880affbaed6a169e2bd53f5796dd47c5642b4d5960572f360d19f5de79090e5ed83c1c96745bdf6262ca005bf6997dfe15aaac442ea7f67f20d1660c0a40963f974f103211d28a266d3a6128c590123574f63479060783df4d3fa3bd87c28f28251006ba26e0690c218eaa634cde3fe300e7890e835abc35dff979c5bad40614e2c7c1705b9b85364c503be177a7eaf5d7c919b9f3ac40fd1ad7279f339ab8f13e1c03123594b721a696d530bc1c33444e31db04d8ae688d4276563d8326fb5dc58946e1e25aab4cbc03d20974fbcfafc39025e3b861af37b8caa058988c56f6e6f3ddee9d9709f738377b37ae7416c72c06db610ec572f80604fbdbc9975a41957e54783cb55578bce2741f91967b56dace29f5fea472773fbaf9fe004649100ff26529885727437615dcc6c579db9d0a95ee473e09cab81e23c6bbe11fd6af2ee829116e2698f1a87de45afa3c60bd858faf8fbc3ae4f86ef37c93fbf0a4eaaccaacca2f94430a01c93fc73ef4fe1b82fa88be6c61ce054f155b26004fef0f6da4f5769f56c6254bb9ed7063a943acc8b1302df146f8fd8ffcf79fef3842812b9295bb761c44c82d2976214127e2e085099b9aeabedddc168ebe542857174d60374aae52c02894eb5bbf3f167c9c7766eda961cb19bd52ca351acee657f815d753b1115a63d59d3cc0514890cdc16dc62fb29d1370cee5e80c044ce8c771f2963ba6a98730a79ffa5581c68bb24b77ad2acc465e29192b410a34fada5614a007848e7da8ab3f066cd41a07cb75b2c141dfd7af9e1d951189dc6462f516a285a3da2b426cec674d214d30821ef004f5b24e11ddc19c1a5b9cd945a835e9ae53e2e253b713e67e73ab2e62f69e97e05286d621b65c3729035f97866a52d4998900f034214d1885d24a77773b701c2532485d79888d93a7abb1bed1e1e5f1033b3e506e768aa8bedfe516516167686f758698b9ba102e5b658c929ea7bec3c8d0d1d9e9f600000000000000000000000000000000000000000000000000111c2737", + "tcId": 89 + } + ] } ] } diff --git a/testvectors_v1/mldsa_65_sign_seed_test.json b/testvectors_v1/mldsa_65_sign_seed_test.json index 22b9910..d707fcc 100644 --- a/testvectors_v1/mldsa_65_sign_seed_test.json +++ b/testvectors_v1/mldsa_65_sign_seed_test.json @@ -29,7 +29,7 @@ "description": "The private key has an incorrect length." } }, - "numberOfTests": 103, + "numberOfTests": 104, "schema": "mldsa_sign_seed_schema.json", "testGroups": [ { @@ -1702,6 +1702,30 @@ "mu": "5ff5effc5dd46efebb2aad50c9354a6a06095168aea3de72bf72253309da4dadcb1b6bc36907b7b1ce00cd20f3d7a12c3bdcb8d29bf55b5893686fc1b42168c6" } ] + }, + { + "type": "MlDsaSign", + "privateSeed": "a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1", + "publicKey": "72ed792728950e76e5fc1c23b5a95fdd7bfd22289734722fa5367873df2d5f9cad65c7dea4184713d9e422c6c01413b1542425f02c731d78c834e5e4c5516307ccb5e86e209f06e53871daa2ad8a0d98de7bf8716d17524c49d70d35935db881d9d56ed7d838aed59737010d2f4b13cbd54a019accf918164d7daca4a2ee2cae179b003ea4abb0571409f8250610cdbf1fc4be82bb9731d076e142890b4de1f7365c77de5a7c1ca8f43c56680d9c377f1e79337cd19017438423a551932712e2a2e8bb029aaf9d924e1c4f1c18ab4e4c269aeff48dc5692e22226466ead4a0b2bd34d33f7c7ac0e11aa58160ac9cd6dcf93b4ca73312aa4c70789de7111c97198136164e014ebdabe990919a9c2b016b8b16dc089bcef1fcca77d90e64ae8ef9e9406f426e31627d2aee6e78d5ec74e1c4bb6f10d263d43eeb59cffc5820342b4010a5d0822c2efbcfc7ede0044b4585b86b7aa26228ab5c6b567be4d13dbfdc7b13a818c5f30c9ad5f1e891a0c1b5bfe960ba2a9b2303f8c5e650ddeead7e521a91dc2f054641a0b49f6a84f3f42f3bc6c115fa916727827b7061f665799f4ede4ae7af7d158d92a4bde23aad655d278d93467d5f1d081236c1599c6db52a7404557a243dcab931e624a30f4be8fc6a57bb9a60eed4460ffecee474f4a0d649a668afa00e147f4c0690007cd4d23c618a3de7d20a85541a577537167f6c9bb7deb989d8b8682089a63943d8a0bbf50b2155c6b158b5fa09bf9a575ba0ba39348d3eb66174beaebc05697b64a13f59ebd5c737770b5a82e69bb6694fd1bdcfa9aa57ff5708343de7144b48009df51b0d0ac357d14898df1f0eb9a0fbed5ca74e6e653393b3e694c5560e2e338523aaa736afa3e284b814b1632c02d1f9589346fea897f7ac186700255c0d185677a255a487d31011f0be0f50b0b67fdaa78935bf553e567b46ec039682910f3ed2c97a5d2652fac6a37507738cf582469147a1794111f78e38d26c5dc457f9d36f3ac5e12c3a352a1371167c199713fde1e0e89699401c99624121d8dc45b2fc6ab8cc479b1dfb78c8e2f28fa6db7ea26d8da81d603362ce9cefcfe1c8645aed207b9d48923a169c91bfee9a17cc0c66b02261b9625ac4bb6e084e59e0160a8b1c4d2f76416e3f75480fce90e0cb318688b67df590e74608049e2a6bc731af763bd382de1a10273bc1a018687d752b924359d2ba75fe96f2c851507212a08a367de650e10b48f4dfdc79729ab687bb1a90cefe2f4383ef92d3c9617047a2fc05ac0a8ccbbfd085635e875dd40d82158f67b57c3e934a145b918b21cb0ab66c818661c7e8804b7e3547d3215ab8ddfd9d7315bc2b66c4761a955a5d963728bed34a879c69dca72f2034b495d092084956dc6b89c7cd801bbbfa9ff2e2dedf0ce6523b6f5fc5d5b2997e7a9ebb6412a8541a3543aae6024cd8dcaebe156f54425335053dda501bb2c4e15e2f43b1151cd1d5b56abe5989a35f5cf7f12dcde1ebc0633ec42057cb50ddaddc84ea39c883770832ef55148a01c594f838565a9ee4779b6cf17a617006ba0028fde9f22fd3b39009c56e41e27c14415e183f2d024d78596b885d76d11deaf11ca26dd7411238975e914aa18525d5d5c32f4c607b1d8e2fbd8ad6bf5904d61f71e7f41dfe6028551ce0f8d2d82b06b558833bae888f75981a66c0c6ca09c2ca70dea4420c42de7c208583d497f574aa8ef29e9b6c254d02d90761f32af71d63c4acf0ee338427bbd8a78c39ede1df7d2629d27ed634ae4a53a0a22e6712e8433e9e513836ddea5b62f8fd49fe0290efdd3b89c6e0c987101a31eb673cb1ac0da93a569c6fee357516830dd0346537a963893caea914c863834438251883f498ba61dea394ebc5cb7949c5216f291d900e7e6aba2d3af5e7dda43b7c603043e24dbdf6fa0222679f663bce83f970b8a378ec286de5030ae4437862903752000d3293e309cd20c63df828cc4c9affe4102e53eec0c92239eb9a42b5cc68eaaefca2155d397b57c7f7bba6692b00aa4f28f1b12bfb8b4cd14bf01d72f1066a80ddc075482c6cfb5d9b0dc7686054ccea4f6ebb343b7faa350714b4a22310e00e4231481bc528a0e94d0c53900681363f05c406a455421d6409e8064e36d8aad3b64a8c04911625d678cef77d3049ed4bd98ff9accc84f0ce212a47a5fc5232f69e676e22572958f1c8e3622bc5c86cb7b1fb34eff2ddeada1573ca5a1f5bb492aae4993cf21b6377f7b886d603c911e2337139f8e735da65f0b36e4cb337260995bf4ba21ff282bbabb64c6ba0771d02063095d61bbc6215964e575422f829220c697034b01e39732fcaa99c905fc41a48d9d268b32b441f9c8f21dd92d58318daba20945a3603d6879f1a65900c520352136edc0d6e0518741c1db894e6b5e11ae90c4dd2954f9a7cecae47e499a208db9ed3ab58eb50a16421af73599d9d479a0bbada381fe6dadcd2c6507007d7842dd1f325204e0e3351714a05fa4802d5f309ac1749b200be05f80a33aef15d31872bec8e4486c95fc974c5e660328c8ce21845c831fd9131a0d780286f83de99af6f3e3cb4738ce5191b80f04bc990ef8e545f3ed43641a9a1585b40c652c0e27ec25fabdb9ee72bb1e52e4cf255588fdfe123abb1b938bdaff2f687cabb15c1759a8e0a0924282fb2a90d399d5862f3fc3596c13686210aa57ecd0164c2afd1a12f51627e8a56477d16b1fc813316d795d18c5ced4849594ea7de", + "source": { + "name": "github/trailofbits/wycheproof/vector-forge", + "version": "0.1" + }, + "tests": [ + { + "comment": "deterministic signature with ctx length exactly 255 bytes (upper boundary of FIPS 204 domain separator)", + "ctx": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe", + "flags": [ + "ValidSignature", + "BoundaryCondition" + ], + "msg": "577963686570726f6f66206374782d626f756e6461727920746573743a20637478206c656e6774682065786163746c7920323535206279746573", + "mu": "08d8a02f0de54826af362b7845f59d57b372b34eae122cdb9d95adbd1ff262aa3a50e963eae40f9a1a503c0fd91d6e9b22696f26c864e440ef7657d9366f60ec", + "result": "valid", + "sig": "68d1bca40339f92e5c14bbaa1f52739ebfc5d8509639ab4199e9783221b7fedd111fefee32882000f8184bd1cd8528b00dab31233ed90efadd6ae477ffbf31a8741e11643f83988f6320ad07926e4895349127a8e44f3399172ce89721fdc5c178201196e12a69fe1ae1359f23bd833e9dd5076429d2342cd4b7cfa1a00d5403d17d0055f180b4356c62e0b883e0ddd9e43cefbcad9ca6990ad0c8588c84fdeddc0b137e1af2cfd96b90f908dd3dc2212c445f7ac2029435ccccdf642ae3467f413a3c32718ed1a2128f347e14490db996cbbe78f045f4213d9f36df46ee37c41c285fe7e87b9e2c1f09fe0574dcb1f995cc34895e1c9b00d241dc55d1534d2f6fd426c439d7dc4b147125555fc67f87e1991433e4454c05d7d3dd4aa18db1e17655144c0aa4bd37ec8826a9a50957be42332f82e816b330dbb9e6726c4e6d4fff6718587fd7f367dc6b6649908055d8009c1cb501e87a8681df52f6c4264709324a9a731883ae8399495cc3fc31a9f1905157b8ad55f67aec4d1189db6ace67629b8ee952bcfb4ae925ecff806da046a57b98e0b0e56f6561a527e5e8f5cb7f93b0d5fa4dc3a88cc80017038b9386ddf60df5a5d6c5fc304b16517c6d201fc5344a5eb884f85824abf60c83e4b9e408cfc2dd174fbb4a6144c8f70fc014e46109f751928293dbc52369d0f71a53ffab407e0e12a734c3d25f746e538ff2dfcb242c151e326cfc25975e913173feb4dd497bd88e76a5716784c80bbc98396aeacf1eee010e5f73cacc950c5f4698908dd73df9ba5f46b4034982e87078fc779d0891e79e64a1049e3a04f621e053f3e22df95cc05ab41f84e13cc632ba27fed6ac1f129431776891149d2d872927ad2c2edbf308f77be1f33982cc0b988e12a86d32e32516cb489e147c06b4702e04d33c6e1d2af87d3f0cd40dddf0e4bd429f1e72d86130da5c80dfd4b6af7ff8c8f7542f2ae9d56d7e3659867495c198439d11445ac1ec56c24eb6444ea319560c6a1c681792e5dfa7ee0273227d263cece16ad38d2fb2a0516dba5b29790dbcf3b570bafc9cdb3144c04c990ea1ed5da0d6ca5f497a9b7fa1371102d9ef5c835aa343cb7fae12fa351611f636849834e805811bf2f6ecca87996bb271ef30e8193694f2bfa4701fef915b9ab79305d7d297636c4e686214601c95c669a44e5f5daa5a0906f34bcc12913a229a6dfe049a609f6842925bb5cc907371b9cc32be1087a6174a78e862f415c84af293c9a6382ede2144e93a7f7e4d62a29cefeed8857d0e4813650773d64659cf83ac6421a54f7d973dd3b1118dcaacccdaea15b15005f7d1f9129a4c6a6e153dd6a56ec38da0cc8b86ff9fe937ea5f175ea6c07f3aef6dc7039c28d5ced24edb67b1bcb5c951d89fe6c5772020694e648e1e60494a7e3812f77db2b30e0f0b14df998154c996243fb7182512093dca15ebb17ee9903e50d2d02ed136a4f2921e8d974d8eb3c02706d7658c2e8783f7783853810e50b5f46973ad6fa0c4163aa9d38dd2073b33d0c30188fd8b7c326d4f2cc27e4cf09c7f66e6cb13cb7163ed931cb2111118909bb83058c3d10639d178595cdd10b970c5d85618da4c679431a842a750c5d8b5d17d7e313d55114d51e4e471e7430149eef5f7df1e67c60b9ea19f932a1ca9c0ba978f8321440587872ce4f78ccf937ea5c7946129b263bf15a7985d2212797397d19d27d888272cc66831e7880db4dcc3763f93b05520c1aeab1706490f074c8e30eeac95d36d5caeb8bd8d13aa987f68e5a8860e375ededa391acfc30293eb6c6155cda86e12c02a7cd6a565c9eede4e643a2043c83987f8efb990ba66b2a4a9c8997b128b0ca32197808c7d05bf26e937bc61c02171621c53cdf3b7a58d0de1c5d377949b2a2ddae3e5c0ef1e4fe54293a0b13abaaf87a1862b931d7cc46b3405eaf337c7e5b73862e6018e99b137b0fa194ed13c4f6176b4550496827051888be91511770e84c97083549e67cc34a4f1b34fc85d2c321bc5e93837cdf79107cbc74d6b1822102a28ef33aeb593c23399ebcf05af093246204f5d2323fb032f80ccff2ca622c0036386c1584c4a8ac56bb6a17a2b2d30f07727c4e71b2f8eba94ab8365ce5b6b9aa19182c6db730a5e84e020e9590ab3fcdbfe484eae8339f3ef9389a1e735c880e191f77f3c24fc7a1e386c6299d65adc5d794064d96f48515ac3316f560866116cd8ab5e5558d59a38143c9a86c8069234cc7853090ada7734ffd0d75cb0c95b45014bd15063818fcac5eb2c4ad8f16d90e3a17b490e8fc26cfe160a3094a51bf2591fd75b18b71f6e5a3d0f5b819493ac5be7fd722f133e9d3625bf676caee7ab8e31c10509b9d4fb541587b2a043b8ce292dc039e065a264793f7123d28b7b69fdae5f8a770ecca985f4725f66b33652e48236a02929e9d299064077db7192efa5c9eaa0b45364b1ec6dcd3e0a4974552b2d377a2be12735b43199590538a52784318a792bf6dd44ca04427233de8f67c8e1581287f3fbb28b1ca01f4b392ec628346170828bfe0415d76deb02c98bfd746f22935f625681c247a1a570c7b021a459b83c3b9d7680d930a246dd15c3c5408c1d4d264486f9461108383f058b44ad98ae8ce8691239629949475759b4816bca7eb33e657307996f310e9a04e28834b2fe2eb20e99236a3634e5deebaeb678d8933966537add5f7e880f8ba39c7b25723624636daac7f86768d734b70fcc523310f70c0a12ddb15e58d4eed86541c34bdffebfa8d2f947be4c8b0398d5994a65dd6a30d79c6ce5cab4159e112f64bc2f1776dcd1c0814c30f7e5cded75bcc028b5579a41ac6e276f9a525664994d7115a23f583eb7809d588e49d1d269892cd32445307fcabffe7a826b1ec65224fef61d4351468fb936a974ce4476ac1ea7e6288573b4daa3cd936aced1691cb5b69111fd94c34be02dffb5ffdc410c68defe55332fc963e533c7bea56e2ab435cebad7f9bd414c102c778652fc15f59989f83632648722b8708d572c0f6fd050fc6d63910de311a739560a1d248421d68198708ba3acc08cf3b603a5763e2bfdf76e704a31bd20272ff5585f83f3966cd50c5b20bf9afc65cb082c97e5a9fc482aa0155c65ce0da2f17cf36bd87675919e2d1b6d8becd5b087ff43e5295ebd1cd7cdff5254babfd3ba524507cc454e1641520d69b58439c317f5274d0cabda11c69ffbb77667dd13afa1868896146901f2641897e3a4ab67d42bac1ddb5c5722ec95160049027509ca16e5b415b99f3d9799621ced579bf56722b9c563c0cc957db1d30870506a8548c55fb00c228a49741e30d45c8c25de37541cb268daabd60047344800bba0503be226cc20d0a1ff81e9ec05dc4a721ecdf9ee756c1dcd18fbad73443bff5fd967c871bc6de22f349d8863a1522957982dd31d3fd49868ff4b7cf65ed4261acfb6ed8017b5637ce36fee0ebfd59f1b5bad456313797a03f930c4425b16def7ec87a9b02dfc3f86919b3964f67f60032aa5af028f575075d03f6894fe53cf0fbe6de4f5ed37b80d356a130184ca1ea9079a21bf136b68b1606302655ef4bac1b13a325f6ecb89d02943c6a96bff47e323b03ac65df6feb4ebeed281b5538e5f938ef3ec00b9f0b0f5c9d3d09d05b9d5f388831bf42b032350f55ba15f35d710ef59d8b5f4612113d5a752aeb73cfe9e52ef5f5557a859c1fc3fd74ac57cd829821cc63f99adc2072a71a1fe7a197a712282e21864cae068d7db80b557a6dd3a380b3fd8dd9e1179616f98250d14cc44881eacbde57e627fe5e326a64f9590625d7bb2a56e923dcbe68491981fecb17f109d887123d1c3ae80940d254b1c238feda80ef2b39d35011c366b6c6d53e3cae73a3d699d0ff71867ce9b5b4a306169c6868a3ecbbf6ccf59ccd63624ce430a251f0b4bbb1c88e61196152701b9d59ca43fbe2310296860c791c660779ecfd60cd31218e2b31f6b5a0ca5a3c17f70ad2717997828eebc58e321d2fd899161867e0ae1ff41f448fdca1af09df79ff90d10984215e47ff502fdfd132b0fe1c963d6cc1dd75ca481a5f64adbf0e149a3b7b810103380c63e37f73ed240e079d2bbf07470249e648217698d758fceb8f9025dab82cba602aa0e716387a78a07e6b5c526092b1eae4d8f2860e7ac957ef06e238ab1058b3d8e6dacfa70c1f843f3c9386e05a04f7fc9ca81f58e1853667e5658dc1ee40233490efd9bdb4bc8844bc4d89c0922ecc8f4b5cbe7fe7de0d2e5387487459cab958e3456e96ddcfd1b15513f7464f8ee696f6db1ab2bd38ca8fc02bba882f9a29d75dffb480c79bf53b7334b83c772ff241398a23baecfef4e1d1f915d0202d46c6d6188cf49bb6af35c4e40e1eff0194d3308b76815fdb381bf10b96a5e0d06caf34a7e20e77910bfdc63e96cf1682578638bb98eacb503d2f1f7f3abf1b49898322103b87fa096e63dfb6a33954f144d28b7b66cb752574cfd562b30cabb106ac7b9136ca196b7272ddd6939a14a7ec5007da657730491647fb631d0056156c5b0724a2259b08a688c5e8deb3a880dfe43d2b64e62818f9d150f667dc9fd36435a757fa9c2c5dcf5353b8d96abb3c35784a6d81f0f114568758ba4a50000000000000000000000000000000000000000050f161a1b23", + "tcId": 108 + } + ] } ] } diff --git a/testvectors_v1/mldsa_87_sign_seed_test.json b/testvectors_v1/mldsa_87_sign_seed_test.json index c774a59..546c2dd 100644 --- a/testvectors_v1/mldsa_87_sign_seed_test.json +++ b/testvectors_v1/mldsa_87_sign_seed_test.json @@ -29,7 +29,7 @@ "description": "The private key has an incorrect length." } }, - "numberOfTests": 94, + "numberOfTests": 95, "schema": "mldsa_sign_seed_schema.json", "testGroups": [ { @@ -1594,6 +1594,30 @@ "mu": "ac70d1f17d06f9455ccd9b5a5e9643f39d7c0c2ce16356225cba8d874ce05a2fbe0ada02ece5fdaa24fc8176f2846b22d2bc092e2251c0fbc5a4e25b5207f89b" } ] + }, + { + "type": "MlDsaSign", + "privateSeed": "a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2", + "publicKey": "d7cf648c58e499e236fddb4d5cd9432022463bc312dda201a66c929bc13cfd13e139f0897ef922566f89686eff02e850c095f69bc88b49a78b3ddd9b88bfd83b836d236232f98d39486e8e405f87b5a3b86f1276ea8cd1b208cdfd678b3b6a536654be66d2128f499a9ad70301331c7215e50bf40974ea7c37ff6b3b98f33d22cf756331cd8f0e05d88f3c432a33ae4c3f05f7c2418316789fa4a5b7e6c4e4b3ac554d7946e73367f38cecd554ab64696e3ecf0d9c8ca266897a32cdf402d9bc8df9b0f56b559af3613f6bc689773820a6a39feaa5a8b592bb057aa642fc5dc1f586dc359f4a2a9650897d8c969979c7927879b46ba2b300b5f789cd14dffb8f3df50d0859909af6320d1867e0ecf28c6ded766b93bfd5c2aff6cec0e8c19b24fc316c322f6b6120f8e37958d418f43a43164563d2e98481d17e1478aa48b1e43b8fbc8e0c6f043c01bfd7dfb7f6fee82b494bd8d2d2a52c173ad2f715b443bf49f5b6d160012479ddb374f6ed4fa8068149d6d9ccd2488f1324bff8cc6125232d94106ce403b951a0b1ee93b01870c7d7b3cbdcd728c0df9c7d03994e91aa5b9c9c88ae16633525977e1c8470bfe90046729a87e7de5f1038ce254e8194a70c2d6ea69852a6e5b80d02b9b9ea0481f5daa69fb9cf606b218d30975629b004e90375d32e09717479acd267ec55120aa6c8171dcadf0c265dfcbb7c1e498c2be7894f37f6611bac8d767339563085da403739e6ec4789de9b985c1be65e2de482fb6f704b5cc598fef32f2892149777520822f6e0d88213ed8748355b3649367b496bba857833e0e554aeb2a7da96c50c8b70b73dd73d1e5c51cb82cb390fa074570f7aa8e8e252d0a6f77c35ce93861809ab94c376b9b9b0da2138a7209ccd1cdc351f51b1543c3cea088b364f45d19f479a3e9edcecfc30ca69b5a7e0ad7cf8d2ffaef72879e997fb2d2f39435be74f09fed050f4fffc4f550229e97915c8a2c182ff0b0d7f59a7fcae60318ab9850c36e05611bc5ea6a73aa1493cd68e4fe20f14adc7e6239026f533a64f87709339865c4feb3e16d5cd4f5ff4c7e6e6ba3a83e2a23aac7e199cd1373dcb883f1ef65d5741be28cb0a4eac48a61bfe249342a52b4f9dc02cd48b8b7edf69a1d66594873c21460acf3259c802a2b4025d8703ddc68a004b706d209797433076c909dd43acda2a0aaab12dfa556a643e46f4c26b6304155a05d95faa4b8e9b9391e0cbc346de70daacaabf78e938aa3eb1907c84650f68ee299bdbde87fbe9a803c4752a9a10d2099f74193d9ede0baf13dbc3448cc9315faf4e438a4b5c65a1f9f96e6e2e918dc688f2b370c682259f23e5c2992892054b7232a002f11af7b3a4406d9e1efa1b4d49c8f763b5e2b99dbff8f57124506e93dbba3b6aa907eec647ecca1cbe3b13a2e22cca4b27a76e37ea694e3a39a788e0f26a347e605042e8f0fd1524df928df54e7de1904581b8b702428449b3010a88a4aaf9743a2a39103add3291abcbfac8c79616b2b2e8e3fa490dc742aa18d2a107ba397267c763ddc0184f591808f3b95da10ca931e99ce8defa750f36244580001ee6620bd5f7d2b2aa8ac2b6aa9a01979d2aff561a929ac291d3c5d68271225ca864508e4417515f3d98c8e528b5f083ecb21110e927e2aa0c00dd72375f835874cde6f712a0c053c14c39c7ddc8d83ef0f6ac68cdc0f1c1261c273ed6e0155f0e60b7a24e4304fe0551f3e6c532a17f9549a08cbebf3181d53356daba3f08e651f32030528feed98949648ff3d450a44f05fac74f19dbd20e9284da85f51342b7b8d7592b35a55f54425cdd389dfab07c67481bb4d1f640adfc5748ccf79697ebb5d908ba43ab2d4cde38420adc16a806010decc32a7fb5a57362de4cd36fd1de4e1cb0f879c0d659b4962de32fdd10848a63fc34345c7be45fa9828e382bb830dce4b7d20f94af3645638eae6101148f60911b3cc6f2a5d23cd39b7f58ceb96d510b454d60e8152034d91691a602faa74ac3e211233cb115af48fd8b369eac14194b86eed045507bc987f383ea098ff78c5d45b9ca28432913060c7a93d8f2fed453e6182ccae1a6b65e3f1c234bd4531298400711880b32a30e5eef5cc32a1775e8714b2ac2c8715e70c8a67dd4c8f1fc989e331c0206e1de36c692ae7665003e81b9d795adf96798685856d89c8bba8459794a1b48e496cab3ffd54e9ea81200fda42245fbf6c12da4a57f5e51d274be53b5ba17f334da01e2802cc22f1a10c03a72d98fccf6593902ddef311346e49e8786d75114e2556c34f14cc3b34d0c42970bafe1a516bfa4e1c7785dc1760acb7001f8b5500ed44b74ff0552759db3252b6e04162702eab9506dea3d0747ab8b7aa21b62f0fed562d3f372fbd092928068c70d9c2fcac6d9590951ae06c7a4f92196fe166a4ac63120cc551a9bd56d503a0d6b179624d7a7b985f59d0e2d13c4c4e2fc230c71c53e4d85c2cc3cd02defa91144aa2f229ab964b2daefd9e2aec7e2ff78d35b948d85bf60d6b997c0dba35876361fcad251ebb531a76b50e32c387e91ee113f632abca0af0846b48822f57ca529a9cd5f11da8b17e83d1baeffda090d8198a3aab7b2ce23298e44b7c6c4e57bc51cb4d8e00a7c116e52c604b50d398549c047c99f1753212c6bf6f82d8d3bbb871ec908bccaac7c81fb5835e436395e483315e6884ea90a079b5a23b1414ec30ea61cf38185bce1059d0745cce3b528072725a2f6afe2ca29ac4e55c18902f95afaf95a3cb20bc20b19c0ed3f218d769508819880b5139e3c73cb85a5e84527631d40645d44cc3846c3b0f8d4f8726ded0bea17a85daa1d7aee14e1dfb5256f25861ba9c6ef7bf92c9407d03c4d8f33d3ae13c8095f4da7826c2d66e147fa6724b6026c8ecca1308463feaac8b691216db9c69b692b0fc6f9faeac178bce1a89181601e9e89287ed9772e5bca7cae369e227cac1d88c932be910b9f35c54afaa48846ba74834c2a0f7b9ba24ada80ab098a81ee3e147e879a45a90233bce6d956a8348077d4fb0ff6941adbb1b1d709e2867240ac406bb40cbcd0f0589d86a0a404f61401cd7770a0365621ef8dd516c31560c6410b11bca5020ab6c8dcc4d66843e668c320b24889c11b29fcc0354390174236ef9f6887f7fe477e57c8395a57d308778c518f9e5052946627887fc15214deb5ec0a977c26502aecd8f9414a8341880a411a00b18f60d66d47f75c55c594f8734c8cf6da51485c931e021a5c2e4858f5ecfac458e19b89fd5ba60762818da8188d2cb0ced0f2565f9a8ef58c3a89b6c3245f15e80a54c65ce759afbdb58303d06f355bffc17fdcaf3bed731ed959807247a917075ed642dbfd4d573a7069c4707a2b1a59384b1924e76e76f587dd6f16cc50d4509e188e1fb2abd5a1c51095d74a5fb1a06f9e3b74af4cc1fbc05869f45ae16af3792182db40573b75d13b6bc5efdddde60b2fca66f6918774b0ee3e3b9a69b06e76a9c60098c3e32ab58ac17243d39eb281751dadbf0159d5651bf505e2ab10dc42373b50981bc72501c37b84790ebcb36409d85b11e8e465f0a9b8458ed23ce62f42d83e22881f1ae0aac22aff722c88b8364a8aabc9fa3f9889dda39234b98c3b84fc8a2d08f1006d99fff074e2", + "source": { + "name": "github/trailofbits/wycheproof/vector-forge", + "version": "0.1" + }, + "tests": [ + { + "comment": "deterministic signature with ctx length exactly 255 bytes (upper boundary of FIPS 204 domain separator)", + "ctx": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe", + "flags": [ + "ValidSignature", + "BoundaryCondition" + ], + "msg": "577963686570726f6f66206374782d626f756e6461727920746573743a20637478206c656e6774682065786163746c7920323535206279746573", + "mu": "57725f34470365450e91ea448c06438d1edb91e8b6ded0919e41eaf201f636566a2f621d77e6d895c5942a43a276db3ec5272d0255fad332fa793eb30e5bf7a0", + "result": "valid", + "sig": "bdd61a3987d53f4372afad76cff93a935e47a502c14b38f4f63710291ebf8d342888a07d38e39e5267bc94d871f38a11c53484e0b87d636a1c0c2e86a6233cd143a9dd85a75445aebeb3ce0a540ac0d28cbc067fd139a205650904bd7e3b9820383ff150930f6b34d13984c256fbe296ee5ea27782e4a426e708c4a2d97da81684b1d42d905a1ea091ec854b6a5356172c44af125d40c0e943e977dac11e89c75eace4c020de36c1caf60924e6cb8c22e7d003240e0cee071fea5cdfd5a84580565a3db09e64f01a1b18e6b35bcdab2b056d520467e071b80b86625e24410473dd04c3728349244c947e73face6102ec340bf4a0a79521b8b4b4979e4cf5c2eab4297f745694a9a726af5d12532645f7a06ba8c7c325a70d8c509f1a49d058c9515c9cea4a36802f92b4812f9ed4a2752a774ac72a02d0d51cccd10b8e7a825dd7b316677f6ddd235d34cc7a8df00a98c318f5d78ef55bba91817eac4d6cf0d6c2686b606f87ef37f06dab9c249a32c892cd8546df1deba9ada6104cd5e9b6c52454197cd7ba536c51854bd69cefe7bcae8a1bd2d74cb6b3fc6cea8d3482d72c3662c4b7cf1b762692ddd8f313a80de9193df140d7180f11d13b184d79aab03b3bc41d35bc83004a2120ba1e1167b706f1aeaf3f4124c980a410986a462f7bfc969992ef5818ed4ffbb9a5201ced6579daeef6574ab62fd535388c288dc367878c99b526efdd70ea5c094e60aba6ac91fd5b174b6f21b48c882834563ea54ea61586cff3da69f8da353e18d4e9b135123abcb1022059ca0a7b6b06823415a6f3ef8cdfdedadff8313186ef94ae797eec06c4783a2003afcf08c369e4e3cca3632e0bda3a43d1633239efc2bef49ba5c5fa7083dc7efa97da682d6d3543274e74f7a21427eb17713bde504a1eaeb2bf0cda8531de6b748eccca60e64c30775d12a3ef650a03f420357517001c331d5a079da1206fde84ed1043f7f663167292306010f4354ccc1d35ac9a88a511b34c53ba9df9beba7b32ac3d458615114d79708f28c927d5a67558d4e6f20665e0b3f3e22b10d777401d85f9e38cb6eaa215187e329adc458631a4701f0a25f3ff7459367a4ed1eeb9ef765e0cb6bf0e3f924023a5947cb415067880dd9287e70707f9d84c91ddcb88a12154d143db06e086035e33431a4dd9f1423cab23a81cca278e58c24f7ba417d65595be987c950fed680ac60da86382dd32d4c3e74f54b409f51667ad606ed37a8c0e51ce7589d63a7a3b893ae8fcbeab915afc07f87b24acd0ade8e86788b14c241cd1ec3eb3634dfd8567bb4747f5385bbc449b9e83344f7740c2dccf2efec69cfb324f02a47e58a7ae74951b3b5285ff11c94a29139d9f639c2edde48e5b3125dd960fa5592ab125f2ecc633f27a7fa819f80ce2e1d182b9342221b4c764fab760ffe27a3b5907de717c9564a6098a240e4ad7b55572971a1fa3cae51bedd14109bdd6dc216b4dbe2f4b381046426d84f148404fd52a4a0d912d03499d2dc0ab945820298f69fcaf0787a357a80bf215992a9203b2414f1aa1032df0c0817ecda2e4782544413ba3f6c82dc7d1e3a5ef0a7f1f1c1fa9339079ce6d33841e862f452cca988d06665f74d5989bfbe7c6ef0455c8aa002a8bffb2ebd5099f8fff65243916c4ab43d5cedffcd9bd9098176741e48795b59aec225735047b903062f871f6c89ce50b1e9013a66a136bc51ebab1aed366f211e279cc6f48c836cfcc2a77d176b37c76df1ce34f7ca98a35cfff23dd95106e361072f8871ed5db04cdfa5b5220242f59746e5c5e3b7977b64a27794b2412fc6f5b7055f231c5d710fa405e02518dd1f16ce2415bd00c8a4e6bb8194177e18db3963d5d5b33871007e58db14120c53b0361506b2eea5bf1ee6f46af4a6f653e206b687d0a6d8b2b92aed621146232904ec6ca94473e06d380afe0e4bd847feba6d801ce860746e487c7296410907721d641a6078ab153add24c76812befdcf3c695b6f6b4d798e3cc290c61548c265fc532007971cbe7dec05bfe7bfb3593af14c8cb6dd124d32785f28bb51fa61f1cf38cd54cbe9814e6db6042a3dae34a02b01eefe27b7f032fc7e43eefd2a353ada2add589dbfa19e5b9df02d59709e70a627b320271a79c52db52f4ae7d4520ee79b4476f19514930a4eecc604afcae8acf72752ba29a8c5abaa22a1bf13ba2de6a2dc084e503e6c9429e9c43247ab6fcb02de07a7f7b710efa965783ceffea6f685b19df703a7e85b75f3b243fcdc813bdb98d203186bcc1370efb892899c7f32c716f64851875bebadd525536988b810ee5086d900b7ae315a50aa29ce4af14e95b41f8246870cbc071a3bf9cb69de0b76879b125f3f89bd4f91108cc3365f7fb5c4a2fe4a21fb8954e5a8762bc7c9ab4f1ee59ff83fd0ed1bf2fb233f3ce289aa43dd51ac99048048a2b0b042865e26dcce93ac2cd69931e25f1d9e642a99e88c87f75ae511f6799daa78c07d20300239314ecabfc9cfe88943b26410352eb99de7f6a07e52db4fb297a0d5854bbce6b7b8410d34c0df8d97b047b11f4ce091d6444eec225326a256124134186ea4d82ddeb8028a747d2768599e23cc8f21ea1b30962471a207651fa6862dcddd822bc824db9c15b3d4ff87853ca5d029d3162c3ea995507b2065a4a31c0c29950b554e733ccade40cc1fb68256112e8c82d0d2591cb665aa5f3f0ef99c6865cd1f727ef143428db6a5856c391cb2cff0d778e3376fe0a1760089fa11d6cf5931a5ffe2873484356436cef0f91c1e16bf21f60864bc8e4b5c268d762367861c6777204681790c23f7a9352af9d93ea5403ccbfe61d53f87f9a98efa3e1533a5a402b1a12098cde560cf9c1885a1c2fdacf60056d0ea8ae731f3be7e4c14a61e57ebe43d092c9f4be0c7f5a1d994930e2d75f12b7dd9aec2b8da332173522a0322cc3110358f7949e5b5b24ce56a9c67a8185b407f463624d017d4486d07d9bd45f81bb7e9a139c9552c86e80a4358c7784707ad9fe38cd4dc71e0a44efbe969e3fa00315c1dc629d38a4f08d19e80f50327e264b0ace02576d0ac701287e76e01d327025ba97b6adb86a27d0ce28d09f7ba60207af97d33b5bee9ea0bc48bcd9716b625506952fc5440e2fd783db7858a1c37c404b577f0338480aec900a4c69bed770612ac2683197bcf6dd917b8b634a169e9dcf3389e7383dc29361c9c3cbc692ede3c3d71eae58818c74e4bfa20ebdbf55419cd56db154fe8b9df2c454c71ee82db339dc033efde518e08f62790a87edf0bf9220289d2c7206b1d159b72e65a3a839d003c41fb4bf01e02f1d5beef7c01770c64487588d5352c3d6baead9f498a09596d98f73012f52fb83755b2ff29918c29b8d1572678e07cfc06edd75ac495e8b81cd78334b4f0c68b42e7692f1d2e81914fbf7e63dee69b3cdc56bcf5d12907b53f22ef4c6eabc3b6d124e0d163e4560f514dab950c776026479bd248ff1edb1caba72853ff0e06bfa4eadf3f503b187de81630a64b961b15c2ef47a54e00d7a63441d0c4516bf8989714878e652eef53ca8e8311c5932160cfd81714b5af31de7dbf7cee3dce70fe3fe4b88378115fee5a516ee6174ceb571fa67ca9f45494744fbc9f3046b1f1bb3e4928e621e90a93e611d07a34590a0f7fbfa9967af1790024609b649fe8393adf72c89bd0b253e0cf483e1c226bdc865ae62bec74675dc43cfbf6cc49eefe262cb46fdce535039f30ceb73dafa051be98cd75bda7ff4f1b516353c20d470b0880e00ec20e212164370888088b8a98edc998c9c2796945d5ee60e7e5ec2dcea708000df1e485b2cec327937f0e315b14c6e40909aab73c3f47e989108a269b0b0f38b682b6b0e064543320c57ea1c54f78b6ff47eb4a5c929b72db5014d4a481992448aba46a6bd8b0048a99aac347b91e581b3ad550c4d73b3f10ae1106e75b671c347a332c995db6d095593290cb5effd9853b24b57aba3aaf01ccbcba04028a06fc5e22fc2240fbd0a66db34a50f1b208815d56aba4bc6219798a0b6bce13f28bd50ef5deb64f1639815c45d513436b038c2ff60117d6a3c2e1c08b24b78ef71cc13c534c662996c2fe501ea46a47d41099b9c0b0b0b155141b66e2d1ee92bc79c5920f3d905da122fc77218a22c4553391ef94ba4a139e10e07ca16e6a763a183b84feb309d5e0d7caf643d0073dd360bd5ba2809acd22a79ff2afe7f889124adba9ad7a56d166ba70288651e946f477c681a6f78c8834c39c62c66c235af1563fb06163144643d12e0ac6074940982bc82bdedd3892a7571d6c953ad211e0047635e174f7933c59bd34e6471b8cb8f73c1aedf905ce38c87bddf1eedacc3b323990567eae716359f07743e245bc11301290c972e0adb88f1f7e3b99831a5ffaa1bee8c4f08bfd2947089ed95bd8ad8857b107917eeddc9c4e713e735fbb9a57d8aa4a3cedc8e331a9a1b7af81427f3bd66ac2acb9d2a3721bad0b1c4907dfe80329c5f1dc83b8d34695df63794c1a748f8879d745b33e0554af562c6e36caa3eb970ff51979cdc56efdcf99f40c795f361fb89768cddb5d07c6eb9297237c8b201124df2252c24debc6b4d42ef2c969356dd3f319d49aa7a2015d679fe29c8ae19c161658e10d072a944bace5d5058b3921c7fa768a3aba8877535aa05d587e59426ea40994eab9da467292a5ad17c13cbb20fdb7d9b7f99f1255b5fceaf281a0886d8fb8c21ed7c5e2856e0a99af50df2ded69e504701172e571922e63d50b96b2ec5a4d6aad2f3bf2940303066f77c8db2c55dddb4aa5512a1265151da6c769e01ef0c8d7d0b8568e9a23f31cead15fc43a93f47502d9d14995a05acf96bdba4f8942d9917a9b0989f913482a46e1c42ec4f942adc62516a2dc726c965b8d5e5cfdad5dc7e4bb840b18b9fe50b05f9e73dec315efab8191f2807e87e1b957a57ae6462062f11ea13761dd37dfa0e7def636f5a4393f5949556870cfbb690a8a49303e2c1b188469d4f639a15ebdaeffa585be16dcf7e91618eb11cb0d95ff9e05079dd511f12d3dd45a29c08992d77f2d8b7e7d7af3e5cd6943d7688cbfa25aab585cb3fd329e8b423f2b6924db51f6ebc0a2966c68e7faacddaaa77462d12054fb52748599122af3a392ca80d2777ffd0855e4d83f8465dc07f34a6d9573792529e3e935302013d82e056dac5def81cfa8982c34ff90783b4c406a7114d6bc3b6a9d1b36f4b312aabd103d1c1b0d11ffc78c4decb5612ddef743b380f1d8f4e599b79fc758a84bc72f4cff01b1f789f91f3474742f37bbafac0426e514eb2efa39bfc9f4255b1c38ddce01267156a33ef9d4b099d6c77f3aa77fc492d0467d723b6a7f409123b35e643589d8f76cbb47b6561823ebce7f44e82366dea19976189a1d8ab315e9cf8d627b2a4e37b38ed9dd4d7756d42d8d1be9449b182542e4460aa7dd9a54353f3f7301c5d6eba7a571e3707118cead54810644bbca55119592f94595d32f1663501bf2fc67dd2986537f670c40a51d24d03780575d99144bf902d032c1ce07975f050c11dd72547d7a518a0b9f1d190ca1bd5a582e9531e83fc50ddcd9b2db0bf8782fa75adcb9cc985c43244cd2b14abf8d32e2e54bb60a369c9d77196bcc39d214e671c33d4fc82261f97410b9d59715857cdd6f788bfa23af48a13f4cbb107bec4c5ad4eb791938a45eff24205e81c937562e3f73a9c127312ce0d81dbf4ea1e9b35e1f37f44ecd24eb38ab22c00f8ecd008c358437260f38768f1421202945be2909f626d59bd7df8c248cd14ed81dbce773ccc7626631538dc58075c9eefd45fe797aad1c47337a104bfa3c8b64140c0ec9f895873ab5e623cbd4703aed65b76a788485cc0cd97c31f1d77ab5add10313df3522a0006731eb0accf3d491ca798914f2ef61ed278ad6c35f9481f2afa55bd8efafb18e2d176d097dc7e3158da3d67f0694b7c8a9c19d00a8c2e15976105ca66f5efd8a9b96d4c7cc47227c8965f95497d6b74092685489db64623ecd23c22265882516484ea133f23c8e89a0fb9f5b4ca8ad7666365c7efb2422b4e607d9281a12d88798902dcc5c31d750d0f17c24b8675889250a4fe3df5728ba6dcf8e231f354c2f28f8d40da64c15b69d24cd5b4dbb9df5379878ea8f027ba80b3b3d721bec1391a911a28d736a9b31d0e24fefa6341c6b8ebf9c8ba4aaf6dd90879ecdedeeccdf701c3c0b4742f39ec89633e5a737bd65fb2ad135c7846176b8457ee1c2863ad14dd65781055b7f7ba9c30e4de39c29df168cabcda769e10d57706c55c23c0ef6439bae6cd78a1147040f07dcb191acb34a7ebe337e1783d7c727b4eb4b8b7bf3951ed23596c5f82c417b9248c58447e43ba5cef3f09cf8521228d72c7cc2d59d782632d47d70c1a1b2e385b5e89e2f80c0d17363873aac8f5f60e2339444c61a1617087999dc246e102292e41457491bac2c5d1e5fd0106213c697596ed141b2e718ca6a70000000000000000000000000a141b212330383f", + "tcId": 99 + } + ] } ] }