diff --git a/windSend-rs/Cargo.lock b/windSend-rs/Cargo.lock index 9773ef2ba..361231135 100644 --- a/windSend-rs/Cargo.lock +++ b/windSend-rs/Cargo.lock @@ -216,6 +216,9 @@ dependencies = [ "serde", "serde_repr", "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", "zbus", ] @@ -755,15 +758,16 @@ dependencies = [ [[package]] name = "clipboard-rs" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afede46921767868c5c7f8f55202bdd8bec0bab6bc9605174200f45924f93c62" +checksum = "c4320896621317ada426b440ebb0534c6234d2da9714ac05ae604ea7e2ddc3a5" dependencies = [ "clipboard-win", "image", "objc2 0.6.1", "objc2-app-kit 0.3.1", "objc2-foundation 0.3.1", + "objc2-ui-kit 0.3.1", "windows 0.59.0", "x11rb", ] @@ -1037,9 +1041,9 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "cdebdcbeb8f27a33dd326d0c6382a475a838abbb306bfd573b79d5e39be7afd3" dependencies = [ "cfg-if", "cpufeatures", @@ -1108,18 +1112,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "dispatch2" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" -dependencies = [ - "bitflags 2.9.0", - "block2 0.6.1", - "libc", - "objc2 0.6.1", -] - [[package]] name = "dispatch2" version = "0.3.0" @@ -1127,6 +1119,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ "bitflags 2.9.0", + "block2 0.6.1", + "libc", "objc2 0.6.1", ] @@ -1381,9 +1375,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "field-offset" @@ -2054,22 +2048,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.5.10", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -2305,12 +2305,33 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.0", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "itertools" version = "0.12.1" @@ -2940,7 +2961,7 @@ dependencies = [ "bitflags 2.9.0", "block2 0.5.1", "objc2 0.5.2", - "objc2-core-location", + "objc2-core-location 0.2.2", "objc2-foundation 0.2.2", ] @@ -2996,7 +3017,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags 2.9.0", - "dispatch2 0.3.0", + "dispatch2", "objc2 0.6.1", ] @@ -3007,7 +3028,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ "bitflags 2.9.0", - "dispatch2 0.3.0", + "dispatch2", "objc2 0.6.1", "objc2-core-foundation", "objc2-io-surface", @@ -3047,6 +3068,16 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-location" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac0f75792558aa9d618443bbb5db7426a7a0b6fddf96903f86ef9ad02e135740" +dependencies = [ + "objc2 0.6.1", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -3135,6 +3166,7 @@ checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" dependencies = [ "bitflags 2.9.0", "objc2 0.6.1", + "objc2-core-foundation", "objc2-foundation 0.3.1", ] @@ -3160,13 +3192,33 @@ dependencies = [ "objc2-cloud-kit 0.2.2", "objc2-core-data 0.2.2", "objc2-core-image 0.2.2", - "objc2-core-location", + "objc2-core-location 0.2.2", "objc2-foundation 0.2.2", "objc2-link-presentation", "objc2-quartz-core 0.2.2", "objc2-symbols", "objc2-uniform-type-identifiers", - "objc2-user-notifications", + "objc2-user-notifications 0.2.2", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" +dependencies = [ + "bitflags 2.9.0", + "block2 0.6.1", + "objc2 0.6.1", + "objc2-cloud-kit 0.3.1", + "objc2-core-data 0.3.1", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image 0.3.1", + "objc2-core-location 0.3.1", + "objc2-foundation 0.3.1", + "objc2-quartz-core 0.3.1", + "objc2-user-notifications 0.3.1", ] [[package]] @@ -3189,10 +3241,20 @@ dependencies = [ "bitflags 2.9.0", "block2 0.5.1", "objc2 0.5.2", - "objc2-core-location", + "objc2-core-location 0.2.2", "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-user-notifications" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3f5ec77a81d9e0c5a0b32159b0cb143d7086165e79708351e02bf37dfc65cd" +dependencies = [ + "objc2 0.6.1", + "objc2-foundation 0.3.1", +] + [[package]] name = "object" version = "0.36.7" @@ -3216,9 +3278,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ "bitflags 2.9.0", "cfg-if", @@ -3257,9 +3319,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.107" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -3806,9 +3868,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.13.2" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +checksum = "49bc8ffa8a832eb1d7c8000337f8b0d2f4f2f5ec3cf4ddc26f125e3ad2451824" dependencies = [ "pem", "ring", @@ -3892,9 +3954,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" dependencies = [ "base64", "bytes", @@ -3911,41 +3973,38 @@ dependencies = [ "hyper-rustls", "hyper-tls", "hyper-util", - "ipnet", "js-sys", "log", "mime", "mime_guess", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", "tokio-native-tls", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-registry", ] [[package]] name = "rfd" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", "block2 0.6.1", - "dispatch2 0.2.0", + "dispatch2", "js-sys", "log", "objc2 0.6.1", @@ -4340,6 +4399,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4660,18 +4729,20 @@ dependencies = [ [[package]] name = "tokio" -version = "1.45.1" +version = "1.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "slab", + "socket2 0.5.10", "tokio-macros", "windows-sys 0.52.0", ] @@ -4791,6 +4862,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -5366,7 +5455,7 @@ dependencies = [ "openssl", "pbkdf2", "pem", - "rand 0.8.5", + "rand 0.9.1", "rcgen", "regex", "reqwest", @@ -5376,7 +5465,7 @@ dependencies = [ "serde_json", "serde_yaml", "sha2", - "socket2", + "socket2 0.6.0", "subslice", "tao", "thiserror 2.0.12", @@ -5514,13 +5603,13 @@ dependencies = [ [[package]] name = "windows-registry" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "ad1da3e436dc7653dfdf3da67332e22bff09bb0e28b0239e1624499c7830842e" dependencies = [ + "windows-link", "windows-result", - "windows-strings 0.3.1", - "windows-targets 0.53.0", + "windows-strings 0.4.0", ] [[package]] @@ -5873,7 +5962,7 @@ dependencies = [ "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", - "objc2-ui-kit", + "objc2-ui-kit 0.2.2", "orbclient", "percent-encoding", "pin-project", @@ -6011,12 +6100,12 @@ checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "d2a76f35d0d6fa96ffc48330f09dc230cd6bdc118b0fce43c25085ced5d72c6b" dependencies = [ "curve25519-dalek", - "rand_core 0.6.4", + "rand_core 0.9.3", "serde", "zeroize", ] @@ -6233,20 +6322,6 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] [[package]] name = "zerovec" diff --git a/windSend-rs/Cargo.toml b/windSend-rs/Cargo.toml index ae89d7deb..5b01fa922 100644 --- a/windSend-rs/Cargo.toml +++ b/windSend-rs/Cargo.toml @@ -15,10 +15,10 @@ disable-systray-support = [] log = "0.4" aes = "0.8.3" hex = "0.4.3" -tokio = { version = "1.45", features = ["full"] } +tokio = { version = "1.46", features = ["full"] } # x25519 依赖rand v0.8 -rand = "0.8" -x25519-dalek = "2.0" +rand = "0.9" +x25519-dalek = { version = "3.0.0-pre.0", features = ["os_rng"] } pbkdf2 = "0.12" image = "0.25" crossbeam-channel = "0.5" @@ -27,7 +27,7 @@ serde_json = "1.0" serde_yaml = "0.9" # 依赖ring v0.16.20导致aarch64-windows编译失败 # x509-parser升级到0.16.0即可解决 -rcgen = { version = "0.13", features = ["pem"] } +rcgen = { version = "0.14", features = ["pem"] } pem = { version = "3" } time = { version = "0.3", features = ["macros", "local-offset"] } lazy_static = "1.4" @@ -64,8 +64,8 @@ rustls-pemfile = "2.2" tokio-rustls = "0.26" hostname = "0.4" walkdir = "2.4" -socket2 = { features = ["all"], version = "0.5" } -clipboard-rs = "0.2.4" +socket2 = { features = ["all"], version = "0.6" } +clipboard-rs = "0.3.0" dirs = "6.0" base64 = "0.22" aes-gcm = "0.10.3" # Or latest version diff --git a/windSend-rs/src/relay/main.rs b/windSend-rs/src/relay/main.rs index 144bdda3f..0ab3ef489 100644 --- a/windSend-rs/src/relay/main.rs +++ b/windSend-rs/src/relay/main.rs @@ -95,11 +95,10 @@ async fn handshake( use crate::relay::protocol::{HandshakeResp, StatusCode}; use crate::utils::encrypt; use base64::prelude::*; - use rand::rngs::OsRng; use tracing::{debug, error}; use x25519_dalek::{EphemeralSecret, PublicKey}; - let secret = EphemeralSecret::random_from_rng(OsRng); + let secret = EphemeralSecret::random(); let public = PublicKey::from(&secret); let mut handshake_cipher = match write_handshake_req(conn, public).await { diff --git a/windSend-rs/src/utils/encrypt.rs b/windSend-rs/src/utils/encrypt.rs index dbe1f240c..843349f87 100644 --- a/windSend-rs/src/utils/encrypt.rs +++ b/windSend-rs/src/utils/encrypt.rs @@ -12,36 +12,34 @@ pub fn rand_n_bytes(rng: &mut rand::rngs::ThreadRng, n: usize) -> Vec { bytes } -// rand v0.9 -// pub fn rand_n_bytes2(n: usize) -> Vec { -// use rand::rng; -// let mut bytes = vec![0u8; n]; -// rng().fill_bytes(&mut bytes); -// bytes -// } - -// rand v0.9 -// pub fn generate_rand_bytes_hex(byte_len: usize) -> String { -// use rand::rng; -// let mut rng = rng(); -// let bytes = rand_n_bytes(&mut rng, byte_len); -// hex::encode(bytes) -// } - pub fn rand_n_bytes2(n: usize) -> Vec { - use rand::thread_rng; + use rand::rng; let mut bytes = vec![0u8; n]; - thread_rng().fill_bytes(&mut bytes); + rng().fill_bytes(&mut bytes); bytes } pub fn generate_rand_bytes_hex(byte_len: usize) -> String { - use rand::thread_rng; - let mut rng = thread_rng(); + use rand::rng; + let mut rng = rng(); let bytes = rand_n_bytes(&mut rng, byte_len); hex::encode(bytes) } +// pub fn rand_n_bytes2(n: usize) -> Vec { +// use rand::thread_rng; +// let mut bytes = vec![0u8; n]; +// thread_rng().fill_bytes(&mut bytes); +// bytes +// } + +// pub fn generate_rand_bytes_hex(byte_len: usize) -> String { +// use rand::thread_rng; +// let mut rng = thread_rng(); +// let bytes = rand_n_bytes(&mut rng, byte_len); +// hex::encode(bytes) +// } + #[allow(dead_code)] pub fn compute_sha256(bytes: &[u8]) -> [u8; 32] { let mut hasher = sha2::Sha256::new(); diff --git a/windSend-rs/src/utils/tls.rs b/windSend-rs/src/utils/tls.rs index 539686950..34a274ee5 100644 --- a/windSend-rs/src/utils/tls.rs +++ b/windSend-rs/src/utils/tls.rs @@ -27,12 +27,12 @@ pub fn generate_signed_certificate( ]; params.is_ca = IsCa::Ca(BasicConstraints::Unconstrained); params.subject_alt_names = vec![ - SanType::DnsName(rcgen::Ia5String::from_str("localhost")?), + SanType::DnsName(rcgen::string::Ia5String::from_str("localhost")?), SanType::IpAddress(std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))), SanType::IpAddress(std::net::IpAddr::V6(std::net::Ipv6Addr::new( 0, 0, 0, 0, 0, 0, 0, 1, ))), - SanType::DnsName(rcgen::Ia5String::from_str("fake.windsend.com")?), + SanType::DnsName(rcgen::string::Ia5String::from_str("fake.windsend.com")?), // SanType::IpAddress(std::net::IpAddr::V4(std::net::Ipv4Addr::new( // 192, 168, 1, 7, // ))), @@ -50,7 +50,10 @@ pub fn generate_signed_certificate( // params.alg = &rcgen::PKCS_ECDSA_P256_SHA256; let key_pair = rcgen::KeyPair::generate()?; - Ok((params.signed_by(&key_pair, issuer, issuer_key)?, key_pair)) + + let issuer_ca_param = &rcgen::CertificateParams::new(vec![issuer.pem()]).unwrap(); + let issuer = rcgen::Issuer::from_params(issuer_ca_param, issuer_key); + Ok((params.signed_by(&key_pair, &issuer)?, key_pair)) } pub fn generate_self_signed_ca_certificate() @@ -69,7 +72,7 @@ pub fn generate_self_signed_ca_certificate() ]; params.is_ca = IsCa::Ca(BasicConstraints::Unconstrained); params.subject_alt_names = vec![ - SanType::DnsName(rcgen::Ia5String::from_str("localhost")?), + SanType::DnsName(rcgen::string::Ia5String::from_str("localhost")?), SanType::IpAddress(std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))), SanType::IpAddress(std::net::IpAddr::V6(std::net::Ipv6Addr::new( 0, 0, 0, 0, 0, 0, 0, 1,