# ProVerif formal verification results — 2026-06-13T17:04:58Z # proverif Proverif 2.05. Cryptographic protocol verifier, by Bruno Blanchet, Vincent Cheval, and Marc Sylvestre ===== billing_token.pv ===== RESULT not attacker(apikey[]) is true. RESULT event(TokenAccepted(t)) ==> event(TokenIssued(t)) is true. ===== multi_recipient.pv ===== RESULT not attacker(dek[]) is true. RESULT not attacker(payload[]) is true. ===== remote_manifest.pv ===== RESULT event(Restored(g_1,oh_1)) ==> event(Uploaded(g_1,oh_1)) is true. ===== ratchet_fs.pv ===== RESULT not attacker_p1(msg[]) is true. # --- post-compromise security (PCS): NOT CLAIMED AS PROVEN --- # The query below closes, BUT ratchet_pcs.pv signs every ratchet ephemeral with # the long-term identity key, while the shipping qs-chat ratchet leaves ratchet # public keys UNSIGNED (chain-key authenticated only, like Signal). The model is # therefore a stronger-authentication variant, not the deployed protocol, so PCS # is listed as OPEN on the validation page. Tamarin (ratchet_pcs.spthy) did not # converge. Published for transparency, not counted among the proven properties. ===== ratchet_pcs.pv (non-faithful model; PCS remains OPEN) ===== RESULT not attacker_p1(msg[]) is true.