
    ei=+                        d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	dZ
 G d de          Zdd
Z G d de          ZdS )    )annotationsN   c                      e Zd ZdS )ConfigurationErrorN)__name__
__module____qualname__     h/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/static_dependencies/mnemonic/mnemonic.pyr   r   #   s        Dr   r   vbytesreturnstrc                    d}d\  }}t          |           D ]}|||z  z  }|dz  }d}|r%t          |d          \  }}|||dz            |z   }|%|S )N:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz)   r       :   r   )reverseddivmod)r   alphabetpacccstringidxs          r   	b58encoder   (   s    KHFAsa[[  q1uFF
 2#r??S#a-(61  2 Mr   c                      e Zd Zd(d)dZed*d
            Zed+d            Zed,d            Zd-d.dZ	d/dZ
d0dZd1dZd2dZd3d Zed4d5d#            Zed6d7d'            ZdS )8MnemonicenglishNlanguager   wordlistlist[str] | Nonec                j   d| _         || _        |t          j                            t          j                            t                    d| d          }t          j                            |          rht          j                            |          rIt          |dd          5 }d |
                                D             }d d d            n# 1 swxY w Y   nt          d          t          |          | j         k    rt          d	| j          d
          || _        |dk    rdnd| _        d S )Nr   z	wordlist/.txtrutf-8)encodingc                6    g | ]}|                                 S r
   )strip).0ws     r   
<listcomp>z%Mnemonic.__init__.<locals>.<listcomp>@   s     AAAa		AAAr   zLanguage not detectedzWordlist must contain z words.japaneseu   　 )radixr#   ospathjoindirname__file__existsisfileopen	readlinesr   lenr$   	delimiter)selfr#   r$   dfs        r   __init__zMnemonic.__init__8   se   
 RW__X668RH8R8R8RSSAw~~a   BRW^^A%6%6 B!S7333 BqAA1;;==AAAHB B B B B B B B B B B B B B B ))@AAAx==DJ&&$%Qdj%Q%Q%QRRR %-%;%;s   'CCCr   	list[str]c                    d t          j        t           j                            t           j                            t
                    d                    D             S )Nc                n    g | ]2}|                     d           |                    d          d         3S )r'   .r   )endswithsplit)r-   r@   s     r   r/   z+Mnemonic.list_languages.<locals>.<listcomp>M   sH     
 
 
zz&!!
GGCLLO
 
 
r   r$   )r3   listdirr4   r5   r6   r7   )clss    r   list_languageszMnemonic.list_languagesK   sK    
 
ZRW__X-F-F
 S STT
 
 
 	
r   txtt.AnyStrc                    t          | t                    r|                     d          }n't          | t                    r| }nt	          d          t          j        d|          S )Nutf8zString value expectedNFKD)
isinstancer   decoder   	TypeErrorunicodedata	normalize)rK   utxts     r   normalize_stringzMnemonic.normalize_stringS   sb    c5!! 	5::f%%DDS!! 	5DD3444$VT222r   codec                                          |          }t           fd                                 D                       }t          |                                          }|D ]1t          fd|D                       }|st	          d          2t          |          dk    r|                                j        S t                      }|D ]Et          fd|D                       }t          |          dk    r|                    |           Ft          |          dk    r|                                j        S t	          dd	                    d |D                                  )	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  .   K   | ]} |          V  d S Nr
   )r-   langrI   s     r   	<genexpr>z+Mnemonic.detect_language.<locals>.<genexpr>k   s+      BBTss4yyBBBBBBr   c              3  \   K   | ]&}t          fd |j        D                       "|V  'dS )c              3  B   K   | ]}|                               V  d S rZ   
