extract pbkdf2 to an interface