~/bend-docscommunity

proofs/math/random/chacha8/block.bend checks

raw source on the hub · import bend-collections-laws-math@1.0.0.0/proofs/math/random/chacha8/block.bend as Block

5 imports
import Base
import ../../../../src/math/u64.bend as W
import ../../../../src/math/random/chacha8/block.bend as B
import ../../../../spec/math/random/chacha8rand.bend as S
import ./rounds.bend as R

Definitions

def drs source · line 11 · raw

@n:Nat -> @v:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.Vector -> 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.Vector

n double rounds, the model of the implementation's dr(dr(dr(dr(x))))

def drs_correct source · line 18 · raw

@+n:Nat -> @+v:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.Vector -> {0xf86f5f1d9a594d5a5cff999100e01d03/proofs/math/random/chacha8/rounds.vec(drs(n, v)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.double_rounds(n, 0xf86f5f1d9a594d5a5cff999100e01d03/proofs/math/random/chacha8/rounds.vec(v)) : List<&2, U32>}

def rounds_correct source · line 28 · raw

@+k:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.Key -> @+ctr:U32 -> {0xf86f5f1d9a594d5a5cff999100e01d03/proofs/math/random/chacha8/rounds.vec(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.dr(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.dr(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.dr(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.dr(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.init(k, ctr)))))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.double_rounds(4n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.initial(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.key_list(k), ctr)) : List<&2, U32>}

the eight rounds on the initial state

def block_correct source · line 34 · raw

@+k:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.Key -> @+ctr:U32 -> {0xf86f5f1d9a594d5a5cff999100e01d03/proofs/math/random/chacha8/rounds.vec(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.block(k, ctr)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.c2sp_block(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.key_list(k), ctr) : List<&2, U32>}

THEOREM: the implementation's block is C2SP's block ctr

def group_correct source · line 44 · raw

@+k:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.Key -> @+ctr:U32 -> {0xf86f5f1d9a594d5a5cff999100e01d03/src/math/random/chacha8/block.group(k, ctr) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.words64(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.group(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/random/chacha8rand.key_list(k), ctr)) : List<&2, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64>}

THEOREM: the implementation's group is C2SP's four permuted blocks ctr .. ctr + 3, read as little-endian 64-bit words