def authenticate!(challenges, response, registration_public_key,
registration_counter)
challenges = [challenges] unless challenges.is_a? Array
unless challenges.include?(response.client_data.challenge)
fail NoMatchingRequestError
end
fail ClientDataTypeError unless response.client_data.authentication?
pem = U2F.public_key_pem(registration_public_key)
fail AuthenticationFailedError unless response.verify(app_id, pem)
fail UserNotPresentError unless response.user_present?
unless response.counter > registration_counter
unless response.counter == 0 && registration_counter == 0
fail CounterTooLowError
end
end
end