CryptoCurrenciesFormat

Verifies that a crypto address is valid and only returns the address if it is valid.

python · Cryptocurrency

Source

from hashlib import sha256

import demistomock as demisto
from CommonServerPython import *  # noqa: E402 lgtm [py/polluting-import]

DIGITS58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"


def decode_base58(address, length) -> bytes:
    n = 0
    for char in address:
        n = n * 58 + DIGITS58.index(char)
    return n.to_bytes(length, "big")


def verify_is_bitcoin(address) -> bytes | bool:
    try:
        bitcoin_bytes = decode_base58(address, 25)
        """Check if the last four bytes are equal to the
        first four bytes of a double SHA-256 digest of the previous 21 bytes.
        Source: https://rosettacode.org/wiki/Bitcoin/address_validation#Python """
        return bitcoin_bytes[-4:] == sha256(sha256(bitcoin_bytes[:-4]).digest()).digest()[:4]
    except Exception:
        return False


def main():
    address_list = argToList(demisto.args().get("input"))

    list_results = [f"bitcoin:{address}" if verify_is_bitcoin(address) else "" for address in address_list]

    if list_results:
        demisto.results(list_results)
    else:
        demisto.results("")


if __name__ in ("__main__", "builtin", "builtins"):
    main()

README

Verifies that a cryptocurrency address is valid and only returns the address if it is valid.

Script Data


Name Description
Script Type python3
Tags  
Cortex XSOAR Version 5.0.0

Supported cryptocurrencies

  • Bitcoin

Inputs


Argument Name Description
input The Cryptocurrency address to check.

Outputs


There are no outputs for this script.

Script Example

!CryptoCurrenciesFormat address=1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i

Human Readable Output

1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i