
    E#i                         S r SSKJrJrJr  SSKJr  SSKJr  SSK	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)z$Module for base58 decoding/encoding.    )Enumautounique)Dict   )Base58ChecksumError   )DoubleSha256)
BytesUtilsc                   4    \ rS rSrSr\" 5       r\" 5       rSrg)Base58Alphabets    z Enumerative for Base58 alphabet. N)	__name__
__module____qualname____firstlineno____doc__r   BITCOINRIPPLE__static_attributes__r       d/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/base58/base58.pyr   r       s    *fGVFr   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)Base58Const(   z%Class container for Base58 constants.:   RADIX   CHECKSUM_BYTE_LEN:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz:rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz	ALPHABETSr   N)r   r   r   r   r   r   int__annotations__r    r   r   r   r#   r   strr   r   r   r   r   r   (   sM    / E3Os 	!] \-ItOS() r   r   c                   4    \ rS rSrSr\S\S\4S j5       rSrg)Base58Utils6   z-Class container for Base58 utility functions.
data_bytesreturnc                 P    [         R                  " U 5      S[        R                   $ )zk
Compute Base58 checksum.

Args:
    data_bytes (bytes): Data bytes

Returns:
    bytes: Computed checksum
N)r
   QuickDigestr   r    )r*   s    r   ComputeChecksumBase58Utils.ComputeChecksum9   s#     ''
34R[5R5RSSr   r   N)	r   r   r   r   r   staticmethodbytesr.   r   r   r   r   r(   r(   6   s)    7
TE 
Te 
T 
Tr   r(   c                       \ rS rSrSr\\R                  4S\S\S\	4S jj5       r
\\R                  4S\S\S\	4S jj5       rSrg	)
Base58EncoderG   z^Base58 encoder class. It provides methods for encoding and checksum encoding to Base58 format.r*   alph_idxr+   c                 \   [        U[        5      (       d  [        S5      eSn[        R                  U   n[
        R                  " U 5      nUS:  a+  [        U[        R                  5      u  pEX5   U-   nUS:  a  M+  [        U 5      [        U R                  S5      5      -
  nUS   U-  U-   $ )a  
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*   r5   encalphabetvalmodns          r   EncodeBase58Encoder.EncodeJ   s      (O44UVV ((2 "":. Agc;#4#45HC-#%C Ag
 
Oc*"3"3G"<==a3&&r   c                 Z    [         R                  U [        R                  U 5      -   U5      $ )a8  
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
)r3   rE   r(   r.   )r*   r5   s     r   CheckEncodeBase58Encoder.CheckEncodeo   s(    $ ##J1L1LZ1X$XZbccr   r   N)r   r   r   r   r   r0   r   r   r1   r&   rE   rH   r   r   r   r   r3   r3   G   sq    h+:+B+B"'5 "'("'GJ"' "'H 0?0G0Gd d-dLOd dr   r3   c                       \ rS rSrSr\\R                  4S\S\S\	4S jj5       r
\\R                  4S\S\S\	4S jj5       rSrg	)
Base58Decoder   z[Base58 decoder class. It provides methods for decoding and checksum decoding Base58 format.data_strr5   r+   c                    [        U[        5      (       d  [        S5      e[        R                  U   nSn[        U SSS2   5       H,  u  pEX2R                  U5      [        R                  U-  -  -  nM.     [        5       nUS:  a'  [        US5      u  p7UR                  U5        US:  a  M'  [        U 5      [        U R                  US   5      5      -
  nSU-  [        USSS2   5      -   $ )a   
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
r7   r   N   r9   )r:   r   r;   r   r#   	enumerateindexr   	bytearrayr=   appendr>   r?   r1   )	rM   r5   rA   rB   icdecrC   pad_lens	            r   DecodeBase58Decoder.Decode   s      (O44UVV ((2 httn-DA>>!$(9(9Q(>??C . kAgc4(HCJJsO Ag
 h-#hoohqk&B"CC'!U3tt9%555r   c                 (   [         R                  X5      nUS[        R                  *  nU[        R                  * S n[        R                  U5      nXE:w  a:  [        S[        R                  " U5       S[        R                  " U5       S35      eU$ )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 ))	rK   rY   r   r    r(   r.   r   r   ToHexString)rM   r5   	dec_bytesr*   checksum_byteschecksum_bytes_gots         r   CheckDecodeBase58Decoder.CheckDecode   s    ( "((<	>!>!> >?
"K$A$A#A#BC )88D /%-j.D.DEW.X-Y Z!--n=>aA 
 r   r   N)r   r   r   r   r   r0   r   r   r&   r1   rY   ra   r   r   r   r   rK   rK      sl    e+:+B+B"6 "6("6GL"6 "6H 0?0G0G"c "-"LQ" "r   rK   N)r   enumr   r   r   typingr   	base58_exr   utils.cryptor
   
utils.miscr   r   r   r(   r3   rK   r   r   r   <module>rh      sh   * + $ #  * ' # d   T T":d :dzK Kr   