Ed25519 signatures
Every transaction is signed with an Ed25519 keypair derived from the signing DID. The signing scheme ised25519-dalek v2 (Rust), @noble/ed25519 v2 (TypeScript), and crypto/ed25519 (Go).
Sigil signs over the canonicalised transaction envelope:
sigil/tx/v1 domain separator prevents signature reuse across protocols. JCS canonicalisation ensures the byte representation is reproducible regardless of language or library.
Key derivation uses HKDF-SHA256 with the parent DID as salt:
oas/oas/docs/oas/SPECIFICATION.md.
BLAKE3 hashing
BLAKE3 is the only hash function used in consensus. It hashes:- Transaction envelopes for signing.
- Address derivation from DIDs.
- State root computation.
- NFT and collection IDs.
- Storage commitments.
- Lineage anchor commitments.
FROST threshold signatures
Multi-human roots (did:oas:sigil:mhr:...) sign under FROST, a t-of-n threshold Ed25519 scheme. The signature is verifiable as a standard Ed25519 signature against the group public key. Verifiers do not need to know which t signers participated.
FROST is used for:
- Multi-human root signing.
- Recovery ceremonies (guardian thresholds).
- Foundation and treasury multisigs.
- Username dispute resolution (3-of-5 multisig).
aegis/aegis-keys/src/threshold.rs. Distributed Key Generation (DKG) is run off-chain via the Aegis ceremony coordinator; the resulting group public key is registered on-chain via RegisterMhrRoot.
JCS canonical serialisation
Sigil signs and hashes over JCS-canonicalised JSON (RFC 8785). JCS gives deterministic byte representations:- Object keys sorted lexicographically.
- Numbers serialised per ECMAScript
Number.prototype.toString. - Strings escaped per JSON spec, with UTF-8 normalisation.
- No insignificant whitespace.
node/sigil-core/src/jcs.rs (Rust), oas/oas-sdk-typescript/src/jcs.ts (TypeScript), and the WASM bridge for Go/Python/Swift/Kotlin.
What Sigil does not use
- No secp256k1. Ed25519 is faster, has better implementations, and is misuse-resistant.
- No SHA-2 in consensus. BLAKE3 replaces it everywhere in the state machine. SHA-256 appears only inside HKDF and inside OAS-external bridges.
- No BLS. FROST gives threshold Ed25519 without the BLS pairing dependency.
- No Keccak. Sigil does not aim for EVM compatibility.
- No ZK proofs in consensus. Validators verify state transitions directly. Optional ZK rollups remain a v2 research item; see no L0 for v1.