startswith)r-   r   words     r   r\   z5Mnemonic.detect_language.<locals>.<genexpr>.<genexpr>p   s/      *R*R!1<<+=+=*R*R*R*R*R*Rr   N)anyr$   r-   r   ra   s     r   r\   z+Mnemonic.detect_language.<locals>.<genexpr>o   s[        s*R*R*R*Rqz*R*R*R'R'R     r   zLanguage unrecognized for r   c              3  .   K   | ]}|j         v |V  d S rZ   )r$   rc   s     r   r\   z+Mnemonic.detect_language.<locals>.<genexpr>y   s/      BBatqz/A/A/A/A/A/ABBr   zLanguage ambiguous between z, c              3  $   K   | ]}|j         V  d S rZ   )r#   )r-   r   s     r   r\   z+Mnemonic.detect_language.<locals>.<genexpr>   s$      3Q3Q1AJ3Q3Q3Q3Q3Q3Qr   )
rV   setrJ   rG   r   r<   popr#   updater5   )rI   rW   possiblewordscompleteexactra   s   `     @r   detect_languagezMnemonic.detect_language^   s    ##D))BBBBS-?-?-A-ABBBBBDJJLL!! 	P 	PD    #    H  P()Nd)N)NOOOPx==A<<>>**55 	' 	'DBBBB8BBBBBE5zzQ&&&x==A<<>>** S$))3Q3Q3Q3Q3Q*Q*QSS
 
 	
r      strengthintc                |    |dvrt          d          |                     t          j        |dz                      S )aR  
        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
        )rn               zEInvalid strength value. Allowed values are [128, 160, 192, 224, 256].r   )
ValueErrorto_mnemonicsecretstoken_bytes)r>   ro   s     r   generatezMnemonic.generate   sJ      444W    3HM B BCCCr   rj   list[str] | str	bytearrayc                   t          |t                    s|                    d          }t          |          dvrt	          dt          |          z            t          |          dz  }dg|z  }d}|D ]v}| j                            |                     |                    }|dk     rt          d|z            t          d          D ]}|dd	|z
  z  z  dk    ||dz  |z   <   |dz  }w|d
z  }||z
  }	t          |	dz            }
t          t          |
                    D ]8}t          d          D ]&}||dz  |z            r|
|xx         dd|z
  z  z  cc<   '9t          j        |
                                          }t          t          j                            d |D                                 }t          |          D ]&}||	|z            ||         k    rt	          d          '|
S )Nr1                  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  N   K   | ]fd t          d          D             V   dS )c                .    g | ]}d d|z
  z  z  dk    S )r   r   r   r
   )r-   ir   s     r   r/   z1Mnemonic.to_entropy.<locals>.<genexpr>.<listcomp>   s+    ;;;QaAEl#q(;;;r   r   N)range)r-   r   s    @r   r\   z&Mnemonic.to_entropy.<locals>.<genexpr>   sO       * *@A;;;;%((;;;* * * * * *r   zFailed checksum.)rP   listrG   r<   rv   r$   indexrV   LookupErrorr   r|   hashlibsha256digest	itertoolschainfrom_iterable)r>   rj   concatLenBits
concatBits	wordindexra   ndxiichecksumLengthBitsentropyLengthBitsentropyjj	hashByteshashBitsr   s                  r   
to_entropyzMnemonic.to_entropy   sV   %&& 	%KK$$Eu::111ie**   E

RW},
	 	 	D-%%d&;&;D&A&ABBCQww!"E"LMMMBii R R58A"r'N5KPQ4Q
INb011NII*b0),>>-233G%% 	1 	1BAhh 1 1rAvm, 1BKKK1R=0KKK1 N7++2244	O)) * *EN* * *  
 
 )** 	5 	5A+a/0HQK?? !3444 @r   datar   c                   t          |          dvr t          dt          |           d          t          j        |                                          }t          t                              |d                    dd                              t          |          dz            t          t          |d                    dd                              d	          d t          |          dz  d
z           z   }g }t          t          |          dz            D ]C}t          ||dz  |dz   dz           d          }|
                    | j        |                    D| j                            |          S )N)      r          zPData length should be one of the following: [16, 20, 24, 28, 32], but it is not rE   big	byteorder   r   r   ru   r   r   r   )r<   rv   r   r   	hexdigestbinrp   
