
    8'h                         d dl Z d dlZd dlZd dlmZ d dlmZ dZdZdZ	eZ
dZdZd	 Zd
 Zd Zd Zd Zd Zd Zd ZedfdZy)    N)b58encode_check)	SECP256k1i   mnemonicl        s   Bitcoin seedzm/44'/60'/0'/0c                 x    t        | d      } t        t        |z   d      }t        j                  d| |t              S )zg BIP39 seed from a mnemonic key.
        Logic adapted from https://github.com/trezor/python-mnemonic. utf8sha512)bytesBIP39_SALT_MODIFIERhashlibpbkdf2_hmacBIP39_PBKDF2_ROUNDS)r   
passphrasesalts      R/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/xbr/_mnemonic.pymnemonic_to_bip39seedr   -   s:     Xv&H$z16:Dx49LMM    c                     t        j                  t        | t        j                        j                         }|dd |dd }}||fS )z BIP32 master node derivation from a bip39 seed.
        Logic adapted from https://github.com/satoshilabs/slips/blob/master/slip-0010/testvectors.py. N    )hmacnewBIP32_SEED_MODIFIERr   r   digest)seedhkey
chain_codes       r   bip39seed_to_bip32masternoder   5   sC     	$dGNN;BBDAfafC
?r   c                     t         j                  | d      t        j                  z  }|j	                         j                  dd      }|j                         dz  }d|z   j                  dd      |z   S )z Public key from a private key.
        Logic adapted from https://github.com/satoshilabs/slips/blob/master/slip-0010/testvectors.py. big	byteorderr         )int
from_bytesBIP32_CURVE	generatorxto_bytesy)private_keyQxstrparitys       r   derive_public_keyr/   =   sg     	{e4{7L7LLA335>>">.DSSUQYFJ  e 4t;;r   c                 V   t        |       dk(  sJ t        |      dk(  sJ |}|t        z  dk7  rd| z   }nt        |       }|t        j                  d|      z   }	 t        j                  ||t        j                        j                         }|dd |dd }}t        j                  |d      }t        j                  | d      }	||	z   t        j                  z  }|t        j                  k  r|dk7  r|j                  dd      }	 ||fS d|dd z   t        j                  d|      z   })	z Derives a child key from an existing key, i is current derivation parameter.
        Logic adapted from https://github.com/satoshilabs/slips/blob/master/slip-0010/testvectors.py. r   r       z>LNr   r       )lenBIP32_PRIVDEVr/   structpackr   r   r   r   r   r$   r%   r&   orderr)   )

parent_keyparent_chain_codeikr   dr   r   abs
             r   derive_bip32childkeyr?   G   s0    z?b    !R'''A	Ma
"
+fkk$""A
HHQ7>>*113CR&!BC&ZNN3%N0NN:N71u))){   SAX,,rU,3C 
? afv{{433 r   c                     t        j                  dt        j                  |       j                               j                         dd S )z< BIP32 fingerprint formula, used to get b58 serialized key. 	ripemd160N   )r   r   sha256r   )
public_keys    r   fingerprintrE   a   s9     ;;{GNN:$>$E$E$GHOOQRTSTUUr   c                     dt        t        |      d      z   | z   |j                  dd      z   |z   dz   |z   }t        |      S )z' Private key b58 serialization format. s   utf-8rB   r   r    r1   r	   chrr)   r   )parent_fingerprintr+   chaindepthchildnrraws         r   b58xprvrO   g   sd     s5z7!;;>PPSZScSc	U Td T #$&-.0;<C 3r   c                     dt        t        |      d      z   | z   |j                  dd      z   |z   |z   }t        |      S )z& Public key b58 serialization format. s   rG   rB   r   r    rH   )rJ   rD   rK   rL   rM   rN   s         r   b58xpubrQ   p   s\     s5z7!;;>PPSZScSc	U Td T #$&01C 3r   c           	          g }| dd dk7  rt        d      | j                  d      j                  d      D ]E  }d|v r%|j                  t        t        |dd       z          ,|j                  t        |             G |S )	zq Parses a derivation path such as "m/44'/60/0'/0" and returns
        list of integers for each element in path. r   r#   zm/zECan't recognize derivation path. It should look like "m/44'/60/0'/0"./'N)
ValueErrorlstripsplitappendr4   r$   )str_derivation_pathpathr:   s      r   parse_derivation_pathr\   y   s     D1Q4'bcc ''-33C8  !8KKAcrF34KKA	 
 Kr    c                     t        |      }t        | |      }t        |      \  }}||}}|D ]  }	t        |||	      \  }} |S )a   Performs all convertions to get a private key from a mnemonic sentence, including:

            BIP39 mnemonic to seed
            BIP32 seed to master key
            BIP32 child derivation of a path provided

        Parameters:
            mnemonic -- seed wordlist, usually with 24 words, that is used for ledger wallet backup
            str_derivation_path -- string that directs BIP32 key derivation, defaults to path
                used by ledger ETH wallet

    )r\   r   r   r?   )
r   rZ   r   derivation_path	bip39seedmaster_private_keymaster_chain_coder+   r   r:   s
             r   mnemonic_to_private_keyrc      sc     ,,?@O%h
;I,H,S))02CK S"6{JPQ"RZS r   )r   r   r5   base58r   ecdsa.curvesr   r   r
   r4   r&   r   LEDGER_ETH_DERIVATION_PATHr   r   r/   r?   rE   rO   rQ   r\   rc    r   r   <module>rh      sr   8    " "   %  . N<4V    ;Uac r   