def pkcs7.unpad.oct

bend-osdev-cipher-modes@0.1.0.0 · pkcs7.bend:65

import bend-osdev-cipher-modes@0.1.0.0/pkcs7.bend as Pkcs7
import Base
import bend-osdev-bytes@0.1.0.0/bytes.bend as B
import bend-osdev-cipher-modes@0.1.0.0/cipher_modes.bend as M

65# the value p of the last byte must be 1 to bs, and the last p bytes all p
66# (on Octets of n bytes, so that only those p bytes become a list)
67def pkcs7.unpad.oct(+bs: Nat, +m: B.Octets, +n: Nat) -> Result<&2, &2, M.CmError, B.Octets>:
68  +v = pkcs7.last(B.Octets.at(m, Nat.sub(n, 1n)), 0)
69  +p = U32.to_nat(v)
70  +good = Bool.and(Nat.is_lt(0n, p), Bool.and(Nat.is_le(p, bs), U32.is_eq(pkcs7.diff(B.Octets.to_list(B.Octets.drop(Nat.sub(n, p), m)), v, 0), 0)))
71  pkcs7.strip(good, n, p, m)

Uses (16)

Used by (1)