multi-key 1.2.2

Multikey self-describing cryptographic key data
[package]
name = "multi-key"
version = "1.2.2"
edition = "2024"
rust-version = "1.96"
authors = ["Dave Grantham <dwg@linuxprogrammer.org>"]
description = "Multikey self-describing cryptographic key data"
repository = "https://github.com/cryptidtech/multi-key.git"
readme = "README.md"
license = "Apache-2.0"
keywords = ["multiformats", "multikey", "crypto", "post-quantum"]
categories = ["cryptography", "encoding"]

[features]
default = ["serde", "lamport", "xmss"]
wasm = ["getrandom/wasm_js"]
# Legacy bare-ChaCha20 fallback for keys encrypted before AEAD was added.
# When disabled (default), AEAD decryption failure is a hard error — never
# silently downgrade to unauthenticated ChaCha20. Enable only to migrate
# pre-AEAD keystores; a warning is emitted on every fallback.
legacy_chacha20_fallback = []
lamport = ["dep:lamport_signature_plus", "dep:sha3", "dep:blake2", "dep:shake"]
xmss = ["dep:xmss"]
# Tests that take over 60 seconds in debug builds (SLH-DSA, Classic McEliece,
# XMSS). Excluded from the default `cargo test` run; enable with
# `cargo test --features slow-tests` to run the full suite.
slow-tests = []

[dependencies]
aes-gcm = "0.11"
bcrypt-pbkdf = "0.11"
blake3 = { version = "1.8", features = ["traits-preview", "zeroize"] }
ciborium = "0.2"
curve25519-dalek = { version = "5.0.0", features = ["group"] }
# blsful configured per-target below (blst for native, rust for wasm)
frodo-kem-rs = { version = "0.9", default-features = false, features = ["frodo640aes", "frodo976aes", "frodo1344aes", "frodo640shake", "frodo976shake", "frodo1344shake"] }
chacha20 = "0.10"
chacha20poly1305 = "0.11"
ed25519-dalek = { version = "3.0", features = ["pkcs8", "rand_core", "alloc"] }
elliptic-curve = "0.14"
fn-dsa = "0.4"
getrandom = { version = "0.4", features = ["sys_rng"] }
hex = "0.4"
hkdf = "0.13"
k256 = { version = "0.14", features = ["ecdh"] }
mceliece348864 = { version = "1.0" }
ml-dsa = "0.1.1"
ml-kem = "0.3"
multi-base = { version = "1.0", default-features = false }
multi-codec = "1.3"
multi-hash = "1.1"
multi-sig = "1.3"
multi-trait = { version = "1.0", default-features = false }
multi-util = "1.1"
p256 = { version = "0.14", features = ["ecdsa", "ecdh"] }
p384 = { version = "0.14", features = ["ecdsa", "ecdh"] }
p521 = { version = "0.14", features = ["ecdsa", "ecdh"] }
poly1305 = "0.9"
pq-mayo = "0.6.0"
rand = "0.10"
rand_chacha = "0.3"
rand_core = "0.10"
rand_core_06 = { package = "rand_core", version = "0.6", features = ["getrandom"] }
sad-rsa = { version = "0.2.3", features = ["sha2"] }
sec1 = "0.8"
serde = { version = "1.0", default-features = false, features = ["alloc", "derive"], optional = true }
sha2 = "0.11"
signature = "3"
slh-dsa = "0.2.0-rc.5"
sntrup = "0.4.0"
ssh-encoding = "0.3"
subtle = "2"
thiserror = { version = "2.0" }
typenum = "1.17"
unsigned-varint = { version = "0.8", features = ["std"] }
vsss-rs = "6.0"
x25519-dalek = { version = "3.0", features = ["static_secrets", "getrandom"] }
zeroize = "1"
# Lamport support (feature-gated, default-enabled)
lamport_signature_plus = { version = "0.5.0", optional = true }
sha3 = { version = "0.12", optional = true }
blake2 = { version = "0.11.0-rc.6", optional = true }
shake = { version = "0.1", optional = true }
# XMSS support (feature-gated, default-enabled)
xmss = { version = "0.1.0-pre.0", optional = true }

[target.'cfg(target_arch = "wasm32")'.dependencies]
blsful = { version = "4.0.0", default-features = false, features = ["rust"] }
getrandom_02 = { package = "getrandom", version = "0.2", features = ["js"] }
ssh-key = { version = "0.7.0-rc.11", default-features = false, features = ["alloc", "ecdsa", "ed25519", "p256", "p384", "p521"] }

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
blsful = { version = "4.0.0", default-features = false, features = ["blst"] }
ssh-key = { version = "0.7.0-rc.11", default-features = false, features = ["alloc", "ecdsa", "ed25519", "p256", "p384", "p521"] }

[dev-dependencies]
criterion = { version = "0.8", features = ["html_reports"] }
proptest = "1.4"
serde_json = "1.0"
serde_test = "1.0"

[[bench]]
name = "multikey_bench"
harness = false
path = "benches/multikey_bench.rs"

[lints.clippy]
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }
multiple_crate_versions = { level = "allow", priority = 1 }

[lints.rust]
unsafe_code = "deny"