ROOSTby Axowl

Docs

Keys and purpose templates

A key is created with one word: its purpose. The purpose template sets what the key may do and fixes what it may never do. There is no attribute checklist and no switch that makes a private key exportable.

Create a key

roost key create --purpose code-signing --name release-signing
roost key create --purpose data-key --name data-key-eu --partition prod
roost key create --purpose tls --name tls-www --subject "CN=www.example.com"

Purpose templates

PurposeAlgorithmMayNever
code-signingECDSA P-256 or P-384, RSA-3072signdecrypt, export
documentECDSA P-256, RSA-3072signdecrypt, export
caECDSA P-384, RSA-3072sign (certificates)decrypt, export; approval required by default
tlsECDSA P-256, RSA-3072sign (handshake)export, wrap
data-keyAES-256-GCM, ARIA-256-GCMwrap, unwrap, encrypt small dataexport; decrypt bulk data inside the box
kekAES-256-KWPwrap, unwrapexport, encrypt data directly
hmacHMAC-SHA-256 / 384seal, verifyexport
agentECDSA P-256sign within limitsexport; approval required above limits

Birth record

Every key born inside Roost carries a birth record: the box serial, the time, the purpose, and a signature from two of the three chips. A key that was imported carries an import record instead, permanently. Auditors can tell the two apart.

roost key show release-signing

name        release-signing
purpose     code-signing
version     v3 (active) · v2 (verify-only) · v1 (retired)
born in     ROOST-26-0001 · 2026-09-02 · signed by 2 of 3 chips
policy      approval required (2 seals) · limit 50/h
export      never

Versions and rotation

A key has versions. The active version signs or wraps; older versions verify or unwrap until they are retired. Rotation is scheduled or on demand and needs the key's approval policy.

StateSigns / wrapsVerifies / unwrapsRetire
Standbynono—
Activeyesyes—
Verify-only / decrypt-onlynoyeswhen no record depends on it
Retirednono—
roost key rotate data-key-eu            # v2 becomes active, v1 decrypt-only
roost key retire data-key-eu --version v1   # refused while 0 < records still on v1
A version that records still depend on cannot be retired. The console shows how many records remain, and the count must reach zero first.

Partitions

A key lives in one partition. See Partitions.