
    E#i                         S r SSKJrJr  SSKJrJrJr  SSKJ	r	J
r
   " S S5      r " S	 S
5      r " S S\5      r " S S\5      rg)z
Module for BitcoinCash bech32 decoding/encoding.
Reference: https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/cashaddr.md
    )ListTuple   )Bech32BaseUtilsBech32DecoderBaseBech32EncoderBase   )
BytesUtilsIntegerUtilsc                   6    \ rS rSr% SrSr\\S'   Sr\	\S'   Sr
g)	BchBech32Const!   z2Class container for Bitcoin Cash Bech32 constants.:	SEPARATOR   CHECKSUM_STR_LEN N)__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   int__static_attributes__r       h/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/bech32/bch_bech32.pyr   r   !   s    < Iscr   r   c                       \ rS rSrSr\S\\   S\4S j5       r\S\	S\\   4S j5       r
\S\	S\\   S\\   4S	 j5       r\S\	S\\   S\4S
 j5       rSrg)BchBech32Utils*   z3Class container for Bitcoin Cash utility functions.valuesreturnc                     / SQnSnU  H0  nUS-	  nUS-  S-  U-  nU H  nXES   -  S:w  d  M  X%S   -  nM     M2     US-  $ )z
Computes the polynomial modulus.

Args:
    values (list[int]): List of polynomial coefficients

Returns:
    int: Computed modulus
))r   l   ayec)r	   l   n)   l   3|)r   l   bW])   l   pdy r   #   l       r   r   )r"   	generatorchkvaluetopis         r   PolyModBchBech32Utils.PolyMod-   sd    
	 E)C,&1,5C1:?Q4KC   Qwr   hrpc                 R    U  Vs/ s H  n[        U5      S-  PM     snS/-   $ s  snf )z}
Expand the HRP into values for checksum computation.

Args:
    hrp (str): HRP

Returns:
    list[int]: Expanded HRP values
   r   )ord)r0   xs     r   	HrpExpandBchBech32Utils.HrpExpandL   s+     (++s!As+qc11+s   $datac                     [         R                  U 5      U-   n[         R                  U/ SQ-   5      n[        [        R
                  5       Vs/ s H  oCSSU-
  -  -	  S-  PM     sn$ s  snf )
Compute the checksum from the specified HRP and data.

Args:
    hrp (str)       : HRP
    data (list[int]): Data part

Returns:
    list[int]: Computed checksum
)r   r   r   r   r   r   r   r   r(      r2   )r    r5   r.   ranger   r   )r0   r7   r"   polymodr-   s        r   ComputeChecksumBchBech32Utils.ComputeChecksumZ   sd      ))#.5 ((2J)JK9>~?^?^9_`9_AAQK'4/9_```s   A(c                 ^    [         R                  [         R                  U 5      U-   5      S:H  $ )
Verify the checksum from the specified HRP and converted data characters.

Args:
    hrp  (str)      : HRP
    data (list[int]): Data part

Returns:
    bool: True if valid, false otherwise
r   )r    r.   r5   r0   r7   s     r   VerifyChecksumBchBech32Utils.VerifyChecksumk   s*     %%n&>&>s&Cd&JKqPPr   r   N)r   r   r   r   r   staticmethodr   r   r.   r   r5   r=   boolrB   r   r   r   r   r    r    *   s    =S	 c  < 2s 2tCy 2 2 aS a"3ia,0Ia a  QC Q!#YQ+/Q Qr   r    c            	       h    \ rS rSrSr\S\S\S\S\4S j5       r\	S\S\
\   S\
\   4S j5       rS	rg
)BchBech32Encoder{   zd
Bitcoin Cash Bech32 encoder class.
It provides methods for encoding to Bitcoin Cash Bech32 format.
r0   net_verr7   r#   c                 p    U R                  U[        R                  " X#-   5      [        R                  5      $ )z
Encode to Bitcoin Cash Bech32.

Args:
    hrp (str)      : HRP
    net_ver (bytes): Net version
    data (bytes)   : Data

Returns:
    str: Encoded address

Raises:
    ValueError: If the data is not valid
)_EncodeBech32r   ConvertToBase32r   r   )clsr0   rI   r7   s       r   EncodeBchBech32Encoder.Encode   s2    &   !0!@!@!P!/!9!9; 	;r   c                 ,    [         R                  X5      $ )r9   )r    r=   rA   s     r   _ComputeChecksum!BchBech32Encoder._ComputeChecksum   s     --c88r   r   N)r   r   r   r   r   classmethodr   bytesrN   rD   r   r   rQ   r   r   r   r   rG   rG   {   sr    
 ;;; ;  #; ;, 9c 9#Cy9-1#Y9 9r   rG   c            	       h    \ rS rSrSr\S\S\S\\\4   4S j5       r	\
S\S\\   S\4S j5       rS	rg
)BchBech32Decoder   za
Bitcoin Cash Bech32 decoder class.
It provides methods for decoding Bitcoin Cash Bech32 format.
r0   addrr#   c                 "   U R                  U[        R                  [        R                  5      u  p4X:w  a  [	        SU SU S35      e[
        R                  " U5      n[        R                  " US   5      [        R                  " USS 5      4$ )a"  
Decode from Bitcoin Cash Bech32.

Args:
    hrp (str) : Human readable part
    addr (str): Address

Returns:
    tuple[bytes, bytes]: Net version (index 0) and data (index 1)

Raises:
    ValueError: If the bech32 string is not valid
    Bech32ChecksumError: If the checksum is not valid
z(Invalid format (HRP not valid, expected z, got )r   r   N)_DecodeBech32r   r   r   
ValueErrorr   ConvertFromBase32r   ToBytesr
   FromList)rM   r0   rX   hrp_gotr7   	conv_datas         r   DecodeBchBech32Decoder.Decode   s    ( ))$*8*B*B*8*I*IK
 >GuFSZR[[\]^^ $55d;	##IaL1:3F3FyQRQS}3UUUr   r7   c                 ,    [         R                  X5      $ )r@   )r    rB   rA   s     r   _VerifyChecksum BchBech32Decoder._VerifyChecksum   s     ,,S77r   r   N)r   r   r   r   r   rS   r   r   rT   rb   rD   r   r   rE   re   r   r   r   r   rV   rV      sq    
 VVV"5%<0V V@ 8S 8"3i8,08 8r   rV   N)r   typingr   r   bech32_baser   r   r   
utils.miscr
   r   r   r    rG   rV   r   r   r   <module>rj      sL   *  N N 1 NQ NQb*9( *9Z48( 48r   