revokeRecoveryKey

Revokes the user's active recovery key in one atomic step. In this order:

  1. the user never registered a key: RecoveryKeyRevocationResult.NOT_CONFIGURED;

  2. the key is revoked and the revocation with RecoveryKeyRevocationTransition.revocationId revoked it: RecoveryKeyRevocationResult.ALREADY_APPLIED, nothing written;

  3. the key is revoked (by another revocation), or its key or epoch differ from the expected ones, or the authorizing device's registration differs from the expected one: RecoveryKeyRevocationResult.CONFLICT, nothing written;

  4. the epoch is Long.MAX_VALUE: RecoveryKeyRevocationResult.EPOCH_EXHAUSTED;

  5. prunes and claims the nonce as rotateRecoveryKey does: RecoveryKeyRevocationResult.REPLAY;

  6. removes the key, stores epoch + 1, the revocation ID (clearing a rotation ID) and RecoveryKeyRevocationTransition.now as revocation time, and deletes every last-device recovery challenge and the pending reset of the user: RecoveryKeyRevocationResult.REVOKED.