o
    >hB                     @   s   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	d
gZdd	 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedfdd
ZdS )    N)b58encode_check)	SECP256k1i   mnemonicl        s   Bitcoin seedzm/44'/60'/0'/0mnemonic_to_bip39seedmnemonic_to_private_keyc                 C   s(   t | d} t t| d}t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salt r   v/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/xbr/_mnemonic.pyr   2   s   
c                 C   s6   t t| t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_coder   r   r   bip39seed_to_bip32masternode:   s   r   c                 C   sP   t j| ddtj }t | jddd}| d@ }t d| jddd| 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parityr   r   r   derive_public_keyB   s   r,   c           
      C   s   t | dksJ t |dksJ |}|t@ dkrd|  }nt| }|td| }	 t||tj	 }|dd |dd }}t
j|dd}t
j| dd}	||	 tj }|tjk rm|dkrmt
|jddd}	 ||fS d	|dd  td| }q*)
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>LTNr   r      )lenBIP32_PRIVDEVr,   structpackr   r   r   r   r   r!   r"   r#   orderr&   )

parent_keyparent_chain_codeikr   dr   r   abr   r   r   derive_bip32childkeyL   s&   
r;   c                 C   s"   t dt |   dd S )z< BIP32 fingerprint formula, used to get b58 serialized key. 	ripemd160N   )r   r   sha256r   )
public_keyr   r   r   fingerprintf   s   "r@   c                 C   s<   dt t|d |  t|jddd | d | }t|S )z' Private key b58 serialization format. s   utf-8r=   r   r   r-   r	   chrr!   r&   r   )parent_fingerprintr(   chaindepthchildnrrawr   r   r   b58xprvl   s   rI   c                 C   s8   dt t|d |  t|jddd | | }t|S )z& Public key b58 serialization format. s   rA   r=   r   r   rB   )rD   r?   rE   rF   rG   rH   r   r   r   b58xpubu   s   rJ   c                 C   sh   g }| dd dkrt d| ddD ]}d|v r*|tt|dd   q|t| q|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appendr0   r!   )str_derivation_pathpathr6   r   r   r   parse_derivation_path~   s   rT    c           
      C   sF   t |}t| |}t|\}}||}}|D ]
}	t|||	\}}q|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

    )rT   r   r   r;   )
r   rR   r   derivation_path	bip39seedmaster_private_keymaster_chain_coder(   r   r6   r   r   r   r      s   

)r   r   r1   base58r   ecdsa.curvesr   r   r
   r0   r#   r   LEDGER_ETH_DERIVATION_PATH__all__r   r   r,   r;   r@   rI   rJ   rT   r   r   r   r   r   <module>   s.   
		