docs: def Authenticate(self, app_id, challenge_data,
                     print_callback=sys.stderr.write):
      """See base class."""
  
      # Ensure environment variable is present
      plugin_cmd = os.environ.get(SK_SIGNING_PLUGIN_ENV_VAR)
      if plugin_cmd is None:
        raise errors.PluginError('{} env var is not set'
                                 .format(SK_SIGNING_PLUGIN_ENV_VAR))
  
      # Prepare input to signer
      client_data_map, signing_input = self._BuildPluginRequest(
          app_id, challenge_data, self.origin)
  
      # Call plugin
      print_callback('Please insert and touch your security key\n')
      response = self._CallPlugin([plugin_cmd], signing_input)
  
      # Handle response
      key_challenge_pair = (response['keyHandle'], response['challengeHash'])
      client_data_json = client_data_map[key_challenge_pair]
      client_data = client_data_json.encode()
      return self._BuildAuthenticatorResponse(app_id, client_data, response)