
    ei                         d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ e G d	 d
e                      Z G d d          Z G d d          Z G d d          Z G d d          ZdS )z$Module for base58 decoding/encoding.    )Enumautounique)Dict   )Base58ChecksumError   )DoubleSha256)
BytesUtilsc                   :    e Zd ZdZ e            Z e            ZdS )Base58Alphabetsz Enumerative for Base58 alphabet.N)__name__
__module____qualname____doc__r   BITCOINRIPPLE     h/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/static_dependencies/bip/base58/base58.pyr   r       s*        **dffGTVVFFFr   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 )
Base58Constz%Class container for Base58 constants.:   RADIX   CHECKSUM_BYTE_LEN:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz:rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz	ALPHABETSN)r   r   r   r   r   int__annotations__r   r   r   r   r   r   strr   r   r   r   r   (   sr         // E3OOOs 	!] \-ItOS()     r   r   c                   2    e Zd ZdZededefd            ZdS )Base58Utilsz-Class container for Base58 utility functions.
data_bytesreturnc                 N    t          j        |           dt          j                 S )z
        Compute Base58 checksum.

        Args:
            data_bytes (bytes): Data bytes

        Returns:
            bytes: Computed checksum
        N)r
   QuickDigestr   r   )r%   s    r   ComputeChecksumzBase58Utils.ComputeChecksum9   s#     '
334R[5R4RSSr   N)r   r   r   r   staticmethodbytesr)   r   r   r   r$   r$   6   sN        77
TE 
Te 
T 
T 
T \
T 
T 
Tr   r$   c                   v    e Zd ZdZeej        fdededefd            Z	eej        fdededefd            Z
dS )Base58Encoderz^Base58 encoder class. It provides methods for encoding and checksum encoding to Base58 format.r%   alph_idxr&   c                    t          |t                    st          d          d}t          j        |         }t          j        |           }|dk    r.t          |t          j                  \  }}||         |z   }|dk    .t          |           t          | 
                    d                    z
  }|d         |z  |z   S )af  
        Encode bytes into a Base58 string.

        Args:
            data_bytes (bytes)                  : Data bytes
            alph_idx (Base58Alphabets, optional): Alphabet index, Bitcoin by default

        Returns:
            str: Encoded string

        Raises:
            TypeError: If alphabet index is not a Base58Alphabets enumerative
        7Alphabet index is not an enumerative of Base58Alphabets r       )
isinstancer   	TypeErrorr   r   r   	ToIntegerdivmodr   lenlstrip)r%   r.   encalphabetvalmodns          r   EncodezBase58Encoder.EncodeJ   s      (O44 	WUVVV (2 ":.. Aggc;#455HC3-#%C Agg
 
OOc*"3"3G"<"<===a3&&r   c                 n    t                               | t                              |           z   |          S )a  
        Encode bytes into Base58 string with checksum.

        Args:
            data_bytes (bytes)                  : Data bytes
            alph_idx (Base58Alphabets, optional): Alphabet index, Bitcoin by default

        Returns:
            str: Encoded string with checksum

        Raises:
            TypeError: If alphabet index is not a Base58Alphabets enumerative
        )r-   r>   r$   r)   )r%   r.   s     r   CheckEncodezBase58Encoder.CheckEncodeo   s.    $ ##J1L1LZ1X1X$XZbcccr   N)r   r   r   r   r*   r   r   r+   r"   r>   r@   r   r   r   r-   r-   G   s        hh+:+B"' "'5 "'("'GJ"' "' "' \"'H 0?0Gd d d-dLOd d d \d d dr   r-   c                   v    e Zd ZdZeej        fdededefd            Z	eej        fdededefd            Z
dS )Base58Decoderz[Base58 decoder class. It provides methods for decoding and checksum decoding Base58 format.data_strr.   r&   c                 .   t          |t                    st          d          t          j        |         }d}t          | ddd                   D ]-\  }}||                    |          t          j        |z  z  z  }.t                      }|dk    r.t          |d          \  }}|
                    |           |dk    .t          |           t          |                     |d                             z
  }d|z  t          |ddd                   z   S )ah  
        Decode bytes from a Base58 string.

        Args:
            data_str (str)                      : Data string
            alph_idx (Base58Alphabets, optional): Alphabet index, Bitcoin by default

        Returns:
            bytes: Decoded bytes

        Raises:
            TypeError: If alphabet index is not a Base58Alphabets enumerative
        r0   r   N   r2   )r3   r   r4   r   r   	enumerateindexr   	bytearrayr6   appendr7   r8   r+   )	rC   r.   r:   r;   icdecr<   pad_lens	            r   DecodezBase58Decoder.Decode   s     (O44 	WUVVV (2 htttn-- 	@ 	@DAq8>>!$$(9Q(>??CCkkAggc4((HCJJsOOO Agg
 h--#hoohqk&B&B"C"CC'!U3ttt9%5%555r   c                 D   t                               | |          }|dt          j                  }|t          j         d         }t                              |          }||k    r:t          dt          j        |           dt          j        |           d          |S )a  
        Decode bytes from a Base58 string with checksum.

        Args:
            data_str (str)                      : Data string
            alph_idx (Base58Alphabets, optional): Alphabet index, Bitcoin by default

        Returns:
            bytes: Decoded bytes (checksum removed)

        Raises:
            ValueError: If the string is not a valid Base58 format
            TypeError: If alphabet index is not a Base58Alphabets enumerative
            Base58ChecksumError: If checksum is not valid
        NzInvalid checksum (expected z, got ))	rB   rO   r   r   r$   r)   r   r   ToHexString)rC   r.   	dec_bytesr%   checksum_byteschecksum_bytes_gots         r   CheckDecodezBase58Decoder.CheckDecode   s    ( "((8<<	>!> >>?
"K$A#A#B#BC )88DD ///%Aj.DEW.X.X A A!-n==A A A  
 r   N)r   r   r   r   r*   r   r   r"   r+   rO   rV   r   r   r   rB   rB      s        ee+:+B"6 "6 "6("6GL"6 "6 "6 \"6H 0?0G" "c "-"LQ" " " \" " "r   rB   N)r   enumr   r   r   typingr   	base58_exr   utils.cryptor
   
utils.miscr   r   r   r$   r-   rB   r   r   r   <module>r\      sp  * + * $ # # # # # # # # #       * * * * * * ' ' ' ' ' ' # # # # # #     d          T T T T T T T T":d :d :d :d :d :d :d :dzK K K K K K K K K Kr   