The open protocol

One protocol for evidence anyone can verify.

GOVP is not an app and not a service. It is an open, global protocol: a single record format, a single canonicalization, a single conformance suite — implemented in several languages, published as free software, and verifiable by anyone without trusting the issuer or us.

GOVP-1 wire format Ed25519 · SHA-256 Offline verification Free software · MIT

Architecture

Four layers, one honest claim at each

GOVP is more than "a signed hash". It stacks a record, a source-verification layer, an independence-weighted mesh and a recomputable conclusion — and each layer states exactly what it does and does not prove.

Layer 1
The record
A signed, self-describing GOVP-1 object binding a claim to a domain identity.
Layer 2
Sources (SVL)
Every heterogeneous input is verified by the rules of its own type before it counts.
Layer 3
The mesh
Independent witnesses; trust weighted by number, independence and quality.
Layer 4
Conclusion
A recomputable DAG node, verified end-to-end only if every input was.

Layer 1 · The record

GOVP-1: a portable, self-describing receipt

A GOVP-1 record is a small UTF-8 text file that carries its own public key and signature. It is self-contained: a verifier needs nothing but the record, and optionally the declared asset to confirm its hash. It can be published at a .well-known URL or kept entirely apart — the proof travels with the record.

# GOVP-1 public verification record Version: GOVP-1 Canonical: https://winery.example/.well-known/govp.txt Publisher: winery.example Asset-Type: document Asset-ID: aviso-legal Asset-SHA256: 71e5bb01f249ad18a551a218b0b5b9eb40263c64ae1c8f37dc48951622a54734 License: CC-BY-4.0 Profile: GOVP-BASIC Generated-At: 2026-05-31T10:00:00Z GOVP-ID: GOVP-DOC-39969a54190e Public-Key: A6EHv/POEL4dcN0Y50vAmWfk1jCbpQ1fHdyGZBJVMbg= Signature: uq+dPdfTRlEPPVOosgWAjpjAU+FO0E5SDl5Wo5m9RVK8Ysk/mAN907neMZMD7ISly/VF5Rxcq0JyKwHmjg9YAg==

This exact record is vector 01-valid-document in the conformance suite and passes the online verifier. The Canonical field binds the record to its issuing domain, so a record cannot be silently re-hosted under another identity.

Layer 1 · Canonicalization

One record, one signing input, one fingerprint

Before signing, the fields are normalized to a single canonical form so that semantically identical records always produce identical bytes — independent of field order or trailing whitespace. Each non-empty field (except Signature) becomes a lowercased key: value line; the lines are sorted alphabetically and prefixed with a domain separator. Verification recomputes this exact byte string.

# GOVP-1 signing input — domain-separated, sorted, deterministic DOMAIN = "GOVP::record.v1\0" lines = sort([ f"{k.lower()}: {v}\n" for k,v in fields if k != "signature" ]) msg = DOMAIN + "".join(lines) # issue sig = Ed25519_sign(issuer_sk, msg) # verify — by anyone, offline, no network assert Ed25519_verify(issuer_pk, sig, msg) assert sha256(msg).hex() == signing_input_sha256 # pinned by conformance
Domain separatorGOVP::record.v1\0 — prevents a signature being replayed as any other kind of message.
Field normalizationKeys lowercased; values trimmed (ASCII); NFC text normalization; empty fields dropped.
OrderingLines sorted alphabetically — no reliance on serialization order.
FingerprintSHA-256 over the canonical byte representation.
SignatureEd25519 (RFC 8032) over the domain-separated signing input.
Layer 1 · GOVP-ID

A content-derived identifier

The GOVP-ID is not assigned by a registry — it is derived from the content itself, so two parties independently arrive at the same identifier for the same asset. It cannot be minted to point at content it does not describe.

GOVP-ID = "GOVP-" + TYPECODE[asset_type] + "-" + sha256(asset_type | asset_id | asset_sha256)[:12] # e.g. document → DOC → GOVP-DOC-39969a54190e

The verifier recomputes the ID and rejects any record whose declared ID does not match its content.

Layer 1 · Time profiles

Honest about time — anchoring is a profile, not a promise

A bare record's Generated-At is asserted by the issuer. GOVP states this openly and makes independent time-anchoring an explicit profile, so the record declares exactly how strong its time claim is.

GOVP-BASIC
Integrity and authorship only. Generated-At is issuer-asserted and not anchored to external time — a determined issuer could backdate it. Use when ordering-in-time is not contested.
GOVP-RFC3161
The fixation is bound to an RFC 3161 trusted timestamp from an independent TSA, so the time no longer depends on the issuer.
GOVP-QTSP
Anchored by an eIDAS qualified timestamp (QTSP) for the strongest, legally-recognized time evidence in the EU.

Transparency logs and independent witnesses (Layer 3) provide a further, registry-free way to anchor ordering. The point is the same throughout GOVP: never imply a guarantee the record does not carry.

Layer 2 · Sources Verification Layer

