
    E#i+                         S r SSKJrJr  SSKJrJrJrJr  SSK	J
r
  SSKJr   " S S	5      r " S
 S5      r " S S\5      r " S S\5      rg)z)Module for base bech32 decoding/encoding.    )ABCabstractmethod)ListOptionalTupleUnion   )Bech32ChecksumError   )	AlgoUtilsc                   (    \ rS rSr% SrSr\\S'   Srg)Bech32BaseConst   z%Class container for Bech32 constants. qpzry9x8gf2tvdw0s3jn54khce6mua7lCHARSET N)	__name__
__module____qualname____firstlineno____doc__r   str__annotations____static_attributes__r       i/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/bech32/bech32_base.pyr   r      s    / 6GS5r   r   c                       \ rS rSrSr\S\\\   \	4   S\\   4S j5       r
\S\\\   \	4   S\\   4S j5       r\ SS\\	\\   4   S\S\S	\S\\\      4
S
 jj5       rSrg)Bech32BaseUtils&   z-Class container for Bech32 utility functions.datareturnc                 P    [         R                  U SS5      nUc  [        S5      eU$ )z
Convert data to base32.

Args:
    data (list[int] or bytes): Data to be converted

Returns:
    list[int]: Converted data

Raises:
    ValueError: If the string is not valid
      z1Invalid data, cannot perform conversion to base32r   ConvertBits
ValueErrorr    	conv_datas     r   ConvertToBase32Bech32BaseUtils.ConvertToBase32)   s0      $//a;	PQQr   c                 R    [         R                  U SSS5      nUc  [        S5      eU$ )z
Convert data from base32.

Args:
    data (list[int] or bytes): Data to be converted

Returns:
    list[int]: Converted data

Raises:
    ValueError: If the string is not valid
r$   r#   Fz3Invalid data, cannot perform conversion from base32r%   r(   s     r   ConvertFromBase32!Bech32BaseUtils.ConvertFromBase32?   s2      $//aEB	RSSr   	from_bitsto_bitspadc                 X   SU-  S-
  nSX-   S-
  -  S-
  nSnSn/ nU  HJ  n	U	S:  d	  X-	  (       a    gXa-  U	-  U-  nXq-  nXr:  d  M)  Xr-  nUR                  Xg-	  U-  5        Xr:  a  M!  ML     U(       a"  U(       a  UR                  XbU-
  -  U-  5        U$ Xq:  d  XbU-
  -  U-  (       a  gU$ )aI  
Perform bit conversion.
The function takes the input data (list of integers or byte sequence) and convert every value from
the specified number of bits to the specified one.
It returns a list of integer where every number is less than 2^to_bits.

Args:
    data (list[int] or bytes): Data to be converted
    from_bits (int)          : Number of bits to start from
    to_bits (int)            : Number of bits to end with
    pad (bool, optional)     : True if data must be padded with zeros, false otherwise

Returns:
    list[int]: List of converted values, None in case of errors
r	   r   N)append)
r    r/   r0   r1   max_out_valmax_accaccbitsretvalues
             r   r&   Bech32BaseUtils.ConvertBitsU   s    ( G|q(,q01Q6EqyU/$-8CD/

CK;67 /  

CdN3{BC 
 CdN$;{#J
r   r   N)T)r   r   r   r   r   staticmethodr   r   intbytesr*   r-   boolr   r&   r   r   r   r   r   r   &   s    7eDIu$45 $s)  * d3i&6 7 DI  *  !%+%tCy 01 +"+ + + *2$s))<+ +r   r   c            	       x    \ rS rSrSr\S\S\\   S\S\4S j5       r	\
\S\S\\   S\\   4S j5       5       rS	rg
)Bech32EncoderBase   zO
Bech32 encoder base class.
It provides methods for encoding to Bech32 format.
hrpr    sepr!   c                     X R                  X5      -  nX-   SR                  U Vs/ s H  n[        R                  U   PM     sn5      -   $ s  snf )z
Encode a Bech32 string from the specified HRP and data.

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

Returns:
    str: Encoded data
 )_ComputeChecksumjoinr   r   )clsrB   r    rC   ds        r   _EncodeBech32Bech32EncoderBase._EncodeBech32   sJ    $ 	$$S//y277#M1O$;$;A$>#MNNN#Ms   A
c                     g)z
Compute the checksum from the specified HRP and data.

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

Returns:
    list[int]: Computed checksum
Nr   rB   r    s     r   rF   "Bech32EncoderBase._ComputeChecksum       r   r   N)r   r   r   r   r   classmethodr   r   r<   rJ   r;   r   rF   r   r   r   r   r@   r@      s    
 OO IO O $'O O* c #Cy-1#Y  r   r@   c                   |    \ rS rSrSr\S\S\S\S\\\	\   4   4S j5       r
\\S\S	\	\   S\4S
 j5       5       rSrg)Bech32DecoderBase   zL
Bech32 decoder base class.
It provides methods for decoding Bech32 format.
bech_strrC   checksum_lenr!   c                 T   [         R                  " U5      (       a  [        S5      eUR                  5       nUR	                  U5      nUS:X  a  [        S5      eUSU n[        U5      S:X  d  [        S U 5       5      (       a  [        SU S35      eXS	-   S n[        U5      US	-   :  d  [        S
 U 5       5      (       d  [        S5      eU Vs/ s H"  n[        R                  R                  U5      PM$     nnU R                  XX5      (       d  [        S5      eXXSU*  4$ s  snf )aw  
Decode and validate a Bech32 string, determining its HRP and data.

Args:
    bech_str (str)    : Bech32 string
    sep (str)         : Bech32 separator
    checksum_len (int): Checksum length

Returns:
    tuple[str, list[int]]: HRP (index 0) and data part (index 1)

Raises:
    ValueError: If the string is not valid
    Bech32ChecksumError: If the checksum is not valid
z,Invalid bech32 format (string is mixed case)z*Invalid bech32 format (no separator found)Nr   c              3   h   #    U  H(  n[        U5      S :  =(       d    [        U5      S:  v   M*     g7f)!   ~   N)ord.0xs     r   	<genexpr>2Bech32DecoderBase._DecodeBech32.<locals>.<genexpr>   s(     ISA ;s1v| ;Ss   02z&Invalid bech32 format (HRP not valid: )r	   c              3   F   #    U  H  o[         R                  ;   v   M     g 7f)N)r   r   r\   s     r   r_   r`      s     KA 7 77s   !z+Invalid bech32 format (data part not valid)zInvalid bech32 checksum)r   IsStringMixedr'   lowerrfindlenanyallr   r   find_VerifyChecksumr
   )	rH   rT   rC   rU   sep_posrB   	data_partr^   int_datas	            r   _DecodeBech32Bech32DecoderBase._DecodeBech32   s+   , ""8,,KLL >># ..%b=IJJ x s8q=CISIIIEcU!LMM q[\*		NlQ./KKKKJKK >GGYO++003YG""311%&?@@^|m,,,	 Hs   )D%rB   r    c                     g)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
Nr   rM   s     r   rj   !Bech32DecoderBase._VerifyChecksum   rO   r   r   N)r   r   r   r   r   rP   r   r<   r   r   rn   r;   r   r>   rj   r   r   r   r   rR   rR      s    
 0- #0-0- %(0- -2#tCy.,A0- 0-d S "3i,0  r   rR   N)r   abcr   r   typingr   r   r   r   	bech32_exr
   
utils.miscr   r   r   r@   rR   r   r   r   <module>rv      sM   * 0 $ / / * "6 6[ [|) )XF Fr   