defmodule KDF do def hl(:md5), do: 16 def hl(:sha), do: 20 def hl(:sha224), do: 28 def hl(:sha256), do: 32 def hl(:sha384), do: 48 def hl(:sha512), do: 64 def derive(h, d, len, x) do :binary.part(:lists.foldr(fn i, a -> :crypto.hash(h, d <> <> <> x) <> a end, <<>>, :lists.seq(1,round(Float.ceil(len/hl(h))))), 0, len) end end