def cmac.last

bend-osdev-cipher-modes@0.1.0.0 · cmac.bend:67

import bend-osdev-cipher-modes@0.1.0.0/cmac.bend as Cmac
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

67# the last block: whole, xor K1; partial (or empty), padded, xor K2
68def cmac.last(~K: Data, ~enc: K -> M.CmBlock -> M.CmBlock, full: Bool, +k: K, x: M.CmBlock, last: List<&2, U32>) -> M.CmBlock:
69  match full:
70    case True{}:
71      enc(k, M.CmBlock.xor(M.CmBlock.xor(x, M.cm.block_of(last)), cmac.k1(~K, ~enc, k)))
72    case False{}:
73      enc(k, M.CmBlock.xor(M.CmBlock.xor(x, M.cm.block_of(B.append(last, Con{128, Nil{}}))), cmac.k2(~K, ~enc, k)))

Uses (9)

Used by (1)