
    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	J
r
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g)a
  
Module for bech32/bech32m decoding/encoding.

References:
    https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki
    https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
    https://github.com/sipa/bech32/blob/master/ref/python/segwit_addr.py
    )Enumautounique)DictList   )Bech32BaseUtilsBech32DecoderBaseBech32EncoderBase   )
BytesUtilsc                   4    \ rS rSrSr\" 5       r\" 5       rSrg)Bech32Encodings&   z&Enumerative for Bech32 encoding types. N)	__name__
__module____qualname____firstlineno____doc__r   BECH32BECH32M__static_attributes__r       d/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/bech32/bech32.pyr   r   &   s    0VFfGr   r   c                   ~    \ rS rSr% SrSr\\S'   Sr\	\S'   \
R                  S\
R                  S0r\\
\	4   \S	'   S
rg)Bech32Const.   z%Class container for Bech32 constants.1	SEPARATOR   CHECKSUM_STR_LENr   i0+ENCODING_CHECKSUM_CONSTr   N)r   r   r   r   r   r    str__annotations__r"   intr   r   r   r#   r   r   r   r   r   r   r   .   sM    / Isc 	;T/3"67 r   r   c                       \ rS rSrSr\S\\   S\4S j5       r\S\	S\\   4S j5       r
\\R                  4S\	S\\   S	\S\\   4S
 jj5       r\\R                  4S\	S\\   S	\S\4S jj5       rSrg)Bech32Utils<   z-Class container for Bech32 utility functions.valuesreturnc                     / SQnSnU  H:  nUS-	  nUS-  S-  U-  n[        S5       H  nX$U-	  S-  (       a  X   OS-  nM     M<     U$ )z
Computes the polynomial modulus.

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

Returns:
    int: Computed modulus
)iWj;imP&ii3B=ib*r      i   r   )range)r*   	generatorchkvaluetopis         r   PolyModBech32Utils.PolyMod?   sb     Q	 E)C?q(50C1XQy|Q>  
 
r   hrpc                     U  Vs/ s H  n[        U5      S-	  PM     snS/-   U  Vs/ s H  n[        U5      S-  PM     sn-   $ s  snf s  snf )z}
Expand the HRP into values for checksum computation.

Args:
    hrp (str): HRP

Returns:
    list[int]: Expanded HRP values
r.   r      )ord)r7   xs     r   	HrpExpandBech32Utils.HrpExpandW   sJ     &))SA!S)QC/#2N#Q3q6D=#2NNN)2Ns
   AA	dataencodingc                    [         R                  U 5      U-   n[         R                  U/ SQ-   5      [        R                  U   -  n[        [        R                  5       Vs/ s H  oTSSU-
  -  -	  S-  PM     sn$ s  snf )a  
Compute the checksum from the specified HRP and data.

Args:
    hrp (str)                           : HRP
    data (list[int])                    : Data part
    encoding (Bech32Encodings, optional): Encoding type (BECH32 by default)

Returns:
    list[int]: Computed checksum
)r   r   r   r   r   r   r.   r9   )r(   r<   r5   r   r#   r/   r"   )r7   r>   r?   r*   polymodr4   s         r   ComputeChecksumBech32Utils.ComputeChecksume   su     &&s+d2%%f/A&AB[EhEhiqErr9>{?[?[9\]9\AAQK'4/9\]]]s   "A<c                     [         R                  [         R                  U 5      U-   5      nU[        R                  U   :H  $ )a3  
Verify the checksum from the specified HRP and converted data characters.

Args:
    hrp  (str)                          : HRP
    data (list[int])                    : Data part
    encoding (Bech32Encodings, optional): Encoding type (BECH32 by default)

Returns:
    bool: True if valid, false otherwise
)r(   r5   r<   r   r#   )r7   r>   r?   rA   s       r   VerifyChecksumBech32Utils.VerifyChecksumx   s:     %%k&;&;C&@4&GH+==hGGGr   r   N)r   r   r   r   r   staticmethodr   r&   r5   r$   r<   r   r   rB   boolrE   r   r   r   r   r(   r(   <   s    7S	 c  . Os OtCy O O  5D4J4J^S ^"3i^"1^OSTWy^ ^$  4C3I3IHC H!#YH!0HNRH Hr   r(   c                   d    \ rS rSrSr\S\S\S\4S j5       r\	S\S\
\   S\
\   4S j5       rSrg	)
Bech32Encoder   zJ
Bech32 encoder class.
It provides methods for encoding to Bech32 format.
r7   r>   r+   c                 l    U R                  U[        R                  " U5      [        R                  5      $ )z
Encode to Bech32.

Args:
    hrp (str)   : HRP
    data (bytes): Data

Returns:
    str: Encoded address

Raises:
    ValueError: If the data is not valid
)_EncodeBech32r	   ConvertToBase32r   r    )clsr7   r>   s      r   EncodeBech32Encoder.Encode   s0    "   !0!@!@!F!,!6!68 	8r   c                 ,    [         R                  X5      $ )z
Compute the checksum from the specified HRP and data.

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

Returns:
    list[int]: Computed checksum
)r(   rB   r7   r>   s     r   _ComputeChecksumBech32Encoder._ComputeChecksum   s     **355r   r   N)r   r   r   r   r   classmethodr$   bytesrP   rG   r   r&   rT   r   r   r   r   rJ   rJ      sf    
 888"8 8( 6c 6#Cy6-1#Y6 6r   rJ   c                   ^    \ rS rSrSr\S\S\S\4S j5       r\	S\S\
\   S\4S j5       rS	rg
)Bech32Decoder   zH
Bech32 decoder class.
It provides methods for decoding  Bech32 format.
r7   addrr+   c                     U R                  U[        R                  [        R                  5      u  p4X:w  a  [	        SU SU S35      e[
        R                  " [        R                  " U5      5      $ )z
Decode from Bech32.

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

Returns:
    bytes: Decoded address

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 ))	_DecodeBech32r   r    r"   
ValueErrorr   FromListr	   ConvertFromBase32)rO   r7   r[   hrp_gotr>   s        r   DecodeBech32Decoder.Decode   ss    ( ))$*5*?*?*5*F*FH >GuFSZR[[\]^^ ""--d3
 	
r   r>   c                 ,    [         R                  X5      $ )z
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(   rE   rS   s     r   _VerifyChecksumBech32Decoder._VerifyChecksum   s     ))#44r   r   N)r   r   r   r   r   rV   r$   rW   rc   rG   r   r&   rH   rf   r   r   r   r   rY   rY      sb    
 


"
 
> 5S 5"3i5,05 5r   rY   N)r   enumr   r   r   typingr   r   bech32_baser	   r
   r   
utils.miscr   r   r   r(   rJ   rY   r   r   r   <module>rl      sm   * $ #  N N # d   LH LH^*6% *6Z35% 35r   