No source validates itself

Real evidence is not one signed statement — it is many heterogeneous signals: in-toto attestations, sensors, robots, calibration certificates, firmware, PLC/ERP exports, human approvals. GOVP normalizes every source to a common model and then runs a type-specific verifier against it before it is allowed to count.

Each verifier checks the signature, checks that the origin is authorized in an anchor registry the source does not control, and applies the rules of that source type (range, validity window, revocation, provenance). The outcome is a verifiable state — never a bare true/false:

verified
Passed authenticity, authorization and type rules. Only these feed Layers 3–4.
failed
A check did not pass — signature, authorization or type rule.
expired
Outside its validity window.
revoked
Withdrawn by its anchor or a revocation list.
unavailable
Could not be fetched or checked right now.
declared_only
Present but unverifiable — recorded, never counted as evidence.

What "verified" means — and does not: that a signal passed the independent checks of its type (authenticity, authorization, validity), not that its value is physically true. The truth of the content is the issuer's responsibility. GOVP verifies the chain of trust of each signal and weights it by independence and quality; it does not replace an evaluator with formal guarantees.

Layer 3 · Mesh & trust

Trust you can compute, not assert

Verified sources feed a mesh of independent observers. Trust is not a badge — it is a number derived from how many independent, well-verified sources corroborate a claim. The model is deliberately hostile to Sybil attacks: a hundred sources controlled by one party do not out-weigh three genuinely independent ones.

Trust of a corroborated claim

T = V × I × Q
V — Verification
How many sources reached the verified state.
I — Independence
Effective, anti-Sybil independence between the sources.
Q — Quality
Strength of each source's verification (type, anchor, freshness).

Only sources in state verified contribute. The defensible sentence: "GOVP verifies each source by the rules of its type before including it, and trust is derived from the number, quality and independence of the sources that passed" — never "every signal is proven true".

Layer 4 · Conclusions

A recomputable end-to-end chain

Verified sources are chained in a DAG whose terminal node is a conclusion — itself recomputable. A conclusion is marked "verified end-to-end" only when every input in its subgraph passed real verification. Anyone can replay the graph and reach the same result.

Inputs
Verified sources
Each already at state verified via its own type verifier.
Graph
GOVP chain (DAG)
Sources and derived nodes linked by provenance.
Terminal
Conclusion node
Recomputable; end-to-end only if all inputs verified.
Conformance

One suite, byte-identical across languages

An open protocol is only real if independent implementations agree to the byte. GOVP ships GOVP-CORE-CONFORMANCE-1: golden vectors with pinned signing-input hashes, run against every reference implementation. A conforming implementation must produce the exact same canonical bytes, the exact same GOVP-ID, and the exact same pass/fail verdict.

Python JavaScript Kotlin PHP (libsodium)
# a conformance vector pins the exact bytes every implementation must reproduce "expected": { "format_ok": true, "govpid_ok": true, "signature_ok": true, "core_valid": true, "govp_id": "GOVP-DOC-39969a54190e", "signing_input_sha256": "d3263b7c87442418f76768caa4048fbad6fa108583837966a2ff04d7e1df26ff" }

The WordPress reference plugin bundles these vectors and a self-test, so an operator can prove, inside their own install, that it verifies byte-for-byte like the Python, JavaScript and Kotlin references.

Free software

Open by design, so the proof outlives the vendor

Evidence should not depend on trust; verification should not depend on a vendor. Every GOVP reference implementation is released as free software under the MIT license. The specification, the conformance vectors and the verifier are public and reproducible — if Gemacode disappeared tomorrow, every record would still verify.

  • Inspect the code. The verifier is open — read exactly how a record is checked.
  • Audit the process. The verification spec is public and reproducible byte-for-byte.
  • Run it yourself. Verify offline, on your own machine, with no account and no server.
  • Fork it. Reimplement from the spec in a few lines; the conformance suite keeps you honest.
Toward the FSF

GOVP is being prepared for submission to the Free Software Foundation Free Software Directory, starting with the WordPress reference implementation. The goal is an evidence protocol that belongs to the commons: openly specified, freely implementable, and governed in the open rather than owned as a product.

Boundaries

What the protocol deliberately does not claim

A precise protocol earns trust by being explicit about its limits.

Truth of contentGOVP proves a claim was published by a domain and is unaltered — not that the claim is true, legal, or that a physical event occurred as described.
Time (BASIC)Under GOVP-BASIC the date is issuer-asserted. Use GOVP-RFC3161, GOVP-QTSP or independent witnesses for provable time.
Local transparencyA site-local transparency log is a useful journal but is not public transparency — a compromised admin could rewrite it. Strong transparency needs external anchoring.
DurabilityVerification does not need the issuer to be alive, but it does need a surviving copy of the record (domain, mirror or exported bundle). Durability is availability, not magic.
Not a formal evaluatorGOVP verifies each source's chain of trust; it does not replace deterministic replay or bounded formal guarantees where those are required.
← Gemacode Research