def echainiv
bend-osdev-aead@0.1.0.0 · check.bend:182
import bend-osdev-aead@0.1.0.0/check.bend as Check
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-crypto@0.1.0.0/crypto.bend as Cr
import bend-osdev-crypto@0.1.0.0/inst_cm.bend as CM
import bend-osdev-crypto@0.1.0.0/hmac.bend as Hm
import bend-osdev-aead@0.1.0.0/authenc.bend as Au
import bend-osdev-aead@0.1.0.0/echainiv.bend as Ec
182def echainiv(+ak: B.Octets, +ck: B.Octets, +salt: B.Octets, +seq: B.Octets, +a: B.Octets, +p: B.Octets) -> String:
183 +r = ec.key(ak, ck, salt)
184 +c = Result.bind(&2, &2, Cr.CrError, Ec.AdEchainivKey<Au.AdAuthencKey<X.CmAesKey, Hm.CrHmacKey>, X.CmAesKey>, B.Octets, r, kk => Ec.AdEchainiv.seal(~Au.AdAuthencKey<X.CmAesKey, Hm.CrHmacKey>, ~X.CmAesKey, ~M.CmBlock, ~X.CmAes.encrypt, ~CM.CrBlk128.of_octets, ~CM.CrBlk128.to_octets, ~au.seal_k, kk, seq, a, p))
185 both(c, Result.bind(&2, &2, Cr.CrError, Ec.AdEchainivKey<Au.AdAuthencKey<X.CmAesKey, Hm.CrHmacKey>, X.CmAesKey>, B.Octets, r, kk => Result.bind(&2, &2, Cr.CrError, B.Octets, B.Octets, c, x => Ec.AdEchainiv.open(~Au.AdAuthencKey<X.CmAesKey, Hm.CrHmacKey>, ~X.CmAesKey, ~au.open_k, ~16n, kk, seq, a, x))))