def aes_hex_bytes_mask_idempotent

qasim-bend-kit@0.1.0.2 · proof/AES_EnvelopeProof.bend:189

import qasim-bend-kit@0.1.0.2/proof/AES_EnvelopeProof.bend as AESEnvelopeProof
import Base
import qasim-bend-kit@0.1.0.2/libs/AES256GCM.bend as AES

189def aes_hex_bytes_mask_idempotent(+bytes: List<&2, U32>) ->
190    {AES.hex_bytes(aes_hex_mask_bytes(bytes)) == AES.hex_bytes(bytes) : String}:
191    match bytes:
192        case Nil{}: {==}
193        case byte <> tail:
194            +left_tail = AES.hex_bytes(aes_hex_mask_bytes(tail))
195            +right_tail = AES.hex_bytes(tail)
196            tail_equal = aes_hex_bytes_mask_idempotent(tail)
197            prefix_equal = aes_hex_byte_prefix_idempotent(byte, left_tail)
198            tail_congruent = Equal.cong(String, String,
199                rest => SCon{AES.hex_digit(U32.shrn(AES.hex_mask(byte, 255), 4n)),
200                    SCon{AES.hex_digit(AES.hex_mask(byte, 255)), rest}},
201                left_tail, right_tail, tail_equal)
202            Equal.trans(String,
203                SCon{AES.hex_digit(U32.shrn(
204                    AES.hex_mask(AES.hex_mask(byte, 255), 255), 4n)),
205                    SCon{AES.hex_digit(AES.hex_mask(
206                        AES.hex_mask(byte, 255), 255)), left_tail}},
207                SCon{AES.hex_digit(U32.shrn(AES.hex_mask(byte, 255), 4n)),
208                    SCon{AES.hex_digit(AES.hex_mask(byte, 255)), left_tail}},
209                SCon{AES.hex_digit(U32.shrn(AES.hex_mask(byte, 255), 4n)),
210                    SCon{AES.hex_digit(AES.hex_mask(byte, 255)), right_tail}},
211                prefix_equal, tail_congruent)

Uses (11)

Used by (1)