qssh 0.4.4

Post-quantum secure shell with NIST PQC algorithms (Falcon, SPHINCS+, ML-KEM), configurable security tiers, and quantum-resistant protocol design
Documentation
[package]
name = "qssh"
version = "0.4.4"
edition = "2021"
authors = ["Paraxiom"]
license = "GPL-3.0-only"
description = "Post-quantum secure shell with NIST PQC algorithms (Falcon, SPHINCS+, ML-KEM), configurable security tiers, and quantum-resistant protocol design"
repository = "https://github.com/Paraxiom/qssh"
readme = "README.md"
exclude = ["lean/", "target/package/"]

[workspace]

[dependencies]
# Async runtime
tokio = { version = "1.40", features = ["full"] }

# Post-quantum signatures (pure Rust — no C FFI)
fn-dsa = "0.3"
slh-dsa = "0.0.3"
signature = "2"

# ML-KEM (FIPS 203) - replaces vulnerable Kyber
ml-kem = "0.2"
kem = "0.3.0-pre.0"

# Classical crypto for hybrid mode (optional)
x25519-dalek = { version = "2.0", features = [
    "static_secrets",
], optional = true }

# Encryption
aes-gcm = "0.10"
rand = "0.8"
rand_chacha = "0.3"
sha3 = "0.10"
sha1 = "0.10"
sha2 = "0.10"
hkdf = "0.12"
hmac = "0.12"
zeroize = { version = "1.6", features = ["zeroize_derive"] }
argon2 = "0.5"

# Serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "1.3"
base64 = "0.22"
hex = "0.4"

# CLI
clap = { version = "4.5", features = ["derive"] }
rpassword = "7.3"
whoami = "1.5"
chrono = { version = "0.4", features = ["serde"] }

# Logging
log = "0.4"
env_logger = "0.11"

# Error handling
anyhow = "1.0"
thiserror = "1.0"

# SFTP dependencies
async-trait = "0.1"
byteorder = "1.5"

# Network
libp2p = { version = "0.54", optional = true }
reqwest = { version = "0.12", features = ["json", "native-tls"] }

# Compression
flate2 = "1.0"
zstd = "0.13"
lz4 = "1.24"

# QKD integration (disabled for now - path doesn't exist)
# qkd_client = { path = "../qkd_client", optional = true }
winterfell = { version = "0.12.0", optional = true }

# Terminal handling
termios = "0.3"
libc = "0.2"
atty = "0.2"

# Socket-level TCP keepalive (issue #1). Lets the kernel detect a silently
# half-open forward tunnel within ~60 s instead of waiting for the 2 h Linux
# default, so `receive_message().await` errors out and the outer reconnect
# loop in `qssh-node` can actually run.
socket2 = { version = "0.5", features = ["all"] }

# Utilities
hostname = "0.4"
if-addrs = "0.12"

[[bin]]
name = "qssh"
path = "src/bin/qssh.rs"

[[bin]]
name = "qsshd"
path = "src/bin/qsshd.rs"

[[bin]]
name = "qscp"
path = "src/bin/qscp.rs"

[[bin]]
name = "qssh-keygen"
path = "src/bin/qssh-keygen.rs"

[[bin]]
name = "qssh-passwd"
path = "src/bin/qssh-passwd.rs"

[[bin]]
name = "qssh-agent"
path = "src/bin/qssh-agent.rs"

[[bin]]
name = "qssh-sign"
path = "src/bin/qssh-sign.rs"

[[bin]]
name = "qssh-node"
path = "src/bin/qssh-node.rs"

[[bin]]
name = "qssh-add"
path = "src/bin/qssh-add.rs"

[dev-dependencies]
tokio-test = "0.4"
proptest = "1.4"
criterion = "0.5"
tempfile = "3.8"

[features]
default = ["sftp"]
sftp = []
gssapi = [
] # STUB — placeholder only, all operations return errors. Requires GSSAPI library integration.
multiplex = [] # Incomplete
libp2p-transport = ["libp2p"]
qkd = ["winterfell"] # qkd_client disabled until path exists
quantum-native = [] # Experimental 768-byte indistinguishable frames
hybrid-kex = ["x25519-dalek"] # X25519+ML-KEM hybrid key exchange

[[example]]
name = "quantum_harmony_validator"

# ----------------------------------------------------------------------------
# Debian package (.deb) — built with cargo-deb (`cargo install cargo-deb`).
# Build on a Linux host (or a Linux cross target): `cargo deb`.
# See docs/PACKAGING.md for details.
# ----------------------------------------------------------------------------
[package.metadata.deb]
maintainer = "Paraxiom <sylvain@paraxiom.org>"
copyright = "2026, Paraxiom. GPL-3.0-only, or a Paraxiom commercial licence (see LICENSE.md)."
license-file = ["LICENSE-GPL3", "0"]
section = "net"
priority = "optional"
depends = "$auto"
extended-description = """
QSSH is a post-quantum secure shell: an SSH-style client/server suite using
NIST PQC algorithms (Falcon / FN-DSA, SPHINCS+ / SLH-DSA, ML-KEM) with
configurable security tiers and a quantum-resistant protocol design.

This package installs the qsshd daemon, the qssh client and the supporting
tools (qscp, qssh-keygen, qssh-passwd, qssh-agent, qssh-sign, qssh-add,
qssh-node), plus a systemd service for qsshd.
"""
assets = [
    ["target/release/qssh",        "usr/bin/", "755"],
    ["target/release/qsshd",       "usr/bin/", "755"],
    ["target/release/qscp",        "usr/bin/", "755"],
    ["target/release/qssh-keygen", "usr/bin/", "755"],
    ["target/release/qssh-passwd", "usr/bin/", "755"],
    ["target/release/qssh-agent",  "usr/bin/", "755"],
    ["target/release/qssh-sign",   "usr/bin/", "755"],
    ["target/release/qssh-add",    "usr/bin/", "755"],
    ["target/release/qssh-node",   "usr/bin/", "755"],
    ["qsshd.config.production",    "etc/qssh/qsshd.config", "644"],
    ["packaging/qsshd.env",        "etc/qssh/qsshd.env",    "644"],
    ["README.md",                  "usr/share/doc/qssh/README.md",   "644"],
    ["docs/PACKAGING.md",          "usr/share/doc/qssh/PACKAGING.md", "644"],
]
conf-files = ["/etc/qssh/qsshd.config", "/etc/qssh/qsshd.env"]

[package.metadata.deb.systemd-units]
unit-scripts = "packaging"
unit-name = "qsshd"
enable = true
start = false