code: def verify_response(self, response, otp, nonce, return_response=False):
          
          try:
              status = re.search(r'status=([A-Z0-9_]+)', response) \
                         .groups()
  
              if len(status) > 1:
                  message = 'More than one status= returned. Possible attack!'
                  raise InvalidValidationResponse(message, response)
  
              status = status[0]
          except (AttributeError, IndexError):
              return False
  
          signature, parameters = \
              self.parse_parameters_from_response(response)
  
          # Secret key is specified, so we verify the response message
          # signature
          if self.key:
              generated_signature = \
                  self.generate_message_signature(parameters)
  
              # Signature located in the response does not match the one we
              # have generated
              if signature != generated_signature:
                  logger.warn("signature mismatch for parameters=%r", parameters)
                  raise SignatureVerificationError(generated_signature,
                                                   signature)
          param_dict = self.get_parameters_as_dictionary(parameters)
  
          if 'otp' in param_dict and param_dict['otp'] != otp:
              message = 'Unexpected OTP in response. Possible attack!'
              raise InvalidValidationResponse(message, response, param_dict)
  
          if 'nonce' in param_dict and param_dict['nonce'] != nonce:
              message = 'Unexpected nonce in response. Possible attack!'
              raise InvalidValidationResponse(message, response, param_dict)
  
          if status == 'OK':
              if return_response:
                  return param_dict
              else:
                  return True
          elif status == 'NO_SUCH_CLIENT':
              raise InvalidClientIdError(self.client_id)
          elif status == 'REPLAYED_OTP':
              raise StatusCodeError(status)
  
          return False
docs: Returns True if the OTP is valid (status=OK) and return_response=False,
          otherwise (return_response = True) it returns the server response as a
          dictionary.
  
          Throws an exception if the OTP is replayed, the server response message
          verification failed or the client id is invalid, returns False
          otherwise.