
    E#i=+                        S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	Sr
 " S S\5      rS	S jr " S S\5      rg)
    )annotationsN   c                      \ rS rSrSrg)ConfigurationError#    N)__name__
__module____qualname____firstlineno____static_attributes__r       d/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/mnemonic/mnemonic.pyr   r   #   s    r   r   c                    SnSu  p#[        U 5       H  nX2U-  -  nUS-  nM     SnU(       a!  [        US5      u  p6XUS-    U-   nU(       a  M!  U$ )N:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz)   r       :   r   )reverseddivmod)valphabetpacccstringidxs          r   	b58encoder   (   sh    KHFAa[1uF  F
#r?a(61 # Mr   c                      \ rS rSrSSS jjr\SS j5       r\SS j5       r\SS j5       r	SSS jjr
SS jrSS	 jrSS
 jrSS jrSS jr\SSS jj5       r\SSS jj5       rSrg) Mnemonic7   Nc                   SU l         Xl        Uc  [        R                  R	                  [        R                  R                  [        5      SU S35      n[        R                  R                  U5      (       af  [        R                  R                  U5      (       aB  [        USSS9 nUR                  5        Vs/ s H  oUR                  5       PM     nnS S S 5        O[        S5      e[        U5      U R                   :w  a  [        SU R                    S	35      eX l        US
:X  a  SU l        g SU l        g s  snf ! , (       d  f       Na= f)Nr   z	wordlist/.txtrutf-8)encodingzLanguage not detectedzWordlist must contain z words.japaneseu   　 )radixlanguageospathjoindirname__file__existsisfileopen	readlinesstripr   lenwordlist	delimiter)selfr+   r7   dfws         r   __init__Mnemonic.__init__8   s    
 RWW__X6)H:T8RSAww~~a  RWW^^A%6%6!S73q34;;=A=a	=HA 43 ))@AAx=DJJ&$'=djj\%QRR %-%;  B 43s   )D><D9D>9D>>
Ec                ,   [         R                  " [         R                  R                  [         R                  R	                  [
        5      S5      5       Vs/ s H/  nUR                  S5      (       d  M  UR                  S5      S   PM1     sn$ s  snf )Nr7   r$   .r   )r,   listdirr-   r.   r/   r0   endswithsplit)clsr;   s     r   list_languagesMnemonic.list_languagesK   sh     ZZRWW__X-F
 ST
Tzz&! AGGCLOT
 	
 
s   B6Bc                    [        U [        5      (       a  U R                  S5      nO#[        U [        5      (       a  U nO[	        S5      e[
        R                  " SU5      $ )Nutf8zString value expectedNFKD)
isinstancebytesdecodestr	TypeErrorunicodedata	normalize)txtutxts     r   normalize_stringMnemonic.normalize_stringS   sN    c5!!::f%DS!!D344$$VT22r   c                  ^ ^ T R                  U5      n[        U 4S jT R                  5        5       5      n[        UR                  5       5      nU H.  m[        U4S jU 5       5      nU(       a  M!  [	        ST< 35      e   [        U5      S:X  a  UR                  5       R                  $ [        5       nU H:  m[        U4S jU 5       5      n[        U5      S:X  d  M)  UR                  U5        M<     [        U5      S:X  a  UR                  5       R                  $ [	        SSR                  S U 5       5       35      e)	a  Scan the Mnemonic until the language becomes unambiguous, including as abbreviation prefixes.

Unfortunately, there are valid words that are ambiguous between languages, which are complete words
in one language and are prefixes in another:

    english: abandon ... about
    french:  abandon ... aboutir

If prefixes remain ambiguous, require exactly one language where word(s) match exactly.
c              3  4   >#    U  H  nT" U5      v   M     g 7fNr   ).0langrD   s     r   	<genexpr>+Mnemonic.detect_language.<locals>.<genexpr>k   s     B-ATs4yy-As   c              3  t   >#    U  H-  n[        U4S  jUR                   5       5      (       d  M)  Uv   M/     g7f)c              3  D   >#    U  H  oR                  T5      v   M     g 7frW   )
startswith)rX   r   words     r   rZ   5Mnemonic.detect_language.<locals>.<genexpr>.<genexpr>p   s     *Rz!<<+=+=zs    N)anyr7   rX   r   r_   s     r   rZ   r[   o   s'      #as*Rqzz*R'R8s   (8	8zLanguage unrecognized for r   c              3  L   >#    U  H  nTUR                   ;   d  M  Uv   M     g 7frW   )r7   rb   s     r   rZ   r[   y   s     B8atqzz/A8s   $	$zLanguage ambiguous between z, c              3  8   #    U  H  oR                   v   M     g 7frW   )r+   )rX   r   s     r   rZ   r[      s     3Q1JJs   )
rS   setrE   rC   r   r6   popr+   updater.   )rD   codepossiblewordscompleteexactr_   s   `     @r   detect_languageMnemonic.detect_language^   s    ##D)BS-?-?-ABBDJJL!D # H 8(+EdX)NOO  x=A<<>***5DB8BBE5zQ&  x=A<<>*** )$))3Q3Q*Q)RS
 	
r   c                t    US;  a  [        S5      eU R                  [        R                  " US-  5      5      $ )a  
Create a new mnemonic using a random generated number as entropy.

As defined in BIP39, the entropy must be a multiple of 32 bits, and its size must be between 128 and 256 bits.
Therefore the possible values for `strength` are 128, 160, 192, 224 and 256.

If not provided, the default entropy length will be set to 128 bits.

The return is a list of words that encodes the generated entropy.

:param strength: Number of bytes used as entropy
:type strength: int
:return: A randomly generated mnemonic
:rtype: str
)               zEInvalid strength value. Allowed values are [128, 160, 192, 224, 256].r   )
ValueErrorto_mnemonicsecretstoken_bytes)r9   strengths     r   generateMnemonic.generate   s?      44W   3 3HM BCCr   c                z   [        U[        5      (       d  UR                  S5      n[        U5      S;  a  [	        S[        U5      -  5      e[        U5      S-  nS/U-  nSnU Hn  nU R
                  R                  U R                  U5      5      nUS:  a  [        SU-  5      e[        S5       H  nUSS	U-
  -  -  S:g  X4S-  U-   '   M     US-  nMp     US
-  nX(-
  n	[        U	S-  5      n
[        [        U
5      5       H8  n[        S5       H&  nX7S-  U-      (       d  M  X==   SSU-
  -  -  ss'   M(     M:     [        R                  " U
5      R                  5       n[        [        R                  R!                  S U 5       5      5      n[        U5       H  nX9U-      X   :w  d  M  [	        S5      e   U
$ )Nr)                  zWNumber of words must be one of the following: [12, 15, 18, 21, 24], but it is not (%d).   Fr   z!Unable to find "%s" in word list.r   
   !   r      c              3  z   #    U  H,  n[        S 5       Vs/ s H  o!SSU-
  -  -  S:g  PM     snv   M.     gs  snf 7f)r   r   r   r   N)range)rX   r   is      r   rZ   &Mnemonic.to_entropy.<locals>.<genexpr>   s9      *EN%(;(QaAEl#q((;Y;s   ;6;zFailed checksum.)rJ   listrC   r6   ru   r7   indexrS   LookupErrorr   	bytearrayhashlibsha256digest	itertoolschainfrom_iterable)r9   rj   concatLenBits
concatBits	wordindexr_   ndxiichecksumLengthBitsentropyLengthBitsentropyjj	hashByteshashBitsr   s                  r   
to_entropyMnemonic.to_entropy   s   %&&KK$Eu:11ie*  E
RW},
	D--%%d&;&;D&ABCQw!"E"LMMBi58A"r'N5KPQ4Q
Nb01  NI  +b0)>-23G%BAhAvm,,K1R=0K  &
 NN7+224	OO)) *EN* 
 )*Aa/0HK? !344 + r   c                b   [        U5      S;  a  [        S[        U5       S35      e[        R                  " U5      R	                  5       n[        [        R                  USS95      SS  R                  [        U5      S-  5      [        [        US5      5      SS  R                  S	5      S [        U5      S-  S
-   -   n/ n[        [        U5      S-  5       H8  n[        X5S-  US-   S-   S5      nUR                  U R                  U   5        M:     U R                  R                  U5      $ )N)      r          zPData length should be one of the following: [16, 20, 24, 28, 32], but it is not r@   big	byteorder   r   r   rt   r   r   r   )r6   ru   r   r   	hexdigestbinint
from_byteszfillr   appendr7   r8   r.   )r9   datahbresultr   r   s          r   rv   Mnemonic.to_mnemonic   s   t900bcfgkclbmmno  NN4 **,tu56qr:@@TQO#a*oab!'',-Bs4y1}/BCD 	
 s1v|$AaB!a%2.2CMM$--,- % ~~""6**r   c                  ^  T R                  U5      R                  S5      n[        U5      S;  a  g [        U 4S jU5      nSR	                  U5      n[        U5      nUS US-  S-   nXE* S-  S  n[        US5      R                  US-  S	-  S
S9n[        [        [        R                  " U5      R                  5       S5      5      SS  R                  S5      S US-   n	Xy:H  $ ! [
         a     gf = f)Nr)   r}   Fc                p   > [        TR                  R                  U 5      5      SS  R                  S5      $ )Nr   r   )r   r7   r   r   )xr9   s    r   <lambda> Mnemonic.check.<locals>.<lambda>   s+    #dmm11!45ab9??Cr   r   r   r   r      r   r   r   rt   )rS   rC   r6   mapr.   ru   r   to_bytesr   r   r   r   r   )
r9   mnemonicmnemonic_listr   r   lr:   r   ndnhs
   `         r   checkMnemonic.check   s    --h7==cB}%99	C]C A FnR"bBhjMAYR!u=W^^B'113R89!"=CCCH1PR7Sw  		s   !C% %
C21C2c                    XR                   ;   a  U$ U R                    Vs/ s H  o"R                  U5      (       d  M  UPM     nn[        U5      S:X  a  US   $ U$ s  snf )Nr   r   )r7   r^   r6   )r9   prefixr_   matchess       r   expand_wordMnemonic.expand_word   sU    ]]"M(,Q9PtGQ7|q qz!  Rs
   AAc                j    SR                  [        U R                  UR                  S5      5      5      $ )Nr)   )r.   r   r   rC   )r9   r   s     r   expandMnemonic.expand   s'    xxD,,hnnS.ABCCr   c                    U R                  U5      nU R                  U5      nSU-   nUR                  S5      nUR                  S5      n[        R                  " SX4[        5      nUS S $ )Nr   r&   sha512@   )rS   encoder   pbkdf2_hmacPBKDF2_ROUNDS)rD   r   
passphrasemnemonic_bytespassphrase_bytes	stretcheds         r   to_seedMnemonic.to_seed   sp    ''1))*5
*,
!1%,,W5''n
	 "~r   c                   [        U 5      S:w  a  [        S5      e[        R                  " SU [        R
                  S9R                  5       n SnU(       a  SnUS-  nX SS  -  nUS	U S S -   -  n[        R                  " U5      R                  5       n[        R                  " U5      R                  5       nX#S S
 -  n[        U5      $ )Nr   z&Provided seed should have length of 64s   Bitcoin seed)	digestmods   s   5s	            r       r   )	r6   ru   hmacnewr   r   r   r   r   )seedtestnetxprvhashed_xprvs       r   to_hd_master_keyMnemonic.to_hd_master_key  s    t9?EFF xxHOOQ #&DRS	$s)## nnT*113nn[188: 	BQ r   )r8   r+   r*   r7   )englishN)r+   rM   r7   zlist[str] | None)returnz	list[str])rQ   zt.AnyStrr   rM   )rh   rM   r   rM   )rp   )ry   r   r   rM   )rj   zlist[str] | strr   r   )r   rK   r   rM   )r   rM   r   bool)r   rM   r   rM   )r   rM   r   rM   )r   )r   rM   r   rM   r   rK   )F)r   rK   r   r   r   rM   )r	   r
   r   r   r=   classmethodrE   staticmethodrS   rm   rz   r   rv   r   r   r   r   r   r   r   r   r   r!   r!   7   s    E& 
 
 3 3 !
 !
FD.)V+ &
D 	 	  r   r!   )r   rK   r   rM   )
__future__r   r   r   r   r,   rw   typingtrO   r   	Exceptionr   r   objectr!   r   r   r   <module>r      sC   , #    	   	 	
cv cr   