Source code

Revision control

Copy as Markdown

Other Tools

[package]
name = "mls-rs"
version = "0.54.0"
edition = "2021"
description = "An implementation of Messaging Layer Security (RFC 9420)"
keywords = ["crypto", "cryptography", "security", "mls", "e2ee"]
categories = ["no-std", "cryptography"]
license = "Apache-2.0 OR MIT"
rust-version = "1.82.0"
exclude = ["test_data"]
[package.metadata.docs.rs]
features = ["external_client", "sqlite"]
rustdoc-args = ["--cfg", "docsrs"]
[features]
default = ["std", "rayon", "rfc_compliant", "tree_index", "fast_serialize"]
arbitrary = ["std", "dep:arbitrary", "mls-rs-core/arbitrary"]
rayon = ["std", "dep:rayon"]
external_client = ["std"]
grease = ["std"]
fast_serialize = ["mls-rs-core/fast_serialize"]
secret_tree_access = []
private_message = []
custom_proposal = []
tree_index = []
out_of_order = ["private_message"]
prior_epoch = []
by_ref_proposal = []
psk = []
non_domain_separated_hpke_encrypt_decrypt = []
prior_epoch_membership_key = []
x509 = ["mls-rs-core/x509", "dep:mls-rs-identity-x509"]
rfc_compliant = ["private_message", "custom_proposal", "out_of_order", "psk", "x509", "prior_epoch", "by_ref_proposal", "mls-rs-core/rfc_compliant"]
last_resort_key_package_ext = ["mls-rs-core/last_resort_key_package_ext"]
self_remove_proposal = ["mls-rs-core/self_remove_proposal"]
export_key_generation = []
gsma_rcs_e2ee_feature = ["mls-rs-core/gsma_rcs_e2ee_feature"]
std = ["mls-rs-core/std", "mls-rs-codec/std", "mls-rs-identity-x509?/std", "hex/std", "futures/std", "itertools/use_std", "zeroize/std", "dep:debug_tree", "dep:thiserror", "serde?/std", "subtle/std"]
serde = ["mls-rs-core/serde", "zeroize/serde", "dep:serde", "dep:hex"]
# SQLite support
sqlite = ["std", "mls-rs-provider-sqlite/sqlite"]
sqlite-bundled = ["sqlite", "mls-rs-provider-sqlite/sqlite-bundled"]
sqlcipher = ["sqlite", "mls-rs-provider-sqlite/sqlcipher"]
sqlcipher-bundled = ["sqlite", "mls-rs-provider-sqlite/sqlcipher-bundled"]
test_util = []
benchmark_util = ["test_util", "default", "dep:mls-rs-crypto-openssl"]
benchmark_pq_crypto = ["mls-rs-crypto-awslc/post-quantum"]
fuzz_util = ["test_util", "default", "dep:once_cell", "dep:mls-rs-crypto-openssl"]
[dependencies]
mls-rs-core = { path = "../mls-rs-core", default-features = false, version = "0.26.0" }
mls-rs-identity-x509 = { path = "../mls-rs-identity-x509", default-features = false, version = "0.20.0", optional = true }
zeroize = { version = "1", default-features = false, features = ["alloc", "zeroize_derive"] }
mls-rs-codec = { version = "0.7", path = "../mls-rs-codec", default-features = false}
thiserror = { version = "2", optional = true }
itertools = { version = "0.14.0", default-features = false, features = ["use_alloc"]}
cfg-if = "1"
debug_tree = { version = "0.4.0", optional = true }
spin = { version = "0.10", default-features = false, features = ["mutex", "spin_mutex"] }
maybe-async = { version = "0.2.10" }
subtle = { version = "2.6.1", default-features = false, features = ["i128"] }
# Optional dependencies
mls-rs-provider-sqlite = { path = "../mls-rs-provider-sqlite", version = "0.22.0", default-features = false, optional = true }
mls-rs-crypto-openssl = { path = "../mls-rs-crypto-openssl", optional = true, version = "0.20.0" }
rayon = { version = "1", optional = true }
arbitrary = { version = "1", features = ["derive"], optional = true }
once_cell = { version = "1.18", optional = true }
serde = { version = "1.0", default-features = false, features = ["alloc", "derive"], optional = true }
hex = { version = "^0.4.3", default-features = false, features = ["serde", "alloc"], optional = true }
# Only for benchmarks
mls-rs-crypto-awslc = { path = "../mls-rs-crypto-awslc", optional = true, version = "0.23" }
# Async mode dependencies
[target.'cfg(mls_build_async)'.dependencies]
futures = { version = "0.3.25", default-features = false, features = ["alloc"]}
async-trait = "0.1.74"
[target.'cfg(not(target_has_atomic = "ptr"))'.dependencies]
portable-atomic = { version = "1.5.1", default-features = false, features = ["critical-section"] }
portable-atomic-util = { version = "0.2", default-features = false, features = ["alloc"] }
spin = { version = "0.10", default-features = false, features = ["portable_atomic"] }
[target.'cfg(mls_build_async)'.dev-dependencies]
futures-test = "0.3.25"
[dev-dependencies]
assert_matches = "1.5.0"
criterion = { version = "0.8", features = ["async_futures", "html_reports"], default-features = false }
serde_json = "^1.0"
rand = "0.9"
serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }
hex = { version = "^0.4.3", default-features = false, features = ["serde", "alloc"] }
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = { version = "0.2" }
getrandom = { version = "0.2", features = ["js", "custom"], default-features = false }
rand_core = { version = "0.6", default-features = false, features = ["alloc"] }
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = { version = "0.3" }
mls-rs-crypto-webcrypto = { path = "../mls-rs-crypto-webcrypto", version = "0.14.0" }
criterion = { version = "0.8", default-features = false, features = ["plotters", "cargo_bench_support", "async_futures", "html_reports"] }
getrandom = { version = "0.3", features = ["wasm_js"] }
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
mls-rs-crypto-openssl = { path = "../mls-rs-crypto-openssl", version = "0.20.0"}
criterion = { version = "0.8", features = ["async_futures", "html_reports"] }
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(mls_build_async)', 'cfg(coverage_nightly)'] }
[[example]]
name = "basic_usage"
required-features = []
[[example]]
name = "x509"
required-features = ["x509"]
[[example]]
name = "large_group"
required-features = []
[[example]]
name = "custom"
required-features = ["std"]
[[example]]
name = "basic_server_usage"
required-features = ["external_client"]
[[bench]]
name = "group_add"
harness = false
required-features = ["benchmark_util"]
[[bench]]
name = "group_commit"
harness = false
required-features = ["benchmark_util"]
[[bench]]
name = "group_receive_commit"
harness = false
required-features = ["benchmark_util"]
[[bench]]
name = "group_application"
harness = false
required-features = ["benchmark_util"]
[[bench]]
name = "group_serialize"
harness = false
required-features = ["benchmark_util"]
[[test]]
name = "client_tests"
required-features = ["test_util"]