def cr.hkdf.expand
bend-osdev-crypto@0.1.0.0 · hkdf.bend:40
import bend-osdev-crypto@0.1.0.0/hkdf.bend as Hkdf
import Base
import bend-osdev-bytes@0.1.0.0/bytes.bend as B
import bend-osdev-crypto@0.1.0.0/crypto.bend as Cr
import bend-osdev-crypto@0.1.0.0/hmac.bend as Hm
40def cr.hkdf.expand(~bsize: Nat, ~dsize: Nat, ~digest: B.Octets -> B.Octets, ok: Bool, +prk: B.Octets, +info: B.Octets, +len: Nat) -> Result<&2, &2, Cr.CrError, B.Octets>:
41 match ok:
42 case False{}:
43 Fail{Cr.CrBadOutputLength{len}}
44 case True{}:
45 +n = Nat.div(Nat.add(len, Nat.sub(dsize, 1n)), dsize)
46 +ts = cr.hkdf.blocks(~digest, n, Hm.CrHmac.key(~bsize, ~digest, prk), info, B.Octets.empty(), 1, Nil{})
47 Done{B.Octets.take(len, B.Octets.concat(cr.hkdf.rev(ts, Nil{})))}