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.