def aes_hex_bytes_split_before_period

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

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

377def aes_hex_bytes_split_before_period(+bytes: List<&2, U32>, +suffix: String) ->
378    {String.split(AES.hex_bytes(bytes) ++ "." ++ suffix, Chr{46}) ==
379     AES.hex_bytes(bytes) <> String.split(suffix, Chr{46}) : List<&2, String>}:
380    match bytes:
381        case Nil{}: {==}
382        case byte <> tail:
383            +normalized = AES.hex_mask(byte, 255)
384            +encoded_tail = AES.hex_bytes(tail)
385            +suffix_fields = String.split(suffix, Chr{46})
386            +tail_text = encoded_tail ++ "." ++ suffix
387            +high = U32.shrn(normalized, 4n)
388            +low = normalized
389            tail_proof = aes_hex_bytes_split_before_period(tail, suffix)
390            low_shift = Equal.cong(List<&2, String>, List<&2, String>,
391                parts => String.split.fin(AES.hex_digit(low), parts,
392                    Char.is_eq(AES.hex_digit(low), Chr{46})),
393                String.split(tail_text, Chr{46}), encoded_tail <> suffix_fields,
394                tail_proof)
395            low_join = Equal.trans(List<&2, String>,
396                String.split.fin(AES.hex_digit(low), String.split(tail_text, Chr{46}),
397                    Char.is_eq(AES.hex_digit(low), Chr{46})),
398                String.split.push(AES.hex_digit(low), encoded_tail <> suffix_fields),
399                SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields,
400                Equal.trans(List<&2, String>,
401                    String.split.fin(AES.hex_digit(low), String.split(tail_text, Chr{46}),
402                        Char.is_eq(AES.hex_digit(low), Chr{46})),
403                    String.split.fin(AES.hex_digit(low), encoded_tail <> suffix_fields,
404                        Char.is_eq(AES.hex_digit(low), Chr{46})),
405                    String.split.push(AES.hex_digit(low), encoded_tail <> suffix_fields),
406                    low_shift, aes_split_hex_digit_no_dot(low,
407                        encoded_tail <> suffix_fields)),
408                aes_split_push_cons(low, encoded_tail, suffix_fields))
409            inner_split = Equal.trans(List<&2, String>,
410                String.split(SCon{AES.hex_digit(low), tail_text}, Chr{46}),
411                String.split.fin(AES.hex_digit(low), String.split(tail_text, Chr{46}),
412                    Char.is_eq(AES.hex_digit(low), Chr{46})),
413                SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields,
414                {==}, low_join)
415            high_shift = Equal.cong(List<&2, String>, List<&2, String>,
416                parts => String.split.fin(AES.hex_digit(high), parts,
417                    Char.is_eq(AES.hex_digit(high), Chr{46})),
418                String.split(SCon{AES.hex_digit(low), tail_text}, Chr{46}),
419                SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields,
420                inner_split)
421            high_join = Equal.trans(List<&2, String>,
422                String.split.fin(AES.hex_digit(high),
423                    String.split(SCon{AES.hex_digit(low), tail_text}, Chr{46}),
424                    Char.is_eq(AES.hex_digit(high), Chr{46})),
425                String.split.push(AES.hex_digit(high),
426                    SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields),
427                SCon{AES.hex_digit(high), SCon{AES.hex_digit(low), encoded_tail}} <> suffix_fields,
428                Equal.trans(List<&2, String>,
429                    String.split.fin(AES.hex_digit(high),
430                        String.split(SCon{AES.hex_digit(low), tail_text}, Chr{46}),
431                        Char.is_eq(AES.hex_digit(high), Chr{46})),
432                    String.split.fin(AES.hex_digit(high),
433                        SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields,
434                        Char.is_eq(AES.hex_digit(high), Chr{46})),
435                    String.split.push(AES.hex_digit(high),
436                        SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields),
437                    high_shift, aes_split_hex_digit_no_dot(high,
438                        SCon{AES.hex_digit(low), encoded_tail} <> suffix_fields)),
439                aes_split_push_cons(high,
440                    SCon{AES.hex_digit(low), encoded_tail}, suffix_fields))
441            Equal.trans(List<&2, String>,
442                String.split(AES.hex_bytes(byte <> tail) ++ "." ++ suffix, Chr{46}),
443                String.split(SCon{AES.hex_digit(high), SCon{AES.hex_digit(low), tail_text}}, Chr{46}),
444                AES.hex_bytes(byte <> tail) <> suffix_fields,
445                {==}, Equal.trans(List<&2, String>,
446                    String.split(SCon{AES.hex_digit(high), SCon{AES.hex_digit(low), tail_text}}, Chr{46}),
447                    SCon{AES.hex_digit(high), SCon{AES.hex_digit(low), encoded_tail}} <> suffix_fields,
448                    AES.hex_bytes(byte <> tail) <> suffix_fields,
449                    high_join, {==}))

Uses (17)

Used by (1)