diff --git a/.cargo/config.toml b/.cargo/config.toml index 8cdc107..c11d836 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -12,6 +12,8 @@ rustflags = [ "getrandom_backend=\"custom\"", "--cfg", "sha2_backend=\"soft-compact\"", + "--cfg", + "keccak_backend_soft=\"compact\"" ] [env] diff --git a/Cargo.lock b/Cargo.lock index ba597fa..e8da8b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -120,12 +120,6 @@ dependencies = [ "rustc_version", ] -[[package]] -name = "base16ct" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" - [[package]] name = "base64" version = "0.13.1" @@ -167,9 +161,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "block-buffer" @@ -191,17 +185,17 @@ dependencies = [ [[package]] name = "bt-hci" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40f2166cc54c410ddc0d0dafb3cf8dd536bcbae6bddfcc12c020c5ee4de518de" +checksum = "211713d2e9fb4793ce4360a712c0764264aff6be48932ccf02ca2a331c0436a9" dependencies = [ "btuuid", "defmt 1.0.1", - "embassy-sync 0.7.2", + "embassy-sync", "embedded-io 0.7.1", - "embedded-io-async 0.7.0", + "embedded-io-async", "futures-intrusive", - "heapless 0.9.2", + "heapless 0.9.3", ] [[package]] @@ -227,9 +221,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.2.58" +version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "shlex", @@ -241,29 +235,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "chacha20" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures 0.3.0", -] - -[[package]] -name = "chacha20poly1305" -version = "0.11.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c9ed179664f12fd6f155f6dd632edf5f3806d48c228c67ff78366f2a0eb6b5e" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", -] - [[package]] name = "chrono" version = "0.4.44" @@ -275,22 +246,11 @@ dependencies = [ "pure-rust-locales", ] -[[package]] -name = "cipher" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" -dependencies = [ - "block-buffer 0.12.0", - "crypto-common 0.2.1", - "inout", -] - [[package]] name = "cmov" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0758edba32d61d1fd9f4d69491b47604b91ee2f7e6b33de7e54ca4ebe55dc3" +checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" [[package]] name = "cobs" @@ -317,12 +277,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" -[[package]] -name = "const-oid" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" - [[package]] name = "cordyceps" version = "0.3.4" @@ -365,12 +319,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "cpubits" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef0c543070d296ea414df2dd7625d1b24866ce206709d8a4a424f28377f5861" - [[package]] name = "cpufeatures" version = "0.2.17" @@ -410,22 +358,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "crypto-bigint" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a0d26b245348befa0c121944541476763dcc46ede886c88f9d12e1697d27c3" -dependencies = [ - "cpubits", - "ctutils", - "getrandom", - "hybrid-array", - "num-traits", - "rand_core 0.10.0", - "subtle", - "zeroize", -] - [[package]] name = "crypto-common" version = "0.1.7" @@ -442,19 +374,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" dependencies = [ - "getrandom", "hybrid-array", - "rand_core 0.10.0", + "rand_core 0.10.1", ] [[package]] name = "ctutils" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1005a6d4446f5120ef475ad3d2af2b30c49c2c9c6904258e3bb30219bebed5e4" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" dependencies = [ "cmov", - "subtle", ] [[package]] @@ -470,13 +400,13 @@ dependencies = [ "defmt 1.0.1", "embassy-futures", "embassy-net-driver-channel", - "embassy-sync 0.8.0", + "embassy-sync", "embassy-time", "embedded-hal 1.0.0", "embedded-hal-async", - "embedded-io-async 0.7.0", + "embedded-io-async", "futures", - "heapless 0.9.2", + "heapless 0.9.3", ] [[package]] @@ -583,29 +513,6 @@ dependencies = [ "defmt 1.0.1", ] -[[package]] -name = "der" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "dhkem" -version = "0.1.0-rc.0" -source = "git+https://github.com/RustCrypto/KEMs?rev=2d277162e0c5ed1c53bb315d0c0dace394cba70a#2d277162e0c5ed1c53bb315d0c0dace394cba70a" -dependencies = [ - "elliptic-curve", - "hkdf", - "k256", - "kem", - "rand_core 0.10.0", - "zeroize", -] - [[package]] name = "digest" version = "0.10.7" @@ -618,13 +525,12 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.0", "crypto-common 0.2.1", - "ctutils", ] [[package]] @@ -636,44 +542,12 @@ dependencies = [ "litrs", ] -[[package]] -name = "ecdsa" -version = "0.17.0-rc.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91bbdd377139884fafcad8dc43a760a3e1e681aa26db910257fa6535b70e1829" -dependencies = [ - "der", - "elliptic-curve", - "signature", - "zeroize", -] - [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "elliptic-curve" -version = "0.14.0-rc.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84043d573efd4ac9d2d125817979a379204bf7e328b25a4a30487e8d100e618" -dependencies = [ - "base16ct", - "crypto-bigint", - "crypto-common 0.2.1", - "digest 0.11.2", - "hkdf", - "hybrid-array", - "rand_core 0.10.0", - "rustcrypto-ff", - "rustcrypto-group", - "sec1", - "subtle", - "zeroize", -] - [[package]] name = "embassy-embedded-hal" version = "0.6.0" @@ -683,7 +557,7 @@ dependencies = [ "defmt 1.0.1", "embassy-futures", "embassy-hal-internal 0.4.0", - "embassy-sync 0.8.0", + "embassy-sync", "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", @@ -754,18 +628,18 @@ dependencies = [ [[package]] name = "embassy-net" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a788d93a10705db3350e81dc743c323e3e40371c5e52024afe7816d3ff05cf" +checksum = "347bc855bdbdf50ed9c5a1d80e8204badb0ba149b8732dde38e1e9708ed9d313" dependencies = [ "defmt 1.0.1", "document-features", "embassy-net-driver", - "embassy-sync 0.8.0", + "embassy-sync", "embassy-time", - "embedded-io-async 0.7.0", + "embedded-io-async", "embedded-nal-async", - "heapless 0.9.2", + "heapless 0.9.3", "managed", "smoltcp", ] @@ -787,7 +661,7 @@ checksum = "a07d2eb9f05a6fc876500949856ea1be40773d866d8cb99384f72d0ae4568c16" dependencies = [ "embassy-futures", "embassy-net-driver", - "embassy-sync 0.8.0", + "embassy-sync", ] [[package]] @@ -806,7 +680,7 @@ dependencies = [ "embassy-embedded-hal", "embassy-futures", "embassy-hal-internal 0.5.0", - "embassy-sync 0.8.0", + "embassy-sync", "embassy-time", "embassy-time-driver", "embassy-time-queue-utils", @@ -816,7 +690,7 @@ dependencies = [ "embedded-hal-async", "embedded-hal-nb", "embedded-io 0.7.1", - "embedded-io-async 0.7.0", + "embedded-io-async", "embedded-storage", "embedded-storage-async", "fixed", @@ -833,28 +707,14 @@ dependencies = [ [[package]] name = "embassy-strike-driver" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/strike-sensor#2a519b4582211924f94fcd6c58fd79f186caa247" +source = "git+https://tangled.org/sachy.dev/strike-sensor#4314e11615f4c7c9417112075b1ace76bca67a6d" dependencies = [ "defmt 1.0.1", "embassy-rp", - "embassy-sync 0.8.0", + "embassy-sync", "embassy-time", ] -[[package]] -name = "embassy-sync" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" -dependencies = [ - "cfg-if", - "critical-section", - "embedded-io-async 0.6.1", - "futures-core", - "futures-sink", - "heapless 0.8.0", -] - [[package]] name = "embassy-sync" version = "0.8.0" @@ -864,10 +724,10 @@ dependencies = [ "cfg-if", "critical-section", "defmt 1.0.1", - "embedded-io-async 0.7.0", + "embedded-io-async", "futures-core", "futures-sink", - "heapless 0.9.2", + "heapless 0.9.3", ] [[package]] @@ -898,22 +758,22 @@ dependencies = [ [[package]] name = "embassy-time-queue-utils" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e2ee86063bd028a420a5fb5898c18c87a8898026da1d4c852af2c443d0a454" +checksum = "168297bf80aaf114b3c9ad589bf38b01b3009b9af7f97cd18086c5bbf96f5693" dependencies = [ "embassy-executor-timer-queue", - "heapless 0.8.0", + "heapless 0.9.3", ] [[package]] name = "embassy-usb-driver" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17119855ccc2d1f7470a39756b12068454ae27a3eabb037d940b5c03d9c77b7a" +checksum = "6a189cbf1d8ab3c591f88632f85c1df892b6ab04116037cbee39dc37cbdcd79f" dependencies = [ "defmt 1.0.1", - "embedded-io-async 0.6.1", + "embedded-io-async", ] [[package]] @@ -972,15 +832,6 @@ dependencies = [ "defmt 1.0.1", ] -[[package]] -name = "embedded-io-async" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" -dependencies = [ - "embedded-io 0.6.1", -] - [[package]] name = "embedded-io-async" version = "0.7.0" @@ -1006,7 +857,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb5a1bd585135d302f8f6d7de329310938093da6271b37a6c94b8798795c0c6d" dependencies = [ - "embedded-io-async 0.7.0", + "embedded-io-async", "embedded-nal", ] @@ -1202,7 +1053,6 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "rand_core 0.10.0", "wasip2", "wasip3", ] @@ -1244,9 +1094,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" [[package]] name = "heapless" @@ -1260,9 +1110,9 @@ dependencies = [ [[package]] name = "heapless" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed" +checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" dependencies = [ "defmt 1.0.1", "hash32", @@ -1275,31 +1125,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hkdf" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" -dependencies = [ - "digest 0.11.2", -] - [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" dependencies = [ - "subtle", + "ctutils", "typenum", "zeroize", ] @@ -1318,12 +1150,12 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "serde", "serde_core", ] @@ -1360,9 +1192,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", "portable-atomic", @@ -1371,9 +1203,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", @@ -1381,33 +1213,32 @@ dependencies = [ ] [[package]] -name = "k256" -version = "0.14.0-rc.8" +name = "keccak" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2c6c227649d5ec80eaae541f1736232641a0bcdb3062a52b34edb42054158" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ - "cpubits", - "ecdsa", - "elliptic-curve", + "cpufeatures 0.2.17", ] [[package]] name = "keccak" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ - "cpufeatures 0.2.17", + "cfg-if", + "cpufeatures 0.3.0", ] [[package]] name = "kem" -version = "0.3.0-rc.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ae2c3347ff4a7af4f679a9e397c2c7e6034a00b773dd2dd3c001d7f40897c9" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ "crypto-common 0.2.1", - "rand_core 0.10.0", + "rand_core 0.10.1", ] [[package]] @@ -1425,7 +1256,7 @@ dependencies = [ "pico-args", "regex", "regex-syntax", - "sha3", + "sha3 0.10.9", "string_cache", "term", "unicode-xid", @@ -1456,9 +1287,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.184" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "linux-raw-sys" @@ -1560,6 +1391,32 @@ dependencies = [ "adler2", ] +[[package]] +name = "ml-kem" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c77d5ff6d755d09a0ef4d4d28c2b7e83658fe83e8c736d55e93d43e380d1cd" +dependencies = [ + "hybrid-array", + "kem", + "module-lattice", + "rand_core 0.10.1", + "sha3 0.11.0", + "zeroize", +] + +[[package]] +name = "module-lattice" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc7c90d33a0dac244570c26461d761ffaeadb3bfc2b17cc625ae2185cafdffae" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", + "zeroize", +] + [[package]] name = "nb" version = "0.1.3" @@ -1717,16 +1574,15 @@ dependencies = [ "cyw43-pio", "defmt 1.0.1", "defmt-rtt", - "dhkem", "embassy-embedded-hal", "embassy-executor", "embassy-futures", "embassy-net", "embassy-rp", "embassy-strike-driver", - "embassy-sync 0.8.0", + "embassy-sync", "embassy-time", - "embedded-io-async 0.7.0", + "embedded-io-async", "getrandom", "heapless 0.8.0", "jiff", @@ -1735,13 +1591,13 @@ dependencies = [ "postcard", "rlsf", "sachy-config", - "sachy-crypto", "sachy-fmt", "sachy-mdns", "sachy-sntp", "serde", "static_cell", "striker-proto", + "wharrgarbl", ] [[package]] @@ -1798,16 +1654,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "poly1305" -version = "0.9.0-rc.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19feddcbdf17fad33f40041c7f9e768faf19455f32a6d52ba1b8b65ffc7b1cae" -dependencies = [ - "cpufeatures 0.3.0", - "universal-hash", -] - [[package]] name = "portable-atomic" version = "1.13.1" @@ -1819,9 +1665,9 @@ dependencies = [ [[package]] name = "portable-atomic-util" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] @@ -1924,9 +1770,9 @@ checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" [[package]] name = "rand_core" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "redox_syscall" @@ -1934,7 +1780,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -2019,34 +1865,13 @@ dependencies = [ "semver 0.9.0", ] -[[package]] -name = "rustcrypto-ff" -version = "0.14.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2a8adb347447693cd2ba0d218c4b66c62da9b0a5672b17b981e4291ec65ff6" -dependencies = [ - "rand_core 0.10.0", - "subtle", -] - -[[package]] -name = "rustcrypto-group" -version = "0.14.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "369f9b61aa45933c062c9f6b5c3c50ab710687eca83dd3802653b140b43f85ed" -dependencies = [ - "rand_core 0.10.0", - "rustcrypto-ff", - "subtle", -] - [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys", @@ -2069,22 +1894,10 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "sachy-crypto" -version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core#7e8218e9f40024412b7d813bf5052ed83036e3f3" -dependencies = [ - "chacha20poly1305", - "dhkem", - "elliptic-curve", - "k256", - "sha2", -] - [[package]] name = "sachy-fmt" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core#7e8218e9f40024412b7d813bf5052ed83036e3f3" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core#dddae293fb28a8d70f2b5a77f2992234ab65db4b" dependencies = [ "defmt 1.0.1", ] @@ -2092,7 +1905,7 @@ dependencies = [ [[package]] name = "sachy-mdns" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core#7e8218e9f40024412b7d813bf5052ed83036e3f3" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core#dddae293fb28a8d70f2b5a77f2992234ab65db4b" dependencies = [ "defmt 1.0.1", "embassy-time", @@ -2103,7 +1916,7 @@ dependencies = [ [[package]] name = "sachy-sntp" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/sachy-embed-core#7e8218e9f40024412b7d813bf5052ed83036e3f3" +source = "git+https://tangled.org/sachy.dev/sachy-embed-core#dddae293fb28a8d70f2b5a77f2992234ab65db4b" dependencies = [ "defmt 1.0.1", "embassy-net", @@ -2133,20 +1946,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sec1" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" -dependencies = [ - "base16ct", - "ctutils", - "der", - "hybrid-array", - "subtle", - "zeroize", -] - [[package]] name = "semver" version = "0.9.0" @@ -2158,9 +1957,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "semver-parser" @@ -2211,17 +2010,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "sha2" -version = "0.11.0-rc.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5f3b1e2dc8aad28310d8410bd4d7e180eca65fca176c52ab00d364475d0024" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.11.2", -] - [[package]] name = "sha2-const-stable" version = "0.1.0" @@ -2230,12 +2018,22 @@ checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" [[package]] name = "sha3" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" dependencies = [ "digest 0.10.7", - "keccak", + "keccak 0.1.6", +] + +[[package]] +name = "sha3" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +dependencies = [ + "digest 0.11.3", + "keccak 0.2.0", ] [[package]] @@ -2253,20 +2051,11 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signature" -version = "3.0.0-rc.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f1880df446116126965eeec169136b2e0251dba37c6223bcc819569550edea3" -dependencies = [ - "rand_core 0.10.0", -] - [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "smallvec" @@ -2294,15 +2083,15 @@ dependencies = [ [[package]] name = "smoltcp" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac729b0a77bd092a3f06ddaddc59fe0d67f48ba0de45a9abe707c2842c7f8767" +checksum = "5f73d40463bba65efc9adc6370b56df76d563cc46e2482bba58351b4afb7535e" dependencies = [ "bitflags 1.3.2", "byteorder", "cfg-if", "defmt 0.3.100", - "heapless 0.9.2", + "heapless 0.9.3", "managed", ] @@ -2324,13 +2113,13 @@ dependencies = [ [[package]] name = "striker-proto" version = "0.1.0" -source = "git+https://tangled.org/sachy.dev/striker#b63cfe725e4258c02d364f403baa9c0dc0697b72" +source = "git+https://tangled.org/sachy.dev/striker#e2cd1d594feb8e074f7df2fd444d91d1c73a43f3" dependencies = [ "aead", - "dhkem", "postcard", - "sachy-crypto", + "rand_core 0.10.1", "serde", + "wharrgarbl", ] [[package]] @@ -2351,12 +2140,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "supports-color" version = "3.0.2" @@ -2491,15 +2274,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.10+spec-1.1.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -2508,7 +2291,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -2580,9 +2363,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicode-ident" @@ -2614,16 +2397,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "universal-hash" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" -dependencies = [ - "crypto-common 0.2.1", - "ctutils", -] - [[package]] name = "valuable" version = "0.1.1" @@ -2669,11 +2442,11 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -2682,7 +2455,7 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] @@ -2713,10 +2486,49 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "hashbrown 0.15.5", "indexmap", - "semver 1.0.27", + "semver 1.0.28", +] + +[[package]] +name = "wharrgarbl" +version = "0.1.0" +source = "git+https://tangled.org/sachy.dev/wharrgarbl#308421adff031c4a8e2adfc588f56d191cc76ec2" +dependencies = [ + "aead", + "ctutils", + "hybrid-array", + "ml-kem", + "rand_core 0.10.1", + "wharrgarbl-neko", + "wharrgarbl-utils", + "zeroize", +] + +[[package]] +name = "wharrgarbl-neko" +version = "0.1.0" +source = "git+https://tangled.org/sachy.dev/wharrgarbl#308421adff031c4a8e2adfc588f56d191cc76ec2" +dependencies = [ + "aead", + "ctutils", + "hybrid-array", + "keccak 0.2.0", + "wharrgarbl-utils", + "zerocopy", + "zeroize", +] + +[[package]] +name = "wharrgarbl-utils" +version = "0.1.0" +source = "git+https://tangled.org/sachy.dev/wharrgarbl#308421adff031c4a8e2adfc588f56d191cc76ec2" +dependencies = [ + "aead", + "ctutils", + "zeroize", ] [[package]] @@ -2760,9 +2572,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -2776,6 +2588,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" @@ -2825,7 +2643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", + "bitflags 2.11.1", "indexmap", "log", "serde", @@ -2847,7 +2665,7 @@ dependencies = [ "id-arena", "indexmap", "log", - "semver 1.0.27", + "semver 1.0.28", "serde", "serde_derive", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 54db55b..79cac9b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,8 +51,6 @@ sachy-mdns = { git = "https://tangled.org/sachy.dev/sachy-embed-core", package = "server", ] } sachy-fmt = { git = "https://tangled.org/sachy.dev/sachy-embed-core", package = "sachy-fmt" } -sachy-crypto = { git = "https://tangled.org/sachy.dev/sachy-embed-core" } -aead = "=0.6.0-rc.10" striker-proto = { git = "https://tangled.org/sachy.dev/striker", package = "striker-proto" } embassy-strike-driver = { git = "https://tangled.org/sachy.dev/strike-sensor", package = "embassy-strike-driver", features = [ "rp2040", @@ -94,11 +92,9 @@ embassy-net = { version = "0.9", features = [ cyw43 = { version = "0.7.0", features = ["firmware-logs"] } cyw43-pio = { version = "0.10.0" } getrandom = { version = "0.4", default-features = false } -dhkem = { version = "0.1.0-rc.0", features = ["getrandom", "k256"] } embedded-io-async = "0.7.0" - -[patch.crates-io] -dhkem = { git = "https://github.com/RustCrypto/KEMs", rev = "2d277162e0c5ed1c53bb315d0c0dace394cba70a" } +aead = "=0.6.0-rc.10" +wharrgarbl = { git = "https://tangled.org/sachy.dev/wharrgarbl" } [build-dependencies] sachy-config = { git = "https://tangled.org/sachy.dev/sachy-embed-core", package = "sachy-config", branch = "sachy-crypto" } diff --git a/src/errors.rs b/src/errors.rs index b12340b..e50670e 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -60,8 +60,8 @@ impl From for PicoError { } } -impl From for PicoError { - fn from(_value: sachy_crypto::ProtoError) -> Self { +impl From for PicoError { + fn from(_value: aead::Error) -> Self { Self::CryptoProtoError } } diff --git a/src/net/crypto.rs b/src/net/crypto.rs index 1df8e34..5bc8f2c 100644 --- a/src/net/crypto.rs +++ b/src/net/crypto.rs @@ -1,10 +1,38 @@ -use aead::Buffer; +use core::convert::Infallible; + +use aead::{ + Buffer, + rand_core::{TryCryptoRng, TryRng}, +}; use embassy_futures::select::{Either, select}; use embassy_net::tcp::{TcpReader, TcpSocket, TcpWriter}; -use embedded_io_async::{Read, Write}; -use sachy_crypto::BufferSlice; +use embassy_rp::clocks::RoscRng; +use embedded_io_async::Write; use sachy_fmt::{error, unwrap}; use striker_proto::{Server, ServerBuilder, ServerReceiver, ServerSender}; +use wharrgarbl::utils::BufferSlice; + +#[repr(transparent)] +struct WrapRoscRng; + +impl TryRng for WrapRoscRng { + type Error = Infallible; + + fn try_next_u32(&mut self) -> Result { + Ok(RoscRng.next_u32()) + } + + fn try_next_u64(&mut self) -> Result { + Ok(RoscRng.next_u64()) + } + + fn try_fill_bytes(&mut self, dst: &mut [u8]) -> Result<(), Self::Error> { + RoscRng.fill_bytes(dst); + Ok(()) + } +} + +impl TryCryptoRng for WrapRoscRng {} use crate::{ constants::NOISE_PSK, errors::PicoError, rpc::RpcServer, updates::UpdateConnection, @@ -27,20 +55,12 @@ impl CryptoSession { msg_buf: &mut [u8], ) -> Result<(), PicoError> { let mut msg_buf = BufferSlice::new(msg_buf); - let mut len_buf = [0u8; 2]; + msg_buf.fill(); loop { - if reader.read_exact(&mut len_buf).await.is_err() { - break; - } - let msg_size = usize::from(u16::from_be_bytes(len_buf)); - - msg_buf.truncate(msg_size); + let read = reader.read(msg_buf.as_mut()).await?; - reader - .read_exact(msg_buf.as_mut()) - .await - .map_err(|_| PicoError::CryptoProtoError)?; + msg_buf.truncate(read); let req = recv_state.decode_request(&mut msg_buf)?; @@ -53,7 +73,7 @@ impl CryptoSession { break; } - msg_buf.reset(); + msg_buf.fill(); } Ok(()) @@ -66,6 +86,7 @@ impl CryptoSession { msg_buf: &mut [u8], ) -> Result<(), PicoError> { let mut msg_buf = BufferSlice::new(msg_buf); + msg_buf.fill(); let outgoing = UpdateConnection::get_receiver(); loop { @@ -74,13 +95,10 @@ impl CryptoSession { send_state.encode_response(data, &mut msg_buf)?; - let len = unwrap!(u16::try_from(msg_buf.len())); - - writer.write_all(&len.to_be_bytes()).await?; writer.write_all(msg_buf.as_ref()).await?; writer.flush().await?; - msg_buf.reset(); + msg_buf.fill(); } } @@ -110,25 +128,21 @@ pub async fn initialise<'device>( tcp: &mut TcpSocket<'device>, buf: &mut [u8], ) -> Result { - let mut len_buf = [0u8; 2]; - - tcp.read_exact(&mut len_buf) - .await - .map_err(|_| PicoError::CryptoProtoError)?; - - let msg_size = usize::from(u16::from_be_bytes(len_buf)); + let mut server = ServerBuilder::new(&NOISE_PSK); + let mut buf = BufferSlice::new(buf); + buf.fill(); - tcp.read_exact(&mut buf[..msg_size]) + let read = tcp + .read(buf.as_mut()) .await .map_err(|_| PicoError::CryptoProtoError)?; - let (ciphertext, handshake) = ServerBuilder::start(&buf[..msg_size])?; + buf.truncate(read); - let len = unwrap!(u16::try_from(ciphertext.len())); + let server = server.receive(&mut WrapRoscRng, &mut buf)?; - tcp.write_all(&len.to_be_bytes()).await?; - tcp.write_all(&ciphertext).await?; + tcp.write_all(buf.as_ref()).await?; tcp.flush().await?; - Ok(CryptoSession::new(handshake.finish(&NOISE_PSK)?)) + Ok(CryptoSession::new(server)) } diff --git a/src/net/rpc.rs b/src/net/rpc.rs index 2a7c36a..df61216 100644 --- a/src/net/rpc.rs +++ b/src/net/rpc.rs @@ -11,7 +11,7 @@ pub async fn rpc_loop<'device>(tcp: &mut TcpSocket<'device>, buf: &mut [u8]) { continue; } - match super::crypto::initialise(tcp, &mut buf[..1024]).await { + match super::crypto::initialise(tcp, &mut buf[..2048]).await { Ok(session) => { info!("Connected!"); UpdateConnection::connect();