Files
Trusty/README.md

75 lines
2.9 KiB
Markdown

# Trusty
Tamper-evident data provenance chain library. Pure Rust. Proprietary.
MM Advisory LLC / Eric Gottlieb.
## Crates
- **`trusty-core`** — pure library. Dual hash (SipHash-2-4 + SHA-256),
canonical payload (v1 + v2), Ed25519 signing trait, `compute_record` /
`compute_record_signed` / `verify_links`, chain-break-as-event primitive,
pluggable `Condition` trait. No storage dependency.
- **`trusty-store`** — backend-agnostic `Store` trait. Data types,
`KvCrossCheckReport`, transactional scope. Implemented by
`trusty-memory` and `trusty-sqlite`.
- **`trusty-memory`** — in-memory `Store` impl. Reference implementation
for tests / fuzzing / conformance. Not intended for persistence.
- **`trusty-sqlite`** — rusqlite adapter. Three-table schema
(`provenance_envelope`, `hash_index`, `chain_tips`) with KV cross-check.
`Trusty::{open, append, append_signed, append_with_method,
append_with_method_signed, verify, anchor, history, integrity}`.
- **`trusty-sqlite-ext`** — loadable SQLite extension (`cdylib`).
`sqlite3_trusty_init()` exposes SQL functions (`trusty_append`,
`trusty_verify`, `trusty_anchor`). Load from any sqlite3 binding in any
language.
## Docs
- [`docs/payload-v2.md`](docs/payload-v2.md) — canonical payload byte
format, v1 + v2, signing-view algorithm, verifier logic, locked
invariants.
- [`docs/threat-model.md`](docs/threat-model.md) — detection surfaces,
Ed25519 trust boundary, key-compromise scenarios, out-of-scope threats.
- [`docs/device-signer-provisioning.md`](docs/device-signer-provisioning.md)
— enroll / rotate / revoke pattern for devices signing into a chain,
with a runnable demo at `crates/trusty-sqlite/examples/device_signer.rs`.
## Layout
```
trusty/
Cargo.toml workspace
crates/
core/
trusty-core/ locked primitives (hash, chain, payload, bundle)
trusty-store/ backend-agnostic Store trait
adapters/
trusty-memory/ in-memory backend (tests / ref impl)
trusty-sqlite/ rusqlite production backend
extensions/
trusty-sqlite-ext/ SQLite loadable extension (cdylib, standalone)
docs/ format + threat-model specs
```
## Build
Workspace-wide `cargo` commands are broken by a rusqlite feature conflict
(`loadable_extension` in `trusty-sqlite-ext` vs `bundled` in
`trusty-sqlite`). Use per-package form:
```
cargo build -p trusty-core -p trusty-store -p trusty-memory -p trusty-sqlite
cargo build -p trusty-sqlite-ext
cargo test -p trusty-core -p trusty-store -p trusty-memory -p trusty-sqlite
cargo test -p trusty-sqlite-ext
```
The extension ships as `trusty_sqlite_ext.{dll,so,dylib}`. Load from
sqlite3:
```
sqlite> .load ./trusty_sqlite_ext
sqlite> SELECT trusty_append('company_acme', '{"status":"active"}', 'https://source');
```