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# Decryption over the pieces from the chaining value v
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)

Uses (13)

Used by (1)