Files
2026-06-18 17:02:43 -07:00

193 lines
9.7 KiB
TOML

[workspace]
members = [
"runners/lpc55",
"runners/lpc55/board",
"runners/nrf52840dk",
"runners/pc",
"components/ndef-app",
"components/nfc-device",
"components/fm11nc08",
"components/nrf-nfc",
"components/provisioner-app",
"components/oath-export",
"components/solo-apps",
"cli",
]
# `cargo run` / `cargo build` / `cargo test` at the workspace root operate on the
# host CLI. `runners/pc` also ships binaries, so the CLI must be the *sole*
# default member for `cargo run` to be unambiguous. Build the firmware explicitly
# with `cargo build -p runner --target thumbv8m.main-none-eabi ...` (or from
# `runners/lpc55/`); test other host members with `cargo test -p <name>`.
default-members = [
"cli",
]
resolver = "2"
[workspace.package]
version = "2.2362.0"
edition = "2021"
rust-version = "1.94"
authors = [
"Nicolas Stalder <n@stalder.io>",
"Conor Patrick <conor@solokeys.com>",
"Manuel Domke <manuel@leetronics.de>",
]
[workspace.dependencies]
# ── Internal workspace members ────────────────────────────────────────────────
board = { path = "runners/lpc55/board" }
ndef-app = { path = "components/ndef-app" }
fm11nc08 = { path = "components/fm11nc08" }
nfc-device = { path = "components/nfc-device" }
nrf-nfc = { path = "components/nrf-nfc" }
provisioner-app = { path = "components/provisioner-app" }
oath-export = { path = "components/oath-export" }
solo-apps = { path = "components/solo-apps" }
# ── RTIC framework ────────────────────────────────────────────────────────────
rtic = "2.0.0"
rtic-monotonics = { version = "2.0.0", features = ["cortex-m-systick"] }
rtic-sync = "1.4.0"
systick-monotonic = "1.0.1"
# ── Cortex-M / embedded ───────────────────────────────────────────────────────
cortex-m = { version = "0.7.0", features = ["critical-section-single-core"] }
lpc55-hal = "0.5.0"
micromath = "2"
embedded-time = "0.12"
embedded-hal = { version = "0.2.5", features = ["unproven"] }
spi-memory = "0.2"
# ── Logging / debug ───────────────────────────────────────────────────────────
defmt = "1.0.1"
defmt-rtt = "1.1.0"
delog = "0.1.1"
panic-halt = "1.0.0"
# ── Core utilities ────────────────────────────────────────────────────────────
heapless = "0.9"
nb = "1"
interchange = "0.3"
static_cell = "2.1.1"
ref-swap = "0.1"
generic-array = "0.14.3"
rand = "0.8"
rand_core = "0.6"
serde = { version = "1", features = ["derive"] }
paste = "1"
hex = "0.4"
serde_bytes = "0.11"
# ── USB ───────────────────────────────────────────────────────────────────────
usb-device = "0.2.3"
usbd-serial = "0.1.0"
usbd-ccid = "0.4"
usbd-ctaphid = { version = "0.4", features = ["log-info"] }
chacha20 = { version = "0.7", features = ["rng"] }
# ── APDU / ISO 7816 stack ─────────────────────────────────────────────────────
apdu-dispatch = "0.4"
ctaphid-dispatch = "0.4"
ctap-types = "=0.6.0-rc.4"
iso7816 = "0.2"
serde_cbor = { version = "0.11", default-features = false, features = ["std"] }
# ── Storage ───────────────────────────────────────────────────────────────────
littlefs2 = { version = "0.7", features = ["c-stubs"] }
# ── Trussed core ─────────────────────────────────────────────────────────────
trussed = { version = "0.1", features = ["aes256-gcm"] }
trussed-core = { version = "0.2", features = ["aes256-gcm"] }
# ── Trussed extensions ────────────────────────────────────────────────────────
trussed-staging = { git = "https://github.com/trussed-dev/trussed-staging.git", tag = "v0.4.0", features = ["hkdf", "fs-info", "manage", "chunked", "hpke", "wrap-key-to-file"] }
trussed-fs-info = "0.3"
trussed-hkdf = "0.4"
trussed-manage = "0.3"
trussed-chunked = "0.3"
trussed-hpke = "0.3"
trussed-wrap-key-to-file = "0.3"
trussed-auth = "0.5"
trussed-auth-backend = { git = "https://github.com/trussed-dev/trussed-auth", tag = "backend-v0.1.0" }
# ── Applications ─────────────────────────────────────────────────────────────
admin-app = "0.1"
fido-authenticator = { version = "=0.4.0-rc.3", features = ["dispatch", "chunked", "credential-id-format-v2"] }
salty = "0.3"
secrets-app = { git = "https://github.com/leetronics/trussed-secrets-app", branch = "fix-pin-protection-isolation", features = ["apdu-dispatch", "ctaphid", "log-all"] }
piv-authenticator = { git = "https://github.com/0x0ece/piv-authenticator", rev = "cd93aee", features = ["apdu-dispatch"] }
opcard = { git = "https://github.com/Nitrokey/opcard-rs", tag = "v1.7.0", features = ["apdu-dispatch", "delog"] }
# ── PC test-only dependencies ─────────────────────────────────────────────────
serial_test = "3"
# default-features off + static hidraw: shared by runners/pc and the host cli.
hidapi = { version = "2", default-features = false, features = ["linux-static-hidraw"] }
aes = "0.8"
cbc = "0.1"
sha2 = "0.10"
hmac = "0.12"
cosey = "0.4"
p256 = { version = "0.13", features = ["ecdh"] }
# ── CLI (host) — used only by the `cli` member ───────────────────────────────
# (hex, sha2, rand_core, p256, iso7816, hidapi are deduped onto the entries above)
anyhow = "1"
log = "0.4"
data-encoding = "2"
flexiber = { version = "0.1", features = ["std"] }
getrandom = "0.2"
hex-literal = "0.4"
lpc55 = "0.2"
pcsc = "2"
serde_json = "1"
sha-1 = "0.10"
time = "0.3"
x509-parser = { version = "0.14", features = ["verify"] }
dialoguer = "0.10"
indicatif = "0.18"
ureq = { version = "2", features = ["json"] }
webbrowser = "1"
clap = { version = "4", features = ["cargo", "derive"] }
clap_complete = "4"
clap-verbosity-flag = "2"
ctrlc = "3"
lazy_static = "1"
pretty_env_logger = "0.5"
pkcs8 = { version = "0.10", features = ["alloc"] }
rcgen = "0.10"
yasna = "0.6"
# ── Release profile ───────────────────────────────────────────────────────────
[profile.release]
codegen-units = 1
lto = true
opt-level = "z"
panic = "abort"
incremental = false
debug = true
[profile.dev]
panic = "abort"
[profile.release.package.salty]
opt-level = 2
# ── Patches ───────────────────────────────────────────────────────────────────
[patch.crates-io]
ctap-types = { git = "https://github.com/0x0ece/ctap-types", rev = "1056c78b06fddc1010afebf549434ac097a6db42" }
trussed = { git = "https://github.com/0x0ece/trussed", rev = "a1b33c46eb16ef7fa5f6324f7c099ff339fe21e7" }
trussed-core = { git = "https://github.com/0x0ece/trussed", rev = "a1b33c46eb16ef7fa5f6324f7c099ff339fe21e7" }
fido-authenticator = { git = "https://github.com/0x0ece/fido-authenticator", rev = "015c310541eb2e977e6efa6167a149f3c3b295da" }
admin-app = { git = "https://github.com/Nitrokey/admin-app.git", tag = "v0.1.0-nitrokey.21" }
# Force all crates to use littlefs2-core 0.1.2 which has heapless-bytes05 support
littlefs2-core = { git = "https://github.com/trussed-dev/littlefs2.git", tag = "core-0.1.2" }
# Extension backends needed by fido-authenticator (FsInfo, Hkdf, etc.)
trussed-staging = { git = "https://github.com/trussed-dev/trussed-staging.git", tag = "v0.4.0" }
# Forked lpc55 (host) with the BCD CalVer-minor>999 version fix, used by the cli.
lpc55 = { git = "https://github.com/0x0ece/lpc55-host", rev = "2a8a24e3df9ab9734f66ed2d7a56bc69101f531c" }
apdu-dispatch = { git = "https://github.com/0x0ece/apdu-dispatch", rev = "3531b6b" }
# libcrux-ml-dsa with #[inline(always)] downgraded to #[inline] on the portable
# path — ~80 KB smaller .text on Cortex-M33 (no perf regression), lets all-apps +
# ML-DSA-44 fit on the LPC55. Only ml-dsa is patched; sha3/intrinsics unchanged.
libcrux-ml-dsa = { git = "https://github.com/0x0ece/libcrux", rev = "ee890a77" }