AlphaProof Code: Verifying Signal’s Security at the Machine-Code Level

Paper › LibsignalBinary/Specifications/LibsignalSpqrV1 › Hooks.leanTier 2 · definitions

Hooks.lean🔗

Tier 2 · definitions used by the symbolic proof 3 headline theorems depend on it 10 of 360 lines trusted trust banner B3, trusted in part source ↗

Read the definitions shown. Only the declarations that the headline statements use are shown, with the namespace, section, open and variable commands needed to read them. The collapsed runs are theorems, which Lean checks, and definitions that no headline statement uses.

SPQR V1: extern-stub contracts (SpqrHooks) and TOKEN precondition (TokenInit)

Trusted in part. Only the CliElfLib theorems of {Computational,Symbolic}/Theorems/ use this file (headlineδ does not; see Computational/docs/TRUSTED_BASE.md); they unfold only these 10: libcruxHmacName, mlkemDecapsName, mlkemEncaps1Name, mlkemEncaps2Name, mlkemFromSeedName, mlkemPk1Name, mlkemPk2Name, mlkemValidatePkName, tokenName, tokenStorageName.

Defines the symbol names, image offsets, and Spec contracts (mlkemFromSeedSpec, mlkemPk1Spec, mlkemPk2Spec, mlkemEncaps1Spec, mlkemEncaps2Spec, mlkemDecapsSpec, mlkemValidatePkSpec, libcruxHmacSpec, plus onceCallName) bundled as SpqrHooks, together with TokenInit (tokenStorageOff, tokenOnceOff), which fixes the CPU feature-detection cells so that spqr takes the unaccelerated software $\mathrm{GF}(2^{16})$ path (DEV-SPQR1). Guards.lean verifies all symbol and stub offsets against the linked image.

@[expose] public section
namespace CryptoVerification.LibsignalSpqrV1
open Arm64 ProofLib CryptoGames CryptoGames.HMAC CryptoGames.LibsignalSession
open CryptoVerification.RustHeap CryptoVerification.LibsignalSessionRepr
open CryptoVerification.LibsignalTripleRatchet
18 declarations not shown (lines 42–86): theorems, which Lean checks, or definitions that no headline statement uses

CryptoVerification.LibsignalSpqrV1.mlkemFromSeedName, CryptoVerification.LibsignalSpqrV1.mlkemFromSeedOff, CryptoVerification.LibsignalSpqrV1.mlkemPk1Name, CryptoVerification.LibsignalSpqrV1.mlkemPk1Off, CryptoVerification.LibsignalSpqrV1.mlkemPk2Name, CryptoVerification.LibsignalSpqrV1.mlkemPk2Off, CryptoVerification.LibsignalSpqrV1.mlkemEncaps1Name, CryptoVerification.LibsignalSpqrV1.mlkemEncaps1Off, CryptoVerification.LibsignalSpqrV1.mlkemValidatePkName, CryptoVerification.LibsignalSpqrV1.mlkemValidatePkOff, CryptoVerification.LibsignalSpqrV1.libcruxHmacName, CryptoVerification.LibsignalSpqrV1.libcruxHmacOff, CryptoVerification.LibsignalSpqrV1.mlkemEncaps2Name, CryptoVerification.LibsignalSpqrV1.mlkemEncaps2Off, CryptoVerification.LibsignalSpqrV1.mlkemDecapsName, CryptoVerification.LibsignalSpqrV1.mlkemDecapsOff, CryptoVerification.LibsignalSpqrV1.onceCallName, CryptoVerification.LibsignalSpqrV1.onceCallOff

2. TOKEN & STORAGE.0 (TokenInit)

abbrev tokenStorageNameL90–94 ↗#

