From 6949a608c3bf8dd1f805d46b4587c6f0d14000c2 Mon Sep 17 00:00:00 2001 From: deryacog <79049549+deryacog@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:49:00 +0100 Subject: [PATCH] Revert "Loopix new rebased" --- cli/Cargo.lock | 229 +------ devbox.json | 3 - flarch/src/nodeids.rs | 41 -- flbrowser/Cargo.lock | 229 +------ flmodules/Cargo.lock | 230 +------ flmodules/Cargo.toml | 7 - flmodules/src/gossip_events/broker.rs | 4 +- flmodules/src/lib.rs | 2 - flmodules/src/loopix/broker.rs | 359 ---------- flmodules/src/loopix/client.rs | 314 --------- flmodules/src/loopix/config.rs | 193 ------ flmodules/src/loopix/core.rs | 334 ---------- flmodules/src/loopix/messages.rs | 344 ---------- flmodules/src/loopix/mixnode.rs | 132 ---- flmodules/src/loopix/mod.rs | 15 - flmodules/src/loopix/provider.rs | 124 ---- flmodules/src/loopix/sphinx.rs | 132 ---- flmodules/src/loopix/storage.rs | 618 ------------------ flmodules/src/loopix/testing.rs | 259 -------- flmodules/src/overlay/README.md | 3 +- .../overlay/{broker/direct.rs => broker.rs} | 50 +- flmodules/src/overlay/broker/loopix.rs | 91 --- flmodules/src/overlay/broker/mod.rs | 3 - flmodules/src/overlay/broker/random.rs | 51 -- flmodules/src/ping/broker.rs | 2 +- flmodules/src/random_connections/messages.rs | 4 +- flmodules/src/template/broker.rs | 2 +- flmodules/tests/README.md | 16 - flmodules/tests/loopix.rs | 76 --- flnode/Cargo.lock | 229 +------ flnode/Cargo.toml | 2 - flnode/src/node.rs | 49 +- flnode/tests/loopix.rs | 84 --- 33 files changed, 198 insertions(+), 4033 deletions(-) delete mode 100644 flmodules/src/loopix/broker.rs delete mode 100644 flmodules/src/loopix/client.rs delete mode 100644 flmodules/src/loopix/config.rs delete mode 100644 flmodules/src/loopix/core.rs delete mode 100644 flmodules/src/loopix/messages.rs delete mode 100644 flmodules/src/loopix/mixnode.rs delete mode 100644 flmodules/src/loopix/mod.rs delete mode 100644 flmodules/src/loopix/provider.rs delete mode 100644 flmodules/src/loopix/sphinx.rs delete mode 100644 flmodules/src/loopix/storage.rs delete mode 100644 flmodules/src/loopix/testing.rs rename flmodules/src/overlay/{broker/direct.rs => broker.rs} (80%) delete mode 100644 flmodules/src/overlay/broker/loopix.rs delete mode 100644 flmodules/src/overlay/broker/mod.rs delete mode 100644 flmodules/src/overlay/broker/random.rs delete mode 100644 flmodules/tests/README.md delete mode 100644 flmodules/tests/loopix.rs delete mode 100644 flnode/tests/loopix.rs diff --git a/cli/Cargo.lock b/cli/Cargo.lock index 0e5e5aaf..19bffd16 100644 --- a/cli/Cargo.lock +++ b/cli/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -49,7 +49,7 @@ dependencies = [ "cipher", "ctr", "ghash", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -131,12 +131,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "asn1-rs" version = "0.5.2" @@ -328,25 +322,13 @@ dependencies = [ "serde", ] -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -355,16 +337,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", + "generic-array", ] [[package]] @@ -373,12 +346,6 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "byteorder" version = "1.5.0" @@ -421,7 +388,7 @@ dependencies = [ "aead", "cipher", "ctr", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -430,16 +397,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - [[package]] name = "chrono" version = "0.4.38" @@ -521,15 +478,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -586,21 +534,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "crypto-bigint" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -610,21 +552,11 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "ct-codecs" version = "1.1.2" @@ -651,8 +583,7 @@ dependencies = [ "curve25519-dalek-derive", "fiat-crypto", "rustc_version", - "serde", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -756,15 +687,6 @@ dependencies = [ "serde", ] -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.10.7" @@ -774,7 +696,7 @@ dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -795,7 +717,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", @@ -826,16 +748,16 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", - "generic-array 0.14.7", + "generic-array", "group", "hkdf", "pem-rfc7468", "pkcs8", "rand_core", "sec1", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -875,7 +797,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -945,20 +867,16 @@ dependencies = [ "async-stream", "async-trait", "bimap", - "bincode", "bitflags 2.6.0", "bytes", - "concurrent-queue", "ed25519-compact", "flarch", "futures", "getrandom", - "hex", "itertools", "log", "names", "rand", - "rand_distr", "reqwest", "serde", "serde_derive", @@ -966,12 +884,10 @@ dependencies = [ "serde_with", "serde_yaml", "sha2", - "sphinx-packet", "thiserror", "tokio", "tokio-stream", "toml", - "x25519-dalek", ] [[package]] @@ -1117,15 +1033,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1156,7 +1063,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "opaque-debug 0.3.1", + "opaque-debug", "polyval", ] @@ -1174,7 +1081,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -1222,7 +1129,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1396,7 +1303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -1455,12 +1362,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "lazy_static" version = "1.5.0" @@ -1473,30 +1374,12 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" -[[package]] -name = "libm" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2", - "chacha", - "keystream", -] - [[package]] name = "lock_api" version = "0.4.12" @@ -1520,7 +1403,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -1645,7 +1528,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1672,12 +1554,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - [[package]] name = "opaque-debug" version = "0.3.1" @@ -1812,7 +1688,7 @@ checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug", "universal-hash", ] @@ -1942,16 +1818,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - [[package]] name = "rcgen" version = "0.13.1" @@ -2055,7 +1921,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -2138,7 +2004,7 @@ dependencies = [ "ring", "rustls-pki-types", "rustls-webpki", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2238,9 +2104,9 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array", "pkcs8", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2387,7 +2253,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2398,7 +2264,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2413,7 +2279,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core", ] @@ -2451,31 +2317,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sphinx-packet" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0df8390239119e76d4f60a6b06900351ee971d78868fc4cfef18301728ad" -dependencies = [ - "aes", - "arrayref", - "blake2", - "bs58", - "byteorder", - "chacha", - "ctr", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "log", - "rand", - "rand_distr", - "sha2", - "subtle 2.6.1", - "x25519-dalek", -] - [[package]] name = "spin" version = "0.9.8" @@ -2510,7 +2351,7 @@ dependencies = [ "md-5", "rand", "ring", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "url", @@ -2526,12 +2367,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.6.1" @@ -2904,7 +2739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -3214,7 +3049,7 @@ dependencies = [ "serde", "sha1", "sha2", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", @@ -3308,7 +3143,7 @@ dependencies = [ "rtcp", "rtp", "sha1", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", diff --git a/devbox.json b/devbox.json index 87cb491f..b4bbf376 100644 --- a/devbox.json +++ b/devbox.json @@ -33,9 +33,6 @@ "test": [ "make cargo_test" ], - "code": [ - "code --user-data-dir .vscode --profile fledger ." - ], "fledger": [ "cd cli && cargo run -p fledger" ] diff --git a/flarch/src/nodeids.rs b/flarch/src/nodeids.rs index 4b6de520..cec79231 100644 --- a/flarch/src/nodeids.rs +++ b/flarch/src/nodeids.rs @@ -91,31 +91,6 @@ impl From> for U256 { } } -impl From for U256 { - fn from(value: u64) -> Self { - let mut bytes = [0u8; 32]; - bytes[24..].copy_from_slice(&value.to_be_bytes()); - U256 { 0: bytes } - } -} - - -impl From for U256 { - fn from(value: u32) -> Self { - let mut bytes = [0u8; 32]; - bytes[28..].copy_from_slice(&value.to_be_bytes()); - U256 { 0: bytes } - } -} - -impl From for U256 { - fn from(value: i32) -> Self { - let mut bytes = [0u8; 32]; - bytes[28..].copy_from_slice(&value.to_be_bytes()); - U256 { 0: bytes } - } -} - impl From<[u8; 32]> for U256 { fn from(b: [u8; 32]) -> Self { U256 { 0: b } @@ -148,22 +123,6 @@ impl NodeIDs { ret } - /// Returns a NodeIDs from 'from'(included) to 'to'(excluded) - pub fn new_range(from: u32, to: u32) -> Self { - let mut ret = NodeIDs { 0: vec![] }; - for i in from..to { - let mut bytes = [0u8; 32]; - bytes[28..].copy_from_slice(&i.to_be_bytes()); - ret.0.push(NodeID::from(bytes)); - } - ret - } - - /// Returns NodeIDs as a Vec - pub fn to_vec(&self) -> Vec { - self.0.clone() - } - // Returns an empty NodeIDs pub fn empty() -> Self { NodeIDs::new(0) diff --git a/flbrowser/Cargo.lock b/flbrowser/Cargo.lock index d00a992e..21e5a071 100644 --- a/flbrowser/Cargo.lock +++ b/flbrowser/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -49,7 +49,7 @@ dependencies = [ "cipher", "ctr", "ghash", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -137,12 +137,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "asn1-rs" version = "0.5.2" @@ -334,25 +328,13 @@ dependencies = [ "serde", ] -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -361,16 +343,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", + "generic-array", ] [[package]] @@ -379,12 +352,6 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "byteorder" version = "1.5.0" @@ -427,7 +394,7 @@ dependencies = [ "aead", "cipher", "ctr", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -436,16 +403,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - [[package]] name = "chrono" version = "0.4.38" @@ -477,15 +434,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -542,21 +490,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "crypto-bigint" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -566,21 +508,11 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "ct-codecs" version = "1.1.2" @@ -607,8 +539,7 @@ dependencies = [ "curve25519-dalek-derive", "fiat-crypto", "rustc_version", - "serde", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -712,15 +643,6 @@ dependencies = [ "serde", ] -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.10.7" @@ -730,7 +652,7 @@ dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -751,7 +673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", @@ -782,16 +704,16 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", - "generic-array 0.14.7", + "generic-array", "group", "hkdf", "pem-rfc7468", "pkcs8", "rand_core", "sec1", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -831,7 +753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -907,20 +829,16 @@ dependencies = [ "async-stream", "async-trait", "bimap", - "bincode", "bitflags 2.6.0", "bytes", - "concurrent-queue", "ed25519-compact", "flarch", "futures", "getrandom", - "hex", "itertools", "log", "names", "rand", - "rand_distr", "reqwest", "serde", "serde_derive", @@ -928,12 +846,10 @@ dependencies = [ "serde_with", "serde_yaml", "sha2", - "sphinx-packet", "thiserror", "tokio", "tokio-stream", "toml", - "x25519-dalek", ] [[package]] @@ -1065,15 +981,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1104,7 +1011,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "opaque-debug 0.3.1", + "opaque-debug", "polyval", ] @@ -1122,7 +1029,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -1164,7 +1071,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1338,7 +1245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -1397,12 +1304,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "lazy_static" version = "1.5.0" @@ -1415,30 +1316,12 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" -[[package]] -name = "libm" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2", - "chacha", - "keystream", -] - [[package]] name = "lock_api" version = "0.4.12" @@ -1462,7 +1345,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -1587,7 +1470,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1614,12 +1496,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - [[package]] name = "opaque-debug" version = "0.3.1" @@ -1754,7 +1630,7 @@ checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug", "universal-hash", ] @@ -1884,16 +1760,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - [[package]] name = "rcgen" version = "0.13.1" @@ -1997,7 +1863,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -2080,7 +1946,7 @@ dependencies = [ "ring", "rustls-pki-types", "rustls-webpki", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2180,9 +2046,9 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array", "pkcs8", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2329,7 +2195,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2340,7 +2206,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2355,7 +2221,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core", ] @@ -2393,31 +2259,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sphinx-packet" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0df8390239119e76d4f60a6b06900351ee971d78868fc4cfef18301728ad" -dependencies = [ - "aes", - "arrayref", - "blake2", - "bs58", - "byteorder", - "chacha", - "ctr", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "log", - "rand", - "rand_distr", - "sha2", - "subtle 2.6.1", - "x25519-dalek", -] - [[package]] name = "spin" version = "0.9.8" @@ -2452,7 +2293,7 @@ dependencies = [ "md-5", "rand", "ring", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "url", @@ -2468,12 +2309,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.6.1" @@ -2846,7 +2681,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -3173,7 +3008,7 @@ dependencies = [ "serde", "sha1", "sha2", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", @@ -3267,7 +3102,7 @@ dependencies = [ "rtcp", "rtp", "sha1", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", diff --git a/flmodules/Cargo.lock b/flmodules/Cargo.lock index 14082e37..9d3c895d 100644 --- a/flmodules/Cargo.lock +++ b/flmodules/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -49,7 +49,7 @@ dependencies = [ "cipher", "ctr", "ghash", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -131,12 +131,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "asn1-rs" version = "0.5.2" @@ -328,25 +322,13 @@ dependencies = [ "serde", ] -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -355,16 +337,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", + "generic-array", ] [[package]] @@ -373,12 +346,6 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "byteorder" version = "1.5.0" @@ -421,7 +388,7 @@ dependencies = [ "aead", "cipher", "ctr", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -430,16 +397,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - [[package]] name = "chrono" version = "0.4.38" @@ -471,15 +428,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -536,21 +484,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "crypto-bigint" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -560,21 +502,11 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "ct-codecs" version = "1.1.2" @@ -601,8 +533,7 @@ dependencies = [ "curve25519-dalek-derive", "fiat-crypto", "rustc_version", - "serde", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -706,15 +637,6 @@ dependencies = [ "serde", ] -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.10.7" @@ -724,7 +646,7 @@ dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -745,7 +667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", @@ -776,16 +698,16 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", - "generic-array 0.14.7", + "generic-array", "group", "hkdf", "pem-rfc7468", "pkcs8", "rand_core", "sec1", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -825,7 +747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -879,22 +801,17 @@ dependencies = [ "async-stream", "async-trait", "bimap", - "bincode", "bitflags 2.6.0", "bytes", - "concurrent-queue", "ed25519-compact", "env_logger", "flarch", - "flmodules", "futures", "getrandom", - "hex", "itertools", "log", "names", "rand", - "rand_distr", "reqwest", "serde", "serde_derive", @@ -902,12 +819,10 @@ dependencies = [ "serde_with", "serde_yaml", "sha2", - "sphinx-packet", "thiserror", "tokio", "tokio-stream", "toml", - "x25519-dalek", ] [[package]] @@ -1014,15 +929,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1053,7 +959,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "opaque-debug 0.3.1", + "opaque-debug", "polyval", ] @@ -1071,7 +977,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -1113,7 +1019,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1287,7 +1193,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -1346,12 +1252,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "lazy_static" version = "1.5.0" @@ -1364,30 +1264,12 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2", - "chacha", - "keystream", -] - [[package]] name = "lock_api" version = "0.4.12" @@ -1411,7 +1293,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -1536,7 +1418,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1563,12 +1444,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - [[package]] name = "opaque-debug" version = "0.3.1" @@ -1703,7 +1578,7 @@ checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug", "universal-hash", ] @@ -1833,16 +1708,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - [[package]] name = "rcgen" version = "0.13.1" @@ -1946,7 +1811,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -2029,7 +1894,7 @@ dependencies = [ "ring", "rustls-pki-types", "rustls-webpki", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2129,9 +1994,9 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array", "pkcs8", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2278,7 +2143,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2289,7 +2154,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2304,7 +2169,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core", ] @@ -2342,31 +2207,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sphinx-packet" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0df8390239119e76d4f60a6b06900351ee971d78868fc4cfef18301728ad" -dependencies = [ - "aes", - "arrayref", - "blake2", - "bs58", - "byteorder", - "chacha", - "ctr", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "log", - "rand", - "rand_distr", - "sha2", - "subtle 2.6.1", - "x25519-dalek", -] - [[package]] name = "spin" version = "0.9.8" @@ -2401,7 +2241,7 @@ dependencies = [ "md-5", "rand", "ring", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "url", @@ -2417,12 +2257,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.6.1" @@ -2795,7 +2629,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -3105,7 +2939,7 @@ dependencies = [ "serde", "sha1", "sha2", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", @@ -3199,7 +3033,7 @@ dependencies = [ "rtcp", "rtp", "sha1", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", diff --git a/flmodules/Cargo.toml b/flmodules/Cargo.toml index 0981295f..7283f419 100644 --- a/flmodules/Cargo.toml +++ b/flmodules/Cargo.toml @@ -44,13 +44,6 @@ reqwest = { version = "0.12", features = [ "rustls-tls", ], default-features = false } bitflags = { version = "2", features = ["serde"] } -x25519-dalek = {version = "2", features = ["serde"]} -hex = "0.4.3" -bincode = "1.3.3" -sphinx-packet = { version = "0.2" } -concurrent-queue = "2.5.0" -rand_distr = "0.4.3" [dev-dependencies] env_logger = "0.11" -flmodules = {path=".", features = ["testing"]} \ No newline at end of file diff --git a/flmodules/src/gossip_events/broker.rs b/flmodules/src/gossip_events/broker.rs index 82498dc9..a3998488 100644 --- a/flmodules/src/gossip_events/broker.rs +++ b/flmodules/src/gossip_events/broker.rs @@ -132,7 +132,7 @@ impl Translate { fn link_gossip_rnd(msg: GossipMessage) -> Option { if let GossipMessage::Output(GossipOut::ToNetwork(id, msg_node)) = msg { Some( - RandomIn::NetworkWrapperToNetwork( + RandomIn::NetworkMapperToNetwork( id, NetworkWrapper::wrap_yaml(MODULE_NAME, &msg_node).unwrap(), ) @@ -233,7 +233,7 @@ mod tests { fn assert_msg_reid(tap: &Receiver, id2: &NodeID) -> Result<(), Box> { for msg in tap.try_iter() { - if let RandomMessage::Input(RandomIn::NetworkWrapperToNetwork(id, msg_mod)) = msg { + if let RandomMessage::Input(RandomIn::NetworkMapperToNetwork(id, msg_mod)) = msg { assert_eq!(id2, &id); assert_eq!(MODULE_NAME.to_string(), msg_mod.module); let msg_yaml = serde_yaml::from_str(&msg_mod.msg)?; diff --git a/flmodules/src/lib.rs b/flmodules/src/lib.rs index 9b26f68c..cd36484a 100644 --- a/flmodules/src/lib.rs +++ b/flmodules/src/lib.rs @@ -9,7 +9,6 @@ bitflags! { const ENABLE_PING = 0x8; const ENABLE_WEBPROXY = 0x10; const ENABLE_WEBPROXY_REQUESTS = 0x20; - const ENABLE_LOOPIX = 0x40; } } @@ -22,4 +21,3 @@ pub mod ping; pub mod web_proxy; pub mod network; pub mod overlay; -pub mod loopix; diff --git a/flmodules/src/loopix/broker.rs b/flmodules/src/loopix/broker.rs deleted file mode 100644 index 8f7159c3..00000000 --- a/flmodules/src/loopix/broker.rs +++ /dev/null @@ -1,359 +0,0 @@ -use flarch::nodeids::NodeID; -use sphinx_packet::header::delays::Delay; -use std::time::Duration; -use tokio::sync::mpsc::{channel, Receiver, Sender}; - -use flarch::{ - broker::{Broker, BrokerError, Subsystem, SubsystemHandler}, - platform_async_trait, -}; - -use crate::{ - network::messages::{NetworkIn, NetworkMessage, NetworkOut}, - overlay::messages::{NetworkWrapper, OverlayIn, OverlayMessage, OverlayOut}, -}; - -use super::{ - client::Client, - config::{LoopixConfig, LoopixRole}, - core::*, - messages::{LoopixIn, LoopixMessage, LoopixMessages, LoopixOut, NodeType}, - mixnode::Mixnode, - provider::Provider, - sphinx::Sphinx, -}; - -pub const MODULE_NAME: &str = "Loopix"; - -pub struct LoopixBroker { - pub broker: Broker, -} - -impl LoopixBroker { - pub async fn start( - overlay: Broker, - network: Broker, - config: LoopixConfig, - ) -> Result, BrokerError> { - let mut broker = Broker::new(); - - broker - .link_bi( - overlay.clone(), - Box::new(Self::from_overlay), - Box::new(Self::to_overlay), - ) - .await?; - - broker - .link_bi( - network.clone(), - Box::new(Self::from_network), - Box::new(Self::to_network), - ) - .await?; - - let node_type = match config.role { - LoopixRole::Client => { - NodeType::Client(Client::new(config.storage_config, config.core_config)) - } - LoopixRole::Provider => { - NodeType::Provider(Provider::new(config.storage_config, config.core_config)) - } - LoopixRole::Mixnode => { - NodeType::Mixnode(Mixnode::new(config.storage_config, config.core_config)) - } - }; - - let (network_sender, network_receiver): ( - Sender<(NodeID, Delay, Sphinx)>, - Receiver<(NodeID, Delay, Sphinx)>, - ) = channel(100); - let (overlay_sender, _overlay_receiver): ( - Sender, - Receiver, - ) = channel(100); - - let loopix_messages = LoopixMessages::new( - node_type.arc_clone(), - network_sender.clone(), - overlay_sender.clone(), - ); - - broker - .add_subsystem(Subsystem::Handler(Box::new(LoopixTranslate { - _overlay: overlay, - _network: network.clone(), - _loopix_messages: loopix_messages.clone(), - }))) - .await?; - - // Threads for all nodes - Self::start_receiver_thread(loopix_messages.clone(), network.clone(), network_receiver); - - Self::start_loop_message_thread(loopix_messages.clone()); - - Self::start_drop_message_thread(loopix_messages.clone()); - - // Client has two extra threads - match node_type { - NodeType::Client(_) => { - // client subscribe loop - Self::client_subscribe_loop(loopix_messages.clone(), network.clone()); - - // client pull loop - Self::client_pull_loop(loopix_messages.clone(), network.clone()); - } - _ => {} - } - - Ok(broker) - } - - fn from_overlay(msg: OverlayMessage) -> Option { - match msg { - OverlayMessage::Input(OverlayIn::NetworkWrapperToNetwork(node_id, wrapper)) => { - Some(LoopixIn::OverlayRequest(node_id, wrapper).into()) - } - - //TODO other overlay messages - _ => None, - } - } - - fn from_network(msg: NetworkMessage) -> Option { - if let NetworkMessage::Output(NetworkOut::MessageFromNode(_node_id, message)) = msg { - // TODO: probably node_id should be used somewhere. - let sphinx_packet: Sphinx = serde_yaml::from_str(&message).unwrap(); - return Some(LoopixIn::SphinxFromNetwork(sphinx_packet).into()); - } - None - } - - fn to_overlay(msg: LoopixMessage) -> Option { - if let LoopixMessage::Output(LoopixOut::OverlayReply(destination, module_msg)) = msg { - return Some(OverlayOut::NetworkWrapperFromNetwork(destination, module_msg).into()); - } - None - } - - fn to_network(msg: LoopixMessage) -> Option { - if let LoopixMessage::Output(LoopixOut::SphinxToNetwork(node_id, sphinx)) = msg { - let msg = serde_yaml::to_string(&sphinx).unwrap(); - return Some(NetworkIn::MessageToNode(node_id, msg).into()); - } - None - } - - pub fn start_loop_message_thread(loopix_messages: LoopixMessages) { - let loop_rate = Duration::from_secs_f64(loopix_messages.role.get_config().lambda_loop()); - - tokio::spawn(async move { - loop { - tokio::time::sleep(loop_rate).await; - loopix_messages.send_loop_message().await; - } - }); - } - - pub fn start_drop_message_thread(loopix_messages: LoopixMessages) { - let drop_rate = Duration::from_secs_f64(loopix_messages.role.get_config().lambda_drop()); - - tokio::spawn(async move { - loop { - tokio::time::sleep(drop_rate).await; - loopix_messages.send_drop_message().await; - } - }); - } - - pub fn start_receiver_thread( - loopix_messages: LoopixMessages, - mut network: Broker, - mut receiver: Receiver<(NodeID, Delay, Sphinx)>, - ) { - tokio::spawn(async move { - let mut sphinx_messages: Vec<(NodeID, Duration, Sphinx)> = Vec::new(); - let payload_rate = - Duration::from_secs_f64(loopix_messages.role.get_config().lambda_payload()); - - loop { - // Wait for send delay - tokio::time::sleep(payload_rate).await; - - // Subtract the wait duration from all message delays - for (_, delay, _) in &mut sphinx_messages { - *delay = delay.saturating_sub(payload_rate); - } - - // Receive new messages - if let Some((node_id, delay, sphinx)) = receiver.recv().await { - sphinx_messages.push((node_id, delay.to_duration(), sphinx)); - } - - // Sort messages by remaining delay - sphinx_messages.sort_by_key(|&(_, delay, _)| delay); // TODO technically this is not the protocol - - // Emit messages with 0 or less delay - if let Some((node_id, delay, sphinx_packet)) = sphinx_messages.first() { - if *delay <= Duration::ZERO { - let msg = serde_yaml::to_string(&sphinx_packet).unwrap(); - if let Err(e) = - network.emit_msg(NetworkIn::MessageToNode(*node_id, msg).into()) - { - log::error!("Error emitting networkmessage: {e:?}"); - } else { - sphinx_messages.remove(0); - } - } else { - let (node_id, sphinx) = loopix_messages.create_drop_message().await; - let msg = serde_yaml::to_string(&sphinx).unwrap(); - if let Err(e) = - network.emit_msg(NetworkIn::MessageToNode(node_id, msg).into()) - { - log::error!("Error emitting drop message: {e:?}"); - } - } - } - } - }); - } - - pub fn client_subscribe_loop( - mut loopix_messages: LoopixMessages, - mut network: Broker, - ) { - let pull_request_rate = - Duration::from_secs_f64(loopix_messages.role.get_config().time_pull()); - - tokio::spawn(async move { - loop { - // subscribe message - let (node_id, sphinx) = loopix_messages.create_subscribe_message().await; - - // serialize and send - let msg = serde_yaml::to_string(&sphinx).unwrap(); - network - .emit_msg(NetworkIn::MessageToNode(node_id, msg).into()) - .unwrap(); - - // wait - tokio::time::sleep(pull_request_rate).await; - } - }); - } - - pub fn client_pull_loop(loopix_messages: LoopixMessages, mut network: Broker) { - let pull_request_rate = - Duration::from_secs_f64(loopix_messages.role.get_config().time_pull()); - - tokio::spawn(async move { - loop { - // pull message - let (node_id, sphinx) = loopix_messages.create_pull_message().await; - - if let Some(sphinx) = sphinx { - // serialize and send - let msg = serde_yaml::to_string(&sphinx).unwrap(); - network - .emit_msg(NetworkIn::MessageToNode(node_id, msg).into()) - .unwrap(); - } - - // wait - tokio::time::sleep(pull_request_rate).await; - } - }); - } -} - -struct LoopixTranslate { - _overlay: Broker, - _network: Broker, - _loopix_messages: LoopixMessages, -} - -#[platform_async_trait()] -impl SubsystemHandler for LoopixTranslate { - async fn messages(&mut self, _msgs: Vec) -> Vec { - let outgoing_msgs = vec![]; - - // for msg in msgs { - // if let LoopixMessage::Input(loopix_in) = msg { - // let processed_msgs = self.loopix_messages.process_messages(vec![loopix_in]); - // outgoing_msgs.extend(processed_msgs.into_iter().map(LoopixMessage::Output)); - // } - // } - - // for msg in msgs { - // match msg { - // LoopixMessage::Input(loopix_in) => { - // let processed_msgs = self.loopix_messages.process_messages(vec![loopix_in]); - // outgoing_msgs.extend(processed_msgs.into_iter().map(LoopixMessage::Output)); - // } - // LoopixMessage::Output(LoopixOut::OverlayReply(node_id, module_msg)) => { - // self.overlay.emit_msg(OverlayOut::NetworkWrapperFromNetwork(node_id, module_msg).into()).unwrap(); - // } - // LoopixMessage::Output(LoopixOut::SphinxToNetwork(node_id, sphinx)) => { - // let msg = serde_json::to_string(&sphinx).unwrap(); - // self.network.emit_msg(NetworkIn::SendLoopixMessage(node_id, - // msg).into()).unwrap(); - // } - // } - // } - - outgoing_msgs - } -} - -#[cfg(test)] -mod tests { - use std::collections::HashMap; - - use super::*; - use crate::loopix::config::{LoopixConfig, LoopixRole}; - use crate::loopix::storage::LoopixStorage; - use crate::network::messages::NetworkMessage; - use crate::overlay::messages::OverlayMessage; - use flarch::broker::Broker; - - #[tokio::test] - async fn create_broker() -> Result<(), BrokerError> { - let path_length = 2; - - // set up network - let mut node_public_keys = HashMap::new(); - let mut node_key_pairs = HashMap::new(); - - for mix in 0..path_length * path_length + path_length + path_length { - let node_id = NodeID::from(mix as u32); - let (public_key, private_key) = LoopixStorage::generate_key_pair(); - node_public_keys.insert(node_id, public_key); - node_key_pairs.insert(node_id, (public_key, private_key)); - } - - let node_id = 1; - let private_key = &node_key_pairs.get(&NodeID::from(node_id)).unwrap().1; - let public_key = &node_key_pairs.get(&NodeID::from(node_id)).unwrap().0; - - let config = LoopixConfig::default_with_path_length( - LoopixRole::Client, - node_id, - path_length, - private_key.clone(), - public_key.clone(), - ); - - config - .storage_config - .set_node_public_keys(node_public_keys) - .await; - - let overlay = Broker::::new(); - let network = Broker::::new(); - - let _loopix_broker = LoopixBroker::start(overlay, network, config).await?; - - Ok(()) - } -} diff --git a/flmodules/src/loopix/client.rs b/flmodules/src/loopix/client.rs deleted file mode 100644 index 01da8a57..00000000 --- a/flmodules/src/loopix/client.rs +++ /dev/null @@ -1,314 +0,0 @@ -use crate::loopix::config::CoreConfig; -use crate::loopix::core::LoopixCore; -use crate::loopix::storage::LoopixStorage; - -use crate::loopix::broker::MODULE_NAME; -use crate::loopix::messages::MessageType; -use crate::loopix::sphinx::Sphinx; -use crate::overlay::messages::NetworkWrapper; -use async_trait::async_trait; -use flarch::nodeids::NodeID; -use rand::seq::SliceRandom; -use sphinx_packet::payload::Payload; - -#[derive(Debug, Clone, PartialEq)] -pub struct Client { - storage: LoopixStorage, - config: CoreConfig, -} - -impl Client { - pub fn new(storage: LoopixStorage, config: CoreConfig) -> Self { - Client { storage, config } - } -} - -#[async_trait] -impl LoopixCore for Client { - fn get_config(&self) -> &CoreConfig { - &self.config - } - - fn get_storage(&self) -> &LoopixStorage { - &self.storage - } - - async fn get_our_id(&self) -> NodeID { - self.storage.get_our_id().await - } - - /// Packet with our provider as destination (loop) - async fn create_loop_message(&self) -> (NodeID, Sphinx) { - // get our provider - let our_provider = self.get_our_provider().await; - - // create route - let route = self - .create_route( - self.get_config().path_length(), - our_provider, - None, - our_provider, - ) - .await; - - // create the networkmessage - let loop_msg = serde_yaml::to_string(&MessageType::Loop).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: loop_msg, - }; - - // create sphinx packet - let our_provider = self.get_our_provider().await.unwrap(); - let (_, sphinx) = self.create_sphinx_packet(our_provider, msg, &route); - (our_provider, sphinx) - } - - /// Packet with a random provider as destination (drop) - async fn create_drop_message(&self) -> (NodeID, Sphinx) { - // pick random provider - let providers = self.get_storage().get_providers().await; - let random_provider = providers.choose(&mut rand::thread_rng()).unwrap(); - - // get our provider - let our_provider = self.get_our_provider().await; - - // create route - let route = self - .create_route( - self.get_config().path_length(), - our_provider, - None, - Some(*random_provider), - ) - .await; - - // create the networkmessage - let drop_msg = serde_yaml::to_string(&MessageType::Drop).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: drop_msg, - }; - - // create sphinx packet - let (_, sphinx) = self.create_sphinx_packet(*random_provider, msg, &route); - (*random_provider, sphinx) - } -} - -// pub trait ClientInterface { -// async fn register_provider(&mut self, provider: NodeID); -// async fn get_provider(&self) -> Option; - -// async fn create_pull_message(&self) -> (NodeID, Sphinx); -// async fn create_subscribe_message(&self) -> (NodeID, Sphinx); -// async fn create_payload_message( -// &self, -// destination: NodeID, -// msg: NetworkWrapper, -// ) -> (NodeID, Sphinx); -// } - -impl Client { - pub async fn register_provider(&mut self, provider: NodeID) { - // get IDs - let our_id = self.get_storage().get_our_id().await; - let providers = self.get_storage().get_providers().await; - - // check if provider is valid - if provider == our_id { - panic!("Provider ID cannot be the same as our ID"); - } - if !providers.contains(&provider) { - panic!("Provider ID is not in the list of providers"); - } - - // set provider - self.storage.set_our_provider(Some(provider)).await; - } - - pub async fn get_our_provider(&self) -> Option { - self.storage.get_our_provider().await - } - - pub async fn create_pull_message(&self) -> (NodeID, Option) { - let our_id = self.get_our_id().await; - - let provider = match self.get_our_provider().await { - Some(provider) => provider, - None => { - let providers = self.get_storage().get_providers().await; - if providers.is_empty() { - log::error!("No providers available"); - return (our_id, None); - } - *providers.choose(&mut rand::thread_rng()).unwrap() - } - }; - - //create route (path length is 0 because we directly send to the provider) - let route = self.create_route(0, None, None, Some(provider)).await; - - // create the networkmessage - let pull_msg = serde_yaml::to_string(&MessageType::PullRequest(our_id)).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: pull_msg, - }; - - // create sphinx packet - let (_, sphinx) = self.create_sphinx_packet(provider, msg, &route); - (provider, Some(sphinx)) - } - - pub async fn create_subscribe_message(&self) -> (NodeID, Sphinx) { - let our_id = self.get_our_id().await; - - // get provider or choose one randomly - let provider = match self.get_our_provider().await { - Some(provider) => provider, - None => { - let providers = self.get_storage().get_providers().await; - *providers.choose(&mut rand::thread_rng()).unwrap() - } - }; - - // create route (path length is 0 because we directly send to the provider) - let route = self.create_route(0, None, None, Some(provider)).await; - - // create the networkmessage - let subscribe_msg = - serde_yaml::to_string(&MessageType::SubscriptionRequest(our_id)).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: subscribe_msg, - }; - - // create sphinx packet - let (_, sphinx) = self.create_sphinx_packet(provider, msg, &route); - (provider, sphinx) - } - - pub async fn process_overlay_message( - &self, - node_id: NodeID, - message: NetworkWrapper, - ) -> (NodeID, Sphinx) { - let (next_node, sphinx) = self.create_payload_message(node_id, message).await; - (next_node, sphinx) - } - - pub async fn create_payload_message( - &self, - destination: NodeID, - msg: NetworkWrapper, - ) -> (NodeID, Sphinx) { - // get provider for destination - let client_to_provider_map = self.get_storage().get_client_to_provider_map().await; - let dst_provider = client_to_provider_map.get(&destination).unwrap(); - - // get our id and provider - let our_id = self.get_our_id().await; - let our_provider = self.get_our_provider().await; - - // create route - let route = self - .create_route( - self.get_config().path_length(), - our_provider, - Some(*dst_provider), - Some(destination), - ) - .await; - - // create payload message - let payload_msg = serde_yaml::to_string(&MessageType::Payload(our_id, msg)).unwrap(); - let network_msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: payload_msg, - }; - - // create sphinx packet - let (_, sphinx) = self.create_sphinx_packet(destination, network_msg, &route); - (*dst_provider, sphinx) - } - - pub async fn process_final_hop( - &self, - _destination: NodeID, - _surb_id: [u8; 16], - _payload: Payload, - ) { - todo!("Client hasnt implemented process_final_hop yet") - } -} - -#[cfg(test)] -mod tests { - use crate::loopix::config::LoopixConfig; - use crate::loopix::config::LoopixRole; - use flarch::nodeids::NodeIDs; - use std::collections::HashMap; - - use super::*; - - async fn setup() -> (Client, u32, usize) { - let path_length = 2; - let mut node_public_keys = HashMap::new(); - let mut node_key_pairs = HashMap::new(); - - for mix in 0..path_length * path_length + path_length { - for node_id in NodeIDs::new_range(mix as u32, (mix + path_length) as u32).to_vec() { - let (public_key, private_key) = LoopixStorage::generate_key_pair(); - node_public_keys.insert(node_id, public_key); - node_key_pairs.insert(node_id, (public_key, private_key)); - } - } - - let node_id = 0; - let private_key = &node_key_pairs.get(&NodeID::from(node_id)).unwrap().1; - let public_key = &node_key_pairs.get(&NodeID::from(node_id)).unwrap().0; - - let config = LoopixConfig::default_with_path_length( - LoopixRole::Client, - node_id, - path_length, - private_key.clone(), - public_key.clone(), - ); - - config - .storage_config - .set_node_public_keys(node_public_keys) - .await; - - ( - Client::new(config.storage_config, config.core_config), - node_id, - path_length, - ) - } - - #[tokio::test] - async fn get_provider() { - let (client, node_id, path_length) = setup().await; - assert_eq!( - client.get_our_provider().await, - Some(NodeID::from(node_id + path_length as u32)) - ); - } - - #[tokio::test] - async fn register_provider() { - let (mut client, _, path_length) = setup().await; - let new_provider = - path_length as u32 + rand::random::() % (path_length * 2 - path_length) as u32; - println!("New provider ID: {}", new_provider); - client.register_provider(NodeID::from(new_provider)).await; - assert_eq!( - client.get_our_provider().await, - Some(NodeID::from(new_provider)) - ); - } -} diff --git a/flmodules/src/loopix/config.rs b/flmodules/src/loopix/config.rs deleted file mode 100644 index b37eb408..00000000 --- a/flmodules/src/loopix/config.rs +++ /dev/null @@ -1,193 +0,0 @@ -use crate::loopix::storage::{ClientStorage, LoopixStorage, ProviderStorage}; -use serde::{Deserialize, Serialize}; -use x25519_dalek::{PublicKey, StaticSecret}; - -//////////////////////////////////////// ROLE ENUM //////////////////////////////////////// -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] -pub enum LoopixRole { - Mixnode, - Provider, - Client, -} - -//////////////////////////////////////// Loopix Config //////////////////////////////////////// -#[derive(Debug, Clone, PartialEq)] -pub struct LoopixConfig { - pub role: LoopixRole, - pub core_config: CoreConfig, - pub storage_config: LoopixStorage, -} - -impl LoopixConfig { - pub fn new_default(role: LoopixRole, path_length: usize, storage: LoopixStorage) -> Self { - let core_config = match role { - LoopixRole::Mixnode => CoreConfig::default_mixnode(path_length), - LoopixRole::Provider => CoreConfig::default_provider(path_length), - LoopixRole::Client => CoreConfig::default_client(path_length), - }; - LoopixConfig { - role, - core_config, - storage_config: storage, - } - } - - pub fn new(role: LoopixRole, storage: LoopixStorage, core_config: CoreConfig) -> Self { - let network_storage = storage.network_storage.blocking_read().clone(); - let mixes = network_storage.get_mixes(); - if core_config.path_length() != mixes.len() { - panic!("Path length in core config does not match path length in storage"); - } - LoopixConfig { - role, - core_config, - storage_config: storage, - } - } - - pub fn default_with_path_length( - role: LoopixRole, - our_node_id: u32, - path_length: usize, - private_key: StaticSecret, - public_key: PublicKey, - ) -> Self { - let client_storage = match role { - LoopixRole::Client => Some(ClientStorage::default_with_path_length( - our_node_id, - path_length, - )), - _ => None, - }; - - let provider_storage = match role { - LoopixRole::Provider => Some(ProviderStorage::default_with_path_length( - our_node_id, - path_length, - )), - _ => None, - }; - - if (client_storage.is_none() && provider_storage.is_none()) - && (role == LoopixRole::Mixnode) - && our_node_id < (path_length * 2) as u32 - { - panic!("Our node id must be between the path length and 2 times the path length"); - } - - let storage = LoopixStorage::default_with_path_length( - our_node_id, - path_length, - private_key, - public_key, - client_storage, - provider_storage, - ); - - LoopixConfig::new_default(role, path_length, storage) - } -} - -//////////////////////////////////////// Core Config //////////////////////////////////////// -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] -pub struct CoreConfig { - lambda_loop: f64, - lambda_drop: f64, - lambda_payload: f64, - path_length: usize, - mean_delay: f64, - lambda_loop_mix: f64, - time_pull: f64, - max_retrieve: usize, -} - -impl CoreConfig { - pub fn default_mixnode(path_length: usize) -> Self { - // TODO: change these values - CoreConfig { - lambda_loop: 10.0, - lambda_drop: 10.0, - lambda_payload: 10.0, - path_length, - mean_delay: 0.001, - lambda_loop_mix: 10.0, - time_pull: 10.0, - max_retrieve: 10, - } - } - - pub fn default_provider(path_length: usize) -> Self { - CoreConfig { - lambda_loop: 15.0, - lambda_drop: 15.0, - lambda_payload: 15.0, - path_length, - mean_delay: 0.002, - lambda_loop_mix: 15.0, - time_pull: 15.0, - max_retrieve: 10, - } - } - - pub fn default_client(path_length: usize) -> Self { - CoreConfig { - lambda_loop: 20.0, - lambda_drop: 20.0, - lambda_payload: 20.0, - path_length, - mean_delay: 0.003, - lambda_loop_mix: 20.0, - time_pull: 20.0, - max_retrieve: 10, - } - } -} - -impl Default for CoreConfig { - fn default() -> Self { - CoreConfig { - lambda_loop: 10.0, - lambda_drop: 10.0, - lambda_payload: 10.0, - path_length: 3, - mean_delay: 0.001, - lambda_loop_mix: 10.0, - time_pull: 10.0, - max_retrieve: 10, - } - } -} - -impl CoreConfig { - pub fn lambda_loop(&self) -> f64 { - self.lambda_loop - } - - pub fn lambda_drop(&self) -> f64 { - self.lambda_drop - } - - pub fn lambda_payload(&self) -> f64 { - self.lambda_payload - } - - pub fn path_length(&self) -> usize { - self.path_length as usize - } - - pub fn mean_delay(&self) -> f64 { - self.mean_delay - } - - pub fn lambda_loop_mix(&self) -> f64 { - self.lambda_loop_mix - } - - pub fn time_pull(&self) -> f64 { - self.time_pull - } - - pub fn max_retrieve(&self) -> usize { - self.max_retrieve - } -} diff --git a/flmodules/src/loopix/core.rs b/flmodules/src/loopix/core.rs deleted file mode 100644 index 78e06068..00000000 --- a/flmodules/src/loopix/core.rs +++ /dev/null @@ -1,334 +0,0 @@ -use crate::overlay::messages::NetworkWrapper; -use async_trait::async_trait; -use flarch::nodeids::NodeID; -use sphinx_packet::header::delays::generate_from_average_duration; -use sphinx_packet::route::{Destination, Node, NodeAddressBytes}; -use sphinx_packet::{ProcessedPacket, SphinxPacket}; -use std::time::Duration; - -use crate::loopix::config::CoreConfig; -use crate::loopix::sphinx::{destination_address_from_node_id, Sphinx}; -use crate::loopix::storage::LoopixStorage; - -use rand::prelude::SliceRandom; - -#[async_trait] -pub trait LoopixCore { - fn get_config(&self) -> &CoreConfig; - fn get_storage(&self) -> &LoopixStorage; - async fn get_our_id(&self) -> NodeID; - - async fn process_sphinx_packet(&self, sphinx_packet: Sphinx) -> ProcessedPacket { - let secret_key = self.get_storage().get_private_key().await; - sphinx_packet.inner.process(&secret_key).unwrap() - } - - async fn create_loop_message(&self) -> (NodeID, Sphinx); - async fn create_drop_message(&self) -> (NodeID, Sphinx); - - fn create_sphinx_packet( - &self, - dest: NodeID, - msg: NetworkWrapper, - route: &[Node], - ) -> (Node, Sphinx) { - // delays - let mean_delay = Duration::from_secs_f64(self.get_config().mean_delay()); - let delays = generate_from_average_duration(route.len(), mean_delay); - - // destination - let destination_address = destination_address_from_node_id(dest); - let random_identifier = rand::random::<[u8; 16]>(); - let destination = Destination::new(destination_address, random_identifier); - - // message conversion - let msg_bytes = serde_yaml::to_vec(&msg).unwrap(); - - let sphinx_packet = SphinxPacket::new(msg_bytes, route, &destination, &delays).unwrap(); - ( - route[0].clone(), - Sphinx { - inner: sphinx_packet, - }, - ) - } - - async fn create_route( - &self, - path_length: usize, - start_provider: Option, - dest_provider: Option, - receiver: Option, - ) -> Vec { - let mut route = Vec::new(); - - let node_public_keys = self.get_storage().get_node_public_keys().await; - - // add client provider - if let Some(start_provider) = start_provider { - let start_key = node_public_keys.get(&start_provider).unwrap(); - let start_node = Node::new( - NodeAddressBytes::from_bytes(start_provider.to_bytes()), - *start_key, - ); - route.push(start_node); - } - // add mixnode route - let mixnodes = self.get_storage().get_mixes().await; - for i in 0..path_length { - let mixnode = mixnodes[i as usize] - .choose(&mut rand::thread_rng()) - .unwrap(); - let key = node_public_keys.get(mixnode).unwrap(); - let node = Node::new(NodeAddressBytes::from_bytes(mixnode.to_bytes()), *key); - route.push(node); - } - - // add dst provider - if let Some(dest_provider) = dest_provider { - let dest_key = node_public_keys.get(&dest_provider).unwrap(); - let dest_node = Node::new( - NodeAddressBytes::from_bytes(dest_provider.to_bytes()), - *dest_key, - ); - route.push(dest_node); - } - - // add receiver - if let Some(receiver) = receiver { - let receiver_key = node_public_keys.get(&receiver).unwrap(); - let receiver_node = Node::new( - NodeAddressBytes::from_bytes(receiver.to_bytes()), - *receiver_key, - ); - route.push(receiver_node); - } - - route - } -} - -#[cfg(test)] -mod tests { - use crate::loopix::broker::MODULE_NAME; - use crate::loopix::config::LoopixConfig; - use crate::loopix::config::LoopixRole; - use crate::loopix::messages::MessageType; - use crate::loopix::sphinx::node_id_from_destination_address; - use crate::loopix::sphinx::node_id_from_node_address; - use sphinx_packet::{packet::*, route::*}; - use std::collections::HashMap; - use x25519_dalek::{PublicKey, StaticSecret}; - - use super::*; - - struct MockLoopixCore { - config: CoreConfig, - storage: LoopixStorage, - } - - #[async_trait] - impl LoopixCore for MockLoopixCore { - fn get_config(&self) -> &CoreConfig { - &self.config - } - - fn get_storage(&self) -> &LoopixStorage { - &self.storage - } - - async fn get_our_id(&self) -> NodeID { - self.storage.get_our_id().await - } - - async fn create_loop_message(&self) -> (NodeID, Sphinx) { - todo!() - } - - async fn create_drop_message(&self) -> (NodeID, Sphinx) { - todo!() - } - } - - async fn setup() -> ( - MockLoopixCore, - HashMap, - usize, - ) { - let path_length = 2; - let mut node_public_keys = HashMap::new(); - let mut node_key_pairs = HashMap::new(); - - for mix in 0..path_length * path_length + path_length + path_length { - let node_id = NodeID::from(mix as u32); - let (public_key, private_key) = LoopixStorage::generate_key_pair(); - node_public_keys.insert(node_id, public_key); - node_key_pairs.insert(node_id, (public_key, private_key)); - } - - let node_id = 5; - let private_key = &node_key_pairs.get(&NodeID::from(node_id)).unwrap().1; - let public_key = &node_key_pairs.get(&NodeID::from(node_id)).unwrap().0; - - let config = LoopixConfig::default_with_path_length( - LoopixRole::Mixnode, - node_id, - path_length, - private_key.clone(), - public_key.clone(), - ); - - let core = MockLoopixCore { - config: config.core_config, - storage: config.storage_config, - }; - - core.get_storage() - .set_node_public_keys(node_public_keys) - .await; - - (core, node_key_pairs, path_length) - } - - #[tokio::test] - async fn test_create_route() { - let (core, node_key_pairs, _path_length) = setup().await; - - let our_id = core.get_our_id().await; - - let route = core.create_route(0, None, None, Some(our_id)).await; - - assert_eq!(route.len(), 1); - - assert_eq!( - route[0].address, - NodeAddressBytes::from_bytes(our_id.to_bytes()) - ); - - let public_key = node_key_pairs.get(&our_id).unwrap().0; - assert_eq!(public_key, route[0].pub_key); - } - - #[tokio::test] - async fn test_sphinx_packet_simple() { - let (core, node_key_pairs, _) = setup().await; - - let our_id = core.get_our_id().await; - let storage = core.get_storage(); - let private_key = storage.get_private_key().await; - - assert_eq!( - private_key.as_bytes(), - node_key_pairs.get(&our_id).unwrap().1.as_bytes() - ); - - // just create a packet with one layer of encryption - let route = core.create_route(0, None, None, Some(our_id)).await; - - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: serde_yaml::to_string(&MessageType::Dummy).unwrap(), - }; - - let (_, sphinx) = core.create_sphinx_packet(our_id, msg, &route); - - let processed = sphinx.inner.process(&private_key).unwrap(); - - match processed { - ProcessedPacket::ForwardHop(_, _, _) => { - assert!(false); - } - ProcessedPacket::FinalHop(destination, _, payload) => { - // Check if the final destination matches our ID - let dest = node_id_from_destination_address(destination); - if dest == our_id { - // Recover the network wrapper - if let Ok(module_message) = serde_yaml::from_str::( - std::str::from_utf8(&payload.recover_plaintext().unwrap()).unwrap(), - ) { - // check module name - assert_eq!(module_message.module, MODULE_NAME); - - // check actual message - match serde_yaml::from_str::(&module_message.msg) { - Ok(MessageType::Dummy) => assert!(true), - _ => assert!(false), - } - } else { - assert!(false); - } - } else { - assert!(false); - } - } - } - } - - #[tokio::test] - async fn test_sphinx_packet_3_layers() { - let (core, node_key_pairs, _) = setup().await; - - let our_id = core.get_our_id().await; - let storage = core.get_storage(); - let private_key = storage.get_private_key().await; - - assert_eq!( - private_key.as_bytes(), - node_key_pairs.get(&our_id).unwrap().1.as_bytes() - ); - - // just create a packet with one layer of encryption - let route = core - .create_route(core.get_config().path_length(), None, None, Some(our_id)) - .await; - - // create packet and message - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: serde_yaml::to_string(&MessageType::Dummy).unwrap(), - }; - let (_, sphinx) = core.create_sphinx_packet(our_id, msg, &route); - - let mut packet_bytes = sphinx.inner.to_bytes(); - for (index, node) in route.iter().enumerate() { - let node_id = node_id_from_node_address(node.address); - let node_secret_key = &node_key_pairs.get(&node_id).unwrap().1; - let packet = SphinxPacket::from_bytes(&packet_bytes).unwrap(); - let processed = packet.process(node_secret_key).unwrap(); - - match processed { - ProcessedPacket::ForwardHop(new_packet, next_node, _) => { - assert!(index < route.len() - 1); - assert!(next_node == route[index + 1].address); - packet_bytes = new_packet.to_bytes(); - } - ProcessedPacket::FinalHop(destination, _, payload) => { - if index != route.len() - 1 { - assert!(false); - } - // Check if the final destination matches our ID - let dest = node_id_from_destination_address(destination); - if dest == our_id { - // Recover the network wrapper - if let Ok(module_message) = serde_yaml::from_str::( - std::str::from_utf8(&payload.recover_plaintext().unwrap()).unwrap(), - ) { - // check module name - assert_eq!(module_message.module, MODULE_NAME); - - // check actual message - match serde_yaml::from_str::(&module_message.msg) { - Ok(MessageType::Dummy) => assert!(true), - _ => assert!(false), - } - } else { - assert!(false); - } - } else { - assert!(false); - } - } - } - } - } -} diff --git a/flmodules/src/loopix/messages.rs b/flmodules/src/loopix/messages.rs deleted file mode 100644 index 5b3c9703..00000000 --- a/flmodules/src/loopix/messages.rs +++ /dev/null @@ -1,344 +0,0 @@ -use std::sync::Arc; -use std::time::Duration; - -use async_trait::async_trait; -use sphinx_packet::header::delays::generate_from_average_duration; - -use tokio::sync::mpsc::Sender; - -use flarch::nodeids::{NodeID, NodeIDs}; -use serde::{Deserialize, Serialize}; -use sphinx_packet::{header::delays::Delay, packet::*, payload::*}; - -use super::config::CoreConfig; -use super::storage::LoopixStorage; -use super::{ - client::Client, - core::*, - mixnode::{Mixnode, MixnodeInterface}, - provider::Provider, - sphinx::*, -}; -use crate::nodeconfig::NodeInfo; -use crate::overlay::messages::NetworkWrapper; - -#[derive(Clone, Debug)] -pub enum LoopixMessage { - Input(LoopixIn), - Output(LoopixOut), -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum LoopixIn { - // message from overlay: needs to be put in a sphinx packet - OverlayRequest(NodeID, NetworkWrapper), - // packet in sphinx format, from other nodes - SphinxFromNetwork(Sphinx), -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub enum MessageType { - Payload(NodeID, NetworkWrapper), // NodeID: Source - Drop, - Loop, - Dummy, - PullRequest(NodeID), - SubscriptionRequest(NodeID), -} - -#[derive(Debug, Clone)] -pub enum LoopixOut { - // Sphinx packet Loopix: network will forward it to the next node - SphinxToNetwork(NodeID, Sphinx), - // Unencrypted module message to overlay - OverlayReply(NodeID, NetworkWrapper), - - NodeInfosConnected(Vec), - - NodeIDsConnected(NodeIDs), - - NodeInfoAvailable(Vec), -} - -#[derive(Debug)] -pub struct LoopixMessages { - pub role: NodeType, - pub network_sender: Sender<(NodeID, Delay, Sphinx)>, - pub overlay_sender: Sender, -} - -impl Clone for LoopixMessages { - fn clone(&self) -> Self { - Self { - role: self.role.arc_clone(), - network_sender: self.network_sender.clone(), - overlay_sender: self.overlay_sender.clone(), - } - } -} - -impl LoopixMessages { - pub fn new( - node_type: NodeType, - network_sender: Sender<(NodeID, Delay, Sphinx)>, - overlay_sender: Sender, - ) -> Self { - Self { - role: node_type, - network_sender: network_sender, - overlay_sender: overlay_sender, - } - } - - pub async fn process_messages(&mut self, msgs: Vec) { - for msg in msgs { - self.process_message(msg).await; - } - } - - async fn process_message(&self, msg: LoopixIn) { - match msg { - LoopixIn::OverlayRequest(node_id, message) => { - self.process_overlay_message(node_id, message).await - } - LoopixIn::SphinxFromNetwork(sphinx) => self.process_sphinx_packet(sphinx).await, - } - } - - pub async fn create_drop_message(&self) -> (NodeID, Sphinx) { - self.role.create_drop_message().await - } - - pub async fn send_drop_message(&self) { - let (node_id, sphinx) = self.create_drop_message().await; - let mean_delay = Duration::from_secs_f64(self.role.get_config().mean_delay()); - let delay = generate_from_average_duration(1, mean_delay); - self.network_sender - .send((node_id, delay[0], sphinx)) - .await - .expect("while sending message"); - } - - pub async fn send_loop_message(&self) { - let (node_id, sphinx) = self.role.create_loop_message().await; - let mean_delay = Duration::from_secs_f64(self.role.get_config().mean_delay()); - let delay = generate_from_average_duration(1, mean_delay); - self.network_sender - .send((node_id, delay[0], sphinx)) - .await - .expect("while sending message"); - } - - pub async fn create_subscribe_message(&mut self) -> (NodeID, Sphinx) { - self.role.create_subscribe_message().await - } - - pub async fn create_pull_message(&self) -> (NodeID, Option) { - self.role.create_pull_message().await - } - - async fn process_overlay_message(&self, node_id: NodeID, message: NetworkWrapper) { - let (next_node, sphinx) = self.role.process_overlay_message(node_id, message).await; - let mean_delay = Duration::from_secs_f64(self.role.get_config().mean_delay()); - let delay = generate_from_average_duration(1, mean_delay); - self.network_sender - .send((next_node, delay[0], sphinx)) - .await - .expect("while sending message"); - } - - async fn process_sphinx_packet(&self, sphinx_packet: Sphinx) { - let processed = self.role.process_sphinx_packet(sphinx_packet).await; - match processed { - ProcessedPacket::ForwardHop(next_packet, next_address, delay) => { - let next_node_id = node_id_from_node_address(next_address); - let (next_node_id, next_delay, sphinx) = self - .role - .process_forward_hop(next_packet, next_node_id, delay) - .await; - if let Some(sphinx) = sphinx { - self.network_sender - .send((next_node_id, next_delay, sphinx)) - .await - .expect("while sending message"); - } - } - ProcessedPacket::FinalHop(destination, surb_id, payload) => { - // Check if the final destination matches our ID - let dest = node_id_from_destination_address(destination); - if dest == self.role.get_our_id().await { - self.role.process_final_hop(dest, surb_id, payload).await; - } else { - log::warn!("Received a FinalHop packet not intended for this node"); - } - } - } - } -} - -#[derive(Debug)] -pub enum NodeType { - Client(Client), - Mixnode(Mixnode), - Provider(Provider), -} - -#[async_trait] -impl LoopixCore for NodeType { - fn get_config(&self) -> &CoreConfig { - match self { - NodeType::Client(client) => client.get_config(), - NodeType::Mixnode(mixnode) => mixnode.get_config(), - NodeType::Provider(provider) => provider.get_config(), - } - } - - fn get_storage(&self) -> &LoopixStorage { - match self { - NodeType::Client(client) => client.get_storage(), - NodeType::Mixnode(mixnode) => mixnode.get_storage(), - NodeType::Provider(provider) => provider.get_storage(), - } - } - - async fn get_our_id(&self) -> NodeID { - match self { - NodeType::Client(client) => client.get_our_id().await, - NodeType::Mixnode(mixnode) => mixnode.get_our_id().await, - NodeType::Provider(provider) => provider.get_our_id().await, - } - } - - async fn create_drop_message(&self) -> (NodeID, Sphinx) { - match self { - NodeType::Client(client) => client.create_drop_message().await, - NodeType::Mixnode(mixnode) => LoopixCore::create_drop_message(mixnode).await, - NodeType::Provider(provider) => LoopixCore::create_drop_message(provider).await, - } - } - - async fn create_loop_message(&self) -> (NodeID, Sphinx) { - match self { - NodeType::Client(client) => client.create_loop_message().await, - NodeType::Mixnode(mixnode) => LoopixCore::create_loop_message(mixnode).await, - NodeType::Provider(provider) => LoopixCore::create_loop_message(provider).await, - } - } -} - -impl NodeType { - /// Clones the arc of the storage and creates a new NodeType - pub fn arc_clone(&self) -> Self { - match self { - NodeType::Client(client) => { - let storage = client.get_storage(); - let network_storage = Arc::clone(&storage.network_storage); - let client_storage = Arc::clone(&storage.client_storage); - let provider_storage = Arc::clone(&storage.provider_storage); - let loopix_storage = LoopixStorage { - network_storage, - client_storage, - provider_storage, - }; - NodeType::Client(Client::new(loopix_storage, client.get_config().clone())) - } - NodeType::Mixnode(mixnode) => { - let storage = mixnode.get_storage(); - let network_storage = Arc::clone(&storage.network_storage); - let client_storage = Arc::clone(&storage.client_storage); - let provider_storage = Arc::clone(&storage.provider_storage); - let loopix_storage = LoopixStorage { - network_storage, - client_storage, - provider_storage, - }; - NodeType::Mixnode(Mixnode::new(loopix_storage, mixnode.get_config().clone())) - } - NodeType::Provider(provider) => { - let storage = provider.get_storage(); - let network_storage = Arc::clone(&storage.network_storage); - let client_storage = Arc::clone(&storage.client_storage); - let provider_storage = Arc::clone(&storage.provider_storage); - let loopix_storage = LoopixStorage { - network_storage, - client_storage, - provider_storage, - }; - NodeType::Provider(Provider::new(loopix_storage, provider.get_config().clone())) - } - } - } - - async fn create_subscribe_message(&self) -> (NodeID, Sphinx) { - match self { - NodeType::Client(client) => client.create_subscribe_message().await, - NodeType::Mixnode(_) => panic!("Mixnode does not implement create_subscribe_message"), - NodeType::Provider(_) => panic!("Provider does not implement create_subscribe_message"), - } - } - - async fn create_pull_message(&self) -> (NodeID, Option) { - match self { - NodeType::Client(client) => client.create_pull_message().await, - NodeType::Mixnode(_) => panic!("Mixnode does not implement create_pull_message"), - NodeType::Provider(_) => panic!("Provider does not implement create_pull_message"), - } - } - - async fn process_overlay_message( - &self, - node_id: NodeID, - message: NetworkWrapper, - ) -> (NodeID, Sphinx) { - match self { - NodeType::Client(client) => client.process_overlay_message(node_id, message).await, - NodeType::Mixnode(_) => panic!("Mixnode does not implement process_overlay_message"), - NodeType::Provider(_) => panic!("Provider does not implement process_overlay_message"), - } - } - - async fn process_forward_hop( - &self, - next_packet: Box, - next_address: NodeID, - delay: Delay, - ) -> (NodeID, Delay, Option) { - match self { - NodeType::Mixnode(mixnode) => { - mixnode - .process_forward_hop(next_packet, next_address, delay) - .await - } - NodeType::Provider(provider) => { - provider - .process_forward_hop(next_packet, next_address, delay) - .await - } - NodeType::Client(_) => panic!("Client does not implement process_forward_hop"), - } - } - - async fn process_final_hop(&self, destination: NodeID, surb_id: [u8; 16], payload: Payload) { - match self { - NodeType::Client(client) => { - client - .process_final_hop(destination, surb_id, payload) - .await - } - NodeType::Mixnode(_) => panic!("Mixnode does not implement process_final_hop"), - NodeType::Provider(_) => panic!("Provider does not implement process_final_hop"), - } - } -} - -impl From for LoopixMessage { - fn from(msg: LoopixIn) -> Self { - LoopixMessage::Input(msg) - } -} - -impl From for LoopixMessage { - fn from(msg: LoopixOut) -> Self { - LoopixMessage::Output(msg) - } -} diff --git a/flmodules/src/loopix/mixnode.rs b/flmodules/src/loopix/mixnode.rs deleted file mode 100644 index da4d935f..00000000 --- a/flmodules/src/loopix/mixnode.rs +++ /dev/null @@ -1,132 +0,0 @@ -use crate::loopix::broker::MODULE_NAME; - -use crate::loopix::{ - config::CoreConfig, - core::LoopixCore, - messages::MessageType, - sphinx::{node_id_from_node_address, Sphinx}, - storage::LoopixStorage, -}; -use async_trait::async_trait; -use flarch::nodeids::NodeID; -use rand::seq::SliceRandom; -use sphinx_packet::{header::delays::Delay, packet::*}; - -use crate::overlay::messages::NetworkWrapper; - -#[derive(Debug, Clone, PartialEq)] -pub struct Mixnode { - storage: LoopixStorage, - config: CoreConfig, -} - -#[async_trait] -pub trait MixnodeInterface: LoopixCore { - async fn process_forward_hop( - &self, - next_packet: Box, - next_address: NodeID, - delay: Delay, - ) -> (NodeID, Delay, Option); - - async fn create_loop_message(&self) -> (NodeID, Sphinx) { - let providers = self.get_storage().get_providers().await; - let our_id = self.get_our_id().await; - - // pick random provider - let random_provider = providers.choose(&mut rand::thread_rng()).unwrap(); - - // create route - let route = self - .create_route( - self.get_config().path_length(), - None, - Some(*random_provider), - Some(our_id), - ) - .await; - - // create the networkmessage - let loop_msg = serde_json::to_string(&MessageType::Loop).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: loop_msg, - }; - - // create sphinx packet - let (next_node, sphinx) = self.create_sphinx_packet(our_id, msg, &route); - (node_id_from_node_address(next_node.address), sphinx) - } - - async fn create_drop_message(&self) -> (NodeID, Sphinx) { - let providers = self.get_storage().get_providers().await; - - // pick random provider - let random_provider = providers.choose(&mut rand::thread_rng()).unwrap(); - - // create route - let route = self - .create_route( - self.get_config().path_length(), - None, - Some(*random_provider), - None, - ) - .await; - - // create the networkmessage - let drop_msg = serde_json::to_string(&MessageType::Drop).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: drop_msg, - }; - - // create sphinx packet - let (next_node, sphinx) = self.create_sphinx_packet(*random_provider, msg, &route); - (node_id_from_node_address(next_node.address), sphinx) - } -} - -impl Mixnode { - pub fn new(storage: LoopixStorage, config: CoreConfig) -> Self { - Self { storage, config } - } -} - -#[async_trait] -impl LoopixCore for Mixnode { - fn get_storage(&self) -> &LoopixStorage { - &self.storage - } - - fn get_config(&self) -> &CoreConfig { - &self.config - } - - async fn get_our_id(&self) -> NodeID { - self.storage.get_our_id().await - } - - async fn create_loop_message(&self) -> (NodeID, Sphinx) { - MixnodeInterface::create_loop_message(self).await - } - - async fn create_drop_message(&self) -> (NodeID, Sphinx) { - MixnodeInterface::create_drop_message(self).await - } -} - -#[async_trait] -impl MixnodeInterface for Mixnode { - async fn process_forward_hop( - &self, - next_packet: Box, - next_node: NodeID, - delay: Delay, - ) -> (NodeID, Delay, Option) { - let sphinx = &Sphinx { - inner: *next_packet, - }; - (next_node, delay, Some(sphinx.clone())) - } -} diff --git a/flmodules/src/loopix/mod.rs b/flmodules/src/loopix/mod.rs deleted file mode 100644 index d15a9a2c..00000000 --- a/flmodules/src/loopix/mod.rs +++ /dev/null @@ -1,15 +0,0 @@ -pub mod config; -pub mod core; -pub mod sphinx; -pub mod storage; - -pub mod client; -pub mod mixnode; -pub mod provider; - -pub mod messages; - -pub mod broker; - -#[cfg(feature = "testing")] -pub mod testing; diff --git a/flmodules/src/loopix/provider.rs b/flmodules/src/loopix/provider.rs deleted file mode 100644 index 5cc89025..00000000 --- a/flmodules/src/loopix/provider.rs +++ /dev/null @@ -1,124 +0,0 @@ -use crate::overlay::messages::NetworkWrapper; - -use crate::loopix::broker::MODULE_NAME; -use crate::loopix::config::CoreConfig; -use crate::loopix::core::LoopixCore; -use crate::loopix::messages::MessageType; -use crate::loopix::mixnode::MixnodeInterface; -use crate::loopix::sphinx::Sphinx; -use crate::loopix::storage::LoopixStorage; -use async_trait::async_trait; -use flarch::nodeids::NodeID; -use sphinx_packet::header::delays::Delay; -use sphinx_packet::SphinxPacket; - -#[derive(Debug, Clone, PartialEq)] -pub struct Provider { - storage: LoopixStorage, - config: CoreConfig, -} - -#[async_trait] -impl MixnodeInterface for Provider { - async fn process_forward_hop( - &self, - next_packet: Box, - next_node: NodeID, - delay: Delay, - ) -> (NodeID, Delay, Option) { - if self.get_storage().get_clients().await.contains(&next_node) { - let sphinx = &Sphinx { - inner: *next_packet, - }; - self.store_client_message(next_node, sphinx.clone()).await; - (next_node, delay, Some(sphinx.clone())) - } else { - Box::pin(MixnodeInterface::process_forward_hop( - self, - next_packet, - next_node, - delay, - )) - .await // TODO I have no idea what box pin is, compoiler said to do it - } - } -} - -#[async_trait] -impl LoopixCore for Provider { - fn get_config(&self) -> &CoreConfig { - &self.config - } - - fn get_storage(&self) -> &LoopixStorage { - &self.storage - } - - async fn get_our_id(&self) -> NodeID { - self.storage.get_our_id().await - } - - async fn create_loop_message(&self) -> (NodeID, Sphinx) { - MixnodeInterface::create_loop_message(self).await - } - - async fn create_drop_message(&self) -> (NodeID, Sphinx) { - MixnodeInterface::create_drop_message(self).await - } -} - -impl Provider { - pub fn new(storage: LoopixStorage, config: CoreConfig) -> Self { - Self { storage, config } - } - - pub async fn subscribe_client(&self, client_id: NodeID) { - self.get_storage().add_client(client_id).await; - } - - pub async fn get_client_messages(&self, client_id: NodeID) -> Vec { - self.get_storage().get_client_messages(client_id).await - } - - pub async fn store_client_message(&self, client_id: NodeID, message: Sphinx) { - self.get_storage() - .add_client_message(client_id, message) - .await - } - - pub async fn create_dummy_message(&self, client_id: NodeID) -> Sphinx { - // create route - let route = self.create_route(0, None, None, Some(client_id)).await; - - // create message - let dummy_msg = serde_json::to_string(&MessageType::Dummy).unwrap(); - let msg = NetworkWrapper { - module: MODULE_NAME.into(), - msg: dummy_msg, - }; - - // create sphinx packet - let (_, sphinx) = self.create_sphinx_packet(client_id, msg, &route); - sphinx - } - - pub async fn create_pull_reply(&self, client_id: NodeID) -> Vec { - // get max send amount and messages - let max_retrieve = self.get_config().max_retrieve(); - let messages = self.get_client_messages(client_id).await; - - // add messages to send - let mut messages_to_send = Vec::new(); - for message in messages.iter().take(max_retrieve) { - messages_to_send.push(message.clone()); - } - - // pad vec if not enough messages - if messages_to_send.len() < max_retrieve { - let sphinx = self.create_dummy_message(client_id).await; - messages_to_send.push(sphinx); - } - - messages_to_send - } -} diff --git a/flmodules/src/loopix/sphinx.rs b/flmodules/src/loopix/sphinx.rs deleted file mode 100644 index d20f2520..00000000 --- a/flmodules/src/loopix/sphinx.rs +++ /dev/null @@ -1,132 +0,0 @@ -use sphinx_packet::SphinxPacket; -use serde::{Deserialize, Serialize}; -use flarch::nodeids::NodeID; -use sphinx_packet::route::{NodeAddressBytes, DestinationAddressBytes}; - - -#[derive(Serialize, Deserialize)] -pub struct Sphinx { - #[serde(serialize_with = "serialize_sphinx_packet", deserialize_with = "deserialize_sphinx_packet")] - pub inner: SphinxPacket, -} - -impl std::fmt::Debug for Sphinx { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Sphinx") - .field("header", &self.inner.header) - .finish() - } -} - -pub fn serialize_sphinx_packet(sphinx_packet: &SphinxPacket, serializer: S) -> std::result::Result -where - S: serde::Serializer, -{ - let bytes = sphinx_packet.to_bytes(); - serializer.serialize_bytes(&bytes) -} - -pub fn deserialize_sphinx_packet<'de, D>(deserializer: D) -> std::result::Result -where - D: serde::Deserializer<'de>, -{ - let bytes = Vec::::deserialize(deserializer)?; - SphinxPacket::from_bytes(&bytes).map_err(serde::de::Error::custom) -} - -impl PartialEq for Sphinx { - fn eq(&self, other: &Self) -> bool { - self.inner.to_bytes() == other.inner.to_bytes() - } -} - -impl Clone for Sphinx { - fn clone(&self) -> Self { - let mut buffer = Vec::new(); - serialize_sphinx_packet(&self.inner, &mut serde_json::Serializer::new(&mut buffer)).unwrap(); - let cloned_packet = deserialize_sphinx_packet(&mut serde_json::Deserializer::from_slice(&buffer)).unwrap(); - Sphinx { inner: cloned_packet } - } -} - -pub fn node_address_from_node_id(node_id: NodeID) -> NodeAddressBytes { - let node_id_bytes = node_id.to_bytes(); - NodeAddressBytes::from_bytes(node_id_bytes) -} - -pub fn node_id_from_node_address(node_address: NodeAddressBytes) -> NodeID { - let node_address_bytes = node_address.as_bytes(); - NodeID::from(node_address_bytes) -} - -pub fn node_id_from_destination_address(dest_addr: DestinationAddressBytes) -> NodeID { - let dest_bytes = dest_addr.as_bytes(); - NodeID::from(dest_bytes) -} - -pub fn destination_address_from_node_id(node_id: NodeID) -> DestinationAddressBytes { - let node_id_bytes = node_id.to_bytes(); - DestinationAddressBytes::from_bytes(node_id_bytes) -} - -#[cfg(test)] -mod tests { - use super::*; - use sphinx_packet::header::SphinxHeader; - use sphinx_packet::payload::Payload; - use rand::RngCore; - - fn create_dummy_sphinx_packet() -> SphinxPacket { - let mut header_bytes = [0u8; 348]; - rand::thread_rng().fill_bytes(&mut header_bytes); - - let mut payload_bytes = vec![0u8; 1024]; - rand::thread_rng().fill_bytes(&mut payload_bytes); - - SphinxPacket { - header: SphinxHeader::from_bytes(&header_bytes).unwrap(), - payload: Payload::from_bytes(&payload_bytes).unwrap(), - } - } - - #[test] - fn test_sphinx_debug() { - let packet = create_dummy_sphinx_packet(); - let sphinx = Sphinx { inner: packet }; - let debug_output = format!("{:?}", sphinx); - println!("Debug output: {}", debug_output); - assert!(debug_output.contains("Sphinx")); - assert!(debug_output.contains("header")); - } - - #[test] - fn test_sphinx_serialization() { - let packet = create_dummy_sphinx_packet(); - let sphinx = Sphinx { inner: packet }; - - let mut serialized = Vec::new(); - bincode::serialize_into(&mut serialized, &sphinx).unwrap(); - - let deserialized: Sphinx = bincode::deserialize(&serialized).unwrap(); - - assert_eq!(sphinx, deserialized); - } - - #[test] - fn test_sphinx_clone() { - let packet = create_dummy_sphinx_packet(); - let sphinx = Sphinx { inner: packet }; - let cloned_sphinx = sphinx.clone(); - assert_eq!(sphinx, cloned_sphinx); - } - - #[test] - fn test_sphinx_equality() { - let packet1 = create_dummy_sphinx_packet(); - let sphinx1 = Sphinx { inner: packet1 }; - let sphinx2 = sphinx1.clone(); - assert_eq!(sphinx1, sphinx2); - } - - -} \ No newline at end of file diff --git a/flmodules/src/loopix/storage.rs b/flmodules/src/loopix/storage.rs deleted file mode 100644 index ac863916..00000000 --- a/flmodules/src/loopix/storage.rs +++ /dev/null @@ -1,618 +0,0 @@ -use crate::loopix::sphinx::Sphinx; -use flarch::nodeids::{NodeID, NodeIDs}; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; -use std::collections::HashSet; -use std::sync::Arc; -use tokio::sync::RwLock; -use x25519_dalek::{PublicKey, StaticSecret}; - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub enum LoopixStorageSave { - V1(LoopixStorage), -} - -impl LoopixStorageSave { - pub fn from_str(data: &str) -> Result { - Ok(serde_yaml::from_str::(data)?.to_latest()) - } - - fn to_latest(self) -> LoopixStorage { - match self { - LoopixStorageSave::V1(es) => es, - } - } -} - -#[derive(Clone, Serialize, Deserialize)] -pub struct NetworkStorage { - node_id: NodeID, - #[serde( - serialize_with = "serialize_static_secret", - deserialize_with = "deserialize_static_secret" - )] - private_key: StaticSecret, - #[serde( - serialize_with = "serialize_public_key", - deserialize_with = "deserialize_public_key" - )] - public_key: PublicKey, - mixes: Vec>, - providers: Vec, - #[serde( - serialize_with = "serialize_node_public_keys", - deserialize_with = "deserialize_node_public_keys" - )] - node_public_keys: HashMap, -} - -impl NetworkStorage { - pub fn get_mixes(&self) -> &Vec> { - &self.mixes - } -} - -#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] -pub struct ClientStorage { - our_provider: Option, - client_to_provider_map: HashMap, -} - -impl ClientStorage { - pub fn new( - our_provider: Option, - client_to_provider_map: HashMap, - ) -> Self { - ClientStorage { - our_provider, - client_to_provider_map, - } - } - - /// given path_length 3: our node either 0, 1, or 2 - pub fn default_with_path_length(our_node_id: u32, path_length: usize) -> Self { - if our_node_id >= path_length as u32 { - panic!("Our node id must be less than the path length"); - } - let our_provider = Some(NodeID::from(our_node_id + path_length as u32)); - - let mut client_to_provider_map = HashMap::new(); - for i in 0..path_length { - client_to_provider_map.insert( - NodeID::from(i as u32), - NodeID::from((i + path_length) as u32), - ); - } - ClientStorage { - our_provider, - client_to_provider_map, - } - } -} - -#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] -pub struct ProviderStorage { - clients: HashSet, - client_messages: HashMap>, -} - -impl ProviderStorage { - pub fn new(clients: HashSet, client_messages: HashMap>) -> Self { - ProviderStorage { - clients, - client_messages, - } - } - - pub fn default() -> Self { - ProviderStorage { - clients: HashSet::new(), - client_messages: HashMap::new(), - } - } - - /// given path_length 3: our node either 3, 4, or 5 - pub fn default_with_path_length(our_node_id: u32, path_length: usize) -> Self { - if our_node_id < path_length as u32 || our_node_id >= (path_length * 2) as u32 { - panic!("Our node id must be between the path length and 2 times the path length"); - } - - let mut clients = HashSet::new(); - clients.insert(NodeID::from(our_node_id - path_length as u32)); - - ProviderStorage { - clients, - client_messages: HashMap::new(), - } - } -} - -pub struct LoopixStorage { - pub network_storage: Arc>, - pub client_storage: Arc>>, - pub provider_storage: Arc>>, -} - -impl LoopixStorage { - // TODO figure out how to serialize this - // pub fn to_yaml(&self) -> Result { - // serde_yaml::to_string::(&LoopixStorageSave::V1((*self).clone())) - // } - - pub async fn get_our_id(&self) -> NodeID { - self.network_storage.read().await.node_id.clone() - } - - pub async fn get_private_key(&self) -> StaticSecret { - self.network_storage.read().await.private_key.clone() - } - - pub async fn get_public_key(&self) -> PublicKey { - self.network_storage.read().await.public_key.clone() - } - - pub async fn get_mixes(&self) -> Vec> { - self.network_storage.read().await.mixes.clone() - } - - pub async fn set_mixes(&self, new_mixes: Vec>) { - self.network_storage.write().await.mixes = new_mixes; - } - - pub async fn get_providers(&self) -> Vec { - self.network_storage.read().await.providers.clone() - } - - pub async fn set_providers(&self, new_providers: Vec) { - self.network_storage.write().await.providers = new_providers; - } - - pub async fn get_node_public_keys(&self) -> HashMap { - self.network_storage.read().await.node_public_keys.clone() - } - - pub async fn set_node_public_keys(&self, new_keys: HashMap) { - self.network_storage.write().await.node_public_keys = new_keys; - } - - pub async fn get_our_provider(&self) -> Option { - if let Some(storage) = self.client_storage.read().await.as_ref() { - storage.our_provider.clone() - } else { - panic!("Client storage not found"); - } - } - - pub async fn set_our_provider(&self, provider: Option) { - if let Some(storage) = &mut *self.client_storage.write().await { - storage.our_provider = provider; - } else { - panic!("Client storage not found"); - } - } - - pub async fn get_client_to_provider_map(&self) -> HashMap { - if let Some(storage) = self.client_storage.read().await.as_ref() { - storage.client_to_provider_map.clone() - } else { - panic!("Client storage not found"); - } - } - - pub async fn update_client_provider_mapping(&self, client_id: NodeID, new_provider_id: NodeID) { - if let Some(storage) = &mut *self.client_storage.write().await { - storage - .client_to_provider_map - .insert(client_id, new_provider_id); - } else { - panic!("Client storage not found"); - } - } - - pub async fn set_client_provider_map(&self, new_map: HashMap) { - if let Some(storage) = &mut *self.client_storage.write().await { - storage.client_to_provider_map = new_map; - } else { - panic!("Client storage not found"); - } - } - - pub async fn get_clients(&self) -> HashSet { - if let Some(storage) = self.provider_storage.read().await.as_ref() { - storage.clients.clone() - } else { - panic!("Provider storage not found"); - } - } - - pub async fn add_client(&self, client_id: NodeID) { - if let Some(storage) = &mut *self.provider_storage.write().await { - storage.clients.insert(client_id); - } else { - panic!("Provider storage not found"); - } - } - - pub async fn set_clients(&self, new_clients: HashSet) { - if let Some(storage) = &mut *self.provider_storage.write().await { - storage.clients = new_clients; - } else { - panic!("Provider storage not found"); - } - } - - pub async fn get_client_messages(&self, node_id: NodeID) -> Vec { - if let Some(storage) = self.provider_storage.read().await.as_ref() { - storage - .client_messages - .get(&node_id) - .cloned() - .unwrap_or_default() - } else { - panic!("Provider storage not found"); - } - } - - pub async fn add_client_message(&self, client_id: NodeID, new_message: Sphinx) { - if let Some(storage) = &mut *self.provider_storage.write().await { - storage - .client_messages - .entry(client_id) - .or_insert(Vec::new()) - .push(new_message); - } else { - panic!("Provider storage not found"); - } - } -} - -#[derive(Clone, Serialize, Deserialize)] -struct SerializableLoopixStorage { - pub network_storage: NetworkStorage, - pub client_storage: Option, - pub provider_storage: Option, -} - -impl Serialize for LoopixStorage { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - let serde_struct = SerializableLoopixStorage { - network_storage: self.network_storage.blocking_read().clone(), - client_storage: self.client_storage.blocking_read().clone(), - provider_storage: self.provider_storage.blocking_read().clone(), - }; - - serde_struct.serialize(serializer) - } -} - -impl<'de> Deserialize<'de> for LoopixStorage { - fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - let serde_struct = SerializableLoopixStorage::deserialize(deserializer)?; - - Ok(LoopixStorage { - network_storage: Arc::new(RwLock::new(serde_struct.network_storage)), - client_storage: Arc::new(RwLock::new(serde_struct.client_storage)), - provider_storage: Arc::new(RwLock::new(serde_struct.provider_storage)), - }) - } -} - -impl Default for LoopixStorage { - fn default() -> Self { - let (public_key, private_key) = Self::generate_key_pair(); - LoopixStorage { - network_storage: Arc::new(RwLock::new(NetworkStorage { - node_id: NodeID::rnd(), - private_key, - public_key, - mixes: Vec::new(), - providers: Vec::new(), - node_public_keys: HashMap::new(), - })), - client_storage: Arc::new(RwLock::new(Option::None)), - provider_storage: Arc::new(RwLock::new(Option::None)), - } - } -} - -impl LoopixStorage { - pub fn new( - node_id: NodeID, - private_key: StaticSecret, - public_key: PublicKey, - mixes: Vec>, - providers: Vec, - node_public_keys: HashMap, - client_storage: Option, - provider_storage: Option, - ) -> Self { - LoopixStorage { - network_storage: Arc::new(RwLock::new(NetworkStorage { - node_id, - private_key, - public_key, - mixes, - providers, - node_public_keys, - })), - client_storage: Arc::new(RwLock::new(client_storage)), - provider_storage: Arc::new(RwLock::new(provider_storage)), - } - } - - pub fn new_with_key_generation( - node_id: NodeID, - mixes: Vec>, - providers: Vec, - node_public_keys: HashMap, - client_storage: Option, - provider_storage: Option, - ) -> Self { - let (public_key, private_key) = Self::generate_key_pair(); - LoopixStorage { - network_storage: Arc::new(RwLock::new(NetworkStorage { - node_id, - private_key, - public_key, - mixes, - providers, - node_public_keys, - })), - client_storage: Arc::new(RwLock::new(client_storage)), - provider_storage: Arc::new(RwLock::new(provider_storage)), - } - } - - pub fn generate_key_pair() -> (PublicKey, StaticSecret) { - let rng = rand::thread_rng(); - let private_key = StaticSecret::random_from_rng(rng); - let public_key = PublicKey::from(&private_key); - (public_key, private_key) - } - - /// default testing storage with a given path length - /// - /// given path_length 3: - /// 0 to 3 are reserved for clients - /// 3 to 6 are providers - /// 6 to 14 are mixes - pub fn default_with_path_length( - node_id: u32, - path_length: usize, - private_key: StaticSecret, - public_key: PublicKey, - client_storage: Option, - provider_storage: Option, - ) -> Self { - //provider generation - let providers = NodeIDs::new_range(path_length as u32, (path_length * 2) as u32).to_vec(); - - //mix generation - let mut mixes = Vec::new(); - for i in (path_length * 2..path_length * 2 + path_length * path_length) - .step_by(path_length as usize) - { - mixes.push(NodeIDs::new_range(i as u32, (i + path_length) as u32).to_vec()); - } - - LoopixStorage { - network_storage: Arc::new(RwLock::new(NetworkStorage { - node_id: NodeID::from(node_id), - private_key, - public_key, - mixes, - providers, - node_public_keys: HashMap::new(), - })), - client_storage: Arc::new(RwLock::new(client_storage)), - provider_storage: Arc::new(RwLock::new(provider_storage)), - } - } -} - -// region: Derived functions -impl PartialEq for LoopixStorage { - fn eq(&self, other: &Self) -> bool { - let self_network_storage = self.network_storage.blocking_read(); - let other_network_storage = other.network_storage.blocking_read(); - - let self_client_storage = self.client_storage.blocking_read(); - let other_client_storage = other.client_storage.blocking_read(); - - let self_provider_storage = self.provider_storage.blocking_read(); - let other_provider_storage = other.provider_storage.blocking_read(); - - self_network_storage.node_id == other_network_storage.node_id - && self_network_storage.private_key.to_bytes() - == other_network_storage.private_key.to_bytes() - && self_network_storage.public_key == other_network_storage.public_key - && self_network_storage.mixes == other_network_storage.mixes - && self_network_storage.providers == other_network_storage.providers - && self_network_storage.node_public_keys == other_network_storage.node_public_keys - && *self_client_storage == *other_client_storage - && *self_provider_storage == *other_provider_storage - } -} - -impl std::fmt::Debug for LoopixStorage { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let network_storage = self.network_storage.blocking_read(); - let client_storage = self.client_storage.blocking_read(); - let provider_storage = self.provider_storage.blocking_read(); - - f.debug_struct("LoopixStorage") - .field("node_id", &network_storage.node_id) - .field("private_key", &"[hidden]") - .field("public_key", &network_storage.public_key) - .field("mixes", &network_storage.mixes) - .field("providers", &network_storage.providers) - .field("node_public_keys", &network_storage.node_public_keys) - .field("client_storage", &*client_storage) - .field("provider_storage", &*provider_storage) - .finish() - } -} -// endregion: Derived functions - -// region: Serde functions -pub fn serialize_public_key(key: &PublicKey, serializer: S) -> Result -where - S: serde::Serializer, -{ - let key_bytes: &[u8] = key.as_bytes(); - serializer.serialize_bytes(key_bytes) -} - -pub fn deserialize_public_key<'de, D>(deserializer: D) -> Result -where - D: serde::Deserializer<'de>, -{ - let key_bytes: [u8; 32] = serde::Deserialize::deserialize(deserializer)?; - Ok(PublicKey::from(key_bytes)) -} - -pub fn serialize_static_secret(key: &StaticSecret, serializer: S) -> Result -where - S: serde::Serializer, -{ - let key_bytes: [u8; 32] = key.to_bytes(); - serializer.serialize_bytes(&key_bytes) -} - -pub fn deserialize_static_secret<'de, D>(deserializer: D) -> Result -where - D: serde::Deserializer<'de>, -{ - let key_bytes: [u8; 32] = serde::Deserialize::deserialize(deserializer)?; - Ok(StaticSecret::from(key_bytes)) -} - -pub fn serialize_node_public_keys( - keys: &HashMap, - serializer: S, -) -> Result -where - S: serde::Serializer, -{ - let keys_bytes: HashMap<_, _> = keys - .iter() - .map(|(node_id, key)| (node_id, key.as_bytes())) - .collect(); - keys_bytes.serialize(serializer) -} - -pub fn deserialize_node_public_keys<'de, D>( - deserializer: D, -) -> Result, D::Error> -where - D: serde::Deserializer<'de>, -{ - let keys_bytes: HashMap = HashMap::deserialize(deserializer)?; - let keys = keys_bytes - .into_iter() - .map(|(node_id, key_bytes)| (node_id, PublicKey::from(key_bytes))) - .collect(); - Ok(keys) -} - -// endregion: Serde functions - -impl Clone for LoopixStorage { - fn clone(&self) -> Self { - LoopixStorage { - network_storage: Arc::new(RwLock::new(self.network_storage.blocking_read().clone())), - client_storage: Arc::new(RwLock::new(self.client_storage.blocking_read().clone())), - provider_storage: Arc::new(RwLock::new(self.provider_storage.blocking_read().clone())), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[tokio::test] - async fn test_default_with_path_length() { - let path_length = 3; - let node_id = 1; - let client_storage = None; - let provider_storage = None; - - let (public_key, private_key) = LoopixStorage::generate_key_pair(); - - let storage = LoopixStorage::default_with_path_length( - node_id, - path_length, - private_key, - public_key, - client_storage, - provider_storage, - ); - - let network_storage = storage.network_storage.read().await; - println!("Providers: {:?}", network_storage.providers); - println!("Mixes: {:?}", network_storage.mixes); - println!("NodeId: {:?}", network_storage.node_id); - } - - #[test] - fn test_client_storage_default_with_path_length() { - let our_node_id = 1; - let path_length = 3; - - let client_storage = ClientStorage::default_with_path_length(our_node_id, path_length); - - println!("Our Provider: {:?}", client_storage.our_provider); - println!( - "Client to Provider Map: {:?}", - client_storage.client_to_provider_map - ); - } - - #[test] - fn test_provider_storage_default_with_path_length() { - let our_node_id = 4; - let path_length = 3; - - let provider_storage = ProviderStorage::default_with_path_length(our_node_id, path_length); - - println!("Clients: {:?}", provider_storage.clients); - } - - #[test] - fn test_loopix_storage_serde() { - let path_length = 3; - let node_id = 1; - let (public_key, private_key) = LoopixStorage::generate_key_pair(); - - let mut node_public_keys = HashMap::new(); - node_public_keys.insert(NodeID::from(1), public_key); - - let client_storage = Some(ClientStorage::default_with_path_length( - node_id, - path_length, - )); - let provider_storage = None; - - let original_storage = LoopixStorage::default_with_path_length( - node_id, - path_length, - private_key, - public_key, - client_storage, - provider_storage, - ); - - let serialized = serde_yaml::to_string(&original_storage).expect("Failed to serialize"); - let deserialized: LoopixStorage = - serde_yaml::from_str(&serialized).expect("Failed to deserialize"); - - assert_eq!(original_storage, deserialized); - } -} diff --git a/flmodules/src/loopix/testing.rs b/flmodules/src/loopix/testing.rs deleted file mode 100644 index f53929c9..00000000 --- a/flmodules/src/loopix/testing.rs +++ /dev/null @@ -1,259 +0,0 @@ -use std::{collections::HashMap, ops::Range}; - -use crate::{ - loopix::{ - broker::LoopixBroker, - config::{LoopixConfig, LoopixRole}, - messages::LoopixMessage, - storage::LoopixStorage, - }, - network::messages::{NetworkIn, NetworkMessage, NetworkOut}, - nodeconfig::NodeConfig, - overlay::{broker::loopix::OverlayLoopix, messages::OverlayMessage}, - web_proxy::{ - broker::{WebProxy, WebProxyError}, - core::WebProxyConfig, - }, -}; -use flarch::{ - broker::{Broker, BrokerError}, - data_storage::DataStorageTemp, - nodeids::NodeID, - tasks::wait_ms, -}; -use serde::{Deserialize, Serialize}; -use tokio::sync::{ - mpsc::UnboundedReceiver, - oneshot::{channel, Sender}, -}; -use x25519_dalek::{PublicKey, StaticSecret}; - -/** - * Create a LoopixNode with all the necessary configuration for one node. - * It holds the different brokers which can be used from the outside. - * `LoopixNode`s are created by `LoopixSetup` and held there. - */ -#[derive(Clone)] -pub struct LoopixNode { - pub config: NodeConfig, - pub net: Broker, - pub overlay: Broker, - // This one should not be used from the outside. - pub loopix: Broker, -} - -impl LoopixNode { - pub async fn new(loopix_cfg: LoopixConfig) -> Result { - let config = NodeConfig::new(); - let net = Broker::new(); - let overlay = Broker::new(); - Ok(Self { - loopix: LoopixBroker::start(overlay.clone(), net.clone(), loopix_cfg).await?, - config, - net, - overlay, - }) - } -} - -/** - * I'm not sure I understood correctly how the clients, mixers, and providers can be - * created using `LoopixConfig`. I gave it my best shot! - * - * The idea is that `LoopixSetup::new` creates the basic configuration, which is then - * used to set up all the nodes. This is where I'm not sure wrt setting up the different - * types of nodes. - */ -#[derive(Serialize, Deserialize)] -pub struct LoopixSetup { - pub node_public_keys: HashMap, - pub node_key_pairs: HashMap, - pub path_length: u32, - #[serde(skip_serializing, skip_deserializing, default)] - pub clients: Vec, - #[serde(skip_serializing, skip_deserializing, default)] - pub mixers: Vec, - #[serde(skip_serializing, skip_deserializing, default)] - pub providers: Vec, -} - -impl LoopixSetup { - pub async fn new(path_length: u32) -> Result { - // set up network - let mut node_public_keys = HashMap::new(); - let mut node_key_pairs = HashMap::new(); - - for mix in 0..path_length * path_length + path_length + path_length { - let node_id = NodeID::from(mix); - let (public_key, private_key) = LoopixStorage::generate_key_pair(); - node_public_keys.insert(node_id, public_key); - node_key_pairs.insert(node_id, (public_key, private_key)); - } - - let mut setup = Self { - node_public_keys, - node_key_pairs, - path_length, - clients: vec![], - mixers: vec![], - providers: vec![], - }; - - // TODO: correct attribution of NodeIDs to client|mixer|provider - // TODO: using u32 as NodeID is very confusing and will not work in a real setup! - setup.clients = setup.get_nodes(0..path_length, LoopixRole::Client).await?; - setup.providers = setup - .get_nodes(path_length..2 * path_length, LoopixRole::Provider) - .await?; - setup.mixers = setup - .get_nodes(2 * path_length..4 * path_length, LoopixRole::Mixnode) - .await?; - - Ok(setup) - } - - pub async fn get_nodes( - &self, - range: Range, - role: LoopixRole, - ) -> Result, BrokerError> { - let mut ret = vec![]; - for id in range { - ret.push(self.get_node(id, role.clone()).await?); - } - Ok(ret) - } - - pub async fn get_node( - &self, - node_id: u32, - role: LoopixRole, - ) -> Result { - LoopixNode::new(self.get_config(node_id, role).await?).await - } - - pub async fn get_config( - &self, - node_id: u32, - role: LoopixRole, - ) -> Result { - let private_key = &self.node_key_pairs.get(&NodeID::from(node_id)).unwrap().1; - let public_key = &self.node_key_pairs.get(&NodeID::from(node_id)).unwrap().0; - - let config = LoopixConfig::default_with_path_length( - role, - node_id, - self.path_length as usize, - private_key.clone(), - public_key.clone(), - ); - - config - .storage_config - .set_node_public_keys(self.node_public_keys.clone()) - .await; - - Ok(config) - } -} - -/** - * A very simple network simulator which connects different `Broker`s - * together using a `process` method which will handle one message from each broker. - */ -pub struct NetworkSimul { - pub nodes: HashMap, UnboundedReceiver)>, -} - -impl NetworkSimul { - pub fn new() -> Self { - Self { - nodes: HashMap::new(), - } - } - - pub async fn add_nodes(&mut self, nodes: Vec) -> Result<(), BrokerError> { - for mut node in nodes { - self.nodes.insert( - node.config.info.get_id(), - (node.net.clone(), node.net.get_tap().await?.0), - ); - } - Ok(()) - } - - pub fn process(&mut self) -> Result { - let mut msgs = vec![]; - for (&id_tx, (_, rx)) in self.nodes.iter_mut() { - if let Ok(msg) = rx.try_recv() { - if let NetworkMessage::Input(NetworkIn::MessageToNode(id_rx, node_msg)) = msg { - msgs.push((id_tx, id_rx, node_msg)); - } - } - } - - for (id_tx, id_rx, msg) in msgs.iter() { - if let Some((broker, _)) = self.nodes.get_mut(&id_rx) { - // This is for debugging and can be removed - println!("{id_tx}->{id_rx}: {msg}"); - broker.emit_msg(NetworkMessage::Output(NetworkOut::MessageFromNode( - id_tx.clone(), - msg.clone(), - )))?; - } - } - - Ok(msgs.len()) - } - - pub fn process_loop(mut self) -> Sender { - let (tx, mut rx) = channel::(); - tokio::spawn(async move { - // Loop over all messages from the loopix-nodes and pass them between the nodes. - loop { - match self.process() { - Ok(msgs) => { - if msgs == 0 { - // Wait for 100 ms if no messages got passed. - wait_ms(100).await; - } - } - Err(e) => println!("Error while processing network: {e:?}"), - } - if rx.try_recv().is_ok() { - println!("Terminating loop"); - return; - } - } - }); - tx - } -} - -/** - * Once the main Loopix part works, you can try the ProxyBroker. - * `WebProxy` needs the `OverlayOut::NodeInfosConnected` to get - * a list of potential nodes where it can send a request to. - * If this message is never received, it will panic. - */ -pub struct ProxyBroker { - pub id: NodeID, - pub proxy: WebProxy, -} - -impl ProxyBroker { - pub async fn new(loopix: Broker) -> Result { - let ds = DataStorageTemp::new(); - let id = NodeID::rnd(); - Ok(Self { - proxy: WebProxy::start( - Box::new(ds), - id, - OverlayLoopix::start(loopix).await?, - WebProxyConfig::default(), - ) - .await?, - id, - }) - } -} diff --git a/flmodules/src/overlay/README.md b/flmodules/src/overlay/README.md index f699ae15..0264491a 100644 --- a/flmodules/src/overlay/README.md +++ b/flmodules/src/overlay/README.md @@ -4,11 +4,10 @@ Gives an abstraction to allow for different network overlays, e.g., random_conne others. It defines a basic set of messages and a broker, which can then be extended to work with the different network connection modules. -Three overlays are implemented: +Two examples are implemented: - `OverlayRandom` uses the `RandomConnection` broker to handle the network and forwards messages as appropriate - `OverlayDirect` uses the `Network` broker to handle the network. One problem with this is that the `Connected` and `Disconnected` messages from the `Network` broker need to be handled here. -- `OverlayLoopix` to use the `Loopix` broker for a secure connection To implement a new example who has the `Available`, `Connected`, `Disconnected` messages, the simplest way is to copy `OverlayRandom` into a new broker. \ No newline at end of file diff --git a/flmodules/src/overlay/broker/direct.rs b/flmodules/src/overlay/broker.rs similarity index 80% rename from flmodules/src/overlay/broker/direct.rs rename to flmodules/src/overlay/broker.rs index a3eafaa9..719eeafd 100644 --- a/flmodules/src/overlay/broker/direct.rs +++ b/flmodules/src/overlay/broker.rs @@ -4,12 +4,60 @@ use flarch::{ platform_async_trait, }; -use super::super::messages::{OverlayIn, OverlayInternal, OverlayMessage, OverlayOut}; +use super::messages::{OverlayIn, OverlayInternal, OverlayMessage, OverlayOut}; use crate::{ network::messages::{NetworkIn, NetworkMessage, NetworkOut}, nodeconfig::NodeInfo, + random_connections::messages::{RandomIn, RandomMessage, RandomOut}, }; +pub struct OverlayRandom {} + +impl OverlayRandom { + pub async fn start( + random: Broker, + ) -> Result, BrokerError> { + let mut b = Broker::new(); + // Translate RandomOut to OverlayOut, and OverlayIn to RandomIn. + // A module connected to the Broker will get translations of the + // RandomOut messages, and can send messages to RandomIn using the Overlay. + b.link_bi( + random, + Box::new(|msg| { + if let RandomMessage::Output(out) = msg { + let ret = match out { + RandomOut::NodeIDsConnected(node_ids) => { + OverlayOut::NodeIDsConnected(node_ids) + } + RandomOut::NodeInfosConnected(infos) => { + OverlayOut::NodeInfosConnected(infos) + } + RandomOut::NetworkWrapperFromNetwork(id, module_message) => { + OverlayOut::NetworkWrapperFromNetwork(id, module_message) + } + _ => return None, + }; + return Some(ret.into()); + } + None + }), + Box::new(|msg| { + if let OverlayMessage::Input(input) = msg { + let ret = match input { + OverlayIn::NetworkWrapperToNetwork(id, module_message) => { + RandomIn::NetworkMapperToNetwork(id, module_message) + } + }; + return Some(RandomMessage::Input(ret)); + } + None + }), + ) + .await?; + Ok(b) + } +} + /** * Connects directly to the Network broker. * Because the Network broker only delivers 'Connected' and 'Disconnected' diff --git a/flmodules/src/overlay/broker/loopix.rs b/flmodules/src/overlay/broker/loopix.rs deleted file mode 100644 index 2bf410a0..00000000 --- a/flmodules/src/overlay/broker/loopix.rs +++ /dev/null @@ -1,91 +0,0 @@ -use flarch::broker::{Broker, BrokerError}; - -use crate::loopix::messages::{LoopixIn, LoopixMessage, LoopixOut}; - -use super::super::messages::{OverlayIn, OverlayMessage, OverlayOut}; - -/** - * This uses the Loopix-module to offer an anonymous and privacy-preserving - * communication through the nodes. - */ -pub struct OverlayLoopix { - pub broker: Broker, -} - -impl OverlayLoopix { - pub async fn start( - loopix: Broker, - ) -> Result, BrokerError> { - let mut broker = Broker::new(); - - broker - .link_bi( - loopix.clone(), - Box::new(Self::from_loopix), - Box::new(Self::to_loopix), - ) - .await?; - - Ok(broker) - } - - fn from_loopix(msg: LoopixMessage) -> Option { - if let LoopixMessage::Output(out) = msg { - let ret = match out { - LoopixOut::NodeIDsConnected(node_ids) => OverlayOut::NodeIDsConnected(node_ids), - LoopixOut::NodeInfosConnected(infos) => OverlayOut::NodeInfosConnected(infos), - LoopixOut::NodeInfoAvailable(availables) => { - OverlayOut::NodeInfoAvailable(availables) - } - LoopixOut::OverlayReply(node_id, module_msg) => { - OverlayOut::NetworkWrapperFromNetwork(node_id, module_msg) - } - _ => return None, - }; - return Some(ret.into()); - } - None - } - - fn to_loopix(msg: OverlayMessage) -> Option { - if let OverlayMessage::Input(input) = msg { - match input { - OverlayIn::NetworkWrapperToNetwork(node_id, wrapper) => { - return Some(LoopixIn::OverlayRequest(node_id, wrapper).into()); - } - } - } - None - } -} - -#[cfg(test)] -mod test { - use flarch::nodeids::NodeID; - - use crate::nodeconfig::NodeInfo; - - use super::*; - - fn _check_msgs(msgs: Vec, available: &[NodeInfo], connected: &[NodeInfo]) { - assert_eq!(3, msgs.len()); - assert_eq!( - OverlayMessage::Output(OverlayOut::NodeInfoAvailable(available.to_vec())), - msgs[0] - ); - assert_eq!( - OverlayMessage::Output(OverlayOut::NodeIDsConnected( - connected - .iter() - .map(|info| info.get_id()) - .collect::>() - .into() - )), - msgs[1] - ); - assert_eq!( - OverlayMessage::Output(OverlayOut::NodeInfosConnected(connected.to_vec())), - msgs[2] - ); - } -} diff --git a/flmodules/src/overlay/broker/mod.rs b/flmodules/src/overlay/broker/mod.rs deleted file mode 100644 index 28763ba0..00000000 --- a/flmodules/src/overlay/broker/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod random; -pub mod direct; -pub mod loopix; \ No newline at end of file diff --git a/flmodules/src/overlay/broker/random.rs b/flmodules/src/overlay/broker/random.rs deleted file mode 100644 index 8a15bb71..00000000 --- a/flmodules/src/overlay/broker/random.rs +++ /dev/null @@ -1,51 +0,0 @@ -use flarch::broker::{Broker, BrokerError}; - -use super::super::messages::{OverlayIn, OverlayMessage, OverlayOut}; -use crate::random_connections::messages::{RandomIn, RandomMessage, RandomOut}; - -pub struct OverlayRandom {} - -impl OverlayRandom { - pub async fn start( - random: Broker, - ) -> Result, BrokerError> { - let mut b = Broker::new(); - // Translate RandomOut to OverlayOut, and OverlayIn to RandomIn. - // A module connected to the Broker will get translations of the - // RandomOut messages, and can send messages to RandomIn using the Overlay. - b.link_bi( - random, - Box::new(|msg| { - if let RandomMessage::Output(out) = msg { - let ret = match out { - RandomOut::NodeIDsConnected(node_ids) => { - OverlayOut::NodeIDsConnected(node_ids) - } - RandomOut::NodeInfosConnected(infos) => { - OverlayOut::NodeInfosConnected(infos) - } - RandomOut::NetworkWrapperFromNetwork(id, module_message) => { - OverlayOut::NetworkWrapperFromNetwork(id, module_message) - } - _ => return None, - }; - return Some(ret.into()); - } - None - }), - Box::new(|msg| { - if let OverlayMessage::Input(input) = msg { - let ret = match input { - OverlayIn::NetworkWrapperToNetwork(id, module_message) => { - RandomIn::NetworkWrapperToNetwork(id, module_message) - } - }; - return Some(RandomMessage::Input(ret)); - } - None - }), - ) - .await?; - Ok(b) - } -} diff --git a/flmodules/src/ping/broker.rs b/flmodules/src/ping/broker.rs index 058d0b1f..9d68a9d6 100644 --- a/flmodules/src/ping/broker.rs +++ b/flmodules/src/ping/broker.rs @@ -105,7 +105,7 @@ impl Translate { if let PingMessage::Output(msg_out) = msg { match msg_out { PingOut::ToNetwork(id, msg_node) => Some( - RandomIn::NetworkWrapperToNetwork( + RandomIn::NetworkMapperToNetwork( id, NetworkWrapper::wrap_yaml(MODULE_NAME, &msg_node).unwrap(), ) diff --git a/flmodules/src/random_connections/messages.rs b/flmodules/src/random_connections/messages.rs index 5ff200a2..78554d0f 100644 --- a/flmodules/src/random_connections/messages.rs +++ b/flmodules/src/random_connections/messages.rs @@ -26,7 +26,7 @@ pub enum RandomIn { NodeConnected(NodeID), NodeDisconnected(NodeID), NodeCommFromNetwork(NodeID, ModuleMessage), - NetworkWrapperToNetwork(NodeID, NetworkWrapper), + NetworkMapperToNetwork(NodeID, NetworkWrapper), Tick, } @@ -95,7 +95,7 @@ impl RandomConnections { ]) } RandomIn::NodeCommFromNetwork(id, node_msg) => self.network_msg(id, node_msg), - RandomIn::NetworkWrapperToNetwork(dst, msg) => { + RandomIn::NetworkMapperToNetwork(dst, msg) => { if self.storage.connected.contains(&dst) { vec![RandomOut::NodeCommToNetwork( dst, diff --git a/flmodules/src/template/broker.rs b/flmodules/src/template/broker.rs index 9cbecc04..1e384435 100644 --- a/flmodules/src/template/broker.rs +++ b/flmodules/src/template/broker.rs @@ -119,7 +119,7 @@ impl Translate { fn link_template_rnd(msg: TemplateMessage) -> Option { if let TemplateMessage::Output(TemplateOut::ToNetwork(id, msg_node)) = msg { Some( - RandomIn::NetworkWrapperToNetwork( + RandomIn::NetworkMapperToNetwork( id, NetworkWrapper::wrap_yaml(MODULE_NAME, &msg_node).unwrap(), ) diff --git a/flmodules/tests/README.md b/flmodules/tests/README.md deleted file mode 100644 index 28e2b23c..00000000 --- a/flmodules/tests/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Tests of modules - -## Loopix - -This is a simple test which sets up: -- a node with a web-proxy for starting the request -- a node with the web-proxy to receive the request and send it to the internet -- a list of loopix nodes in between - -You can run it with: - -```bash -cargo test --test loopix -- --nocapture -``` - -Once everything is set up, it should print the content of the fledg.re webpage. \ No newline at end of file diff --git a/flmodules/tests/loopix.rs b/flmodules/tests/loopix.rs deleted file mode 100644 index dd4e9ab7..00000000 --- a/flmodules/tests/loopix.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::error::Error; - -#[cfg(test)] -use flmodules::{ - loopix::testing::{LoopixSetup, NetworkSimul, ProxyBroker}, - overlay::messages::{NetworkWrapper, OverlayIn, OverlayMessage}, -}; -use serde::{Deserialize, Serialize}; - -/** - * This test sets up a number of Loopix nodes: clients, mixers, and providers. - * You can either let it use the proxies or send a simple message through Loopix. - * Start with the simple message! - * - * Some comments about the Loopix-implementation: - * - it is not clear to me how the NodeID as u32 maps to different clients, mixers, - * and providers. Also, this will fail in the current implementation, as it uses - * NodeIDs provided by the system which will not follow your numbering schema. - * So you need to change the `LoopixConfig` to allow for random NodeIDs. - * - for the same reason, passing NodeID as u32 to `default_with_path_length` - * is a very bad idea, as the real system will use random NodeIDs. - * - I realize now that the setup of the brokers is really confusing - so I take some - * blame for your `LoopixBroker::start`. And it also shows that you had trouble - * implementing the `LoopixTranslate`... What you should do is to remove the - * `overlay: Broker` from the `start` method. This broker is provided - * by the `OverlayLoopix::start` method, which takes in the `Broker`. - * Happy to discuss this asynchronously over slack... - */ -#[tokio::test] -async fn test_loopix() -> Result<(), Box> { - let mut loopix_setup = LoopixSetup::new(2).await?; - let mut network = NetworkSimul::new(); - network.add_nodes(loopix_setup.clients.clone()).await?; - network.add_nodes(loopix_setup.mixers.clone()).await?; - network.add_nodes(loopix_setup.providers.clone()).await?; - let stop = network.process_loop(); - - // I wouldn't start with the proxy :) - if false { - let mut proxy_src = ProxyBroker::new(loopix_setup.clients[0].loopix.clone()).await?; - let proxy_dst = ProxyBroker::new(loopix_setup.providers[0].loopix.clone()).await?; - - proxy_src.proxy.get("https://fledg.re").await?; - println!("Ids for proxies: ${} / ${}", proxy_src.id, proxy_dst.id); - } - - if true { - // Send a message from a client node to a provider: - let id_dst = loopix_setup.providers[0].config.info.get_id(); - loopix_setup.clients[0] - .overlay - .emit_msg(OverlayMessage::Input(OverlayIn::NetworkWrapperToNetwork( - id_dst, - NetworkWrapper::wrap_yaml( - "Test", - &TestMessage { - field: "secret message".into(), - }, - )?, - )))?; - // Do something to look if the message arrived - assert!(false); - } - - // Quit the tokio-thread - stop.send(true).ok(); - Ok(()) -} - -/** - * Random message to be sent from a client to a provider. - */ -#[derive(Debug, Serialize, Deserialize)] -struct TestMessage { - field: String, -} diff --git a/flnode/Cargo.lock b/flnode/Cargo.lock index c6b88102..2ed5f5ce 100644 --- a/flnode/Cargo.lock +++ b/flnode/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -49,7 +49,7 @@ dependencies = [ "cipher", "ctr", "ghash", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -131,12 +131,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "asn1-rs" version = "0.5.2" @@ -328,25 +322,13 @@ dependencies = [ "serde", ] -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -355,16 +337,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", + "generic-array", ] [[package]] @@ -373,12 +346,6 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "byteorder" version = "1.5.0" @@ -421,7 +388,7 @@ dependencies = [ "aead", "cipher", "ctr", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -430,16 +397,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - [[package]] name = "chrono" version = "0.4.38" @@ -471,15 +428,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -536,21 +484,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "crypto-bigint" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -560,21 +502,11 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "ct-codecs" version = "1.1.2" @@ -601,8 +533,7 @@ dependencies = [ "curve25519-dalek-derive", "fiat-crypto", "rustc_version", - "serde", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -706,15 +637,6 @@ dependencies = [ "serde", ] -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.10.7" @@ -724,7 +646,7 @@ dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -745,7 +667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", @@ -776,16 +698,16 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", - "generic-array 0.14.7", + "generic-array", "group", "hkdf", "pem-rfc7468", "pkcs8", "rand_core", "sec1", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -825,7 +747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -879,20 +801,16 @@ dependencies = [ "async-stream", "async-trait", "bimap", - "bincode", "bitflags 2.6.0", "bytes", - "concurrent-queue", "ed25519-compact", "flarch", "futures", "getrandom", - "hex", "itertools", "log", "names", "rand", - "rand_distr", "reqwest", "serde", "serde_derive", @@ -900,12 +818,10 @@ dependencies = [ "serde_with", "serde_yaml", "sha2", - "sphinx-packet", "thiserror", "tokio", "tokio-stream", "toml", - "x25519-dalek", ] [[package]] @@ -1038,15 +954,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1077,7 +984,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "opaque-debug 0.3.1", + "opaque-debug", "polyval", ] @@ -1095,7 +1002,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -1137,7 +1044,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1311,7 +1218,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -1370,12 +1277,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "lazy_static" version = "1.5.0" @@ -1388,30 +1289,12 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" -[[package]] -name = "libm" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2", - "chacha", - "keystream", -] - [[package]] name = "lock_api" version = "0.4.12" @@ -1435,7 +1318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -1560,7 +1443,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1587,12 +1469,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - [[package]] name = "opaque-debug" version = "0.3.1" @@ -1727,7 +1603,7 @@ checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug", "universal-hash", ] @@ -1857,16 +1733,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - [[package]] name = "rcgen" version = "0.13.1" @@ -1970,7 +1836,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -2053,7 +1919,7 @@ dependencies = [ "ring", "rustls-pki-types", "rustls-webpki", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2153,9 +2019,9 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array", "pkcs8", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2302,7 +2168,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2313,7 +2179,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2328,7 +2194,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core", ] @@ -2366,31 +2232,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "sphinx-packet" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0df8390239119e76d4f60a6b06900351ee971d78868fc4cfef18301728ad" -dependencies = [ - "aes", - "arrayref", - "blake2", - "bs58", - "byteorder", - "chacha", - "ctr", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "log", - "rand", - "rand_distr", - "sha2", - "subtle 2.6.1", - "x25519-dalek", -] - [[package]] name = "spin" version = "0.9.8" @@ -2425,7 +2266,7 @@ dependencies = [ "md-5", "rand", "ring", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "url", @@ -2441,12 +2282,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.6.1" @@ -2819,7 +2654,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -3129,7 +2964,7 @@ dependencies = [ "serde", "sha1", "sha2", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", @@ -3223,7 +3058,7 @@ dependencies = [ "rtcp", "rtp", "sha1", - "subtle 2.6.1", + "subtle", "thiserror", "tokio", "webrtc-util", diff --git a/flnode/Cargo.toml b/flnode/Cargo.toml index e336893f..0e81508f 100644 --- a/flnode/Cargo.toml +++ b/flnode/Cargo.toml @@ -37,5 +37,3 @@ tokio = "1" [dev-dependencies] env_logger = "0.11" -flmodules = {path = "../flmodules", version = "0.8", features = ["testing"]} - diff --git a/flnode/src/node.rs b/flnode/src/node.rs index 2f2edcd4..7c9d8c4d 100644 --- a/flnode/src/node.rs +++ b/flnode/src/node.rs @@ -15,19 +15,10 @@ use flmodules::{ broker::GossipBroker, core::{self, Category, Event}, messages::{GossipIn, GossipMessage}, - }, - loopix::messages::LoopixMessage, - network::messages::{NetworkError, NetworkIn, NetworkMessage}, - nodeconfig::{ConfigError, NodeConfig, NodeInfo}, - overlay::broker::{direct::OverlayDirect, random::OverlayRandom}, - ping::{broker::PingBroker, messages::PingConfig}, - random_connections::broker::RandomBroker, - timer::{TimerBroker, TimerMessage}, - web_proxy::{ + }, network::messages::{NetworkError, NetworkIn, NetworkMessage}, nodeconfig::{ConfigError, NodeConfig, NodeInfo}, overlay::broker::OverlayRandom, ping::{broker::PingBroker, messages::PingConfig}, random_connections::broker::RandomBroker, timer::{TimerBroker, TimerMessage}, web_proxy::{ broker::{WebProxy, WebProxyError}, core::WebProxyConfig, - }, - Modules, + }, Modules }; use crate::stat::StatBroker; @@ -72,8 +63,6 @@ pub struct Node { pub ping: Option, /// Answers GET requests from another node pub webproxy: Option, - /// Create a mix-network for anonymous communication - pub loopix: Option>, } const STORAGE_GOSSIP_EVENTS: &str = "gossip_events"; @@ -100,8 +89,7 @@ impl Node { let mut random = None; let mut gossip = None; let mut ping = None; - let loopix = None; - let mut overlay = OverlayDirect::start(broker_net.clone()).await?; + let mut webproxy = None; if modules.contains(Modules::ENABLE_RAND) { let rnd = RandomBroker::start(id, broker_net.clone()).await?; if modules.contains(Modules::ENABLE_GOSSIP) { @@ -116,27 +104,19 @@ impl Node { if modules.contains(Modules::ENABLE_PING) { ping = Some(PingBroker::start(PingConfig::default(), rnd.broker.clone()).await?); } - overlay = OverlayRandom::start(rnd.broker.clone()).await?; + if modules.contains(Modules::ENABLE_WEBPROXY) { + webproxy = Some( + WebProxy::start( + storage.clone(), + id, + OverlayRandom::start(rnd.broker.clone()).await?, + WebProxyConfig::default(), + ) + .await?, + ); + } random = Some(rnd); } - // This needs the `config`, which is not availble yet. - // if modules.contains(Modules::ENABLE_LOOPIX) { - // loopix = Some(LoopixBroker::start(Broker::new(), broker_net.clone(), config).await?); - // overlay = OverlayLoopix::start(loopix.unwrap().clone()).await?; - // } - let webproxy = if modules.contains(Modules::ENABLE_WEBPROXY) { - Some( - WebProxy::start( - storage.clone(), - id, - overlay.clone(), - WebProxyConfig::default(), - ) - .await?, - ) - } else { - None - }; let stat = if modules.contains(Modules::ENABLE_STAT) { Some(StatBroker::start(broker_net.clone()).await?) } else { @@ -152,7 +132,6 @@ impl Node { gossip, ping, webproxy, - loopix, }; node.add_timer(TimerBroker::start().await?).await; Ok(node) diff --git a/flnode/tests/loopix.rs b/flnode/tests/loopix.rs deleted file mode 100644 index 097787f9..00000000 --- a/flnode/tests/loopix.rs +++ /dev/null @@ -1,84 +0,0 @@ -use std::error::Error; - -use flarch::{broker::Broker, start_logging, tasks::now}; -mod helpers; -use flmodules::{ - gossip_events::core::{Category, Event}, - loopix::{broker::LoopixBroker, testing::LoopixSetup}, - Modules, -}; -use helpers::*; - -/** - * A more realistic test using the real nodes. - * 1. it sets up the nodes without loopix - * 2. one node creates a configuration for all the nodes (including the private - * keys...) - * 3. this node puts the configuration in the gossip-module - * 4. once all nodes got the configuration, every node initializes its - * loopix-module with the received configuraion. - */ -async fn proxy_nodes_n(path_length: usize) -> Result<(), Box> { - // Setting up nodes with randon IDs. - let nbr_nodes = path_length * (path_length + 2); - let mut net = NetworkSimul::new(); - log::info!("Creating {nbr_nodes} nodes"); - net.add_nodes(Modules::all(), nbr_nodes).await?; - net.process(5).await; - log::info!("Sent a total of {} messages", net.messages); - - // Create the global configuration and propagate it with the gossip-module. - let loopix_setup = LoopixSetup::new(2).await?; - if let Some((k, v)) = net.nodes.iter_mut().next() { - if let Some(g) = v.node.gossip.as_mut() { - let event = Event { - category: Category::TextMessage, - src: *k, - created: now(), - msg: serde_yaml::to_string(&loopix_setup)?, - }; - g.add_event(event).await?; - } - } - // Run the network until all messages are propagated. - net.process(2 * path_length).await; - - // Suppose every node has the configuration now and can initialize its loopix - // module. - for (_id, v) in net.nodes.iter_mut() { - let setup: LoopixSetup = serde_yaml::from_str( - &v.node - .gossip - .as_ref() - .unwrap() - .events(Category::TextMessage) - .first() - .unwrap() - .msg, - )?; - // This is my configuration-wrapper. Of course the nodes should have a way to get their role. - // The role choice could be done in step 2 where one node creates the global configuration. - let config = setup - .get_config(0, flmodules::loopix::config::LoopixRole::Client) - .await?; - v.node.loopix = - Some(LoopixBroker::start(Broker::new(), v.node.broker_net.clone(), config).await?); - } - - // Now do some webProxy stuff while the network runs. - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[tokio::test] - async fn connect_nodes() -> Result<(), Box> { - start_logging(); - - proxy_nodes_n(4).await?; - Ok(()) - } -}