o
    @Bi                     @   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
 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'/0c                 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/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/xbr/_mnemonic.pymnemonic_to_bip39seed-   s   
r   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_bip32masternode5   s   r   c                 C   sH   t j| ddtj }| jddd}| d@ }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_key=   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 rk|dkrk|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_bip32childkeyG   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   fingerprinta   s   "r?   c                 C   s8   dt t|d |  |jddd | d | }t|S )z' Private key b58 serialization format. s   utf-8r<   r   r   r,   r   chrr%   r   )parent_fingerprintr'   chaindepthchildnrrawr   r   r   b58xprvg   s   rH   c                 C   s4   dt t|d |  |jddd | | }t|S )z& Public key b58 serialization format. s   r@   r<   r   r   rA   )rC   r>   rD   rE   rF   rG   r   r   r   b58xpubp   s   rI   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appendr/   r    )str_derivation_pathpathr5   r   r   r   parse_derivation_pathy   s   rS    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

    )rS   r   r   r:   )
r   rQ   r   derivation_path	bip39seedmaster_private_keymaster_chain_coder'   r   r5   r   r   r   mnemonic_to_private_key   s   

rY   )r	   r   r0   base58r   ecdsa.curvesr   r   r   r/   r"   r   LEDGER_ETH_DERIVATION_PATHr   r   r+   r:   r?   rH   rI   rS   rY   r   r   r   r   <module>   s(   
		