We never bounds check `salt_length`. What happens if you put enormous (or tiny?) numbers in for it?