[package]
name = "identity-kit"
version = "0.3.0"
edition = "2024"
rust-version = "1.95"
description = "DID, key management and verifiable credential primitives"
license = "Apache-2.0"
repository = "https://github.com/impierce/identity-kit"
keywords = ["did", "ssi", "digital-credentials", "vc"]
categories = ["cryptography", "authentication"]
include = ["/src", "/tests/vectors", "/CHANGELOG.md", "/README.md", "/LICENSE"]
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[features]
default = ["secp256k1", "software", "did-key", "did-jwk", "did-web", "reqwest", "vc", "status-list", "sd-jwt", "domain-linkage", "linked-vp"]
secp256k1 = ["dep:k256"]
rsa = ["dep:rsa"]
in-memory = ["dep:getrandom"]
software = ["dep:getrandom"]
pkcs11 = ["dep:cryptoki", "dep:tokio", "tokio/rt"]
test-vectors = []
did-key = []
did-jwk = []
did-web = []
jwks = ["did-web"]
reqwest = ["did-web", "dep:reqwest", "dep:rustls", "dep:tokio"]
local-network = ["reqwest"]
vc = ["dep:chrono"]
status-list = ["vc", "dep:miniz_oxide"]
sd-jwt = ["vc", "status-list", "dep:getrandom"]
domain-linkage = ["vc", "did-web"]
linked-vp = ["vc", "did-web"]
utoipa = ["dep:utoipa"]
[dependencies]
async-trait = "0.1"
base64 = { version = "0.23", default-features = false, features = ["std"] }
bs58 = "0.5"
chrono = { version = "0.4", default-features = false, features = ["now", "serde", "std"], optional = true }
cryptoki = { version = "0.12", optional = true }
ed25519-dalek = { version = "3.0", features = ["pkcs8"] }
getrandom = { version = "0.4", features = ["std"], optional = true }
indexmap = { version = "2.0", features = ["serde"] }
jsonwebtoken = { version = "11.1", default-features = false }
k256 = { version = "0.14", default-features = false, features = ["ecdsa", "pkcs8", "std"], optional = true }
miniz_oxide = { version = "0.9", optional = true }
p256 = { version = "0.14", default-features = false, features = ["ecdsa", "pkcs8", "std"] }
reqwest = { version = "0.13", default-features = false, features = ["rustls-no-provider", "http2", "gzip"], optional = true }
rsa = { version = "0.10.0-rc.19", default-features = false, features = ["encoding", "sha2", "std"], optional = true }
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"], optional = true }
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0", features = ["float_roundtrip", "preserve_order"] }
sha2 = "0.11"
thiserror = "2.0"
tokio = { version = "1.0", features = ["net"], optional = true }
url = "2.5"
utoipa = { version = "6.0", optional = true }
zeroize = { version = "1.8", features = ["derive"] }
[dev-dependencies]
boon = "0.6"
flate2 = "1.0"
jsonwebtoken = { version = "11.1", default-features = false, features = ["rust_crypto"] }
proptest = "1.0"
tempfile = "3.0"
tokio = { version = "1.0", features = ["io-util", "macros", "net", "rt", "rt-multi-thread", "sync"] }
wiremock = "0.6"
[workspace]
members = ["xtask"]
exclude = ["fuzz"]
[lints.rust]
unsafe_code = "forbid"
missing_docs = "warn"
missing_debug_implementations = "warn"
unreachable_pub = "warn"
[lints.clippy]
pedantic = { level = "warn", priority = -1 }
must_use_candidate = "allow"
assert_is_empty = "allow"
dbg_macro = "warn"
todo = "warn"
print_stdout = "warn"
print_stderr = "warn"
[profile.mutants]
inherits = "test"
debug = "none"