clients::rdp connects over any caller-dialled TCP stream (direct, proxy or SSH tunnel), upgrades to TLS and logs on with NLA (CredSSP/NTLM), optionally falling back to TLS-only logon for servers without NLA such as xrdp (credentials are passed so they log straight in). The server certificate is pinned through a caller check on its SHA256 fingerprint before any credentials are sent. The desktop decodes into the VNC client's RGBA framebuffer; input (IronRDP's scancode/Unicode/mouse operations), Display Control resizes and the deactivation-reactivation sequence run on the session thread. IronRDP's releases need three vendored patches (vendor/README.md): picky and sspi with their RustCrypto release-candidate pins relaxed so they share russh's stable versions (their own suites, 402 tests, pass against them), and ironrdp-session with two unreleased upstream bitmap fixes (#1486 stride, #1524 RDP6 orientation) without which xrdp desktops render sheared. Verified live against xrdp (scottyhardy/docker-remote-desktop): logon, full desktop rendering, keyboard and mouse input.
444 lines
8.7 KiB
TOML
444 lines
8.7 KiB
TOML
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
|
#
|
|
# When uploading crates to the registry Cargo will automatically
|
|
# "normalize" Cargo.toml files for maximal compatibility
|
|
# with all versions of Cargo and also rewrite `path` dependencies
|
|
# to registry (e.g., crates.io) dependencies.
|
|
#
|
|
# If you are reading this file be aware that the original Cargo.toml
|
|
# will likely look very different (and much more reasonable).
|
|
# See Cargo.toml.orig for the original contents.
|
|
|
|
[package]
|
|
edition = "2024"
|
|
rust-version = "1.89"
|
|
name = "sspi"
|
|
version = "0.21.3"
|
|
authors = ["Devolutions Inc. <infos@devolutions.net>"]
|
|
build = false
|
|
autolib = false
|
|
autobins = false
|
|
autoexamples = false
|
|
autotests = false
|
|
autobenches = false
|
|
description = "A Rust implementation of the Security Support Provider Interface (SSPI) API"
|
|
homepage = "https://github.com/devolutions/sspi-rs"
|
|
readme = "README.md"
|
|
keywords = [
|
|
"ntlm",
|
|
"auth",
|
|
"sspi",
|
|
"windows",
|
|
"kerberos",
|
|
]
|
|
license = "MIT OR Apache-2.0"
|
|
repository = "https://github.com/devolutions/sspi-rs"
|
|
resolver = "2"
|
|
|
|
[features]
|
|
__install-crypto-provider = []
|
|
__rustls-used = ["dep:rustls"]
|
|
__test-data = []
|
|
aws-lc-rs = [
|
|
"rustls?/aws-lc-rs",
|
|
"__install-crypto-provider",
|
|
]
|
|
default = ["aws-lc-rs"]
|
|
dns_resolver = [
|
|
"dep:hickory-resolver",
|
|
"dep:hickory-proto",
|
|
"dep:tokio",
|
|
]
|
|
network_client = [
|
|
"dep:reqwest",
|
|
"dep:portpicker",
|
|
"dep:rustls-native-certs",
|
|
"__rustls-used",
|
|
]
|
|
ring = [
|
|
"rustls?/ring",
|
|
"reqwest?/rustls-tls-native-roots",
|
|
"__install-crypto-provider",
|
|
]
|
|
scard = [
|
|
"dep:winscard",
|
|
"dep:cryptoki",
|
|
]
|
|
tsssp = [
|
|
"dep:rustls",
|
|
"__rustls-used",
|
|
]
|
|
|
|
[lib]
|
|
name = "sspi"
|
|
path = "src/lib.rs"
|
|
|
|
[[example]]
|
|
name = "client"
|
|
path = "examples/client.rs"
|
|
|
|
[[example]]
|
|
name = "kerberos"
|
|
path = "examples/kerberos.rs"
|
|
required-features = ["network_client"]
|
|
|
|
[[example]]
|
|
name = "server"
|
|
path = "examples/server.rs"
|
|
|
|
[[test]]
|
|
name = "sspi"
|
|
path = "tests/sspi/main.rs"
|
|
|
|
[dependencies.async-recursion]
|
|
version = "1.1"
|
|
|
|
[dependencies.bitflags]
|
|
version = "2.11"
|
|
|
|
[dependencies.bytemuck]
|
|
version = "1.24"
|
|
|
|
[dependencies.byteorder]
|
|
version = "1.5"
|
|
|
|
[dependencies.cfg-if]
|
|
version = "1"
|
|
|
|
[dependencies.crypto-bigint]
|
|
version = "0.7"
|
|
features = ["alloc"]
|
|
default-features = false
|
|
|
|
[dependencies.crypto-mac]
|
|
version = "0.11"
|
|
|
|
[dependencies.getrandom]
|
|
version = "0.3"
|
|
|
|
[dependencies.hickory-proto]
|
|
version = "0.25"
|
|
optional = true
|
|
|
|
[dependencies.hickory-resolver]
|
|
version = "0.25"
|
|
optional = true
|
|
|
|
[dependencies.hmac]
|
|
version = "0.13"
|
|
|
|
[dependencies.md-5]
|
|
version = "0.11"
|
|
|
|
[dependencies.md4]
|
|
version = "0.10"
|
|
|
|
[dependencies.num-derive]
|
|
version = "0.4"
|
|
|
|
[dependencies.num-traits]
|
|
version = "0.2"
|
|
default-features = true
|
|
|
|
[dependencies.oid]
|
|
version = "0.2"
|
|
|
|
[dependencies.picky]
|
|
version = "^7.0.0-rc.25"
|
|
default-features = false
|
|
|
|
[dependencies.picky-asn1]
|
|
version = "0.10"
|
|
features = ["time_conversion"]
|
|
|
|
[dependencies.picky-asn1-der]
|
|
version = "0.5"
|
|
|
|
[dependencies.picky-asn1-x509]
|
|
version = "0.15"
|
|
features = ["pkcs7"]
|
|
|
|
[dependencies.picky-krb]
|
|
version = "0.12"
|
|
|
|
[dependencies.portpicker]
|
|
version = "0.1"
|
|
optional = true
|
|
|
|
[dependencies.rand]
|
|
version = "0.10"
|
|
|
|
[dependencies.rand_core]
|
|
version = "0.10"
|
|
|
|
[dependencies.reqwest]
|
|
version = "0.12"
|
|
features = [
|
|
"blocking",
|
|
"rustls-tls-no-provider",
|
|
]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.rsa]
|
|
version = "^0.10.0-rc.18"
|
|
default-features = false
|
|
|
|
[dependencies.rustls]
|
|
version = "0.23"
|
|
features = [
|
|
"logging",
|
|
"std",
|
|
"tls12",
|
|
]
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.rustls-native-certs]
|
|
version = "0.8"
|
|
optional = true
|
|
|
|
[dependencies.serde]
|
|
version = "1"
|
|
|
|
[dependencies.sha1]
|
|
version = "0.11"
|
|
default-features = false
|
|
|
|
[dependencies.sha2]
|
|
version = "0.11"
|
|
|
|
[dependencies.tokio]
|
|
version = "1.52"
|
|
features = [
|
|
"time",
|
|
"rt",
|
|
"rt-multi-thread",
|
|
]
|
|
optional = true
|
|
|
|
[dependencies.tracing]
|
|
version = "0.1"
|
|
default-features = true
|
|
|
|
[dependencies.url]
|
|
version = "2.5"
|
|
|
|
[dependencies.uuid]
|
|
version = "1.23"
|
|
features = ["v4"]
|
|
default-features = true
|
|
|
|
[dependencies.widestring]
|
|
version = "1.2"
|
|
|
|
[dependencies.winscard]
|
|
version = "0.3"
|
|
optional = true
|
|
|
|
[dependencies.zeroize]
|
|
version = "1.8"
|
|
features = ["zeroize_derive"]
|
|
|
|
[dev-dependencies.base64]
|
|
version = "0.22"
|
|
|
|
[dev-dependencies.cfg-if]
|
|
version = "1"
|
|
|
|
[dev-dependencies.picky]
|
|
version = "^7.0.0-rc.25"
|
|
features = ["x509"]
|
|
default-features = false
|
|
|
|
[dev-dependencies.proptest]
|
|
version = "1.6"
|
|
|
|
[dev-dependencies.static_assertions]
|
|
version = "1"
|
|
|
|
[dev-dependencies.tracing-subscriber]
|
|
version = "0.3"
|
|
features = ["env-filter"]
|
|
|
|
[dev-dependencies.whoami]
|
|
version = "2.1"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.async-dnssd]
|
|
version = "0.5"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.curve25519-dalek]
|
|
version = "^5.0.0-rc.1"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.ed25519-dalek]
|
|
version = "^3.0.0-rc.1"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.futures]
|
|
version = "0.3"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.p256]
|
|
version = "^0.14.0-rc.14"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.p384]
|
|
version = "^0.14.0-rc.14"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.p521]
|
|
version = "^0.14.0-rc.14"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.pkcs1]
|
|
version = "^0.8.0-rc.4"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.primeorder]
|
|
version = "^0.14.0-rc.14"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.rustcrypto-ff]
|
|
version = "^0.14.0-rc.1"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.rustcrypto-ff_derive]
|
|
version = "^0.14.0-rc.0"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.rustcrypto-group]
|
|
version = "^0.14.0-rc.1"
|
|
|
|
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.tokio]
|
|
version = "1.52"
|
|
features = [
|
|
"time",
|
|
"rt",
|
|
"rt-multi-thread",
|
|
]
|
|
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.cryptoki]
|
|
version = "0.12"
|
|
optional = true
|
|
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.time]
|
|
version = "0.3"
|
|
features = ["std"]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.getrandom]
|
|
version = "0.3"
|
|
features = ["wasm_js"]
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.time]
|
|
version = "0.3"
|
|
features = ["wasm-bindgen"]
|
|
default-features = false
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies.uuid]
|
|
version = "1.23"
|
|
features = ["js"]
|
|
default-features = false
|
|
|
|
[target."cfg(windows)".dependencies.windows]
|
|
version = "0.62"
|
|
features = [
|
|
"Win32_Foundation",
|
|
"Win32_System",
|
|
"Win32_NetworkManagement_Dns",
|
|
"Win32_Security_Cryptography",
|
|
]
|
|
|
|
[target."cfg(windows)".dependencies.windows-registry]
|
|
version = "0.6"
|
|
|
|
[lints.clippy]
|
|
as_pointer_underscore = "warn"
|
|
as_ptr_cast_mut = "warn"
|
|
as_underscore = "warn"
|
|
filetype_is_file = "warn"
|
|
float_cmp = "warn"
|
|
float_cmp_const = "warn"
|
|
fn_to_numeric_cast_any = "warn"
|
|
get_unwrap = "warn"
|
|
lossy_float_literal = "warn"
|
|
mem_forget = "warn"
|
|
missing_safety_doc = "warn"
|
|
mixed_read_write_in_expression = "warn"
|
|
multiple_unsafe_ops_per_block = "warn"
|
|
needless_raw_strings = "warn"
|
|
non_ascii_literal = "warn"
|
|
panic = "warn"
|
|
ptr_cast_constness = "warn"
|
|
rc_mutex = "warn"
|
|
suspicious_xor_used_as_pow = "warn"
|
|
undocumented_unsafe_blocks = "warn"
|
|
unnecessary_safety_comment = "warn"
|
|
unused_result_ok = "warn"
|
|
|
|
[lints.rust]
|
|
ambiguous_negative_literals = "warn"
|
|
elided_lifetimes_in_paths = "warn"
|
|
redundant_lifetimes = "warn"
|
|
single_use_lifetimes = "warn"
|
|
trivial_numeric_casts = "warn"
|
|
unreachable_pub = "warn"
|
|
unused_lifetimes = "warn"
|
|
unused_qualifications = "warn"
|
|
|
|
[lints.rust.unexpected_cfgs]
|
|
level = "warn"
|
|
priority = 0
|
|
check-cfg = ["cfg(fuzzing)"]
|
|
|
|
[profile.ffi-production]
|
|
opt-level = "z"
|
|
lto = true
|
|
codegen-units = 1
|
|
split-debuginfo = "packed"
|
|
panic = "abort"
|
|
inherits = "release"
|
|
strip = false
|
|
|
|
[profile.ffi-production.package.aes]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.aes-gcm]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.aes-kw]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.argon2]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.cbc]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.crypto-bigint]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.ctr]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.des]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.hmac]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.p256]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.p384]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.p521]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.pbkdf2]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.rsa]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.sha1]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.sha2]
|
|
opt-level = 3
|
|
|
|
[profile.ffi-production.package.sha3]
|
|
opt-level = 3
|