spqr::encoding::gf::check_accelerated::use_accelerated::STORAGE.0 (0x9a038), a 1-byte AtomicU8 storing whether PMULL-accelerated GF(2¹⁶) multiplication is enabled (0#8 = false, 1#8 = true, 0xff#8 = uninitialized).

abbrev tokenStorageName : String := "spqr::encoding::gf::check_accelerated::use_accelerated::STORAGE.0"
2 declarations not shown (lines 95–96): theorems, which Lean checks, or definitions that no headline statement uses

CryptoVerification.LibsignalSpqrV1.tokenStorageOff, CryptoVerification.LibsignalSpqrV1.tokenStorageAddr

abbrev tokenNameL98–102 ↗#

spqr::encoding::gf::check_accelerated::TOKEN (0x9a040), a 16-byte std::sync::LazyLock<InitToken> whose std::sys::sync::once::futex::Once AtomicU32 state word resides at offset +8 (0x9a048, 0#32 = COMPLETE).

abbrev tokenName : String := "spqr::encoding::gf::check_accelerated::TOKEN"
22 declarations not shown (lines 103–358): theorems, which Lean checks, or definitions that no headline statement uses

CryptoVerification.LibsignalSpqrV1.tokenOff, CryptoVerification.LibsignalSpqrV1.tokenOnceOff, CryptoVerification.LibsignalSpqrV1.tokenOnceAddr, CryptoVerification.LibsignalSpqrV1.TokenInit, CryptoVerification.LibsignalSpqrV1.MlkemFromSeedCall.seedA, CryptoVerification.LibsignalSpqrV1.MlkemFromSeedCall, CryptoVerification.LibsignalSpqrV1.MlkemFromSeedCall.seed, CryptoVerification.LibsignalSpqrV1.MlkemFromSeedCall.kpA, CryptoVerification.LibsignalSpqrV1.mlkemFromSeedSpec, CryptoVerification.LibsignalSpqrV1.MlkemKpRefCall.kpA, CryptoVerification.LibsignalSpqrV1.MlkemKpRefCall, CryptoVerification.LibsignalSpqrV1.MlkemKpRefCall.kp, CryptoVerification.LibsignalSpqrV1.mlkemPk1Spec, CryptoVerification.LibsignalSpqrV1.mlkemPk2Spec, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.hdr, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.esA, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.rand, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.hdrA, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.randA, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.ret, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call.ssA, CryptoVerification.LibsignalSpqrV1.MlkemEncaps1Call, CryptoVerification.LibsignalSpqrV1.mlkemEncaps1Spec, CryptoVerification.LibsignalSpqrV1.MlkemEncaps2Call.ek, CryptoVerification.LibsignalSpqrV1.MlkemEncaps2Call.ret, CryptoVerification.LibsignalSpqrV1.MlkemEncaps2Call.es, CryptoVerification.LibsignalSpqrV1.MlkemEncaps2Call, CryptoVerification.LibsignalSpqrV1.MlkemEncaps2Call.ekA, CryptoVerification.LibsignalSpqrV1.MlkemEncaps2Call.esA, CryptoVerification.LibsignalSpqrV1.mlkemEncaps2Spec, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.dkA, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.ct2, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.ret, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.ct1A, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.ct1, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.ct2A, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall.dk, CryptoVerification.LibsignalSpqrV1.MlkemDecapsCall, CryptoVerification.LibsignalSpqrV1.mlkemDecapsSpec, CryptoVerification.LibsignalSpqrV1.MlkemValidatePkCall.hdr, CryptoVerification.LibsignalSpqrV1.MlkemValidatePkCall.ek, CryptoVerification.LibsignalSpqrV1.MlkemValidatePkCall, CryptoVerification.LibsignalSpqrV1.MlkemValidatePkCall.ekA, CryptoVerification.LibsignalSpqrV1.MlkemValidatePkCall.hdrA, CryptoVerification.LibsignalSpqrV1.mlkemValidatePkSpec, CryptoVerification.LibsignalSpqrV1.LibcruxHmacCall.ret, CryptoVerification.LibsignalSpqrV1.LibcruxHmacCall, CryptoVerification.LibsignalSpqrV1.LibcruxHmacCall.key, CryptoVerification.LibsignalSpqrV1.LibcruxHmacCall.data, CryptoVerification.LibsignalSpqrV1.LibcruxHmacCall.keyA, CryptoVerification.LibsignalSpqrV1.LibcruxHmacCall.dataA, CryptoVerification.LibsignalSpqrV1.libcruxHmacSpec, CryptoVerification.LibsignalSpqrV1.SpqrHooks.encaps1, CryptoVerification.LibsignalSpqrV1.SpqrHooks.hmac, CryptoVerification.LibsignalSpqrV1.SpqrHooks, CryptoVerification.LibsignalSpqrV1.SpqrHooks.fromSeed, CryptoVerification.LibsignalSpqrV1.SpqrHooks.validatePk, CryptoVerification.LibsignalSpqrV1.SpqrHooks.decaps, CryptoVerification.LibsignalSpqrV1.SpqrHooks.pk1, CryptoVerification.LibsignalSpqrV1.SpqrHooks.encaps2, …

end CryptoVerification.LibsignalSpqrV1