docs: def verify_signature(message, signature, address):
      """This function verifies a bitcoin signed message.
  
      :param message: the plain text of the message to verify
      :param signature: the signature in base64 format
      :param address: the signing address
      """
      if (len(signature) != SIGNATURE_LENGTH):
          return False
  
      try:
          binsig = base64.b64decode(signature)
      except:
          return False
  
      r = intbytes.from_bytes(binsig[1:33])
  
      s = intbytes.from_bytes(binsig[33:65])
  
      val = intbytes.from_bytes(bitcoin_sig_hash(message.encode()))
  
      pubpairs = possible_public_pairs_for_signature(
          generator_secp256k1,
          val,
          (r, s))
  
      addr_hash160 = bitcoin_address_to_hash160_sec(address)
  
      for pair in pubpairs:
          if (public_pair_to_hash160_sec(pair, True) == addr_hash160):
              return True
          if (public_pair_to_hash160_sec(pair, False) == addr_hash160):
              return True
  
      return False