[package] authors = [ "VexaHub Developers", "Kevin Lewi ", "François Garillot ", ] categories = ["no-std", "cryptography"] description = "An implementation of the OPAQUE password-authenticated key exchange protocol" edition = "2024" exclude = ["/src/tests/"] keywords = ["cryptography", "opaque", "passwords", "authentication", "pake"] license = "Apache-2.0 OR MIT" name = "opaque-vx" readme = "README.md" repository = "https://github.com/vexahub/opaque-vx" rust-version = "1.90" version = "1.0.0-pre.0" [features] argon2 = ["dep:argon2"] curve25519 = ["dep:curve25519-dalek"] default = ["ristretto255", "serde"] ecdsa = ["dep:ecdsa"] ed25519 = ["dep:curve25519-dalek", "dep:ed25519-dalek"] kem = ["dep:ml-kem", "dep:rand_core"] ristretto255 = ["dep:curve25519-dalek", "voprf/ristretto255-ciphersuite"] serde = [ "dep:serde", "curve25519-dalek?/serde", "ecdsa?/serde", "ed25519-dalek?/serde", "elliptic-curve/serde", "generic-array/serde", "hybrid-array/serde", "voprf/serde", "zeroize/serde", ] std = ["dep:getrandom", "rand/std"] [dependencies] argon2 = { version = "0.6.0-rc", default-features = false, features = [ "alloc", ], optional = true } curve25519-dalek = { version = "5.0.0-rc", default-features = false, features = [ "zeroize", ], optional = true } derive-where = { version = "1.6", features = ["zeroize-on-drop"] } digest = { version = "0.11", features = ["zeroize"] } displaydoc = { version = "0.2", default-features = false } ecdsa = { version = "0.17.0-rc.23", default-features = false, features = [ "algorithm", ], optional = true } ed25519-dalek = { version = "3.0.0-rc", default-features = false, features = [ "digest", "hazmat", ], optional = true } elliptic-curve = { version = "0.14", features = ["sec1"] } generic-array = { version = "1.4", features = ["hybrid-array-0_4", "zeroize"] } hybrid-array = { version = "0.4", features = ["extra-sizes", "zeroize"] } hkdf = "0.13" hmac = "0.13" ml-kem = { version = "0.3", default-features = false, features = [ "zeroize", ], optional = true } rand = { version = "0.10", default-features = false } rand_core = { version = "0.10", default-features = false, optional = true } serde = { version = "1", default-features = false, features = [ "derive", ], optional = true } subtle = { version = "2.6", default-features = false } voprf = { package = "voprf-vx", version = "1.0.0-pre.0", default-features = false, features = [ "danger", ] } zeroize = { version = "1.9", features = ["zeroize_derive"] } [target.'cfg(target_arch = "wasm32")'.dependencies] getrandom = { version = "0.4", features = ["wasm_js"], optional = true } [dev-dependencies] anyhow = "1" bincode-next = { version = "3", features = ["serde", "alloc"] } chacha20poly1305 = "0.11" criterion = "0.8" cryptoki = "0.12" elliptic-curve = { version = "0.14", features = ["alloc", "pkcs8"] } rand_core = { version = "0.10", default-features = false } hex = "0.4" p256 = { version = "0.14.0-rc.15", default-features = false, features = [ "ecdsa", "hash2curve", "pkcs8", "oprf", ] } p384 = { version = "0.14.0-rc.15", default-features = false, features = [ "hash2curve", "pkcs8", "oprf", ] } p521 = { version = "0.14.0-rc.15", default-features = false, features = [ "hash2curve", "pkcs8", "oprf", ] } pastey = "0.2" proptest = "1" rand = "0.10" rand_chacha = "0.10" regex = "1" sha2 = { version = "0.11", default-features = false } thiserror = "2" # MSRV rustyline = "18" scrypt = "0.12" serde_json = "1" [[bench]] harness = false name = "opaque" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] targets = [] [[example]] name = "simple_login" required-features = ["argon2"] [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(test_hsm)'] }