[package]
authors = ["Damir Jelić <poljar@termina.org.uk>"]
description = "Matrix encryption library"
edition = "2024"
homepage = "https://github.com/matrix-org/matrix-rust-sdk"
keywords = ["matrix", "chat", "messaging", "ruma", "nio"]
license = "Apache-2.0"
name = "matrix-sdk-crypto"
readme = "README.md"
repository = "https://github.com/matrix-org/matrix-rust-sdk"
rust-version = { workspace = true }
version = "0.16.0"

[package.metadata.docs.rs]
rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]

[features]
default = []
automatic-room-key-forwarding = []
experimental-send-custom-to-device = []

# Enable experimental support for encrypting state events; see
# https://github.com/matrix-org/matrix-rust-sdk/issues/5397.
experimental-encrypted-state-events = [
    "matrix-sdk-common/experimental-encrypted-state-events",
    "ruma/unstable-msc4362"
]

js = ["ruma/js", "vodozemac/js", "matrix-sdk-common/js"]
qrcode = ["dep:matrix-sdk-qrcode"]
experimental-algorithms = []
uniffi = ["dep:uniffi"]
_disable-minimum-rotation-period-ms = []

# Private feature, see
# https://github.com/matrix-org/matrix-rust-sdk/pull/3749#issuecomment-2312939823 for the gory
# details.
test-send-sync = []

# Testing helpers for implementations based upon this
testing = ["matrix-sdk-test"]

# Enable experimental support for pushing secrets; see
# https://github.com/matrix-org/matrix-spec-proposals/pull/4385
experimental-push-secrets = []

[dependencies]
aes = { version = "0.8.4", default-features = false }
aquamarine.workspace = true
as_variant.workspace = true
async-trait.workspace = true
bs58 = { version = "0.5.1", default-features = false, features = ["std"] }
byteorder.workspace = true
cfg-if.workspace = true
ctr = { version = "0.9.2", default-features = false }
eyeball.workspace = true
futures-core.workspace = true
futures-util.workspace = true
hkdf.workspace = true
hmac.workspace = true
itertools.workspace = true
js_option = { version = "0.2.0", default-features = false }
matrix-sdk-common.workspace = true
matrix-sdk-qrcode = { workspace = true, optional = true }
matrix-sdk-test = { workspace = true, optional = true }  # feature = testing only
pbkdf2.workspace = true
rand.workspace = true
rmp-serde.workspace = true
ruma = { workspace = true, features = ["rand", "unstable-msc3814"] }
serde = { workspace = true, features = ["derive", "rc"] }
serde_json.workspace = true
sha2.workspace = true
subtle = { version = "2.6.1", default-features = false, features = ["std", "i128"] }
thiserror.workspace = true
time = { version = "0.3.47", default-features = false, features = ["std", "formatting"] }
tokio.workspace = true
tokio-stream = { workspace = true, features = ["sync"] }
tracing = { workspace = true, features = ["attributes"] }
ulid = { version = "1.1.4", default-features = false, features = ["std"] }
uniffi = { workspace = true, optional = true }
url.workspace = true
vodozemac.workspace = true
zeroize = { workspace = true, features = ["zeroize_derive"] }

[target.'cfg(not(target_family = "wasm"))'.dependencies]
tokio = { workspace = true, features = ["time"] }

[target.'cfg(target_family = "wasm")'.dependencies]
tokio.workspace = true

[dev-dependencies]
anyhow.workspace = true
assert_matches.workspace = true
assert_matches2.workspace = true
futures-executor.workspace = true
http.workspace = true
insta.workspace = true
matrix-sdk-test.workspace = true
matrix-sdk-test-utils.workspace = true
proptest.workspace = true
rmp-serde.workspace = true
similar-asserts.workspace = true
# required for async_test macro
stream_assert.workspace = true
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }

[lints]
workspace = true
