{"version":"ratchet-receipt-v3","algorithm":"ed25519","current_kid":"ff7bb4e3fb21a0fe","public_key":"AFT2KCF1ZMpMPoN+JY1CGh36y0XmQC4qYIZdFxMoOWI=","keys":[{"kid":"ff7bb4e3fb21a0fe","public_key":"AFT2KCF1ZMpMPoN+JY1CGh36y0XmQC4qYIZdFxMoOWI=","algorithm":"ed25519","current":true}],"encoding":"base64 raw 32-byte public key; signature is base64 over the exact `body` bytes","verify":"Find the receipt's `kid`, take the matching public_key from `keys`, then ed25519_verify(public_key, body_bytes, signature).","note":"Retired keys stay published forever so old receipts remain verifiable. We keep the public half only; we cannot sign with a retired key, which is what rotation is for."}