
    E#i[                         S r SSKrSSKrSSKJrJr  SSKJr   " S S5      r " S S	5      r	 " S
 S5      r
 " S S5      rg)z$Module with helper class for Base32.    N)OptionalUnion   )	AlgoUtilsc                   6    \ rS rSr% SrSr\\S'   Sr\\S'   Sr	g)	Base32Const   z%Class container for Base32 constants. ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ALPHABET=PADDING_CHAR N)
__name__
__module____qualname____firstlineno____doc__r   str__annotations__r   __static_attributes__r       h/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/bip/utils/misc/base32.pyr   r      s    / 7Hc6L#r   r   c            	       X    \ rS rSrSr\S\S\4S j5       r\S\S\S\S\4S j5       rS	r	g
)_Base32Utils(   z\
Base32 utility class.
It provides some helper methods for decoding/encoding Base32 format.
datareturnc                 `    [        U 5      S-  nUS:w  a  U SU-
  [        R                  -  -  n U $ )z
Add padding to an encoded Base32 string.
Used if the string was encoded with Base32Encoder.EncodeNoPadding

Args:
    data (str): Data

Returns:
    str: Padded string
   r   )lenr   r   )r   last_block_widths     r   
AddPadding_Base32Utils.AddPadding.   s:     t9q=q Q))[-E-EEEDr   from_alphabetto_alphabetc                 J    U R                  [        R                  X5      5      $ )z
Translate the standard Base32 alphabet to a custom one.

Args:
    data (str)         : Data
    from_alphabet (str): Starting alphabet string
    to_alphabet (str)  : Final alphabet string

Returns:
    str: String with translated alphabet
)	translater   	maketrans)r   r$   r%   s      r   TranslateAlphabet_Base32Utils.TranslateAlphabet?   s     ~~cmmMGHHr   r   N)
r   r   r   r   r   staticmethodr   r"   r)   r   r   r   r   r   r   (   sb    
      I I),I'*I/2I Ir   r   c                   D    \ rS rSrSr\ S	S\S\\   S\4S jj5       r	Sr
g)
Base32DecoderQ   zJ
Base32 decoder class.
It provides methods for decoding to Base32 format.
Nr   custom_alphabetr   c                      [         R                  U 5      nUb$  [         R                  X![        R                  5      n[
        R                  " U5      $ ! [        R                   a  n[        S5      UeSnAff = f)z
Decode from Base32.

Args:
    data (str)                     : Data
    custom_alphabet (str, optional): Custom alphabet string

Returns:
    bytes: Decoded bytes

Raises:
    ValueError: If the Base32 string is not valid
NzInvalid Base32 string)
r   r"   r)   r   r   base64	b32decodebinasciiError
ValueError)r   r/   data_decexs       r   DecodeBase32Decoder.DecodeW   si     	>#..t4H*'99(U`UiUij##H--~~ 	>452=	>s   AA A9(A44A9r   N)r   r   r   r   r   r+   r   r   bytesr8   r   r   r   r   r-   r-   Q   s9    
 04>S > (>9>> >r   r-   c                       \ rS rSrSr\ S
S\\\4   S\	\   S\4S jj5       r
\ S
S\\\4   S\	\   S\4S jj5       rS	rg)Base32Encoderq   zJ
Base32 encoder class.
It provides methods for encoding to Base32 format.
Nr   r/   r   c                     [         R                  " [        R                  " [         R                  " U 5      5      5      nUb%  [
        R                  U[        R                  U5      nU$ )z
Encode to Base32.

Args:
    data (str or bytes)            : Data
    custom_alphabet (str, optional): Custom alphabet string

Returns:
    str: Encoded string
)	r   r8   r1   	b32encodeEncoder   r)   r   r   )r   r/   b32_encs      r   rA   Base32Encoder.Encodew   sP     ""6#3#3I4D4DT4J#KL&"44Wk>R>RTcdGr   c                 f    [         R                  X5      R                  [        R                  5      $ )z
Encode to Base32 by removing the final padding.

Args:
    data (str or bytes)            : Data
    custom_alphabet (str, optional): Custom alphabet string

Returns:
    str: Encoded string
)r=   rA   rstripr   r   )r   r/   s     r   EncodeNoPaddingBase32Encoder.EncodeNoPadding   s&     ##D:AA+BZBZ[[r   r   r:   )r   r   r   r   r   r+   r   r;   r   r   rA   rF   r   r   r   r   r=   r=   q   s    
 04U5#:&  (9< $ 9=\eE3J/ \)1#\BE\ \r   r=   )r   r1   r3   typingr   r   algor   r   r   r-   r=   r   r   r   <module>rJ      sF   * +   "  &I &IR> >@&\ &\r   