
    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
Jr  SSKJr   " S S	5      r " S
 S\5      r " S S\
5      rg)z
Module for segwit 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
    )ListTuple   )Bech32ConstBech32EncodingsBech32Utils)Bech32BaseUtilsBech32DecoderBaseBech32EncoderBase   )
BytesUtilsc                       \ rS rSr% Sr\R                  r\\S'   \R                  r	\
\S'   Sr\
\S'   Sr\
\S'   S	r\
\S
'   Sr\
\S'   Sr\\
\
4   \S'   Srg)SegwitBech32Const%   z,Class container for Segwit Bech32 constants.	SEPARATORCHECKSUM_STR_LENr   WITNESS_PROG_MIN_BYTE_LEN(   WITNESS_PROG_MAX_BYTE_LENr   WITNESS_VER_BECH32   WITNESS_VER_MAX_VAL)       WITNESS_VER_ZERO_DATA_BYTE_LEN N)__name__
__module____qualname____firstlineno____doc__r   r   str__annotations__r   intr   r   r   r   r   r   __static_attributes__r       k/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/bech32/segwit_bech32.pyr   r   %   sg    6 !**Is*'88c8%&s&%'s'!!6>"E#s(O>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)SegwitBech32Encoder8   zX
Segwit Bech32 encoder class.
It provides methods for encoding to Segwit Bech32 format.
hrpwit_verwit_progreturnc                 t    U R                  UU/[        R                  " U5      -   [        R                  5      $ )z
Encode to Segwit Bech32.

Args:
    hrp (str)       : HRP
    wit_ver (int)   : Witness version
    wit_prog (bytes): Witness program

Returns:
    str: Encoded address

Raises:
    ValueError: If the data is not valid
)_EncodeBech32r	   ConvertToBase32r   r   )clsr+   r,   r-   s       r'   EncodeSegwitBech32Encoder.Encode>   s7    &   ")_-L-LX-V!V!2!<!<> 	>r&   datac                     US   [         R                  :X  a  [        R                  O[        R                  n[
        R                  " XU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   )r   r   r   BECH32BECH32Mr   ComputeChecksumr+   r5   encodings      r'   _ComputeChecksum$SegwitBech32Encoder._ComputeChecksumU   sE     Aw"3"F"FF $**(00 	 **3h??r&   r   N)r   r   r   r    r!   classmethodr"   r$   bytesr3   staticmethodr   r<   r%   r   r&   r'   r)   r)   8   sw    
 >>> > $'> >, @c @#Cy@-1#Y@ @r&   r)   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
)SegwitBech32Decoderi   zU
Segwit Bech32 decoder class.
It provides methods for decoding Segwit Bech32 format.
r+   addrr.   c                 ^   U R                  U[        R                  [        R                  5      u  p4X:w  a  [	        SU SU S35      e[
        R                  " USS 5      n[        U5      [        R                  :  d  [        U5      [        R                  :  a  [	        S[        U5       S35      eUS   nU[        R                  :  a  [	        SU S35      eUS:X  a5  [        U5      [        R                  ;  a  [	        S	[        U5       S35      eU[        R                  " U5      4$ )
a)  
Decode from Segwit Bech32.

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

Returns:
    tuple[int, bytes]: Witness version (index 0) and witness program (index 1)

Raises:
    Bech32ChecksumError: If the checksum is not valid
    ValueError: If the bech32 string is not valid
z(Invalid format (HRP not valid, expected z, got )r   Nz2Invalid format (witness program length not valid: r   z+Invalid format (witness version not valid: z"Invalid format (length not valid: )_DecodeBech32r   r   r   
ValueErrorr	   ConvertFromBase32lenr   r   r   r   r   FromList)r2   r+   rD   hrp_gotr5   	conv_datar,   s          r'   DecodeSegwitBech32Decoder.Decodeo   s'   ( ))$*;*E*E*;*L*LN >:3%vgYaP 
 $55d12h?	 	N.HHHy>$5$O$OOQRUV_R`Qaabcddq'&:::J7)STUVVa<I2C2b2b bA#i.AQQRSTT
++I666r&   r5   c                     US   [         R                  :X  a  [        R                  O[        R                  n[
        R                  " XU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   )r   r   r   r7   r8   r   VerifyChecksumr:   s      r'   _VerifyChecksum#SegwitBech32Decoder._VerifyChecksum   sE     Aw"3"F"FF $**(00 	 ))#X>>r&   r   N)r   r   r   r    r!   r>   r"   r   r$   r?   rN   r@   r   boolrR   r%   r   r&   r'   rB   rB   i   sl    
 *7*7*7"3:.*7 *7X ?S ?"3i?,0? ?r&   rB   N)r!   typingr   r   bech32r   r   r   bech32_baser	   r
   r   
utils.miscr   r   r)   rB   r   r&   r'   <module>rY      sG   *  = = N N #? ?&.@+ .@bD?+ D?r&   