[package] name = "banyanfs" version = "0.2.1" authors = ["Sam Stelfox "] license = "MIT OR Apache-2.0" description = "A modern end-to-end encrypted filesystem built on distributed block replication primitives" homepage = "https://banyan.computer" repository = "https://github.com/banyancomputer/banyanfs" readme = "README.md" edition = "2021" keywords = ["banyan", "filesystem", "encryption", "storage"] categories = ["filesystems", "cryptography", "storage"] [features] default = ["banyan-api", "pem", "strict", "tomb-compat"] banyan-api = [ "async-trait", "jwt-simple", "reqwest", "serde", "serde_json", "url", ] pem = ["p384/pem", "p384/pkcs8"] strict = [] tomb-compat = ["banyan-api"] [dependencies] async-recursion = "^1" async-std = "^1" async-trait = { version = "^0.1", optional = true } futures = "^0.3" thiserror = "^1" tracing = "^0.1" tracing-subscriber = { version = "^0.3", default-features = false } blake3 = { version = "^1", features = ["traits-preview"] } chacha20poly1305 = "^0.10" ecdsa = { version = "^0.16", features = ["signing", "verifying"] } elliptic-curve = { version = "^0.13", features = ["ecdh", "sec1"] } p384 = { version = "^0.13", features = ["ecdh", "ecdsa"] } rand = "^0.8" # TODO: We don't necessarily need to use rand_chacha, this could be an optional dep rand_chacha = "^0.3" # TODO: sha2 is used for signatures but we do already have blake3 I think we can # swap that in and remove this sha2 = "^0.10" zeroize = { version = "^1", features = ["derive", "std"] } base64 = "^0.22" bytes = "^1" # TODO: we only minimally use UUID and only for the v7 version, we can hand generate those and save the dependency uuid = { version = "^1", features = ["v7", "serde"] } # TODO: transitioning from nom to winnow, finish it up and remove nom nom = "^7" winnow = "^0.6" crdts = { version = "^7", default-features = false, features = [ "merkle", "num", ] } slab = "^0.4" # TODO: This is convenient to use with both wasm and native, but we only need # unix milliseconds, displaying is for other libraries so should drop this time = "^0.3" # TODO: we have most of what jwt-simple handles in our own crypto code which we # really don't need and it doesn't quite match our needs. We can pull this out # and reduce the scope of our library. jwt-simple = { version = "^0.12", optional = true } reqwest = { version = "^0.11", default-features = false, optional = true, features = [ "multipart", "json", "stream", ] } serde = { version = "^1", features = ["derive"], optional = true } serde_json = { version = "^1", optional = true } url = { version = "^2", optional = true } [[example]] name = "full_fs_exercise" [lib] path = "src/lib.rs" crate-type = ["cdylib", "rlib"] [profile.release] lto = true [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "^0.1" getrandom = { version = "^0.2", features = ["js"] } js-sys = "^0.3" serde-wasm-bindgen = "^0.6" time = { version = "^0.3", features = ["wasm-bindgen"] } tracing-wasm = "^0.2" wasm-bindgen = { version = "^0.2" } wasm-bindgen-futures = "^0.4" web-sys = { version = "^0.3", default-features = false, features = [ "File", "FileSystemDirectoryHandle", "FileSystemFileHandle", "FileSystemGetFileOptions", "FileSystemGetDirectoryOptions", "FileSystemWritableFileStream", "Navigator", "Storage", "StorageManager", "Window", ] } [target.'cfg(target_arch = "wasm32")'.dev-dependencies] wasm-bindgen-test = "^0.3" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] tokio = { version = "^1", features = ["full"] } tokio-util = { version = "^0.7", features = ["compat", "io"] } tracing-appender = "^0.2" tracing-subscriber = { version = "^0.3", features = ["env-filter"] } [build-dependencies] time = { version = "^0.3", features = ["formatting"] }