§
    ÌtºfB  ã                   ó’   — 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@   € õ �X˜vÑ&Ô&€HÝÕ$ zÑ1°6Ñ:Ô:€DÝÔ˜x¨°4Õ9LÑ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   € õ 	ŒÕ$ d­G¬NÑ;Ô;×BÒBÑDÔD€AØ˜˜˜”f˜a   œ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ÑL€AÝˆq�sŠs‰uŒu‰:Œ:×Ò˜r¨UÐÑ3Ô3€DØ�SŠS‰UŒU�Q‰Y€FÝˆq�6‰z‰?Œ?×#Ò# 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ÒÐØ˜
Ñ"ˆˆå 
Ñ+Ô+ˆØ�fŒk˜$ Ñ"Ô"Ñ"€Að	4ÝŒH�Q˜�7œ>Ñ*Ô*×1Ò1Ñ3Ô3ˆØ˜C˜R˜Cœ& ! B C C¤&ˆZˆÝ�NŠN˜3¨%ˆNÑ0Ô0ˆÝ�NŠN˜:°ˆNÑ7Ô7ˆØ�1‰u�Ô)Ñ)ˆØ�{Ô Ò Ð  S¨A¢X XÝ�c‘(”(×#Ò# B°%Ð#Ñ8Ô8ˆCØØ�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   € õ Œ;�{¥G¤N°:Ñ$>Ô$>×$EÒ$EÑ$GÔ$GÑHÔH×OÒOÑQÔQÐRTÐSTÐRTÔ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{   € ð ¥¥s¨5¡z¤z°7Ñ!;Ô!;Ñ;Ð>PÑPÕSVÐW^ÑS_ÔS_×ShÒShØ	�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   € ð ¥¥s¨5¡z¤z°7Ñ!;Ô!;Ñ;Ð>PÑPÕSVÐW^ÑS_ÔS_×ShÒShØ	�Uð Tiñ Tô Tñ Ø#ñ$Ø&0ñ1€Cõ ˜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Ø˜1˜Q˜3Ô 4Ò'Ð'ÝÐbÑcÔcÐcà ×'Ò'¨Ñ-Ô-×3Ò3°CÑ8Ô8ð  ð  ˆØ�!ˆ8ˆ8Ø�KŠK�­¨A¨c¨r¨c¬F©¬Ñ3Ñ4Ô4Ð4Ð4à�KŠK�˜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Ñ)ÐÐ)à0Ð2C�€Kàð Sð SˆÝ"6°{ÀJÐPQÑ"RÔ"RÑˆ�Z�ZàÐ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   