def stream_step

qasim-bend-kit@0.1.0.2 · proof/AES_NistCtrProof.bend:13

import qasim-bend-kit@0.1.0.2/proof/AES_NistCtrProof.bend as AESNistCtrProof
import Base
import qasim-bend-kit@0.1.0.2/libs/AES256GCMCore.bend as Core

13def stream_step(+remaining: Nat, +fuel: Nat, +words: List<&2, U32>, +counter: List<&2, U32>, +block: List<&2, U32>,
14    count: {remaining == 1n+fuel : Nat}, same: {Core.aes256_encrypt_expanded(words, counter) == block : List<&2, U32>}) ->
15    {Core.gcm_ctr_stream_exact.go(remaining, words, counter, Nil{}) ==
16     Core.aes_byte_at(block, 0n) <> Core.gcm_ctr_stream_exact.go(fuel, words, Core.gcm_inc32(counter), List.tail(&2, U32, block)) : List<&2, U32>}:
17    Equal.trans(List<&2, U32>, Core.gcm_ctr_stream_exact.go(remaining, words, counter, Nil{}),
18        Core.gcm_ctr_stream_exact.go(1n+fuel, words, counter, Nil{}),
19        Core.aes_byte_at(block, 0n) <> Core.gcm_ctr_stream_exact.go(fuel, words, Core.gcm_inc32(counter), List.tail(&2, U32, block)),
20        Equal.cong(Nat, List<&2, U32>, n => Core.gcm_ctr_stream_exact.go(n, words, counter, Nil{}), remaining, 1n+fuel, count),
21        Equal.cong(List<&2, U32>, List<&2, U32>, value =>
22            Core.aes_byte_at(value, 0n) <> Core.gcm_ctr_stream_exact.go(fuel, words, Core.gcm_inc32(counter), List.tail(&2, U32, value)),
23            Core.aes256_encrypt_expanded(words, counter), block, same))

Uses (10)

Used by (5)