
    LfB                         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y)    N)b58encode_check)	SECP256k1i   mnemonicl        s   Bitcoin seedzm/44'/60'/0'/0mnemonic_to_bip39seedmnemonic_to_private_keyc                 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      Q/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/autobahn/xbr/_mnemonic.pyr   r   2   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   :   sC     	$dGNN;BBDAfafC
?r   c                    t         j                  | d      t        j                  z  }t        |j	                               j                  dd      }|j                         dz  }t        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_keyr0   B   sr     	{e4{7L7LLAqssu:rU3DSSUQYFq6z?##A#7$>>r   c                 h   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!t        |      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_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   s7    z?b    !R'''A	Ma
"
+fkk$""A
HHQ7>>*113CR&!BC&ZNN3%N0NN:N71u))){   SAXc(##B%#8C 
? 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   fingerprintrF   f   s9     ;;{GNN:$>$E$E$GHOOQRTSTUUr   c                     dt        t        |      d      z   | z   t        |      j                  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   sj     s5z7!;;>PPSVW^S_ShSh	U Ti T #$&-.0;<C 3r   c                     dt        t        |      d      z   | z   t        |      j                  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   sb     s5z7!;;>PPSVW^S_ShSh	U Ti 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appendr5   r%   )str_derivation_pathpathr;   s      r   parse_derivation_pathr]   ~   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   r[   r   derivation_path	bip39seedmaster_private_keymaster_chain_coder,   r   r;   s
             r   r   r      sc     ,,?@O%h
;I,H,S))02CK S"6{JPQ"RZS 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?4V    ;Uac r   