~/bend-docscommunity

proof/AES_BlockBridgeProof.bend checks

raw source on the hub · import qasim-bend-kit@0.1.0.2/proof/AES_BlockBridgeProof.bend as AES_BlockBridgeProof

2 imports
import Base
import ../libs/AES256GCMCore.bend as Core

Definitions

def rounds_input_matches source · line 5 · raw

@+fuel:Nat -> @+words:List<&2, U32> -> @+block:List<&2, U32> -> @+initial:List<&2, U32> -> @+expected:List<&2, U32> -> @initial_match:{0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes_add_key(block, words, 0n) == initial : List<&2, U32>} -> @rounds_match:{0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes_rounds.go(fuel, initial, words, 1n) == expected : List<&2, U32>} -> {0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes_rounds.go(fuel, 0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes_add_key(block, words, 0n), words, 1n) == expected : List<&2, U32>}

Keep fuel symbolic while substituting the certified initial state.

def expanded_block_from_initial source · line 20 · raw

@+words:List<&2, U32> -> @+block:List<&2, U32> -> @+initial:List<&2, U32> -> @+expected:List<&2, U32> -> @initial_match:{0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes_add_key(block, words, 0n) == initial : List<&2, U32>} -> @rounds_match:{0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes_rounds.go(13n, initial, words, 1n) == expected : List<&2, U32>} -> {0xaca801afcf3e822677fd6d06895d2c71/libs/AES256GCMCore.aes256_encrypt_expanded(words, block) == expected : List<&2, U32>}

Establish the public-function conversion while inputs remain symbolic. A concrete caller then compares identical public applications instead of unfolding all fourteen rounds to recognize the internal implementation.