o
    7Di                     @   sV   d Z ddlmZ ddlZddlmZ defddZdefdd	Zed
efddZ	dS )zBTC Address.    )sha256N)	validatoraddrc                    s(   d t  fddt| ddd D S )zDecode base58.:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzc                 3   s&    | ]\}}d |   | V  qdS ):   N)index).0enmidxalphabet `/var/www/Datamplify/venv/lib/python3.10/site-packages/validators/crypto_addresses/btc_address.py	<genexpr>   s   $ z!_decode_base58.<locals>.<genexpr>N)sum	enumerate)r   r   r   r   _decode_base58   s   $r   c                 C   s`   t | tddvrdS t| dd}|dd |dd }}|tt|  dd kS )z%Validate P2PKH and P2SH type address.   #   FbigN   )lenranger   to_bytesr   digest)r   decoded_bytesheaderchecksumr   r   r   _validate_old_btc_address   s
    r    valuec                C   s0   | sdS | dd dv rt d| S t| S )a  Return whether or not given value is a valid bitcoin address.

    Full validation is implemented for P2PKH and P2SH addresses.
    For segwit addresses a regexp is used to provide a reasonable
    estimate on whether the address is valid.

    Examples:
        >>> btc_address('3Cwgr2g7vsi1bXDUkpEnVoRLA9w4FZfC69')
        True
        >>> btc_address('1BvBMsEYstWetqTFn5Au4m4GFg7xJaNVN2')
        ValidationError(func=btc_address, args={'value': '1BvBMsEYstWetqTFn5Au4m4GFg7xJaNVN2'})

    Args:
        value:
            Bitcoin address string to validate.

    Returns:
        (Literal[True]): If `value` is a valid bitcoin address.
        (ValidationError): If `value` is an invalid bitcoin address.
    FN   )bctbz%^(bc|tc)[0-3][02-9ac-hj-np-z]{14,74}$)recompilematchr    )r!   r   r   r   btc_address   s   r(   )
__doc__hashlibr   r%   validators.utilsr   strr   r    r(   r   r   r   r   <module>   s    	