def nonce_equal

qasim-bend-kit@0.1.0.2 · proof/AES_ConstructorProof.bend:111

import qasim-bend-kit@0.1.0.2/proof/AES_ConstructorProof.bend as AESConstructorProof
import Base
import qasim-bend-kit@0.1.0.2/libs/AES256GCM.bend as AES
import qasim-bend-kit@0.1.0.2/proof/AES_CertificateProof.bend as Certificate

111def nonce_equal(+bytes: List<&2, U32>,
112    +size: {List.length(&2, U32, bytes) == 12n : Nat},
113    +valid: {AES.bytes_valid(bytes) == True{} : Bool},
114    +expected: List<&2, U32>, same: {bytes == expected : List<&2, U32>}) ->
115    @+expected_size: {List.length(&2, U32, expected) == 12n : Nat} ->
116    @+expected_valid: {AES.bytes_valid(expected) == True{} : Bool} ->
117    {AES.Nonce{bytes, size, valid} ==
118     AES.Nonce{expected, expected_size, expected_valid} : AES.Nonce}:
119    %same :
120        @+expected_size: {List.length(&2, U32, _) == 12n : Nat} ->
121        @+expected_valid: {AES.bytes_valid(_) == True{} : Bool} ->
122        {AES.Nonce{bytes, size, valid} ==
123         AES.Nonce{_, expected_size, expected_valid} : AES.Nonce}
124    expected_size => expected_valid =>
125        Equal.trans(AES.Nonce, AES.Nonce{bytes, size, valid},
126            AES.Nonce{bytes, expected_size, valid},
127            AES.Nonce{bytes, expected_size, expected_valid},
128            Equal.cong({List.length(&2, U32, bytes) == 12n : Nat}, AES.Nonce,
129                proof => AES.Nonce{bytes, proof, valid}, size, expected_size,
130                Certificate.nat_unique(List.length(&2, U32, bytes), 12n,
131                    size, expected_size)),
132            Equal.cong({AES.bytes_valid(bytes) == True{} : Bool}, AES.Nonce,
133                proof => AES.Nonce{bytes, expected_size, proof}, valid,
134                expected_valid, Certificate.bool_unique(AES.bytes_valid(bytes),
135                    True{}, valid, expected_valid)))

Uses (11)

Used by (1)