
    ei-                         d Z ddlmZmZmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlmZ e G d d	e                      Z G d
 d          Z G d d          Z G d de          Z G d de
          ZdS )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                   :    e Zd ZdZ e            Z e            ZdS )Bech32Encodingsz&Enumerative for Bech32 encoding types.N)__name__
__module____qualname____doc__r   BECH32BECH32M     h/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/static_dependencies/bip/bech32/bech32.pyr   r   &   s*        00TVVFdffGGGr   r   c                   j    e Zd ZU dZdZeed<   dZeed<   e	j
        de	j        diZee	ef         ed<   d	S )
Bech32Constz%Class container for Bech32 constants.1	SEPARATOR   CHECKSUM_STR_LENr   i0+ENCODING_CHECKSUM_CONSTN)r   r   r   r   r   str__annotations__r   intr   r   r   r   r   r   r   r   r   r   .   st         // Isc 	;T/3"67     r   r   c                       e Zd ZdZedee         defd            Zededee         fd            Z	ee
j        fdedee         de
dee         fd	            Zee
j        fdedee         de
defd
            ZdS )Bech32Utilsz-Class container for Bech32 utility functions.valuesreturnc                     g d}d}| D ]9}|dz	  }|dz  dz  |z  }t          d          D ]}|||z	  dz  r||         ndz  }:|S )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   PolyModzBech32Utils.PolyMod?   s     QPP	  	? 	?E)C?q(50C1XX ? ?Q>y||Q>?
r   hrpc                 <    d | D             dgz   d | D             z   S )z
        Expand the HRP into values for checksum computation.

        Args:
            hrp (str): HRP

        Returns:
            list[int]: Expanded HRP values
        c                 2    g | ]}t          |          d z	  S )r)   ord.0xs     r   
<listcomp>z)Bech32Utils.HrpExpand.<locals>.<listcomp>c   s"    )))A!)))r   r   c                 2    g | ]}t          |          d z  S )   r4   r6   s     r   r9   z)Bech32Utils.HrpExpand.<locals>.<listcomp>c   s"    2N2N2NQ3q66D=2N2N2Nr   r   )r1   s    r   	HrpExpandzBech32Utils.HrpExpandW   s3     *)S)))QC/2N2N#2N2N2NNNr   dataencodingc                     t                               |           |z   }t                               |g dz             t          j        |         z  fdt          t          j                  D             S )aW  
        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   c                 ,    g | ]}d d |z
  z  z	  dz  S )r)   r;   r   )r7   r/   polymods     r   r9   z/Bech32Utils.ComputeChecksum.<locals>.<listcomp>v   s+    ]]]AAQK'4/]]]r   )r$   r<   r0   r   r   r*   r   )r1   r=   r>   r%   rA   s       @r   ComputeChecksumzBech32Utils.ComputeChecksume   so     &&s++d2%%f/A/A/A&ABB[EhiqErr]]]]{?[9\9\]]]]r   c                     t                               t                               |           |z             }|t          j        |         k    S )as  
        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$   r0   r<   r   r   )r1   r=   r>   rA   s       r   VerifyChecksumzBech32Utils.VerifyChecksumx   s=     %%k&;&;C&@&@4&GHH+=hGGGr   N)r   r   r   r   staticmethodr   r"   r0   r    r<   r   r   rB   boolrD   r   r   r   r$   r$   <   s=       77S	 c    \. Os OtCy O O O \O  5D4J^ ^S ^"3i^"1^OSTWy^ ^ ^ \^$  4C3IH HC H!#YH!0HNRH H H \H H Hr   r$   c                   r    e Zd ZdZedededefd            Zedede	e
         de	e
         fd            ZdS )Bech32EncoderzV
    Bech32 encoder class.
    It provides methods for encoding to Bech32 format.
    r1   r=   r&   c                 h    |                      |t          j        |          t          j                  S )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   )clsr1   r=   s      r   EncodezBech32Encoder.Encode   s2    "   !0!@!F!F!,!68 8 	8r   c                 8    t                               | |          S )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   r1   r=   s     r   _ComputeChecksumzBech32Encoder._ComputeChecksum   s     **3555r   N)r   r   r   r   classmethodr    bytesrM   rE   r   r"   rP   r   r   r   rH   rH      s         
 888"8 8 8 [8( 6c 6#Cy6-1#Y6 6 6 \6 6 6r   rH   c                   f    e Zd ZdZedededefd            Zedede	e
         defd            ZdS )	Bech32DecoderzT
    Bech32 decoder class.
    It provides methods for decoding  Bech32 format.
    r1   addrr&   c                     |                      |t          j        t          j                  \  }}||k    rt	          d| d| d          t          j        t          j        |                    S )a>  
        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)rL   r1   rU   hrp_gotr=   s        r   DecodezBech32Decoder.Decode   s    ( ))$*5*?*5*FH H '>>]]]SZ]]]^^^ "-d33
 
 	
r   r=   c                 8    t                               | |          S )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$   rD   rO   s     r   _VerifyChecksumzBech32Decoder._VerifyChecksum   s     ))#t444r   N)r   r   r   r   rQ   r    rR   r]   rE   r   r"   rF   r_   r   r   r   rT   rT      s         
 


"
 
 
 [
> 5S 5"3i5,05 5 5 \5 5 5r   rT   N)r   enumr   r   r   typingr   r   bech32_baser	   r
   r   
utils.miscr   r   r   r$   rH   rT   r   r   r   <module>rd      so  *  $ # # # # # # # # #         N N N N N N N N N N # # # # # #     d          LH LH LH LH LH LH LH LH^*6 *6 *6 *6 *6% *6 *6 *6Z35 35 35 35 35% 35 35 35 35 35r   