From 793b00ff4b8aae30d41edd874fde80c3b5898870 Mon Sep 17 00:00:00 2001 From: Kamal Tufekcic Date: Thu, 23 Apr 2026 08:03:02 +0300 Subject: [PATCH] Add paper, more minor doc updates Signed-off-by: Kamal Tufekcic --- Abstract.md | 14 +- Cargo.toml | 2 +- README.md | 1 + fuzz_overnight.sh | 1 + soliton.tex | 2223 +++++++++++++++++ soliton/fuzz/Cargo.lock | 2 +- .../fuzz/corpus/fuzz_auth_respond/valid_ct | Bin 1120 -> 1120 bytes .../valid_first_msg | 2 +- .../0792446e9e4e302ef86828be9e266fc1b4de4407 | 1 + .../164fd078f9a0ba81f8d916617ade549e2389f89d | Bin 0 -> 42 bytes .../2284aab09f260f3ea2a36303e8e4b8c022faa1ff | Bin 0 -> 42 bytes .../22ef1d4d7b042ff205815af958bde3c619157361 | Bin 0 -> 42 bytes .../3d1234355041aae78f70de42de8515a921c9073d | Bin 0 -> 331 bytes .../8ce24fc0ea8e685eb23bf6346713ad9fef920425 | 1 + .../91ac28edf4ce92b1fe9d9f83cd5447d067a4b366 | Bin 0 -> 42 bytes .../b3b28f02b153220e7d1bf1b19dbb32363b926181 | Bin 0 -> 42 bytes .../d081c37090c6c163e1ed6b7f27c34d61f5437606 | 1 + .../df4e1459fc34e72f44fd348ae97abd055d253d52 | Bin 0 -> 42 bytes .../f421c2fbfd6ff080108402148f2cfa0a41715290 | Bin 0 -> 139 bytes .../fuzz_dm_queue_decrypt_blob/truncated | 2 +- .../valid_compressed | 2 +- .../valid_uncompressed | Bin 59 -> 59 bytes .../corpus/fuzz_ed25519_verify/bad_sig_bit | 4 +- .../corpus/fuzz_ed25519_verify/valid_verify | 4 +- .../bad_ed25519_valid_mldsa | Bin 6598 -> 6598 bytes .../valid_ed25519_bad_mldsa | Bin 6598 -> 6598 bytes .../corpus/fuzz_hybrid_verify/valid_empty_msg | Bin 6573 -> 6573 bytes .../corpus/fuzz_hybrid_verify/valid_hybrid | Bin 6598 -> 6598 bytes .../corpus/fuzz_identity_from_bytes/valid_pk | Bin 3200 -> 3200 bytes .../corpus/fuzz_identity_from_bytes/valid_sk | Bin 2496 -> 2496 bytes .../068ac00ab22fa1a60aa534c312c8e50c4d49c293 | Bin 0 -> 323 bytes .../123ef33e2b797f8f691b1d38501f33fbcc7428ea | Bin 0 -> 179 bytes .../3a466d29221a816c5a2c7cc403caaa6058da0143 | Bin 0 -> 17 bytes .../622ba87343a75abf20a2b47e503c9cfc557822f7 | Bin 0 -> 77 bytes .../6ed2aa32781ba0300c5a8e887854897f8da5aa03 | Bin 0 -> 73 bytes .../78415fd588c0775cb41f15532ec2feab43a84f0b | Bin 0 -> 286 bytes .../7e06b1ca802a48c717192f5906d9724df8f4423f | Bin 0 -> 1377 bytes .../933c356b95dd3aec979dbca14628d76b7f03aabc | 1 + .../9e5555573e86bab555e5879f82be85031ef53de2 | Bin 0 -> 408 bytes .../b9b60eb1c690d52bf2d9fadb4aa253acfd5b1849 | Bin 0 -> 11438 bytes .../c1972705930bee9c59e74f1a367428eac8aa3ea5 | Bin 0 -> 12794 bytes .../ef1f885b68be35ca8a8ecad0e9f3bf293f8ad612 | Bin 0 -> 6056 bytes .../fuzz_kex_decode_receive/valid_no_opk | Bin 6916 -> 6916 bytes .../fuzz_kex_decode_receive/valid_with_opk | Bin 8042 -> 8042 bytes .../valid_session_init | Bin 6910 -> 6910 bytes .../2083a2d5ca212265737c337805dc0a2a3ba38bdb | Bin 0 -> 4606 bytes .../2a4c2ce2861863836fe11076593564c281c82a2b | Bin 0 -> 4606 bytes .../4d87ca00dda28364820502e7ae87c5ec5703d5fd | Bin 0 -> 4606 bytes .../54b5169e3a98f60c11086985f87b36cc9e1b529d | Bin 0 -> 4606 bytes .../5cb54aa75193f2ede647bb831889181f91e0e7dd | Bin 0 -> 4606 bytes .../611d79ee838e3109fcf297595cf049555678e2ed | Bin 0 -> 4606 bytes .../83ce312925d8c34813ba41830570d90873deb7e4 | Bin 0 -> 4606 bytes .../c399af33f77df1669d76eefc76d6abea0f5b07d6 | Bin 0 -> 4606 bytes .../fuzz_kex_verify_bundle/valid_structure | Bin 4606 -> 4606 bytes .../corpus/fuzz_ratchet_decrypt/no_kem_ct | Bin 2472 -> 2472 bytes .../fuzz_ratchet_decrypt/valid_alice_msg | Bin 2472 -> 2472 bytes .../04b583bc161eae07ab697905c95ab9fc8f1cb6cf | Bin 0 -> 3684 bytes .../0b118fc5aa22794801b852d157f950e4b785e0cf | Bin 0 -> 2686 bytes .../2b208bc47a3b0546ab242c9d804a5a19165e59fe | Bin 0 -> 1803 bytes .../41f47a9762e7db3c42dee702eac270cd7a08dadf | Bin 0 -> 18064 bytes .../44f23709d3a8d9af97993ce7e73cf968c04ed870 | Bin 0 -> 1796 bytes .../4e4febc203227d20267fc5f6c678b14794167838 | Bin 0 -> 1796 bytes .../5ebb3cd0d049b76db9146ec7870a8fce7b117291 | Bin 0 -> 1803 bytes .../a2b2085fcf0bb1e3aae058d013c645cefa184477 | Bin 0 -> 1809 bytes .../a54fcd4af3a9756925dfa779fb6d25c20bf0dacc | Bin 0 -> 1796 bytes .../df700ef114d57ae1279256f09605805c37f137a4 | Bin 0 -> 2674 bytes .../f14581242f48b7f0f4c51c7f2be0b24783c410e8 | Bin 0 -> 1809 bytes .../out_of_order_late | Bin 2674 -> 2674 bytes .../true_duplicate | Bin 2686 -> 2686 bytes .../valid_ratchet_step | Bin 7447 -> 7447 bytes .../valid_same_chain | Bin 2672 -> 2672 bytes .../04689513a7bb7518164587f0b9e482c339b2ce25 | Bin 0 -> 1413 bytes .../0917b7a375b1dc3bc199adef752ddc4af013063a | Bin 0 -> 1413 bytes .../0be2817fe6131cafa25f9adef6a2876e4a5158d0 | Bin 0 -> 1413 bytes .../16687b309b81f17dc64135e0ce92166f7a1bbc5a | Bin 0 -> 1413 bytes .../17067c6ab32c699b7a6ccae3f24141f8dc804482 | Bin 0 -> 1413 bytes .../1774072963e3ec198b496e12094ebfeb441501ba | Bin 0 -> 1437 bytes .../269638500e7164650bb3fccf91b3fbc6cd782938 | Bin 0 -> 1413 bytes .../32283e4d4176989edfd698324e69ba74eeb723ed | Bin 0 -> 1413 bytes .../42def3847649bb75539696c104b001f7fc444b56 | Bin 0 -> 1413 bytes .../4a97e82e63ec5e8323f53af62d80c7374c6c63e2 | Bin 0 -> 1413 bytes .../655957cb10a43d01f4c89427850fa8d8e94907ca | Bin 0 -> 1413 bytes .../665b8b9b6dcb3e14ceaca3349129a25b310f4d7a | Bin 0 -> 176 bytes .../743fe7b293ed0ddbdf4c33f254b61f5e278b5df0 | Bin 0 -> 1413 bytes .../75b668a3fbb449d1fa055c151371fcd72ffae4ad | Bin 0 -> 1413 bytes .../7febd267420a7eb45f9c3aaee9f5d3e61fe020e6 | Bin 0 -> 1450 bytes .../80f4a02693e83cca78db8daccc4f3d4681a3569c | Bin 0 -> 1413 bytes .../88195877b37b5bf195c9dfa20d3e5551c1a0fe4a | Bin 0 -> 1413 bytes .../9c6bf5bcbd2f1fd583478c053635a7529f68eb9a | Bin 0 -> 1413 bytes .../9cac935648018df895d2af285e7808e46fa07c53 | Bin 0 -> 5073 bytes .../9d9ddfdf05cfc8a6666f68c6760cc403743c5e42 | Bin 0 -> 1413 bytes .../a8e8183d7d651c83596f4281893c0ac11afe3c7b | Bin 0 -> 1413 bytes .../corpus/fuzz_ratchet_encrypt/alice_init | Bin 3847 -> 3847 bytes .../corpus/fuzz_ratchet_encrypt/alice_pending | Bin 5073 -> 5073 bytes .../b2d4e16f69672f8ed52a5c32d0851967b9e8735b | Bin 0 -> 1413 bytes .../corpus/fuzz_ratchet_encrypt/bob_exchanged | Bin 5069 -> 5069 bytes .../fuzz/corpus/fuzz_ratchet_encrypt/bob_init | Bin 1413 -> 1413 bytes .../c0f48c22ac733accf694be1cecfe539a9ba4266a | Bin 0 -> 1413 bytes .../c7892ff4f73fd08d733d0f16abcedbaa15c35c94 | Bin 0 -> 1413 bytes .../c7bd3243312d34a1f432b854e9f8eae8c59cde74 | Bin 0 -> 1447 bytes .../d76b68fa3c611301f175690d476a95e8f3cc7d96 | Bin 0 -> 1413 bytes .../dec8da52d24aa96e1acccd8993cac40fb2fb9386 | Bin 0 -> 1447 bytes .../e1a4516b7e53a5c060d9299c8c9599c9fec21180 | Bin 0 -> 5073 bytes .../e55e53ab95010357f6fb38968f61d494a432ee60 | Bin 0 -> 1413 bytes .../e7183ecd97ee049b6036746067e42a34b437c5d5 | Bin 0 -> 1413 bytes .../ee5475f37f25dc12f7513c4b2f81962829715775 | Bin 0 -> 1413 bytes .../fuzz_ratchet_encrypt/near_exhausted | Bin 3847 -> 3847 bytes .../17cd25351e26aa472f453714a59f507b97580f60 | Bin 0 -> 3888 bytes .../420fcc1244c027ef31f686676cc76866b8a2c44e | Bin 0 -> 4204 bytes .../47cea8c6dcdcb3d6a79eb106ad0e441edd97d5dc | Bin 0 -> 3888 bytes .../605ce38a081ebee9888a5df7542b9785a465f79f | Bin 0 -> 1455 bytes .../67d8113ef1877ad5cbd6d115e34947b4f120e69e | Bin 0 -> 1469 bytes .../8684b01e0f5125cc689ca1738e73327ec29b0823 | Bin 0 -> 3888 bytes .../a0756571c0412355735b5fa216b04b35b0cbc75e | Bin 0 -> 1493 bytes .../d6732238b415a089c23ab724dc0dda09f2dec182 | Bin 0 -> 3888 bytes .../e4510675f17d62b1a4c36d907f51d9d743a0b38f | Bin 0 -> 1445 bytes .../e65903d764148506a2ae69d568b62b4fa72b91e3 | Bin 0 -> 3875 bytes .../epoch_too_low | Bin 3855 -> 3855 bytes .../fc984eb799eb4e6894d32698d885ecfed4ad6da6 | Bin 0 -> 3930 bytes .../fuzz_ratchet_from_bytes_epoch/max_epoch | Bin 3855 -> 3855 bytes .../valid_epoch_0 | Bin 3855 -> 3855 bytes .../1d1fbed42b15c0df3226c37ee01efeeb52b73811 | Bin 0 -> 1437 bytes .../21a986b47c13b1a000b87f138f8f51b474170ca2 | Bin 0 -> 1437 bytes .../49c43ecd0f5bcadeef0f9f56ae2909d240b21d84 | Bin 0 -> 1437 bytes .../4a30b017bf7133aaaebcaca46abb791045642773 | Bin 0 -> 1437 bytes .../4df99d4b875ae90b210d2cf642ae73477f435076 | Bin 0 -> 1437 bytes .../507c6bbff4c5a2142afecce5db11511e6bce72ae | Bin 0 -> 1437 bytes .../518d4ea75f4a0b348b343f20ee152cc479da595e | Bin 0 -> 1437 bytes .../59956e9a30dcb2c1d41aaaa679923074b16f6175 | Bin 0 -> 1437 bytes .../81f7210342b479724af66ac5f8ff502ce32310d0 | Bin 0 -> 1437 bytes .../84b320fb84396f0dc9139f9eb61c11cabcb35fea | Bin 0 -> 2679 bytes .../8644d11338ba2a2cc82b87e254c2c45cd880152d | Bin 0 -> 2679 bytes .../fuzz_ratchet_roundtrip/alice_exchanged | Bin 3847 -> 3847 bytes .../corpus/fuzz_ratchet_roundtrip/alice_init | Bin 3847 -> 3847 bytes .../fuzz_ratchet_roundtrip/bob_exchanged | Bin 1417 -> 1417 bytes .../corpus/fuzz_ratchet_roundtrip/bob_init | Bin 1413 -> 1413 bytes .../c454e0d2f4915e355e6b80bc6dd8a483a11ad39f | Bin 0 -> 6323 bytes .../c7b53c89dc0929106ddae7e27c9d691c7671ffbe | Bin 0 -> 1437 bytes .../dea34a9a71dbc40f4aebb6d1c8e995e39d951a6f | Bin 0 -> 1437 bytes .../ed50787268f92d89abc67eedfaa04cf918c99f08 | Bin 0 -> 1437 bytes .../eed29554ea909bb059a93cc73d042eb67ded9284 | Bin 0 -> 1437 bytes .../f389401c788a63598667a84534dd73e80e85e29f | Bin 0 -> 1437 bytes .../f9afd0c9fba141db681fbfc163fbe5c3a3800b90 | Bin 0 -> 1437 bytes .../225ed62055a76cbf5a855d5c2cc47f203ca62f03 | Bin 0 -> 70 bytes .../3a30b06c52e20cdd754b86d025aaa32f2b2a0d18 | Bin 0 -> 49 bytes .../411d140f8bf8f4a8b5e5821b185c5c7bcc12faed | 1 + .../4337a79adf15750bebbee124c02ec505edf95924 | Bin 0 -> 182 bytes .../e2dfc033ab7eea543dd046382e0c1e2a59e465ed | Bin 0 -> 147 bytes .../ea3d54253bed94f46635e3b8903789d5a0213259 | Bin 0 -> 184 bytes .../fuzz_session_init_roundtrip/truncated_1 | Bin 3542 -> 3542 bytes .../fuzz_session_init_roundtrip/valid_no_opk | Bin 3543 -> 3543 bytes .../valid_with_opk | Bin 4669 -> 4669 bytes .../254a55e6ac09d08eec781bf9783781b49a03fafe | Bin 0 -> 45 bytes .../32e131568edb7e560cac230264e090f11295fd65 | Bin 0 -> 43 bytes .../393ab93a18db07a5e69641cb1ac1243268529609 | 1 + .../6291ada0c4b6934bde934e25d7288aefccd7e311 | Bin 0 -> 347 bytes .../67fabcc6fbb37464a01f39f71e6c184c108a8a27 | Bin 0 -> 158 bytes .../72be2fd2ffce48d92d93241a2ee51e35a75bb580 | 1 + .../8c1e6ab4270792c51304ea06f47dc20ce51ba57b | 1 + .../fuzz_storage_decrypt_blob/bad_flags | 2 +- .../e0f12cebce606cc8e3e8a60e2377fe50ef1cc3f5 | Bin 0 -> 199 bytes .../e8e14349181aa32d57e39cd3af6a825c10d03222 | Bin 0 -> 171 bytes .../fuzz_storage_decrypt_blob/unknown_version | Bin 52 -> 52 bytes .../valid_compressed | Bin 85 -> 85 bytes .../valid_uncompressed | Bin 52 -> 52 bytes .../fuzz_storage_decrypt_blob/valid_version2 | Bin 51 -> 51 bytes .../fuzz_storage_decrypt_blob/valid_version3 | Bin 51 -> 51 bytes .../fuzz_stream_decrypt/single_compressed | Bin 59 -> 59 bytes .../fuzz_stream_decrypt/single_uncompressed | Bin 55 -> 55 bytes .../fuzz_stream_decrypt_at/single_chunk_idx0 | Bin 66 -> 66 bytes .../fuzz_verification_phrase/two_real_pks | Bin 6400 -> 6400 bytes .../fuzz_xwing_roundtrip/mode_a_valid_ct | Bin 1121 -> 1121 bytes soliton_capi/fuzz/Cargo.lock | 4 +- .../valid_no_opk | Bin 3543 -> 3543 bytes .../valid_with_opk | Bin 4669 -> 4669 bytes .../518de1210d825ad0a156f42b45a1f26e3f2f5164 | Bin 0 -> 43 bytes .../a8400c34a55cd824a934bc9039c0faac3ab20c4c | Bin 0 -> 43 bytes .../fuzz_capi_dm_queue_decrypt/invalid_fp_len | Bin 72 -> 72 bytes .../valid_compressed | 2 +- .../105dfdd85cb7b557ca16c67cae63030ab39390b6 | Bin 0 -> 1441 bytes .../13c724f130634a617fe2b48c915160f3e14db4a0 | Bin 0 -> 1441 bytes .../1589ff28a104bbd981ac270e2eff069329986b61 | Bin 0 -> 1456 bytes .../40363b7a8744c03c27f65c1d5816e65766719aeb | Bin 0 -> 1441 bytes .../442a7e8d85a646ab2755f05178aafbcac5072a9b | Bin 0 -> 1441 bytes .../68c937e9130da68b8d862ed640f224ffe546e11e | Bin 0 -> 1456 bytes .../fuzz_capi_ratchet_from_bytes/alice_init | Bin 3847 -> 3847 bytes .../fuzz_capi_ratchet_from_bytes/bob_init | Bin 1413 -> 1413 bytes .../d5b3ba86052817a36e8fe5207a107869e5a1423c | Bin 0 -> 1441 bytes .../f3de7ca01c49b11926e45d717d6a7699320218be | Bin 0 -> 1441 bytes .../0829c17ba2f706c66001aa4462316d890a2aebe6 | Bin 0 -> 42 bytes .../fuzz_capi_storage_decrypt/bad_flags | 2 +- .../dde7aa5a3d9db2fc6e2bcbe681f51a78d17fcd92 | Bin 0 -> 42 bytes .../fuzz_capi_storage_decrypt/unknown_version | Bin 57 -> 57 bytes .../valid_compressed | Bin 81 -> 81 bytes .../valid_uncompressed | Bin 57 -> 57 bytes .../single_uncompressed | Bin 57 -> 57 bytes .../fuzz_capi_stream_decrypt_at/index_0_final | Bin 63 -> 63 bytes .../index_max_minus_1 | Bin 58 -> 58 bytes 198 files changed, 2254 insertions(+), 21 deletions(-) create mode 100644 soliton.tex create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/0792446e9e4e302ef86828be9e266fc1b4de4407 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/164fd078f9a0ba81f8d916617ade549e2389f89d create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/2284aab09f260f3ea2a36303e8e4b8c022faa1ff create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/22ef1d4d7b042ff205815af958bde3c619157361 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/3d1234355041aae78f70de42de8515a921c9073d create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/8ce24fc0ea8e685eb23bf6346713ad9fef920425 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/91ac28edf4ce92b1fe9d9f83cd5447d067a4b366 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/b3b28f02b153220e7d1bf1b19dbb32363b926181 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/d081c37090c6c163e1ed6b7f27c34d61f5437606 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/df4e1459fc34e72f44fd348ae97abd055d253d52 create mode 100644 soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/f421c2fbfd6ff080108402148f2cfa0a41715290 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/068ac00ab22fa1a60aa534c312c8e50c4d49c293 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/123ef33e2b797f8f691b1d38501f33fbcc7428ea create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/3a466d29221a816c5a2c7cc403caaa6058da0143 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/622ba87343a75abf20a2b47e503c9cfc557822f7 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/6ed2aa32781ba0300c5a8e887854897f8da5aa03 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/78415fd588c0775cb41f15532ec2feab43a84f0b create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/7e06b1ca802a48c717192f5906d9724df8f4423f create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/933c356b95dd3aec979dbca14628d76b7f03aabc create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/9e5555573e86bab555e5879f82be85031ef53de2 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/b9b60eb1c690d52bf2d9fadb4aa253acfd5b1849 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/c1972705930bee9c59e74f1a367428eac8aa3ea5 create mode 100644 soliton/fuzz/corpus/fuzz_identity_sign_verify/ef1f885b68be35ca8a8ecad0e9f3bf293f8ad612 create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/2083a2d5ca212265737c337805dc0a2a3ba38bdb create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/2a4c2ce2861863836fe11076593564c281c82a2b create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/4d87ca00dda28364820502e7ae87c5ec5703d5fd create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/54b5169e3a98f60c11086985f87b36cc9e1b529d create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/5cb54aa75193f2ede647bb831889181f91e0e7dd create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/611d79ee838e3109fcf297595cf049555678e2ed create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/83ce312925d8c34813ba41830570d90873deb7e4 create mode 100644 soliton/fuzz/corpus/fuzz_kex_verify_bundle/c399af33f77df1669d76eefc76d6abea0f5b07d6 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/04b583bc161eae07ab697905c95ab9fc8f1cb6cf create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/0b118fc5aa22794801b852d157f950e4b785e0cf create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/2b208bc47a3b0546ab242c9d804a5a19165e59fe create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/41f47a9762e7db3c42dee702eac270cd7a08dadf create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/44f23709d3a8d9af97993ce7e73cf968c04ed870 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/4e4febc203227d20267fc5f6c678b14794167838 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/5ebb3cd0d049b76db9146ec7870a8fce7b117291 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/a2b2085fcf0bb1e3aae058d013c645cefa184477 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/a54fcd4af3a9756925dfa779fb6d25c20bf0dacc create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/df700ef114d57ae1279256f09605805c37f137a4 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/f14581242f48b7f0f4c51c7f2be0b24783c410e8 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/04689513a7bb7518164587f0b9e482c339b2ce25 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/0917b7a375b1dc3bc199adef752ddc4af013063a create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/0be2817fe6131cafa25f9adef6a2876e4a5158d0 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/16687b309b81f17dc64135e0ce92166f7a1bbc5a create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/17067c6ab32c699b7a6ccae3f24141f8dc804482 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/1774072963e3ec198b496e12094ebfeb441501ba create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/269638500e7164650bb3fccf91b3fbc6cd782938 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/32283e4d4176989edfd698324e69ba74eeb723ed create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/42def3847649bb75539696c104b001f7fc444b56 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/4a97e82e63ec5e8323f53af62d80c7374c6c63e2 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/655957cb10a43d01f4c89427850fa8d8e94907ca create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/665b8b9b6dcb3e14ceaca3349129a25b310f4d7a create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/743fe7b293ed0ddbdf4c33f254b61f5e278b5df0 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/75b668a3fbb449d1fa055c151371fcd72ffae4ad create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/7febd267420a7eb45f9c3aaee9f5d3e61fe020e6 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/80f4a02693e83cca78db8daccc4f3d4681a3569c create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/88195877b37b5bf195c9dfa20d3e5551c1a0fe4a create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/9c6bf5bcbd2f1fd583478c053635a7529f68eb9a create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/9cac935648018df895d2af285e7808e46fa07c53 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/9d9ddfdf05cfc8a6666f68c6760cc403743c5e42 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/a8e8183d7d651c83596f4281893c0ac11afe3c7b create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/b2d4e16f69672f8ed52a5c32d0851967b9e8735b create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/c0f48c22ac733accf694be1cecfe539a9ba4266a create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/c7892ff4f73fd08d733d0f16abcedbaa15c35c94 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/c7bd3243312d34a1f432b854e9f8eae8c59cde74 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/d76b68fa3c611301f175690d476a95e8f3cc7d96 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/dec8da52d24aa96e1acccd8993cac40fb2fb9386 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/e1a4516b7e53a5c060d9299c8c9599c9fec21180 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/e55e53ab95010357f6fb38968f61d494a432ee60 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/e7183ecd97ee049b6036746067e42a34b437c5d5 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_encrypt/ee5475f37f25dc12f7513c4b2f81962829715775 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/17cd25351e26aa472f453714a59f507b97580f60 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/420fcc1244c027ef31f686676cc76866b8a2c44e create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/47cea8c6dcdcb3d6a79eb106ad0e441edd97d5dc create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/605ce38a081ebee9888a5df7542b9785a465f79f create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/67d8113ef1877ad5cbd6d115e34947b4f120e69e create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/8684b01e0f5125cc689ca1738e73327ec29b0823 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/a0756571c0412355735b5fa216b04b35b0cbc75e create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/d6732238b415a089c23ab724dc0dda09f2dec182 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/e4510675f17d62b1a4c36d907f51d9d743a0b38f create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/e65903d764148506a2ae69d568b62b4fa72b91e3 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/fc984eb799eb4e6894d32698d885ecfed4ad6da6 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/1d1fbed42b15c0df3226c37ee01efeeb52b73811 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/21a986b47c13b1a000b87f138f8f51b474170ca2 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/49c43ecd0f5bcadeef0f9f56ae2909d240b21d84 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/4a30b017bf7133aaaebcaca46abb791045642773 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/4df99d4b875ae90b210d2cf642ae73477f435076 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/507c6bbff4c5a2142afecce5db11511e6bce72ae create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/518d4ea75f4a0b348b343f20ee152cc479da595e create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/59956e9a30dcb2c1d41aaaa679923074b16f6175 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/81f7210342b479724af66ac5f8ff502ce32310d0 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/84b320fb84396f0dc9139f9eb61c11cabcb35fea create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/8644d11338ba2a2cc82b87e254c2c45cd880152d create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/c454e0d2f4915e355e6b80bc6dd8a483a11ad39f create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/c7b53c89dc0929106ddae7e27c9d691c7671ffbe create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/dea34a9a71dbc40f4aebb6d1c8e995e39d951a6f create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/ed50787268f92d89abc67eedfaa04cf918c99f08 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/eed29554ea909bb059a93cc73d042eb67ded9284 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/f389401c788a63598667a84534dd73e80e85e29f create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_roundtrip/f9afd0c9fba141db681fbfc163fbe5c3a3800b90 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_state_machine/225ed62055a76cbf5a855d5c2cc47f203ca62f03 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_state_machine/3a30b06c52e20cdd754b86d025aaa32f2b2a0d18 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_state_machine/411d140f8bf8f4a8b5e5821b185c5c7bcc12faed create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_state_machine/4337a79adf15750bebbee124c02ec505edf95924 create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_state_machine/e2dfc033ab7eea543dd046382e0c1e2a59e465ed create mode 100644 soliton/fuzz/corpus/fuzz_ratchet_state_machine/ea3d54253bed94f46635e3b8903789d5a0213259 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/254a55e6ac09d08eec781bf9783781b49a03fafe create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/32e131568edb7e560cac230264e090f11295fd65 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/393ab93a18db07a5e69641cb1ac1243268529609 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/6291ada0c4b6934bde934e25d7288aefccd7e311 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/67fabcc6fbb37464a01f39f71e6c184c108a8a27 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/72be2fd2ffce48d92d93241a2ee51e35a75bb580 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/8c1e6ab4270792c51304ea06f47dc20ce51ba57b create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/e0f12cebce606cc8e3e8a60e2377fe50ef1cc3f5 create mode 100644 soliton/fuzz/corpus/fuzz_storage_decrypt_blob/e8e14349181aa32d57e39cd3af6a825c10d03222 create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/518de1210d825ad0a156f42b45a1f26e3f2f5164 create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/a8400c34a55cd824a934bc9039c0faac3ab20c4c create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/105dfdd85cb7b557ca16c67cae63030ab39390b6 create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/13c724f130634a617fe2b48c915160f3e14db4a0 create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/1589ff28a104bbd981ac270e2eff069329986b61 create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/40363b7a8744c03c27f65c1d5816e65766719aeb create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/442a7e8d85a646ab2755f05178aafbcac5072a9b create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/68c937e9130da68b8d862ed640f224ffe546e11e create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/d5b3ba86052817a36e8fe5207a107869e5a1423c create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/f3de7ca01c49b11926e45d717d6a7699320218be create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/0829c17ba2f706c66001aa4462316d890a2aebe6 create mode 100644 soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/dde7aa5a3d9db2fc6e2bcbe681f51a78d17fcd92 diff --git a/Abstract.md b/Abstract.md index 5c7d07c11b..2af5f15b98 100644 --- a/Abstract.md +++ b/Abstract.md @@ -73,16 +73,16 @@ HybridSig combines Ed25519 (classical) and ML-DSA-65 (post-quantum). Key pairs satisfy pk = (pk_E, pk_P), sk = (sk_E, sk_P). **Sign(sk, m)** → σ = (σ_E ‖ σ_P): both components computed independently and -concatenated. ML-DSA-65 uses hedged signing via `sign_internal` (FIPS 204 §5.2 / -Algorithm 2); fresh randomness is mixed per signing operation for +concatenated. ML-DSA-65 uses hedged signing via `sign_internal` (FIPS 204 §6.2 / +Algorithm 7); fresh randomness is mixed per signing operation for fault-injection resistance. **FIPS 204 compatibility note**: The implementation calls `sign_internal` directly — the raw internal signing function with no context string or domain prefix. This is structurally incompatible with FIPS 204 -§6.2 (`ML-DSA.Sign`, which prepends a context-dependent domain separator before -calling `sign_internal`). A FIPS 204 §6.2 verifier expecting the domain-prefixed -message format will reject Soliton ML-DSA-65 signatures. A formal model or test -vector suite must use the `sign_internal` / `verify_internal` interface, not the -§6.2 external interface. For adversary models that include fault injection, +§5.2 (`ML-DSA.Sign` / Algorithm 2, which prepends a context-dependent domain +separator before calling `sign_internal`). A FIPS 204 §5.2 verifier expecting +the domain-prefixed message format will reject Soliton ML-DSA-65 signatures. A +formal model or test vector suite must use the `sign_internal` / +`verify_internal` interface, not the §5.2 external interface. For adversary models that include fault injection, hedged signing provides resistance to differential fault analysis that deterministic signing does not. **RNG implication**: Every HybridSig.Sign invocation consumes randomness (from ML-DSA-65's hedged component). In the §8.2 diff --git a/Cargo.toml b/Cargo.toml index 42e382b1b9..7db1de30c1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ edition = "2024" rust-version = "1.85" license = "AGPL-3.0-only" repository = "https://git.lo.sh/lo/libsoliton" -homepage = "https://lo.sh" +homepage = "https://git.lo.sh/lo/libsoliton/wiki" authors = ["LO Contributors"] description = "Cryptographic library for the LO protocol" categories = ["cryptography"] diff --git a/README.md b/README.md index 5f23c654d6..c5462cc6ec 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Pure-Rust post-quantum cryptographic library. Provides composite identity keys ( | Document | Description | |----------|-------------| +| [paper.tex](paper.tex) | Protocol paper — design, security analysis, formal verification, implementation | | [Abstract.md](Abstract.md) | Security analysis specification — adversary model, theorems, and verification targets for formal modeling | | [Specification.md](Specification.md) | Full cryptographic specification (v1) | | [CHEATSHEET.md](CHEATSHEET.md) | API quick reference with types, sizes, and signatures | diff --git a/fuzz_overnight.sh b/fuzz_overnight.sh index 643ed5f4cf..63033f4b3a 100755 --- a/fuzz_overnight.sh +++ b/fuzz_overnight.sh @@ -16,6 +16,7 @@ fi HOURS="${1:-8}" WORKERS="${2:-1}" +# Change to 3600 for overnight runs, 1 is used for quick local runs SECONDS_TOTAL=$((HOURS * 1)) CORE_DIR="soliton" diff --git a/soliton.tex b/soliton.tex new file mode 100644 index 0000000000..30affae4b5 --- /dev/null +++ b/soliton.tex @@ -0,0 +1,2223 @@ +\documentclass[11pt,a4paper]{article} + +% --- Packages --- +% inputenc unnecessary with LaTeX 2018+ (UTF-8 is default) +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage[margin=1in]{geometry} +\usepackage{amsmath,amssymb,amsthm} +\usepackage{enumitem} +\usepackage{booktabs} +\usepackage{array} +\usepackage{tabularx} +\usepackage{hyperref} +\usepackage{cleveref} +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage{microtype} +\usepackage{float} +\usepackage[nottoc]{tocbibind} +\usepackage{xspace} +\usepackage{tikz} +\usetikzlibrary{positioning} + +% --- Theorem environments --- +\newtheorem{theorem}{Theorem} +\newtheorem{lemma}[theorem]{Lemma} +\newtheorem{corollary}[theorem]{Corollary} +\newtheorem{definition}[theorem]{Definition} +\newtheorem{remark}{Remark} +\newtheorem*{claim}{Claim} % unnumbered — does not consume theorem counter + +\newenvironment{proofsketch} + {\noindent\textit{Proof sketch.}\space} + {\hfill$\lrcorner$\medskip} + +% --- Shorthands --- +\newcommand{\ie}{i.e.,\xspace} +\newcommand{\eg}{e.g.,\xspace} +\newcommand{\cf}{cf.\xspace} +\newcommand{\etal}{et~al.\xspace} +\newcommand{\Adv}{\mathsf{Adv}} +\newcommand{\KDF}{\mathsf{KDF}} +\newcommand{\MAC}{\mathsf{MAC}} +\newcommand{\HKDF}{\mathsf{HKDF}} +\newcommand{\AEAD}{\mathsf{AEAD}} +\newcommand{\Enc}{\mathsf{Enc}} +\newcommand{\Dec}{\mathsf{Dec}} +\newcommand{\Encaps}{\mathsf{Encaps}} +\newcommand{\Decaps}{\mathsf{Decaps}} +\newcommand{\KeyGen}{\mathsf{KeyGen}} +\newcommand{\Sign}{\mathsf{Sign}} +\newcommand{\Verify}{\mathsf{Verify}} +\newcommand{\pk}{\mathit{pk}} +\newcommand{\sk}{\mathit{sk}} +\newcommand{\rk}{\mathit{rk}} +\newcommand{\ek}{\mathit{ek}} +\newcommand{\mk}{\mathit{mk}} +% \xmark removed — was unused + +% --- Spacing fix for overfull hboxes --- +\emergencystretch=2em +\hypersetup{ + colorlinks=true, + linkcolor=blue!60!black, + citecolor=blue!60!black, + urlcolor=blue!60!black, +} + +% --- Title --- +\title{Soliton: A Formally Verified Post-Quantum Messaging Protocol\\with Hybrid Authentication} + +\author{Kamal Tufekcic\\[4pt] +\small Independent Researcher, Romania\\[2pt] +\small \texttt{kamal@lo.sh}\\[2pt] +\small \url{https://git.lo.sh/lo/libsoliton}} + +\date{} + +\begin{document} +\maketitle + +% ============================================================================ +% ABSTRACT +% ============================================================================ +\begin{abstract} +I present Soliton, a two-party end-to-end encrypted communication protocol +providing hybrid classical/post-quantum security for messaging, voice and +video calls, and file transfer. The protocol comprises five sub-protocols --- +LO-KEX (asynchronous session establishment), LO-Ratchet (ongoing message +encryption), LO-Auth (server-side key possession proof), LO-Call (call key +derivation), and LO-Stream (streaming AEAD with random-access decryption) --- +built from X-Wing (X25519 + ML-KEM-768), hybrid Ed25519 + ML-DSA-65 +signatures, HKDF-SHA3-256, and XChaCha20-Poly1305. The ratchet uses +counter-mode message key derivation ($\mk_i = \mathsf{PRF}(\ek, i)$), +enabling $O(1)$ out-of-order decryption without a skip cache. No existing +asynchronous two-party E2EE messaging protocol provides post-quantum +authentication alongside post-quantum key exchange and ratcheting --- +prior work (PQXDH, SPQR, PQ3) retains classical-only signatures. +I provide formal verification via 55~Tamarin lemmas across 8~symbolic +models and 7~CryptoVerif queries across 5~computational models, covering +13~security properties (12~theorems and 1~unverified claim) with +concrete security bounds. The reference implementation +is a pure Rust library requiring no C~toolchain, benchmarked on x86-64, +aarch64, and riscv64gc, with 574.6~billion fuzz executions across +36~targets yielding zero crashes. The full specification, formal models, +and implementation are published under AGPL-3.0 at +\url{https://git.lo.sh/lo/libsoliton} for independent review. +\end{abstract} + +\smallskip\noindent\textbf{Keywords:} +post-quantum cryptography, secure messaging, KEM-based ratchet, hybrid +signatures, formal verification, X-Wing, ML-DSA-65 + +\tableofcontents +\newpage + +% ============================================================================ +% 1. INTRODUCTION +% ============================================================================ +\section{Introduction}\label{sec:intro} + +\subsection{Motivation}\label{sec:motivation} + +The prospect of cryptographically relevant quantum computers poses an +existential threat to the confidentiality assumptions underlying every +deployed messaging protocol. The harvest-now-decrypt-later attack model --- +where an adversary records encrypted traffic today and decrypts it once +quantum hardware matures --- makes the post-quantum transition urgent for +any system handling sensitive communications, even if large-scale quantum +computers remain years away. + +The messaging ecosystem has begun to respond. Signal introduced +PQXDH~\cite{signal-pqxdh} in 2023, adding an ML-KEM encapsulation to the +X3DH handshake while retaining the classical Diffie-Hellman double ratchet +for ongoing messages. Apple deployed PQ3~\cite{apple-pq3} in 2024 with +periodic KEM rekeying alongside per-message ECDH. Signal subsequently +introduced the Sparse Post-Quantum Ratchet +(SPQR)~\cite{signal-spqr}, based on the Triple Ratchet construction of +Dodis \etal~\cite{djkps25}, running an ML-KEM-based ratchet in parallel +with the existing +double ratchet. These are significant engineering achievements, but they +share a common gap: \textbf{none provide post-quantum authentication}. In +every deployed system, the signature scheme used to authenticate session +establishment remains classical --- Ed25519 or ECDSA --- and is therefore +vulnerable to quantum forgery. Signal has explicitly acknowledged this as an +open problem~\cite{signal-spqr}. + +Soliton was not designed to fill this gap in the abstract. It was designed +because I needed it. I am building a messaging platform with stringent +privacy and security requirements, and I needed an end-to-end encryption +layer that met several practical constraints: no C~toolchain dependency +(to avoid cross-compilation complexity across target platforms), no +architectural lock-in (the library should be a ``byte pump'' --- plaintext +in, ciphertext out, with no opinions about transport, storage, or session +management), and hybrid post-quantum security at every layer, including +authentication. No existing library met all of these requirements. +\texttt{libsignal} is functionally coupled to Signal's architecture. +Academic PQ~messaging proposals exist~\cite{hks22, bfg20, acd19} but lack +production implementations. The available options were to compromise on +requirements or build something new. + +The protocol design itself is a product of a single guiding principle: +\emph{keep it simple}. Where the standard double ratchet derives message +keys via an iterated HMAC chain (requiring a skip cache for out-of-order +decryption), Soliton uses counter-mode derivation +$\mk_i = \MAC(\ek, \texttt{0x01} \| \mathsf{BE32}(i))$, +enabling $O(1)$~random-access decryption with no additional state. Where +Signal runs two independent ratchets in parallel (classical DH and +post-quantum KEM) and combines their outputs, Soliton uses X-Wing --- a +hybrid KEM that inherently combines X25519 and ML-KEM-768 in every +operation --- as a single ratchet primitive, making the classical ratchet +redundant. Where Signal defers post-quantum authentication, Soliton signs +session initiations with a composite Ed25519 + ML-DSA-65 scheme from the +start. Each of these decisions reduces the protocol's complexity at the +cost of different trade-offs, discussed in \Cref{sec:rationale}. + +\subsection{Contributions}\label{sec:contributions} + +The primary contribution of this work is not any single protocol +component in isolation --- adding post-quantum signatures to a KEM-based +handshake is a natural instantiation choice, and the individual +sub-protocols build on well-established foundations. Rather, the +contribution is the \textbf{comprehensive, verified, and implemented +package}: a complete messaging protocol with hybrid PQ security at every +layer (including authentication), formal verification covering the full +protocol lifecycle, and a production-quality implementation. No prior +work combines all three. + +Specifically: + +\begin{enumerate}[leftmargin=*, itemsep=4pt] +\item \textbf{LO-KEX with hybrid PQ authentication}: An asynchronous + KEM-based session establishment protocol using X-Wing, with hybrid + Ed25519 + ML-DSA-65 authentication. No deployed or published + asynchronous two-party E2EE messaging protocol provides post-quantum + authentication: Signal's PQXDH~\cite{signal-pqxdh} and + SPQR~\cite{signal-spqr} retain Ed25519-only signatures; Apple's + PQ3~\cite{apple-pq3} uses ECDSA. Hashimoto \etal~\cite{hks22} + provide a generic PQ~X3DH framework that could be instantiated with + PQ signatures, but do not instantiate one, and provide neither an + implementation nor formal verification of such an instantiation. + +\item \textbf{LO-Ratchet}: A KEM-based double ratchet with counter-mode + message key derivation ($\mk_i = \mathsf{PRF}(\ek, i)$), enabling + $O(1)$ out-of-order decryption without a skip cache --- providing + per-epoch forward secrecy and post-compromise security via X-Wing KEM + ratchet steps. + +\item \textbf{LO-Auth}: A KEM-based key possession proof for server-side + authentication, compositionally secure with LO-KEX under shared + identity keys. + +\item \textbf{LO-Call}: Ephemeral KEM-based call key derivation for E2EE + voice and video, with intra-call forward secrecy and independence from + ratchet state. + +\item \textbf{LO-Stream}: A streaming AEAD construction with both + sequential and random-access interfaces, providing chunked encryption + with ordering, truncation resistance, and cross-stream isolation + guarantees. + +\item \textbf{Formal verification}: 55~Tamarin lemmas across 8~symbolic + models and 7~CryptoVerif queries across 5~computational models, + covering 13~security properties with concrete security bounds. For comparison: + the PQXDH verification~\cite{bjks24} covers the handshake only + (${\sim}6$--8 properties); the PQ3 analysis~\cite{lsb25} covers + handshake and ratcheting (${\sim}15$--30 lemmas); B\'eguinet + \etal~\cite{bcrs24} cover a KEM-based Signal variant + (${\sim}8$--10~properties). No prior work combines both Tamarin + and CryptoVerif for a KEM-based messaging protocol covering + handshake, ratcheting, authentication, calls, and streaming. + +\item \textbf{Implementation}: A pure Rust library (\texttt{libsoliton}) + with C, Python, WASM, and Zig bindings, benchmarked across three + architectures, with 574.6~billion fuzz executions across 36~targets + yielding zero crashes. +\end{enumerate} + +\paragraph{AI-assisted development.} +AI assistance (Anthropic's Claude) was used extensively throughout +protocol design, specification writing, and formal model development. +All formal verification results are machine-checkable and independently +reproducible --- the Tamarin and CryptoVerif models are published +alongside the paper. Model fidelity was validated through systematic +cross-referencing against both the specification and the Rust +implementation, including 10~expected-falsification tests confirming +the models correctly represent known attack paths. The paper itself +underwent multiple rounds of automated cross-validation (checking claims +against the specification, formal analysis document, implementation +source, and verification outputs) to identify factual discrepancies +before submission. Readers are encouraged to verify rather than trust. + +\subsection{Paper organization} + +\Cref{sec:prelim} introduces notation and primitive assumptions. +\Cref{sec:protocol} describes the five sub-protocols. +\Cref{sec:security-model} defines the adversary model and freshness +predicates. \Cref{sec:security} presents the 13~security theorems with +proof sketches and concrete bounds. \Cref{sec:verification} details the +Tamarin and CryptoVerif verification results. +\Cref{sec:implementation} covers the Rust implementation, benchmarks, and +testing. \Cref{sec:rationale} discusses key design decisions and their +trade-offs. \Cref{sec:related} surveys related work. +\Cref{sec:limitations} identifies verification gaps and open problems. +\Cref{sec:conclusion} concludes. + +The full cryptographic specification (5000+ lines), formal analysis +document, and all Tamarin/CryptoVerif models are available in the project +repository~\cite{soliton-repo}. The specification targets independent +reimplementation; the formal analysis document targets formal methods +researchers. This paper presents the protocol design, security arguments, +and verification results at a level suitable for a cryptographic audience +without duplicating the companion documents. + +% ============================================================================ +% 2. PRELIMINARIES +% ============================================================================ +\section{Preliminaries}\label{sec:prelim} + +\subsection{Notation}\label{sec:notation} + +I use the following conventions throughout. $\|$ denotes byte string +concatenation. $\mathsf{BE}n(x)$ denotes the big-endian encoding of the +unsigned integer~$x$ in exactly $n/8$~bytes (\eg $\mathsf{BE32}(x)$ is a +4-byte encoding). $|x|$ denotes the byte length of byte string~$x$. +$0^n$ denotes a string of $n$~zero bytes. $\{0,1\}^n$ denotes an +$n$-bit string; superscripts on zero-strings are byte counts while +superscripts on $\{0,1\}$ sets are bit counts. PPT denotes probabilistic +polynomial-time. $\mathsf{H}$ denotes SHA3-256. + +Argument labels for $\MAC$ are always explicit: +$\MAC(\text{key}=k, \text{data}=d)$ uses $k$ as the HMAC key and $d$ as +the data, preventing transposition errors. + +\subsection{Cryptographic primitives}\label{sec:primitives} + +The protocol uses the following primitive suite, referred to as +\texttt{lo-crypto-v1}. No novel cryptographic assumptions are introduced; +the construction composes standard primitives under standard assumptions. + +\subsubsection{X-Wing (hybrid KEM)} + +X-Wing~\cite{xwing, xwing-ietf} combines X25519 and ML-KEM-768 via a +SHA3-256 combiner. Key pairs satisfy $\pk = (\pk_M, \pk_X)$, +$\sk = (\sk_M, \sk_X)$, where subscripts $M$ and $X$ denote the ML-KEM +and X25519 components respectively. (This tuple notation follows +draft-09's mathematical presentation order; the wire encoding is +X25519-first: $\pk = \pk_X \| \pk_M$.) + +$\Encaps(\pk) \to (c, \mathit{ss})$: Generate an ephemeral X25519 key +pair, compute the ML-KEM encapsulation and the X25519 shared secret, then +combine via $\mathit{ss} = \mathsf{H}_3(\mathit{ss}_M \| \mathit{ss}_X \| +\mathit{ct}_X \| \pk_X \| \Lambda)$, where +$\Lambda = \texttt{0x5c2e2f2f5e5c}$ is a fixed domain label and +$\mathsf{H}_3$ denotes SHA3-256. + +$\Decaps(\sk, c) \to \mathit{ss}$: Parse $c$, recompute both shared +secrets, and apply the identical combiner. Decapsulation uses ML-KEM's +implicit rejection (FIPS~203~\cite{fips203} \S7.3) --- a mismatched +ciphertext produces a pseudorandom shared secret rather than an error. + +X-Wing is IND-CCA2 if at least one of X25519 (under the strong +Diffie-Hellman assumption) or ML-KEM-768 is IND-CCA2~\cite{xwing}. +ML-KEM-768 provides NIST security level~3 (128-bit post-quantum +security), matching the PQ~TLS~1.3 deployment trajectory; level~5 +(ML-KEM-1024) would further increase the already-large key sizes for +marginal benefit. Key sizes: 1216-byte public key, 2432-byte secret key, +1120-byte ciphertext, 32-byte shared secret. + +For symbolic analysis, X-Wing is treated as a single IND-CCA2 KEM. For +computational models, the black-box IND-CCA2 assumption is stronger than +opening the combiner; bounds are in terms of $P_{\text{kem}}$ rather than +component advantages. + +\subsubsection{Hybrid signature scheme (HybridSig)} + +HybridSig combines Ed25519~\cite{rfc8032} and ML-DSA-65~\cite{fips204}. + +$\Sign(\sk, m) \to \sigma = (\sigma_E \| \sigma_P)$: Both components are +computed independently and concatenated. ML-DSA-65 uses hedged signing +via \texttt{sign\_internal} (FIPS~204 \S6.2) for fault-injection +resistance. This is structurally incompatible with FIPS~204 \S5.2's +external interface, which prepends a context-dependent domain separator; +a FIPS~204-compliant verifier will reject Soliton signatures. + +$\Verify(\pk, m, \sigma) \to \{0,1\}$: Returns 1 iff both +$\mathsf{Ed25519.Verify}$ and $\mathsf{ML\text{-}DSA.Verify}$ return~1. +Both components are evaluated eagerly and the conjunction is +constant-time to prevent leaking which component failed. + +HybridSig is EUF-CMA if at least one component is EUF-CMA. For symbolic +models, it is treated as a single EUF-CMA signature scheme. + +\subsubsection{Key derivation and MAC} + +$\MAC$ denotes HMAC-SHA3-256 throughout. All HKDF-based KDF functions +use a single HKDF invocation (Extract-then-Expand per RFC~5869 +\cite{rfc5869}) with the specified output length, split sequentially at +32-byte boundaries: + +\begin{itemize}[leftmargin=*, itemsep=2pt] +\item $\KDF_{\text{Root}}(\rk, \mathit{ss}) \to (\rk', \ek)$: + $\HKDF(\text{salt}=\rk, \text{ikm}=\mathit{ss}, + \text{info}=\texttt{"lo-ratchet-v1"}, \text{len}=64)$. + +\item $\KDF_{\text{MsgKey}}(\ek, \mathit{counter}) \to \mk$: + $\mk = \MAC(\text{key}=\ek, + \text{data}=\texttt{0x01} \| \mathsf{BE32}(\mathit{counter}))$. + The epoch key $\ek$ does not advance per message. + +\item $\KDF_{\text{KEX}}(\mathit{ikm}, \mathit{info}) \to (\rk, \ek)$: + $\HKDF(\text{salt}=0^{32}, \mathit{ikm}, \mathit{info}, + \text{len}=64)$. + +\item $\KDF_{\text{Call}}(\rk, \mathit{ss}_{\text{eph}}, + \mathit{call\_id}, \mathit{fp}_{\text{lo}}, + \mathit{fp}_{\text{hi}})$ + $\to (\mathit{key}_a, \mathit{key}_b, + \mathit{ck}_{\text{call}})$: HKDF with + $\text{salt}=\rk$, + $\text{ikm}=\mathit{ss}_{\text{eph}} \| \mathit{call\_id}$, + $\text{info}=\texttt{"lo-call-v1"} \| \mathit{fp}_{\text{lo}} \| + \mathit{fp}_{\text{hi}}$, output 96~bytes. +\end{itemize} + +The HMAC-SHA3-256 PRF property under arbitrary hash functions follows from +Bellare's analysis~\cite{bellare06}. The HKDF dual-PRF assumption and +extractor property follow from Krawczyk~\cite{krawczyk10}. Note: +Bellare's and Krawczyk's analyses target HMAC-SHA2 (Merkle-Damg\aa rd); +applicability to HMAC-SHA3-256 (sponge-based) follows from the generic +HMAC construction~\cite{bellare06}, whose PRF argument applies to any +hash function satisfying the underlying pseudorandomness assumptions. +SHA3-256 uses a sponge with an internal permutation (Keccak-$f$) rather +than a Merkle-Damg\aa rd compression function; the HMAC-over-sponge +construction is widely deployed and believed secure, but a +sponge-specific reduction (as opposed to the MD-specific analysis +in~\cite{bellare06}) remains an open problem. NIST's recommended +keyed MAC for SHA-3 is KMAC (SP~800-185), which operates natively on +the sponge; HMAC-SHA3-256 is used here because HKDF (RFC~5869) is +defined in terms of HMAC, and no HKDF-KMAC equivalent is standardized. + +\subsubsection{Authenticated encryption} + +$\AEAD.\Enc(k, n, m, \mathit{aad}) \to c$: XChaCha20-Poly1305 with a +128-bit tag appended to the ciphertext. Nonces for ratchet messages are +counter-derived: $n = 0^{20} \| \mathsf{BE32}(\mathit{counter})$ (24 +bytes total). The session-init first message uses a uniformly random +192-bit nonce as defense-in-depth. + +\subsection{Key hierarchy}\label{sec:key-hierarchy} + +Soliton uses a four-tier key hierarchy (\Cref{fig:key-hierarchy}), +following the structure established by the Signal +Protocol~\cite{signal-x3dh} and adapted for KEM-based operations: + +\begin{itemize}[leftmargin=*, itemsep=3pt] +\item \textbf{Identity Key (IK)}: Long-term composite key pair + (3200~bytes public key): + \[ + \pk_{\text{IK}} = \pk_{\text{IK}}[\text{XWing}] \;(1216) \;\|\; + \pk_{\text{IK}}[\text{Ed25519}] \;(32) \;\|\; + \pk_{\text{IK}}[\text{ML-DSA}] \;(1952) + \] + The X-Wing component is used for KEM operations; the Ed25519 and + ML-DSA-65 components are used for signing. A single corruption of + $\sk_{\text{IK}}$ yields both KEM decapsulation and signing + capability. + +\item \textbf{Signed Pre-Key (SPK)}: Medium-term X-Wing key pair, signed + by the identity key: + $\sigma_{\text{SPK}} = \Sign(\sk_{\text{IK}}, + \texttt{"lo-spk-sig-v1"} \| \pk_{\text{SPK}})$. Rotated + approximately weekly. + +\item \textbf{One-Time Pre-Key (OPK)}: Single-use X-Wing key pair. + Deleted immediately after one decapsulation. + +\item \textbf{Ephemeral Key (EK)}: Per-session X-Wing key pair generated + by the initiator. Serves as the initiator's initial ratchet public key. +\end{itemize} + +Session key material consists of a root key +$\rk \in \{0,1\}^{256}$, send and receive epoch keys +$\ek_s, \ek_r \in \{0,1\}^{256}$, and single-use message keys +$\mk \in \{0,1\}^{256}$. Epoch keys are replaced on each KEM ratchet +step; message keys are zeroized after use. + +\begin{figure}[t] +\centering +\begin{tikzpicture}[ + >=stealth, font=\small, + box/.style={draw, rounded corners=2pt, minimum height=1.5em, + minimum width=2.4cm, font=\small}, + kdf/.style={draw, rounded corners=2pt, minimum height=1.3em, + font=\scriptsize, fill=gray!10}, + arr/.style={->, thick}, + darr/.style={->, thick, dashed}, + lbl/.style={font=\scriptsize}, +] + +% --- Identity layer --- +\node[box] (IK) at (0, 0) {$\sk_\text{IK}$}; +\node[lbl, above=0.1cm of IK] {Identity Key}; + +% Pre-keys + ephemeral — labels below boxes to avoid overlap with arrows +\node[box] (SPK) at (-3.2, -2.0) {$\sk_\text{SPK}$}; +\node[lbl, below=0.1cm of SPK] {Signed Pre-Key}; +\node[box] (OPK) at (0, -2.0) {$\sk_\text{OPK}$}; +\node[lbl, below=0.1cm of OPK] {One-Time Pre-Key}; +\node[box] (EK) at (3.2, -2.0) {$\sk_\text{EK}$}; +\node[lbl, below=0.1cm of EK] {Ephemeral Key}; + +\draw[arr] (IK) -- node[above left, lbl] {signs} (SPK); +\draw[darr] (IK) -- (OPK); +\draw[darr] (IK) -- (EK); + +% --- KEX --- +\node[kdf] (KDFKEX) at (0, -3.8) + {$\textsf{KDF}_\text{KEX}(\mathit{ss}_\text{IK} \| \mathit{ss}_\text{SPK} [\| \mathit{ss}_\text{OPK}])$}; +\draw[arr] (SPK) -- (KDFKEX); +\draw[arr] (OPK) -- (KDFKEX); +\draw[arr] (EK) -- (KDFKEX); + +% KEX outputs +\node[box] (rk) at (-1.8, -5.2) {$\rk$}; +\node[lbl, below=0.1cm of rk] {Root Key}; +\node[box] (ek0) at (1.8, -5.2) {$\ek$}; +\node[lbl, below=0.1cm of ek0] {Epoch Key}; +\draw[arr] (KDFKEX) -- (rk); +\draw[arr] (KDFKEX) -- (ek0); + +% --- Ratchet advancement (left branch) --- +\node[kdf] (KDFRoot) at (-1.8, -7.0) + {$\textsf{KDF}_\text{Root}(\rk, \mathit{ss})$}; +\draw[arr] (rk) -- (KDFRoot); + +\node[box] (rkp) at (-3.5, -8.4) {$\rk'$}; +\node[box] (ekp) at (-0.1, -8.4) {$\ek'$}; +\draw[arr] (KDFRoot) -- (rkp); +\draw[arr] (KDFRoot) -- (ekp); + +% Feedback loop: rk' → next KDF_Root +\draw[arr, dotted] (rkp.west) -- ++(-0.6, 0) + |- node[left, lbl, pos=0.25] {next step} (KDFRoot.west); + +% --- Message key derivation (right branch) --- +\node[kdf] (KDFMsg) at (1.8, -7.0) + {$\textsf{KDF}_\text{MsgKey}(\ek, n)$}; +\draw[arr] (ek0) -- (KDFMsg); +% ek' feeds KDF_MsgKey on subsequent epochs — route around mk +\draw[darr] (ekp.north) -- ++(0, 0.4) -| (KDFMsg.south west); + +\node[box] (mk) at (1.8, -8.4) {$\mk$}; +\node[lbl, below=0.1cm of mk] {Message Key}; +\draw[arr] (KDFMsg) -- (mk); + +\node[kdf] (AEAD) at (1.8, -9.8) {$\textsf{AEAD.Enc}(\mk, n, m)$}; +\draw[arr] (mk) -- (AEAD); +\node[box] (ct) at (1.8, -10.8) {ciphertext}; +\draw[arr] (AEAD) -- (ct); + +% --- Call key derivation (left-bottom branch) --- +\node[kdf] (KDFCall) at (-3.5, -9.8) + {$\textsf{KDF}_\text{Call}(\rk, \mathit{ss}_\text{eph})$}; +\draw[darr] (rkp) -- (KDFCall); + +\node[box] (ck) at (-3.5, -10.8) {$\mathit{key}_a, \mathit{key}_b, \mathit{ck}$}; +\node[lbl, below=0.1cm of ck] {Call Keys}; +\draw[arr] (KDFCall) -- (ck); + +\end{tikzpicture} +\caption{Key derivation hierarchy. Solid arrows show derivation; +dashed arrows show KEM operations. The root key $\rk$ feeds both +$\textsf{KDF}_\text{Root}$ (ratchet advancement: $\rk' \to$ next step) +and $\textsf{KDF}_\text{Call}$ (call key derivation). Message keys are +counter-mode: $\mk_i = \textsf{MAC}(\ek, \texttt{0x01} \| +\textsf{BE32}(i))$, enabling $O(1)$ decryption without a skip cache.} +\label{fig:key-hierarchy} +\end{figure} + +% ============================================================================ +% 3. PROTOCOL DESCRIPTION +% ============================================================================ +\section{Protocol description}\label{sec:protocol} + +This section describes each sub-protocol at a level sufficient for +security analysis. The full wire formats, encoding details, and +implementation guidance are in the companion +specification~\cite{soliton-spec}. + +\subsection{LO-KEX: Session establishment}\label{sec:kex} + +LO-KEX (\Cref{fig:kex-flow}) establishes a shared session key between +an initiator~(Alice) and a responder~(Bob) via asynchronous KEM-based +key agreement. The design +follows the structure of X3DH~\cite{signal-x3dh} and +PQXDH~\cite{signal-pqxdh}, replacing Diffie-Hellman operations with +X-Wing encapsulations and adding hybrid post-quantum signatures for +initiator authentication. + +\subsubsection{Pre-key bundle} + +Bob publishes a bundle +$\mathit{Bundle}_B = (\mathit{cv}, \pk_{\text{IK}_B}, +\pk_{\text{SPK}_B}, \mathit{id}_{\text{SPK}}, \sigma_{\text{SPK}} +[, \pk_{\text{OPK}_B}, \mathit{id}_{\text{OPK}}])$, +where $\sigma_{\text{SPK}} = \Sign(\sk_{\text{IK}_B}, +\texttt{"lo-spk-sig-v1"} \| \pk_{\text{SPK}_B})$ and +$\mathit{cv} = \texttt{"lo-crypto-v1"}$. The signature binds the SPK to +Bob's identity but intentionally excludes $\mathit{id}_{\text{SPK}}$ and +$\mathit{cv}$ from the signed data --- an adversary controlling the +bundle relay can substitute these without invalidating the signature, but +this causes lookup failure rather than a security breach. + +\subsubsection{Session initiation (Alice)} + +\begin{enumerate}[leftmargin=*, itemsep=2pt] +\item \textbf{Verify bundle}: Check $\pk_{\text{IK}_B}$ matches the + known reference, verify $\sigma_{\text{SPK}}$, check version + compatibility, validate OPK co-presence. + +\item \textbf{Generate ephemeral key}: + $(\pk_{\text{EK}}, \sk_{\text{EK}}) \gets \KeyGen()$. + +\item \textbf{Encapsulate}: + \begin{align*} + (c_{\text{IK}}, \mathit{ss}_{\text{IK}}) &\gets + \Encaps(\pk_{\text{IK}_B}[\text{XWing}]) \\ + (c_{\text{SPK}}, \mathit{ss}_{\text{SPK}}) &\gets + \Encaps(\pk_{\text{SPK}_B}) \\ + (c_{\text{OPK}}, \mathit{ss}_{\text{OPK}}) &\gets + \Encaps(\pk_{\text{OPK}_B}) \quad\text{(if OPK present)} + \end{align*} + +\item \textbf{Derive session keys}: + $\mathit{ikm} = \mathit{ss}_{\text{IK}} \| + \mathit{ss}_{\text{SPK}} [\| \mathit{ss}_{\text{OPK}}]$; + $(\rk, \ek) \gets \KDF_{\text{KEX}}(\mathit{ikm}, \mathit{info})$, + where the $\mathit{info}$ string encodes a version label, both + composite identity public keys, and the ephemeral public key with + length prefixes to ensure injectivity. + +\item \textbf{Construct and sign session init}: Construct + $\mathit{SI}$ containing the crypto version, both identity + fingerprints ($\mathit{fp} = \mathsf{H}(\pk_{\text{IK}})$), + $\pk_{\text{EK}}$, all KEM ciphertexts, and key identifiers. Sign: + \[ + \sigma_{\text{SI}} \gets \Sign(\sk_{\text{IK}_A},\; + \texttt{"lo-kex-init-sig-v1"} \| \mathsf{Encode}(\mathit{SI})) + \] + +\item \textbf{Encrypt first message}: + $\mk_0 \gets \KDF_{\text{MsgKey}}(\ek, 0)$; + $n_0 \xleftarrow{\$} \{0,1\}^{192}$; + \begin{align*} + \mathit{aad}_0 &= \texttt{"lo-dm-v1"} \| \mathit{fp}_{\text{IK}_A} + \| \mathit{fp}_{\text{IK}_B} \| \mathsf{Encode}(\mathit{SI}) \\ + c_0 &= \AEAD.\Enc(\mk_0, n_0, m_0, \mathit{aad}_0) + \end{align*} + Transmit $(\mathit{SI}, \sigma_{\text{SI}}, n_0 \| c_0)$. +\end{enumerate} + +\subsubsection{Session reception (Bob)} + +Bob resolves Alice's identity from $\mathit{fp}_{\text{IK}_A}$, validates +fingerprints and version, verifies $\sigma_{\text{SI}}$ \emph{before} any +KEM operations (so a forged signature is rejected without performing +decapsulation), then decapsulates to recover the shared secrets and +derives the same $(\rk, \ek)$. Successful decryption of $c_0$ completes +session establishment and provides Bob with key confirmation of Alice +(Alice holds $\mk_0$, therefore $\ek$, therefore the correct session +key). Alice obtains key confirmation of Bob only when Bob's first +ratchet reply decrypts successfully. + +If an OPK was used, $\sk_{\text{OPK}}$ is deleted atomically --- +concurrent session inits referencing the same OPK are resolved by at +most one succeeding. + +\begin{figure}[t] +\centering +\begin{tikzpicture}[ + >=stealth, font=\small, + party/.style={font=\small\bfseries}, + msg/.style={->, thick}, + note/.style={font=\scriptsize, text width=4.2cm, align=left}, +] +% Party labels +\node[party] (A) at (0, 0) {Alice (initiator)}; +\node[party] (B) at (7, 0) {Bob (responder)}; + +% Lifelines +\draw[thick] (0, -0.3) -- (0, -10.5); +\draw[thick] (7, -0.3) -- (7, -10.5); + +% Bundle fetch +\draw[msg] (0, -0.8) -- node[above, font=\scriptsize] {fetch bundle} (7, -0.8); +\draw[msg, dashed] (7, -1.3) -- node[above, font=\scriptsize] + {$(\mathit{cv},\, \mathit{pk}_{\text{IK}_B},\, + \mathit{pk}_{\text{SPK}_B},\, \sigma_{\text{SPK}} + [,\, \mathit{pk}_{\text{OPK}_B}])$} (0, -1.3); + +% Alice processing +\node[note, anchor=east] at (-0.2, -2.1) {verify $\sigma_{\text{SPK}}$}; +\node[note, anchor=east] at (-0.2, -2.7) {$(\mathit{pk}_{\text{EK}}, \mathit{sk}_{\text{EK}}) \gets \textsf{KeyGen}()$}; +\node[note, anchor=east] at (-0.2, -3.5) + {$\textsf{Encaps} \to (c_{\text{IK}}, c_{\text{SPK}} [, c_{\text{OPK}}])$}; +\node[note, anchor=east] at (-0.2, -4.3) + {$(\mathit{rk}, \mathit{ek}) \gets \textsf{KDF}_{\text{KEX}}(\mathit{ikm}, \mathit{info})$}; +\node[note, anchor=east] at (-0.2, -4.9) + {$\sigma_{\text{SI}} \gets \textsf{Sign}(\mathit{sk}_{\text{IK}_A},\, \textsf{SI})$}; +\node[note, anchor=east] at (-0.2, -5.5) + {$c_0 \gets \textsf{AEAD.Enc}(\mathit{mk}_0,\, m_0)$}; + +% Session init message +\draw[msg] (0, -6.2) -- node[above, font=\scriptsize] + {$(\textsf{SI},\; \sigma_{\text{SI}},\; n_0 \| c_0)$} (7, -6.2); + +% Bob processing +\node[note, anchor=west] at (7.2, -6.9) {verify $\sigma_{\text{SI}}$}; +\node[note, anchor=west] at (7.2, -7.5) + {$\textsf{Decaps} \to (\mathit{ss}_{\text{IK}}, \mathit{ss}_{\text{SPK}} [, \mathit{ss}_{\text{OPK}}])$}; +\node[note, anchor=west] at (7.2, -8.1) + {delete $\mathit{sk}_{\text{OPK}}$ (if used)}; +\node[note, anchor=west] at (7.2, -8.7) + {$(\mathit{rk}, \mathit{ek}) \gets \textsf{KDF}_{\text{KEX}}(\mathit{ikm}, \mathit{info})$}; +\node[note, anchor=west] at (7.2, -9.3) + {$m_0 \gets \textsf{AEAD.Dec}(\mathit{mk}_0,\, c_0)$}; + +% Session established +\draw[dashed, thick, gray] (-0.5, -10) -- (7.5, -10); +\node[font=\scriptsize\itshape, gray] at (3.5, -10.3) {session established --- ratchet begins}; +\end{tikzpicture} +\caption{LO-KEX session establishment. Alice verifies Bob's bundle, +encapsulates to three public keys (IK, SPK, OPK), derives session keys +via $\textsf{KDF}_{\text{KEX}}$, signs the session init, and encrypts the +first message. Bob verifies Alice's signature before any KEM operation, +then decapsulates and derives the same session key. OPK fields are +optional (brackets).} +\label{fig:kex-flow} +\end{figure} + +\subsection{LO-Ratchet: Ongoing message encryption}\label{sec:ratchet} + +LO-Ratchet provides forward secrecy and post-compromise security for +ongoing message exchange. It adapts the double ratchet +algorithm~\cite{signal-doubleratchet, acd19} with two key modifications: +KEM ratchet steps replace DH ratchet steps, and counter-mode key +derivation replaces chain-mode key derivation. + +\subsubsection{Ratchet state} + +Each party maintains a ratchet state~$\Sigma$ containing: +$\rk$~(root key), $\ek_s, \ek_r$~(send/receive epoch keys), +$(\pk_s, \sk_s)$~(send ratchet keypair), $\pk_r$~(peer's ratchet +public key), $\mathit{prev\_ek_r}$~(retained prior epoch key), +$s, r$~(send/receive counters), +$\mathit{pending} \in \{\top, \bot\}$~(KEM ratchet step due on next +send), $\mathit{recv\_seen}$~(duplicate detection set), +$\mathit{local\_fp}, \mathit{remote\_fp}$~(identity fingerprints), +and $\mathit{epoch}$~(anti-rollback counter). + +\subsubsection{Counter-mode message key derivation} + +Message keys are derived as +$\mk = \KDF_{\text{MsgKey}}(\ek, \mathit{counter}) = +\MAC(\text{key}=\ek, +\text{data}=\texttt{0x01} \| \mathsf{BE32}(\mathit{counter}))$. +The epoch key is static within an epoch; all messages in the same epoch +share a single $\ek$. This provides $O(1)$~random-access decryption --- +any message counter yields its message key directly, with no iterated +hashing and no skip cache. The trade-off is that forward secrecy is +per-epoch (per KEM ratchet step), not per-message; see +\Cref{sec:rationale} for the design rationale. + +\subsubsection{KEM ratchet step} + +A KEM ratchet step occurs when a party sends a message after receiving +one (direction change), triggered by $\mathit{pending} = \top$. The +sender: + +\begin{enumerate}[leftmargin=*, itemsep=2pt] +\item Generates a fresh X-Wing keypair + $(\pk_s', \sk_s') \gets \KeyGen()$. +\item Encapsulates to the peer's ratchet public key: + $(c_{\text{ratchet}}, \mathit{ss}) \gets \Encaps(\pk_r)$. +\item Advances the root key: + $(\rk', \ek_s') \gets \KDF_{\text{Root}}(\rk, \mathit{ss})$. +\item Updates state: $\rk \gets \rk'$, $\ek_s \gets \ek_s'$, + $(\pk_s, \sk_s) \gets (\pk_s', \sk_s')$, $s \gets 0$, + $\mathit{pending} \gets \bot$. +\end{enumerate} + +The message header includes $\pk_s$ and $c_{\text{ratchet}}$, allowing +the receiver to perform the symmetric decapsulation and key derivation. + +\subsubsection{Forward secrecy and \texorpdfstring{$\mathit{prev\_ek_r}$}{prev\_ek\_r} retention} + +Forward secrecy is per-epoch with a \textbf{two-step delay on the receive +side} (\Cref{fig:ratchet-flow}). When a KEM ratchet step replaces a +party's receive epoch key, the +old $\ek_r$ moves into $\mathit{prev\_ek_r}$ to allow decryption of +delayed messages from the immediately prior epoch. A corruption of +$\Sigma$ after a single KEM ratchet step therefore reveals +$\mathit{prev\_ek_r}$ and all message keys from the prior receive epoch. +Full receive-side forward secrecy requires two KEM ratchet steps: the +first moves $\ek_r$ into $\mathit{prev\_ek_r}$, the second overwrites +$\mathit{prev\_ek_r}$ (the old value is zeroized). On the send side, +forward secrecy applies after a single step ($\ek_s$ is overwritten +directly with no retention). + +\begin{figure}[t] +\centering +\begin{tikzpicture}[ + >=stealth, font=\small, + party/.style={font=\small\bfseries}, + msg/.style={->, thick}, + note/.style={font=\scriptsize, text width=4.2cm, align=left}, + epoch/.style={font=\scriptsize\itshape, gray}, +] +% Party labels +\node[party] (A) at (0, 0) {Alice}; +\node[party] (B) at (7, 0) {Bob}; + +% Lifelines +\draw[thick] (0, -0.3) -- (0, -12.4); +\draw[thick] (7, -0.3) -- (7, -12.4); + +% Epoch 0: Alice sends (same epoch, no KEM step) +\node[epoch] at (3.5, -0.7) {Epoch 0 (from KEX)}; + +\draw[msg] (0, -1.4) -- node[above, font=\scriptsize] + {$H_1 = (\mathit{pk}_{\text{EK}},\, \bot,\, 1,\, 0),\ c_1$} (7, -1.4); +\node[note, anchor=east] at (-0.2, -1.4) {$\mk_1 = \textsf{KDF\_MsgKey}(\ek_s, 1)$}; + +\draw[msg] (0, -2.1) -- node[above, font=\scriptsize] + {$H_2 = (\mathit{pk}_{\text{EK}},\, \bot,\, 2,\, 0),\ c_2$} (7, -2.1); + +% Bob receives, sets pending = true +\node[note, anchor=west] at (7.2, -2.8) {decrypt: $\mathit{pk}_{\text{EK}} = \mathit{pk}_r$}; +\node[note, anchor=west] at (7.2, -3.3) {$\to$ CurrentEpoch, pending $\gets \top$}; + +% Direction change: Bob sends → KEM ratchet step +\node[epoch] at (3.5, -3.9) {Direction change $\to$ Epoch 1}; + +\node[note, anchor=west] at (7.2, -4.6) + {pending $= \top \to$ KEM ratchet:}; +\node[note, anchor=west] at (7.2, -5.2) + {$(\mathit{pk}_B, \mathit{sk}_B) \gets \textsf{KeyGen}()$}; +\node[note, anchor=west] at (7.2, -5.8) + {$(c_r, \mathit{ss}) \gets \textsf{Encaps}(\mathit{pk}_{\text{EK}})$}; +\node[note, anchor=west] at (7.2, -6.4) + {$(\rk', \ek_s') \gets \textsf{KDF\_Root}(\rk, \mathit{ss})$}; +\node[note, anchor=west] at (7.2, -7.0) + {$\mathit{pn}, s \gets 0$, pending $\gets \bot$}; + +\draw[msg] (7, -7.6) -- node[above, font=\scriptsize] + {$H_3 = (\mathit{pk}_B,\, c_r,\, 0,\, 0),\ c_3$} (0, -7.6); + +% Alice receives → NewEpoch +\node[note, anchor=east] at (-0.2, -8.3) + {$\mathit{pk}_B \neq \mathit{pk}_r \to$ NewEpoch}; +\node[note, anchor=east] at (-0.2, -8.9) + {$\mathit{ss} \gets \textsf{Decaps}(\mathit{sk}_{\text{EK}}, c_r)$}; +\node[note, anchor=east] at (-0.2, -9.5) + {$(\rk', \ek_r') \gets \textsf{KDF\_Root}(\rk, \mathit{ss})$}; +\node[note, anchor=east] at (-0.2, -10.1) + {$\mathit{prev\_ek_r} \gets \ek_r$, $\mathit{pk}_r \gets \mathit{pk}_B$}; +\node[note, anchor=east] at (-0.2, -10.7) + {pending $\gets \top$ (next send $\to$ KEM step)}; + +% Epoch 2 preview +\node[epoch] at (3.5, -11.4) {Alice's next send $\to$ Epoch 2 (KEM ratchet)}; +\node[note, anchor=east] at (-0.2, -11.9) + {$\textsf{Encaps}(\mathit{pk}_B) \to$ new $\rk'', \ek_s''$}; + +\end{tikzpicture} +\caption{Ratchet direction change. Alice sends two messages in Epoch~0 +(no KEM step). Bob's first reply triggers a KEM ratchet step +(pending~$= \top$): fresh keypair, encapsulate to Alice's $\mathit{pk}_s$, +derive new root and epoch keys. Alice receives the new-epoch message, +decapsulates, rotates $\mathit{prev\_ek_r}$, and sets pending~$= \top$ +for her next send. Each direction change advances the epoch and +introduces fresh KEM randomness.} +\label{fig:ratchet-flow} +\end{figure} + +\subsubsection{Anti-reflection} + +Reflected messages --- where an adversary replays a message from $A +\to B$ back to~$A$ as if it were from $B \to A$ --- are defeated by +directional AAD construction: +\[ +\mathit{aad} = \texttt{"lo-dm-v1"} \| \mathit{fp}_{\text{sender}} \| +\mathit{fp}_{\text{recipient}} \| \mathsf{Encode}(H) +\] +Since $\mathit{fp}_{\text{sender}} \neq \mathit{fp}_{\text{recipient}}$ +(enforced at construction, invariant~(h)), the reversed fingerprint +ordering produces a different AAD and AEAD verification fails. + +\subsection{LO-Auth: Key possession proof}\label{sec:auth} + +LO-Auth provides server-side authentication of a client's identity key +ownership. The server encapsulates to the client's +$\pk_{\text{IK}}[\text{XWing}]$: +$(c, \mathit{ss}) \gets \Encaps(\pk_{\text{IK}}[\text{XWing}])$. +The client decapsulates and returns +$\mathit{proof} = \MAC(\text{key}=\mathit{ss}, +\text{data}=\texttt{"lo-auth-v1"})$. +Challenge single-use is enforced server-side. Under IND-CCA2 and PRF +assumptions, a client who produces a valid proof for a fresh challenge +possesses $\sk_{\text{IK}}[\text{XWing}]$. + +In the composed setting with LO-KEX, LO-Auth sessions provide the +adversary with an interactive decapsulation oracle on the identity key +--- each challenge constitutes one additional CCA2 query. The security +loss is additive in the number of LO-Auth sessions. + +\subsection{LO-Call: Voice/video call encryption}\label{sec:call} + +LO-Call derives call-specific encryption keys with ephemeral forward +secrecy, independent of the ratchet's KEM ratchet cycle. For a call +with identifier $\mathit{call\_id}$: + +\begin{enumerate}[leftmargin=*, itemsep=2pt] +\item Generate ephemeral X-Wing keypair + $(\pk_{\text{eph}}, \sk_{\text{eph}}) \gets \KeyGen()$. + Send $(\mathit{call\_id}, \pk_{\text{eph}})$ to the peer via a + ratchet-encrypted signaling message. +\item Peer encapsulates to the ephemeral public key: + $(c_{\text{eph}}, \mathit{ss}_{\text{eph}}) \gets + \Encaps(\pk_{\text{eph}})$. + Sends $c_{\text{eph}}$ back via a ratchet-encrypted message. + Initiator decapsulates: + $\mathit{ss}_{\text{eph}} \gets \Decaps(\sk_{\text{eph}}, + c_{\text{eph}})$. +\item Both parties derive call keys: + $(\mathit{key}_a, \mathit{key}_b, \mathit{ck}_{\text{call}}) \gets + \KDF_{\text{Call}}(\rk, \mathit{ss}_{\text{eph}}, \mathit{call\_id}, + \mathit{fp}_{\text{lo}}, \mathit{fp}_{\text{hi}})$. +\end{enumerate} + +Intra-call rekeying advances the call chain via +$\KDF_{\text{CallChain}}(\mathit{ck}_{\text{call}})$, producing fresh +send/receive keys and a new chain key; the old chain key is zeroized. +Call keys are independent of ratchet state: the ephemeral keypair and +$\mathit{ss}_{\text{eph}}$ are generated within call setup and zeroized +after HKDF, so $\mathsf{Corrupt}(\text{RatchetState})$ does not reveal +$\mathit{ss}_{\text{eph}}$ (recovering it from $c_{\text{eph}}$ requires +breaking X-Wing). + +\subsection{LO-Stream: Streaming AEAD}\label{sec:stream} + +LO-Stream provides chunked authenticated encryption for bulk data (file +transfer, media) with both sequential and random-access interfaces. Each +stream uses a caller-provided 32-byte key and a random 192-bit base +nonce. + +\subsubsection{Nonce derivation} + +Per-chunk nonces are derived by XOR-ing a mask into the base nonce +(\Cref{fig:stream-nonce}): +\begin{align*} + \mathit{mask} &= \mathsf{BE64}(\mathit{chunk\_index}) \| + \mathit{tag\_byte} \| 0^{15} \\ + \mathit{chunk\_nonce} &= \mathit{base\_nonce} \oplus \mathit{mask} +\end{align*} +where $\mathit{tag\_byte} \in \{\texttt{0x00}, \texttt{0x01}\}$ +indicates non-final or final chunk. Distinct +$(\mathit{chunk\_index}, \mathit{tag\_byte})$ pairs produce distinct +masks, and XOR with a constant is a bijection, so nonce injectivity +within a single stream is unconditional. + +\begin{figure}[t] +\centering +\begin{tikzpicture}[font=\small] + % Mask row + \node[font=\scriptsize\bfseries] at (-1.5, 1.2) {mask}; + \draw (0, 0.8) rectangle (4, 1.6); + \node at (2, 1.2) {\scriptsize chunk\_index (8\,B, BE64)}; + \draw (4, 0.8) rectangle (5, 1.6); + \node at (4.5, 1.2) {\scriptsize tag}; + \draw (5, 0.8) rectangle (9.5, 1.6); + \node at (7.25, 1.2) {\scriptsize $0\!\times\!00 \times 15$ (padding)}; + + % Byte markers + \node[font=\tiny, gray] at (0, 0.6) {0}; + \node[font=\tiny, gray] at (4, 0.6) {8}; + \node[font=\tiny, gray] at (5, 0.6) {9}; + \node[font=\tiny, gray] at (9.5, 0.6) {24}; + + % XOR symbol + \node[font=\large] at (4.75, 0.2) {$\oplus$}; + + % Base nonce row + \node[font=\scriptsize\bfseries] at (-1.5, -0.4) {base\_nonce}; + \draw (0, -0.8) rectangle (9.5, 0); + \node at (4.75, -0.4) {\scriptsize random 24 bytes (public, per-stream)}; + + % Equals + \node[font=\large] at (4.75, -1.2) {$=$}; + + % Result row + \node[font=\scriptsize\bfseries] at (-1.5, -2.0) {chunk\_nonce}; + \draw[thick] (0, -2.4) rectangle (9.5, -1.6); + \node at (4.75, -2.0) {\scriptsize 24-byte XChaCha20-Poly1305 nonce}; +\end{tikzpicture} +\caption{Streaming AEAD nonce derivation (\cref{sec:stream}). The 24-byte mask +encodes the chunk index (8 bytes), finality tag (1 byte: +\texttt{0x00}~non-final, \texttt{0x01}~final), and 15 zero-padding +bytes. XOR with the per-stream random base nonce yields a unique +chunk nonce. Only 9 bytes vary within a stream; the 15 fixed bytes +are load-bearing for cross-stream isolation (birthday bound +$\sim(\sum M_i)^2 / 2^{193}$).} +\label{fig:stream-nonce} +\end{figure} + +\subsubsection{Dual interfaces} + +\textbf{Sequential} ($\mathsf{encrypt\_chunk}$ / +$\mathsf{decrypt\_chunk}$): Stateful --- advances an internal +$\mathit{next\_index}$, enforces ordering by construction (the +decryptor derives the chunk index from its own counter, not from the +wire format), and tracks finalization. + +\textbf{Random-access} ($\mathsf{encrypt\_chunk\_at}$ / +$\mathsf{decrypt\_chunk\_at}$): Stateless --- takes an explicit index, +reads only persistent state (key, base nonce), provides no ordering or +truncation guarantees. Ordering and truncation resistance are caller +obligations in this mode. + +The sequential and random-access decryption interfaces can coexist on +the same stream. The state partition --- linear state +($\mathit{next\_index}$, $\mathit{finalized}$) for sequential, +persistent state (key, base nonce) for random-access --- ensures the +random-access oracle cannot interfere with sequential ordering +properties. + +\subsubsection{AAD construction} + +Each chunk's AAD binds the chunk to its stream, position, finality, and +application context: +\begin{multline*} +\mathit{aad} = \texttt{"lo-stream-v1"} \| \mathit{version} \| +\mathit{flags} \| \mathit{base\_nonce} \| {} \\ +\mathsf{BE64}(\mathit{chunk\_index}) \| \mathit{tag\_byte} \| +\mathit{caller\_aad} +\end{multline*} +The base nonce in the AAD is load-bearing for cross-stream isolation: +different base nonces guarantee distinct AADs at every position, +making any cross-stream ciphertext an unconditional INT-CTXT forgery. + + +% ============================================================================ +% 4. SECURITY MODEL +% ============================================================================ +\section{Security model}\label{sec:security-model} + +\subsection{Adversary model}\label{sec:adversary} + +I adopt a Dolev-Yao network adversary who controls all communication +channels: the adversary can intercept, drop, delay, replay, modify, and +inject messages between any two parties. In addition, the adversary has access +to corruption oracles that model partial compromise, following the +approach of Cohn-Gordon \etal~\cite{cgcd20} and Alwen +\etal~\cite{acd19}. + +\subsubsection{Corruption oracles} + +The adversary may issue the following queries adaptively: + +\begin{itemize}[leftmargin=*, itemsep=3pt] +\item $\mathsf{Corrupt}(\text{IK}, P)$: Reveals the full composite + identity secret key of party~$P$. + +\item $\mathsf{Corrupt}(\text{SPK}, P, \mathit{id})$ / + $\mathsf{Corrupt}(\text{OPK}, P, \mathit{id})$: Reveals the + secret key for the specified pre-key. + +\item $\mathsf{Corrupt}(\text{RatchetState}, P, t)$: Reveals the full + ratchet state~$\Sigma$ at time~$t$, including $\rk$, both epoch keys, + the send ratchet secret key, $\mathit{prev\_ek_r}$, and all counters. + +\item $\mathsf{Corrupt}(\text{CallKeys}, P, \mathit{call\_id})$: + Reveals call keys for a specific call. + +\item $\mathsf{Corrupt}(\text{StreamKey}, P, \mathit{stream\_id})$: + Reveals the stream key for a specific streaming AEAD instance. + +\item $\mathsf{Corrupt}(\text{RNG}, P, t)$: Reveals all randomness + generated by party~$P$ at time~$t$. +\end{itemize} + +Corruption queries are temporally parameterized where relevant, +enabling fine-grained modeling of partial compromise. + +\subsection{Freshness predicates}\label{sec:freshness} + +Each theorem's security claim is conditional on a freshness predicate +defining the adversary class for which the claim holds. + +\subsubsection{LO-KEX freshness} + +A session key is fresh if the adversary has not obtained all of +$\{\sk_{\text{IK}_B}[\text{XWing}], \sk_{\text{SPK}_B}, +\sk_{\text{OPK}_B}\}$ (OPK-present case), has not issued +$\mathsf{Corrupt}(\text{RNG}, A, t)$ at the session establishment +epoch, and has not issued $\mathsf{Corrupt}(\text{RatchetState}, P, t)$ +at or after the establishment epoch for either party (which would +directly reveal $\rk$ and $\ek$). The OPK-absent case has a weaker +corruption threshold: $\sk_{\text{IK}_B}[\text{XWing}]$ and +$\sk_{\text{SPK}_B}$ together suffice to derive the session key. + +\subsubsection{LO-Ratchet freshness (F1--F4)} + +A message key at epoch~$e$ is fresh if all of the following hold: + +\begin{itemize}[leftmargin=*, itemsep=2pt] +\item[\textbf{F1.}] No $\mathsf{Corrupt}(\text{RatchetState}, P, t)$ + covers epoch~$e$ (epoch key not directly revealed). + +\item[\textbf{F2.}] If $\mathsf{Corrupt}(\text{RatchetState}, P, t_c)$ + was issued for any $t_c$ before the target epoch, then at least one + KEM ratchet step between $t_c$ and the target epoch --- the + \emph{recovery step}~$t_r$ --- executed with uncompromised + encapsulator randomness (no + $\mathsf{Corrupt}(\text{RNG}, \text{encapsulator}, t)$ at that step). + Absent any prior corruption, F2 is vacuously satisfied. + +\item[\textbf{F3.}] The decapsulator's ratchet state was uncompromised + at $t_r$ and all preceding steps between $t_c$ and $t_r$: no + $\mathsf{Corrupt}(\text{RatchetState},$ $\text{decapsulator}, t)$ + covers those positions. + +\item[\textbf{F4.}] The decapsulator's ratchet keypair encapsulated to + at $t_r$ was generated without + $\mathsf{Corrupt}(\text{RNG},$ $\text{decapsulator}, + t_{\text{keygen}})$ at its generation epoch --- otherwise the + adversary holds $\sk_s$ and can compute the KEM shared secret from + the public ciphertext. +\end{itemize} + +All four conditions are conjunctive. In the absence of any +$\mathsf{Corrupt}(\text{RatchetState})$ before the target epoch, F2--F4 +are vacuously satisfied and freshness reduces to F1 alone. F1--F4 are +syntactic (query-based) predicates, not semantic (knowledge-based) --- +the gap is bridged by the IND-CCA2 reduction embedding its challenge at +the recovery step~\cite{acd19}. + +\subsubsection{Other freshness conditions} + +LO-Auth requires no $\mathsf{Corrupt}(\text{IK})$ on the client and +no $\mathsf{Corrupt}(\text{RNG})$ at the challenge epoch. +LO-Call requires $\rk$ freshness, uncompromised ephemeral RNG, and no +$\mathsf{Corrupt}(\text{CallKeys})$. +LO-Stream requires no $\mathsf{Corrupt}(\text{StreamKey})$ and no +$\mathsf{Corrupt}(\text{RNG})$ at base nonce generation. Stream keys +are independent of ratchet state by construction. + +\subsection{Assumptions}\label{sec:assumptions} + +All primitive operations are total except $\Verify$ and $\AEAD.\Dec$. +$\Decaps$ is total due to ML-KEM's implicit rejection. The following +security properties are assumed: X-Wing IND-CCA2~\cite{xwing}, +HybridSig EUF-CMA, HMAC-SHA3-256 PRF~\cite{bellare06}, HKDF dual-PRF +and extractor~\cite{krawczyk10}, XChaCha20-Poly1305 IND-CPA + INT-CTXT. +No novel assumptions are introduced. + +XChaCha20-Poly1305 does \textbf{not} provide key commitment. This is +not a concern: epoch identification selects a single key before +decryption, and streaming AEAD uses a single caller-provided key. + +\subsection{Out of scope}\label{sec:out-of-scope} + +\textbf{Deniability}: Not claimed. KEM ciphertexts and signatures are +attributable~\cite{fiedler-janson24}. \textbf{Group messaging}: +Strictly two-party. \textbf{Traffic analysis}: Message sizes, timing, +and epoch structure are observable. \textbf{Endpoint security}: Not +modeled. \textbf{Side channels}: Generally out of scope, except that +constant-time signature verification is a normative requirement. + + +% ============================================================================ +% 5. SECURITY ANALYSIS +% ============================================================================ +\section{Security analysis}\label{sec:security} + +This section presents the 13 security theorems. Full game definitions +and detailed proof sketches are in the companion formal +analysis~\cite{soliton-analysis}; I present theorem statements, +reduction targets, and key proof ideas. + +\subsection{Session establishment (Theorems 1--2)} + +\begin{theorem}[LO-KEX Session Key Secrecy]\label{thm:kex-secrecy} +For sessions established between $A$ and $B$, if the session key is +fresh, no PPT adversary can distinguish it from uniform with +non-negligible advantage. Reduces to X-Wing IND-CCA2 + HKDF extractor. +In the composed setting with LO-Auth, each authentication session adds +one CCA2 oracle query; the loss is additive. +\end{theorem} + +\begin{theorem}[LO-KEX Mutual Authentication]\label{thm:kex-auth} +\leavevmode +\begin{enumerate}[label=(\alph*), leftmargin=*, itemsep=2pt] +\item \emph{Recipient authentication}: If $A$ completes LO-KEX with + $B$'s verified bundle and obtains a fresh session key, then $B$ + possesses $\sk_{\text{IK}_B}$. Binding is implicit (KEM + decapsulability) and explicit ($\mathit{fp}_{\text{IK}_B}$ in + $\sigma_{\text{SI}}$). Reduces to X-Wing IND-CCA2 + HybridSig + EUF-CMA. + +\item \emph{Initiator authentication}: Verification of + $\sigma_{\text{SI}}$ proves $A$ possesses $\sk_{\text{IK}_A}$. + Reduces to HybridSig EUF-CMA. + +\end{enumerate} +\end{theorem} + +\begin{claim}[Key Confirmation]\label{claim:key-confirm} +Key confirmation is asymmetric and deferred to the ratchet layer +(not mechanically verified; see \cref{sec:limitations}): +\begin{enumerate}[label=(\alph*), start=3, leftmargin=*, itemsep=2pt] +\item \emph{$A \to B$}: $A$ obtains key confirmation of~$B$ only when + $B$'s first ratchet reply decrypts successfully --- requiring a + round trip. Reduces to XChaCha20-Poly1305 INT-CTXT + Theorem~1. +\item \emph{$B \to A$}: $B$ obtains key confirmation of~$A$ immediately + upon decrypting the first message (successful AEAD decryption proves + $A$ holds $\mk_0$, therefore $\ek$, therefore the same session key). + Reduces to XChaCha20-Poly1305 INT-CTXT + Theorem~1. +\end{enumerate} +This asymmetry is inherent to asynchronous establishment. +\end{claim} + +\subsection{Ratchet security (Theorems 3--5)} + +\begin{theorem}[Message Secrecy]\label{thm:msg-secrecy} +If the message key is fresh (F1--F4), no PPT adversary can distinguish +the plaintext from random. +\end{theorem} + +\begin{proofsketch} +The reduction proceeds in three stages. First, the IND-CCA2 challenger +for X-Wing is embedded at the KEM ratchet step establishing the target +epoch; the resulting shared secret is replaced with a uniformly random +value (cost: $P_{\text{kem}}$). Second, the HKDF extractor property +ensures that $\KDF_{\text{Root}}(\rk, \mathit{ss})$ with random +$\mathit{ss}$ produces outputs $(\rk', \ek)$ indistinguishable from +uniform (cost: $P_{\text{prf}}$). Third, the epoch key $\ek$ is used as +a PRF key in $\KDF_{\text{MsgKey}}$; the PRF guarantee yields a message +key $\mk$ indistinguishable from random (cost: $P_{\text{prf}}$), under +which the AEAD ciphertext is IND-CPA secure. Nonce uniqueness --- +depending on fork prevention, $\mathit{min\_epoch}$ integrity, counter +exhaustion guards, and counter retirement at session init --- ensures +the AEAD reduction is sound. +\end{proofsketch} + +\begin{theorem}[Forward Secrecy]\label{thm:fs} +Per-epoch, with a two-step receive-side delay: +\begin{enumerate}[label=(\alph*), leftmargin=*, itemsep=2pt] +\item \emph{Send-side}: One KEM ratchet step suffices ($\ek_s$ + overwritten directly). +\item \emph{Receive-side}: One step is insufficient + ($\mathit{prev\_ek_r}$ retains the old key); two steps suffice + ($\mathit{prev\_ek_r}$ overwritten). +\end{enumerate} +Reduces to HKDF one-wayness + X-Wing IND-CCA2. +\end{theorem} + +\begin{theorem}[Post-Compromise Security]\label{thm:pcs} +After $\mathsf{Corrupt}(\text{RatchetState}, P, t_c)$, if F1--F4 hold +for a recovery step $t_r > t_c$, message keys after~$t_r$ are fresh. +\end{theorem} + +\begin{proofsketch} +After corruption at $t_c$, the adversary can forward-derive ratchet +state through epochs where it holds the decapsulator's secret key +$\sk_s$ (obtained from the corrupted state or from a KEM step it can +invert). This derivation chain terminates at the first step~$t_r$ where +$\sk_s$ was generated with uncompromised RNG (F4): the adversary cannot +compute $\mathit{ss}' = \Decaps(\sk_{s_{t_r}}, c_{\text{ratchet}})$ +because $\sk_{s_{t_r}}$ is unknown. The IND-CCA2 reduction embeds its +challenge at this step, replacing $\mathit{ss}'$ with a uniformly random +value. From $\KDF_{\text{Root}}(\rk, \mathit{ss}')$, the output +$(\rk', \ek)$ is indistinguishable from uniform by the HKDF extractor +property. Recovery requires two direction changes in the worst case: +the first fails because the adversary holds the compromised party's +$\sk_s$; the second succeeds because the compromised party generates a +fresh keypair and encapsulates to the peer's post-compromise public key. +F4 prevents chain-injection attacks where the adversary substitutes +controlled public keys to extend compromise indefinitely. +\end{proofsketch} + +\subsection{Authentication and domain separation (Theorems 6--7)} + +\begin{theorem}[Auth Key Possession]\label{thm:auth} +Under active attack (Dolev-Yao channel), where the adversary may modify +or replay challenges, interleave LO-Auth sessions with LO-KEX sessions +(obtaining additional $\Decaps$ oracle queries on +$\sk_{\text{IK}}[\text{XWing}]$), and relay challenges across sessions: +if $\mathsf{auth\_verify}(\mathit{expected\_token}, \mathit{proof})$ +returns true for a fresh challenge, the client possesses +$\sk_{\text{IK}}[\text{XWing}]$. Reduces to X-Wing IND-CCA2 + +HMAC-SHA3-256 PRF. +\end{theorem} + +\begin{theorem}[Domain Separation]\label{thm:domain-sep} +No output from one protocol component is valid in another. Follows from +disjoint labels and non-overlapping AAD prefixes. An Encode disjointness +sub-lemma establishes a minimum 1196-byte gap between session-init and +ratchet-message encodings. +\end{theorem} + +\subsection{Call security (Theorems 8--11)} + +\begin{theorem}[Call Key Secrecy]\label{thm:call-secrecy} +Fresh call keys are indistinguishable from random. Reduces to X-Wing +IND-CCA2 + HKDF extractor. +\end{theorem} + +\begin{theorem}[Intra-Call Forward Secrecy]\label{thm:call-fs} +Call chain advance is one-way. Reduces to HMAC-SHA3-256 PRF. +\end{theorem} + +\begin{theorem}[Call/Ratchet Independence]\label{thm:call-ratchet} +$\mathsf{Corrupt}(\text{CallKeys})$ does not violate ratchet secrecy; +$\mathsf{Corrupt}(\text{RatchetState})$ after call derivation does not +reveal call keys. +\end{theorem} + +\begin{proofsketch} +The ephemeral keypair $(\pk_{\text{eph}}, \sk_{\text{eph}})$ and shared +secret $\mathit{ss}_{\text{eph}}$ are generated within call setup and +zeroized after HKDF --- they are not part of the ratchet state~$\Sigma$. +Therefore $\mathsf{Corrupt}(\text{RatchetState})$ does not yield +$\mathit{ss}_{\text{eph}}$; recovering it from the public +$c_{\text{eph}}$ requires breaking X-Wing IND-CCA2. The dual-use of +$\rk$ as HKDF salt in both $\KDF_{\text{Root}}$ (ratchet) and +$\KDF_{\text{Call}}$ (call) is safe via a hybrid argument: under the +dual-PRF assumption, $\HKDF$-Extract produces a pseudorandom PRK, and +$\HKDF$-Expand keyed by PRK with distinct info strings +(\texttt{"lo-ratchet-v1"} vs \texttt{"lo-call-v1"}) produces +independent outputs by the PRF guarantee. Security loss is additive +(one PRF advantage term per HKDF invocation sharing the same salt). +\end{proofsketch} + +\begin{theorem}[Concurrent Call Independence]\label{thm:concurrent} +Calls with distinct $\mathit{call\_id}$ values under the same~$\rk$ +have jointly independent keys. Security loss is additive. +\end{theorem} + +\subsection{Anti-reflection and streaming (Theorems 12--13)} + +\begin{theorem}[Anti-Reflection]\label{thm:anti-reflect} +Reflected messages fail AEAD verification. Reduces to INT-CTXT under +invariant~(h). +\end{theorem} + +\begin{theorem}[Streaming AEAD Chunk Security]\label{thm:stream} +For a stream with fresh key and fresh base nonce: +\begin{enumerate}[label=\textbf{P\arabic*.}, leftmargin=*, itemsep=2pt] +\item \textbf{Confidentiality} (IND-CPA): Per-chunk indistinguishability. + Aggregate advantage $Q \times \Adv_{\text{IND-CPA}}$, giving + ${\approx}128 - \log_2(Q)$ effective bits. +\item \textbf{Integrity} (INT-CTXT): No forgery. No $Q$-factor loss. +\item \textbf{Ordering}: Mismatched sequential position causes nonce + mismatch and AEAD failure. +\item \textbf{No false finalization}: $\mathit{tag\_byte}$ in both + nonce and AAD prevents finality confusion. +\item \textbf{Cross-stream isolation}: Different $\mathit{base\_nonce}$ + guarantees different AADs unconditionally. +\end{enumerate} +\end{theorem} + +\noindent\textbf{Non-goal}: No forward secrecy claim. +$\mathsf{Corrupt}(\text{StreamKey})$ retroactively compromises all +chunks. + +\subsection{Concrete security bounds}\label{sec:bounds} + +The CryptoVerif models yield the following bounds (simplified; full +expressions in \Cref{app:cryptoverif}): + +\begin{center} +\small +\begin{tabular}{@{} l l @{}} +\toprule +\textbf{Theorem} & \textbf{Bound} \\ +\midrule +1 (KEX Secrecy) & $2P_{\text{prf}} + 2P_{\text{kem}}^{\text{ik}} + + 2P_{\text{kem}}^{\text{spk}} + 2P_{\text{kem}}^{\text{opk}} + + \text{coll.}$ \\ +2b (Initiator Auth) & $P_{\text{sig}}$ \\ +3 (Message Secrecy) & $2P_{\text{prf}}$ \\ +6 (Auth) & $N_s \cdot P_{\text{mac}} + P_{\text{kem}}$ \\ +13 P1 (IND-CPA) & $2P_{\text{ctxt}} + 2P_{\text{cpa}}(t, N_{\text{enc}})$ \\ +13 P2 (INT-CTXT) & $P_{\text{ctxt}}$ \\ +\bottomrule +\end{tabular} +\end{center} + +\noindent Theorem~3's $2P_{\text{prf}}$ assumes a fresh epoch key +(\emph{epoch key freshness assumption}): $\ek$ is indistinguishable from +uniform, which follows from Theorem~1 at session establishment and from +the KDF\_Root output independence lemma at each subsequent KEM ratchet +step (HKDF-Expand with a pseudorandom PRK produces independent 32-byte +blocks under the PRF assumption). The multi-epoch bound is additive: +each epoch contributes one $2P_{\text{prf}}$ term, and epoch keys are +pairwise independent by the cross-epoch key independence corollary. +This composition is not mechanically end-to-end verified. +Theorem~13 P2 has no $Q$-factor (direct reduction). For multi-stream +nonce uniqueness: probability $\geq 1 - (\sum M_i)^2 / 2^{193}$. + +\subsection{Composition argument}\label{sec:composition} + +A full mechanized composition theorem (showing all 13~security properties hold +simultaneously under compound corruption) remains open +(\Cref{sec:limitations}). However, composed security follows from the +individual theorems via three structural properties. + +First, \textbf{domain separation} (Theorem~\ref{thm:domain-sep}): +disjoint HKDF info strings and AAD prefixes ensure that no output from +one sub-protocol is valid in another. An adversary who obtains, for +example, a call chain key cannot use it to forge a ratchet message --- +the HMAC domain bytes are disjoint (\texttt{0x01} for ratchet, +\texttt{0x04}--\texttt{0x06} for calls), and the primary separation is +by key: $\KDF_{\text{MsgKey}}$ and $\KDF_{\text{CallChain}}$ operate on +independent HMAC keys. + +Second, \textbf{independent key material}: each sub-protocol derives its +keys from independent sources. Call keys depend on an ephemeral KEM +shared secret $\mathit{ss}_{\text{eph}}$ that is not part of~$\Sigma$ +(Theorem~\ref{thm:call-ratchet}). Stream keys are caller-provided and +independent of ratchet state by construction. The LO-Auth token depends +on a fresh KEM challenge, not on ratchet material. Cross-component +corruption therefore does not create transitive compromise paths beyond +those already captured by the individual freshness predicates. + +Third, \textbf{additive security loss}: the pairwise composition results +(KEX$\to$Ratchet via the $\KDF_{\text{Root}}$ output independence lemma; +Ratchet$\to$Call via Theorem~\ref{thm:call-ratchet}'s dual-PRF argument) +show that the combined security loss is additive across protocol layers, +not multiplicative. The remaining gap --- verifying that compound +corruption schedules spanning all three layers do not create interference +between these pairwise arguments --- is explicitly identified as an open +research direction. + + +% ============================================================================ +% 6. FORMAL VERIFICATION +% ============================================================================ +\section{Formal verification}\label{sec:verification} + +All models are machine-checkable and published in the project +repository~\cite{soliton-repo}. Independent verification is encouraged. + +\subsection{Symbolic verification (Tamarin)}\label{sec:tamarin} + +Eight Tamarin models verify 55~lemmas covering Theorems~1--2, 4--6, +8--13. All complete in under 90~seconds total with under 2~GB peak RAM, +achieved through bounded unrolling (3--4 steps) and unique fact names. + +\begin{table}[H] +\centering +\caption{Tamarin model summary. \emph{f} = falsified (expected).} +\label{tab:tamarin-summary} +\small +\begin{tabular}{@{} l c c l @{}} +\toprule +\textbf{Model} & \textbf{Lemmas} & \textbf{Theorems} & + \textbf{Key results} \\ +\midrule +LO\_KEX & 9 & 1, 2a, 2b & + Session key secrecy, authentication \\ +LO\_Ratchet & 9 & 4, 5 & + FS (structural); recv\_fs\_1step \emph{f} \\ +LO\_Ratchet\_PCS & 5 & 5 & + KEM-level PCS recovery \\ +LO\_Auth & 7 & 6 & + Key possession correspondence \\ +LO\_Call & 6 & 8--11 & + Call key secrecy, independence \\ +LO\_AntiReflection & 2 & 12 & + AAD direction binding \\ +LO\_Stream & 7 & 13 P2--P5 & + Integrity, ordering, isolation \\ +LO\_NegativeTests & 10 & --- & + 10 expected attack paths confirmed \\ +\bottomrule +\end{tabular} +\end{table} + +\paragraph{Negative tests.} +Ten lemmas confirm known attack paths (IK corruption forges auth, +zero-step corruption reveals epoch key, etc.). All produce expected +results. If any were to flip, it would indicate a modeling error. + +\paragraph{Scope.} +X-Wing is a black-box IND-CCA2 KEM. Chains bounded to 3--4 steps. KEX +models OPK-present only. Theorem~7 is vacuously true (string constants +are structurally distinct). Theorem~3 is computational (CryptoVerif). + +\subsection{Computational verification (CryptoVerif)}\label{sec:cryptoverif} + +Five models prove concrete bounds for Theorems~1, 2b, 3, 6, and +13~(P1+P2), completing in under 5~seconds total. + +\begin{table}[H] +\centering +\caption{CryptoVerif model summary.} +\label{tab:cv-summary} +\small +\begin{tabular}{@{} l l l @{}} +\toprule +\textbf{Model} & \textbf{Theorem} & \textbf{What is proved} \\ +\midrule +LO\_KEX\_Secrecy & 1 & $\rk$ indistinguishable from random \\ +LO\_KEX & 2b & $\sigma_{\text{SI}}$ authentication (EUF-CMA) \\ +LO\_Ratchet\_MsgSecrecy & 3 & $\mk$ indistinguishable from random \\ +LO\_Auth & 6 & Correspondence + injective \\ +LO\_Stream\_Secrecy & 13 P1+P2 & Bit secrecy + INT-CTXT \\ +\bottomrule +\end{tabular} +\end{table} + +\paragraph{Scope.} +No corruption oracles (Tamarin covers these). X-Wing as monolithic +IND-CCA2. Simplified KDF info binding. Single-epoch assumption for +Theorem~3. No Theorem~2c/2d. Streaming model adapted from CryptoVerif's +TLS~1.3 Record Protocol example. + +\subsection{Coverage analysis}\label{sec:coverage} + +\begin{table}[H] +\centering +\caption{Theorem coverage by verification tool.} +\label{tab:coverage} +\small +\begin{tabular}{@{} c l c c @{}} +\toprule +\textbf{Thm} & \textbf{Property} & \textbf{Tamarin} & \textbf{CV} \\ +\midrule +1 & KEX Key Secrecy & \checkmark & \checkmark \\ +2a & Recipient Auth & \checkmark & --- \\ +2b & Initiator Auth & \checkmark & \checkmark \\ +2c/d & Key Confirmation & --- & --- \\ +3 & Message Secrecy & --- & \checkmark \\ +4 & Forward Secrecy & \checkmark & --- \\ +5 & PCS & \checkmark & --- \\ +6 & Auth Key Possession & \checkmark & \checkmark \\ +7 & Domain Separation & (vacuous) & --- \\ +8 & Call Key Secrecy & \checkmark & --- \\ +9 & Intra-Call FS & \checkmark & --- \\ +10 & Call/Ratchet Indep. & \checkmark & --- \\ +11 & Concurrent Calls & \checkmark & --- \\ +12 & Anti-Reflection & \checkmark & --- \\ +13 & Streaming AEAD & \checkmark\,(P2--5) & \checkmark\,(P1+2) \\ +\bottomrule +\end{tabular} +\end{table} + +\subsection{Reproducibility}\label{sec:reproducibility} + +All models verified with Tamarin~1.12.0 (Maude~3.5.1) and +CryptoVerif~2.12: + +\begin{verbatim} +../verify.sh tamarin # all 8 Tamarin models +CV_LIB=/path/to/pq ../verify.sh cryptoverif # all 5 CV models +\end{verbatim} + + +% ============================================================================ +% 7. IMPLEMENTATION +% ============================================================================ +\section{Implementation}\label{sec:implementation} + +\subsection{Architecture} + +The reference implementation, \texttt{libsoliton}, is a pure Rust +library with no C~toolchain dependency. Binding layers are provided for +C~ABI (\texttt{cbindgen}), Python (PyO3), WASM (wasm-bindgen), and Zig +(\texttt{@cImport}). Sensitive key material is protected via +\texttt{ZeroizeOnDrop}. Fork prevention is enforced by destructive +serialization, and an anti-rollback counter prevents state replay. + +\subsection{Performance}\label{sec:performance} + +\begin{table}[H] +\centering +\caption{Representative benchmarks (\texttt{cargo +nightly bench}).} +\label{tab:bench} +\small +\begin{tabular}{@{} l r r r @{}} +\toprule +\textbf{Operation} & + \textbf{x86-64} & \textbf{aarch64} & \textbf{riscv64} \\ + & \small{Zen\,4, 5.1\,GHz} & + \small{A76, 2.4\,GHz} & + \small{U74, 1.5\,GHz} \\ +\midrule +Ratchet encrypt (same epoch) & 4.3\,$\mu$s & 7.2\,$\mu$s & 47.6\,$\mu$s \\ +Ratchet decrypt (same epoch) & 6.2\,$\mu$s & 10.1\,$\mu$s & 67.5\,$\mu$s \\ +Encrypt (direction change) & 182\,$\mu$s & 651\,$\mu$s & 2.46\,ms \\ +Decrypt (direction change) & 127\,$\mu$s & 473\,$\mu$s & 1.76\,ms \\ +Session initiate & 1.41\,ms & 3.95\,ms & 17.1\,ms \\ +Session receive & 585\,$\mu$s & 1.88\,ms & 7.70\,ms \\ +Hybrid sign & 988\,$\mu$s & 2.85\,ms & 10.6\,ms \\ +Hybrid verify & 254\,$\mu$s & 794\,$\mu$s & 3.31\,ms \\ +Stream encrypt 1\,MiB & 537\,$\mu$s & 3.96\,ms & 31.0\,ms \\ +Stream 4\,MiB (parallel, 4 cores) & 867\,$\mu$s & 5.35\,ms & 33.0\,ms \\ +\bottomrule +\end{tabular} +\end{table} + +\noindent Per-message latency is 4.3\,$\mu$s on desktop (same epoch). +Direction changes are ${\sim}40\times$ slower due to X-Wing keygen + +encapsulation. Streaming AEAD achieves 1.95\,GB/s sequential and +4.61\,GB/s parallel on desktop. ML-DSA-65 and SHA3-256 lack SIMD in +current RustCrypto crates; these numbers will improve. + +\subsection{Testing and fuzzing}\label{sec:testing} + +956~tests across all binding layers (488~core unit, 61~integration, +287~CAPI, 49~Python, 35~Zig, 36~WASM), plus 36~fuzz targets with a +165,540-entry corpus (883\,MB). A 24-hour campaign on a 32-vCPU server +executed 574.6~billion iterations with zero crashes, timeouts, or OOM +events. The 31~active targets achieve 172--12,714 libFuzzer edge +coverage features per target (median ${\sim}1{,}100$); the +state-machine fuzzer covers 12,714~features across full cryptographic +sessions with up to 200~actions per execution. 455~tests run under MIRI +for undefined-behavior detection. 27~KAT vectors +cross-validate against the specification~\cite{soliton-spec}. + +\subsection{License} + +\texttt{libsoliton} is released under AGPL-3.0-only. Applications using +the library in a network service must release their source code. Users +should evaluate this constraint before adoption. + + +% ============================================================================ +% 8. DESIGN RATIONALE +% ============================================================================ +\section{Design rationale}\label{sec:rationale} + +\subsection{Counter-mode vs.\ chain-mode key derivation} + +The standard double ratchet derives message keys by iterating a +symmetric ratchet: $\mathit{ck}_{i+1}, \mk_i = \KDF(\mathit{ck}_i)$. +Decrypting message~$n$ requires $n$~iterations or a skip cache. +Soliton uses $\mk_i = \MAC(\ek, \texttt{0x01} \| \mathsf{BE32}(i))$ +--- $O(1)$ derivation with no skip cache. The trade-off: forward +secrecy drops from per-message to per-epoch. This is acceptable because +$\ek$ and $\rk$ share the same memory and compromise granularity --- +an adversary who reads $\ek$ can also read $\rk$, which is strictly +more damaging. Per-message chain advancement provides limited practical benefit +under this deployment assumption, where the chain key shares a trust +domain with the root key. + +\subsection{Unified X-Wing vs.\ parallel ratchets} + +Signal's SPQR~\cite{signal-spqr} (based on~\cite{djkps25}) runs two independent ratchets +and combines their outputs, providing a compositional guarantee: if +either is secure, the combined output is secure. Soliton uses a single +X-Wing ratchet that inherently combines X25519 and ML-KEM-768. The +trade-off: if X-Wing's combiner had a subtle flaw causing component +interference, both would fail together. I consider this acceptable given +X-Wing's published analysis~\cite{xwing} and the simplicity benefit --- +one ratchet state, one KEM operation per direction change, one code +path. + +A consequence of KEM-based ratcheting (whether unified or parallel) is +\textbf{single-sided freshness}: only the encapsulator contributes +fresh randomness to the KEM shared secret, whereas a DH ratchet step +has both parties contributing symmetrically. This means post-compromise +recovery requires two direction changes in the worst case +(Theorem~\ref{thm:pcs}), compared to one for DH ratchets. This is an +inherent property of all KEM-based ratchet designs~\cite{acd19}, not +specific to Soliton. + +\subsection{Post-quantum authentication} + +All deployed PQ messaging retains classical-only authentication. A +quantum adversary breaking the signature scheme can forge session +initiations. Soliton's hybrid scheme ensures authentication survives if +either component is secure. + +\paragraph{Why \texttt{sign\_internal}, not the FIPS~204 public API.} +Soliton uses \texttt{sign\_internal} (FIPS~204 \S6.2) rather than the +external \texttt{ML-DSA.Sign} wrapper (\S5.2) for two reasons. +First, \texttt{sign\_internal} accepts the \texttt{rnd} parameter +directly, enabling hedged signing with 32~bytes of fresh +\texttt{getrandom} entropy per call --- providing fault-injection +resistance that deterministic signing lacks. Second, the \S5.2 +public API unconditionally prepends a \texttt{0x00} domain separator +byte and context string \emph{even when the context is empty}: +$\texttt{Sign}(\sk, \texttt{""}, m)$ signs +$\texttt{0x00} \| \texttt{0x00} \| m$, not~$m$. Passing an empty +context is therefore \emph{not} equivalent to calling +\texttt{sign\_internal} --- it changes the signed message. Since +Soliton handles domain separation at the protocol level (unique +per-context labels in every signed payload), the \S5.2 wrapper's +domain separator is redundant and would require all reimplementers +to match the exact wrapping behavior. + +\paragraph{FIPS-mode deployment.} +This choice makes Soliton ML-DSA-65 signatures incompatible with +standalone FIPS~204-conformant verifiers (and vice versa). +Deployments subject to FIPS~140 or FIPS~204 compliance requirements +cannot use Soliton signatures in their current form. If a future +NIST policy restricts access to \texttt{sign\_internal}, migrating +to the \S5.2 interface requires a protocol version bump +(\texttt{lo-crypto-v2}), updated test vectors, and adjusting the +signed payload to account for the prepended domain separator --- +but no structural redesign. + +\subsection{Deniability trade-off} + +Soliton's session-init signature $\sigma_{\text{SI}}$ is transferable +proof that Alice initiated the session --- a deliberate departure from +Signal's X3DH, which achieves deniability through DH-based key +agreement (no signatures on session initiation). KEM-based protocols +inherently struggle with deniability: the encapsulator produces a +unique ciphertext that constitutes a cryptographic receipt, and the +hybrid signature makes this explicit. Fiedler and +Janson~\cite{fiedler-janson24} characterize this as a fundamental +tension in KEM-based handshakes. + +For Soliton's target deployment (a private communications platform +where users authenticate via identity keys stored on their devices), +transferable authentication is acceptable --- and arguably desirable, +as it simplifies the trust model. Deniability would require either a +designated-verifier signature scheme (adding complexity and a new +cryptographic assumption) or ring-signature--based constructions +(substantial overhead with PQ ring signatures). Neither is pursued in +v1; the trade-off is explicit. + + +% ============================================================================ +% 9. RELATED WORK +% ============================================================================ +\section{Related work}\label{sec:related} + +\Cref{tab:comparison} compares Soliton with deployed PQ messaging +protocols across key dimensions. Per-message overhead reflects the +ratchet header transmitted with each message; session establishment +overhead reflects the initial handshake. + +\begin{table}[!htbp] +\centering +\caption{Comparison with deployed post-quantum messaging protocols.} +\label{tab:comparison} +\small +\setlength{\tabcolsep}{3.5pt} +\begin{tabular}{@{} l c c c c @{}} +\toprule +& \textbf{Soliton} & \textbf{Signal} & \textbf{Signal} & \textbf{Apple} \\ +& & \textbf{PQXDH} & \textbf{SPQR} & \textbf{PQ3} \\ +\midrule +PQ key exchange & \checkmark & \checkmark & \checkmark & \checkmark \\ +PQ ratchet & \checkmark & --- & \checkmark & Periodic \\ +PQ authentication & \checkmark & --- & --- & --- \\ +Ratchet type & KEM & DH & DH+KEM & ECDH+KEM \\ +\midrule +Header (no KEM step) & 1225\,B & 33\,B & 33\,B & 33\,B \\ +Header (KEM step) & 2347\,B & 33\,B & ${\sim}75$\,B & 1125\,B \\ +Session init & 4669\,B & ${\sim}4$\,KB & ${\sim}4$\,KB & --- \\ +\midrule +Formal verif.\ tool(s) & Tam.+CV & PV+CV & --- & Tamarin \\ +Formal verif.\ scope & Full & KEX & --- & KEX+Ratchet \\ +Theorems/lemmas & 13/55 & ${\sim}$8 & --- & ${\sim}$15--30 \\ +\midrule +Deniability & --- & ---$^{\dagger}$ & ---$^{\dagger}$ & --- \\ +Per-message FS & Per-epoch & Per-msg & Per-msg & Per-msg \\ +\bottomrule +\end{tabular} + +\smallskip +{\scriptsize $^{\dagger}$PQXDH and SPQR lose X3DH's full deniability +guarantees~\cite{fiedler-janson24} (KEM ciphertexts are attributable), +but retain weaker deniability than Soliton: they do not place explicit +signatures on session initiation. Soliton's $\sigma_{\text{SI}}$ is +transferable proof of initiation.} +\end{table} + +\noindent Soliton's per-message overhead (1225--2347~bytes) is +substantially larger than Signal's (33~bytes) due to the 1216-byte +X-Wing public key transmitted in every ratchet header. This is the +fundamental bandwidth cost of a KEM-based ratchet: unlike DH, where the +public key is 32~bytes, X-Wing public keys are 38$\times$ larger. SPQR +amortizes this via erasure-coded chunking of ML-KEM keys across +messages, achieving ${\sim}75$-byte per-message overhead at the cost of +requiring multiple messages for a complete KEM ratchet step. Soliton +does not amortize; each direction change is self-contained in a single +message. In practice, the 1225-byte overhead is modest relative to +typical network traffic --- modern web requests routinely transmit +tens of kilobytes of metadata per interaction, and mobile messaging +payloads (including media thumbnails, typing indicators, and delivery +receipts) dwarf the ratchet header. The overhead is significant +primarily for extremely constrained links or high-frequency +machine-to-machine messaging, neither of which is the target +deployment. The Auerbach \etal VulM framework~\cite{adjks25} provides +a rigorous methodology for quantifying these trade-offs under +realistic messaging patterns; applying it to Soliton is future work. + +\subsection{Post-quantum key exchange for messaging} + +Signal introduced PQXDH~\cite{signal-pqxdh} in 2023, adding ML-KEM to +X3DH while retaining classical DH. Bhargavan +\etal~\cite{bjks24} provided formal verification (USENIX Security 2024). +Fiedler and Janson~\cite{fiedler-janson24} showed PQXDH loses X3DH's +deniability guarantees. Hashimoto \etal~\cite{hks22} gave the first +efficient generic PQ~X3DH construction. Brendel \etal~\cite{bfg20} +introduced split KEMs. Apple deployed PQ3~\cite{apple-pq3} with periodic +KEM rekeying; Linker \etal~\cite{lsb25} provided a Tamarin analysis +(USENIX Security 2025). + +\subsection{KEM-based ratcheting} + +Alwen \etal~\cite{acd19} decomposed the double ratchet into CKA, +FS-AEAD, and PRF-PRNGs, showing CKA from any KEM (EUROCRYPT 2019). +Signal's SPQR~\cite{djkps25} introduced Katana, a novel RKEM with +${\sim}40\%$ size savings (EUROCRYPT 2025). Auerbach +\etal~\cite{adjks25} introduced the VulM metric for comparing PQ +ratchet protocols (USENIX Security 2025). Cremers +\etal~\cite{cmn25} proved PCS impossibility results (IEEE S\&P 2025). + +\subsection{X-Wing and hybrid KEMs} + +Barbosa \etal~\cite{xwing} proved X-Wing IND-CCA2 (IACR CiC 2024). The +IETF draft progressed to draft-10~\cite{xwing-ietf}. Follow-up work +examined broader applicability~\cite{starfighters25}, +anonymity~\cite{bp26}, and public context +requirements~\cite{kls26}. + +\subsection{Formal verification of messaging protocols} + +Cohn-Gordon \etal~\cite{cgcd20} established the foundational Signal +analysis. Blanchet and Jacomme~\cite{bj24} proved post-quantum soundness +of CryptoVerif (CSF 2024). B\'eguinet \etal~\cite{bcrs24} gave the +first symbolic proof of a KEM-based Signal variant. Soliton's +55~Tamarin lemmas and 7~CryptoVerif queries across 13~models represent +among the most extensive formal verification efforts applied to a +KEM-based messaging protocol in the published literature (\Cref{tab:comparison}). The combination of +symbolic and computational verification for a full protocol (handshake +through streaming) is new. + +\subsection{Streaming AEAD} + +STREAM~\cite{hrrv15} (CRYPTO 2015) is the theoretical foundation. Hoang +and Shen~\cite{hs20} extended to random-access decryption for Google +Tink (CCS 2020). Fabrega \etal~\cite{floe25} introduced FLOE with +formal random-access encryption and commitment security (RWC 2026). +LO-Stream's dual-interface design in a messaging context appears novel. + +\subsection{Group messaging and other protocols} + +The Messaging Layer Security (MLS) protocol~\cite{rfc9420} addresses +group messaging with tree-based key agreement. Post-quantum MLS +ciphersuites using X-Wing have been implemented in +OpenMLS. Matrix's Megolm protocol provides group +encryption for the Matrix ecosystem but has no PQ features at the E2EE +layer. Zoom added ML-KEM for initial key encapsulation in 2024 but +provides no ongoing PQ ratcheting. Soliton is strictly two-party and +does not address group messaging. + + +% ============================================================================ +% 10. LIMITATIONS AND OPEN PROBLEMS +% ============================================================================ +\section{Limitations and open problems}\label{sec:limitations} + +Transparency about what has \emph{not} been proved is as important as +stating what has. The formal models and this paper were authored by the +protocol designer, assisted by AI (\Cref{sec:contributions}), and have +not undergone independent peer review. All results are +machine-checkable; independent verification is actively invited. + +\subsection{Verification gaps} + +\textbf{No full composition theorem.} Individual theorems and pairwise +compositions are established, but simultaneous correctness under +compound corruption spanning all protocol layers remains open. + +\textbf{No Theorem~2c/2d mechanization.} Key confirmation requires a +combined KEX+Ratchet model. + +\textbf{Single-epoch assumption.} CryptoVerif's Theorem~3 assumes a +fresh epoch key (\emph{epoch key freshness assumption}). Multi-epoch +security follows from the additive composition of per-epoch bounds under +the KDF\_Root output independence lemma and cross-epoch key independence +corollary (see \cref{sec:bounds}), but this chain is not +mechanically end-to-end verified. + +\textbf{X-Wing as black box.} Opening the combiner would yield tighter +bounds. + +\textbf{Bounded chains.} Tamarin bounds steps to 3--4. Unbounded +verification is feasible~\cite{lsb25} but resource-intensive. + +\subsection{Protocol limitations} + +\textbf{No deniability} --- KEM ciphertexts and $\sigma_{\text{SI}}$ are +attributable~\cite{fiedler-janson24}. +\textbf{OPK-absent security regression} --- without OPK, session +establishment forward secrecy depends solely on SPK rotation; corruption +of $\sk_{\text{IK}_B}$ and $\sk_{\text{SPK}_B}$ together suffices to +derive the session key. Deployments without a pre-key server should +treat OPK unavailability as a materially weaker security configuration. +\textbf{No group messaging} --- strictly two-party. +\textbf{Per-epoch FS only} --- counter-mode trades per-message FS for +$O(1)$ access. An epoch lasts until a direction change; in one-sided +conversations, a single epoch may span many messages over an extended +period, all derivable from the same~$\ek$. +\textbf{X-Wing not standardized} --- still an IETF draft. +\textbf{Metadata exposure} --- headers reveal epoch transitions and +message counts. + +\subsection{Open research directions} + +The formal analysis document~\cite{soliton-analysis} identifies specific +targets: full composition under compound corruption, OPK atomicity, +SPK rotation lifecycle, counter-mode vs.\ chain-mode formal comparison, +and bandwidth analysis via the VulM framework~\cite{adjks25}. +Applicability of Katana-style amortization~\cite{djkps25} to X-Wing is +open: Katana requires a Randomizable KEM (RKEM) interface that allows +ciphertext splitting across messages, and X-Wing's combiner structure +(X25519~+~ML-KEM-768 fed into SHA3-256) is not obviously compatible +with the RKEM abstraction. + + +% ============================================================================ +% 11. CONCLUSION +% ============================================================================ +\section{Conclusion}\label{sec:conclusion} + +I have presented Soliton, an end-to-end encrypted messaging protocol +providing hybrid classical/post-quantum security across key exchange, +ratcheting, authentication, call encryption, and streaming AEAD. No +existing asynchronous two-party E2EE messaging protocol provides +post-quantum authentication --- PQXDH, SPQR, and PQ3 all retain +classical-only signatures. Soliton's 55~Tamarin lemmas and +7~CryptoVerif queries across 13~models represent the most extensive +published formal verification of a KEM-based messaging protocol, +and the first to combine both symbolic and computational verification +for a full protocol lifecycle. + +The protocol makes deliberate trade-offs --- per-epoch forward secrecy, +unified X-Wing ratcheting, no deniability --- each motivated by +simplicity and practical deployability. These trade-offs and their +security implications are documented, and the open problems they create +are explicitly identified. + +The full specification, formal analysis, Tamarin and CryptoVerif models, +and Rust implementation are published at +\url{https://git.lo.sh/lo/libsoliton} under AGPL-3.0. Everything +claimed in this paper is machine-checkable. I invite independent +verification, critique, and analysis. + + +% ============================================================================ +% APPENDICES +% ============================================================================ +\clearpage +\appendix + +\section{Tamarin lemma results}\label{app:tamarin} + +\begin{table}[!htbp] +\centering +\caption{Complete Tamarin results (Tamarin 1.12.0, Maude 3.5.1). + \textbf{Bold} = falsified (expected).} +\label{tab:tamarin-full} +\small +\setlength{\tabcolsep}{4pt} +\begin{tabular}{@{} l l c r @{}} +\toprule +\textbf{Model} & \textbf{Lemma} & \textbf{Result} & \textbf{Steps} \\ +\midrule +LO\_KEX & KEX\_Exists & verified & 27 \\ + & Thm1\_Session\_Key\_Secrecy\_A & verified & 70 \\ + & Thm1\_Session\_Key\_Secrecy\_B & verified & 136 \\ + & Thm1\_EK\_Secrecy\_A & verified & 70 \\ + & Thm1\_EK\_Secrecy\_B & verified & 136 \\ + & Thm2a\_Recipient\_Binding & verified & 2 \\ + & Thm2b\_Initiator\_Auth & verified & 10 \\ + & OPK\_Single\_Use & verified & 24 \\ + & Key\_Uniqueness & verified & 2 \\ +\midrule +LO\_Ratchet & send\_sanity & verified & 7 \\ + & send\_fs & verified & 2818 \\ + & send\_corrupt\_terminates & verified & 193 \\ + & send\_pcs & verified & 2 \\ + & recv\_sanity & verified & 6 \\ + & recv\_fs\_1step & \textbf{falsified} & 11 \\ + & recv\_fs\_2step & verified & 9132 \\ + & recv\_corrupt\_terminates & verified & 273 \\ + & recv\_pcs & verified & 107 \\ +\midrule +LO\_Ratchet\_PCS & pcs\_sanity & verified & 3 \\ + & pcs\_no\_recovery\_after\_recv & \textbf{falsified} & 9 \\ + & pcs\_recovery\_after\_send & verified & 7 \\ + & pcs\_recovery\_sustained & verified & 15 \\ + & pcs\_f4\_violated & verified & 7 \\ +\midrule +LO\_Auth & Auth\_Exists & verified & 5 \\ + & Auth\_Ordering & verified & 2 \\ + & Auth\_Single\_Use & verified & 8 \\ + & Auth\_No\_Accept\_After\_Timeout & verified & 3 \\ + & Auth\_Unique\_Challenge & verified & 2 \\ + & Thm6\_Key\_Possession & verified & 11 \\ + & Thm6\_No\_Oracle & verified & 11 \\ +\midrule +LO\_Call & Call\_Exists & verified & 6 \\ + & Call\_Key\_Agreement & verified & 56 \\ + & Thm8\_Call\_Key\_Secrecy & verified & 24 \\ + & Thm9\_Intra\_Call\_FS & verified & 193 \\ + & Thm10\_Call\_Ratchet\_Ind & verified & 3 \\ + & Thm11\_Concurrent\_Ind & verified & 52 \\ +\midrule +LO\_AntiRefl. & Reflection\_Sanity & verified & 8 \\ + & Thm12\_Anti\_Reflection & verified & 5 \\ +\midrule +LO\_Stream & Stream\_Sanity & verified & 11 \\ + & Stream\_Sanity\_Finalize & verified & 7 \\ + & Thm13\_P2\_Integrity & verified & 28 \\ + & Thm13\_P3\_Ordering & verified & 18 \\ + & Thm13\_P4\_No\_False\_Final & verified & 17 \\ + & Thm13\_P5\_Cross\_Stream & verified & 55 \\ + & Thm13\_Key\_Secrecy & verified & 3 \\ +\midrule +LO\_NegativeTests & neg\_auth\_ik\_corrupt & \textbf{falsified} & 8 \\ + & neg\_auth\_rng\_corrupt & \textbf{falsified} & 10 \\ + & neg\_ratchet\_no\_fs\_0step & \textbf{falsified} & 8 \\ + & neg\_ratchet\_recv\_1step & \textbf{falsified} & 10 \\ + & neg\_call\_rk\_plus\_rng & \textbf{falsified} & 9 \\ + & neg\_stream\_key\_corrupt & \textbf{falsified} & 5 \\ + & neg\_reflect\_self\_session & \textbf{falsified} & 7 \\ + & neg\_kex\_no\_opk & \textbf{falsified} & 11 \\ + & neg\_ratchet\_duplicate & \textbf{falsified} & 7 \\ + & neg\_call\_self\_session & verified\textsuperscript{*} & 3 \\ +\bottomrule +\end{tabular} + +\smallskip +{\scriptsize $^*$\texttt{neg\_call\_self\_session} is an +\texttt{exists-trace} lemma (not all-traces): it confirms that +self-sessions are \emph{reachable} when the $\mathit{local\_fp} \neq +\mathit{remote\_fp}$ guard is absent, demonstrating the guard is +necessary. ``Verified'' is the expected outcome.} +\end{table} + + +\section{CryptoVerif query results}\label{app:cryptoverif} + +\begin{table}[!htbp] +\centering +\caption{CryptoVerif results (CryptoVerif 2.12).} +\label{tab:cv-full} +\small +\begin{tabular}{@{} l l l @{}} +\toprule +\textbf{Model} & \textbf{Query} & \textbf{Bound} \\ +\midrule +LO\_KEX\_Secrecy + & $\mathsf{secret}\ \rk_A$ \texttt{[cv\_onesession]} + & $2P_{\text{prf}} {+} 2P_{\text{kem}}^{\text{ik}} {+} + 2P_{\text{kem}}^{\text{spk}} {+} 2P_{\text{kem}}^{\text{opk}} {+} + \text{coll.}$ \\ +LO\_KEX + & $\mathsf{event}(\text{Bob\_Accept}) {\Rightarrow} + \mathsf{event}(\text{Alice\_Init})$ + & $P_{\text{sig}}$ \\ +LO\_Ratchet\_MsgSecrecy + & $\mathsf{secret}\ \mathit{test\_mk}$ + \texttt{[cv\_onesession]} + & $2P_{\text{prf}}$ \\ +LO\_Auth + & $\mathsf{event}(\text{ServerAccepts}) {\Rightarrow} + \mathsf{event}(\text{ClientResponds})$ + & $N_s {\cdot} P_{\text{mac}} {+} P_{\text{kem}}$ \\ +LO\_Auth + & $\mathsf{inj\text{-}event}(\text{ServerAccepts}) {\Rightarrow} + \mathsf{inj\text{-}event}(\text{ClientResponds})$ + & $N_s {\cdot} P_{\text{mac}} {+} P_{\text{kem}}$ \\ +LO\_Stream\_Secrecy + & $\mathsf{secret}\ b_0$ \texttt{[cv\_bit]} + & $2P_{\text{ctxt}} {+} 2P_{\text{cpa}}(t, N_{\text{enc}})$ \\ + & $\mathsf{inj\text{-}event} {\Rightarrow} + \mathsf{inj\text{-}event}$ + & $P_{\text{ctxt}}$ \\ +\bottomrule +\end{tabular} +\end{table} + + +\section{Wire sizes}\label{app:sizes} + +\begin{table}[!htbp] +\centering +\caption{Key and ciphertext sizes (bytes).} +\label{tab:sizes} +\small +\begin{tabular}{@{} l r l @{}} +\toprule +\textbf{Object} & \textbf{Size} & \textbf{Components} \\ +\midrule +Identity public key & 3200 & X-Wing (1216) + Ed25519 (32) + ML-DSA (1952) \\ +Identity secret key & 2496 & X-Wing (2432) + Ed25519 (32) + ML-DSA seed (32) \\ +Identity fingerprint & 32 & SHA3-256 of public key \\ +X-Wing public key & 1216 & ML-KEM-768 (1184) + X25519 (32) \\ +X-Wing ciphertext & 1120 & ML-KEM-768 (1088) + X25519 (32) \\ +Hybrid signature & 3373 & Ed25519 (64) + ML-DSA-65 (3309) \\ +\midrule +Ratchet header (no KEM step) & 1225 & $\pk_s$ + flag + counters \\ +Ratchet header (with KEM step) & 2347 & + length prefix + $c_{\text{ratchet}}$ \\ +Session init (no OPK) & 3543 & version + fps + $\pk_{\text{EK}}$ + 2 ciphertexts \\ +Session init (with OPK) & 4669 & + 1 ciphertext \\ +\midrule +Stream header & 26 & version (1) + flags (1) + base\_nonce (24) \\ +Stream chunk overhead & 17 & tag\_byte (1) + Poly1305 tag (16) \\ +\bottomrule +\end{tabular} +\end{table} + + +% ============================================================================ +% REFERENCES (placeholder for BibTeX) +% ============================================================================ +\begingroup +\raggedright +\begin{thebibliography}{99} + +\bibitem{acd19} J.~Alwen, S.~Coretti, Y.~Dodis. ``The Double Ratchet: +Security Notions, Proofs, and Modularization for the Signal Protocol.'' +EUROCRYPT~2019. + +\bibitem{apple-pq3} Apple Security Research. ``iMessage with PQ3.'' +\url{https://security.apple.com/blog/imessage-pq3/}, 2024. + +\bibitem{bellare06} M.~Bellare. ``New Proofs for NMAC and HMAC: Security +without Collision-Resistance.'' CRYPTO~2006. + + +\bibitem{bfg20} J.~Brendel, M.~Fischlin, F.~G\"unther, C.~Janson, +D.~Stebila. ``Towards Post-Quantum Security for Signal's X3DH +Handshake.'' SAC~2020. + +\bibitem{bjks24} K.~Bhargavan, C.~Jacomme, F.~Kiefer, R.~Schmidt. +``Formal Verification of the PQXDH Post-Quantum Key Agreement Protocol.'' +USENIX Security~2024. + +\bibitem{bj24} B.~Blanchet, C.~Jacomme. ``Post-Quantum Sound CryptoVerif +and Verification of Hybrid TLS and SSH Key-Exchanges.'' CSF~2024. + +\bibitem{cgcd20} K.~Cohn-Gordon, C.~Cremers, B.~Dowling, L.~Garratt, +D.~Stebila. ``A Formal Security Analysis of the Signal Messaging +Protocol.'' J.~Cryptology, 2020. + +\bibitem{djkps25} Y.~Dodis, D.~Jost, S.~Katsumata, T.~Prest, +R.~Schmidt. ``Triple Ratchet: A Bandwidth Efficient Hybrid-Secure Signal +Protocol.'' EUROCRYPT~2025. IACR ePrint 2025/078. + +\bibitem{adjks25} B.~Auerbach, Y.~Dodis, D.~Jost, S.~Katsumata, +R.~Schmidt. ``How to Compare Bandwidth Constrained Two-Party Secure +Messaging Protocols.'' USENIX Security~2025. + +\bibitem{fips203} NIST. ``Module-Lattice-Based Key-Encapsulation +Mechanism Standard.'' FIPS~203, 2024. + +\bibitem{fips204} NIST. ``Module-Lattice-Based Digital Signature +Standard.'' FIPS~204, 2024. + +\bibitem{hks22} K.~Hashimoto, S.~Katsumata, K.~Kwiatkowski, T.~Prest. +``An Efficient and Generic Construction for Signal's Handshake (X3DH): +Post-Quantum, State Leakage Secure, and Deniable.'' J.~Cryptology, 2022. + +\bibitem{hrrv15} V.T.~Hoang, R.~Reyhanitabar, P.~Rogaway, D.~Viz\'ar. +``Online Authenticated-Encryption and its Nonce-Reuse +Misuse-Resistance.'' CRYPTO~2015. + +\bibitem{krawczyk10} H.~Krawczyk. ``Cryptographic Extraction and Key +Derivation: The HKDF Scheme.'' CRYPTO~2010. + +\bibitem{lsb25} F.~Linker, R.~Sasse, D.~Basin. ``A Formal Analysis of +Apple's iMessage PQ3 Protocol.'' USENIX Security~2025. + +\bibitem{rfc5869} H.~Krawczyk, P.~Eronen. ``HMAC-based +Extract-and-Expand Key Derivation Function (HKDF).'' RFC~5869, 2010. + + +\bibitem{rfc8032} S.~Josefsson, I.~Liusvaara. ``Edwards-Curve Digital +Signature Algorithm (EdDSA).'' RFC~8032, 2017. + +\bibitem{signal-doubleratchet} Signal Foundation. ``The Double Ratchet +Algorithm.'' \url{https://signal.org/docs/specifications/doubleratchet/}. + +\bibitem{signal-pqxdh} E.~Kret. ``Quantum Resistance and the Signal +Protocol.'' Signal Blog, 2023. +\url{https://signal.org/blog/pqxdh/}. + +\bibitem{signal-spqr} Signal Foundation. ``Signal Protocol and +Post-Quantum Ratchets.'' Signal Blog, 2025. +\url{https://signal.org/blog/spqr/}. + +\bibitem{signal-x3dh} Signal Foundation. ``The X3DH Key Agreement +Protocol.'' \url{https://signal.org/docs/specifications/x3dh/}. + +\bibitem{soliton-repo} K.~Tufekcic. ``libsoliton.'' +\url{https://git.lo.sh/lo/libsoliton}. + +\bibitem{soliton-spec} K.~Tufekcic. ``Soliton Cryptographic +Specification.'' +\url{https://git.lo.sh/lo/libsoliton/wiki/Specification}. + +\bibitem{soliton-analysis} K.~Tufekcic. ``Soliton Formal Analysis.'' +\url{https://git.lo.sh/lo/libsoliton/wiki/Formal-Analysis}. + +\bibitem{xwing} M.~Barbosa \etal ``X-Wing: The Hybrid KEM You've Been +Looking For.'' IACR Commun.\ Cryptol., 2024. + +\bibitem{xwing-ietf} D.~Connolly \etal +``draft-connolly-cfrg-xwing-kem-10.'' IETF CFRG, 2026. + +\bibitem{fiedler-janson24} R.~Fiedler, C.~Janson. ``A Deniability +Analysis of Signal's Initial Handshake PQXDH.'' PoPETs, 2024. IACR +ePrint 2024/741. + + +\bibitem{cmn25} C.~Cremers, N.~Medinger, A.~Naska. ``Impossibility +Results for Post-Compromise Security in Real-World Communication +Systems.'' IEEE S\&P, 2025. IACR ePrint 2024/1886. + +\bibitem{starfighters25} D.~Connolly, A.~H\"ovelmanns, A.~H\"ulsing, +S.~Kousidis, J.~Meijers. ``Starfighters --- On the General +Applicability of X-Wing.'' IACR ePrint 2025/1397. + +\bibitem{bp26} S.~Bao, Y.~Pan. ``Anonymity of X-Wing and its +Variants.'' IACR ePrint 2026/396. + +\bibitem{kls26} M.~Kang, J.~Lee, K.~Son. ``On the Necessity of Public +Contexts in Hybrid KEMs: A Case Study of X-Wing.'' IACR ePrint +2026/140. + +\bibitem{bcrs24} L.~B\'eguinet, C.~Chevalier, T.~Ricosset, E.~Senet. +``Formal Verification of a Post-quantum Signal Protocol with Tamarin.'' +VECoS~2023, LNCS~14368, 2024. + +\bibitem{hs20} V.T.~Hoang, Y.~Shen. ``Security of Streaming Encryption +in Google's Tink Library.'' CCS, 2020. IACR ePrint 2020/1019. + +\bibitem{floe25} T.~Fabrega, J.~Len, T.~Ristenpart, A.~Rubin. +``Random-Access AEAD for Fast Lightweight Online Encryption.'' IACR +ePrint 2025/2275. + +\bibitem{rfc9420} R.~Barnes, B.~Beurdouche, R.~Robert, J.~Millican, +E.~Omara, K.~Cohn-Gordon. ``The Messaging Layer Security (MLS) +Protocol.'' RFC~9420, 2023. + +\end{thebibliography} +\endgroup + +\end{document} \ No newline at end of file diff --git a/soliton/fuzz/Cargo.lock b/soliton/fuzz/Cargo.lock index 632618d2df..631446269f 100644 --- a/soliton/fuzz/Cargo.lock +++ b/soliton/fuzz/Cargo.lock @@ -435,7 +435,7 @@ dependencies = [ [[package]] name = "libsoliton" -version = "0.1.0" +version = "0.1.1" dependencies = [ "argon2", "chacha20poly1305", diff --git a/soliton/fuzz/corpus/fuzz_auth_respond/valid_ct b/soliton/fuzz/corpus/fuzz_auth_respond/valid_ct index 7455631829624485ad3377a0afa2faf83c6f94ad..31dd7283efdf027e3bd1ebfd5c27505cf0f49b76 100644 GIT binary patch literal 1120 zcmV-m1fTl}ru;?LQol|1seytl6DHcp<_G7cX(rfCl|qg<*;@st0Nq9Su3Tt!kya8y zHwpW}`mUQW?M@R>29Jo zrxCD&X=V49faQFW-E%=!^=1Q|Za1tzj4wp{6byBAs|=w6H8Zr@K?M5(~Y+Lh{f+hBrh0j!_ak>E8+C=2oSvi zpUMN%XmqI_hWnMERf=N&*}qd*HRa?Qhs2(I14il&6Fbb*Qw7*m5*~=Z z$68Q0QHb}q((j5@orJW82>&Jc1CNIT{S5MY!mFr1+~AK5J(JeQUsxo((u68Fypf^N z7+`xec#p|?*I;(+H7S-^z6N#Y=r?S=Ny$19J^<9fav?a#{-FSSNzs$(dbx6jmGe3xdt`c9)Vow`6%jjmGV`9~tS z(Kmpdm`}MI-oKyLs9l`-7L5?7IUza&9wBuFlw6dUbbGAo`6EB)XYC)1hlV?}yCA^K zISHtCJMAO+CRLtix46aU~YT9n}S0i;^p!YHOi|u z8*qBJK>P5iY+NEyklYw<6pgxC%mk{_u8r=bw)yl# zt5M&SJ+Y`M{sl|v@AT9?`&>K2ls|G+Ff$$<3L%aLTqQm*i@i|rcVDn*Z)gCr(5?~F zG1@#vc&zBAJK?D9k2FXL8!RFf&OWN+d9HbOG-OTbSc0ha85Y@zeIEv!#xnP5x{+?!T4envPl|{lpWB-0 zq&a&*NPc!8MO_EXR^qat22Av~wOlpWh`cJCXtBS`HN_)ep_O*?B}qp?LYIYM4VctQ zwvC#t*}*h)5#lOrBnf6t(Ki7X;d_G*M#5??O$|IQt)tcrH-^-6Dr2d}d5l?cuNYJi zpM&e66)Zf*5$%|&JZQa=JN4x3`us&Bxuq(GAiIe2(Bdwn>XDr}noN@VNNS+KWd+Fk mf<-wh`?vI*^mZlH6Y*-Q5%FQeyDqxX@7EY?eLAh?1`m`2IyQj- literal 1120 zcmV-m1fTn4Qb-&%tbz}AFtib7EH>+)Vcw`=c8Q~Pnc779?xQ>RzY%m@4&^26yIB%h zNDspWqpdPLQ^b_{raSafnZ3^oNGFkCMRvA*3y!y=1-4LOB=z^1fSJ@Vp3bGvQ?I)s z%ei(Qfss;g+Hg}_LCC5#eMY91yvCOtVXMKO=kSxUj3+$8pyyIYk0#>4PKsrc%GXEB zGTzKD@6mtB;6*oKDOU+^cW@yHK@Zd#fbbyQjD_|ZL;qeFytiJ3{iKv}*^qTmPm4Us zsqkN(m$!1(9ci=S2RE}AIYNx$)wyg!jz$I%Uo*Un9(J-77{6L4KAxYInxcB$-LWeG z`^bgL81qMQo08W{XDtK9Bz;LX#wN)yP@VlFstoUR+1thidxWqc=wl7M+% zX~nG_zL_uYt9atPC)y4voL6t^f2+sTb?t|snV1WoOCYrO=Neoh>E$*Zm9iZoY8p1x zh0NR%>{i@+nYD6=;(~$*3nnxtmd(IIc!wK%I;c}ZP2LMvv`H0#Jf%xnG(c5Eiw^R6 zT7^`k2w_UTftXH3Y`S2}ql{*r_q9NpSh}${BwbyW_vgCa=7iQX3|%Kg3S0*=^vTLb#t$6 zvVx^YY2)(Z_@^kdr@u_s71`DBCk}g@A;~$J>^z4mr~-RPkJ|a?grR$i#5>r_tI2w+D3Jh zBM7R&2;O(rJ8Z$JtL0|DjP^;k)@q`Vs(1X!eiD1L$ehr_1@JO(J6J8eZ(HOBuBAt{da$--ArV7HtjO5jDRaF%_qAQc6_?WNB z!69i{1@rKvSfClJu7S_Y3*buUkc!fX1OafAVnfA=X*F8gE@nS6K@6S}8{|s+Lu~em z=!?Wu!PI3L(z5QHyvKu6uC-s;BzNI`PH>;0YIbF7-g_2_8nlh0ay`GvotJ&k1GZ2| zJR8fprEYO&J_3ATDVxc6R*Foy)no}NgktCf>kDBmXvuc8UXb=Ok4j}+%0BQ}w}GI2ir| z0YqO6NM+fCbg%?iB}gG7!)o;&pcM=%*$@dR3Fks&!A4*h3UL=!{SZ4*+z2-x$+29I zAr6Jf{RO#q*BcT \ No newline at end of file diff --git a/soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/valid_compressed b/soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/valid_compressed index 78648b8888..3873ed9a0a 100644 --- a/soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/valid_compressed +++ b/soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/valid_compressed @@ -1 +1 @@ -́@qvU|J2疚 \ No newline at end of file +n[t'޷>TR297l8HI)UZGnB*h鬠Kb( t=P_$4:gu \ No newline at end of file diff --git a/soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/valid_uncompressed b/soliton/fuzz/corpus/fuzz_dm_queue_decrypt_blob/valid_uncompressed index 5b964c84c6645b5598244d88248139653f030388..7fb665ed4314bb79bebcd76a25a7a3368910c4be 100644 GIT binary patch literal 59 zcmV-B0L1?R06coCUSVeHhh&bvRMRwa9nNRwN~LAE~vQP|^L7~}u| literal 59 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 M3Jw(<9+RyZ8R+ziXaE2J literal 6598 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 diff --git a/soliton/fuzz/corpus/fuzz_hybrid_verify/valid_ed25519_bad_mldsa b/soliton/fuzz/corpus/fuzz_hybrid_verify/valid_ed25519_bad_mldsa index c647b5a117e8c2d8db829e7e3c3924715deaf220..c6520cda9740643cf35002e48d38ae7ef74f6f48 100644 GIT binary patch delta 3303 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 f&kb1200000000000000000000000UR93CPiZKiEM diff --git a/soliton/fuzz/corpus/fuzz_hybrid_verify/valid_hybrid b/soliton/fuzz/corpus/fuzz_hybrid_verify/valid_hybrid index 226878e59d46ac062eb3667e14bbe046b3a1db1c..556e2be3ccbeaf7499325890a4b00f80e2e6785d 100644 GIT binary patch literal 6598 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 EbD0@;ApigX diff --git a/soliton/fuzz/corpus/fuzz_identity_from_bytes/valid_pk b/soliton/fuzz/corpus/fuzz_identity_from_bytes/valid_pk index 807e0c37c2602fa0dd2c13e0d4f316a457f9afcd..05d2bcba5fc13facc1c30d7683674cdf47572b70 100644 GIT binary patch literal 3200 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 literal 3200 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 literal 2496 zcmV;x2|xDBXkNh_c@Dq^N&Slk!t@BqTU#MF-q^q*Z&dZJB>3^;%18mh2Xm}bFpAIX zW_V8d4&HRPg50((FsK7KRDd84cZyMsvUv*Xh6%bMvo<9f0tb*&z$MCw0=RywXQp)A zs}N^@`{^Hsv@dlVaXnmHmNr{3@=YA(ArZiFsaL3$NdTp*M1b>D)Ih}wWr{#VZ0r+C zj};LfY(~XftsKCXX~mmv>vtYn#(O6jSJ}g;2~H*hu{*Xe$t7rZ2uhS8YC8(XVOV5d4 z>{h_Ur(P*b04wLA1?Rfm00mRUF6%6OPdkgW*$ww=V4|9ut+=MQmJNlB&rASGsW zW%MI}B5Lw!Ju7k~q3J>PVi0@y8=Dd$3Z$2Q+DE~YlzxbqzsbZN5-#nTTIwoh3W+Ef z+z<=(Adie|8ffJ9BJR>CL$(&gPK;K-at60JS_IV=yoY!wInjD8089vnnh(HE|MbIA<$K zb5@gcnz2tK3`0fLshxowvnNclg1H)O#4gcN?F(F6e3~3f1)*503`Pa;Qi9Lkp~_l;n%e=zOItRBeoT%i1HIk=zVz7g)7Y z#@Z!dr;=rSs-boISjzB)+;ScD9EW5QZ2%ax^rMAN(uXtF83ssu#2CX%>7%_9GnSAs z5V1=bCL~ItkC$=_H|R}_40KNdL;&Pqw~=)w^|@pAvO3vr*aIvz627E*BT)OfG^zw~ zXPl3dZ}~F~nwkza#4^UVyY(m=9F}JtsaZ_yw~!|U(*%YirXOm=!3%AK!5*H{>S;9`tymObEu|Z57SLLAmWsoliw(`L$1yy2*p=((Phj4*9 zkGxhxTY0O)vS-R z36XHPp*rezewPbzA)P*;bf4TfOhS$b2zLxpn$v-!-)0gS7BV)PM$85PvjA_>RSjs= znAV}Veo9(Q#BH$>j$wi>?X_x`g}I_yAi273kHv|zRlj+PvN=MZkQbzJ%zQ?AX0HQU z^CS)?{9*0@Du;kN^vb#c=_5F>s?^oAVd_N4b-`$hx7;O?1adfo#Es&Gaz+BRl_5xr zCmRI{A_t(duHYyq&QeOLxhXHtSx7j*=>xMmVtJ$GwNm2}mY z93M4^zW22KD-LtJ$1Exiv_``1RWigpgbmUcx3!Db_aYORL1R@p4Y{ON2&qh!6GPA* zok@YZRt!m0H<@aoN#Uzi<_aK)2Nnemw3ro4YaGgZfrn_KEb?%OgjN{|3FRCpxT-}@ zxJ{Wepy5CM)wnOc4#%YKy=i%d+Z9@SqSteWTfSa zFPI1D+9g-v6A3t~UuqX0Lp0IVrG~NxLklytcu~+MFSP}<5NC8F#zjgIciiGWqN~b* zxR-T8cmEi#f^svV`yU@V$#glNfc3G_v=J;4!hJ}>p*op=vPM!`b8BID$tbBK#l_=W zU80e%cIjLtaR)L>5OsuQvkC>*Qx2-K$fXmrRds?JymO1w5rHViJmj!gwgDN|7VCEo z>x4q4BAv8*oNETq0dSh6bEvtQBkX<=_VV23MFshswYfLym zhC)acoSSD;4x6PGu*Cx|yt}Mi+hM1`o8{v>r9!t!x>f>2XJ`qd1hyOK%n(5qZ^<+} zc|;w8Gxs^Vr$SfK%@~_wkfj?vC_+A+J)`AqxlYsE{{UxSZ=L#C#%13|Q<#FAlOA66 z39A`AVGz@w9ED>*n60jkkD`LDoLb}cZ0Y$)B+ObZVO{}PG!_8R C$jHS2 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/123ef33e2b797f8f691b1d38501f33fbcc7428ea b/soliton/fuzz/corpus/fuzz_identity_sign_verify/123ef33e2b797f8f691b1d38501f33fbcc7428ea new file mode 100644 index 0000000000000000000000000000000000000000..a51ae07777ff1a78fcdce9fd8014253af069e4af GIT binary patch literal 179 zcmbX RIY}5mQt$bkIUG_R`2d`HV5$HB literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/3a466d29221a816c5a2c7cc403caaa6058da0143 b/soliton/fuzz/corpus/fuzz_identity_sign_verify/3a466d29221a816c5a2c7cc403caaa6058da0143 new file mode 100644 index 0000000000000000000000000000000000000000..fcbb70450a7c0e12b20ab24278007ed30113fd29 GIT binary patch literal 17 UcmdO9_|NdasYx3`{m)?l078Wa#sB~S literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/622ba87343a75abf20a2b47e503c9cfc557822f7 b/soliton/fuzz/corpus/fuzz_identity_sign_verify/622ba87343a75abf20a2b47e503c9cfc557822f7 new file mode 100644 index 0000000000000000000000000000000000000000..f99e7f1ba5cc467d080582fc28aa2aded39dd4f2 GIT binary patch literal 77 zcmYddWd6_i?mruYU=kF#y6#P4)L>+QaI=6^Y)4X3)_(>d*y{=v28uGsF)(PqWOV?E L|6>P=Gb8~3+y56* literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/6ed2aa32781ba0300c5a8e887854897f8da5aa03 b/soliton/fuzz/corpus/fuzz_identity_sign_verify/6ed2aa32781ba0300c5a8e887854897f8da5aa03 new file mode 100644 index 0000000000000000000000000000000000000000..02285b0755c57ac1b7f01bc64500dccf0970368b GIT binary patch literal 73 zcmYddWd6_iE(r=;UH2w2GB7egxLH6dwj(Ji>pue!>~)0-14S9+7#Or)vO0jo|FHwb G8Ik~fS{4)l literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/78415fd588c0775cb41f15532ec2feab43a84f0b b/soliton/fuzz/corpus/fuzz_identity_sign_verify/78415fd588c0775cb41f15532ec2feab43a84f0b new file mode 100644 index 0000000000000000000000000000000000000000..4d1e9213624fe916cd380b38c94b89d9398e681c GIT binary patch literal 286 zcmYd_Wm5YO1gUqS3=jtd)N=E4k}yCKNJKkXY!Y`+P|!9YrUXp5KZSv80CzB)0dY6P l<@w8%uk4Gno89|*QuvQYQU)+NqUhf*W=daVe()gaKLGuchT8xD literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/7e06b1ca802a48c717192f5906d9724df8f4423f b/soliton/fuzz/corpus/fuzz_identity_sign_verify/7e06b1ca802a48c717192f5906d9724df8f4423f new file mode 100644 index 0000000000000000000000000000000000000000..1bbae5116ab8cf3878270072be70b94502b665b5 GIT binary patch literal 1377 zcmZQzARVkG9{?@$rwl;trkX)m{c;1V=+F>!B*B^g;Q&b!)q<9MgOFT97W2P+!+(4l zVM!358v4jd0|N;J=wlllZDGXVh(U1Z(997-Ml-sQg~ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/b9b60eb1c690d52bf2d9fadb4aa253acfd5b1849 b/soliton/fuzz/corpus/fuzz_identity_sign_verify/b9b60eb1c690d52bf2d9fadb4aa253acfd5b1849 new file mode 100644 index 0000000000000000000000000000000000000000..981695b06ac9dcc5944392b1502ac4ba2060cb24 GIT binary patch literal 11438 zcmZQzAPKBqy&9`h`>N({-H|ZA@Kh(jInX;WvXD z6JN;x_iLQ!t=@fmi5zRJdF4)FrOz~tB{at(bCJD@%tlsolrTV6PAvNp@!&FHrJ;Vr z*!!R9KV#8?Oa@}q;!xv=L!5vxFmRC*2^nmt1ynPLfP<+g-GO1$N(>Q%K;l6U-p%rd zJ&oF)8Xowd?4G})^FvV2q=y*}shgjEY1xQSNduPrKmSHxRz!*&s3ij)>PSu^l}QCJ z;0S7rcmxI$BUCLDs-Do05WoLW0F;3-QD}sY{~%^+4vH)$M_T^d6Jwd?Uy2bk7`nBu zDpvY@d>y34!^4vV0vXW`^N!j5y0%vwYHm(WKEejvtpADF0H*C=5s(v%@H)X99{^XC zb0;*-66mtBZQk^5t={U@v~VWE^>zp*m<0(3aG0UVz_>^%K%sg!H7N`ccrZnnG$R94 z451i13sWna2zG6lqG(ABS;0CWhv6SPa=8yos$lSxrT|!!Ai0CooQtF$Y6{TFNP?s> zksN}|q-`cfwu!t5f_bpI3`9^NSdjRGm#M_& zey9P+v5$?7um=YVn?EXFw@A$3OKY-sXsV^`gh=fghd351_{F0_-J^V1u~%OfI5*y$zbEK@S2HdxfS0> zR{qE>EAi!;lc#64oPXeJ^j~K7C7Is;CIa`xkIxS=dD~@q%>tVVaOWbIY5QRuP>az7 zZ;NpdG+N1X0x+BhWjtezC3rfbbuwGMda#U=!SVqplBffyR6351mcgP1Crx++46cG| zqh$!kjELWy`(3mxZ#?2TS<^Qc-4KGp=fdwpPkVVO0Qy9o(*a*`CwV4tx;BY)` zyWFGWW;lW!EKJhy9<0&!|3Ci01B5yR3*rcpd(NZdW}sgA!1SGAIUkkAk(y|miIFWO zZ*T)v@DBcQGt^Ni2#<{RDXKAujEG>7nI)kHAV&!{Ho_hpENq&viIErIqk~zf*%k|r zh{3EYL{GqAi#hCKqoY|^;sSe6;TOeKC?M-1yjbBVvT{1J;e%j9zDETv?Aa1hD`808DP03icl^24#bf%y%M9+>`-GO8=^Ec}4>k5JV^dB|lMREUD| n3ab?a1nJh)@kj0-V(~Y~op50mI18PD?B4%Q42-~r4u}E(20Y@1 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_identity_sign_verify/c1972705930bee9c59e74f1a367428eac8aa3ea5 b/soliton/fuzz/corpus/fuzz_identity_sign_verify/c1972705930bee9c59e74f1a367428eac8aa3ea5 new file mode 100644 index 0000000000000000000000000000000000000000..dc2c385e6bb6ce60a6be8a2111dc4e3bbc9da4da GIT binary patch literal 12794 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 Kd0PMg00961Fgfx7 diff --git a/soliton/fuzz/corpus/fuzz_kex_decode_receive/valid_with_opk b/soliton/fuzz/corpus/fuzz_kex_decode_receive/valid_with_opk index 002af987355a68f6e9aebc9a2529e2d8102c7251..076899d41b55c147c13a90fbd642470d62193690 100644 GIT binary patch literal 8042 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 literal 8042 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 diff --git a/soliton/fuzz/corpus/fuzz_kex_receive_session/valid_session_init b/soliton/fuzz/corpus/fuzz_kex_receive_session/valid_session_init index b965eace8cec691c614b223d6280cdedaa6bc6ca..94f9401fcfe2455a5966ed0c60c279d686456a2f 100644 GIT binary patch literal 6910 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 Wmf4hL*+RnA{UWbLM2D-#YW)Ql@>7)n literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_kex_verify_bundle/54b5169e3a98f60c11086985f87b36cc9e1b529d b/soliton/fuzz/corpus/fuzz_kex_verify_bundle/54b5169e3a98f60c11086985f87b36cc9e1b529d new file mode 100644 index 0000000000000000000000000000000000000000..5392c59597b4d4f456ab2e4340ca0b26a7eac7cc GIT binary patch literal 4606 zcmV*CM#5lJRVn(4E7U;e z$7fzhU}DCcAohOn{E9L4N(1D6b-WWYox6K}R0CH^ zBLPN|$#o2dunJK)D$KFLr-Z15%3C&e12YtC*+F{dd%ldAkrp})$_%;Z<$%T%35~_C zGi9(kC}n^WNI~2OeM3M`JU;G;pO?JBUz?Vw;+_tPYw+1$JZPB+v}5vElq0(bt|c>R zJBLH0!)NnK-!{ueNS(K14aRmUhoP9(AUJ3{v0s%Q?6P=DJZhOKt24-gJ=_)6%&Ji- zQuB$jt)X0|0AtMOC0<~z9pE(R;1}-3bC6*V*TX-G8cEGN5+4|lMlqGEFgC*zBp*0t z`u9|qb^@N%Fg9gG*P~s|+9XgLNh(N=KTK(a%9t{QV@^zfb=ytBDRBZSq~seQUpR+< z(>PVd4+n%kn!$u1hjTrVw*UNmqZoZD1!xBP&%TsARmNvRtISe7Gu05D1$qmi%#<$j zM@@NwHGDQ_4cQ+!1BbBZc%d;Zg~8b2YbEZ{|7tQB@(YT4 zh=+lpMh90Mr@k+^BGCzxZ)nZhpdqXFIZ)uQs>{6z=Q&$Ud>Q(U?#4UI=0}hczy#cB z!bh;Jw-!kTQt^YLQbV_W)dX^rWa9+2u0sb4qBc&NxykYu+hG_xd$^b)ws0UVW<)dy zXsgkZbOL6i$A>#U=6Z{U1YK-+^4NNGtTOq~#5k2xNR_$Y2EAk`5=gWoZ$!^fawqj% z6tafLwQ`USX=DD5@iev%)o<7Gk$xEQnJhJ68o48e;hDio1r^<+a;yji&R z`k9e0rF+*$)0+Lb{NF^PbtZaSTh8G55G5eQ*`-b$arT`LCi-eEeeeX=1dAGcC!ImX~boaBEJyLB*uZ6sr#AwGs8 zwALbWO!-@%osJCinzBQ^m{ZDFtgj#ZARys`nv^Kex!k<0nF0fPz`9do1Hp)Pf04`C z+S7`i$@M0+(Fz@5r9Ch0xb8g5bhPL9G8*o!tqgYi60&k4-3$S4QPL;vC`D2Eh3K@< zlDH~N2(gd|!b?9;V2n&^vTGhXX8Tl8%Q)n1$oS-6vUC)ec**R?ulncW{EzCu(NNh; zbZZJjc--W`);(*J_Cy};VR*FG1?Ids<$Zdm`W859Z5p&&!z!GW=w{Qpk+&DbqDB!* zhcCFc+0`B!FfPv3qH0pvqw}6~dXsxTQScAAfBSrnek3^|o0S(THxqk&>DNyG1UyB# z711{mg0!!SE?dYQT#vwB-?<~XiY;7c$f4S|F=#K`8kCs_o16NZ_dr7(ocKnQcHJ=d zzW&5y#P03qBG+BitS`EQ+4Ck7i^pZNDhJ)DNMrM#G;M=bhDSnUqoW1IkIG~9si!0SPm0Dy(h+*Z> zRdA|4VT-+=K?IcKBFY%64a5yeXxEl3B`>B8pj*GRnJwL+&jE1LV_BP&Ks%{=Tr@q? z4kKE#ZM_LKlJ6b2%8lsja`b#y*ertXK0|=UJF7@Lc{i_y8;90;MNE`e@G$%@s}vgL zCLCW_>NGyOeNI*Tf2&nOG-Rga$nVx<0*c{@^QRPO5SH)_i9X&vVFy2{ddb_`M(~zY zdyLH2mUUudUcI^L!P|GvLZRNL<<;AASeDqE__(Y^4RejpbXFoRMKAEIntDh-QNz$^ z3Kf3zctvlVMmkj-IeD2ZOKvp&(8;z$ElNNctc*#4szMg8*RsqBKg`a5ZDhBy%8^3Q zcnN-G4_$A$@Cdc0C|GF2V(px$h^v(a&AwYhXCtcyd1Ze2qTY`AzMIf4#-)z_OYD5W zy2aP@qje*~xB{BMTRzL`%|b3p_r8<5xlD?y><3HcotSed9H)WNFUad++r~Hev9osE zkU^NJ5LFr{l78fr5&J)b0dP0qfU@VR$r!5|nh4}*T zigkN`zs1AcEpiH+I3IZApZSYci?Aoos zyv@|5eLFd=r@%|avwnAlcpYCOa?On!2Lx=aV?({bX)Z;oFjazoPVq6wMiGP>N!`I~ z4(@UEr^8QbPW-u?cLs@z4Qp-%|6m($$mQz4Qr2EHu{Rkn!QM}706pf>6QMZ=|90_d zw(YjW9ac8q&@cgj-Kl2ayaF9Ch1gFJLpS27w9CK58KiM{V?=%?{kNncl0lNk46Q?>p=A0UW6nv#bo#L6=W9_)Ymj@MEY#r)+h*umndT?c4;FX1$;~j4Vn6n-FebH*{3Pn z=JNceoqF|ctUMRaJE&3wx9Bo7MG+7qXfpN=?GT*?g$!>0WPL=3dau&oDqgpP55b)+ zUfuQQp=2AtIu01cheyjhmHja}#u3nM;X|T6tv@opCttyflTQ~_^LeJAD4x*yU}=|QI7P`d z97F>vLvH<(_>w%Hjs!i@N9APW^nN5W=3_3FB0QxG7q1&@zVE3K zyKhhjqw=uP^!fXw(6!-70d)m#m^X^?AR>*YtnI#V@4*_T=lyaK8IhFyZi9tGZH_}u ze5dGK$;BKL-gAU3hB#cgtY+53saD_=24b^!PY-C-zF9j;WX z8HbpIAcKh^tt_uUnY3(HwSM%9toDo^Wct--qk@pF{k|*#Tk<-~>wo6)+U=b;0vks( zDrf_C$}a%LA?hJeGv+DS+((zsSpurWZofICWghH4BsGyr-9qEDVAG0_+^>GZ&0J58 z5s*;v-!QlbTMuR%$OFXXB7J9*B>4A?LNQE{7FN1d9T|UK7^&kFLTrJKEvMauz{8ZPpN)UEsXo=uAS@2iT#1jI%QcvOL4nnWFj*O zVD)dnh|+qdT>@aS>$CKSU_;bE=E>Kw1?@HKxp`=8lR}tptwGIpJ#)Le^rxxX9LO-D z({wNei%JU*>1b4iPY}df_E<`IWY-^lnOwL>Ev=rNiCzr&k*I&b=kbGRH;bWSFteid zrf$@j6S8&MAT==YW2mvWITUoms}ZMY=410deT&-8IGb=m z2qgkfHeAwpD(Ufyu%-+=EWPP^kQ-M%S=1fC3|zzk_q2x!i0X%@XVTzv)^_mNr)O+i zdxzpAzoLORdnm$^&>`#YA0d}*q|JmoW%Z{TBEFpTou=0caY%)E!naPP=Q=ccTr?at z6E-ODsxS%2@c6OM&5g-6j(&=Q7wvSLK^H2)EqI=4Tfq?;BX1s?_6=8uG&yZzv0e+e zAtH*#U%Ys>v9?1u$89}upcY$gf@nTq$(f7+OK|%^qt5!O8n}xlJSe(0l6?B2!LHZG z?0$v5sW*fbfS7h+phHZ=`3ImCVR`Rd$`(IEOD3Y(@QdLcnmZvaSp@C zlQW#BF{;am0ADVaM+lY^(ThTb7m+g3CWA24o?_hgwe8JIx$9d!ck+hEha?rv!+V{Y z8l9wnAaF-b@~JF_RsWrC-IygENZLnAw0g`lZYAcbR#}n)8z{1$OKPr@y}B4XzC07% zt1Eb##;~hNmcOS;Xya)$-|WEyB*#rjjkCDiZ2H-($Qo!C`Ym%Z3$-5i_K;t<+(tyD@&esZDXBCM7I> z#Eq(>92*fLyQvC;$EbLO5=2i-ND%815TKL0vq`iy2__b6lCtZ2q1Fv?!BSEKu#&QRqccL8oKr6`ArJ zbH&)Fl}d5hYfKQ;rHc6;syG7?_cX!5pPg~Iz*=j|S{i^PUb1J-u-xEKy55>KW8r%2^R4(`;z4C$Rc9gD2^ujtIz6Y)(t03NT>^zmi$D)KAm{ z6VRJM6bO!WxuqcN%|X|UD_16gB_tO*c+>Qm3OHjBr(Y&PszA^<+Tz2ACSg%50t$Ab z0NOpcRL7AlbdV83sVE0z+YOV0eKgb!rfI%9AuOGzPAb}_&%B$^WtjYIHk+J!P{3KU zpg4Bj9$c;+vt#qcsLvArrif$J-wvaEc>BE*UjfZG(OLJDyc13IsfLD@;h)`mA(D zz*w-r+u*s)(z4)pT-u4uxl~Iyipmp2q+!Xx3X686Hyc2EwAiP*;8PpE1*Oe45V8YA z$&#}Y9EcT%3pFK)v20#g#vgIXm;6e~3D$XQvks)|5Tlu@4@om{Vm|bR0XvA1&1;*c z+E+9v5|r9Ss>2bv_m#NzxiW|V~P*9y{+g}Y=V=36qEQbZByU~8wi@gvS*dN+C)fj4QO+R}vw zyi65o1oe|BNxGs6B&66Ukur*pw76ylBP7IePc=)#T%cX-!$l*@DZ22|B(qLQ@6VNVP6K4nXoe^+^_ zaBx$+6zuNs1VDfovg=7z-ti)T@e9tv&?zZ(RViVngpILC-_YBN)}Yy3a55Jh-Zm3- zg3dHeXw+I|s?iSuOH&+hw9|B&)wNde^iG`lw21lI@s=LDWMLG$`FGY%FyX1WSM{Rd zbkiXQlfGB^Ze#f;q^Jf6^POPs$o!yN8KU$Kx?PqfEafU-NvT(M?wsrk(+{ipKc9y_8O!lJi$W1@3)0E$| z7W`siC3N>b28dj+#Vyck^Aht`>d6Itj8p7>?L}bhV-UgSDwQ*;ip;cvR>yK^#nI|d5>wKVBa8Yk9yGsZkDiijn>i@bus`0R%y0x*Rlg30G;oex zpSyb?VisOVQfNC-Fw`vKBvkX%3K*W@wSE!D>re<={NO~GtBY z?rGmZ+r8$GM#B?ATLW*{*WD9cdP2h~EG0Af*_)m7t~GWtqNxw4lFC!F*&s~9 z<($y2_2Vr=uOAsD8R7fJI{p69kdyGOKdWdQ0@Y}kX!F`0w6F_=1uC={=kX=K+=W+q z=9{p?Du$UPbGbEq?DrAgFu#^K@WErI>Q|stz1ezVL=+=!9T_&?i!}x&&3H*pEM*L0 zKV~*hX@HF2s~?;Hl6V`|-e5U*J-+eo;u4#)-kX6^n^s>;5#-AB%h!gPbc;Rl1nwM_ z86C%`z8eKN5iy>zmg}0W05A&s2S?Fl)IB1}E@9EhsI)?AX_?^fP}vSg9(3A%3w$FNR_rRZpn=q!I{)Yym0EvAE{ZMibp)b1n1 zk-w_<%R9EE1~#G!L|;m&W}L~FXVg;S&-xnScoTZpi97d|SXp6V)i%+#b(i+JH2%-p zGP#K20JSjI)^k((Sk?&&Eq)-u{QHV=5!@FH9iYa&Lhkrt>w&}=Gj_3bgJc#XkLWIEb8a;3)mx&;W|-(}nBY zOASsa(LuZm6>9lp`F@a0+#L-TFn~v&5q`-+qWbf`HY<-ex2eL-3JI3z0n6rw34c0M zFPc|H?eVzjnFc%MZcChegbhz9iN8}ySrmz}&7en=VZj`yGi$?c$M=!mAt!@mjmxa$ z$rE|_-5Tch)wMRWvENFtbzc?|MS(aM2gqyJ<4R8#_HvS6jB5`hngZ7a2M6j`l0?o! zPhb+9-PdnnM-PFyj@`B%YB+pD8?Zi0xRjQXjev(@)rwPh=Z2(CQbA6aAV*1K5)tLm zOq()fCN+*Ro%|$do^4#KW5PNwyRg}EL35zP8A2@$vickh@sc#ERUO1S--9PxJzIOw z)u}S8dj6?LSHtWQ&AJ1*1cktkRZxJJLpA^=6O$5BoLl1yYZ{yn^zZEZ3W23U#l5Ua*V|6xej#G?6M=8>|oLZY;$XarNfi3vRDAK)L(P1mvR45 ze0*xgy1F=Anz<`b2XM1)vg>Zor`Lq=!avnAr!AH+t}#5|_Lg)6fC2cnF|@ITTT->& zG*MDKQ8OH7k?eBcWZvvbge91JFVh?@<0CkGqeciR3j$xD<6rxFEmzhsV#bO#f(M1E zM?r%^4_BGkXw>oETTHM!oJl*{>f)+FpBhf&iCyTPRpuIW5Kf4uji=>n($GdIDzyun zDn?V)S9(v=diT&88+Xi4enEoAX=caPDDo6(>Zrh8ZTi`SvJ<*@5{L#3W&qnVJzMPx zRjHH(?VT=&^ptU(aD0hiDZz{g!E)P9V5!qW;BX2$<{}(w7si*EsQr)rlTiFo3&2E2f)1#b|nBHP39Wpe6-ez)-wFaT_OlXu#dZA$pS$&4|2vDfckOHP^B}YmF9=&lTYbYGI|b*esM!&EAYW&Zj9;wXwKWk^LR>i`eGP zr6-Sc8wR~@nf+N%KmVr731{T_N^gCoL%ye=Nxo}Dn24Rc?T_dwURs+=eD-1oeHvo3(U#0mTQ`WD*+x8;6oaE-g|z|g%Pkj9^dW(bPF*I{ur4;?~m!j)R9hEiAhd96)jV_xQ1 zOXXr>vGgyjjw`0fgmLD2IN@S`mZULP)ytV%pcm=63g@mnZsP!cmDOIQ<@K-A^G?ol zOES8rQ|i~*3mL&>)oJKfSE5W%Kk_3KEx$fQu^{TyW)kTFH|fcj$wcH3#yg^OgV!Hk z3P7UL@=$~QeNU?Xe11=i!g|5_32?sI;TJGsM`vzz;#8376^U6uLg=4}*!+~!Mpjfi zO6-K_2#)3g&v=HnzgR$#6H0` z)DBYKpR(-&pdd}PYYqx{DCP1pO-X$L?%@81r;KDJBTt#pE$H$Rsg@^NiBf9RqtLx$ z%hMnfuRBx+F{qRcGDD-%?f_!pGRoczH&1bVqO#2!FG@{ae2lu%*xmvyZNJ$0`Tzg` o000000000000000000IF3=|(G000010Bmn9V{&F!SHfpnLMbPP!a5s(%Hq~&~n z!FO|>=e*bNSQNE=EvK zOnqJh*-SlOKUpeM6~3TB2>aMi6-oXTC1ckVU`d_2#dBN9_y%T8L7Q-Ntn+= zUMwdkx-(Xql7N2}dgc`Ij<^w|ovOGLg4Gh#Vw6fJM34L`(FzNl4RfVBe~#k9{~3WI z&5|;8_to{Zr0xj|EkWL4HGSZSZLKJi%+b~MW~VwAE0Dzw!LEAOLZ6@t1nL9_LGv8L z&BA-&oi^M}xK5!4k`;Lk7zaK;-}hdhn=D(9Sm%1)>jX@6akUB#bJ9FzN?KuyeOPVH z+Mfb`k4LW<)MU4LibYAVjI}ZI)0!&_-W~=B%XyXhE6-5~3NNP;bc@h&T31C9l2F1O z_l)i~*`Y-7P$3|6 z=|{CFlh$}Nv$jh3sH*hgtX~;1ba$xtqy>+*fHNmxS@mc#j|5(1O=6a&T}auT4^37>2U~zynA0t8-+P&9Nl>{M)x*G#UST6rCP@hxg36pT?~>$G|ai6bVIx5ggN7-p>?mYNa!|Ipht=# z77~OM6X~7y?6jMniy4W9Sy`~Be`2Xqr11_{sp&(wcFVN&k85al_vrH%ctE9!AD?V-b}w=Dofv$_M+0TU2kX@ zbBa?>qe-zg+!Lr{Jye7h@c~(S1k;+W34WOFm8IG|9$K#A zW|*j~5EL}imuph)gWYa89>!k7DOJ}FHr*}-V)l9BZppI(? z7*~K5z|qEwS3-vd)Ti(kZR4x{36Yk=Bu{Cj2{Lb?$kL7qfEmK-1UNt&5~%%Xw1P)GB*kNoep|> z2?9PB5-j%ut&0VLo$mrG&Yn5wzmZ0JiGP6SHT zBSIxgK|rB_BxTC2ZlTcpVCtB?zR}by@G(DIaj=AbdKe!M(Yz%jFmtivM1v?<_>oPN z+7DUvdCDU$0c+Z z8Z^BC4bkNaBIM_sC-aZn(1Ug#e4qFu&>j7%B*egBV#sU4;gza;*|JAfW%^6+yU93) zH+_^PIluN(8!iKfdfun9>@LF`8*c2P>yj>olLYiYR~rc_w@pz7Ai~{h^4=1})xqPq zWxFx1IO%xfZ$$7WwynRT~Cb&Rl_B1q0tx zuwETlwCiY08jN5kVUqNqJQCLj$~f41#8M*ApMQ_|-aX+ikpkiQ$&IcM50)*n?4AyD z-v#_wn?^dlcd}8u`pNIBiA#N?7j`wTExxuX48}%pLN50N5(Cgn@>uLE`YF`>PiZNs zI1GW|l+xeU=pBmdgSJH?7c4@RXc;MAEq3-Ias{rR@o{k>nBdHF-mADGLm_CFjIFhKojH7w4B^fBQ z%2rZzRrTgTjDtJazk-J>Cqel#nKzkllo6k%mNo2y{5khu{IWIWz#UAIchdFiBgvAT z<-!qrX>B@6`&Tha8)Y@_&jl+zBNJ9_Fo4qQe{njrv!SrZn>ey2idNyEAzW$ef~7*O zhBg0ZqetaM+Vdy$_YYRu@}tHXnOb&P)IK*-a$7mIacgl*i$KxPAq2H~TkpBbEY9Ge zZ(omjU^Z@_?DxXnAQTH_r0J7SX>HtJz5V{%pK3bXCNU&l(jp8McyAc=7Vo7i+Z>H7ULF9K6@uY_=9`#hrb}BP-XpB4;aV0YCUm+e19_&wjHjFx zd%R4!oj`5XvxhH1MLP}Y)SdPVDY5erocE1eCkUABFY023>!bH$XCJDo{~0aqx#DEZ z(C@E%f`(id9}hl#7R%#5BRkGHHD~uP`<9JuQ(@ub4z>|(7q$}1+Irg0h-Onby_0xY zmPuq)7APF>l=5I(US|P8_l4&QfcJkXQYzE|hBg7@H4qT?DMwuC>eppKXc&i$C8035 z$7J{=rn2uic6_D|z3M+e8TA_^Rqo;hpYWhpUmIPT?D}{5sJZ;Iv?ez1-D~}&j8lOL z`wh+HYUqg9qvTL@a6rHgmEqt6F3}A9i|0@6_%;xTMAL5Ag6vBK5~9+p={x@K0ZaWg zGql^6OGnY}AEu7)!nkf+X_*w(0+&OweX0~h)9#{YI@3bW27;we?J3x~9L)0u(}c#9v^E=#e*;`- zxfSnwjYfsjnO^#Fdm}U6!2bSK=-Gp3t?=8SIze#aC8#FK*|ko+szUU(&aip^W6@f&oqNNJ!nSG2>^&AY827C8b-tvT1M=;n z|MQ{Eq>q`qyJ!q4_zp69mhjEn)ukPsYO<3p^bh#wkTW*C71q+vv)Hi` z_z`vXb2EL&q`1($KTyIu^@M>8m!Q@!v2$|!;B<-!TP%-rSj;r?^A}oQ|K?VYvXXWD z$*0m|8Cq&-`MC{ePCt@am22h@m;0g(gXUAsgR~-LEE08Y9ggBWUczPp4v<+r`pCX0 zJ1~6yFA?CPK+Rek=b$~scJDFF<^lDM67Dt04YBeSiDw2!LAxZ9TWW5y;raKxs-{#p1uN-^+looo z`}r+-k+?=95n%b|rldIPMm0VV_Y=EZtKE+f3&b?TWsaFvOi=}Z;Ndfl-cuxyI$ROm z;!&D`DE%2E9y3jLg3O)_RN+vv+#OTT8Y8LKu}&=O+MOhN1g>9?%j`F3c3;p6g5qNF z>B2_61;RqYEWiokC{wxoBIXQ_G7L`^Dtk2m$rp>3fdT*ayWf9|maw>rj$lb_oNwG2 zHurmx2k$nVW(}qwrbm$6lAe+SH{Q%OKq7t&FJzg6=~*Df)B+8kwqI))-UJI<@2`7r zmQJgnyb348?;Z*q(!seYm$(6k!WP*Dzk}#43G&ySwhbmu{f?-*%%`+R^J>gD0ick4 zV-8y!ghL7b^HdgDW3mj@Y{@+Ee*1dwmZ=!{^y9CYZ9{l-`SO(I*M5(953GU8)O!a# zErbuN=DJH2%=s69f1V&Uk!rxxaA(&fxa@TPR-*y(zTyS3^l7S;Upa1)oA~V5a+0zP znt~gmwP^$3u;lY4OwgKlCnQs&bf}uP42!v!Y&DWKJvfFjn@>Fuep%-R3%yT$Uh`te*2P=uSA~`+in^BT@tGYL?eGs|Z4<@2IBkDbc;)stUMhC*Q z&H49+S>Dwwnw`&V62Jl0Y$}!oz0P;PyV?px)m{^CHDDwQ@e3zEqzY~nVhG8|etjf} z7FSo3r8iAHtwf#2M(^%^wo%fCqfsqOZis$@ux4?`X8;UR)$M0@UxDDIzt=1p`pC;4hZT8$x>wW@xo;_B`7$@0J#yAU*{t3H zIi!x9QJ~rm+ns35WIUL(uAC+WXMb;#TEwGK$T!>@=t}&afj=i!V?O9cG+?3b8)(qU zTKtJ-RLRPba!&WcS`vi_VA>^lZ42`$c`Uu{y;m(c4MI@PNHICmmvx}rn+IRur!A1tja{P(U6yxg%xtZgj$74;=2r{}|{+|Wc+0cFN_32I&B zn2ikWwW7LM)zk$6ez-U z(5p#eCwH_fkZ3Lz)CRrnll!EvaZ)pL1b<|dgdPQG9+3sTkYOhmFFa}PyCQC-8QIaP z+Utx-zQES?2u3DmSqeL6x(VoYSIhXYD|VSGh+~{JqGy%hm$M7b$n*>D>J(Qkg!9{CRLXQq z4>1}c_>XejcLTQ%K96Fqyvh~A%A}$<2{b2JZd_y^(lURX#hktuacy=TbP?JqBO7Vb z7QjXao|Th2y#0b5o@1A&^^@|jRy&3XqGqla->Oz48aY!z`&lssYqH*iD3m+cN#{Fs z01^2Pm-&zrqdV{WcANl#3-dYsHz;`rb|lwNME1_aZ)qNo<9zY&Im))a3( z#NbfsbbzF{iD7)0`p{Hfqb6Vw3&}e}CVdQILaBrK?kIs8YTxo|kJ!v93aTzz0E^?TI$uze=&LBL>k`0;jw^r)LP# zbsKIod!4_urhW?O1on>wgX$_6=}aAP$WqHqmU?o_H5G14D8Y9kjjRI-R2*2GE}Kqr zP`0i$O;-88xVf1ADT|hTwnL@*cJ{yW`bmJWj{!^{)4cZy5MimtMhPsEz?IG%l@{M?peF1i+R87GOJv>)6 zHW1RL%0Bn#dtjRYr466Fb#e289@XU>@O4#U>F+z_1onp467ctAd{j?D#CSe;_~)UinQCQSHMVnDslv z#KNH?6wxA14K!?fm%xq=-&ZTuhm3ZjG6g_NZJ40Tc-E4tm1!U~@wXH)M*PqK7sfJr zq(~8{?rBW)<9*J6s~WIsq*Ab6jt@d91erQe8|#f^KY*EQ_+L?(*hNf5ICY`bHR7&E zT10m3{EVPg0ds!UYX1Z`unmMNR)#1A?QsfIIWe#65f1^=Mn`JaswMKrr0Y3U2BOpg zO}f|R88=ZvF|f%8{S6XUsrZ$}aSattN(l%YOxHE*Q1be02+N#6Ll*Zl-uLg~o-ZPV zPPX<(E_nd|Vhh`F$fXkZjkU_en%_F@9eG+#q&&Yx=FwM{0Ieh$0H2LWfrV+>7t;9= z{6m_WN$sp8#|xoVWE&{|3+_L;lW69uo%a_ASCY2(spcrW1otL1;5wh+wD=T}%=3Nx zpx`s0^b|0(ZW9xB<{hwuiVMj#FFk7$2wnt;c4Zhahn4FH$D5VO&}fV) z7E~kbOK`_Rh`P6;P6=P#%Q#I-E4t_yz%f1n?wFU<`DK*x$ur#D34DY@981QAiYHC< z%S>5#IyDJ#-l!`0?uNh@GwIKQi-aZ;T{>8J6A#3P82H(vOxFpKndA_*9zoW}vv_A5 zzQ&J^9K32x)fxMQak@Hf34ZHQc$hdkhCA`K_}$bl3xYMi>K@t5tY^H?gS(oh zY9p_!7-Gi6O2d%H@Psce@$u^ZaqSsj(w#E5C05Xa_3y=qnS-gXE*es5)z}&u?X~mHT##q*U9M-aveK z+rM2sy6b$|GTZWKC^hOLiuwA!VbU(vO1$3*sLMl;tJ;In6~7KGiW}5V7=cQyy|PM!Yfd(q#OeDg@*X|J8#R4{b|RMWac3@rb#o8A%ev5)S82wnYYnhwj%{(^}{N zf*q&R%tkU97*h{(mY(IeA=3EX{Byjb8Zv&e&S?Z)v;N=NMN4C;e;2b`it~y?FJ|R% zHSnJP`A@#cj+2Vivk?iQ@IM~h3NK%Lqi+jzKpN{-IS|>%IK3|N6~*$7yOea5W1O(^ zVI&=&6!@{}>lGE~l~3nUyK3L#Q>u&Yg!=~wOi{V1ePPJ_rIVDvx6QBMly5>Uij8N! zjar_$@8s1)ugWiSRSII5LGkJn{wWtCUaU`}pj5&#W|)I`^cIgk_h-}sXvJjy;u#jh z?F5A89c6IQ%BwP)8%)`0nslGjQ$A^_tt>JZEYscj{;l=ID~0n`iH*aCIJfn~Yl^cB2o+7dGhGR$MkvYzHYv5|+zYy7fo< zpRf&V(B{K6cIGtA&7PP^;7+GW2S;-C2C(OKkX$Rm8r<7OaHBk0kLdBc`5Oi^7NoU1 z75<0LnsLRAmi#>)82R=1c>qZ5)V>+AFCB2ud=deYUz56MjV~-Wb zZym(3#%9ZpRHfB<+iVUgrb(IR*yz*^qa?ef{W!0IxzgU?WH=reaHG|Wy(hQaZEeW0 zeN6tS|IY?UG59&g(S=mx<~x0Os1o4?j6hmi>o~+j6tAqTA__}MahFoiwcF8$Lh_&a z-ygeGqnr86LCUAy=A~QIyFm;6+x|x^ zYt<|Q4F?6>dC7>d?4XVo^#K6!IX4?FlwC(U*}>VW@=1nt))fnz6I#E{ETPQBt&WG7 zAy`e+v^lzFk`s3@Uf6vN!)j)xdWg&Z;LZB-%^S!Rwp)n7=cl!fJ*+2>ajpumxFP;r zlT9Jtfi4#S+TCb+-ZMm|{>7VH$k~Veo!1-htH6~-Xk4!D)>Clq_#g$2k*q8d4~^|O z5s9j^PNmLzdE*61MgLNme;>*i7vp<-?m(u8EbXD`@a7?2Q{`K*X@Lu~F!D)5YW{bjsS@IKMOgA>tz zbKs{x=kc_gX7&t@m^g?5@$NT9bojByAKweex}d9r5{jNaA4-3l0t9RZ&aRrXliHw= z)N(7Ui)`kNGX!Gx&3BE^ERe#@S1fp;l3_ysfVaMLrQk}RXgG1zA?=7*KEQO;R!JZU z6g@4)DN3A?J<|F_gP$Dx7pDB#Z+nwV+1t8X&b-x&O+7bY0zG-kT>s!qFN;Fra!H|2 z-Siy`{n^;COvZwImh4)ns_|Gz5<%dcsC2|A@1eTOb;YjmAGh{8sh)9+1%~Z&k;|d^B2S)FZXFg+%0Xs! z(d#1Ro*uHqPapo3qep@0+C9lUG3$RsFAmIa=FCydl%j9YS(c4eMOIe>wpFx9FenH7 zb0B2Y{3Y*kp7H6mLgtE+RMEbY+@t9l40R!`@GLwR684;jY@-2%JIzLKmheanXWnQI zY~C{>^IAYzz_yl0YWl$D)CxzU)zsn|-+Ug8x~zxA^KvUV@G|3DrRtN?jUz^DI?tU; z3Fh(1JU6L)%8@^#ndD3_-+67ga^Papa&<|1>hxDnV>X)L()`n_VOWC7mRzCSt^a=) zceR9whv$2=*(NFE-i#hb#@*Hvp-(g#fULk!N6ZQrD=uTZL1lTo;B<@f^=);5te|=5 zp24cl-7;)hx1rK4{5tX7b1UnaM2;o(eE}9jiKY9T#~rE`8O0(aF-n@!k{)bf(lji& zTk+2=cRY7;g-9gUK`H)Tg!mXlSrg#%?=(UKIs1P(N0C#z-|t%? zAun%##Mv6wrL#~8r%q24P%0aHCLf+Y4F7;yeDOt8i5`x2i4z1ZQhoP=Hdeo-5wsjC zr+0BC_gEW+Mqi8f`L!V0h=Ti?GmV$^UNlN{XCIlhYPc4JRCRs~-T;Lay0WMX*VaFd z*JVj;4j zu6p6bzG?%lzNQBXBZ4~xSL(kVWY?}oXkFTI?Ho1fc>OP79&-!-ZQW53oE>x;?!9l4 zP}P5Gg#ypb5d4$MLc}IbQJQlalyWYNlJcE<=OL>r~H^n`fR?)FnEE8umyr*jj%OO5uG-hSuO(8#=uhj-aS8Y50 zU>>dD!=^m0%d3AW6^r-taY;S;S2rpQTaXbkr>Q9ZF%nF34uhPKMbx4#hTUyh4G_0f8J}%aty8!hO9pNC>3%f z>`wjl3uRzrdQWccKsyG#Zf_hNaKbKD2C?B4f|C6H9%Z?!rm>IXUg;S>(wl5vK;HK1ZSLV$#8S z4FT*|fU^>y?S~=kkWA}1^;3$2Dvd}+h>D4JOp{8bXxLOK%{Tc(tnnH{q9E=7d(C-h zFT^)0Q5>sn-1gq$o;PE=(!@kzoQ{}wbXxv?_n| zITD9LvlS$@MGWJ^)PW}P>emDOnMpqCG3sDQAKIHqsi3y%=8oJ2o?%S$EhW{G#K>2< z!(vl0XnmZ*%3qLf6Iz-TdP*fr;@Mf&5@ zqE&mF*5xqNl=RiN4bU?Z0IDu!pf$3^Ax$bVTBn8}c)LRdz6ff^G9r%5Br$t9D8h^wv-a*S5oY9vOol6Prje=G2 zHcWp{k35lZ(o4aQtHG1)^qxa8APWLTjPCA?MG+V7tawm6HG0JS;9w~vCQXj}h`?_C zy6IO?0IN;{z$kH`Or*RAvNU56{WDok(l9^#r{J`9utc&hr>s(k9T)ntY8GcB3e`td ziD_6y)B-ep*)k4EK)>o=65pK6tAw8fX#GjV#f1??YmxrYilak8AfL=sfT=OD0lr=; z^YBF|c9mA1XxlZ!+mlw`M7PUr`!bhfajrx1(3r z;jV?5hP7{>hSDf;aeP;A`Rc4||W{uA}@_$0UlR zo$ulM2b=+LXqsw48b6$qO`+>t<{j?M5B!q@lG_LEZbj+(m87++EEm=?kO(u(+GsjjXBUc!NP zg(Lk1TbX&|_Qm_@`Pssa)(DYlWDwR) zL6*m}7zZ4_x-WL@yejn-se6RcMw-pBK5OB4nEiaa50}Au+c8!69aN5Uf|cH2w+tqh zGhXQaU1fcRzQY5Wk~)-PpSC5jj2@tKFGkE1K((5oJh7xa z5yQ#smggCRpve~^Z|`db{rna^@mo041r|TTbFW68eVbT=^u9#XTzzwX`~F(7dt3jV za`WO_h!=0mkE=&l&7n=>O}E-2{dS_r@1JVNt)tAvd+Y&PJOo+Fofz#gYta1YKAkwu zY&SO!l%h$Y0crVs!`$UIn$obV?xt#-35LK#R@i+$l=i{Y$OrpnQ(x5-?F7YSzGCZRdjiEh)+fbSV!WF-H}BNrEWCft>N?FyD}% zy-EujQ%%$WyUAqZ!8Ce?q=U@GXW1=?6uu|_46mrFw9k8oWP@~l;OMx(&kb*na6gY6TDPhdn@+DHEo^(-KL9|Y(oNM1ecCV0_*lLzemVOb zLn={hJd-W7lC(X0k9s;~evzvp5d9R2N4M~)OrUsy4z-*@A@hh{CgRakJmMVAppL2@ znf8lkKn%AHH7NTqm6JwRnaMgdtL*{G$Aawy4neD6o+dNojx~z zgJA}OG}b4=|6Z}AUU8!*%*O!2z8^jJ0;ud;HUjsgeD@m;P^Dxm7r$L_oZK7VT*_v* z6i)7EjR-c&ldoWEuw?ODGaq^MRZ(Xy)9^)6J9oJUZ_Zjhc2yW`q*2)jixthXTcN$b zJC)6}!HVX$@Mm9TwcjYAc63D;XM`;osT_?nNa&=Vrx) zvS~^s*gBY(JxK$nov^Supfzhu5{jJMU_8VW!AhK(<>57>jJU1A+zt;6tAUB~Av)u; z=MC|<$_#SZ)>ksVpq=&l=UqKy(qFupxy(J--&yU^?o!kEZ7-z25t4;j z;-RhuCp1oZ+P=s^J9{)YKL1}L)9(Xmg93a{_ie~zznKkG{BSh7RHTc5AxLsbgL#-Q zo4a@9EA~?3_v)uZvrG8SnYVVfRPBLpk#4wBLS|fwfG{~Cw-Y#GG#7!lKi6wsRMWhE z3U|543~n?&wZQU7x`LMw0~IbyO4uT2D9;)LdsLtSoRfZ2&JQn zj*2>2*&^Z)POtb!&%8oSdz8e~F-|-Bt#1OH5hu#m@kfgI7W(`?hxBW~4$cY73fQQ3 z0AV@5s?eg?$L8O^(-RnPZbD`U80NgEKaB=5)iai!Ys-b~H)-(!ZLewgh*xc`bab`Z zY`XMpa+6!Q-91~s)y*@dHq_2fP3i_Q>Sq~M|L&7Ztf7c$`>Q6i6!-<)VkDP6i|_r5 zlO`2kR0hm0F$6=73`nQW$)>+w4N^8335+N3n-P@?9p*g%J6@OW2>)?useacviZMq& zdz}UO7Q)b%#8oMr-lNaBvSnk;NY5pG=z0MC4gZ^92p*Z8IHCBI+$3_@Kb!B)lf`u|g#3p*3uh`j18u#_{zmiwsAleppQg_UnpAieavm2Q++@&?sKub4*gaUsCnBB`fnHU zNc5)Os`YN%Ga$1YLFs_z#z!hTzlNkzJEE1Of=cfk9@XmfhlTSJb7#P1>W?zzCxsh3 zjHVQxJI6xIqvKg_plsqHoWWRfs*CTuDn!w5A%3Z%FePd7ySo7^bwE+h$<+WXR%ufv zPv#c>-^E=aA>!u#34OZ$9ddU{8zc2@^NG+a0v(k!S5H&S92YA(b*olsX*Bm_lj6;7 zMech+lb~JQ70tUP*pgOlnM=rZ+{fo8mNSV=GphSsEc!w-*BQ4vG<8z)1qNc2WQ9d- z*xa~La6*UtpIgX*yEZ!h_|xaATcX}cg+Me)RWDjfK(@9Vw+=CDwgD8EB>wKPCs5f)(FUK%) zVrTxo2@?47;b*j!UUdpHrEt>ZST2R4fqTNi$-}@;sOgY5qFnS~xLusUe}Qt|15#J< zfm+b4zl6@wfy`}n7#eXc-tE(fXeJ8iZb&m&(tc4b)S7-|Qm^Ek6H?av*>?jFmTOO^ z%3EFgGMMwgD&d1PEjMbBD(il%Y+?Pp?tjjd_r)Z;RrO4SUp-YI2RLnvT5{p_)E@pN zCy`NTTSFldS+AF_CCB4dOZv+9Y9(KGy<_Ad=OWaCF-pN+KV78W4&B~&7_te2cJ!Tl z>=y`;_P5sv$8}fes(05vkn0oN$vIK|Z6&>SIz(^Rh;Cu8Ou_4U33i*Alln1nnD5L6 zItlUIGmI_oIWb3Z&Po;hlf+EKDn(wDdE%dVE{u{m&%ON+-lGP59pWhfIXYs?#&_hB zs8eO`fdsv!?dmhq!FJxV3yfD_8C^TJ=AQlB!#g~aa#h)O)=+x?n>!;l>D`*w=H?m6 zxZ?EVo#8-omkVAcTkf&ZA$j{d$VY@T9V{~v1N5MZ^MyYHi>e*+XX{s^*~69ahW6vY zP;Zk|>@kZz+PTf%^QuHixcN8x;pcbM9ts$_`p1?f!WVUi;wvBL^gO3CUK{@0dlQ!N zq61tCia?@~RU2Mtr)|IBp-SGxI;lJw$D1LVn;9QWB{>ku%`3gV-2^x;bJMPLiJcgx zavTTl@%vd>`jPDksb{!RMD;EsJR36IgQB2Mm;*giWk#ok&I^`|zqn6ZS!i$|{^Pse zB4;-DMex^}l^l$?z5+3fCbL3wKP+*4xi$w5!FLN^c88psmnTl8tdz|K6HlJ|KpM?& zf?kn{MEseF$j+g-tSKy&Gm+lPd+)bZ&Uo%hV|L&b6H5tyORVWx9&xxXMwRCq>zDQ{ zk8?w8;sg|UM!XpstrNVDvvuP@^xW+G=*+l1?IasNbA^uWM}m0w>Oxz6*kX?E1>QTp z0)t}npS~UZw_#M@4ZrCX6E>hF3P}~WB3NW2dz9V}vwOCEka`a2Y_e?13zZBO`Ukl6 zo+;ug^NMgLEdZNZpi24gt{N}T@!KvtJ(II2f z-I9 zkSz*bXz6NIarj`CT=t9sYb*>;kd$20Z*DYmk)`R2K!R*wop|uk+X5i-+C;ICn>R|M zSD>RWmahEy2p<$lY0BUvgWxs+E*KaF?%7YWl+ix6)s5F0PrUn}B1$nkx@j7DNZMVB z_zub!7_M`%Ya`nK=QNMN#1EZ(=pL+IpCUYd&G)hv?Yu752w>(YI?aj2EEZ?byQi%U z&Llo$FkoTiO(Z**txC=l=A<9zoBuc(t7FeN3T&$4(| zB@4E@gIp1yTE8ac%mYwgv9u>vOmFt6tpPQE}mk-~602ao#E&u=k literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_kex_verify_bundle/valid_structure b/soliton/fuzz/corpus/fuzz_kex_verify_bundle/valid_structure index 4575d83a1f7d6cda00c5481d28b81c5c5c5aa2dc..7e76b673a708c455335aaabbc6257c2a3e8f1b14 100644 GIT binary patch literal 4606 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­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 e=;p&hdkCkZ>jD+O##rHT{*ED*p%dH-S6= literal 2472 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 e=;p&hdkCkZ>jD+O##rHT{*ED*p%dH-S6= literal 2472 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 m6|-JCxKH(vT=dIzT5x*k< literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/2b208bc47a3b0546ab242c9d804a5a19165e59fe b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/2b208bc47a3b0546ab242c9d804a5a19165e59fe new file mode 100644 index 0000000000000000000000000000000000000000..9c84d530a53d7cddd723b8128b377c2a43a113d8 GIT binary patch literal 1803 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 J6yUKVwE&Ike#-y= literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/44f23709d3a8d9af97993ce7e73cf968c04ed870 b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/44f23709d3a8d9af97993ce7e73cf968c04ed870 new file mode 100644 index 0000000000000000000000000000000000000000..32291d944b97c297570c2642f94189ca7ff8de3a GIT binary patch literal 1796 zcmZQzU}s=tfB;580syKGLjC{$A6+?$yb>nZO#rMS02mk;Sq{8Ei((B52h&Pa5d!w_ zCSd<6umeh*qik=dNZ0wVU$@g~hwb{~I_3?rhwP#bGcd}k|1b4Yw>fWM#(dVtRAr&; zy{1iBjzw1%pFQFo>@b^QkD7|V_}0G7eR*Do-*hsp2%Eg@MAWq&tAAfgL}#Yx_#}FPEks%JEur=%An})3m8Zab{6PlNYv&23?zD@^^K-Mn>J-QpIDZtRMUA z5MyoHvC?(%YnF}O62~2Rm$b}%CU{o-g-%;Rt%Gu9VC!^Q!?RC+NNG<$s$8zt&sL_r z%13R|)ZVGT8u$bXeUDAN@b#26ubxSRs`kc%M}Jt?-gP+^@bHmyt(=c=hYlOgETA?G8p@cPy%mHT`rKaluUH09_jRin!f*O;trdXx}y zr}Lh`e5t-HKLd+JK2uK0u=e^(NBf;^-+uVJk&GwvLRQ(%uP@I%J9()pE%t`9ROf_3 zUVj(MQ#YUg&t%ax zv-bt*vj4F4{bBpTIM9#TO<8l^{vTWaES+c+7N@egMy)fECukOnfJttuz9HlK=f+8= z9E)`XlFxKa`ysQG&xL(Wrpe+$)+ZrcOT)zcy1LIl(bp|HdT7n66$W|Y#e1fIP+yV5 z@nw3b{K3i(Qw{D3a%&&Kv6`CjK zS;X&bbS^gE#prCwyu#u6mFc?@`P|J8a#X6^xY(w&M(lp`xeU|jsT1bS3pBePl)gZG zU({pn37zIM=cpQ39=JL!E}~V>s6g~@r9=O=;wz`D>X&CrCaNtj^uBa#=AQ*gUrx>c z^xAVy*mACqf!&`r@~cn#al+}Gp?J(AUys9^KR)hpu+p%(Q#r}-n9D++s0ii#qIu`6 z_piGm>I=UAG0r?3ojGZWtZPOK^X%C(r-{$=$TIjK(6vU{^~|BwFX#QV zFDvQHFtSa3qxmn&&m~PwW|C6N?RFX0y$u<;Z=yZYFS=`e@Oc%Ss&zy;him@5!>1H4 zbXi}P682pA%VP5XJDT4ZYt7QLS2t?(M~Ygvn!dec<)NApZ0g^s%;#t5bmdHKy48Us zZDYq2XZeFI3Sm3U1iW-LdiK0#P?k69|wv-b&1mP#_4 zU!3&>USKhSSfH{OhS?!f|Nk=p%OPM?y>L2bAnxn&7)wMMc1z38U|3!?Bl`h+=fxD= z2dr;;Ha+{%G*5f}q**IV**kkbFvpxvFy8?&5>7&kdel-;NeMH=gB2Jvrum zldBY}7$P~7Tk}r@)jV7>|7?Zd_Rd%V>lGeqO$W9l%qZk~5j>r_cpkblh$)_75wUGv mtgmURlc@8S$vk1!NO?d`9+3;s%4wubVF4+!J?AilF#-Vbp9>KH literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/4e4febc203227d20267fc5f6c678b14794167838 b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/4e4febc203227d20267fc5f6c678b14794167838 new file mode 100644 index 0000000000000000000000000000000000000000..db8eac67373ee14e5d18cd90d18a5cb2d985663b GIT binary patch literal 1796 zcmZQzU}s=tfB;580syKGLjC{$A6+?$yb>nZO#rMS02mk;Sq{8Ei((B52h&Pa5d!w_ zCSd<6umeh*qik=dNZ0wVU$@g~hwb{~I_3?rhwP#bGcd}k|1b4Yw>fWM#(dVtRAr&; zy{1iBjzw1%pFQFo>@b^QkD7|V_}0G7eR*Do-*hsp2%Eg@MAWq&tAAfgL}#Yx_#}FPEks%JEur=%An})3m8Zab{6PlNYv&23?zD@^^K-Mn>J-QpIDZtRMUA z5MyoHvC?(%YnF}O62~2Rm$b}%CU{o-g-%;Rt%Gu9pu==o!?RC+NNG<$s$8zt&sL_r z%13R|)ZVGT8u$bXeUDAN@b#26ubxSRs`kc%M}Jt?-gP+^@bHmyt(=c=hYlOgETA?G8p@cPy%mHT`rKaluUH09_jRin!f*O;trdXx}y zr}Lh`e5t-HKLd+JK2uK0u=e^(NBf;^-+uVJk&GwvLRQ(%uP@I%J9()pE%t`9ROf_3 zUVj(MQ#YUg&t%ax zv-bt*vj4F4{bBpTIM9#TO<8l^{vTWaES+c+7N@egMy)fECukOnfJttuz9HlK=f+8= z9E)`XlFxKa`ysQG&xL(Wrpe+$)+ZrcOT)zcy1LIl(bp|HdT7n66$W|Y#e1fIP+yV5 z@nw3b{K3i(Qw{D3a%&&Kv6`CjK zS;X&bbS^gE#prCwyu#u6mFc?@`P|J8a#X6^xY(w&M(lp`xeU|jsT1bS3pBePl)gZG zU({pn37zIM=cpQ39=JL!E}~V>s6g~@r9=O=;wz`D>X&CrCaNtj^uBa#=AQ*gUrx>c z^xAVy*mACqf!&`r@~cn#al+}Gp?J(AUys9^KR)hpu+p%(Q#r}-n9D++s0ii#qIu`6 z_piGm>I=UAG0r?3ojGZWtZPOK^X%C(r-{$=$TIjK(6vU{^~|BwFX#QV zFDvQHFtSa3qxmn&&m~PwW|C6N?RFX0y$u<;Z=yZYFS=`e@Oc%Ss&zy;him@5!>1H4 zbXi}P682pA%VP5XJDT4ZYt7QLS2t?(M~Ygvn!dec<)NApZ0g^s%;#t5bmdHKy48Us zZDYq2XZeFI3Sm3U1iW-L81}qoP?k69|wv-b&1mP#_4 zU!3&>USKhSSfH{OhS?!f|Nk=p%OOZq8HoFOJjN1HhTYQgGZ>av&B%Vh-gz-a_W|ph zo=wkwG|khVKWWy=QufZ?56m&=6U=u&jD(ZWq8_zWR8qnW@n8kUj46Lq6<5AaE-Bt~ zR6RDwSXw`P*^z}!i>#{FK3izk)?@f|a@C=LT#;#O=eWz5vnFY73!YOk$;C>0)#NIL zDuzhT}(DN|TLifqq03}K7_P$mi( literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/5ebb3cd0d049b76db9146ec7870a8fce7b117291 b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/5ebb3cd0d049b76db9146ec7870a8fce7b117291 new file mode 100644 index 0000000000000000000000000000000000000000..dcabffc87b5070e4947ab2b3d077f838c805a2bb GIT binary patch literal 1803 zcmZQzU}tA!U|?7U#EgOj08kAA{Qv(ST{%J$$Wp=ty9t0*1OU*9EC=3yKKoH5>C}o( z&f9-pJN@-u@Cl{|&G%=Y4N|T7<<*+*>6)@ZFzfiGB9)0s{HLzSvN|!JJQ}x6y7`(C zm+_PJcTITq9^YpAr)p_oRHbNLvGb8mrkO2&ioQg1vx@KOePfY-bd07S>QvD>!+&Og(2f|AN)M zts*m6-|TsP!@MkPl1PN+`;W#_jV(782>oBFVHw={{06JSv)EnFm{V>zS>0wh->#6( zkz&{_EkA={dDV>U2ke~}Q*94D#qxaZCkX*}kf^=0K=p*5zw+lo>%BaIHOuUAM; z`XRks#?PJe@Zm@24ZGy{mP*VsGxIWJ)@RtY|6)a=W*eWn(X8doxkX7UKc)lYn)#3c zqXyfW4{gO}Gg2AjTUAp#*R9xmlu^MlO7W{5%On}L75lg{DorJJJa7)t4%wWh5K+_- zaPN5R{oguY9-HzXj|<*%&NY;c$wzms`1-EUsiH??l+y~O7jJOrh>%j6opX9egXS5* zJr(7jtmn)uf6+d}Zif-4Ft5Y1(~EX>b)Gr+pIK-}R$N)k+y&3IzV>LJnl5&5@j+AT zg;#!0$$suJ^CyQ|%!crj##w^ekCwFDE-;I?$gMRx5wUQ__U0Y8H;K$mw9dv)LS)~zqJn%Oo;TwdXCHDOOtvZ}iHCWfO)Y$9@BH}H!nrA|E3 z@3v;0horD+ztmx&t4^USPm6wi5S6}0aOw2GY3$vsCJsVThvlcSzR%tq^Kst$gz(wQ zXJ;#Ooq5r@!^Bzk#Obppv;Uc#-n3-3(w&~P1;;g?%o9A!`diI%qcu05rO{%arN$0@ zjy1bnOSMk~*z+wmW8L0!@lITHpmOAOr&5QhOHbAt%0!o>Zr3f|zbs>NNXPcjg=Qy{ zJ=RWKpt~!)tkN!D!BTE^c}7$@|LwKhkG=Motl8Q;HY5tS?Imd#?OtG5P-;&2Nmgrs>(M8#VePMXg&+-(IrvP|XN7_3u>X^D}h1 za;7%j>OhjVv15v}{J|E5upMRsUb-4RdtNiB%$#=m+4gms+zhMBuQK*IS|%Lc#uv0L zXY5N;%m8f8>vNG$8oBz+^xp(OKgK^QMvqS`PVJR{d#^|b~Gvf*|hA(ER|?x zXwg`l^#oo>GJ#m2vKNMVAyWVUGXTp$^=Us&IGr;Pk9p+l@p$vc$B#d5e*6zu=Jq&P zY1l|tPBJ{^vd||gLK(C4c+<1#*^j1qz|vznu=GF=Tc8od14u*=5xQ8ym4ShEBG6~b zU|*uw6bL?~$Y)?s0Tu0MDJj}e27jL@^WskFzp0rit%tad&HS?<>C374pI%!u P#2&JXI_x=zA&e0KhJGQ5 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/a2b2085fcf0bb1e3aae058d013c645cefa184477 b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/a2b2085fcf0bb1e3aae058d013c645cefa184477 new file mode 100644 index 0000000000000000000000000000000000000000..c067717110b805d51283dc577ed2140b9575de5b GIT binary patch literal 1809 zcmZQzU}tA!U|?7U#EgOj08kAA{Qv(ST{%J$$Wp=ty9t0*1OU*9EC=3yKKoH5>C}o( z&f9-pJN@-u@Cl{|&G%=Y4N|T7<<*+*>6)@ZFzfiGB9)0s{HLzSvN|!JJQ}x6y7`(C zm*JE3cTITq9^YpAr)p_oRHbNLvGb8mrkO2&ioQg1vx@KOePfY-bd07S>QvD>!+&Og(2f|AN)M zts*m6-|TsP!@MkPl1PN+`;W#_jV(782>oBFVHw={{06JSv)EnFm{V>zS>0wh->#6( zkz&{_EkA={dDV>U2ke~}Q*94D#qxaZCkX*}kf^=0K=p*5zw+lo>%BaIHOuUAM; z`XRks#?PJe@Zm@24ZGy{mP*VsGxIWJ)@RtY|6)a=W*eWn(X8doxkX7UKc*j2PRcoC zz^K8t=0jVt*^E@i_*T`_&UGs`A7xaqj8gn+$1+KVZN)yWj7n399S@vCv_m$hDMS=? z1l&6wd;ho2m&d03$K!&xoO2CjWAf2mE55!fbgJml80EA=>BSoyIwGW$X6KyV(V%%o za8E_~C+j&g%U`t5u-jq8Da`Az?DV2tU7cqR{%022krh`KGk3vrt*<@Wr>2V?Tzt^f zdf}DdQ?j3X%>2or7PBGzq;Zy@_M;^&w+qbTEpls(PDCu6vAuc6?M)(c6Rq>IqkOq* z9v%r1Te90xXUf+f|02?D|1W1g@j=VJz{y9n=1x?RUy|P~15d@x_TTR$gl&q>QzKP*z5}SzJ*A4t4N~sf% z^t-KD=OHO<+Anoj=&Dob%G07>A4H|E5nMVwa2k6ztBHe9)M5E)tnafo$9$akJ|TRz z^4ZzSTxVW%?l5tdJ#qT1$?Sh7r#CHGt#qd+ZNYKPC-Vdkv;J1I+-S|sXKA$9XQ{D6 zpJUA~*HY~h0rq^0%~-ehT)Yz(9jF|6-Ko@J>e7?-hBDD5soQmn_bV#SViobe2qdP0l_ ztS6)8rk-io9_aqlTv~ zaLvDW_>|&>F6+xu!k#OCSxo+aNAnwFtyy~Z>PC(JNKxxn)3=wbJXAA+P5nES`TPu> zuAHe&w>prdZS0uhEPt>?A#8`4fS0aD&z{!|Dl?~@eztv`CO5N@qF-s+y z8CoK+ediJAf9e27jL@^Wx4;Fev>uH8Z945ZAGpe-NGL=A literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/a54fcd4af3a9756925dfa779fb6d25c20bf0dacc b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/a54fcd4af3a9756925dfa779fb6d25c20bf0dacc new file mode 100644 index 0000000000000000000000000000000000000000..edaf6fde0c9de0c33933fe8e3e5e7873a1881472 GIT binary patch literal 1796 zcmZQzU}s=tfB;580syKGLjC{$A6+?$yb>nZO#rMS02mk;Sq{8Ei((B52h&Pa5d!w_ zCSd<6umeh*qik=dNZ0wVU$@g~hwb{~I_3?rhwP#bGcd}k|1b4Yw>fWM#(dVtRAr&; zy{1iBjzw1%pFQFo>@b^QkD7|V_}0G7eR*Do-*hsp2%Eg@MAWq&tAAfgL}#Yx_#}FPEks%JEur=%An})3m8Zab{6PlNYv&23?zD@^^K-Mn>J-QpIDZtRMUA z5MyoHvC?(%YnF}O62~2Rm$b}%CU{o-g-%;Rt%Gu9VC!^Q!?RC+NNG<$s$8zt&sL_r z%13R|)ZVGT8u$bXeUDAN@b#26ubxSRs`kc%M}Jt?-gP+^@bHmyt(=c=hYlOgETA?G8p@cPy%mHT`rKaluUH09_jRin!f*O;trdXx}y zr}Lh`e5t-HKLd+JK2uK0u=e^(NBf;^-+uVJk&GwvLRQ(%uP@I%J9()pE%t`9ROf_3 zUVj(MQ#YUg&t%ax zv-bt*vj4F4{bBpTIM9#TO<8l^{vTWaES+c+7N@egMy)fECukOnfJttuz9HlK=f+8= z9E)`XlFxKa`ysQG&xL(Wrpe+$)+ZrcOT)zcy1LIl(bp|HdT7n66$W|Y#e1fIP+yV5 z@nw3b{K3i(Qw{D3a%&&Kv6`CjK zS;X&bbS^gE#prCwyu#u6mFc?@`P|J8a#X6^xY(w&M(lp`xeU|jsT1bS3pBePl)gZG zU({pn37zIM=cpQ39=JL!E}~V>s6g~@r9=O=;wz`D>X&CrCaNtj^uBa#=AQ*gUrx>c z^xAVy*mACqf!&`r@~cn#al+}Gp?J(AUys9^KR)hpu+p%(Q#r}-n9D++s0ii#qIu`6 z_piGm>I=UAG0r?3ojGZWtZPOK^X%C(r-{$=$TIjK(6vU{^~|BwFX#QV zFDvQHFtSa3qxmn&&m~PwW|C6N?RFX0y$u<;Z=yZYFS=`e@Oc%Ss&zy;him@5!>1H4 zbXi}P682pA%VP5XJDT4ZYt7QLS2t?(M~Ygvn!dec<)NApZ0g^s%;#t5bmdHKy48Us zZDYq2XZeFI3Sm3U1iW-LdiK0#P?k69|wv-b&1mP#_4 zU!3&>USKhSSfH{OhS?!f|Nk=p%OOZq8HoFOJjN1HhTYQgGZ>av&B%Vh-gz-a_W|ph zo=wkwG|khVKWWy=QufZ?56m&=6U=u&jD(ZWq8_zWR8qnW@n8kUj46Lq6<5AaE-Bt~ zR6RDwSXw`P*^z}!i>#{FK3izk)?@f|a@C=LT#;#O=eWz5vnFY73!YOk$;C>0)#NIL zDuzhT}(DN|TLifqq03}K7_z8?zd literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/df700ef114d57ae1279256f09605805c37f137a4 b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/df700ef114d57ae1279256f09605805c37f137a4 new file mode 100644 index 0000000000000000000000000000000000000000..c83212b792095942be355cf7ce5d70d55a87021f GIT binary patch literal 2674 zcmZQzV4cXw00p}RVPGPRfkMO7;i8oYfZYVZDguCkfsy4viF1_g?G))c|Mly3I_oOj@QVjn_H@Q?3DFmpB-YXO*>Y)E`H6jv0LJ}Bkz)yxzB{p zioeilE2wo)t_*CQE^B!9=?^LG>5CUG4gNk+=Ea@Te^WD4S`TrB2|QwEZvJ98ImEQp zyg$r&F}JGM@5dZ1FIMj}Joo%i_@>#jXHFBJ=aFUbL7;1mvg?^ct6$Fh8LYsVG3Ae{ z;>y>_CB=J=s>kLSOY4U(JF>88kyX{&XA8~RdJLaVt~wNuD>7~E9CsOW)+Ehs!E-7m zxmanhnp~w&#SqDv+?szPsOI64`DZKqws*z~Sg-Ii{RjhdwMkz&c4c7c!Vjg<@K^Xx7quGblHE{`u?!}U>xYj?53R$P+Y+MZhFCRo{?t{d41_Q;x+t0?B8(ru~pv%ICtqCevhbA?uS6 zuBBmOeqG(?pXlor9X+&W)e3_=@!~zxKd7(B;rKE=RQ_P)hp7hl1i7^jdz}h5e6)k7 z;o;d8F6}lKt=zV(kx`4O|F&2)yRKnR8SPEDv0r78lWKZB!uo zx6+}1Tk(}sR`tuXB@@+_7kXbhHuKMdq%WuDe|qgXCu}*_$H4AS8~N3z{W#%t&QLt& zk*~+$%^x54I9O@e+^L*oc+6#?PgI2Re$l*h*8A685puY3q;_^uP2_@}G)G6Zs5|L> zK}#3scqF_G6F&U#SlxuOd5eyzG9OvnR@M7PJz_eC#J-(dhIVXtre&4j%xzWj0uDEy?zfL6UN4>9x)2?1C{JKD>{gx}Y z^rVnG1ui9;d0PcJp6p~-G)UbQooBeEF+FW|3)lCyR9WSNOE(8vSsZ=hvo}z)uI1Tp|_h?3V3c|IB8|?zz(~7Z+ZLo*fbOdT|`zO)r5(nQM1z z?s3yx_F+oj&Q(1g2b_-W%sp+zDycNNIJ)2{gKK(z=&D&gs;s9gkM4Q+HqrT$wSMv` z;rD_koHXaxybqr};|;voh}E#gLtxX~hRw1^wZMH~~TAak0tUMuh< TM}e^B#Iv#69dh>eW(xuUJ)5)* literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/f14581242f48b7f0f4c51c7f2be0b24783c410e8 b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/f14581242f48b7f0f4c51c7f2be0b24783c410e8 new file mode 100644 index 0000000000000000000000000000000000000000..0c40b90ac09826d4f1f561ecb276300f2c0a008d GIT binary patch literal 1809 zcmZQzU}tA!U|?7U#EgOj08kAA{Qv(ST{%J$$Wp=ty9t0*1OU*9EC=3yKKoH5>C}o( z&f9-pJN@-u@Cl{|&G%=Y4N|T7<<*+*>6)@ZFzfiGB9)0s{HLzSvN|!JJQ}x6y7`(C zm+_PJcTITq9^YpAr)p_oRHbNLvGb8mrkO2&ioQg1vx@KOePfY-bd07S>QvD>!+&Og(2f|AN)M zts*m6-|TsP!@MkPl1PN+`;W#_jV(782>oBFVHw={{06JSv)EnFm{V>zS>0wh->#6( zkz&{_EkA={dDV>U2ke~}Q*94D#qxaZCkX*}kf^=0K=p*5zw+lo>%BaIHOuUAM; z`XRks#?PJe@Zm@24ZGy{mP*VsGxIWJ)@RtY|6)a=W*eWn(X8doxkX7UKc*j2PRcoC zz^K8t=0jVt*^E@i_*T`_&UGs`A7xaqj8gn+$1+KVZN)yWj7n399S@vCv_m$hDMS=? z1l&6wd;ho2m&d03$K!&xoO2CjWAf2mE55!fbgJml80EA=>BSoyIwGW$X6KyV(V%%o za8E_~C+j&g%U`t5u-jq8Da`Az?DV2tU7cqR{%022krh`KGk3vrt*<@Wr>2V?Tzt^f zdf}DdQ?j3X%>2or7PBGzq;Zy@_M;^&w+qbTEpls(PDCu6vAuc6?M)(c6Rq>IqkOq* z9v%r1Te90xXUf+f|02?D|1W1g@j=VJz{y9n=1x?RUy|P~15d@x_TTR$gl&q>QzKP*z5}SzJ*A4t4N~sf% z^t-KD=OHO<+Anoj=&Dob%G07>A4H|E5nMVwa2k6ztBHe9)M5E)tnafo$9$akJ|TRz z^4ZzSTxVW%?l5tdJ#qT1$?Sh7r#CHGt#qd+ZNYKPC-Vdkv;J1I+-S|sXKA$9XQ{D6 zpJUA~*HY~h0rq^0%~-ehT)Yz(9jF|6-Ko@J>e7?-hBDD5soQmn_bV#SViobe2qdP0l_ ztS6)8rk-io9_aqlTv~ zaLvDW_>|&>F6+xu!k#OCSxo+aNAnwFtyy~Z>PC(JNKxxn)3=wbJXAA+P5nES`TPu> zuAHe&w>prdZS0uhEPt>?A#8`4fS0aD&z{!|Dl?~@eztv`CO5N@qF-s+y z8CoK+ediJAf9c S^xC2!_K;oFVb3`XVT=HIkSIm~ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/out_of_order_late b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/out_of_order_late index 4cf2121b636e3db6ad66eab3646b4ec8c8dbbf7a..a8661a3c7047a0dc604adbdf3341ee07b3579749 100644 GIT binary patch literal 2674 zcmZQzV4cXw00E4G1OQYWPD+UY*i8VeA^;c|7+DT*EatxX?2gv`qz~c~6HIp4NA?FO z6}|kQBN4r}#V&m4}CyQtLJER%$eqlN! z9oU)e_3>i&J(p>Dt})w#_Nh*q^NT}z^0HYKtP9wKh6H$Dp_uum=6g{OmZ4nZ~9qBuXb^C5eTsV$+JODQmpuu=9Dku;#-10Ib}&- z(iS?M5|~(ZoyF2HV`Yg@@5Kcji*K!q)8G>LUKhS+vq<o?<$P>{dI-9x9;0(b0%|Vo>rK?A^pJ2Gsz!>PA_3Fb@RwkTVeaZq4di0 ze8GS5g%H4-W-}MCCk>EZeb7bj|T4aZz1$CNWEn zr5*Ifz6+e0ex9XZmp|^{i_<{XV4W#T)f$ zoe9j}ee#Qp@r674xuqwZT^V#M&~~Dy?x~1f$q_UA)m&e0uYE9GW`oMvdRf3mWkQ{+XkOH7hU zVP%Yzv~WcCrZSt&OEoyxaGiaTRps``f-gnqR!h@&jbPRe5!EE0UD2o3wyt^_W|?p- zFX>3*m$JB+su`|QDev^XE?k&sn=Vm)`w6pMXW;ckJRY}}HZ<%yuc>y+=e&!RSi?V$tp&*C+06nwL@c=JU#e z$unA(R=4%dgqNPIAQq_XWk#Y|K!T%1+-MOuTEvYOaYMO?V*(XqPIK04RhDq)YF_A- NbiX2_DRS;%2LN|iy)OU& literal 2674 zcmZQzV4cXw00E4G1OQYWPD+UY*i8VeA^;c|7+DUezFgtF<*RH+kd#5Tm`s^rV+ym6 z;_+ok)vsn(Zd^Ide_E!^4hD7a(DKEP^rX|3R_w5jsq}xe;^gvAhvt=R=PPdvZL_!7 z5~4KO_VRNkZZTz_Q_gAAb{t}H^Rm_}Ueu#K*_>6R^5vT)Z?-S&eRgc4fQjCRjW2hV zGU-hC?8SBZ$&UI8gZ-!0EW1@BR^!bkJPXvT? z$_x2pde^>on5pBJ|NLNhs9A;#P3w{?Y8uD+TOmv#LowCmnkkS$kmz z`=jff_MV(YiR>F5uqU?#C_Y%gtWxFGI<-!0+p{eyEN&+*&M>&krQ+T!p&wL!I77jP zO(~{SHsltwYVfv0Gd29YJY^$~cKxXTd(CKiMqH_M!VYGe{nFLKX1sU5G$qZNAi3+H z?wu_XNwz;HotQ7#IUN*}S!oA+hHgKb?*UqhuYOoEEZ;~f8eXZI3rr$hsdFQoN+$)xBXVtyrs{Nyp zdq#M@(8qReB9!fX%IC_Ku3q00IvYofPEb(sUs;1ZS`CEg@EXv-#;r1DOgY5914&K{c!1`DMu#BXKuPH$LTUmjn7dP%YB z@%yi|;yJr=51OWIX!qW1vE`?y#F?;(f3znQbp3thch9mln=379spZYWrPiOCS=A!H z{a#m}5^{M)uixUcx+^wDTv}Af=(K4f|C5?kpG9Tsw`Drqk^9cYdp49|3aj<9Oj8~) z6|O|{O{oj>tNUbCkNk5C?fE$?H`qUJj?**w=BBW(JOS~YnkJE+i+-?QzK5daJfj4TH(7_eJeaA_^@R#K6@YJY%tk?@`g z^EPQEKUe(HoP18fS}P{E>7bvv`l`dizIG~;EPhC5mkWkQZJFtm&v5tPKem%6wlJOU z*nRe3lJv%mXHBd%tf%e1ZwpzqE9{9&;`90MOP9@24SF@9R&tG}0lQP!2E$8PysN*K zv`0nD9P(VZ#{UViUDxUDO%B&*yuRcRj;J>=a+fghmeWgEg1tnqHEX{r36-yAXg!|u+{DJeh3P|azg$Dw86(dbA|_968LEZ0K6B%! z%Q?d5|$J7dsci1m3;X~ z=K9m-A8NBx4$C~RE?wSw+-uD$>x~Tp$wCD=P8G-2%xNx2I5OX4qUmD?AL;3PdQIaw zH6q%N=!jkp`LSmE<)7;;t9bn>7uU%Rzwq>UGnGG{0WQLb>j!h1Clf-``kp{*&^N zpVJmyNN8?NU3ua7l`k1#yXyB$sd!a0w|?71?&HpFA6EG(9#U#-?m9Ln zs+&uLxg_WKzJK3*EL^5Ic1$o?x^T)-^-G&|BG~)|Om-<+Wn4HCX8d^Op39q`ciOAm zl;Kb>kJL2QJZ$rK=}f)0gp(E9TE84=dcM^E6UX|+p?yDh&R?)!jX_D>+-slK?mN38 zWEgT8KUhrM7WBvK+?>ZT&$f2ersaiCbm_mzW~;!k)OAwsZ3{tBzphIq7YxFf4;Sbe z3kDo46J(Jsm{EJZSpRJ(I~$u_W%2g^H%kL|+53H$uKTUGeU(<(bC!>%9C$rhu4){) zskTw?*E;3rQ^Z{}1Q?juzbDV=t_?V(m&56pbi*K|)iRT7dw0x4;}_D$L`yF_TNpCC z)>--fz8Lmnt9E#D_uJPodt=h49++ZjS+)6T^Ol9)zh)&kuP}bg>0}l?X>*OTq*Cz0 zg|i3>ULnfUDOo0wLmshJms?-p(Kaw#aBP-pgN?Xtt|ah;ncyi!|RsC?)- z>%lA)IYW%NUA%|HB_ zE0U>v{qXtwZ?+_Jq%ZZ}eOT$_>Kiu4=WLZ$uZvVM>Yg)MC@5d@>QPUJ^F3BE#XPBk zN80Bs&|3MiH1bvQ+5n&E-OaNTvQ2-jnR2)ISEP_>&dTG5Kg76p zbu{i;eCErFm|l44$pm77%3c^|7%kdHi?-3CZM0|`%0(NvG5P7zm;Gh&(-tQcvtBy5 hPxX*o^viWz>lqx6Tyxs6PrBf>#?-?QzK5daJfj4TH}^u(l3tB>GVwDZa}jWWN}1>0^% zJH)46+94-?=;p~^CF&I|eb@aQtmKkBYNvmxITu`f>%mcZ;pjywGjj{K6dhcJcL6iuE<>|?aTQ}8IFW#2M%v@!8tX|hC^vc0qca2X+)%ay!SJ7(n$oilWz-ey2X{MI& znFrf9`IYLh@7g&1PWbvxrYn1_beB&}F+Q_q%Yr>mbZP^Nu6$C^+pML3weWvc__a^` z){l%PL{2E*z2MYi4GUM6np4r0%_08BX1+9=bgOi#Qd{aH?f#72x)-G#mL)4qQaySj zt!38CIkO!L6T5;$G~J?4O*a^b8fFIn>dgCj_Ei-3cU9B$JJwQ*%TF0i zJ1VAjmc9SWPx)9IX8Y+y^QM$;v)uT}v5xVUKz~r1>Z~v)!R&Pj{j8_lK7V3QmCoI4 zscg2L@oq@P$Hbg_)A}2fHw8NRyKJ2K{Yw1}&vOxHocOeR5+4LXPZwm19BbEzK4+fCoDp`aO4%s&)HaqRYq#^xlNG-ENTpATb^Eh)((b(<+Y1lv z*cf`OXI9BR)5C3!tn&|TH($@Kz0KNPNO@`RskxHB7+ljc*TgI}EHye&S#{~nOi`1@ z)jrXIhaFoUso1uKY&0{kx$Y{};p(U18PYBJ@oRVwE9~(|C=*$$2k@=f5gT%2~aq zM=xsn4vB}n)(tIOWg3Ht=k~DLR(zGQ&6&z0%uX&Z@U;w}mcOeQC4K=d6u*hgbm9u0(F;s-m4nOhPjX`amA zy07=}{F<4yzo*H!UnzWLqP-z&yE<##(tzY{1E~v>MfOSSFSOzn_)@xG+-$byS;a@y zi#Zpb=CD8e%-MRI+_l?hnV)3bTD{=@%-rMb70Z$gpDjHU%yjss62rdloPj#x7oX=k zSy!Z%hCX!9THN4j$g=Bnv2T*qVTIyF3!lvUGRM`n;?SBeE?<=_S1so9S3R0)AlsHA zyg_vJ*F#db%*(EqM`&(1bhj|@ToC)3KQgm+)!BZV>*KapCTsoVN$*Pv9MV*eBr?@~ z-t_9@S}Cbz@Y0hB!~&JQFw8Jow2c;Rqea_j(KeKeHgIF|)1@!_%i^akPAX=-ba0>Q fA-U+6>$ui4IDW3XTQ;G64Ug!`)JqRmZS@2IOr^d- diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/valid_ratchet_step b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/valid_ratchet_step index 576847f1853a84eede912a0984bf27bf83de8bfb..79545108d431884239f7557de2ad45b1d5fa9f72 100644 GIT binary patch literal 7447 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 literal 7447 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 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/valid_same_chain b/soliton/fuzz/corpus/fuzz_ratchet_decrypt_stateful/valid_same_chain index d7c50b0b9e9fbc95c7099b4670039aa9ed029b40..561decfac739a1123ca1e1c09be9351b2a94c569 100644 GIT binary patch literal 2672 zcmZQzVC`gNfB;580syKGC#6IH>?QzK5daJfj4TJ1`yMzoQ$lsy#xlRw+@i%ZzP(*$ zSt~qE=k96^x7QOxQ&v5RazA}w%g%xe&e7F1X4Rj1udGUJ*6F*yIwf9da-PU~=LeBe zTAn*+ZRPsJE34(cdwB?#$?Bae=G{^%Q{C7;IjV4nX7Iki?c8ZjmPKAam9md`#6I1j ze|zJuBP_j%s*D@H2s~?0&u3ZpLRDr0`_%ghanmlZ`E-Tj%A^IndnU{cZ+tJPBl|g1 z+eVamBDcqPRgu+OonGvpY9MJO%C+CbBKV-+?I*(jZkE-FnJXvj>mQLzv|`=%BY3w@ zgcECP`~%6EclLkXc=An?@;@u4J*9<$!bL6?fu9_C6c8Z0l|o(0V>R@cAI z8Xe4>eZWAsHq)}3b*Y?}@Wn=}w5;0nk0A;(bDFR1yZlx3S5&WGBH!Y~VC!ZFse;zc zi-an9R{U6_KAAK4yVADq-HSDf1^5=IscV{5R^W=Z4P^;&CExi*aM&LHK|g( zp}ms3DdN#dFS$}Pc?N06*)b=y3g#8Ge*4+H)N-fC0lw}TN2@!+W_j5>yIPpI>)gfX zrD|^aTeTKd2eeCQ+F70HxBIc6(KE&S_mK-bgmZ;#X0KUzZNuj67v_pRwmKD7@F8;F ztyX)tE4!O2oDFtOzASh;$#v;_M~fE83e!8xVZW+Yd2}vh=5+oZBc@s}`g7`&Duel@ zt|2-+_m)XNJDqySsc3o_vreJiw3+UWw-z%l5}E5NtgpEuU2NKV<5HbcZwaCPxxpjVUdT`l}rb8@>7L{%jcPgA?buHgncm9CUdCAJ%6A$zM+zv(@mWqF8 znn^^6Nthq`Qk=b6OmFsbS1+Hx1u5ykNC-q$B~U%s~S z@I}+jo3r^A*Y`h&W1XpbPiT{die_q3c4VuD@a{709=){>%5<31nhVZ+KUw@Ddg0xG z(88sdr$k2N0 z`anBdH*wHU(qZam~?Ve^~ubG z>eHFrUVKP>_@I5p$$EkCAfNWxTuCeQc1Rwm+;q&iX&!^&dB^NqPhvD*IV7g!x_xGP zb%k-K*^IfL8zP&pWnLsR1*$cxAqea_j(KcGNjTUV~xo88IYB7CFYY)6jJmxBwt`)17 Q8WeNxbnz4QdVv@50MtRbvj6}9 literal 2672 zcmZQzVC`gNfB;580syKGC#6IH>?QzK5daJfj4THpH5sqBZ;X@oo~7_?`-QL@rxr0W zu-jVc1ix{=b3ng5Q*8C*CC*OW%L5Pi9G`L`RBZOzIZO9%Xb}(--Eif?scWD2o6IW9 z3eu8@Fo{sqKdm??Ys*~I(!3-iN97Ydo)eExyxHZ~l&+{|8tD!FDF%j}&~R?DmH=6^IH=4o+b+vc-oALuLEd%q!1Ok|UPWN1sEyr~bv4vi_Y zCkn*wWQm4_Txwpn@lpMs97pwOo|m$_&w8`|4zo1aUhnm#t=DNC*OG}{-)x=!@Oy}Q zzbopOcJ>omz|OoV+|bza{j)5_g*6vX?YR5Os#Z*Rb+FveIkSKLQtdhxapKLwu9wH9 zE;QXct(UpIE@-0t)P*Ous_S)4KUuuVvF^~;2IW1!+Lp~<-oECW>CEF(Z#@t0><|m= z)b4+^E%)bogVzaiQCZcZHgT#)^JQ#UUM~_)V7hsIePLqZ?V7ULPj>ljtX{c2qBO$) zWaq9Io+}xS#@=x}m~vw8oi9gbnsXcpP_Ed%YO76*IFD_FkYU||I__|z>~8x>!i%qL z3s@!KaXZmygDK~}Z7ap9@^v^@JpZmAWwxbt&J0eil~X3HKHZwPeo<%e!bAF3P94^2 zI+pCr^H`=dXrJQ@z4BDfy0j%98J+Zgb$s5U?;?FlY|+W%+h)E?vi&nz>1^U@oAf=u zEnD|^?EZIBIZJx(hC^A!v#kobJ-ALPYTL-Q&X9Y4K;_1pg`vMo=Qyd|a|kN??QpTZ z(j;_?%y0MN=5-g0))om(bls!YX=5g)q_BSBESYlARnJ(}FN$V-Fb$sWyeDc>rvgVt zOJ_~+e2E5=bKgTIbfvMohEzp3Ja}~^Y{t?<1#4wyImGSJd8WKMPPOrjdV9rF=e-j3 zai$yxLT9w!aDVt=R*jP_|B0DBbMzNZt1G*)ao(M6JSpZ9VMk@7&jko3E6XFbuUWPH#RK`=t88zR9h`P%wtg4g zK5Ng@ZJL#A3X3Xt-f8Q)=uj%K|~5oxS+@)Kf(VHYmng zI?syU^KDC6e~RbYI}G0!+ZXDTI?n3%IVKYjxMdsTpx+*@P8y5&zV_K$7w*jYpW5-m`*`mq&wIvxQ{F6|QC=Cq#h&ezWxFt>k74)jRdZ%K zI|bhkdlk@b6Top)V)43H4v*OdU%JF3NuG?VSgnhSYwYp1&+x zFT-WwVx!jRo-fTw9xNy9Kl!SLvfH#dJl8N=+n)2pf@Pt>q<-d@`hAkBuQMlwPPOda z^YcYK$DZq(>fog(6Nm*WdtsPiv}hYG+D41E(V}fA7j58DEv9d2?SXfR$6VzCtIGF$ Q@!0cK;E~eev@c0E0I-6@B>(^b diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/04689513a7bb7518164587f0b9e482c339b2ce25 b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/04689513a7bb7518164587f0b9e482c339b2ce25 new file mode 100644 index 0000000000000000000000000000000000000000..74bd6d56d2d28caa12be5caf6ee10af606933d94 GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd-`r9=Si*4d30tResy7#LX&G*9=nwKwpUKERTcawMU|{b}v{ z#PFLAH_r)G=%#Ics#N#PGo4}6cShlNRk18rlM=j~?rcg@j8+KSXneWHpQ%HD*FbTy zNIjd5qKm*}FPXe$d-itbn6O_F-+p9G`0?c#H}n|V&wZKf6<%F^XBYoGLEjnTnOhxJ zh$pS(-`#Srl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}WhRrASH?atnb@k5 zc!mA#D#u!7MwcUk%FISBmn)t%?hT4Q&JxO`^$NeD{I>nNQOcHEg|&-UH61z1Bax*q6k7J{B&W&Z1AEZo!Z#EG z;KEdM*Um-mGD5=pY`1dUiPBSim}eT^%E-X52b#nf)%~pQA5MAMypmzRXxK-a-CwrX zbEc{BZrpmZI)%4jqD6Z01E&VJ=q)y;8#KCV0zxI!BvQp+%X-wT`TIundU;$W*NWEC zsi}?ZH#Ls_?>O|wP&!5@PI>a7_cj62K?ArPn4sFWS4RhSkn$Me~oM zZ`X4T)3wYT6_0(&xUs1?eocDI2Dh7{#eb7lv9_xSIPZOYfqDAFQ$88GcOP>+E))BI ze6qff-afU`HKyD5CX3FiSzX{RYq5CU%PpHtMEA2l;o7xjz0)-2Cy#?VL^2IUJ2xNA z2udi*p3)6NyaGrhZaLzHdzU2&!hZ7mR zZWn6?7S6LUJmI*eXUVi+8Pmw-Ls=73wz?bJs9P<}QEN~;y`k&?e@Wy^W#=+&NAGQG z%BM)az0C7sT1ovHTQrdqMu%S z`^Z_pM7BCZkq4h&NORwLY4=MYok76U>1Nn83l8te|K72!tn8L9?Co{_FOYq@>id#| z;%*Z^c0I9aN_*$TRD0%v_N7_pmu&Lj5qb=j;JePDnQlG5c;n7XTi@AibD1?wHS37APUm)O(>*e3-&V7pDO$g4 zcS_MRlgY{}V;`7IY*k6T!v1!ZW34iy%Mn3kW}}wN70(*?21Ord31!lHGJA?sJ#%;2 zn_z#XKXavA{2nvzT;whzB)rddE61HEJ;jH4rs1s&40{-1k*n@!b^mb6%jT6(f&cQI zdu_Dm)OV$HYtQznnX`v?61IrtLJ0o+w*9(M%9dM&wTo9Z9XZM)k)2Zha?(skOc+<7}KGoNmeS|j#&XX?q*OUg_$iXCS#E?B%|r8b+` ze%S_-zYJUa1@|1RvHHDQ^3OM{04kQ{Rz;SvSA+7M@UE^(cVV+EXxqA=~U2`{orjfyLHa zS(dVe>Rb_HnmVO)!z}yTRR+5`LuImRBVCttIxWd|O|j&cI&#Qr8>4t2&)dNIv!(ub zq8qkxq+h?i#Cqv|S&NJ_Q#M78ug-Up z*|aKG{j-Ukd4;)Q&o)N|m3=oixk`5TuV|X2x+%+P?j=(xZMLP}Hw>$#7pz#k=wOS& zr|R6IX4g+bw(M=J8pm|^JSQX{H0MZBL07!TRPTzClWVtheKkL+ZMI3aGp=jvx^+wU zT88X8eC=G4L_>%3&Usg+$6c7;Qse&am!kHZlCw*9GzWz}-K{(26iZlV>#QoTe;)-s zI~vS;0@lx9S@LP`YE2GnjTseH3l(B~S;fUxw(Z~4R;QrapIp4rfF)pWX-`V;F7=HD z)2?-&Y~3=gVQ%?hu2e_Ohs=%~vuAWKYLqpeYV^I!eD@BXaPKqMMdxZ9oAy9J%WJ!} z`e`0(`+`DymlLNyy6~|6h;@7@XJa9`Y2y~nWc8QQg?^KHH@}{*c|cXD(DcTm?JHX+ ztz>9eAap4Ffssnp`41PCWrm5AJv}_D!~e5Mw~lhH?4II1Yo@U5Fv&?culpyz#i3)$ zr?OtJnIcy+B{vm)jGWTG>5zui;RU;8V$vD<3ljd7?vM-5xbM8Rt{}cT;Fw;P;N}{J zw_EIaS4D_g1y2&ipTa=JCMcVLGtj^PAh2}8mZu_l)nSRHwYO7S97-&`I5)>O94>Nr N0?$w2oC(XG3;>h@N5lXC literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/0be2817fe6131cafa25f9adef6a2876e4a5158d0 b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/0be2817fe6131cafa25f9adef6a2876e4a5158d0 new file mode 100644 index 0000000000000000000000000000000000000000..f78bdba85cd5daa81d5eac438fd4f66a6fd3bb37 GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd-`r9=Si*4d30tResy7#LX&G*9=nwKwpUKERTcawMU|{b}v{ z#PFLAH_r)G=%#Ics#N#PGo4}6cShlNRk18rlM=j~?rcg@j8+KSXneWHpQ%HD*FbTy zNIjd5qKm*}FPXe$d-itbn6O_F-+p9G`0?c#H}n|V&wZKf6<%F^XBYoGLEjnTnOhxJ zh$pS(-`#Srl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}WhRrASH?atnb@k5 zc!mA#D#u!7MwcUk%FISBmn)t%?hT4Q&JxO`^$NeD{I>nNQOcHEg|&-UH61z1Bax*q6k7J{B&W&Z1AEZo!Z#EG z;KEdM*Um-mGD5=pY`1dUiPBSim}eT^%D}LP5t_sp)%~pQA5MAMyb>z#U%qp%jsBea zu9R-=**-OM_V7;9m@-AIz~@X$x$V7;H5lHs#Ouv7`ffaPcs4Kp@O!^P0jG4Gb}M(@ zPRq=vTcp;AJ>Hpm^7N82(~M%r8H@`SFIlP0CbnO;!Q?N)7JtD#2WzZ;ua-P@sba2; zmXubZZp&Upuee*E_D|y$EdA-YmcuAuc43wB)Hkc0az)k6enjYMs?4yAO;xVslk)%6 z!tvX8!QQmmqnw#pGyi=C;yRRuXgG? zaxm-Wx8A}N%Bvm)uv&Wx1~6os9b@0Tq9(A|dMnFPwosibOjD+cm2Q}2f4jf zRWDqX%8Stp-6x^$VQhS+;(ygOhE4!z7&zdRS{VSS4#yP=^Bao!ACmpzPEIUkc z63*-X$!~G!nDVKt*K4N8)lA7vMIR%lv~N13VRd-HZkd>LhW>(tf2BL*!ZYqWZ>=kc zuMRk-mnFElhT-iNd)`$MqE^9^MDfQIsMrLh&PgERU-W+%M ZC6->Cn`0Xe7dbousR09U3Wp_g1^~XYSy2E0 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/16687b309b81f17dc64135e0ce92166f7a1bbc5a b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/16687b309b81f17dc64135e0ce92166f7a1bbc5a new file mode 100644 index 0000000000000000000000000000000000000000..67460bd6bd7e9613846e8a49cd54606a6513a8df GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd-`r9=Si*4d30tResy7#LX&G*9=nwKwpUKERTcawMU|{b}v{ z#PFLAH_r)G=%#Ics#N#PGo4}6cShlNRk18rlM=j~?rcg@j8+KSXneWHpQ%HD*Ff>G zNIjd5qKm*}FPXe$d-itbn8*kT@3Y;?aVJVo@nN26cq;?L9!97q8P)x)?jKHh*}M`e z@L#@juZ{Mc`mU62?b$vxbN28~(wH(utib0?OS$d6jWs`y+4l#f?w5+R-L(7mg?YU; zmXY7KUpGqGa;va*@v5dHM|mW&^o2spex2krS$ts68GSdNIXwH9|1S8Tu$fc3PP>&m zZ>MGE(=AeK#2)WVJ$ZUbnQ2C`;|#_HiPaO zMoUVoP`72TqF3ClPy45F3zq(LT+3k;FuSlydFq?hPPwA$W3FTFf0$8m*1p^qe&5p5eUQrWRY`v9bDO;${6{aau#Y#8KvcFwru$wbf zCaX5mbxEhwl5E!$OMa;%hpe_SiU;z%4Xi&~>VGG?VH-#K_1jCVm+qIf$T(AeVCBy( zhpHE@UOa!D)vS}x9bKwT)4Cj3ujM>tQ{?#Sd?%Srt8&#po7kCGm>c$Nb5u~-cXJa1 z(?)wB6_sO~M+2YJ@qFq1pncj&@yBNM&Y+1CYyP^H_RNmd(-YZmNiYt}> zH%x!xoShUn<<-+YZ*Q(*2)0?Pu_SC+r($DRhRl+(fCVciJF{L~-%+~#u8hgED0khh zMV0B+^NTm`ytMV5%{G@=(^RvLSnG6dw>I4)qxNkz>zShUyLP7(Ei;*{yfXHI$;4Kb z#4GG?S2@-yGrAlRRAx46xm@wAac@xcah6afttYdmI3ZZ|%-v;gg8h~L%$0KSd(60V zk-LnL@IKqE9CxDh6d&f9hPN^>>|umPDx_`tR*8xaVMv)$i4kr!G~@wb7E&D%5S+tLPPX>(l;e z+=8V)9oKRg2Fxz3Ql9!|wNtLBy4jBiT}_o4ma(bIm3&hEpISJ6`!3j!tf;Ei%rOA6WTw%c1Ips~68-XEp2Ob4Qmh z)3lswhij})*%UdxI^RiVdsw;ZpH1w{E6fdhwmB-O?7O*%f$5Xg3a3e`o3fgOFPTbd zvn}<$VOTA_V8!A^2U`?ARp%BpyM7X~Wp88EIHtSjdC;6AMFm~)9#g$5N=~lb(pC2K z@T?C1&nDeE%C)k4iubIU(%rwJ31pnpT&QvAiHNAA12>Lkhe=MtdEGzxEe;)1K9%)) z%@nzsDY>cWW8{?fO@}nB4lmd(6O+!+Uy$&xbcbAc#(n3lbp`R&0mt;R1UJ_(yxn5Y zyDCD|DtMA8wwRjYG?-k2NH?Hj6O>mbfrx+6|AAoXge^}+@~XoUOKWeZwm6hndU0-! TZ8%)y@C2j=48ZvfmgyJ(3E@&- literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/1774072963e3ec198b496e12094ebfeb441501ba b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/1774072963e3ec198b496e12094ebfeb441501ba new file mode 100644 index 0000000000000000000000000000000000000000..7b57d427996861bd747c8907f759b2965a138796 GIT binary patch literal 1437 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 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/42def3847649bb75539696c104b001f7fc444b56 b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/42def3847649bb75539696c104b001f7fc444b56 new file mode 100644 index 0000000000000000000000000000000000000000..22789ce3a2690592c97811e015e16c7f1258afc8 GIT binary patch literal 1413 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 Z5=$@6&9M!KiyWSS)PMmvg~O6L0|3ZwSjYeX literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/665b8b9b6dcb3e14ceaca3349129a25b310f4d7a b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/665b8b9b6dcb3e14ceaca3349129a25b310f4d7a new file mode 100644 index 0000000000000000000000000000000000000000..464c6f6dc6bc1590089e6001e35203ca4c918a54 GIT binary patch literal 176 zcmZQ%fB;580^qmrg1u?AM?HDCJ=Z&4*w34<9GzX#Rw`ul+?L;8aL+*{0$?{L0BNhS s`n_86)TN5KHd<0zg}Nrl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}WhRrASH?atp4h6A zc!mA#D#u!7MwcUk%FISBmn)t%?hT4Q&JxO`^$NeD{I>nNQOcHEg|&-UH61z1Bax*q6k7J{B&W&Z1AEZo!Z#EG z;KJD5WkR~Ub}n+45fa{KyOrZkl%C?lJk#)228KP1&?LsF?q_xXaLUW(l~95I@|}Ba z^yk!frF3i0_Nke(hj)_3lqq5bK4)6WZSQTY!SJRfUT>b!cjKAEvw!*Tf)5ItIi>5g zTees|j^Dlu_NLVy_2l99T<>^cKW~0^baqKwsgTigTmIMmdpuO7FHY3|TvDhy`HvKP zwNu}bgIPDf^%kB`UiBz|)!I`qfFaxL82jcGHG##}TUnN}h3Z^knle?abi*wB+f@d; zIYVW#Y9n2jbUH1`c1^M5mm0uOYolwZZKP(X9XVvRjZr+1=WSs9*;4;I(GA-;(y!lM zV!d>~tVPC|@&hY>ZaGxFaP{K(>ww8~5-5rOi~bJ;ODAl3Dw0rl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}WhRrASH?atnb@k5 zc!mA#D#u!7MwcUk%FISBmn)t%?hT4Q&JxO`^$NeD{I>nNQOcHEg|&-UH61z1Bax*q6k7J{B&W&Z1AEZo!Z#EG z;KEdM*Um-mGD5=pY`1dUiPBSim}eT^%D}LP5t_sp)%~pQA5MAMyb>z#U%qp%jsBea zu9R-=**-OM_V7;9m@-AIz~@X$x$V7;H5lHs#Ouv7`ffaPc=j*Hpm^7N82(~M%r8H@`SFIlP0CbnO;!Q?N)7JtD#2WzZ;ua-P@sba2; zmXubZZp&Upuee*E_D|y$EdA-YmcuAuc43wB)Hkc0az)k6enjYMs?4yAO;xVslk)%6 z!tvX8!QQmmqnw#pGyi=C;yRRuXgG? zaxm-Wx8A}N%Bvm)uv&Wx1~6os9b@0Tq9(A|dMnFPwosibOjD+cm2Q}2f4jf zRWDqX%8Stp-6x^$VQhS+;(ygOhE4!z7&zdRS{VSS4#yP=^Bao!ACmpzPEIUkc z63*-X$!~G!nDVKt*K4N8)lA7vMIR%lv~N13VRd-HZkd>LhW>(tf2BL*!ZYqWZ>=kc zuMRk-mnFElhT-iNd)`$MqE^9^MDfQIsMrLh&PgERU-W+%M ZC6->Cn`0Xe7dbousR09U3Wp_g1^~V1Sy2E0 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/7febd267420a7eb45f9c3aaee9f5d3e61fe020e6 b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/7febd267420a7eb45f9c3aaee9f5d3e61fe020e6 new file mode 100644 index 0000000000000000000000000000000000000000..41f0d1ca2fa9b7cc9441665b443f6cd7312c0a54 GIT binary patch literal 1450 zcmZQ%fB;58Y=D8Gns13F0|QVFstzZmL;$SbjUTKc02mk;Sq?N$_qDaR@RdH0v~W%y8W(<$+IYTUG<{MbnE%W8+TsX z`p#yX%dCm45Ih90-rN2<+k@W*8DtX-yf8^Uni)2dO;xVslk)%6!pOQQes5asQBNLj&-IQM_Vad3 ziOw!*D-|+&Zp;6=e~*W%^u>w#pGyi=C;yRJTNeR|DEWDZ5-*>Z!fW4x?k2J<4pO1l|Q!}s$RHy@%(jGvrfKqbg4E?>vCYd zmh+TNk>jiLon$tx%2oetVrO1qZrHQUQ9)(j%}uV7-Tf{+fCx+)ibB+`hbj5p2^{yy6xpqs}SM!tFW|L$) z*UlwLG;}!coOflq+=clqHSX_zDQeFtIlFX6b5PjR-MUjwv4nND z&Z_eI_fgQZqrtoc(plyUrbMNTQh=QL{1r zT)V7uFy`82B4Hgo*H<2&T)Io-rJZr%B8ROtcP7`|jM%APd15((|Ksg4?>CofbWQn? z)e_>FUcRyN-s02OR~!3US=49xEzYZayO95OTb^xL>FvVm)E0*lOE1pNu?>fd9G*Z* jo~j=Vj35?>V221XFazn8j0`9R5JYO{qOBYZl?)63?-zDB literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/80f4a02693e83cca78db8daccc4f3d4681a3569c b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/80f4a02693e83cca78db8daccc4f3d4681a3569c new file mode 100644 index 0000000000000000000000000000000000000000..fb3344b6a9bd7794632f54a7f0152661e233e71d GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd-`r9=Si*4d30tResy7#LX&G*9=nwKwpUKERTcawMU|{b}v{ z#PFLAH_r)G=%#Ics#N#PGo4}6cShlNRk18rlM=j~?rcg@j8+KSXn48DpQ%HD*FbTy zNIjd5qKm*}FPXe$d-itbn6O_F-+p9G`0?c#H}n|V&wZKf6<%F^XBYoGLEjnTnOhxJ zh$pS(-`#Srl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}Ej+#3{qoF$Y=>&fgXPW8;)Wp9H0mHy0?a`Ai2`16>3 ze^BavsYu&RyKi5Z*K1=Q`EC1kqm(VT3TqdyYC3Y1MNVX zz=f&iuAPhAWrT$H*>2^y6Q!s4FwZo+m4RUoBQ%LIs{2{pKb-Qic_mcfzkKIj8~r); zT`Aq#vwdpj?BSiHF=dKafzO$ia@%_wYcRZNiPxKF^xb&o@a$jyyWoSuW=`ok?N;u* zotBwTw@9rKd%QFCDnxgUMfpE&hUg4%S%xUM+d*QpH>w zEh()+-Il$IUU9cR?Qi22EdA-YmcuAuc43wB)Hkc0az)k6enjYMs?4yAO;xVslk)%6 z!tvX8!QQmmqnw#pGyi=C;yRRuXgG? zaxm-Wx8A}N%Bvm)uv&Wx1~6os9b@0Tq9(A|dMnFPwosibOjD+cm2Q}2f4jf zRWDqX%8Stp-6x^$VQhS+;(ygOhE4!z7&zdRS{VSS4#yP=^Bao!ACmpzPEIUkc z63*-X$!~G!nDVKt*K4N8)lA7vMIR%lv~N13VRd-HZkd>LhW>(tf2BL*!ZYqWZ>=kc zuMRk-mnFElhT-iNd)`$MqE^9^MDfQIsMrLh&PgERU-W+%M ZC6->Cn`0Xe7dbousR09U3Wp_g1^{e>S#$sZ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/88195877b37b5bf195c9dfa20d3e5551c1a0fe4a b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/88195877b37b5bf195c9dfa20d3e5551c1a0fe4a new file mode 100644 index 0000000000000000000000000000000000000000..48cf1edcedd7034ba28fcfb5b945f16e745d0e78 GIT binary patch literal 1413 zcmZQ%fB;580syKGC#6IH?AFrl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}WhRrASH?atnb@k5 zc!mA#D#u!7MwcUk%FISBmn)t%?hT4Q&JxO`^$NeD{I>nNQOcHEg|&-UH61z1Bax*q6k7J{B&W&Z1AEZo!Z#EG z;KEdM*Um-mGD5=pY`1dU3D#45m}eT^%D}LP5tb;`{jBaEPI=kB5-RXtzH_gQ{+#-* zly2?WJ~eap@J`a0GDWPw=S)kv?Y)gP7~ZtR>&-LzZai~%_Amck@IhfSr*xfmD|g;b z%gm=+q}GT%-kEyx^pY~ujAF+bj0+YoS*gt?wqLfv;g;Mb*uIMCfX&%&?42Rj%Zd^8eJr z@!NO7-n81Io;=*1>m4ub=grTK&Ms*y6*78m%m2E6kB6%C#fkc#OA1vd|B+&^cIrEF zFze>G-og{gs~!cgT6+oxFl3t@W8b`@Ca~CgE6Y;0P@OAGQ>KcQZkT0%yUJiUXQ)h8 zZKUgxPNyZ=t|^xMQb!J1ZDSM<BPISXIj`Zudmsl^|FKdx;ru@LlpIZ)9 zFI>HN{yM8!C!agIbeX2*R6AT_eafcD@zwcGGTXz-RsU>aXI^1$*t5-1L1o{~O$PQM2nOAzSt~R*hr2d!7f)IZ{;6 z74I?CyQ1Xe+AUpWPY=)P@c(Smt)pBkyQg^1nkn7=E1E#YIl+u0kff24P81^Pz>Q4s zT|sj2$oLR@>C?RIxMlY f_I7HELy4sq=jPak!$l5Hpvf3mmVsEXWX=EpKRH-~ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/9c6bf5bcbd2f1fd583478c053635a7529f68eb9a b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/9c6bf5bcbd2f1fd583478c053635a7529f68eb9a new file mode 100644 index 0000000000000000000000000000000000000000..3a79a4f25fc4a8678237b5c9298e96f2abaceba4 GIT binary patch literal 1413 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 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/a8e8183d7d651c83596f4281893c0ac11afe3c7b b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/a8e8183d7d651c83596f4281893c0ac11afe3c7b new file mode 100644 index 0000000000000000000000000000000000000000..8d5f64e68181f83bb23954cf06b340cc25db42fa GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd-`r9=Si*4d30tResy7#LX&G*9=nwKwpUKERTcawMU|{b}v{ z#PFLAH_r)G=%#Ics#N#PGo4}6cShlNRk18rlM=j~?rcg@j8+KSXneWHpQ%HD*FbTy zNIjd5qKm*}FPXe$d-itbsIXrV-+p9G`0?c#H}n|V&wZKf6<%F^XBYoGLEjnTnOhxJ zh$pS(-`#Srl#7sFSJEsOSaH?)7A%DbD}dxdIDai#MA zhUrh7vy%d+yn4Fl?afsT!8U6(mV_}WhRrASH?atnb@k5 zc!mA#D#u!7MwcUk%FISBmn)t%?hT4Q&JxO`^$NeD{I>nNQOcHEg|&-UH61z1Bax*q6k7J{B&W&Z1AEZo!Z#EG z;KEdM*Um-mGD5=pY`1dUiPBSim}eT^%D}LP5t_sp)%~pQA5MAMypmzRXxK-a-CwrX zbEc{BZrpmZI)%4jqD6Z01E&VJ=q)y;8#KCV0zxI!BvQp+%X-wT`TIundU;$W*NWEC zsi}?ZH#Ls_?>O|wP&!5@PI>a7_cj62K?ArPn4sFWS4RhSly^cny0m zr^Y11bS*PS#bci`Zfq)!Uz6Ul!R@AK@!zCXtnDfS&U+tUV4nW)luw54-Nzh{%f$X4 zpR6yWw@?=+41$>X37kxWC;&do!VWQT?e0|3-mQsS?{s2db5%D!n7R^oM+!UoO6t=Z#hHb;Y0?n z+r^rJh4U;7PB^aVSu!nH#x%0|P}anht?tG)>Q)PL)Ed-IZzwy!UlRFJ*||*H(Rs6{;GAA$ZQ|pKJDO%S$7&vlWqf^x# zSZ+A=iY%;OEG@ookMkl&r<@OEmLgN+Zu_cq%P%OI;$d>}=5`TZ9%JW;dK;vV=%?4- zK62JCk*&^9h*MI$d-ptEo-BIE5 z8J$;$XWVz*T2~NX9dJx9OK@`y!`m(PysIKat%4_s?oF#b>dC|Hx!&=@e%}1-=D005)IVjchh literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/alice_init b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/alice_init index 0afd0a4170e71b976890acb08b4046fc48b5f454..fa87dd498ef6b567c40962be38cffaf32d724889 100644 GIT binary patch literal 3847 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 L0Q_J1-_G$LAgeLE diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/b2d4e16f69672f8ed52a5c32d0851967b9e8735b b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/b2d4e16f69672f8ed52a5c32d0851967b9e8735b new file mode 100644 index 0000000000000000000000000000000000000000..f231bfd81e6d2e7673641f03b9349e1f6f7e5726 GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd;4{r~^}Hxd`fR3ZR&>+Hr0RuKRU42&!Xny35P+8g*vA7DvJ zIg(J~{7BT=i{Y!qmPLEI8`?il<=xHg zy+SpnxKjCl!}KT4*-3#@UOnCO_U0;vV4JlXOTw0QDmI2?$Sf%fSg>NUGwa3m9i`jv z%9uQha@XBjRGDr)zj))$OIzRBY;&14O*QL?wNB@DYtub4YTs6~o+(Kt0{yb*iAC$UZD$;h-?%NmU_1c(6e%pTCC}qp7!rH~FnvNXhk;u{)3N8C}lG9}I zfjww(;TsA8aA9KIWlYFjI~Tdj2np}A-O6z%N>A}&o@sb11H&FhXwqU-_p`cxIOS#Y zN~pkp`OdvI`g7{LQo6Ng`_#aJ$bl2*E?R=&zqkeon6vaDrEHBmj8AC9uHONixc%f zmlUc_{v*X+?bLVVVAjoVy@e-~S3L?~we}PYV8}K*#=dz)O<=M0R+gn~p*mNXrc4zp z-7w4kc9p?y&QO`G+DO+WolZ-#T~jRirH&l3+Qujz$n!R^{%ooLo#=*b9O>6@FR@;_ zU)CbyO!5dPCj>Z=`u~rsdl)=`jkzPuIq`E1qY3?OcDQ&i;-Zu=Zr5CJNyy#$y!l&xoqGs1mLbmK} ztQyC3_dE}pbEK%CE8b(OcSXs`wOhK%o*tgn;s4p9TSvK8c2Du1HB-9#S2Tf)bAlO1 zAW36SI&kAyc9`TOoY(!6-{R0QhOZyGBN24{RIjC zN_WVGXWVz*T2~NX9dJx9OK@`y!`m(PysIKat%4_s;*Tj%u?b3@lR(73Xkfwkf9ZrR lPet;o!xBqtZ>P36lvsLkZjNm@T;%Wsqy`MYDIAu}82~F-Tyy{c literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/bob_exchanged b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/bob_exchanged index 8881bf493bf3d65c56d4306ccb28eefa5a272b5a..f8c75626730ce3526ff8f4c9c70c3f7983be0e97 100644 GIT binary patch literal 5069 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 O|GWPM`1}5M4F3VV)+;># literal 5069 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 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/c0f48c22ac733accf694be1cecfe539a9ba4266a b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/c0f48c22ac733accf694be1cecfe539a9ba4266a new file mode 100644 index 0000000000000000000000000000000000000000..c63b23347f55346c972e458d750b76c58aad853f GIT binary patch literal 1413 zcmZQ%fB;580)T;`0jd-`r9=Si*4d30tResy7#LX&G*9=nwKwpUKERTcawMU|{b}v{ z#PFLAH_r)G=%#Ics#N#PGo4}6cShlNRk18rlM=j~?rcg@j8+KSXneWHpQ%HD*FbTy zNIjd5qRWKIUNU*h_U!G?)wB6_sO~M+2YJ@qFq1pncj&@yBNM&Y+1CYyP^H_RNmd(-YZmNiYt}> zH%x!xoShUn<<-+YZ*Q(*2)0?Pu_SC+r($DRhRl+(fCVciJF{L~-%+~#u8hgED0khh zMV0B+^NTm`ytMV5%{G@=(^RvLSnG6dw>I4)qxNkz>zShUyLP7(Ei;*{yfXHI$;4Kb z#4GG?S2@-yGrAlRRAx46xm@wAac@xcah6afttYdmI3ZZ|%-v;gg8h~L%$0KSd(60V zk-LnL@IKqE9CxDh6d&f9hPN^>>|umPDx_`tR*8xaVMv)$i4kr!G~@wb7E&D%5S+tLPPX>(~Bi z+=8V)9oKRg2Fxz3Ql9!|wNtLBy4jBiT}_o4ma(bIm3&hEpISJ6`!3j!tf;Ei%rOA6WTw%c1Ips~68-XEp2Ob4Qmh z)3lswhij})*%UdxI^RiVdsw;ZpH1w{E6fdhwmB-O?7O*%f$5Xg3a3e`o3fgOFPTbd zvn}<$VOTA_V8!A^2U`?ARp%BpyM7X~Wp88EIHtSjdC;6AMFm~)9#g$5N=~lb(pC2K z@T?C1&nDeE%C)k4iubIU(%rwJ31pnpT&QvAiHNAA12>Lkhe=MtdEGzxEe;)1K9%)) z%@nzsDY>cWW8{?fO@}nB4lmd(6O+!+Uy$&xbcbAc#(n3lbp`R&0mt;R1UJ_(yxn5Y zyDCD|DtMA8wwRjYG?-k2NH?Hj6O>mbfrx+6|AAoXge^}+@~XoUOKWeZwm6hndU0-! TZ8%)y@C2j=48ZvfmgyJ(AQ4h$ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/c7892ff4f73fd08d733d0f16abcedbaa15c35c94 b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/c7892ff4f73fd08d733d0f16abcedbaa15c35c94 new file mode 100644 index 0000000000000000000000000000000000000000..42fdfa24f2586d5569fbc2d72491652a134277d3 GIT binary patch literal 1413 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 lIE8}<@7BT=i{Y!qmPLEI8`?il<=xHg zy+SpnxKjCl!}KT4*-1;Myn4Fl?afsT!8U6(mV_;RTbu5YQTw)<^-R(FT_!1$mnj$RUK#tq zWMZpI;uZF{s~l^U8C{MDDl;3kT&{T5xHl;JI7=v#)|1&&oa&jo%iaY0EB%=(<>L34 zapxj;86n|)wp%&wMCmC$%rgjYHTiTTI=oQo!?E&d{aOL7*_Ucto_g5so|wNA04|C}4JBmGaa#tDSO1XPBw0L}=>%u#8PruH=*Q|J1_B zx+#8dTJ2F!9&XR|ju-axc1(%RE@>+jGJ0;y|GIyVhpP0&iTa;Q3RNfnky>2s)OX}y z*3ECdg(s9(Jqlp8_7vRkf6B3A?3-8A1R7g!Wm(D=s&hq*Y3h{H4YTZTR~hW)43){M zjdWeo>9i!c}ChZH(f9JZ}T*&zAb%iEh}&k$(O566>Y=Wi2w!lpk36bIYOX zg{v3OUuQMzZUBGxtC0(wAq$=-!QC}Ua(^EqJu38pQ>|s(*H3cpfz8NKrvo zyvJ1UijtFSw{(3qKdEgtNwzbtYw6Z?>-JiP>^gkyT#`gXhx5*PSEkEdnBP+4{_dBe z_MDQlOLsH}g+1M^JLMEhSZC|3DzASZ1wA_&%zFaX&tO^dY42)H4r`4W6;%rr7Hc~k z;O%^=rYt)7zs}T<)gCF6f}2MOD*NsaItvHm_FQ=U@5w0X4ed@{XbbWU01B0=`=N~N_}$q+~>cHzcMXk zF%7bEoh;NHp>s0fVsr5ZovEK!%{O|UXm`^zO^uzSBnuYtmh1_myE)VNj sxJ-oVnVxfVY{TIqhbPc5_`v`U4G_T&6=DX`D;XJ3GB;F;QQeOL02f$hLI3~& literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_encrypt/e1a4516b7e53a5c060d9299c8c9599c9fec21180 b/soliton/fuzz/corpus/fuzz_ratchet_encrypt/e1a4516b7e53a5c060d9299c8c9599c9fec21180 new file mode 100644 index 0000000000000000000000000000000000000000..958f291d80c3d0583ef81c8ffa293f343ac3399b GIT binary patch literal 5073 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 literal 3847 zcmeI#c{~%2AIEXW9Am_s*;I2M2}MJcIp@eZHyx(j(wJ+JGmNy!v5kCf&5=oj&2r7L zx%-AxN>U+5zi-KvzLnqa@%a7z`#pY-{{8*Y>z~hmpFf|E$D5z;-|X}l@cG}as&^HWc(<;NBAuzcGwV{4P@fp*Ae z{B?rCfbL@>Bv{^Nn8pSzm7H2=rHIqGzGdi9uzli<0ZHexH3Qup4NZf%8w)_=yM^qd zkS43WoQdx@yl%*nK1Vk$HM|bw)SNh)eH6a48@Ozkh7H5%1(;zkbogWxUGjSn6PGCJ zTpA-6du7njE^IuajWq+7RAy0h__K8^)9MxJfM+5QEtmO6xnl!jwx2N5r2j{L-zNj+(l0u6|J@98XF^e0DKxgNbG1It^`C99uT z*(EoLnuB0<2DEhfe;qFA*zuL74XL;*G?63eZrwfoM7aogRuPXx86na zQl)u*jHV9zqvf|=!Fm|bJ<=LHvjq?u!v7^{B&A|a9 zokK-=`MEg4`v5{?S2|xHlxjDSyNa>GKjsy{-p-v-DRi6iwYfx}crtQJUbm8xK!u(# zn|UEJjWPf|)AgzD3-{scx3mqB!;VDekAIlr-5`~uCGub;G; zYL3WjrUAaEhcu**u66c!8oBm@+-C8q#dqzJ4E3tkO`=UzTDhS=6ogMJVw{~iL`)qQ zGXb-+lm`KEXZp@-Ac5zU;=P^$`xhN=EqUzt3}^UpWFWX+G@w)y@sE+I;AmM_ zc=e}1`5lVz$FZRkD}@k*n2uz=-D~U2%H1mqk(}7pVB5J1y}Tq>R@Mf_Z*Fu}3u?nj zag^l8jX3ZfO6~Bc!O$00DzWlgSkUF@7t8|yv$z?wb#C^Ci;ab<<`p_YMH zh!xZ_s6g4%wN%4Yos~XB7Nnm)XZpl`R%&)_8hH82GHtF9s&AzwSY)!_HnZ6s~kYj5{Cd|R@C!Ad! z>H(FO`Z88Je1e|OE3+tO21g|(uhPv)qM1p)OsPi|f5&RdGpl&b1Rs;uF6+^~Xhmd| zpRA7RZgcOVxmrdSTtH2DJD?1%rle6O-(|{IPCb*g%C8FQ>Ua^db)c-EoS$cb^+^_s~c27SDfA>^k=-bVx}xQV{P~WoE&K(`t#^5%-m-IdyAeDTPNgC ogkN9h*XVV7klr8}_?y7r1pX%QH-Z1J1paHD?(gsa_^*}vPwt)fnE(I) diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/17cd25351e26aa472f453714a59f507b97580f60 b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/17cd25351e26aa472f453714a59f507b97580f60 new file mode 100644 index 0000000000000000000000000000000000000000..8a5b7f31f2fb814382557c753ff52faf6120adfb GIT binary patch literal 3888 zcmd5;2UL?;77is+M+lGt;^-hDG)sU0Awdji0LdsYKop{Ybg@N>p$Q?OGYClNB7`6v zAqho53@wy6f+!;Dy4XNOEJ#zCWkAJo&g!~*JiF_6&in5@_kZPo_rLG^9-s-Z3?ZR+ zX2}741u9>`hj~6@HoS|K{WDH}8fy9qgd`&LEbnoGw$CHS-S+H<49XH1_#Oh}N?{?} zgs(7cTxL674>sDlBQNf>rIg1*zV>egxa0Ya$eyziO}_=R%6rbCRBH3`42dF_Q)ON% zKb#P+F2s<%H<)E*US$`>MxChRq?{nw92wi$T!S<-&z<1ugk=R-6`-NTwU@4+l{+VQ zYBcVy6Z5&fPOFjdv9`@2SaXnhtod}xL0kq;jxjO>AIfTE|9IMsga|zbbx1!#>XbHF z*f;@I(3Wf8&qC(5!kDq~$uo7BgK|l?X7R>sk8M>K%+$U)LiciX4u8Z_zNgzdXaCFH~%ClFxXy6^S~}omaSK) zQOH3|tRR$ac6dH6;oSY)#6Z%`CVGn&XK%8p5>)#LtWq!m*ni6s!t&h=<6kXYcgvKh zKd2d^A(Qx6aW)l&0jcgPLR26cQ4%_;koGZ<>(P!MD}GTMMMSv_Yq(4)6C!PIQTOCM z!l-Q_H-(7%G^Joh1^SoYtW-A;uw3X_pQ+Awq51zVme%;f0-t^`7uyPGYALn z%~qN7in`JBa3)u)fR4=%eJj*6JV!O=g8&YF8!U>SQ9vRTr`DoYg1n|{2044y?wY&0 zOELt>CP%O>z%F3Qstvt~9cEZ)b71_uW4Ke3zf4S1tfRDI&P|4Glk;?Q&y5DrJV^!#v=u;%=NneP#ta6RaE% z(W2+bqxBQd^RWRIsUE`77e>+^8Yoe5Q}MYm(_P!i^`h6UK@F%o zY4xX5I~VaW79CiqAWs5`h?3T~)GP1aDRwlLM8CS$kn3Am)ulUw$Kn72RqqtRRhxFama7hg^$&54R6REoj zGB&i8KN%we))tJ98k%VPq2#sP(;y^Dn99hemyL%#pNM2X_70dg(ZVp24L?Z7tx}fxFp)HcamP(ab8w+fh=e>Lc-RBv zP3x+siQXpCf-R2CH4;H$WhW{HEHovSbMMr1U6UFE!1Pf0JSu4(d{lg<9X96A<%_&^ zXF?o&>8)t*mwLxS>>ZVr&)d89#jl#`4?k6{BU=VS)Zm&QDe&L4Mf>eDDl=$QzmjiP zQ<-HIT*~!04xWShz3o*9dTFpfhd4v8bsF|$M>COc^Z&^7+k-*Q=L}wLW#x;GgyLvrDl#G(e- z`625uz=?f< zw`@;2!90X3l={NpV%zgO+`ypwwyELO8hyfW^jp)}N5GIBC7z||B#2qMl@JD(5K0IP zBwhe322pK*UhzBIlwLK2vxEji4h>`~sUX=v;cjol)_W5C<4%p7&{xOh{S3oNskv2I zj?h{e?v(TDa?Mmb4hTXG$rg#JuiWQf$4&qpDzT}TwDJset3vE`h=C3V3+@lWQxSq< zD(zntz{eCX;un{btg0$l`Sl;{pS7?Y_(0zv-{1rB~c6lfnV(Y_(c0sf5?Xmicd z&W+rC1FW}-3$7%B^;qkw6Y%-d;erN<|vr(!I)?-)?$$CeG`Ej={qo zd$ZQtkCOZ0<+)_HxoE$fIht^Ee7VA2FLnM7q`Ir)-WEHY%stn9(_rg*p=t85^RpMt zwR#w`w5I9U74Z}0jwBK_btrO-@EyMT~ZO+bxZt#X;||AjgLs5p4# zG1gf2=cq&FtJD#o;Do8}%GNMVvL1;>Q&}kuCRORWt?r_r*p9v1>bk#?I;Orx9beE6 zY_JHen@nDFgvQoVmlD*xj!PXEkLfjvm27jj-Wa9XxT_*WyRi9jP$fjV`Pl>NG!@Nr z54U_=E+i^3=CDQ2^60keoSp~iCs=VB676doQG*2tsx;c3rG9|PoM!342i(pvF~yD^ z6b&PnLoE&USRA^)%l%;nCBpoA*NAL|i`&n)oXTOgU5*X!MdG7y{6`x29q(g#TVhL1 fbg4-$wdG6NbMvK3nt2RlmdXPyH9 zybmAWhZ(>J{6v&Lkzeb4bgKVEdOi_8(F8r4$E>K+yYOZ2uiU`*q_A|$aV+>&MMay* z2x!i@-eI{@*655yY1%h7;=WHuw01yd~ zi)lZ)GGE~l{YLzu11Dn8RzRy%tIeDXm;$aeeSQ`?Th!h5^c!y?EH)J4lpjJImM}T^ zVif|?k{)!cgqQToF;mmCw>nT4q{Rc1)#w)vdM3Y0luSW0nns&TR2=RHXiYlmrua~I z#E!~om7{AX&p*_j_mdazMLpW~W!h>2W?Q8?Fn4-&hEsXcojRy-1Vtz)sZDZh-T`c# z+|y{)1HQ6FWA*_*AAIe5QiXur^uQwx9^iu2=LtdUX*Ce&I=NtFNp;+;WGSF??P1F6 z7vZew@Uj4F?ZSkEd~Q1)H=`@OpldkBwmkB={aQx6Qwbg?q+DtlULICv!Ndyf&}sAn z4h?qVZOHjH!<;&I+HqIa>v5By}T1byUEEOF+*{L;q+zr@9DB@|aWi*igbIIy|6!Rr(C2 zdXm%=BNEt?gIeV2f8SlmuI8ULRWm(v5gVseVOLelKO>PbP!81g8e3H;e#w)(>6l@s z=HY4R%#pBC4$W}0#VS}RYvTk3V+3yGqO=(VVZ(C^vo^u36Wg5r4so1n%Mbf_Mj9|+ zx?H|%{hC8&%wU_!-QBoTozbt%!@TIHA|R}Zm?$^krL+9fAjJ?u7i@IqT-+4AngMK} zagGf}&wPGMjZ|s60|Is-AEEL7d+9VR)b2rAkl@#>LFz5*s}<7~RD*aSXNK~Qf6~nO z)2$NCavHiUcAsy2Ziiw#0t7fs9=EP}Nd^j#UHhy0u`(K-1ti9{;~gJ0k8Ci!jg-)4 zE$bmmK6HE{bI2SGNn9>jy-+)mmqE4eX-|?!LFM0p~b+G7~J*wpz!(-+^JZFm>$nbb3e1$(uBl!!JA0bcDR>tL^$;4uD;0&qk|gwP^cu#_057EyX}6EM(6~@c^pd|=#&VRgeq11^_=%LT zpN3e$Lte_f(5zpd%m7JbFWolUy*>l7NARI#bbQTWF5Qv(d3xwARrM9S!nmsFSY*m# z8PfFN+OuN)EqV@qdWdhdkkUp*)t<6`GlEkD8oc07VmIeq)b~-vWN{?3>EBwd=AJDt zI6ly@vP1wJEni+VG|>t}$Y}cHfr;ce<$3Mb-NAk<0*vPY5xXXuD0((NUUcwymJ@Vs zn;rY;>M)~fYF-iYz2VSK^SwX^L=OB7w}dSNIPB7{P-HbnAa0<1Fsl+QOsp#`qm&OC zw*bG7YkrX#U?Rag>C)RO8YNtRrHNOGB&V_-Uwfr%(rN(MoNd@eWbMjc64@G*TMB27 z2<-bX!A?Q6eq_LFz0erEi;~g}yys;4p^d5dYb`ob^*~rFruP|WWN#oj?7UIELATni zGRM}YBHP+uKc2At2~gB)1Gkue)GV^vpbb~N6!8q1@;k7ex|%N-L}`nY*Uji$B!qWh z*-0D?pJN*&w_diKyk6;NKsvm!qLVNj{KPt_bQ`9_hj``@W_y3~v}NaBg1$hV{T&-e zZ_?O|tllBEY!g9Nuky2&49l|3cpgXeU&E)gGl|!Fo#KTwb#HTbPn-R?mFC~2WAJnw zZ{Gj#S@smPp@ihUlN?sOL*-9SZvZ*_tBqK|)jVCC`y4Tnk3GxGqH&#ko21Yi+uvDf zj?<;6r$9oi0<2URL6%&WhduhH2JFVxiKtI63~wcF6N?kO)xxjFAv%h1s;Mgm$TFLs zrr-;%*_JTz%_MfZkY1SVv5`j;6UP(1+fx>{SCft) z8L`;NNJ5vad=$k#0_2Kn8D*%OW#Q(NkDsP3OZq+A@F_YwbJ5Z2cm=n_Jid^Br7}%jbWqU+ajzUkkwD@r)x4O@%}PD!w0AWV zRpa7IRyXpv*vIKaV~|s$K2HnC308MU=cO7wyuWcU|k=3i5Z98S1H?Gb-|G7n2-bcUSQJ#se6_|W z$nDR*DviDg5Ua?FN?tzZR7G>)-VG^NKJ;VK?fl#N!SR0q0`L6+1RDO0!2cjHx{mF8 zSvG8EA2b2^8-f4-2&DYg2-N!@K;Q=r`0c0n{YvncQS6uFouIw4`a^>D5e@m%QvGp{ jdEdmJ)aZ9N{7&bV-GTfLC)(Zp@Z$b!{5_)d{(*l3`i!B$ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/47cea8c6dcdcb3d6a79eb106ad0e441edd97d5dc b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/47cea8c6dcdcb3d6a79eb106ad0e441edd97d5dc new file mode 100644 index 0000000000000000000000000000000000000000..87f2a17e5ff16c7553777002cf7342a95ef1eca6 GIT binary patch literal 3888 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 Z%T3yI^Q9)uJQlyW)Tk{tY46-0@CRN{&m{l= literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/605ce38a081ebee9888a5df7542b9785a465f79f b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/605ce38a081ebee9888a5df7542b9785a465f79f new file mode 100644 index 0000000000000000000000000000000000000000..c7bae4fa7c631d1e52c6af9c14769caead454bb0 GIT binary patch literal 1455 zcmZQz2>bv49|Hp;1LJ?U|0*ER-3>$#&<~+kJ!1zi#ORH6S---D(K~QQ7bRkd7YCzxl^AU(>c4)v1q|A!;|wHcAu?UvijsQ zQ>Cr*=2?U@pP9t}QRc~Ojtz^g3p13RXU@2|X=z7m`L@jy%Y6d#o_p=tXyEKV=k)=j z+L@)^3oXT$gX0?(+bX9~VhI%8j?)haO?_}(_4>?Ro1RQgj!~~E5D%M{7ju-y{*Uf! zaSo)5wA@0mJjj36GcAt-E;%~Q^wf6YBIVwRnGIY*|7`LZ1 zf9H~w&{=4+;(Y9Fy$5NM+pP=I5kEsSK;g(+#LM_d21>|Zz2+#h|xm;ZJL&fx0&(%&k z&3T@&{q61ck8esgUn*IU;h{I9;m@=KTSEh`8M8k&wm7lHjZZP~ZFhaxoX`MPrFm{8 z3yT-HF7jdhKDA})^c^kg`p~q+3XCRjOrazoaEd{T&|gT2;%8p$CX0!VE8_!hFzn*o z@ag-h4~uH|Hg)YZT{LZJ_U?>hbundCp;B5&erZdB(rc`$v#dK#*KBgm{n6RIY>92E z&o<7Gg_p7x#{@C{mYkY=?)S9S>x!~oJTBSJy{~H$+wMb)W;{8|lx@d!*|PZc>8`8V zOQ+9#akAOVaGJzI<7Jz&`FAH}wJW{Qo^80eXw?QTtFO9cODZ$l#LT826MW_Cu~V#I zx1d!+P6ub}xyfeDyJuykch2xPlNlm>-nZ62(r8z&TK=oq?d`0D zYk#;Weyzw{loYR&VmrI>owvl?Dw)!TeU?!NnlFT}KW0%7PIw$qyGPF`@mHdnkxnL0(ahI)jyZUckof-!^P=ug3eb2II4AQ zUBi(r$+AN5l98;j?^-6umJ;)9OIAT<=08gubeI?nt8!Aem)WYF=osVrgx@npFHX4f46pzBR1lv=W!aUxAK^I znyfzIC1fKJbUbPYmfXz6;J~mQ9+8X;ieGs>&3!$AWdj3H1_BJh6wr?M?&i4d5X|q0 zX}KsH)p9`9vFdp`SNBWHjE^P-)uB-`GV4PV&v&tXx=`Q0!ARg2Gt^ut1uW@c1xx}^ W2%N0`g8`5?^9NKFi2DDZfdK$ed@57` literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/67d8113ef1877ad5cbd6d115e34947b4f120e69e b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/67d8113ef1877ad5cbd6d115e34947b4f120e69e new file mode 100644 index 0000000000000000000000000000000000000000..71bbcde0df287089e686a615991eea2b3c68ebdb GIT binary patch literal 1469 zcmZQz2>bv49|Hp;1LJ?U|0*ER-3>$#&<~+kJ!1zi#ORH6S---D(K~QQ7bRkd7YCzxl^AU(>c4)v1q|A!;|wHcAu?UvijsQ zQ>Cr*=2?U@pP9t}QRc~Ojtz^g3p13RXU@2|X=z7m`L@jy%Y6d#o_p=tXyEKV=k)=j z+L@)^3oXT$gX0?(+bX9~VhI%8j?)haO?_}(_4>?Ro1RQgj!~~E5D%M{7ju-y{*Uf! zaSo)5wA@0mJjj36GcAt-E;%~Q^wf6YBIVwRnGIY*|7`LZ1 zf9H~w&{=4+;(Y9Fy$5NM+pP=I5kEsSK;g(+#LM_d21>|Zz2+#h|xm;ZJL&fx0&(%&k z&3T@&{q61ck8esgUn*IU;h{I9;m@=KTSEh`8M8k&wm7lHjZZP~ZFhaxoX`MPrFm{8 z3yT-HF7jdhKDA})^c^kg`p~q+3XCRjOrazoaEd{T&|gT2;%8p$CX0!VE8_!hFzn*o z@ag-h4~uH|Hg)YZT{LZJ_U?>hbundCp;B5&erZdB(rc`$v#dK#*KBgm{n6RIY>92E z&o<7Gg_p7x#{@C{mYkY=?)S9S>x!~oJTBSJy{~H$+wMb)W;{8|lx@d!*|PZc>8`8V zOQ+9#akAOVaGJzI<7Jz&`FAH}wJW{Qo^80eXw?QTtFO9cODZ$l#LT826MW_Cu~V#I zx1d!+P6ub}xyfeDyJuykch2xPlNlm>-nZ62(r8z&TK=oq?d`0D zYk#;Weyzw{loYR&VmrI>owvl?Dw)!TeU?!NnlFT}KW0%7PIw$qyGPF`@mHdnkxnL0(ahI)jyZUckof-!^P=ug3eb2II4AQ zUBi(r$+AN5l98;j?^-6umJ;)9OIAT<=08gubeI?nt8!Aem)WYF=osVrgx@npFHX4f46pzBR1lv=W!aUxAK^I znyfzIC1fKJbUbPYmfXz6;J~mQ9+8X;ieGs>&3!$AWdj3H1_BJh6wr?M?&i4d5X|q0 zX}KsH)p9`9vFdp`SNBWHjE^P-)uB-`GV4PV&v&tXx=`Q0!ARg2Gt^ut1uW@c1xx}^ Y2%N0`g8`5?^9NKFhyn_7AaQ|A0I`}YTL1t6 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/8684b01e0f5125cc689ca1738e73327ec29b0823 b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/8684b01e0f5125cc689ca1738e73327ec29b0823 new file mode 100644 index 0000000000000000000000000000000000000000..9d196ee024be55fd91bafad184a8db11d61b0f88 GIT binary patch literal 3888 zcmd5;cU05K77k773ZaGOu8V}w77aawjx@# z6fqQO*%d?qLEk;cdVMlLu&ZRP3WTAH;$qc0tlk%FhcZJSy{9G zfbg_#jrC%ii1sOy;*{?!cs(8uDE&}sc(J4dI(#*@^M?pZ?Qn&02M!|HJyz6s6zL$lVR z=82tkW}Tv!*6`$R;Fo=`Jx<7=VXMw4nC1-9Uw#(tyPQ%90xyTGktq>UeO8x4CkD>`pGD1%;ec<(yO18lssV{?h6NA;z`{h2)SfHVrNfDls7=I5vp* zJR%(rIsQ|?xn`}bYA579KnHi@%ErhtIr@5hYP&i)x7@eWd*CuAGy)}|;CkAVV(k^B z9eEy}%#3O__TNk)R6Ht53&q^)#CI!F?J|udKuQ5(^~@!J?{Ao|c*R$2(K$+9!kUB_*I=709Xx{?R?aLX~X_0-+GIuwl_1Yp{83(x%^+G_@k;rgI;Dytyg2Ivk=yu59Dv$iI1upta=hdt0id2OZQ5#Td3DZcFAQu}bX%rBRXm*F&HIP6H$8(s;M z!;jaB6ie|sB~jZf!_ymax&uIf?dUP{%9mk4wlIgD@*aecf=eEjv~F|9UCudE6xxi9 zZ8jHi7706aY$UDUSO*lpShRG$Y9xn%Gw*Ck;EUJscj7z}2uSrNmTtX&{v3dPCMfvG z^F45F{wW;de;fCcL4I%heSi16NoN3{8WK^tg)@CYa-Q7b%~}idA-g(ByXzLly|fg& z5+M~5+pT8Lz>T4=4d{fJXM3#J{7 z6DD6RplsDX&2jve=i#15E)UDRo?DNmAPr@cTk5!c#o4QX<0?l~zpiIB#0P8o!Z?6z zY&#SKB~}15!q1~ER9ANB+vLy-b!V_yIp-MjvcNQP<;sc$qthp`ZR~fE zK)U*aoVM?>Z|<5VnfL2}n8n;sNCKaRg<9>;kWmSf7ZTc{VywUufa;Z#EaZK2)qgw}8ApXpyqSd1X@FmpN6}vVLF{ZlX%5! zDf@J3-m%`=XA5Y+kkfa`hga@{I6NAoa*JyUg z-72wZsxPpNsHS;b6xjd;ZI1|tzt(h&{Je6W+6=C}MZyT0oVaR4 zWWYeo9n&_F8C8rzZBZiKAz3%HgV(C2)*T{bilh%--c-|1KdHv=2ya z%gL)iSeKjmQWNo9UR+pJoVVa`b(uV#u!q|HZXaS|&SGL8*ST{a+%kJ$eV6OMG4J1N z;`i<7`AP+{)8jaq{_1zmM&_XYsmsP zBt#)XL(%Ob;^A>t9A2rXdL`b_V<;>Wk$&U(64KCS4%Q)Wh~7i)fr}0u)TlQXg@UwV zFxf>71@@p8e%gxD;aY`k8!AvVE|SES)K-5kxV4!8^sBOJ!v%51)VETyOyVA{p4LzVIpVEhfKu!NShy z$-FG6a|6IrmL8tCc+|EWZ_l_JP%3@s$AsItw>A7@{u~7Y{}&3J_{%6T;MWw0is9}% zmTn9Fe<@JqEd^TLv9NK&4o!-v9ioZUqeavxUo;X-OIBl;bnbuN)KgBwWOUiaa44$Y zW^A4``f)AAt6fF&@i5A`=l+w-F>q}W)@>s(sBiqMvA65CG30;f zQeqT=Y-3r)23}jgZl*X)6u{{Tb5QdT0zqhzu#z0akvEm1jx?2!n$-N@Cd@jfFup@B z_;R#*YXMR=`I#oH#NuCL&^d=pQwZ;B0xgw8ElA|(z=M&Iqmpc6BE1q(`4%=Ikv$54 zCYu(i8tcD?I@D9Z^?{TH(#NPn`jgZVBJ2Qf93;sbr6Xq(VR4i!x_(2hYL7cRFuC8( zpmpd^Qpd`tsNsQgMhbRyVrLs+b&AFf$Zj+fc=Q%d$CSJH@fGEc8N@~Z@ej?;CK zN@ZP7!|O%)x?ax3t;WF^?lBfmYgyR27i>?cSzIt^EF7N8y+lco=kAlVSDz?_#PPvU z6ggKid6l9D9(SuC!z=AQ!sNA`{krLGI)<>ZLHEabVX^K%`C}ucdt;}FVYUwAMhVwR<2tB literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/a0756571c0412355735b5fa216b04b35b0cbc75e b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/a0756571c0412355735b5fa216b04b35b0cbc75e new file mode 100644 index 0000000000000000000000000000000000000000..cd41d4aeea39dcc2259d075934af243dbd8fcf90 GIT binary patch literal 1493 zcmZQz2>bv49|Hp;1LJ?U|0*ER-3>$#&<~(VYl$~eJxVUL)M{D`E%@fOg0`s1G?b&GH>^|r90i)WPrQQoI z#g~KQ8y4Ftr%_@F6y1)~4+u?ta9#EK%w3zFOiqqbuPG1@o0b=Il*j&$?rU)o9ihW< zOAO~6lvvc!HR0ntJe%r=dwS$}q)k7(j=x0$u}__{eNK{qmV&W9Mcr!;@(l9kX| zXtUyc>}|aVX_DM~to81EOI_rx&2W9Az&6LrdyI~DoEF+{WPQ@Kku|$@6aR?^L1G?l zyVtny7AybSvS^>6;^B{}1}fo}UlKws&2I(dYCZ_h{?NHxT=hf6^jFW-PCCtbp0WMy z?e>pvN;Y3AS&-qOH>2Utv;$j11FjjfKQ^{FvBix~G4O47eb}7P09K`WZY2wg7q~9+ zVf{X}W$N@DE$aHvw8aXHY;b&|Bp`5#L5t8|NQvTSUhF1|iH79$ zYWFsE?KE99ZE5!IjAL~%WmTb4T1kFsOM=pCtg5rDJ5JYZa?btH*}ZIuZK}^U&X9$d zvKGe#G5(gEntbl}wAJg1vR*tc+0MPMYZBY;LyKlSIm?u7$8_1U`1R?otJ+Ja&wO#R z*~@U6#6sg`o3i|wx@Ai$Guy<>rXLf0@HdkgB7EMr)<4o{SFc+BtJ&@Ctb}WSxF>$C z$Xt{ZuasgtyYZd3#M~;G(uRGOQ3skYgs(qlQ|d7(m8os#gDH<^tBTFob?K$)-snl+ zx9s`L<&_q*^?;-P|7`ofRTY{m1@r=U-elE3m&SMSQR2hJ>2HG0R|Gh!b!=V3kuAxx zLhzE2tg-J}CdZZ%^K462L1yMZOB{5V7!0d&Qn#1cs-5WVD9c~tzuqwC+Kwj9CdT3^ zu?L>13HC_pEnoKB$-!5yY|rfi=)>F9sAc8?=A;-}|v8mhPQn0cD4KH()~ zBN22wY6q6w%*EiqupJ(ej0}ojc|Fa2J%MEd15gG648au8j`!~7xa|zys zK-ID8c{*43OUsOpCI!`@Q8F^?Lle(;v30kv+0#FE?tp0-m YkT>%OR271PITGYV2mmVPfUzMo03FgYXaE2J literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/d6732238b415a089c23ab724dc0dda09f2dec182 b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/d6732238b415a089c23ab724dc0dda09f2dec182 new file mode 100644 index 0000000000000000000000000000000000000000..54cd3a6194fb14e22ea4e801125a3e54f3088d38 GIT binary patch literal 3888 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 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/epoch_too_low b/soliton/fuzz/corpus/fuzz_ratchet_from_bytes_epoch/epoch_too_low index 41c9df0cf62b6c55b32053672d950f0aa8566fe1..4e1a1b03eb9bc4cfd883db9d2c5536c7718b13a2 100644 GIT binary patch literal 3855 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 jHJ7EH%~5Nl!yCPSCh%theqV_|Mq=ua){AJ_Pa_ literal 3855 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 literal 3855 zcmeH~M^qCC0)`V>s0xH$qy|C}DFG4)3Iqrx(py3?^cLpPktP8N5L!s+WdJFm1Ze>& z$qY>(f{vq%A~2&OAc8nMC|CfOJ?!q=w}*XR_uzN=ZvXLn?*{<>3Gm+*`v$7t;9ooc zQ$62+^$mam#I6^NTUS!_rVCgacJ?9V5RWVgo+dg?IOGP`e!6f{WXMb50GR{bW&vNb24MrsP6m zn(S;#Op{m1>B~TIyc|*kTsG6Z?a4Lkq&PJ$O@Z{fEp=R$pcIzFVTVTM@eJ9Jh_!f$ z39xpz%Eihrinwt6%dm1J)#gIYHF0-aYC+|_582j(p&3w4xkBwxc_(YAOt-?|GrZWV zA*UY2A+RqD0q4~2+4>}cs)USUGt&qw+z3IPw_Z)F>ml2JSXt2Bm{TZ@`0n*+*)-cLxcc=f_LdYz})`zj>UO|C{* zvmJM4#6ERpz4JY~zhQHtt?{}6Dv{q)?&wyv3zv{eSIUAY4eDf->8JfC{z=#~Lki0+gkQmLCsSv-hmH-Crn3#}Sp{n}YuLZ_t zM!Nw4!*y$*bKOG>Gb;Ar{?@CxV>&nUNH%{$(}-z790dWX8ZmYH;X*+J`ZZ+On%Q~6Nx~N^ zUyhM^F)s17R{(mdZ|N<;jPk9s^;k{h3_tQyCuKwj7b(3ds;!h5f#h_Iiy=ESu4tA_ z>STXPU~Vk`m@pKcIPP(yTed!=>ji#V-?(HSER`^$eCD02E+y>v(Pev45?TwFL&$wq zQyyC+yc?^Vrfd0DERZt|dsacAT+vqX{-g1EZAVpYEE#kF-BX`izrUoXsU%NKtc}SjIuU{tXQ>wp%L>AbaR%I2 zu9Oh!!=!v+zEYG2!?pL8ohaxkRqimf+GoK2&w0kyXzGfek{G-%d?dbcjHGmM(dg3S08>3D*4`Gy1xo5HQp@qClySIQ-`wG4ttRow}&6 zdszaOqYeHUYenYChit<&S1DvH8+2>wnP(BTMgJf^=p=7@)nT-xCu(SX__YO3D5lwUqZ#7Wu(D z%@R3jD97jF-sf~xXjyhv&AIwbs@@(}64((3P$aO1RWcvC?Ts+1&4?s%Jp+#fW)fZ1 zK_iKB;~9NJsNO`u z*O{-n9YW~#yJl@Zc22bI-Y2FeS@z^Fn+Ov|L%Vp4akn$#;Qmf;xgowt!c;#&qWJL) zqrXe2dfd?7!}Nj=G<4y7Ll>ZX1Ks{RWl2XpXS4UHuS(BQ^g6nm- z+J$CU&yMiHiyecMwkXR|{(#cCWFDf&V^JU1T1Q29x!?Aa!nS*_eaiG=wra1%nLwMu zbYNN@-FXHOL~^x~FaMMG5vP&T&KZ?864qy=5~_q^`wsVvYAj-3)lE}VLVJFCBmi95 zi+2Be+1ZC9M{4%tjhaq3@2EGwhElky!t|1v#sL7+2XLbh5gB3p0ZYU=Fo&UH?oQ;!jvNhlOm7#Sz}R+OeL zV+}kLr;w77wm;?W@m@l(RqQ8}UFDEaBz_aHtZYa3Pr2MuLRcyr!q>RI)RTs#1?|Gj z_lz73fAQmLdZ%71(Mzb1zg_ml@VqT}jTUR6{qQt6(Mb~PTRT z#Ckj&$p!KeVnekG|TM&~*s zC9-&95aGXDmgYn0L72bZ$xlY3-cb=cECmdpKTa#!iZ9g9b@4~vJKV#C;0^5Z2DXyu z!0!2BPS7M582elv>tk^7PHyhldrCaf$<9zPT4l83*=4C1j;TP7*Av0t46VXY>d)6* z3~+3%1|FR)2nj@KY88#gqH;F=|GWmM+j%Riviy`Y|Hf>`&x0hv!XjulVM z%Z^`gqvb{3=DFYe^<8gCok;Zl5&7KwDgnqdRfF7`a56qkvk3nU8Q3t9zowmb{Py?g htZnUwmYdFM7r!U)djh{F@OuLPUlaJ>r}sZ+^&iOkt6=~D diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/1d1fbed42b15c0df3226c37ee01efeeb52b73811 b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/1d1fbed42b15c0df3226c37ee01efeeb52b73811 new file mode 100644 index 0000000000000000000000000000000000000000..44ad5bec2fdc656959d060c5da5368c4e450b3f0 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rMS02mk;Sq^v|xD`)b$}qkLpu+U{1?J=C^)Mw=J&tAHMsqyPW^ zLxWWm7QE2Vy9W&p#{d8RvojI`EP_xK3`$B{-~kOWf|0p*VsJxbLT?3+^R20?9DKjN zQSfM(RATL#v$Mi8JgnHk;l@pg9^vp1m${dWbQE_TZjU&+>PvzB$*OCb$7gZ!Io{9; z4(xa5(pa%|{exQ@3rjc_T64b<*Yn|6_@Shj_gCwbcKtowWwFa9o?q2DQ+o9b@hoPM zX^U4hsrfJ}8{H^A*FA?nsW?&bQFE(sW6Oul?YHY=9!y+xC3fX^?df+G9K0!gVt4%A z_Vnh2X=`#!A7%=t2C=3bWZJYt?q3Vzm9Q15MJx9+o)Vp7de&wA(S>cx<#(LkzURid z_O`=I%)Pvuz{KX=R}(^%T>pMfSaqQ}_{{S40+$(19H?H%{U{R}pxZyJzIS1IeDcJ_ zYymGycbtnVzkD%rvW=XVW8vm2ezpXe-g;1zUPw4HhJj(pQ0!xu4<*ICzgqvd>+k6*Snr` zr!&;NQC*JBpNkj}qMV!!+r;f|PUcxUJuyphj_KKqsKnX(!;)rb2OsgVVBLAZ?Rb*v zs}LWE<*aLVE9)L=+dZSri}_W+m(4n#SFnfaI8OWAz#z&~K8GO#WH}>)4$Fb_c84xn z0adh5%e~6F8A~Jyc9aPE2wtp_XpcC$>PvzB$*OCb$7gZ!VFunp)WDm98h9vyWef|f zM8!wVt-_5hA2zq&u8(;zanY67mEX0e-&t_*ru2#3@ps$Pn-iw3$uWJHDV!R_n!?Vs zX@}gu7RD=KD^iPA?q@tD3JeLC^+y-BEtlVMdi$Om=i1v2FERJ>ZUPgVcVA5iQF8tJ zIbqd>=HN5S*9(*|oH$Uuko!?4)Ti4&tiE?)dVKQ4#cTmDN_U)#D!+U&aDquz)0}>Zri62@3u69p#vsO1+GcxuaL9W3>~JniJKpQ* zDnb)pG|inDsj$H7nB1}jia(1lU#VX6fjQ-&w#1QRhDDVI&qZx>jP!5Y)_10h-stPB z=K6iCX3mSyy)uqPJbfZvZCO4dFS&!iUyv@{b8KtBaH+&1ja%Els(W>Lb?q(+VGuI7 zv`X$^hquAnIjhgCb#pJ?b&f?+=Rn;HPKJQS@a{UDaQ$s}c&0Eiawqc~3){dM#CqBmh>Gip}%)vzf>`N+Jq#gPgjX;4is z$^U}cqJKuGV!rc5bk)3^W4rvd%F)MSJBrTxB`UW!%u8bNzu>uN{?=gw_-zP@cO6iBe{8ne<-}NE!YA{~uaDiNeY$XuRKp z<}Akl|NgTxf`KE1!bY+PLPZ&rl(xW2EQk@<)MJRj4PazYhwDdTfLx`d1T>J5QG<~Y soY0t$h{u4<*ICzgqvd>+k6*Snr` zr!&;NQC*JBpNkj}qMV!!+r;f|PUcxUJuyphj_KKqsKnX(!;)rb2OsgVVBLAZ?Rb*v zs}LWE<*aLVE9)L=+dZSri}_W+m(4n#SFnfaI8OWAz#z&~K8GO#WH}>)4$Fb_c84xn z0adh5%e~6F8A~Jyc9aPE2wtp_XpcC$>PvzB$*OCb$7gZ!VFunp)WDm98hF?PD^c-L zbE|M;%ZJVFx9ejbOk8v&cI9{N>30?!l)ialcl_P<^yY+VYjR8$3jn!nWn|J5F!kbK_il+u?*ro?~GfID=Tv9rR8W zS#!r(-f)WCDWT)_i{{uB=bU#Ds+*iOLoofgiD^d7>b@E_#V8+{m$o=kAtVi|=_UDJ zFkAG`=v2&izKE`xmvd~Fzg9W=SZqhpdA~&E_J(;$EdCcf_sri~=oP~wXCpatiC9x+ z!mmHA#@ClmYf5%^3Yo^O?2^!$Vg$-_*C0{K3@(%Y3j!&l|Ns9(%O_D-IR%aPd(fQ4 z`2XL3c1AF8gizQ>7D1>egObt~c!>ou0-JgaF}MMY4C-+GNDPpxl$3x5GBRo~GJ+Et p^AR!G&EKCi39x!X-24yd8xRZRS2ifk!^2ZhP{0VwkRWLW1^{uV96$g7 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/4a30b017bf7133aaaebcaca46abb791045642773 b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/4a30b017bf7133aaaebcaca46abb791045642773 new file mode 100644 index 0000000000000000000000000000000000000000..20a0fbc4438e6311ceb8d2a9873d482ff321fb93 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH$){9R0kTRL;&n209FwI3=E7c2fPkk3O_0CXV(<4;1konnd{%E zHyr29zmem3Ln}D2-N3I8pIYbE|M; z%ZJVFx9ejbOk8v&cI9{N>30?!yeWNRcl_P<^yY+VYjR8bJ$>2Ujp)%Pw;k58Vsm@VK% z>5g+z<(Dr;PPUQraxC0jZgg5ZZ{}0}!xek>>?sFgAYfon?AXA_!0`Y7|6c(NOz#@Q zyX$nqfrfqEyzPga`r%`9D{ZDNpJjV8?CQg%(ltzbI=((%!)N63b;8*XYD()q z?~9pZz)jm#`M{j=P+Q{2F~g!tgXf~QIY#=oZR6k(b=T-!Dj)?m4!#U$|6ak>;)KU)8<3yt;N5g)j&iTv{b}u*2J6 z?VQzT*1EYD?>fgKsdJ$21t&uQ#BciB?(j@uWaLifITp5oGl=!vLGM(NHFuol4W`JQ z5;|VLXpUWR&UqK1y2)8H1k;b3m}b}G zJxs@O+GkOo@;M9{YI;fj7t9v@GddOXoiC!R=H(pQ<*!waJ{H?iblxvfxxHat5{v%@ z&pq?E7J9|-$k|BFTq4$#negjRtI_r4)0&dqokFH@E4w7LrWgTZgy9+_N}0iB(tkl9 zWdw{RX!#@xE2p6Geh-?V82|tK&(25)un0m`FeoW)LCceb^n&H#1~4+H!}TLEK(10! z+P!-_Bclc*BRHWk9}$z?{QXIj0IMg&&HsSD0kJ@SWrNZ@JUj&j1&pu^36f@D008y} BJfQ#p literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/4df99d4b875ae90b210d2cf642ae73477f435076 b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/4df99d4b875ae90b210d2cf642ae73477f435076 new file mode 100644 index 0000000000000000000000000000000000000000..9b0603ac910cd6765bd1210aa792c372912ee876 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH$){9R0kTRL;&n209FwI3=E7c2fPkk3O_0CXV(<4;1konnd{%E zHyr29zmem31I;xcE&&HA5pd9M0uEY5z(rcYf&K1W8Y{N0e{gGKVF|}dYwkDVdOjQr zKa>>n{%ZZ-uD_?dEOyz%^Q$^%O0SmjIj*DAvRb|P5IOk0y< z`Y=;CHHbBZooUmKBlQAH+@8&exv9Kir^`*SbJ`=0uKH47f3oVD=J8pae2zEJow^X! zsZ&s$N;Rj+{cB;o61F0>Xyty!Q=)TB&$_HXy0C4z{EpMx_uM$w-gbD4v6pw#5_2H2 zdH2BkOpi~VxR@>AMd^-nQRSB} zMozYo^KvZQTyAt)J8$Mw{=*e}_UtJKVjy5(Q0&;i$iVRb|NmbB3{3AD!@KKr!hwc; z-MsCGociHob1QA8EuUq3GUWPC#_a0DrP4J_dpf>8U&CkQ@^!-54{A#5KJSZ}W8?DM zNTYOZz@}+VzeH2QIoAa-|2Sh1<0);ky*)T&y?k~!m!%!=^>h`X2``%FPK;Do;B`!H z*#gC%#h0&Culc~7@=#mi$T7pBN`vR3wmC-nw{7b?(?xIebyjozK2|g5Md)4`$0D9S zk*>BZACZ^b!QU@Pm+m>XwO?3QVv**p?O)Zsy1cq}7lkkg8C+T=cd*0TVC|gMXV$v8 z7w_S@%%e?ip=f%&!8zY}Wa_f;~*faoT55 zp7J>i8ESe-{uj&^{WCfh^PMlEtLEh#+vTrSjy@LKQFPufQMtWgUJ{G{1Ic yc1A`GMn-T#V?H7#yZQT*CIMDYh@1ZbeFI{F{K^KUd3bmV3JMru84@JTzyJWZ7%p4@ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/507c6bbff4c5a2142afecce5db11511e6bce72ae b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/507c6bbff4c5a2142afecce5db11511e6bce72ae new file mode 100644 index 0000000000000000000000000000000000000000..b371d51b444b93764e01e9ffbc3405ce6e13f00a GIT binary patch literal 1437 zcmZQ%fB;580)T;WH$){9R0kTRL;&n209FwI3=E7c2fPkk3O_0CXV(<4;1konnd{%E zHyr29zmem3Ln}D2-N3I8pIYbE|M; z%ZJVFx9ejbOk8v&cI9{N>30?!yeWNRcl_P<^yY+VYjR8bJ$>2Ujp)%Pw;k58Vsm@VK% z>5g+z<(Dr;PPUQraxC0jZgg5ZZ{}0}!xek>>?sFgAYfon?AXA_!0`Y7|6c(NOz#@Q zyX$nqfrfqEyzPga`r%`9D{ZDNpJjV8?CQg%(ltzbI=((%!)N63b;8*XYD()q z?~9pZz)jm#`M{j=P+Q{2F~g!tgXf~QIY#=oZR6k(b=T-!Dj)?m4!#U$|6ak>;)KU)8<3yt;N5g)j&iTv{b}u*2J6 z?VQzT*1EYD?>fgKsdJ$21t&uQ#BciB?(j@uWaLifITp5oGl=!vLGM(NHFuol4W`JQ z5;|VLXpUWR&UqK1y2)8H1k;b3m}b}G zJxs@O+GkOo@;M9{YI;fj7t9v@GddOXoiC!R=H(pQ<*!waJ{H?iblxvfxxHat5{v%@ z&pq?E7J9|-$k|BFTq4$#negjRtI_r4)0&dqokFH@E4w7LrWgTZgy9+_N}0iB(tkl9 zWdw{RX!#@xE2p6Geh-?V82|tK&(25)un0m`FeoW)LCceb^n&H#1~4+H!}TLEK(10! z+P!-_Bclc*BRHWk9}$z?{QXIj0IMg&&HsSD0kJ@SWrNZ@JUj&j1&pu^36f@D0071Z BJdpqZ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/518d4ea75f4a0b348b343f20ee152cc479da595e b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/518d4ea75f4a0b348b343f20ee152cc479da595e new file mode 100644 index 0000000000000000000000000000000000000000..18376a196df2b2491d44701e3e0b8585cbd8dc71 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rL{0c|jem0)0CWI5n<;8OTWaX-7JfCZnJ_RU=X zM!n%UZ~l!O#~WI~f&K1W8Y{N0e{gGKVF|}dYwkDVdOjQrKa>>n{%ZZ-uD_?dEOyz% z^Q$^%O0SmjIj*DAvRb|P5IOk0y<`Y=;CHHbBZooUmKBlQAH z+@8&exv9Kir^{_5=fFb;cQC95OJVgqk{~D?9Gdnr7i^c*I2Cu*;P*`C-ig5tkqNyO zJkGbKu5$4G`bNQ{VN!{;YtGIJ&+xEf2ZtLsC3=LzLtN%wGSX4pb+|p^=&COT_9v^Z zX&#@&$%h$u3sD1a3Tog{C9n^7R6j8BQFiUda6@6Pg^ie^`C*!u0s$ ziHq3+UX<=Q7gc`wV&r5SIWNb;&E-a?wew~^k2E~pIj0_C_|Ns9L zz`*pbF}%A@Cw!Piv5r;U3r>arh~Mud>7J9|-$k|BFTq4$#negjRtI_r4)0&dqokFH@E4w7LrWgTZgy9+_N|`}rlH`9u zAY}xMC20913M;3e@qQ1Qp&0-F`_Ilu2(So3RWK+iZ9&VE`1LZdfaT!^Ffypa^&>Gr zu2ND0x`~ldgOL%O(3p>i$!`Asq)C9)6XNE7K;M8^AiuIfX&xS)f`S4@ScU{iGcW)E DK<`M- literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/59956e9a30dcb2c1d41aaaa679923074b16f6175 b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/59956e9a30dcb2c1d41aaaa679923074b16f6175 new file mode 100644 index 0000000000000000000000000000000000000000..a3cb944ef36fcb5b79c4103788cc6ffd9a285c41 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rMS02mk;Sq^v|xDu4<*ICzgqvd>+k62e#%Iq=XS5DdEs1j8y&I5;%zWiHq*sc|aqs=@D>%)JwX8zK{WD|no5OS z`}K{2N5iBNYuB8e6`tW?#SRWPZc6kBhljY#y=0`Lxa)9x#L-n>3hYl-UDG^1i<1u= zc!fK@UJv&QkOv3eLSW#DBLZ&+6Bm9Amh)A9BB z8a@@5uM^IGP*Ym>d0)&N8<*ck8l`IkHcfN-C7Ke>xh{zL#~FhdPidR&?ZF}I<+H=N zEbVx&r>h7}c+oU>Vx+&6%?IX`huRWHju{qJ8ax-Z%`wuyZCl@& zE_$P{vzqJov6?wALifrz78&%3bhTyqh`i(u{(eEabkDJ^{lcXZi!^R+|EliQ<<+&j zD1<@C;L<9&gB{)mYv-&!v)0YMc-J`=Nu2|AFE|+jAb!)|c86yQBO`Y*&#|x#oI$MT z4tl4GthwVXZ!ksfl+f||MRV+mbI!X6)lJTtA((#L#5AL3bzcpeVw8`}OWWPbx`*0! z&uH^veiiU#v(D!g>|r{N(>{yxl+R(vP}58DzhJiLpV6t9?|czmH81DbE`P0Z^s(5E zqVs-<%IyvFl34sNcN3I8pIYbE|M; z%ZJVFx9ejbOk8v&cI9{N>30?!yeWNRcl_P<^yY+VYjR8bJ$>2Ujp)%Pw;k58Vsm@VK% z>5g+z<(Dr;PPUQraxC0jZgg5ZZ{}0}!xek>>?sFgAYfon?AXA_!0`Y7|6c(NOz#@Q zyX$nqfrfqEyzPga`r%`9D{ZDNpJjV8?CQg%(ltzbI=((%!)N63b;8*XYD()q z?~9pZz)jm#`M{j=P+Q{2F~g!tgXf~QIY#=oZR6k(b=T-!Dj)?m4!#U$|6ak>;)KU)8<3yt;N5g)j&iTv{b}u*2J6 z?VQzT*1EYD?>fgKsdJ$21t&uQ#BciB?(j@uWaLifITp5oGl=!vLGM(NHFuol4W`JQ z5;|VLXpUWR&UqK1y2)8H1k;b3m}b}G zJxs@O+GkOo@;M9{YI;fj7t9v@GddOXoiC!R=H(pQ<*!waJ{H?iblxvfxxHat5{v%@ z&pmUu7J9|-$k|BFTq4$#negjRtI_r4)0&dqokFH@E4w7LrWgTZgy9+_N}0iB(tkl9 zWdw{RX!#@xE2p6Geh-?V82|tK&(25)un0m`FeoW)LCceb^n&H#1~4+H!}TLEK(10! z+P!-_Bclc*BRHWk9}$z?{QXIj0IMg&&HsSD0kJ@SWrNZ@JUj&j1&pu^36f@D008r+ BJf8pn literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/84b320fb84396f0dc9139f9eb61c11cabcb35fea b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/84b320fb84396f0dc9139f9eb61c11cabcb35fea new file mode 100644 index 0000000000000000000000000000000000000000..780dee8b68aece19424d888f9d7d8e4bc2f007a7 GIT binary patch literal 2679 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 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/8644d11338ba2a2cc82b87e254c2c45cd880152d b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/8644d11338ba2a2cc82b87e254c2c45cd880152d new file mode 100644 index 0000000000000000000000000000000000000000..e1205e4e8802a2794db8d050efa2c661a76a2563 GIT binary patch literal 2679 zcmc(fdpHyR9>+JMEhdaf$ZbQi!Xzn|xn#^vu3_valrgO|x3Ia*WiBPe7^|3-%O zrd}vrS@!a;L&}#TBcwOdwwMMT+0nn;$s4Q5WUKI1@gfu|m9HByI3j*$(u7>RHx#76s;FY< z;DHGARK#dDMcr z^YX@pbX`Lre6}?asrIjFNTGenKWxxj%A$X zggVZ%;LuWJ+)J_K9y~>l&4}GUg%jRcA47`4RY!c|K2W>ZK!~iXWC{k~?r4l)YoxiF;592FIxBXD!_Er*7ZUxrLO-bFHS?)we^*!SE{!Sw{}d8GSho_rZ^`? zlW@}CL+j-4%lF*6vB$;qTie(R@m7Ea$+4ToCiC}gFF;uYRYxqlf~ ziLx`pg~&%KaSyy~UDd^93B!ZyVTO-u)Vea93~M?3ky?9f#Jy4ReW(wcoe2xO0WQg2 z*$F5wgO+J%0T3v47TWJwzuQe>w96?-K`?ErjxJCef{7Bj9LosGm>n$PdT6m+u;_?M z2%Vp!w@cFpuln9Xh&a@pE-X&Rfj+pbG@+KOz@8{;)-oJ=nF9#XIUMLbew6ziJ>>oV z3q6athhtIscVyphif!Rzrvebnq?>`_&f|_9x0+MADgGhAp37@rlFr#vKVKv zb_gk!jlW0QIYZ#~??2nwfInThCAVGBTU%Q@UWEV4k2|5)J3a$$ecu8De}=f+PU1gW z?!R)J=EwidapGJf-QM63C1)pv5n)BGO-cR=sI#XL7KpnxmsIK1LNX|XAZKpAF;!&P z+Du>{n5p=F=jJ+P03k1|WKUCPJ2RB0gN(llACdA-#L;L`*{6=kS#tlwHXVF9D90u^l-Ktfftd)Gk;~G&oY{Mx zL0y=R)3{eh<3VoGOKx}f%IFas!W*Vjs>!jpmX5@G9nJVk@07|nm^AgOExz$>gBGWO zC@z$LstB909`w8p`;_6lJn8*u>8!~U;*@OPeU_LRIG?jpS1ij;3{}gi)b~C%yhg-V zL}#0>s4VK)qce|!IA$&4+Evd;+WVa58Y*ekhgeTXeA4tkE27FXL;4_&1@Z}>wEU)Y z+TJ$$#eOklov@Ng7TA3{GPvNuvvPFbBfLE54uN8aaMO_1?&cH<-TSIR00jNysyDRw$07ad=h{w3>cjq$F&-BR+Nv zKfM!aO9WwKisAyVYk}45=j}w^7v<*~*OytEWtY5llleyAl%)#rYFI4~A^{74Hbev1 zSXSOe3MOGgw(B(aJT*oo%meadCQ^}GYt>4eL{aJfwDQ=3p&_d>1#~sq7?V`6-?XR6 zcy!S;4G>j7^*DQ;Ve|;9e}5M^NXfY_%L&)g#}T)f=`K5CcqI(%)b~`OJ3WTP(P|J8 zETRT&iOM04u-m&OG=>QsJXL8|w{PQkL%H6DjtZktVVs$M9yVX%;C_-1R~{ZT1u5p+ zwoXIkVFE{%5)%K8mtM-f+8L1?I1oP+g$-AM3`PrdNQLAWUdg2^A_xEG)Q_DGcao}( zR8nSnnpW*yCdY=Q(y~*Z_{uRQ#OaXixcnk0J@Bm_cAorxpkB5)pcZYi>q~9X(?seN zQCTjbAvlm(70-l>eASm0G-30_ArKDkbR}18v84tUsimOPR1X0R}eSo#nR!AG8 zeSqJSuPdO9D9=sq4anwjt4!p7*N zjH7Z^Fu@ys&RfmlVWP}PoQvMLDrz(QhH>)%x3|0N_*z@_KYYamZV?^n7f<+~H|bxXUgd>Wl6d;-pGc!hQlLXolVkg- literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/alice_exchanged b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/alice_exchanged index d44d132607fcd348343914b16734615c89979a47..89817dad0dc0b38b90806e6fe1be324a2bd203fc 100644 GIT binary patch literal 3847 zcmeI#YdjN*AII@+Cbtk~F1a>$D);1atcH=xX+|<+8*@*?m`gECBpkyK(u}zcS#qZ^ zjW&gUxunZExkl<#>x$F)KREwq|JVQ3)Bl4$PkzsS58toX7YO(#pxh5S^n?EM=YO8o zA2j%bfD#n?@}@dWDBaxL!AcUGL^8i|&=-jR8cqF;za9Ufh>>!*oG0Dp!s%hZ3rjN! zr#)IOh(6)|I))i+Hu(Hi(=+i0Wx__1FGV96c$yyS%H?~w-@2Y%Lt;;7n-*gelAB27 zOWl}?F9^kO4S}Rry1|jZ8Opoz7x#R;cks1@JwvP?xP~ws2DLTzmzo)*fOV`E7kM~F z*}Kt;=qp~K$h+(UI_PB{M{7j(tGESdbU{KymXRB^KKf=hP+7YR z#EnO_raj@oPDN-m%6TE`Qh+Ow6Q8h|Zo zh#ehIH`dFQrPW%vwCSzzv$bK9U%U2Rk}x9ioW5wzJB5A0y@y zc&hW3{99&$qlA~AlopeOz$cVH=BVf*h3J}&f!+Cn&V9v+9z*%#y*s91KK@T)`JZd1VuI94 zs~q{V-}f+ypyE@zXCEn2(;8DK4UnkPaaF84_CW=?XLcz z>uOMSOqYot;sqA<80`?bR$+H_v*S#c@;d77wYRSU`24adIlZjLe;lAM+_R z2CcN+@OcIEv`zFb8QRazbnH`&po9ceDMB{f^zqJwCq-Y>fbY$?d2`Ua%cfo?niS#L zf<}XoB^x1?j7Eg7jD@Iz`1KRemAL*_+XD^v+`LVXSXE-QRNa3UJv2D4VfS$?zo*-L zS#`5aT#Ig-n2kHaGg&=-DOiLQaXTo*Jf|b7p0o?NxufDW)lecSCo``Mdl^p*qrI3b z_vf9yWN~)rwP;ZOi9wOffPS5;tYeceu`(nGPvttmMU%KmV}Ytv#@ZLE`tFor-lOhZ zX|7(MjMGr+)bUR-vng!5=A*EuCTlJ)1+BXWF2<7WP9d)LG3a?7tHu-4dLI-+8j&)xnb*-wocrzIwk_-(dOS-^dDEAxylCPHk};jA>%IDGlsdvCyC2nNx5H# z_VsH#9s|I-3@m+z-x_$fMO*6<9;&XWw;?Srz#7!oII`Ah6nHCCta6*|=ppDe+N~&` z$2)yy7_miEdkzOWv1caW#glB0PpmGzC|!VPo@DE3Jpo#rqiXH>*BG%?Ah>!&$5>R-dIBq9f^G)}dEQS2s=U8e> z@XaRd*LMzf%5hjx=1k{<{X*iA<&)oCO4$jyQnO9E_ye zRx=xuS+$oU(?KT`{#H5p$Hx=rFS}SaJH+s9X-mDayOXb<0H3?d@CIW>w{V7M1{!Yp zil{h&E%7vCh4B>ElxY1mQx4F~Wox{-Zm<1-vX#X?csRI~y;DXEl<6NzlldS&#J3yB zIgdbyB9Gh9%w;1&z@v>~H1_=>unG~6@)G-Dt!OM6kKlC=dn?_kLzSh(U z$VKV1{c7$Tj`}`y(aXy0X{-XO9R#QQYhA6`>yn~QIe##+QKWF*)dg_R@SGQcF_p9GhnP&3sWz-H6nZt_hs<@iTcVej=Dey>_Af z>Qi|2($HfD`z*4tBq@ZnSK3MPvQS~!1w^6EEguskuW&*oL>kvFVuEL{&=@wAkh^lD zhOP7W@TMWIeM4pl2Rc_)=9y@De(Q=_jM2)49Qv>ElZ?Yw%BxOIE}xIfBrt(XBiRPX zg$bO)8TS}rII@KAk(y^KE)OK)v$3rgPs1M?=Yn|$fip)TGu0BhhDaaYAYT1}PIY`F zus^|Nw2}81a)9b1qb`IELdj5jWz*7voo}%Qamu*{=#~C5?rPIcVD)Riw2|drL!I%Z zEfdQ_1Pyr+LA<-D+G)D8yrY?e1By0@;=@y5c91MI>74A!22aM@jaX9=rIP;`m;T#aBKj%NVDBN9)Q0Slytv9ay;KYVWYF-D~NkG;)x iF$@B45s_9e(tZ;7lfa(@{v`1KmB4@IDd@je>c0UnRNHv~ literal 3847 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 delta 1236 zcmV;_1S|WA3yBMmu7Bw&>pmO!IwT^!w2u9EF(&`R&+wy^onX06U&3J_x!HOMF-% z>c+f5D1Sf_oAdFO(_93q>$YLS4JJtzfI%8_%FO;iN}&M}&p{B0_fYqOQY&Hv8~k>D ztgc3fYu zbfu<8eJ}X0w7iws)3}V|Vn6&?VzQ5>HUse>!CnGowKYL>0!c{>EA^-e7K}{Pn}P5} zv;J38dk{*5sd^hJFG3Mh@=-EwhKP5&m`iy+zn`18nFRuo4Ox{`Hl zinkStR$W`kXn#T)iHi`t*ny49>S$WaP3@D8Q{>D56gqj8dKb25^Sa0m3X%@GtR(ZP z9%62go6qO)W`x*!v4dgP5V`+@8!hFKWB1SO%LPs>FXpR7_UTAu#d-hNx4+SDs~K@m z_bP7k5`Up}db)?uxilJ!%Ab20O=75cYYgo)a+?{Wb!;gfIJ$d7!K7nxTB&3(L4<3h z2)lAc=+PDnAXMyvu-w&d{~>!HS9@9U18oC{>efJl@{vo4J6c7+U**g(dSd(;&rob@ zifIe5$bUx{oDndSYJI_jG*x<}oPWCIgtB^8u^_cwL3N<0iMZk$q(NBsCsaO{%X7J? zQ%o5a0Bcw?MzPj1L;#ruaEqt5a-{+YPU8mAo3N8yDbAEIOpsa^K*=Upe&4B1;P+-a z$9yh;Y`b#8SINn;raCz3r~Q(zaZ^Em*j#WG7=LGy5acLjb~}-NryV!dH3%wwaz&Z( z>7(Pd!hFLd$sEE7Or)o1a}0$r|7AjUh#Uufe1-%#NP|Vd-vC%rsb)W+06P?%6IY?!JGDdud@whC84C&p z(J9=O9WWY*Ve50Ugrkx8|N3% zN~sU_uMYs0Xs9UnDt^-Y3V%dru?YvY#0*Oc1?Luth^M_F^j;=nh(>p>lChY3ur74B z0zLVG26VO>vvs-31{yIdY{0@1^GAFHi=tNvP?l^zLAxAlZKV>5z4nA|nL&`;dw(j# zKh0r?I8}T{^Nl>nH0ME4KU)no_-&CzC)-hFXiJ^02OT`a&PrJ~S5=R&a<$YdTZUv3 z2|T79mv85RXb7alTVanL)1!R2Dl0)NaZw+fX0nrMME^0j-^Qs@S}f5Cyg|Ed5|%dL znJX41P1a)Fakjx?nxMkLaYI;Zw|GSZUr05W=X#Q diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/bob_init b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/bob_init index 90c74209a2cd90f272089d0881cf1b0fc19d0e34..c92654417bb36e8cf5ed2592857b2c7f6721a441 100644 GIT binary patch delta 1236 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 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/c7b53c89dc0929106ddae7e27c9d691c7671ffbe b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/c7b53c89dc0929106ddae7e27c9d691c7671ffbe new file mode 100644 index 0000000000000000000000000000000000000000..ad72297df3d6868d762f3bfd755a8d3bb61cc668 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rMS02mk;Sq^v|xDu4<*ICzgqvd>+k62e$4oGtLsArK6^2?WC`P&ha=?PV_5E~#-U?yAA>nasTtgBv0fdMkLGZ%tk0 z;QRHBf=9!o5^L9-ofV$pVZ{y(H*QMw2#1Hb%)Ml!qqysEd&JRIUkdC`R$bFPK8uqN zGw>Dy15X?gcvC=ucYfkbVEC=-lwM6ZuZUPgVcVA5iQF8tJIbqd>=HN5S*9(*|oH$Uuko!?4G¥ zu=?JG>G8=E7qbPtDBW=`s{HcB$jLTxUXF#E%MDIz=goY|f4E}Lo;~G230=Jf&^6w+Dx;m(LF8 zvb5v9o~|M^;YHKjiIEBmypG8&TcG%}`0|zNH6NH$9%@S*Ic8W?Y4BXsHpfW+wrzc9 zy6BC*&T6jT$7<%h2;D2=Sj5vO($$vbBl40v`1=Lv(mltv_6wIvEYi5O{j0iHmsi*B zq7VilgG;OA4t97Otevy^%vv}1;$7!hBy|qdz2IaBfcQ;++Z~=MjEvmLJjcQ|a0aoS zJLsJ%vgVGnyulQ?Q$ok<7tOIN&N=TQR5v+mhG6<}6Vr^E)qOQ=icvl?FKu@#>mF*` zJ)_Nw`BlJ|%{re~u!re5PWvp%Q$B|wLrpKq|AO(Ne@3TbzVk(N)x4ZzyZp7v(Z^yt ziq88bDz`VxOJecA;JIi1)O;E1TCLLVdWGw-tR#(6yyJY|JfM{0Tw~13I-)5^gKyOFIXOK z03(AsJWnGrK(10!0=kKjQG<~YoY0t$h{N3I8pIYbE|M; z%ZJVFx9ejbOk8v&cI9{N>30?!yeWNRcl_P<^yY+VYjR8bJ$>2Ujp)%Pw;k58Vsm@VK% z>5g+z<(Dr;PPUQraxC0jZgg5ZZ{}0}!xek>>?sFgAYfon?AXA_!0`Y7|6c(NOz#@Q zyX$nqfrfqEyzPga`r%`9D{ZDNpJjV8?CQg%(ltzbI=((%!)N63b;8*XYD()q z?~9pZz)jm#`M{j=P+Q{2F~g!tgXf~QIY#=oZR6k(b=T-!Dj)?m4!#U$|6ak>;)KU)8<3yt;N5g)j&iTv{b}u*2J6 z?VQzT*1EYD?>fgKsdJ$21t&uQ#BciB?(j@uWaLifITp5oGl=!vLGM(NHFuol4W`JQ z5;|VLXpUWR&UqK1y2)8H1k;b3m}b}G zJxs@O+GkOo@;M9{YI;fj7t9v@GddOXoiC!R=H(pQ<*!waJ{H?iblxvfxxHat5{v%@ z&pq?E7J9|-$k|BFTq4$#negjRtI_r4)0&dqokFH@E4w7LrWgTZgy9+_N}0iB(tkl9 zWdw{RX!#@xE2p6Geh-?V82|tK&(25)un0m`FeoW)LCceb^n&H#1~3|^!}TLEK(10! z+P!-_Bclc*BRHWk9}$z?{QXIj0IMg&&HsSD0kJ@SWrNZ@JUj&j1&pu^36f@D008on BJjVb4 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/ed50787268f92d89abc67eedfaa04cf918c99f08 b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/ed50787268f92d89abc67eedfaa04cf918c99f08 new file mode 100644 index 0000000000000000000000000000000000000000..b787a0a7af9798bee200ca1f4f0eb3d066dd5060 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rMS02mk;Sq^v|xD1t@(jzetEQPV#Iu-1rY&C4q~^n@Y;>deT=yLQq~b)yN6oFmjV&KG zx8JUhd9VjB-~oaHFaWW5cx)jQjMRq6?b`W|VFM!r1DJ=x0gEs&0_DH}Z+yIeCn$(L z7JeBE#T=fUQ#5JHrRDG3R#zY1Ipw?a^Un>I=|?WcREvb=%BUoN+2rhhZKJNnYX;=Nn}Qm6LyIvMTQ0xj^!7bB z&b7B4USjU$-2^5!@4lK4qU8GbbHb_%&B14uuNNp`IB}qQA@`$9Xh3ZLu=?JG>G8=E z7qbPtDBW=`s{HcB$jLTxUXF#E%Z*NJ=goY|f4Bk|h2@ZFWMEM20L8@r|NnmlFfhGq z4DYVf2`9qUN9qNZxILQ_b5nW4PM6zADGr_iaHsUuU?~DAeHAFFJ2dTOF4!)qaVqYr z!S9*Oy%U2QA`^Nmc${xdUFG2W^^Jl@!=w^x*PNXdp5bA|4h}bNO7sYahq%nWWTd0G z>u`I-(N$jx>~#**z2IaBfcQ;++Z~=MjEvmLJjcQ|a0aoSJLsJ%vgVGnyulQ?Q$ok< z7tOIN&bi?tR5v+mhG6<}6Vr^E)qOQ=icvl?FKu@#>mF*`J)_Nw`Afi;%{re~u!re5 zPWvp%Q$B|wLrpKq|AN_~e@3TbzVk(N)x4ZzyZp7v(Z^ytiq88bDz`VxOJecA;JIi1 z)s$G`#>fg8ZcpbpoM z!~nTUNeSpCMn(-rMo>~?U_K%yyZQT*CIMDYh@1ZbeFI{F{K^KUf#n3S1Yp!WK8uqN KSek*P85jV|{3Hng literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/eed29554ea909bb059a93cc73d042eb67ded9284 b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/eed29554ea909bb059a93cc73d042eb67ded9284 new file mode 100644 index 0000000000000000000000000000000000000000..bd0b26c7780d606c5dff187c37aec380dc52d804 GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rMS02mk;Sq^v|xDu4<*ICzgqvd>+k6*Snr` zr!&;NQC*JBpNkj}qMV!!+r;f|PUcxUJuyphj_KKqsKnX(!;)rb2OsgVVBLAZ?Rb*v zs}LWE<*aLVE9)L=+dZSri}_W+m(4n#SFnfaI8OWAz#z&~K8GO#WH}>)4$Fb_c84xn z0adh5%e~6F8A~Jyc9aPE2wtp_XpcC$>PvzB$*OCb$7gZ!VFunp)WDm98hF?PD^c-L zbE|M;%ZJVFx9ejbOk8v&cI9{N>30?!l)ialcl_P<^yY+VYjR8$3jn!nWn|J5F!kbK_il+u?*ro?~GfID=Tv9rR8W zS#!r(-f)WCDWT)_i{{uB=bU#Ds+*iOLoofgiD^d7>b@E_#V8+{m$o=kAtVi|=_UDJ zFkAG`=v2&izKE`xmvd~Fzg9W=SZqhpdA~&E_J(;$EdCcf_sri~=oP~wXCpatiC9x+ z!mmHAM%R~5Yf5%^3Yo^O?2^!$Vg$-_*C0{K3@(%Y3j!&l|Ns9(%O_D-IR%aPd(fQ4 z`2XL3c1AF8gizQ>7D1>egObt~c!>ou0-JgaF}MMY4C-+GNDPpxl$3x5GBRo~GJ+Et p^AR!G&EKCi39x!X-24yd8xRZRS2ifk!^2ZhP{0VwkRWLW1^{r096ta6 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/f389401c788a63598667a84534dd73e80e85e29f b/soliton/fuzz/corpus/fuzz_ratchet_roundtrip/f389401c788a63598667a84534dd73e80e85e29f new file mode 100644 index 0000000000000000000000000000000000000000..e57db9cb84658ca5710aa04b6537c722a0349c2d GIT binary patch literal 1437 zcmZQ%fB;580)T;WH&iKhN{Im2O#rMS02mk;Sq^v|xDu4<*ICzgqvd>+k6*Snr` zr!&;NQC*JBpNkj}qMV!!+r;f|PUcxUJuyphj_KKqsKnX(!;)rb2OsgVVBLAZ?Rb*v zs}LWE<*aLVE9)L=+dZSri}_W+m(4n#SFnfaI8OWAz#z&~K8GO#WH}>)4$Fb_c84xn z0adh5%e~6F8A~Jyc9aPE2wtp_XpcC$>PvzB$*OCb$7gZ!VFunp)WDm98h9vyWef|f zM8!wVt-_5hA2zq&u8(;zanY67mEX0e-&t_*ru2#3@ps$Pn-iw3$uWJHDV!R_n!?Vs zX@}gu7RD=KD^iPA?q@tD3JeLC^+y-BEtlVMdi$Om=i1v2FERJ>ZUPgVcVA5iQF8tJ zIbqd>=HN5S*9(*|oH$Uuko!?4)Ti4&tiE?)dVKQ4#cTmDN_U)#D!+U&aDquz)0}>Zri62@3u69p#vsO1+GcxuaL9W3>~JniJKpPq z+HvVBLK9vz&7Byju)yn>+_D9VKZ`G4sb2GeIpv|Y#F1l$MU@86MQwA8^l#hNcczQp z=qr<&hiFRu4<*ICzgqvd>+k6^~X zS!==(SOnW-MK3~IUpt&`nPcPf+eo8yZNR2!PQOG`!a3Ik zG5a<>qDq73qP96k`nT(Eq>I{i_H|Zs{XSMR=SApV8OI`?K9R1rEFY1V+`->3NSE$8 zwzXflRAQ0lt?ggcy}G=*b{B;(2pL>jC3mpH+hFaS)o0eaxfky`$0Dh7pzZ}HLjc5Y z`rGdCOkrf?PUbllwt+K<_1r=4RFO4zoaGIs$ej{8UcYFLU2)EN7oobzSu+IFkDHig z)U58SVN;Cqk$GvmTUqx|+wK`{Ud*oozHHX{yn;PU$8p+cQJ(TS3>j*AN&Xki7X33i z74w}hqO0cR9NXouRgOLu+fj7hFHyO@VO|o8{{_!I^S2gy#qh}4NX}d$)|8p>>rboE z_2tu=lHHv`rg1B~B($a&0b_*W8YD`Y!DZ5aK_F!Wj3sFKBnm61pz(eWnwuE^|NGC* zNC>b9LRBy*DQ$t}NhOF8g!F>t;RY~*TnYp%5K|x=2&n`zkdaY?krABGn2(6bZvOtH hNr2T8BL5HQ8xRX*0vnX(;o&JLC}4zTNRTuG0|2MdI${6- literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_state_machine/225ed62055a76cbf5a855d5c2cc47f203ca62f03 b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/225ed62055a76cbf5a855d5c2cc47f203ca62f03 new file mode 100644 index 0000000000000000000000000000000000000000..7f53c65ad6e95fc03716c2c67df85ee7e205d6ba GIT binary patch literal 70 zcmeB*{$_oEvEl#!MqA%^Ex(*>4}y><5S(byYHw@kivHGeQlbvbu=4k1U}!{uX}<5k HoXB4Q%3~s5 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_state_machine/3a30b06c52e20cdd754b86d025aaa32f2b2a0d18 b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/3a30b06c52e20cdd754b86d025aaa32f2b2a0d18 new file mode 100644 index 0000000000000000000000000000000000000000..16adbc8d501d26b787ef1845a174cb75ad28b5c5 GIT binary patch literal 49 zcmeB*{$_oEvEl#!MqA%^Ex(*>52`RgfRpWOC((oU?;06Afgt*uRj8>tqkk*_23its literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_state_machine/411d140f8bf8f4a8b5e5821b185c5c7bcc12faed b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/411d140f8bf8f4a8b5e5821b185c5c7bcc12faed new file mode 100644 index 0000000000..f8b7b69125 --- /dev/null +++ b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/411d140f8bf8f4a8b5e5821b185c5c7bcc12faed @@ -0,0 +1 @@ +q \ No newline at end of file diff --git a/soliton/fuzz/corpus/fuzz_ratchet_state_machine/4337a79adf15750bebbee124c02ec505edf95924 b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/4337a79adf15750bebbee124c02ec505edf95924 new file mode 100644 index 0000000000000000000000000000000000000000..8a1796dc639d59281d7e6a81a31f5567647e7f63 GIT binary patch literal 182 zcmZ3sjP`(m(SePbgO!DglbxG~mrs|!t**AFrK7W}yQkM12#{O=;-Y|M-tqAu0Zpi~ Kj6(my1Kt3tsa`<< literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_state_machine/e2dfc033ab7eea543dd046382e0c1e2a59e465ed b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/e2dfc033ab7eea543dd046382e0c1e2a59e465ed new file mode 100644 index 0000000000000000000000000000000000000000..078f63d64bf3fa2a8d3fe06d041577cf113d0300 GIT binary patch literal 147 zcmeB*{$_oEvEl#!MqA%^Eh$d62SG^mpeGRg2LT40;Qxsht-{Ls(&%rtp{9)fu`MSh o7-}GZw}u_64akSGIBIH?qYoT_DBy>g+U(d210h)lG7bO%05woB4FCWD literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_ratchet_state_machine/ea3d54253bed94f46635e3b8903789d5a0213259 b/soliton/fuzz/corpus/fuzz_ratchet_state_machine/ea3d54253bed94f46635e3b8903789d5a0213259 new file mode 100644 index 0000000000000000000000000000000000000000..11b4001ffe228c2440add70399fa707c9af546c5 GIT binary patch literal 184 zcmX?b;J|^9nuL&=tOHp?xr@Sd3K?7ZpTrE7u@=HZ7>KG^{d0%a4Q!o$d`r}pT?5~mj z;B>o;BrFxjKY&qIx2deUucP#h3hoayW~C&rum>3@TmAlJ01~8+oY~qa*Nwb>W(sH-(L6 zW_p^Ws~@4oavETRGPA_Fpld2Fi-iLbWhLrtfN}T93Zf^_yOtbiD^NEI+h#jLlFtY% zLvdJ6l2TCf7#ofPv4!_7)$G2yWU~yow`ozezx8GvH?ay~i;2=WQ!IU8R#Q z%&U)#W*{Pq4i@N8iJFW{Y`NzZoALal+@X7a##5nMb(0ye#uIAq`VXaBQ;)~A1aXs+ znWGqTzx~WJ?}j}uI}a;-tsf9Z-w=P>qzsGYP5U_u%b6B1n;3Yhe?NvzVupn8(oFF} zqYe=Y_{=kW0+uv0dCY|y|EQZv^<(w1Ox98z;%qeEBCilk8cw+j1NT1EW1OR_cl#(v zzN2QXfsrwH5JLMU^tnYTD0m2V2GDDTZ?!GU>|P|GWT7%I;<+v8QOPt+pZSvkr5aLG zYD7>oFE$*pccFJ|7gMW8s-gpH@;VD_NN!+Iy#_K+nWH~!20g5nwcn$J0*P$dKt`&@ zV2cv0@k0>UbelWd7*#BW74bm9qPo_CMR*Wn345tov!J_gNw6fsQ9)H@T4-lvl5E=>({} z$N+?G7b#S1QBW^i$Gl+7A&{KKWpny7h3n?byF#>Z5Ti>O1;mn;;OB4F%vnp~L0OVU zLCi$qI>O$%T?0cc%o3Hzl&ECPS2y2Wm1+_m46dfdAS=|jJzLfvduTklv^^b?@>f*s*PSEpj>*x4WtRr8owA? zOyMLc)hiQ*xlolx8HIc+ow!XMfuQ{xSNOIgB1bxz@6;sz;qhnBsiier-$ zlM%0w^<6LH4W*^6Cnm0N}8xhpmx6qFZVzHNX1{+29ScE(YaZkH#Vy7CH^vk~#0 zN+@|Jq?vMy&XV&%O!W@Akc0L|N;9l0Z3Rr)!JNvDtK73KIcPGgljX`3 zsQy&$J4xKKnzXJm)nv8)5RfM|qwyQjDb*$Piu`*$gd8{miSo<6_x)t&GF?!uj_Z9a znId`Ku!Td*o8V?nw`{T+S>3$iT}QP5b&FNXm<2=AD?02-Oz`ccWjsQiNLJ+2u7qO7 zbwC4&2jV^XoqY!K*Bw@^;rN10H7eU>zE5PnPn;&X!}63_AfridJlg#>+d#@X<{i&t zC_-b`O#~JXeYmcQkv9UcypFZ?=>LmbU=;DEOrYX4YXMc#$nIzS#M!l%wt(&Afo^d^ z2rw?0eD%XK(b+%%d42iX=LKxUk^`lEwkceoOo+5-pVymS)EEfiM;G+8Lmxq3i%{y@ zYEO?pKtQPMJBZw72c3KITU=q1(HllCt2J|)@o@t3DO#%=w0Hsm3Koz~9by(RP9wN> zz6Y}4;GCp9u~@L{o8cNe+0C$={B4 zMVN+)JnJ|-71ZjdzkJDBQ@S6Beb5VW*o5OR+bx|nxQ$fsYi@)tT3sLRu z{xuuUBa) z=_C_~Yn*OCiBs|G{nyP;I=4_l_}E7a%zDIMD5DgrLS3x7X-%OM`Fr%taUrtSQue*a zl^>=9vT`#d_C&g2LvL8v+6H1`yc#yUR^`BoMewgGu&=xbGCZ9DDrw@h@&^n23PC>E z_uox?IQ5CLvci?!cFLRf?I3u&-daZv;a{NpJG!FB+a2aM8dH3>9*7_c=f(ck;ukq| z_|?){yu>>|fg~6H0nR2~G0s&gIRlc$y$(zZn*#y6JGHDca7)x;#_d6VF&-JpEi&X@9d?F4VuiDHAm_g;( zw7pbyt%EG1E+}7$MT-uUejO%QuIE+*_B5nK-}3<5eU&^+zZPsH{*p zk;T%_e|>FjcAz*bg?C@A@&xHUglq?fqxyCqn$M;LV10-CwGQdhXKnuzd^>gB4Jf0s zG&jK*==Z0s`)i-rGl689+i0lf>1vC9W(zi&UaQwk0_Gdjf#aa6V1SgByv$M;vQ;en zAn3uEO|A?+d!9#}yYaumR@WI(yDTPr8!)DU!|}7uaHaqb&W50QW)@_H9)EFuy_!ZHC^l>>&X-!+w>22?1GQaJaxk zK1P!FA9I1OlU#b{QY>=#QcHUG*=kj)^bDn3`*ku9Cp~5NgEF6Wg5(3@NB+%iHgxq5 zED-JWFm-=ll_T;ce4r{V)p(mZ648N_Xx3#_L0%-#b{<3yA6d~W-$ycuEI+<=@b?+S z@22Y{*&m80FpaRMVXy`$>DIV9il~M#K*|q9KHcWs0-n-!o7ZO-dsr#){tz6@7GNH1 zDK8i*V7-JR?Iz-f-28lkpHQFbbx9AiP~glgK*?m#5g<>;Ag%FfjGhiEu9Er_z2gW& z2Xxd0+CvAEL|@AS;A|f6G@GMwTeTrO1P^H%pKwC>Q;`P{t%qOXbJQB-tAIl-?Wa#& zd2C9npgp>;J~^ngIuxQ^yHc{lMX=Brz80DS zyn$2Xp?8P-3Iovhf5Xdz;30tuITFCCE7k!gUH#1vg9X`8WLz)z@^5juKD+DdprmTD z+BJ9d*uyx9@?yi=2;cRV&?OuHNu4FjL=0s4QnOVaO%lYXx>BE#Eo{@3Rf6$SE4BN7 zX!*L5swW>i&fxF#`kZpTlCbMoS96JXiN?R(tK0pKX2+)EkTuCGI>ryqb%}aayFdR1 zfom^T9hBRKxbrvaEEdObL>}eVMM*8;$dVc-kx|0x>e-On!RGMf&6uXO2a|Gn!?>mf QbQ_?GZgK(myZ`_I0m+xXYXATM literal 3542 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 RbQ_?GZgK(myZ`_I0RV^*zH0yg literal 3543 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 diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/254a55e6ac09d08eec781bf9783781b49a03fafe b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/254a55e6ac09d08eec781bf9783781b49a03fafe new file mode 100644 index 0000000000000000000000000000000000000000..e414693d1724e0400df5f1e6d0a70eb89db2ff8d GIT binary patch literal 45 qcmZQ(I8nSasA{VF0ngtE)`~sTLsx={PbP2T_m_XmYM<7j<_rKI5*SMW literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/32e131568edb7e560cac230264e090f11295fd65 b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/32e131568edb7e560cac230264e090f11295fd65 new file mode 100644 index 0000000000000000000000000000000000000000..be77f8a0a7e35cbc9131cee7a538916f8f65c916 GIT binary patch literal 43 gcmZQ(I8nSasA}pA2+)MmGvJIF42BFq(2?d00L;=8O#lD@ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/393ab93a18db07a5e69641cb1ac1243268529609 b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/393ab93a18db07a5e69641cb1ac1243268529609 new file mode 100644 index 0000000000..2bff782a7b --- /dev/null +++ b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/393ab93a18db07a5e69641cb1ac1243268529609 @@ -0,0 +1 @@ +utAARPz*.=+ȿ~(u0 \ No newline at end of file diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/6291ada0c4b6934bde934e25d7288aefccd7e311 b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/6291ada0c4b6934bde934e25d7288aefccd7e311 new file mode 100644 index 0000000000000000000000000000000000000000..9a57fa8cb8a7050589b6d473afceac819db82575 GIT binary patch literal 347 zcmZQ%%voB?00AeNe;VZ}&YU8)LrRFL1PX43@AzA=^X!6)M?ELu0uGZVMF9ar)FcK5 zbTw6I0#Q*g0ecVwOiY@zXZoJ$p({Qay|MTY0rC6GzhyBq>

`naR)qBw>IN!r+CN z12%w};Y2Y|>7KUwfc9x8Ui_5Rm|nW#li{0ipee;!4EpDRhS~$Q!7Va*1GVSMf2d7h z1E&7obHH{nnGV*$y)HGYA~@%sQKXWKj@BEdFkPtJ9CdRZ5XEnG&2*VjfA#^h^ MkfR@}r$fyd0KhyXl>h($ literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/e8e14349181aa32d57e39cd3af6a825c10d03222 b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/e8e14349181aa32d57e39cd3af6a825c10d03222 new file mode 100644 index 0000000000000000000000000000000000000000..a0b4125c2f5bb2e73027b5bae460b26621c08814 GIT binary patch literal 171 zcmZQ(`2YVu*T3C6BkSvd%oGL&h6!h`HbVt~JedoVpx_CN!OU=?cxO=6RQCguCIMAI z08A20f6P%2(@6TUO~dBy3Z@SoYR)LKD4eLMlqfKOiP}RLd#3N19=hU_G0=3L;$jd6 E0Bemt<8 literal 0 HcmV?d00001 diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/unknown_version b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/unknown_version index 785ad5aa0fff1af1377fb810d415217207e51b3b..12da65f604bf287bd22270e7e40f59bcadb6ccad 100644 GIT binary patch literal 52 zcmV-40L%aX0K3NK<~YL>$+zmAMT5>Y@%)}S*13wbJo+>Yg%zF7jJRUUuqhYw{FVYT KPa+Kx%NFD!$+zmAMT5>Y@%)}S*13wbJo+>Yg%zF7jJRUUuqhYw{FVYT KPa+Kx%NFGCJ{qb3 literal 52 zcmV-40L%XY04ukgni?f%Je0c8OjmA5doVk#hu6yfG-&VKmq^a0iC3+q=-KhGum;*C Ky3lixf?jTkzZ(ny diff --git a/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/valid_version2 b/soliton/fuzz/corpus/fuzz_storage_decrypt_blob/valid_version2 index ac8f97593fa6cbbc86d451510fd2e5439f93688a..f28d6d7211f398e113d05daea4eb4c1c792b0551 100644 GIT binary patch literal 51 zcmV-30L=da0P+tU^ok`nV+cH$_Z_f<&j* J`{U5bIHUe&6~h1k literal 51 zcmV-30L=da00NBgUZ9B*m)J7p(vQ diff --git a/soliton/fuzz/corpus/fuzz_stream_decrypt/single_compressed b/soliton/fuzz/corpus/fuzz_stream_decrypt/single_compressed index 93d77679f3e5414f2d7a75dfc1a5ccae2abb4e02..da23449614a0901e30495a9b4ac1297ff2cb2a73 100644 GIT binary patch literal 59 zcmV-B0L1?R0jCMG?_yrB#IYhGa(~W<`Zoa&WIYKZD*zt>A_~P#xV13@lH#p&K9ESn Rb%6wJ2U+FE1Z$o%Yz3#N7LNb` literal 59 zcmV-B0L1?R0WM^;nvl`!WjM3|pEJ;uPr%ur(E@ew`2ZgQrCuC~9OfhHa^^7Q92ug{ RSdMiKS&e4Mii~e5%-1(h93=n% diff --git a/soliton/fuzz/corpus/fuzz_stream_decrypt/single_uncompressed b/soliton/fuzz/corpus/fuzz_stream_decrypt/single_uncompressed index 2e3cc5d0d5b526c33f4a8f0978ea97fa8cad42a3..ac29f965f1e58b6ebf13899c65a76ca3a4cf4909 100644 GIT binary patch literal 55 zcmV-70LcFV00;@?7z&%lbhzDye8&AO0l5W1D`wQxF3bFg8doILP*_^8Un_-<{%O0XtjF SrYzFfnQHi^W1F|a8)+~^`J&6Gd7&AneKJLH2@n>7emK$#mu)6eA T&NwW)AbS`-QE%zX=) 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 ORH42fYYHvH=U2%0=@7yI diff --git a/soliton/fuzz/corpus/fuzz_xwing_roundtrip/mode_a_valid_ct b/soliton/fuzz/corpus/fuzz_xwing_roundtrip/mode_a_valid_ct index 37c001eab72db52a8c8092af83fea2369427f2d3..7009959038a41e0b63ae7e7fd901e50d4e3b9ae1 100644 GIT binary patch literal 1121 zcmV-n1fKf={I>Wd4e~^f#mcJ>B8Q)>MA(yf(p$0>0K+S?v@!WVjR*pm__jD&#LGZ& zs1xJ$k!D1&~ivz!uYAk>J7WGD_+RM^;>-> z%Pkn7k56E4{MlH5b)ZFx2!bCV);QXVsixFPl56=B|34IE42|uEdauB$3&>AeRH8R( zc}I0!NJ24PWMiOg{p7_?Nr6chzp+7@DtpoAs`uIW63pmFdgfdkP`!j|_(_C5F6fDi zOb!R8T@j$)uJ}U$zQ(38yhD`J;g;x#t;XP}2{RhN3I!ujN!GMiW%kt%9}~ZZ;>|}h zck(|%qV#=Qk1~^|^qubwJZoq$soLl)$qcUgoQb0;V9T|$qbe7z8v4E>nL{tvA*EQl0vY4ozLI7a>*O9x10`JH}E8??ql7jmcRe7$GggL97U{8Ix0nDC~{qEPSU3^JW>8~!0 z%PNTIe6$`ov2!Vz%zs9VM}q%m&c{$XPy~TPvZqBF8Am+L_&Ny{a6+-DlTIt-H^vs$ zCt&!w?gPDr6UaYPXP}~})>w+y{PFN$Jqm5+QXLi~Mq11f;b@ixC0>d|7-ROgBuUEl z{1WbSSn72i?D&(RL`01G_GMjy4r4k^>^toLxw)U+#Yi3wwR5_+R|vH`uwZ|&<1JnB zTJnvqF^9=6Dn$*KybF31jLrH-c~gZ@RKVYp&?mgJ?izNi;NV%Mmv0+<$3fut<@WmY zj8pcd^W2W=B}2;z-9JFU?>j1SWRo0DA)w>W>OF}S=6U&XbdU3T5sA;|dlfSntOS8t zG)c8%zpFBF^&BcOYP)b2t_x)ofdbcA+|@P8JRS+eZd%7T^gh(ud2Q8R_n>YV0jf%9 zK7GWu*u;!0x@-KJ9!TMe zaDOn`B2#u3bL|HD?9VRjI#cs`!iTy+3y6)qg4t1qYuc#{p;DVsJ8(pK@sAuyf=lsX zOnBxkWz0Z2noju7XZOUw_jmwr~cYk@1zvD(&{3O=zZtYbw#}fWxB>g+KTg7{qW0^{#Tkz4sJE{xLWZ^#W)GycP*>rRpRo9n4Wv$ zZGyhf$%6PX19DeX7$wD1d_0o*!-8@T-2pOm#4|Zr9?JG5jOd1BA|#6t8W$mcC7w4k&rD1zodJ!u4{fV0q437T%G^p~yzg2FSfLVFET6}oi(rmHs-Z0H z08!#d68}A}AFRf#D`WsPfbr;L8}$ymv=jW! zStON}OvxFz7Fk9zAKnTpXqM1Cw|VMnC!YzQ-u=N|GEpcs#cA z{uW%};%dR9vLTEWPO3lgMxJV`A}ElHcL&CmDy)xm;gAUax%dYtB$IR^NC%nDFO1|z zU4NkPe1!+#ZHBh}&5YS*iQ;E~;lj$H$~wc%$AD}1t6tNJf&HiL@tT^YFx2eOOvDO% zC&flMku%SQL%y3QL3B7@1{IXpmTyy@-e|4{X z#}y?>C-L;W8~JfFJUUYXi34o$Fg6cul-o?iC}#6edB)G$#|hlX%8R0tB np-JypL?EXWZRldB?;OFAn;nmA4Y}*lZ3#qX`zs9bwh~VlWehZO diff --git a/soliton_capi/fuzz/Cargo.lock b/soliton_capi/fuzz/Cargo.lock index 85ccde02e6..a82affaae7 100644 --- a/soliton_capi/fuzz/Cargo.lock +++ b/soliton_capi/fuzz/Cargo.lock @@ -435,7 +435,7 @@ dependencies = [ [[package]] name = "libsoliton" -version = "0.1.0" +version = "0.1.1" dependencies = [ "argon2", "chacha20poly1305", @@ -473,7 +473,7 @@ dependencies = [ [[package]] name = "libsoliton_capi" -version = "0.1.0" +version = "0.1.1" dependencies = [ "libsoliton", "zeroize", diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_decode_session_init/valid_no_opk b/soliton_capi/fuzz/corpus/fuzz_capi_decode_session_init/valid_no_opk index 4cc7497d9a817c7f24a1953813dab1806df3931a..8ecb33855632fd08bcd7417bce0bbff4ece42982 100644 GIT binary patch literal 3543 zcmV;|4Jh&e3~X;LV{&b(P)MwO~oGFKEtOyB8vO)X-g89N@QTxn7zotAEgOI`n5fr>@JmufX2lvZk? zj#(03^fU(ns=dr75m#ZBI8=?4io~Kv?uCA#3!FgF!6&4IcFI!nNj|a027OX_` z$ryJ0I}(@!iYh?KMhPAsz;1%Eh~d=(3<3|4kdc#&44E|s&3pprVln?|hfb`DR9Gx! z>&Q@XMJj}Ncr#6dSg0b$q$n_c^V+p5HfE!@Z&SCl6~GIExGc{*m-$1Ud>XF*{G=ef zl2qa;Y5;Jb6Jh3g)ksoAzvE-wDrabp%(E>1i$u>ORIS;#Y~xl z$dPhehd$Z+Ed%sYeRIc*@si@)%9N}M{bfd0BnBhqiq|&~jp)z#EKK1AtRR@Iu#B@P6QO!C zPPD1HhekQ+WTv8=Z@lC=9^-UwagrX&FQG}4_J(^xU}-eBDQroUmkD{hca8^uMfC}T z(^fbL^zpjAHd0p1C%vq53vwm9*Tw^b%SBtxsXDM2 z2_FEQ!Y5;BIEIi7f(+qu7zvt&$<~Eo(pg}lgsg#Fy`*$oS1H{JryFIIXJEl>+hRR5 zpx$*eG|G##giPoAT~>?)=x4|2D2yO7qS-Tgx974qSV_s14S{jHwaREqJfd^*vEoPt zvN0zB+bNfTtv*#UG-5K!p`~cTm~xvI*gMhoRL70!6=(kzK9=W{onxtZC#aqTUEq@f ztOQ_%qU<3MYE-XEp{eMDpD|#CfXwaue4QYtamXBH(qtOulVM)65g84oW(c-IQ4fX( z8eACOE30Hql5Tx>EZ6MnTV?GlZnp5v0Ntili5?YoaaqDq?BystMPXfh?M=?$-i{tN zhdXbSSuu5Wi$_}utG2VGf`z1k`-sO^?5iE)>_4!4byJ_&*pnX_Zke

A&^L*V$3J z8x^#%+IcbHJH74|Lb0dlr-OQEJI0^weJ!_^9%QHT*SdzwApqfxW-l_dh9E)#dHO~N zo`$?m1p(8zE@sHD7N^)c=r)Q_69kvq)s!7j{0C~|kiAl98<)W$xalDp^mHirx&%gY z{h~fO#MG+ytxd+uga!0ql`m0Xf>z*re1o&VPil>v$Lzggy;SeR4cxVpWxE3A@eH!; z2}VFrBPCyw<&>;szIMW98XmSy_EEm9W8gyCHu)gJ5h26wp@zx$vQXVm(YzY55B6-~ zJglh^%aCXCqBKh03&aYQ7$4z)aj`Or{<3jYAk$oy(HB;k$K0 z<@1TgfY)uGi%4!GnH63r(LQ~-J&U=Y!dY$gKF+ljd($EM`W`{$+nesj{9&BvJML>I zH9VP9O#9*6F|&=VB5eHGFOH^yG6H-&G$_%(u3LLKEPAH0ZywP;})4_pgGU@j3TH*Zbo_! zELTPxwHs7#T-8ll)0X2qD%yfY#KJ#Iqrdq0>y7|%fQbBa%s^F1LPF=lnpjT>2MWQ} zR}&vr5XR)2)aaaSI9H_IZq=Vw>l|k}b{O;6IG=%QSk|+@{7JCK=Yrh0dkLTW;{TE2 z9^48iqVTl^=8_^Hb4T6ZchEGlZ*hgm3%ywa)T)XJujTBkLh+^_aptF|n>fvMFdjqr9g|PJiDc25GzOuvm zwg35<{`tWA{I(HM^!740{-qBs;irdaw?VT|QxMVwV4z@R3Lu7};tetQ1((Kp{Tl`Y zrR2(1Z$Ze8HJtN#Bh3`o-7X5-^9nlcp8Avd{I_XR7i?xQly2POdF!MMp_)M7qYeT^ zL_tWbazlO7eu6yDPi?Oo=n>tQ!4vS=O&A)xoX}@wN^4=1Ev8F93_#0mV zW=IFd#S&oWpvh~1*GE$gY_YPlX8+(3s#}pa4v@}FpvyKiN1E{Ge-F`FjzViQsN1|e zEE7T&4|g^T?p9b!iCsO0DfCgpm6clDx3-q3xjs7eJ3gr*d|d87VW|P2CbWQZd~4W- zKd%Wg&H4v|MH*N=gMDtVqFKZf~qy_0=~BWQjHdqAkU;wSGQ_A5!(uh)SSn}*skk^T!&Bh zE~CQ7I_SvaV_3yHTBQPdy>Kdsg@fr}NgLUh)qyIC5Re9y3!778Y#u?~^et8htLK}F zT3PpQ2GX6;fSdnQ@O(>P3iZ701k9eOzNv6K2ierX_#p=X#TepHt6}#B3pwuJ zxc$ZLGv-c`D#sGbW{Bn&SK%6dOUjAnAtMT)qh4IGRO1Y7JUfzFxC7iU`78wA$40~` zIfHXjOB!13lwF3jePMZ7UWJs%@5OnWpqixv0X|SeOW_CILIphr-6U6u05)zgbT%7h z8ffsAw1h@JE7Auc#@JVkWd^8z46java;Ko@on@lKvT|`i_x5-M3nTpSqf!#dF8uWe zO%iZ&(DOA{;Er7Mg4IJ)$=IB}$clGhblkx_fO^`=S1TkLo5qbHvR$<%fOr#msIWWC zKTsb^6Ue;r(-Qsy^_-?RygGaWAKiK$OfwmY8V-FLt}kv7$$z{Q-oJp>T-0tXb2cIz zpyUR$sL^b(D^Nj)5Oxwb7MKOjYxwr?`O+ehi998L7NW9H8(?%FM ztOfdAZJPH7W3yJEJo6u9s_%@$(5pN{kI9R*EBug^fs~~odWuG!-@`m}%$b4XhH5eY R33sb@Eig>EmjD0&0RW3u#cu!r literal 3543 zcmV;|4Jh&e3~X;LV{&v zA-0@L5#D&W=k$dW4tgc8n(PDhP>pCO73dbgDrl0mnT9VMS>b6A(4|ABWCgYn3}ZY% zLtJl{R6(E!POM^xH3EX<=~(I*ZFyp~2^FdAa)(yzg464s@3l&9BR(&wiMPmt=nKVF z0Rg>~d)Z27n^qGQM?*CPmF48i46$JxX0OM|1*W2)H)vVPM{H79gnUL&Gp=K4u{n|BV2komK`X&R^_kSbu6a(Wgx_E@-uHif^~4#bAQ$%Sv? zNmwO&5iZkXwQ~#ZbjmQ?O_yMIt;#`5a<6k2i`4taOR6d6k;eDh#CqxzAgfj+g)}%< z4l1KGOj>uxw;mPsov$&kN#==db{2q2U0ie**X%u_F&}$_G3|B8&lFhOfpY8dG`#rD zAfs@WfC!~>B|pG|qhxPTDhJyDnxcm<0(2J-^RYlxZIh|2N~#yLXHG_l$u@X#EZw=ad7af1^H+D0Kd^eu%IA)o42z{n9}D+J5q$Uvc9m{KXJTWg+ick+mf z7#5MVCxs2?g%liXW)KrQGlfoC5A5M1<(I~ryS^9rp+r|)j;sV(mWo#}9EP_|m8+m_ z5OR^Xl%_1>v)GIlTDYPuc&syj=Pe`(<`Lol6m}}gJru#erv=5`$MZ;?@ z?m)`D5so4ZV4ah|wR@Sg*^}iVQVsNQ#T&&Y<({Q6Zj=h6k(zvAtY?~cBzxc)1|6RMCnU$J&TZHFr@(KEI@0a)2^*akNuYMpP(7NO@h z*_nPCM={{ou8$yb^U%Z{p(@n0yM4BnDio&dr;A}5gG4%-bG8er6PfGQEmXH5R5=(v zjDg>B52x0L=Y+MO0C;+E&9^t8oyb0Pd&r3aOo@q*olr7+$+{A-E3jy8=G(SA&;j!l zkF2EiQhw@77PW(iS5(JDG52nU5dtg9YR=Q`m>vNOUqfn==f zG*k~1VMfrY(O4QA7_{wqmt{ya+Z3v~}WZry}M=nKLW%hHOXCzUJx8 z*SrWQ$qcT+5=sO^8lkarJCqSn%NlHDJ9lg@<~Rj(je-;z!N;@&n{TVLAr4bS3TFq!~Q_jq&6MMV8=?vSlMJcaP)5_6UBU>L9?@c7JQ_IJ&<%UY;NB8o&{G8`kA zx=;yQWQ@^h=Px7ifO2h3u1>DR=CO&P(%2Iv;3VGq>eY70TKa%yZtFT3$Vf)oog%M{ ztqsHqZ2nk|@|PB$DA+FnZ(aZ_!Ly>nhJyTHUFvSLz}|&wG#$^yf)Szf0>;&1`k&=m zWy{iIvU+?TcaX0q!+O1X*pK*kX4$pW`e*CU9Xoga)5veuPeq8}45It?G!Oj8uj>Ot zaVMMr>wXYi16O@!zxOZSQ{AtyVKuJwRH2R&Ig!)NS@<36oapB=%XfP;l*&Y83Sn3s zLPkjtl>DFM9S5x&gb$kboD04(jV3Y0-fvm@WqGUM55wYc*0M>;9xi}gf>{dev!Ce? z5H5kZDtM4eio{+na&r;1s1KfPwW8H$FWDb}(e-b`+k*nuX?W`qbr3uf)`%WUon^xMoB@iFh?Z|D6&DHLoJ4FwLO34v3it4G z9p$S=-7WhIaXC4WciaJ*Ra$tzfVBdx7D?!1kf5$4PB9yY=k9rMK5qJJ9l%SJM3rV8m@GCCxZ{8;2va-~^C za8vgNcD!+}f=#qhTeaid-BK69S8x8v;H<+BkzzDLhVT=v9GK!*2uj=({?FKm$pSb) z1b;drstKO+2)Zv@pN}HcLGNs)yRc$60(?P{TfxgZNAvH&G$CIh4x5%3<}Z+PfUUzG z&phw-5jCM;%*RoPpTOT4ugv(yc1>c9_|Q%Y9?y12Q^vW!^W|jPlMwi*=$&GA4W0Ihnb2AiC0qUm*qvvBFG8?L>FV;ZZ?9D1u@1b4ys{K*)$W&kbi~b?(xa zhUf)DJapgr&njT^=T}N8yiwzBY|eL*yV>Tj@(R6>UQ2RF9upx5W9}t4E@Y0Af9MCq zdJo250z;a5G$lTVe_-l6LBJ0WzZ%vROl)I=V#89ncQK`~bhTpcO@9oN>45EZS&DnY za8E0q(J%!O%+N79-J=fqHtgisE4{B~~5 z2Zz@SR8h}_8xl+i;uMu!RZ|QPREf3Tf^WpavEXhry}jiJ;*b;J5v-u3@Aqc~hOX94yN_y^wMv@sPMY9Uje@(%N-*q) zF0whN#|);jf!59R9%@>$pynw!Fn0h+N{#9}s*{o`-m&2L-FpdS^8|pvUa0JW_n%rp zZo&~){g3v8#kX-TD+$rG?r2_}zh&Fr5%&rW;4(IN7W5eEnp(WCz_QhfM(YUL8(?Hh z3dvXxdd+c7>8Zp#gk#yMN+08+`Q$E>6wq291lOnbu*$g3B*idjjlGVL7cAB66?DkG zaVZovzVJ^Vm*k>OIa=fR@dnJ)4X?VV53*x&e+gPkal(5&$6(6++kEH#jRe1Jd_Skr z`mC&*Edk}kqwkHyYjb_=6=_{pRLZS2!+Y0 z4t0@<@`OpC?*Sa?EOHU0`tIXG#;aYflf!_P6M|J5}7LF?4J~)<12#upIcM0%EU(QM=TqvZ@f+v#5~^0 zXC(<^r%FLp3i>uX^QF)hNkv_^y5xza3j)XFUOm#rp<1InK?y+DDqS@HOt5JQyFL_O z$o;ym-8Fv&(2uY;$(byv2s&uh_&roO_{suHJi9o}kEG3CB>NREC9g zZ`QGTdPc;``O89O8HbZ2KeXhLAGhoZ?8t88jp6(og0SkG$ICnXyH9*S0J174T&l?l zE-;bjTnsgCw$3`6{l^p7I3>-w8fxx7LQg#8L`t&=7%FS>#@{QvbYrI7z6GMS_z{xa z`Uk~b$SVY@R0W&y9iv#L-;r^TU1Mrm1=BGsyB|7tLU6Q@x23@WMOOsnt=|`HD=@ty z@Gj%4j-cTBB*;^=XLTd+NV7mtmFIrFtv=e?)%R3BT~*UDpJ9w+3hDEP>ohzdxBNfJ zYD6>YWD2(x6_iIhlve0N=h*}N`$Gx@j6@>d`V3J%HtA-EDk3@psIZ`j9R>f-t5@ph Rcv=^3EoHn&PXGV_0RYN3zoh^G diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_decode_session_init/valid_with_opk b/soliton_capi/fuzz/corpus/fuzz_capi_decode_session_init/valid_with_opk index 469922e0669ffdf0f7b183498f220853de178d44..38870bcbd966a11efbd30061f4b9eda3b5768204 100644 GIT binary patch literal 4669 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 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/518de1210d825ad0a156f42b45a1f26e3f2f5164 b/soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/518de1210d825ad0a156f42b45a1f26e3f2f5164 new file mode 100644 index 0000000000000000000000000000000000000000..623cd282e644a9be5a4aaf24f6c34b9e01d8165e GIT binary patch literal 43 hcmY#j0D?In;(;~814g3<4<3LxV4wgdA22|~bO64z30D9B literal 0 HcmV?d00001 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/a8400c34a55cd824a934bc9039c0faac3ab20c4c b/soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/a8400c34a55cd824a934bc9039c0faac3ab20c4c new file mode 100644 index 0000000000000000000000000000000000000000..4bdcbba1c66cec650844371c1abb90e3c3730d3e GIT binary patch literal 43 lcmY#j0D(C`%=Cca0i)4_2M<633=C`#ih%(r@&Lrv0RXo~2?PKD literal 0 HcmV?d00001 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/invalid_fp_len b/soliton_capi/fuzz/corpus/fuzz_capi_dm_queue_decrypt/invalid_fp_len index 2d9fee5598e8b2dcef1e0741b3e1f214f03e5843..c9f5e9e5e7c1a0cdd5593f0b9e42adc7c5b50b11 100644 GIT binary patch literal 72 zcmV-O0Jr}D0Ri8?g;CSyJIm0sQkz+72;Cy-4&XJT+~&ed2O;J^%3Gp)D#iQBX+hD& e(JV*z#?W5*?0zQbH=CV6rr2sC0tdeXMeG$zXC&GH literal 72 zcmV-O0Jr}D0RiLFUI>)IH+Wl4V9f`Q>E=8xMbj7ty*h`9${l&e@lwxS4Quc`2M=dT ek;q(uZu2NWPoMtdDkc0p`pSt2bCYuC z_H){u>x#vk>eFX!++y^kHPh#n`N<86yOdYyYqOLa@oAZ|2pH|`-(j`mSE$l1mNi;X(CPgb0onHj2jY*QC|TRrF0H>|s@s$Gg*^!BXg{}HbJ;n%@E zw>LB$PH&NNo_2ZFu9XM>?MhpJI8C;(=Hu;*&pR!q+eSD)I8$#eJSp&O#%im*Ow0ic zJKk9c+KAatjp-_y?B%$!Z@TeoSlt#!#UQ)J4TA7XgBZC@vYeeuKoU!R}3 zynNfmAaaR;bx9D9kh_HB$9?A&L_Rz(-p1w}_DGm#3ya|I*plp{$Idu9E-MmPHhEUK zb5UTw&(@xp6nUfa<*u`e@4rl}`kk<~Rm1Mvq_U3KB^M8$^vSUJvdCe(CgJKL zPHT_sNMH1=D2YF6;Wvi+PK&zx0}h?nuDvA~U*5Adu4v)JOXuS>O?qDEo+|e|<--U` z6Ppfl?lD?b>|OqH;nc3ARZoN2m&nI#iIDpd&m8C=&k?cXMo{qU2giDfH_nNgKI2=_ z>Nai1$P-^VV?MVx{C%E~R%CT5b8&ydbgQ;i1zn3Rf-AmsCbNoiFVBvNES5iIoVwsZ z-<~T%k=u^Tub#5Tjrm#QDNlyvf1en9CiXX6%i@wbK5g+i%hvq8&sV;8;waBlon5Sd zAbMxSOO24o&i$<68D;a&Zz<;3tkUeBvNL=A8BWyHjhvE;|C5%qmy-z2eyT1I+URAJ zy8N}xBuCae>YK&Rt#B!m^yUe<8M*dZfXlOqZxz(qr1*|Lm}*hw<2TLpPs)OC3@7B$ zk8DxSxK*I{)@|k#(Orx)&q_=?b4nv*x#vb%osv~M1=1fMYWU^e^(ItdmWS=8CBJTI z{aRAGZtJFxJNM62DE#kvk?V@t&ud+MR#X2)%u-U)w%M8<>77^dYVrLw=iabsmx`Ak z`-BT1_o;e2BRH2fu#g6Tge-(Vqo|W0FP>gg#Z8m literal 0 HcmV?d00001 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/13c724f130634a617fe2b48c915160f3e14db4a0 b/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/13c724f130634a617fe2b48c915160f3e14db4a0 new file mode 100644 index 0000000000000000000000000000000000000000..268ff1ca24ec77bbccddb446c0fb99a7cec8b7c7 GIT binary patch literal 1441 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 X7_1o>jCSkb literal 0 HcmV?d00001 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/68c937e9130da68b8d862ed640f224ffe546e11e b/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/68c937e9130da68b8d862ed640f224ffe546e11e new file mode 100644 index 0000000000000000000000000000000000000000..bd8f635aab45aa1a3003508b9d2648b3403aed90 GIT binary patch literal 1456 zcmZRKWdH+4K>`4x3^%Dn0PH3JR;^-%8op{(@$ditSD^t021b?xpACLRWlmW*J(TZB zY?(vr$GH4pm!ORnE8q3GdFD0$GWKz5cr37{s^t{Fk36(O4Tw-8d z62v3qE+P4G-+2X*56_FYu{no566V>$BKSMDB>U*GGmZkwik3M}o)zv~6xi>xwI}9@ zykYrr*IC8)UnW-lPT1P2VfSrPSx4-Wi-%A8WLSJzZr8^e94Mcw@Yht6x)-V%&2@7Wqxv~c33^KqIcJ+E_5m3yA@fyUXUgPePeRuy}f zzg#%AD{0l!VD=^QF>WG?6?sW{2CbQz(9|h4hw6vcmajG6)4;nTLf2p z=}cx7O$~bkwfxbOggd(>cmtQ?)jT`f`##5dQ$yYxy_)P3?xR%8wb9~z3 zbC#|7d!Mg-@5E7_sXDt@|3LK4h?g26k)8Wl!!yd}pWjlDD>Xrq@=>hjk%lN?#^sBacKx5A}N(wisbX5`vu0WQxbzEx0b zlj1x2V5&uxkKZ)YKPd~oF`SS~Ke9#n#jOIpw{A11i0)#Xc~)ZDnNu1e%RM*B>XfY7 zDUkm7P{S|xt~a3yvpj4!E%|jz>(`Rfbz3)m+_`_ILLoRUp9H7nssAEoDJf~&Y)y~! z&MSGf`2L!6!fe{5;^oJk%P0F3y&uMqA zD;9IAPoMR~Xv@adOrKZgCpReWQeLI6%~Ec}r)A0_V6?M;ht=|HlEGPecibnO`aQ4f z6yL2QXB!VJHtOI$S#fG+W~l11Om&OV2k$)S0k9ZK^v dFjzA%812{zv>lwSQsj-`S!x9^6)`aU2LP~FX~+No literal 0 HcmV?d00001 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/alice_init b/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/alice_init index 32232265371ad41c73294420cb51168f04d25b31..992cb36eb961f6a828284f00b128c98024614bf4 100644 GIT binary patch literal 3847 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 literal 3847 zcmeI#M^qCC9>;M&N+6&lKp+GZ2_-)MUhdFrs(J}f`fv%hn?HLeO~wA_wv8}kDvE`ygdJj7xbMJztcZ|{^x1@ zPJQ2rS2+C&tlnAlQiJl#D?gu%$Zr4q?Bf~ZSN`H4TdB43!I<1X#K`d<#M550%us?l zOO1739hq=}!Rs2-6E0a6S{^mf8h)>8ck`~{&+4QRf^*)8>6~>KC6$*}+}9)KH!k1% zm=&{k8?s*El$qjjo!Y7j(b2IDi1kp}%!;v&I&r0A2}Sy1eWzr5HVi@g5_JDCAd$r* z>6O=JiLq8*b_aaUDkud-xE4d+>MgI4qou;goOA`v@TPXLm3S~PqUOkk9p$WWP9;{42F&+$`zH&-hm0F| zGPYfiG7z1G%VHkvn{vqKhEAzm_^)llg{14z;2IGk@##@8F7AL2=HXxzM7hhm(~@DHaSWL#(y!= z27`0&uL@9^O592)?PKN2CSKTx^K%{OSfbiwT~*ofz8F))Pg;WPDi*zJW%+VyVdz5e z1KL)sI3EqD(E;!RIgWjt<+LS2?uEGRSIbVeBWnwR-90SnvE;KvdmPqb@^lBRGVmRJ zSAnMu5TTBM3^F1G3Mu`}42Q-U57mepi{)=2P`M^?CAktknV6_9{hMe}_=cG-?iXn< zfrAaRu!-2sXT#f>(v0;wEDrs9B*}H#a?1+UnBdoXfiLJVk3lmP-%wtu%B~sB(Y-mPN0BcrB z>uaZ+DOGuvS=zActg&m7=NHbIl*iC7+wa^BmeR-|NT89^Thx~MQAIZpy07d31}`qe zeP9CVn;0IYCKn~G_M{o!!0a>9tvwB%(0y`p(3ux9ND^akgSGicl`ph?rs*Cvi;T6i zW}dewzOF^qwLT&()tlN_0qUkxAzR?LK!r)95P=Q{RNe05MiP)_VkMM0%e$eZtI_1n zOkrblhVpU{=T>KW4Wf62b1wv8^dj14r`r4PbvEnIUrr~?G~hi?2N^W=mn#<$f_tDdLV}~1(({qiHPgb2G8Kw8VgdT0 zgjMkd7JH)f>ZKhKO@PjQj{BTVW0Xm~)f17SXtZQ;_*XuVE-d@~k}6p16d*Ex9z;f` z2!P{UXyZvY*u9-KUf;}Jb*qN2G6jvfH*zRCjw_eh_7a-2|S zw_TG|sZQcM9G^6tFyDV}+&g`3m~kMzhrv;#WJ>v4^|-(Ogy->kaNhnR zw-|YHxZ8Josu89`jb(Ln;SUMhv`h{paUBIWZYXq7 zpVj2%-w3S~A=eBxEtJ98_;We@`8~QE6~0?@#DdKwh6o=4TH;%xd(Fzz-c-3LU+>N- z$#5O&jKh?_QB01-yaq#9DCKQaJUhRh3li{l65gK1PDR>_7zZLOLWuWYxfiC!P8F~9 z;qNqJ<`RF+3uqlOdgSf9k&g9ggf^>Pb@RLwQ{YW#nvuA6Iy0epGXBg?w$|30h&|f$ z5L32tP00{&5;PY^?3|qz&BVWEx@nP#>Io4YUBFJQtGkBWd7jrUwD+T>VMtuss35tc zmpWyJU2{Z510p(jL@7)dx&fvSY{!=ki#o&^F_M%l0C`ts(ZbLUw^y;4<^`lYute6=GLRb|@xGGpK0L-o{ zOa3-bWwNwCNZ}qSI|+^i|5-}2Ir1>2dd`c)A_Cw=qLquvJyg8*H(GAN7L({j?02ay zu8xv-DSynlwU=$)K7!Kn(#v7_H2)=Xj^d>7re&_%_e*9`=#T}vGZ9Zxt!=fV!|Iy) z)VKD75+v0HLoketQek`5mN%2Yoi6zSSi65-dw0l~D6|YBNy_d2^bwZjkt+)291m&W zOQ;Vu>?-VT9m|-?2Bv;csG8OY?{f9^#Y9POTx{ZP;@XG9aH`FukltdBeRjU&X4yd* z#%xcjadbko;Yxt}qc^MM{G#(Y?iKNl2n{#`=ZY%3G`SNLur2Ptz9wj1 zL#R~iIT`a|+lu@bE4=&z8xD+xj<|)YK}EG)`Go$PvdqND+t$&C455_5 c4zpL6e-QYCz#jzuAn^Z{z<f34Ji1H)I^)&Kwi diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/bob_init b/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/bob_init index f081507e8bb388ae75c6371310bea58aa9300129..822f2b46efe03474bbfe2aa8c128a1d844f1ec7b 100644 GIT binary patch delta 1236 zcmV;_1S|W63xx}iu77o{+M7oC=lCLDi3!?w3U8dkh#}TY4~A?2*@8z=YEskyq&bJK zASFt|>uY3qdxa#iJ9t`st17Blo*PzO$4e^!mcwf5$G2qT7M*JPwuI=wt8CYxo^ zIU#bx3~vKfeVLGdg8+!xyMXMr4YI7DAXfY^7i5Yx?nW?1lz%k|T5AQY3h5UI8VL(B z@DJ$*Pv?fj&VZ-%aJS-PeheW3-jRT3#bVwVls=I#4N|Q<#SowzaIXdhNAPo(Lackt zU+Vy7kMfzT`GeWTxHLq-jUffV^c_1%&t6n}Jb{r=j<_m6vqRPtDF*6Ef zd3qOUS$YH-0YsHok5PU~3AIS(xGeBMK9~zs6_m;(#D3#{)?^Z-Cq4u)X^B?JXpufD z>qip`Am5O=NBhp3x*z3KJLdDMvwM>3(@9^~KQM@Q>wnmi1)vzsR0V}ZBy|Z&7bA`g zT1bP?j})O0CNsLFz@(TYl3p^C#TkPfbbtg*lnZvAb0tt8pduB5!xV821!14x6<;L; zwAl+>5UgDEHVCrfL#PlKmy&Wepr40zI+!u29n2F_%eb`!re7KZXXGdRqQ~7hi{>SB z=b&5P#(%}a7=*{clBH8?Hmq$!7qQ-Prb0o&X8=$5h`l$NQFgR*i8%$Gh{ncfu%p|G zKQO!fg~n?81aSmYIlB&qXb>;(f)~^)``H=Rs7};K3eL0v-2|)B=T!ffeeDrXU`8pQ z=>!Neu0+#M8(5K;{LL6Mh0(D|CtDUA1PAb#gMa6#b^J0P;UkBEya1DGCsa~}@BAHT zumX^#MD2S?SJ*}tF#)l~Ik#9rOCh&KyS3P42N4sJ^LS%cP z#+}%{KcaL7(jJ67m9+pwln0$UcM^#Ns4Yv7-^t4j=R?mq2h;S0+9w;TYC-}_4#hx( z-hXfh`-?&8_cB&=Bj0=sAY^J3_fGW3N;ijqJ!J{>!JX76gm>5yA_KF;N2yODA+FIO zo7Rvm9JiN79)jD&8N3bsyN#{OB)iakqjLe>I1h&xm>uxn|ss+i_BcDfhEl4Ym1lKmpLmzxV_ zCMdqCYhlAwwMll67rl|Gq1U8Kg-N+bT^dY-fnw>Hda7qxHi&^6SIW9}Kb>F$+AwMU yoP*+G2ri0&7so>E^ZUq;N0XL-p delta 1236 zcmV;_1S|W63xx}iu7Bi9rqr`_)S<#6De)b5y^b2EcyN?Pa{HzSe37$1;$M{~CN$eH zt+67BcbpOxKNz-c2HMXk2Yn+cvN#5Iv7?ot*eM7~m_v{dE)vP^+!PEdI1#p*FL2DG z%n8*Po+3vLVm51L+z_d`yvdq>UFr%h2s5t1RnSMOaXY9**nbMcazPZ9ZT$ifG#iBO z)+Z7%4+wCN(h-M2d<7D9QkTejjl8{kL8BWBXQEy!Dd;l-cZo+*h%BveK@mN(sp#5pJe z9#w_^xo2v8C4ax#gsfskc~B@Z!W87uA(LcK6nR!VBNuB@g6$i=LPCDd%pbrvLAj_m zV}Ke!OaO?Qp1LvyJ=s;?d#8GOST?maGSJR-WJ00&ft)%VDfs~_yvD~mW0<(6!6J-; z6=6lVRp|C)09v;%N?FmCEDprBUgyiI8#9M;MZ#KUSAWDCKyXRf2asVPT0j?(Xtlwe zSt)rovq=k6#V}MOC40N#YZ9kZ|K>;jJH5GJTyS_ayDTMQpl`tGQS;+xgU28I{7t9J z4CmHxHoSzUybBOZc6R4uyy+sSXjRX=p=S$4Mnj!E!8#hkpgVe+A+)mn?0M_MarC-@ ztBbHTA%7Q!xl4Rj9wrMXNT?Ds#e3t*r1X|Smo|YRrn^Q3!0a2c^s5F?1wui~NsQHN z=ED|g%fg}<1X1{Q%*TEH3UwB?XrwVDIT6THhZdW(FC_FSBV;VFm`?o)xKa3bfmbT2 zDv(_UrnV?}SKCScrHog|I0soaxvNxRsu`dPhkv8OtJIq#yksqf1dq5h!6pKe&}fk5 z)}{&qW*M1YnKX$-SV}!5l8-f<4-{=PmCZ}bVL5Y!L((gz2?u=Zt9HDPsL>GxTTKb) z%uvg4N(wq-C_`#!uHsdZeRRu~;k#sA6Nw&zcdg2HAL@iL=IL+rm(0Vb8ld4MI0z0A&}?Y5&ddygWay_cW<+` z3$!tR@i@`a0O(Se?#7yIELVQU28Xk{mCHX+;Y=`c2ye3h42-86L8%)y3$kRJ#0*Py zIi`9fLkNg}8bJvevs8MRE7RG$8L1YJ{C}3B8M#1GSm9GFS1COJ=dJ?0jeI2s8yrcJ zh+()jsNVd&K`^XEr-AqfP$m{_ClVZD61=6Gd;ijvr@1ok6<5zCO$Nnh@S2xL{8l}c zSkek~C}Ja$44~B|xRqow|Cff4=BH>{XuVRRmZEVTQk~Pmlk|i@vc)hlS~Z2aTz{?d z3N4IHAnC8rwqE*zl54|5L9}>ec_*Z>Nthd@tGg=Z^<{SyDh6sorh%FXN++-B$_whX z9l#s1VTiJ}YR3#2n-&y#hQ0Rl8-rGc3>m@x!z*N&mA@-Vo=KDb7(E(eeeWQl%qwlR zQ(j&|aTnxSs{yOgN^KigC#`vEx=EJ7N`#LT<(v4MLO=8ss>aDNTgo+NXDH&ko>OKc yVL|1g9AI*f!Bw7iOeiZOrdLxin_bH4Wn$+LVdLQjK%-`$DYy=E@8sB%ZUq;z&^sOg diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/d5b3ba86052817a36e8fe5207a107869e5a1423c b/soliton_capi/fuzz/corpus/fuzz_capi_ratchet_from_bytes/d5b3ba86052817a36e8fe5207a107869e5a1423c new file mode 100644 index 0000000000000000000000000000000000000000..1000f67255f23e7df8accc2dd782b0b4dfa4f768 GIT binary patch literal 1441 zcmZRKW%&31e=-B3AOXNY04NavyHUV?6ds7PY85NghE=PIfB*l#3JowYFtQx@Z15{8 zbIQW$p?ptb%N$xi#^ndQ1Z}if`L55+Gq3rVv5!;3V}UhQEvNX6q^4Rsx@;4@z#NmN z*fGO+S9PoMtdDkc0p`pSt2bCYuC z_H){u>x#vk>eFX!++y^kHPh#n`N<86yOdYyYqOLa@oAZ|2pH|`-(j`mSE$l1mNi;X(CPgb0onHj2jY*QC|TRrF0H>|s@s$Gg*^!BXg{}HbJ;n%@E zw>LB$PH&NNo_2ZFu9XM>?MhpJI8C;(=Hu;*&pR!q+n#w)?`$0*JSp&O#%im*Ow0ic zJKk9c+KAatjp-_y?B%$!Z@TeoSlt#!#UQ)J4TA7XgBZC@vYeeuKoU!R}3 zynNfmAaaR;bx9D9kh_HB$9?A&L_Rz(-p1w}_DGm#3ya|I*plp{$Idu9E-MmPHhEUK zb5UTw&(@xp6nUfa<*u`e@4rl}`kk<~Rm1Mvq_U3KB^M8$^vSUJvdCe(CgJKL zPHT_sNMH1=D2YF6;Wvi+PK&zx0}h?nuDvA~U*5Adu4v)JOXuS>O?qDEo+|e|<--U` z6Ppfl?lD?b>|OqH;nc3ARZoN2m&nI#iIDpd&m8C=&k?cXMo{qU2giDfH_nNgKI2=_ z>Nai1$P-^VV?MVx{C%E~R%CT5b8&ydbgQ;i1zn3Rf-AmsCbNoiFVBvNES5iIoVwsZ z-<~T%k=u^Tub#5Tjrm#QDNlyvf1en9CiXX6%i@wbK5g+i%hvq8&sV;8;waBlon5Sd zAbMxSOO24o&i$<68D;a&Zz<;3tkUeBvNL=A8BWyHjhvE;|C5%qmy-z2eyT1I+URAJ zy8N}xBuCae>YK&Rt#B!m^yUe<8M*dZfXlOqZxz(qr1*|Lm}*hw<2TLpPs)OC3@7B$ zk8DxSxK*I{)@|k#(Orx)&q_=?b4nv*x#vb%osv~M1=1fMYWU^e^(ItdmWS=8CBJTI z{aRAGZtJFxJNM62DE#kvk?V@t&ud+MR#X2)%u-U)w%M8<>77^dYVrLw=Y-j`OU28N zanF*^Rt)fF&8{5%L~0ypwQ~3&Q>hufab=F> zRLgBZ%?X&Ajj(HmCKm>n=1?}=`Sgj=mW{N}ryV`AeI1k5Ju}We7jugPUWS4l3Ue(x bRG6QE!J2`=Xva=qDFMt@@zr$+zHOb&Cy*us` zPW_(Ob&BuSk+Y2l78`YNpR71FGc#26*rqP_wtCK~Z&-I*Rl5|s=@yT zZf|HhoZcekJnizTT`Ld%+m*KdaGGpm&BxmrpLbeJw>|Tq-q|`rcv9fmjMY|qnV16@ zcD%C?v=OtP8q-xY*~@Wd-+rGRtpXk&wr6 zdHJ@BLF5tx>yjWIA$JMMkNeImh62mkWs$>n%irG&Ov2Sg zoYo%Mk-q3#Q4)XD!fy=sofdWX2OK)DU3*I~zPx8^T+zabm(Is&n)JNRJyq^`%7+n> zCN>@9++(z=*t`7Y!l_+JtDXk4FOiSg5+U~^o;lD#o+Dz%jiBJy503Q|Z=4e~ea5$< z)ot32kte=##(ZvX`1?E|t;p(B=HmW@=~iv43c40s1Xq0NOlB43UY;EjSuB6bICa5+ zzCBljBDWovUp-}w8}qZqQ=SaT|2{GJOzdyCmc=D=eA?o3maX}FpRauH#8IB9I=fi^ zK=jUtml`3Fo%>nCGs@{)HjQrTj5eB>CF>zGji>-0GDSI-zuoJN%0+hFx8^U$8VbHpOgjP7*5Eg zAK9XuajQV@t=r5gqPrMpo|Tw(=9EUra?g#jIwh-i3Zy?i)bPu_>rJS_EDzgFOMczb z`n9BV-PTPXckZ95Q25{TBG(nOpVzwjtfu~pn5CqoZL>8!(mSu@)#CeW&Iz+=mx`Ak zچVK%D jq|D \ No newline at end of file +aj</q:D6. JD4K~A*@wCe \ No newline at end of file diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/dde7aa5a3d9db2fc6e2bcbe681f51a78d17fcd92 b/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/dde7aa5a3d9db2fc6e2bcbe681f51a78d17fcd92 new file mode 100644 index 0000000000000000000000000000000000000000..377e8ab0a2e4e939ccbb49b8c1f1e858ff6bc61c GIT binary patch literal 42 vcmY#nWSqFiHoDmM7306->{})3o;uXb%hk;VgWsQx+B6*)?!A0@?#nv>e)trT literal 0 HcmV?d00001 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/unknown_version b/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/unknown_version index d94af16c2468a54afa504733ccd73c4011562194..f933690bd61ca26a85ed8ff3abd45acb7754e1fa 100644 GIT binary patch literal 57 zcmV-90LK6S0D@s^xjY1-FOzYY@;d6w(M07oE(zpHL^R9~h@DHz~Oz#$cg;GKH7#>OC`9u P^h6AihH7!dd_?vFQP3Us diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/valid_compressed b/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/valid_compressed index cf0cef3f78c292fddee2fce46effe4242201acf6..f7d4fa492d6cefe461ba685c6f099e52da351c75 100644 GIT binary patch literal 81 zcmV-X0IvT50hX7Fhvit3fYBIV)$u>rWlRwv?K9P;%%>E05B@-q@3BJOkW|Qu=ib5| nxCb0XHuX}EMMH8TLi3|}IH>?n`7+a{lo}b#NXY};*(@LzXBQ^c literal 81 zcmV-X0IvT50r))p?Pw$e>6fI&Y~+6(|DIUy@+gdwwb~R*C)(&}NxIiz7E-J#ur+N< n%UVRE2o(M{52ix9b|*G3u0YxED65cYce!7YY40#>MJ{S7eFP?< diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/valid_uncompressed b/soliton_capi/fuzz/corpus/fuzz_capi_storage_decrypt/valid_uncompressed index a5bd365a5624155504f3f5df380ce5e56a77fc11..5681042cf2a0660cddbc8d71c7e3c46167c1d89e 100644 GIT binary patch literal 57 zcmV-90LK3T0D@s^xjY1-FOzYY@;d6w(M07oE(zpHL^R9~h@DHz~Oz#$cg;GKH7#>OC`9u P^h6AihH7!dd_?vF8A2TR diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_stream_decrypt/single_uncompressed b/soliton_capi/fuzz/corpus/fuzz_capi_stream_decrypt/single_uncompressed index 16c5664e915420288bae0228e825cfa738998192..2e565c6a201b4985622e2776dc13c48886995979 100644 GIT binary patch literal 57 zcmV-90LK3T0KZn#i>JBWUv)q__3aS^RMn}hxOQ6r=>gdJEb-~v0sbWWVn7prn=K$a PF-9j~#I!--+GLwbFo7G& literal 57 zcmV-90LK3T0KKzEO`o}!;~zb;xHHD2p{i&4Z60(1*8w=sL;jLn`$qDB#AOs~LM};T P(RH~z_bLThA#%W{8wML7 diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_stream_decrypt_at/index_0_final b/soliton_capi/fuzz/corpus/fuzz_capi_stream_decrypt_at/index_0_final index cb94fe7c45efe03a977e155640fa2de1cce93e00..8faef8dc48957a080af1de390a3cdee919bdc714 100644 GIT binary patch literal 63 zcmZQ%Xfv<f5jLssEOApM7$9{k-i9tdd{Ft?gle0>*zE4a-|*{^MT~RvFFW{4%Zh P+}ljPQx<{p(GP0@@!K7| diff --git a/soliton_capi/fuzz/corpus/fuzz_capi_stream_decrypt_at/index_max_minus_1 b/soliton_capi/fuzz/corpus/fuzz_capi_stream_decrypt_at/index_max_minus_1 index 546af07bac34fbe8c6767cd4753d6ebf37ea95a8..490e415989da64a53332c2a7879ae1724b14f5ff 100644 GIT binary patch literal 58 zcmZQ%5LvkBSn#jUxvTo~1Ruoa`c~PO@g0$xJ?Y1 literal 58 zcmZQ%$eI#%B5IG_6vw-BE`{D(^Z(pWzJqsi&nx`<4*`tZ*e*%#+8I{ava)8^wMqI) McMsoc{}8bP0O^1uEC2ui