def CrLrw.encrypt

bend-osdev-crypto@0.1.0.0 · lrw.bend:135

import bend-osdev-crypto@0.1.0.0/lrw.bend as Lrw
import Base
import bend-osdev-bytes@0.1.0.0/bytes.bend as B
import bend-osdev-gf@0.1.0.0/gf128.bend as G
import bend-osdev-crypto@0.1.0.0/crypto.bend as Cr
import bend-osdev-crypto@0.1.0.0/modes.bend as Md

135# LRW on bytes: a message of whole blocks; the IV is the first block's
136# 16-byte big-endian index (CrBadIvLength, CrNotBlockMultiple otherwise)
137def CrLrw.encrypt(~K: Data, ~Blk: Data, ~bsize: Nat, ~enc: K -> Blk -> Blk, ~bxor: Blk -> Blk -> Blk, ~blk_of: B.Octets -> Maybe<&2, Blk>, ~blk_to: Blk -> B.Octets, kk: CrLrwKey<K>, +iv: B.Octets, m: B.Octets) -> Result<&2, &2, Cr.CrError, B.Octets>:
138  match kk:
139    case CrLrwKey{+k, +k2}:
140      do Result<&2, &2, Cr.CrError, B.Octets>:
141        i : G.Gf128 <- cr.lrw.index(iv)
142        bs : List<&2, Blk> <- Md.CrModes.blocks_of(~Blk, ~bsize, ~blk_of, m)
143        return Md.CrModes.octets_of(~Blk, ~blk_to, CrLrw.encrypt_blocks(~K, ~Blk, ~enc, ~bxor, ~blk_of, k, k2, i, bs))

Uses (14)

Used by (1)