Passcode support

I believe this has reached parity with the current iOS native client.

I might still add a retry limit, but not as a first priority.