def CmAes.xts_encrypt
bend-osdev-cipher-modes@0.1.0.0 · aes_modes.bend:39
import bend-osdev-cipher-modes@0.1.0.0/aes_modes.bend as AesModes
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
import bend-osdev-cipher-modes@0.1.0.0/aes.bend as X
import bend-osdev-cipher-modes@0.1.0.0/xts.bend as T
39
40def CmAes.xts_encrypt(+key: B.Octets, i: B.Octets, p: B.Octets) -> Result<&2, &2, M.CmError, B.Octets>:
41 +n = B.Octets.len(key)
42 +h = Nat.div(n, 2n)
43 do Result<&2, &2, M.CmError, B.Octets>:
44 M.cm.check(Bool.or(Nat.is_eq(n, 32n), Nat.is_eq(n, 64n)), M.CmBadKeyLength{n})
45 k1 : X.CmAesKey <- X.CmAes.key(B.Octets.take(h, key))
46 k2 : X.CmAesKey <- X.CmAes.key(B.Octets.drop(h, key))
47 T.Xts.encrypt(~X.CmAesKey, ~X.CmAes.encrypt, k1, k2, i, p)