move init to a static factory
extract pbkdf2 to an interface