def key_certificates

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

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

6def key_certificates(+bytes: List<&2, U32>,
7    +first_size: {List.length(&2, U32, bytes) == 32n : Nat},
8    +first_valid: {AES.bytes_valid(bytes) == True{} : Bool},
9    +second_size: {List.length(&2, U32, bytes) == 32n : Nat},
10    +second_valid: {AES.bytes_valid(bytes) == True{} : Bool}) ->
11    {AES.SecretKey{bytes, first_size, first_valid} ==
12     AES.SecretKey{bytes, second_size, second_valid} : AES.SecretKey}:
13    Equal.trans(AES.SecretKey,
14        AES.SecretKey{bytes, first_size, first_valid},
15        AES.SecretKey{bytes, second_size, first_valid},
16        AES.SecretKey{bytes, second_size, second_valid},
17        Equal.cong({List.length(&2, U32, bytes) == 32n : Nat}, AES.SecretKey,
18            proof => AES.SecretKey{bytes, proof, first_valid},
19            first_size, second_size,
20            Certificate.nat_unique(List.length(&2, U32, bytes), 32n,
21                first_size, second_size)),
22        Equal.cong({AES.bytes_valid(bytes) == True{} : Bool}, AES.SecretKey,
23            proof => AES.SecretKey{bytes, second_size, proof},
24            first_valid, second_valid,
25            Certificate.bool_unique(AES.bytes_valid(bytes), True{},
26                first_valid, second_valid)))

Uses (11)

Used by (1)