def gcm_zip_xor_valid

qasim-bend-kit@0.1.0.2 · libs/AES256GCMCore.bend:538

import qasim-bend-kit@0.1.0.2/libs/AES256GCMCore.bend as AES256GCMCore
import Base

538def gcm_zip_xor_valid(+bytes: List<&2, U32>, +stream: List<&2, U32>) ->
539    {gcm_bytes_valid(gcm_zip_xor(bytes, stream)) == True{} : Bool}:
540    match bytes stream:
541        case Nil{} _:
542            Equal.trans(Bool,
543                gcm_bytes_valid(gcm_zip_xor(Nil{}, stream)),
544                gcm_bytes_valid(Nil{}), True{},
545                Equal.cong(List<&2, U32>, Bool, gcm_bytes_valid,
546                    gcm_zip_xor(Nil{}, stream), Nil{},
547                    gcm_zip_xor_nil_left(stream)),
548                {==})
549        case _ Nil{}:
550            Equal.trans(Bool,
551                gcm_bytes_valid(gcm_zip_xor(bytes, Nil{})),
552                gcm_bytes_valid(Nil{}), True{},
553                Equal.cong(List<&2, U32>, Bool, gcm_bytes_valid,
554                    gcm_zip_xor(bytes, Nil{}), Nil{},
555                    gcm_zip_xor_nil_right(bytes)),
556                {==})
557        case byte <> tail stream_byte <> stream_tail:
558            recursive = gcm_zip_xor_valid(tail, stream_tail)
559            range = gcm_mask_byte_valid(U32.xor(byte, stream_byte))
560            head_changed = Equal.cong(Bool, Bool,
561                head => Bool.and(head,
562                    gcm_bytes_valid(gcm_zip_xor(tail, stream_tail))),
563                U32.is_lt(gcm_hex_mask(U32.xor(byte, stream_byte), 255), 256),
564                True{}, range)
565            tail_changed = Equal.cong(Bool, Bool,
566                valid => Bool.and(True{}, valid),
567                gcm_bytes_valid(gcm_zip_xor(tail, stream_tail)), True{},
568                recursive)
569            Equal.trans(Bool,
570                Bool.and(
571                    U32.is_lt(gcm_hex_mask(U32.xor(byte, stream_byte), 255), 256),
572                    gcm_bytes_valid(gcm_zip_xor(tail, stream_tail))),
573                Bool.and(True{}, gcm_bytes_valid(gcm_zip_xor(tail, stream_tail))),
574                True{}, head_changed,
575                Equal.trans(Bool,
576                    Bool.and(True{}, gcm_bytes_valid(gcm_zip_xor(tail, stream_tail))),
577                    Bool.and(True{}, True{}), True{}, tail_changed, {==}))

Uses (14)

Used by (2)