
    @6i                     V    d Z ddlmZ ddlZddlmZ defdZdefdZedefd	       Z	y)
zBTC Address.    )sha256N)	validatoraddrc           	      N    dt        fdt        | ddd         D              S )zDecode base58.:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzc              3   R   K   | ]  \  }}d |z  j                  |      z     yw):   N)index).0enmidxalphabets      j/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/validators/crypto_addresses/btc_address.py	<genexpr>z!_decode_base58.<locals>.<genexpr>   s'     U83C8>>#..Us   $'N)sum	enumerate)r   r   s    @r   _decode_base58r      s'    KHUydPRd?TUUU    c                     t        |       t        dd      vryt        |       j                  dd      }|dd |dd }}|t	        t	        |      j                               j                         dd k(  S )z%Validate P2PKH and P2SH type address.   #   FbigN   )lenranger   to_bytesr   digest)r   decoded_bytesheaderchecksums       r   _validate_old_btc_addressr#      sr    
4yb"%"4(11"e<M$Sb)=+=HFvfVn3356==?CCCr   valuec                t    | sy| dd dv r$t        j                  d      j                  |       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$   s    r   btc_addressr,      sH    , 
 !9$ 	

;<BB5I 'u-	r   )
__doc__hashlibr   r)   validators.utilsr   strr   r#   r,    r   r   <module>r2      sL      	 'V VDC D s  r   