docs: def VerifySignature(message, signature, public_key, unhex=True):
          """
          Verify the integrity of the message.
  
          Args:
              message (str): the message to verify.
              signature (bytearray): the signature belonging to the message.
              public_key (ECPoint|bytes): the public key to use for verifying the signature. If `public_key` is of type bytes then it should be raw bytes (i.e. b'\xAA\xBB').
              unhex (bool): whether the message should be unhexlified before verifying
  
          Returns:
              bool: True if verification passes. False otherwise.
          """
  
          if type(public_key) is EllipticCurve.ECPoint:
              pubkey_x = public_key.x.value.to_bytes(32, 'big')
              pubkey_y = public_key.y.value.to_bytes(32, 'big')
  
              public_key = pubkey_x + pubkey_y
  
          if unhex:
              try:
                  message = binascii.unhexlify(message)
              except Exception as e:
                  logger.error("could not get m: %s" % e)
          elif isinstance(message, str):
              message = message.encode('utf-8')
  
          if len(public_key) == 33:
              public_key = bitcoin.decompress(public_key)
              public_key = public_key[1:]
  
          try:
              vk = VerifyingKey.from_string(public_key, curve=NIST256p, hashfunc=hashlib.sha256)
              res = vk.verify(signature, message, hashfunc=hashlib.sha256)
              return res
          except Exception as e:
              pass
  
          return False