from_byteszfillr   appendr$   r=   r5   )r>   r   hbresultr   r   s          r   rw   zMnemonic.to_mnemonic   sc   t99000ocfgkclclooo   N4  **,,tu5566qrr:@@TQOO#a**ooabb!'',,-Bs4yy1}/B-BCD 	
 s1vv|$$ 	. 	.AaB!a%2-.22CMM$-,----~""6***r   mnemonicboolc                z                          |                              d          }t          |          dvrdS 	 t           fd|          }d                    |          }n# t
          $ r Y dS w xY wt          |          }|d |dz  dz           }|| dz  d          }t          |d                              |dz  d	z  d
          }t          t          t          j
        |                                          d                    dd                              d          d |dz           }	||	k    S )Nr1   r~   Fc                    t          j                            |                     dd                              d          S )Nr   r   )r   r$   r   r   )xr>   s    r   <lambda>z Mnemonic.check.<locals>.<lambda>   s6    #dm11!4455abb9??CC r   r   r   r   r      r   r   r   ru   )rV   rG   r<   mapr5   rv   rp   to_bytesr   r   r   r   r   )
r>   r   mnemonic_listr   r   lr?   r   ndnhs
   `         r   checkzMnemonic.check   sK   --h77==cBB}%9995	CCCC] C AA 	 	 	55	FFnR"nqbBhjjMAYYR!u==W^B''1133R8899!""=CCCHH1PR7SBws   (A' '
A54A5prefixc                z    | j         v rS fd| j         D             }t          |          dk    r|d         S S )Nc                >    g | ]}|                               |S r
   r_   )r-   ra   r   s     r   r/   z(Mnemonic.expand_word.<locals>.<listcomp>   s*    QQQ9P9PQtQQQr   r   r   )r$   r<   )r>   r   matchess    ` r   expand_wordzMnemonic.expand_word   sR    T]""MQQQQQQQG7||q  qz! r   c                x    d                     t          | j        |                    d                              S )Nr1   )r5   r   r   rG   )r>   r   s     r   expandzMnemonic.expand   s-    xxD,hnnS.A.ABBCCCr   r   
passphrasec                    |                      |          }|                      |          }d|z   }|                    d          }|                    d          }t          j        d||t                    }|d d         S )Nr   r)   sha512@   )rV   encoder   pbkdf2_hmacPBKDF2_ROUNDS)rI   r   r   mnemonic_bytespassphrase_bytes	stretcheds         r   to_seedzMnemonic.to_seed   s    ''11))*55
*,
!11%,,W55'n&6
 
	 "~r   Fseedtestnetc                   t          |           dk    rt          d          t          j        d| t          j                                                  } d}|rd}|dz  }|| dd          z  }|d	| d d         z   z  }t	          j        |                                          }t	          j        |                                          }||d d
         z  }t          |          S )Nr   z&Provided seed should have length of 64s   Bitcoin seed)	digestmods   s   5s	            r       r   )	r<   rv   hmacnewr   r   r   r   r   )r   r   xprvhashed_xprvs       r   to_hd_master_keyzMnemonic.to_hd_master_key  s    t99??EFFF xHHHOOQQ # 	'&DRSS	$ss)## nT**1133n[1188:: 	BQB r   )r"   N)r#   r   r$   r%   )r   rB   )rK   rL   r   r   )rW   r   r   r   )rn   )ro   rp   r   r   )rj   r{   r   r|   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   )r   r   r   r   r   r   )F)r   r   r   r   r   r   )r   r   r	   rA   classmethodrJ   staticmethodrV   rm   rz   r   rw   r   r   r   r   r   r
   r   r   r!   r!   7   sd       E E E E E& 
 
 
 [
 3 3 3 \3 !
 !
 !
 [!
FD D D D D.) ) ) )V+ + + +    &
 
 
 
D D D D 	 	 	 	 [	     \  r   r!   )r   r   r   r   )
__future__r   r   r   r   r3   rx   typingtrS   r   	Exceptionr   r   objectr!   r
   r   r   <module>r      s   , # " " " " "       				         	 	 	 	 	 	 	 	
   c c c c cv c c c c cr   