def pd.go

bend-osdev-cbc@0.1.0.0 · PROOF_padded.bend:131

import bend-osdev-cbc@0.1.0.0/PROOF_padded.bend as PROOFPadded
import Base
import bend-osdev-bytes@0.1.1.0/bytes.bend as B
import bend-osdev-mode-core@0.1.0.0/mode_core.bend as M
import bend-osdev-pkcs7@0.1.0.0/pkcs7.bend as P
import bend-osdev-cbc@0.1.0.0/cbc.bend as C

131def pd.go(~K: Data, ~dec: K -> M.CmBlock -> M.CmBlock, +k: K, +iv: B.Octets, +mp: B.Octets, +m: B.Octets, e2: {P.Pkcs7.unpad(16n, mp) == Done{m} : Result<&2, &2, M.CmError, B.Octets>}, r: Result<&2, &2, M.CmError, B.Octets>) -> {Result.bind(&2, &2, M.CmError, B.Octets, B.Octets, r, c => C.Cbc.decrypt(~K, ~dec, k, iv, c)) == Done{mp} : Result<&2, &2, M.CmError, B.Octets>} -> {Result.bind(&2, &2, M.CmError, B.Octets, B.Octets, r, c => C.Cbc.decrypt_padded(~K, ~dec, k, iv, c)) == Done{m} : Result<&2, &2, M.CmError, B.Octets>}:
132  match r:
133    case Fail{e}:
134      e1 => Empty.absurd({Fail{e} == Done{m} : Result<&2, &2, M.CmError, B.Octets>}, pd.fd(B.Octets, e, mp, e1))
135    case Done{+c}:
136      e1 => pd.dc(~K, ~dec, k, iv, mp, m, e2, c, Nat.is_lt(0n, B.Octets.len(c)))({==})(e1)

Uses (13)

Used by (1)