
    E#i                     h    S r SSKJr  SSKJrJrJrJr   " S S5      r " S S5      r	 " S	 S
5      r
g)z+Module for base58-monero decoding/encoding.    )List   )Base58AlphabetsBase58ConstBase58DecoderBase58Encoderc                       \ rS rSr% Sr\R                  \R                     r	\
\S'   Sr\\S'   Sr\\S'   / SQr\\   \S	'   S
rg)Base58XmrConst   z,Class container for Base58 Monero constants.ALPHABET   BLOCK_DEC_MAX_BYTE_LEN   BLOCK_ENC_MAX_BYTE_LEN)	r                  	   
   r   BLOCK_ENC_BYTE_LENS N)__name__
__module____qualname____firstlineno____doc__r   	ALPHABETSr   BITCOINr   str__annotations__r   intr   r   r   __static_attributes__r       h/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/base58/base58_xmr.pyr
   r
      sK    6  ))/*A*ABHcB #$C# #%C$%BcBr%   r
   c                   T    \ rS rSrSr\S\S\4S j5       r\S\S\	S\4S j5       r
S	rg
)Base58XmrEncoder,   z
Base58 Monero encoder class.
It provides methods for encoding to Base58 format with Monero variation (encoding by blocks of 8-byte).

data_bytesreturnc                    Sn[        U 5      n[        R                  n[        X#5      u  pE[	        U5       HK  n[
        R                  " XU-  US-   U-   5      nU[        R                  U[        R                  5      -  nMM     US:  aJ  [
        R                  " XU-  XC-  U-    5      nU[        R                  U[        R                  U   5      -  nU$ )z
Encode bytes into a Base58 string with Monero variation.

Args:
    data_bytes (bytes): Data bytes

Returns:
    str: Encoded string
 r   r   )lenr
   r   divmodranger   Encoder(   _Base58XmrEncoder__Padr   r   )r*   encdata_lenblock_dec_lentot_block_cntlast_block_enc_leni	block_encs           r&   r1   Base58XmrEncoder.Encode2   s      z?&== -38,K) }%A%,,ZM8I1q5TaJa-bcI#)))^5Z5Z[[C &
 !%,,=8-:W[m9mnpI#)))^5W5WXj5kllC
r%   enc_strpad_lenc                 H    U R                  U[        R                  S   5      $ )z
Pad the encoded string to the specified length.

Args:
    enc_str (str): Encoded string
    pad_len (int): Pad length

Returns:
    str: Padded string
r   )rjustr
   r   )r;   r<   s     r&   __PadBase58XmrEncoder.__PadS   s      }}Wn&=&=a&@AAr%   r   N)r   r   r   r   r   staticmethodbytesr!   r1   r#   r2   r$   r   r%   r&   r(   r(   ,   sZ    
 5 S  @ Bs BB"B Br%   r(   c                   T    \ rS rSrSr\S\S\4S j5       r\S\S\	S\4S j5       r
S	rg
)Base58XmrDecoderc   z
Base58 Monero decoder class.
It provides methods for decoding Base58 format with Monero variation (encoding by blocks of 8-byte).
data_strr+   c                    Sn[        U 5      n[        R                  n[        R                  n[	        X$5      u  pV[        R
                  R                  U5      n[        U5       H<  n[        R                  " XU-  US-   U-   5      n	U[        R                  X5      -  nM>     US:  a8  [        R                  " XU-  XT-  U-    5      n	U[        R                  X5      -  nU$ )z
Decode bytes from a Base58 string with Monero variation.

Args:
    data_str (str): Data string

Returns:
    bytes: Decoded bytes
r%   r   r   )r.   r
   r   r   r/   r   indexr0   r   DecoderD   _Base58XmrDecoder__UnPad)
rF   decr4   r5   block_enc_lenr6   r7   last_block_dec_lenr8   	block_decs
             r&   rI   Base58XmrDecoder.Decodei   s      x=&==&== -38,K) ,??EEFXY }%A%,,X=7HAPQEUbKb-deI#++IEEC &
 !%,,-7=;X\n:nprI#++IJJC
r%   	dec_bytes	unpad_lenc                 6    U [        U 5      U-
  [        U 5       $ )z
Unpad the decoded string to the specified length.

Args:
    dec_bytes (bytes): Decoded bytes
    unpad_len (int): Unpad length

Returns:
    bytes: Unpadded string
)r.   )rP   rQ   s     r&   __UnPadBase58XmrDecoder.__UnPad   s     Y)3C	NCCr%   r   N)r   r   r   r   r   rA   r!   rB   rI   r#   rJ   r$   r   r%   r&   rD   rD   c   sZ    
 " " " "H D5 DD#(D Dr%   rD   N)r   typingr   base58r   r   r   r   r
   r(   rD   r   r%   r&   <module>rW      s:   * 2  N NC C4B 4Bn8D 8Dr%   