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

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