
    E#i                     ,   S r SSKJrJrJr  SSKJrJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  S	S
KJrJrJrJr  S	SKJrJrJr  S	SKJr  S	SKJr  S	SKJr  \ " S S\5      5       r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r#\!r$\#r%g)z+Module for P2PKH address encoding/decoding.    )Enumautounique)AnyUnion   )AddrDecUtils)AddrKeyValidator)IAddrDecoder)IAddrEncoder   )Base58AlphabetsBase58ChecksumErrorBase58DecoderBase58Encoder)BchBech32DecoderBchBech32EncoderBech32ChecksumError)
IPublicKey)Hash160)
BytesUtilsc                   4    \ rS rSrSr\" 5       r\" 5       rSrg)P2PKHPubKeyModes&   z'Enumerative for P2PKH public key modes. N)	__name__
__module____qualname____firstlineno____doc__r   
COMPRESSEDUNCOMPRESSED__static_attributes__r       f/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/addr/P2PKH_addr.pyr   r   &   s    1J6Lr$   r   c                   8    \ rS rSrSr\S\S\S\4S j5       r	Sr
g)	P2PKHAddrDecoder.   zU
P2PKH address decoder class.
It allows the Pay-to-Public-Key-Hash address decoding.
addrkwargsreturnc                 N   US   nUR                  S[        R                  5      n [        R                  " X5      n[        R                  " U[        R                  " 5       [        U5      -   5        [        R                  " XB5      $ ! [
         a  n[        S5      UeSnAff = f)ag  
Decode a P2PKH address to bytes.

Args:
    addr (str): Address string

Other Parameters:
    net_ver (bytes)                        : Expected net address version
    base58_alph (Base58Alphabets, optional): Base58 alphabet (default: Bitcoin alphabet)

Returns:
    bytes: Public key hash bytes

Raises:
    ValueError: If the address encoding is not valid
net_verbase58_alphzInvalid base58 checksumN)getr   BITCOINr   CheckDecoder   
ValueErrorr	   ValidateLengthr   
DigestSizelenValidateAndRemovePrefix)r)   r*   net_ver_bytesr.   addr_dec_bytesexs         r%   
DecodeAddrP2PKHAddrDecoder.DecodeAddr4   s    & y)jj0G0GH	@*66tIN
 	##N$+$6$6$83};M$M	O 33NRR # 	@67R?	@s   B	 	
B$BB$r   Nr   r   r   r   r    staticmethodstrr   bytesr:   r#   r   r$   r%   r'   r'   .   s7    
 S S S%*S Sr$   r'   c                   B    \ rS rSrSr\S\\\4   S\	S\
4S j5       rSrg)	P2PKHAddrEncoderV   zU
P2PKH address encoder class.
It allows the Pay-to-Public-Key-Hash address encoding.
pub_keyr*   r+   c                    US   nUR                  S[        R                  5      nUR                  S[        R                  5      n[
        R                  " U 5      nU[        R                  :X  a  UR                  5       R                  5       OUR                  5       R                  5       n[        R                  " U[        R                  " U5      -   U5      $ )a  
Encode a public key to P2PKH address.

Args:
    pub_key (bytes or IPublicKey): Public key bytes or object

Other Parameters:
    net_ver (bytes)                          : Net address version
    base58_alph (Base58Alphabets, optional)  : Base58 alphabet, Bitcoin alphabet by default
    pub_key_mode (P2PKHPubKeyModes, optional): Public key mode, compressed key by default

Returns:
    str: Address string

Raises:
    ValueError: If the public key is not valid
    TypeError: If the public key is not secp256k1
r-   r.   pub_key_mode)r/   r   r0   r   r!   r
   ValidateAndGetSecp256k1KeyRawCompressedToBytesRawUncompressedr   CheckEncoder   QuickDigest)rC   r*   r7   r.   rE   pub_key_objpub_key_bytess          r%   	EncodeKeyP2PKHAddrEncoder.EncodeKey\   s    * y)jj0G0GHzz.2B2M2MN&AA'J(,<,G,GG %224<<>)99;CCE 	 ((9L9L]9[)[]hiir$   r   Nr   r   r   r   r    r=   r   r?   r   r   r>   rN   r#   r   r$   r%   rA   rA   V   sA    
 j5
!23 jj$'j jr$   rA   c                   8    \ rS rSrSr\S\S\S\4S j5       r	Sr
g)	BchP2PKHAddrDecoder}   zV
Bitcoin Cash P2PKH address decoder class.
It allows the Bitcoin Cash P2PKH decoding.
r)   r*   r+   c                 Z   US   nUS   n [         R                  " X 5      u  pEX4:w  a:  [        S[        R
                  " U5       S[        R
                  " U5       S35      e[        R                  " U[        R                  " 5       5        U$ ! [         a  n[        S5      UeSnAff = f)a%  
Decode a Bitcoin Cash P2PKH address to bytes.

Args:
    addr (str): Address string

Other Parameters:
    hrp (str)      : Expected HRP
    net_ver (bytes): Expected net address version

Returns:
    bytes: Public key hash bytes

Raises:
    ValueError: If the address encoding is not valid
hrpr-   zInvalid bech32 checksumNzInvalid net version (expected z, got ))
r   Decoder   r2   r   ToHexStringr	   r3   r   r4   )r)   r*   rU   r7   net_ver_bytes_gotr8   r9   s          r%   r:   BchP2PKHAddrDecoder.DecodeAddr   s    & Umy)	@0@0G0G0R-
 -=j>T>TUb>c=d e$$.$:$:;L$M#NaQ R R 	##N$+$6$6$8	: # 	@67R?	@s   B 
B*B%%B*r   Nr<   r   r$   r%   rR   rR   }   s2    
 ! ! !%*! !r$   rR   c                   B    \ rS rSrSr\S\\\4   S\	S\
4S j5       rSrg)	BchP2PKHAddrEncoder   zV
Bitcoin Cash P2PKH address encoder class.
It allows the Bitcoin Cash P2PKH encoding.
rC   r*   r+   c                     US   nUS   n[         R                  " U 5      n[        R                  " UU[        R
                  " UR                  5       R                  5       5      5      $ )aZ  
Encode a public key to Bitcoin Cash P2PKH address.

Args:
    pub_key (bytes or IPublicKey): Public key bytes or object

Other Parameters:
    hrp (str)      : HRP
    net_ver (bytes): Net address version

Returns:
    str: Address string

Raises:
    ValueError: If the public key is not valid
    TypeError: If the public key is not secp256k1
rU   r-   )r
   rF   r   Encoder   rK   rG   rH   )rC   r*   rU   r7   rL   s        r%   rN   BchP2PKHAddrEncoder.EncodeKey   sa    ( Umy)&AA'J&&s'4'.':':;;T;T;V;^;^;`'ac 	cr$   r   NrP   r   r$   r%   r\   r\      sA    
 c5
!23 cc$'c cr$   r\   N)&r    enumr   r   r   typingr   r   addr_dec_utilsr	   addr_key_validatorr
   iaddr_decoderr   iaddr_encoderr   base58r   r   r   r   bech32r   r   r   eccr   utils.cryptor   
utils.miscr   r   r'   rA   rR   r\   	P2PKHAddrBchP2PKHAddrr   r$   r%   <module>rn      s   * 2 $ #  ( 0 ' ' W W L L  " # t  %S| %SP$j| $jN(, (V c,  cH 	"r$   