Skip to content

Config Examples

Copy-paste configs for common scenarios. All files go in .simple-ots/config.toml.


Minimal — no identity, no path disclosure

toml
# Prove only that files existed at a point in time.
# No DID, no path. Maximum privacy.
dids           = []
path_variants  = ["null"]
include_no_did = true

Each file gets exactly one leaf. The leaf contains only content_sha256 and datetime.
Use this when you need "file existed at T" and nothing else.


Single identity, all path variants

toml
# One DID, three path representations per file.
# Standard selective-disclosure setup.
dids           = ["did:web:example.com"]
path_variants  = ["null", "filename", "relative"]
include_no_did = true

Leaves per file: 3 path variants × 2 DID variants (null + 1 DID) = 6 leaves.

You can later reveal any of:

  • Content-only (no path, no identity)
  • Content + filename (no directory, no identity)
  • Content + relative path (no identity)
  • Content + DID (no path)
  • Content + filename + DID
  • Content + full path + DID

Dual identity — pseudonymous and real

toml
# Two DIDs: one for public disclosure, one for verified identity.
dids = [
  "did:web:bob.example.com",   # pseudonymous / public handle
  "did:web:yourname.com",         # real identity
]
path_variants  = ["null", "filename", "relative"]
include_no_did = true

Leaves per file: 3 × 3 = 9 leaves.

Selective disclosure lets you share, for example, the full-path + pseudonymous-DID proof to one party and the filename-only + real-DID proof to another — both provably in the same tree without cross-linking.


Maximum disclosure options

toml
# Generate all combinations for maximum future flexibility.
dids = [
  "did:web:identity-a.com",
  "did:web:identity-b.com",
  "did:web:identity-c.com",
]
path_variants  = ["null", "filename", "relative"]
include_no_did = true

Leaves per file: 3 × 4 = 12 leaves.
For 100 files: 1200 leaves, ~38 KB of hashes. Merkle depth ≈ 11 levels.


Path-only disclosure, no identity

toml
# Want to prove file paths but never reveal identity information.
dids           = []
path_variants  = ["filename", "relative"]
include_no_did = true

Leaves per file: 2 × 1 = 2 leaves (filename-null and relative-null).


Content-only + single DID, no path variants

toml
# Simplest useful config with identity: content + DID, nothing else.
dids           = ["did:web:mysite.com"]
path_variants  = ["null"]
include_no_did = false

Leaves per file: 1 × 1 = 1 leaf.
Minimal overhead, proves "this file was in my tree at T".


CI / automated stamping config

toml
# For CI pipelines: minimal overhead, record content hashes only.
# Stamp all source files on every commit via git ls-files | simple-ots.
dids           = []
path_variants  = ["relative"]
include_no_did = true

Every tracked file gets one leaf containing its content hash and relative path. Rebuilding the tree from the same commit produces the same root hash.


Choosing your DID method

DID MethodExampleNotes
did:webdid:web:example.comResolves to example.com/.well-known/did.json; requires domain ownership
did:keydid:key:z6Mk...Self-contained; no server needed; tied to a keypair
did:iondid:ion:EiA...Bitcoin-anchored; requires ION node or hosted resolver
Custom stringmy-project-v2No DID standard; works fine as a label, just not resolvable

Any non-empty string works as a did value — validation is not enforced.

Released under the Apache License 2.0.