
    tfB                         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 Zd Zd Zd Zd Zd Zd Zd ZedfdZdS )    N)b58encode_check)	SECP256k1i   mnemonicl        s   Bitcoin seedzm/44'/60'/0'/0mnemonic_to_bip39seedmnemonic_to_private_keyc                     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      U/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/xbr/_mnemonic.pyr   r   2   s@     Xv&&H$z16::Dx49LMMM    c                     t          j        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_codes       r   bip39seed_to_bip32masternoder   :   sI     	$dGN;;BBDDAfafC
?r   c                 B   t                               | d          t          j        z  }t          |                                                              dd          }|                                dz  }t          d|z                                 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_keyr0   B   s     	{e44{7LLAqssuu::rU33DSSUUQYFq6z??##A#77$>>r   c                    t          |           dk    sJ t          |          dk    sJ |}|t          z  dk    rd| z   }nt          |           }|t          j        d|          z   }	 t          j        ||t          j                  	                                }|dd         |dd         }}t                              |d          }t                              | d          }	||	z   t          j        z  }|t          j        k     r+|dk    r%t          |                              dd          }n$d	|dd         z   t          j        d|          z   }||fS )
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_PRIVDEVr0   structpackr   r   r   r
   r   r%   r&   r'   orderr*   )

parent_keyparent_chain_codeikr   dr   r   abs
             r   derive_bip32childkeyr@   L   s^    z??b     !!R''''A	Ma
"
++fk$"""A	4HQ7>**1133CRC&!BCC&ZNN3%N00NN:N771u)){   SAXXc((##B%#88Cafv{4333	4 
?r   c                     t          j        dt          j        |                                                                                     dd         S )z< BIP32 fingerprint formula, used to get b58 serialized key. 	ripemd160N   )r   r   sha256r   )
public_keys    r   fingerprintrF   f   sD     ;{GN:$>$>$E$E$G$GHHOOQQRTSTRTUUr   c                     dt          t          |          d          z   | z   t          |                              dd          z   |z   dz   |z   }t	          |          S )z' Private key b58 serialization format. s   utf-8rC   r    r!   r2   r   chrr%   r*   r   )parent_fingerprintr,   chaindepthchildnrraws         r   b58xprvrP   l   s{     s5zz7!;!;;>PPSVW^S_S_ShSh	U Ti T T #$&-.0;<C 3r   c                     dt          t          |          d          z   | z   t          |                              dd          z   |z   |z   }t	          |          S )z& Public key b58 serialization format. s   rH   rC   r    r!   rI   )rK   rE   rL   rM   rN   rO   s         r   b58xpubrR   u   ss     s5zz7!;!;;>PPSVW^S_S_ShSh	U Ti T T #$&01C 3r   c           	      L   g }| dd         dk    rt          d          |                     d                              d          D ][}d|v r3|                    t          t          |dd                   z              9|                    t          |                     \|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appendr5   r%   )str_derivation_pathpathr;   s      r   parse_derivation_pathr]   ~   s     D1Q34''bccc ''--33C88    !88KKAcrcF3444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   r[   r   derivation_path	bip39seedmaster_private_keymaster_chain_coder,   r   r;   s
             r   r   r      so     ,,?@@O%h
;;I,H,S,S))02CK S S"6{JPQ"R"RZZr   )r   r   r6   base58r   ecdsa.curvesr   r   r   r5   r'   r   LEDGER_ETH_DERIVATION_PATH__all__r   r   r0   r@   rF   rP   rR   r]   r    r   r   <module>ri      s  8    " " " " " " " " " " " "   %  .  N N N  ? ? ?  4V V V              ;Uac      r   