Ticket format
ticket = base64url(payload) "." base64url(signature) ; no padding
payload = UTF-8 JSON {"v":1,"typ":"roost-rearm","box","nonce","org","by","iat","exp"}
signature = ECDSA P-256 over the payload bytes with SHA-256, as r‖s (64 bytes, IEEE P1363)
byis the Owner's user ID.iatandexpare Unix seconds;expis 10 minutes afteriat.- Verify the signature over the payload bytes as received; do not re-serialize the JSON.
- The box accepts a ticket only when the signature verifies with its pinned key,
typisroost-rearm,boxis its own ID andnonceis the number it issued for this attempt. A nonce works once.
The same envelope (base64url payload, P-256 r‖s signature) is used by Roost for signed boot images.