def cr.cts.dec.go
bend-osdev-crypto@0.1.0.0 · cts.bend:69
import bend-osdev-crypto@0.1.0.0/cts.bend as Cts
import Base
import bend-osdev-bytes@0.1.0.0/bytes.bend as B
import bend-osdev-crypto@0.1.0.0/octets.bend as O
69
70def cr.cts.dec.go(~K: Data, ~Blk: Data, ~bsize: Nat, ~dec: K -> Blk -> Blk, ~blk_of: B.Octets -> Maybe<&2, Blk>, ~blk_to: Blk -> B.Octets, ps: List<&2, List<&2, U32>>, +k: K, +v: B.Octets, acc: List<&2, B.Octets>) -> B.Octets:
71 match ps:
72 case Con{p, t}:
73 match t:
74 case Con{q, u}:
75 match u:
76 case Nil{}:
77 +cn = B.Octets.of_list(p)
78 +xs = B.Octets.of_list(q)
79 +d = B.Octets.len(xs)
80 +z = cr.cts.b(~K, ~Blk, ~dec, ~blk_of, ~blk_to, k, cn)
81 +x = B.Octets.append(xs, B.Octets.drop(d, z))
82 +pn = O.CrOct.xor(B.Octets.take(d, z), xs)
83 cr.cts.out(Con{pn, Con{O.CrOct.xor(cr.cts.b(~K, ~Blk, ~dec, ~blk_of, ~blk_to, k, x), v), acc}})
84 case Con{r, w}:
85 +c = B.Octets.of_list(p)
86 cr.cts.dec.go(~K, ~Blk, ~bsize, ~dec, ~blk_of, ~blk_to, Con{q, Con{r, w}}, k, c, Con{O.CrOct.xor(cr.cts.b(~K, ~Blk, ~dec, ~blk_of, ~blk_to, k, c), v), acc})
87 case Nil{}:
88 cr.cts.out(Con{O.CrOct.xor(cr.cts.b(~K, ~Blk, ~dec, ~blk_of, ~blk_to, k, B.Octets.of_list(p)), v), acc})
89 case Nil{}:
90 cr.cts.out(acc)