Signed. Sealed.

An email, signed and sealed.

Today's signet ring is a cryptographic key you hold in your hand, a YubiKey for instance. Whatever it signs, the recipient can verify: who the email is from, and that nobody changed a word on the way.

Self-hosted · eIDAS-qualified · Verifiable even on paper

In use at

Write, tap, sent

You write in your usual mail client. Emailwerk holds the email until the key has signed it.

Ablauf einer signierten E-Mail Mail client Gmail, Outlook, API Emailwerk holds the email, freezes the content Tap the key YubiKey and ID Austria, about 30 seconds Delivered signed, sealed, archived encrypted Approval may rest with a second person

Four layers on one email

Each answers a different question. Together they cover author, content and transport.

Die vier Signaturschichten 1 PGP on the key — who signed 2 Printed codes — readable even on paper 3 ID Austria in the PDF — equivalent to a handwritten signature 4 A seal over the finished email — any change shows

Layer 3 is the legally decisive one. The other three bind the content and protect it in transit.

Your own look Letterhead, address field, signature block.
Attachments signed too Each PDF gets its own signature page.
Encrypted archive The server only holds the public key.
Sign in by signing The same ceremony doubles as an OpenID Connect login: register with ID Austria instead of a password (qes-oidc, open source).

The signature block: still verifiable on paper

A conventional PDF signature, ID Austria's included, lives in the file's bytes. On paper it is gone: you can see neither that it was signed nor what was signed. So Emailwerk prints the signed content itself onto the signature page, as codes.

Aztec ISO/IEC 24778 carries the content. Byte-exact, 5 % error correction, no quiet zone — the tiles pack edge to edge in the code grid.
QR ISO/IEC 18004 carries the signing certificate (X.509) as a verify link in the URL fragment — any phone camera opens it, and the fragment never leaves the device.
Both codes above were generated with the production library, from a sample record rather than a real letter.
One record, many tiles The record (compressed CBOR, RFC 8949) is cut into parts of at most 500 bytes; each part carries a header with index and total and becomes its own Aztec tile. The verifier scans in any order and reassembles.
Capacity An ordinary letter yields one or two tiles. A real nine-page tax form came to about forty — when the grid overflows, further tiles continue on follow-on pages, so there is no hard limit.
Attachments, sealed one by one Every ticked PDF runs the full chain itself: a signature over text and file hash, its own record, its own block page, its own qualified signature. The letter carries an attachment manifest with each file's SHA-256 — attachment and letter are chained together, and attachments are signed before the email so the manifest seals their final hashes.
Aufbau der Prüfcodes Verification record document text + attachment manifest (SHA-256 per file), signature, public key compressed CBOR Aztec-Codes the record, split across tiles beside the block Scan and verify offline signature.netsnek.com reads the codes, verifies in the browser — the content never leaves the phone next to it a QR carrying the signing certificate (X.509)

The codes carry what was signed — not merely that. One scan shows the text, compares the hashes and chains the certificate to the A-Trust root. That works on the PDF and on the printout alike, without having to trust the verification server.

A complete mail engine underneath

The unsigned everyday traffic runs on it too: confirmations, codes, notifications.

Eingänge, Warteschlange, Transporte INPUT GraphQL SMTP Templates Queue retry, delivery log TRANSPORT Gmail Own MTA SMTP DKIM signs for your own domain

Self-hosted and multi-tenant. Messages and keys stay on your own infrastructure.

Open Source

Building blocks of the signature chain, open on GitHub.

qes-oidc ID Austria QES login and a minimal OpenID Connect provider: the signing ceremony as authentication.
age-plugin-piv25519 age encryption bound to a YubiKey PIV key — the same key in your hand, used for the archive.