§
    Ìtºf´S  ã                   ób  — d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZmZ d d
lmZm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& dZ' G d„ de(¦  «        Z) e j*        e)¦  «          G d„ de¦  «        Z+ ej*        e+¦  «         dS )é    N)ÚMutableMapping)ÚOptionalÚUnionÚDictÚAnyÚListÚIterator)ÚLock)ÚAccount)ÚLocalAccount)Úencode_typed_data)ÚecsignÚecrecover_to_pubÚchecksum_encodeÚsha3)Úv_r_s_to_signatureÚsignature_to_v_r_s)ÚISecurityModuleÚIEthereumKey)Úmnemonic_to_private_key)Úparse_keyfile)ÚCryptosignKey)ÚEthereumKeyÚSecurityModuleMemoryc                   ó*  — e Zd ZdZ	 	 d#deeeef         dede	e
         de	e         ddf
d„Zede	d	         fd
„¦   «         Zede	e         fd„¦   «         Zedefd„¦   «         Zd$dedeeef         fd„Zedefd„¦   «         Zd$dedeeef         fd„Zdedefd„Zdededefd„Zd%deeef         defd„Zdeeef         dedefd„Zedeeef         dd fd„¦   «         Zededd fd„¦   «         Zed&dededd fd „¦   «         Zed!edd fd"„¦   «         ZdS )'r   zQ
    Base class to implement :class:`autobahn.wamp.interfaces.IEthereumKey`.
    NÚkey_or_addressÚcan_signÚsecurity_moduleÚkey_noÚreturnc                 óê   — |r.t          |¦  «        t          k    sJ ‚|| _        |j        | _        n-t          |¦  «        t
          t          fv sJ ‚d | _        || _        || _        || _        || _	        d S ©N)
Útyper   Ú_keyÚaddressÚ_addressÚstrÚbytesÚ	_can_signÚ_security_moduleÚ_key_no)Úselfr   r   r   r   s        úS/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/xbr/_secmod.pyÚ__init__zEthereumKey.__init__8   s}   € ð ð 	+å˜Ñ'Ô'­<Ò7Ð7Ð7Ð7Ø&ˆDŒIØ*Ô2ˆDŒMˆMå˜Ñ'Ô'­Cµ¨<Ð7Ð7Ð7Ð7ØˆDŒIØ*ˆDŒMØ!ˆŒØ /ˆÔØˆŒˆˆó    r   c                 ó   — | j         S )zS
        Implements :meth:`autobahn.wamp.interfaces.IKey.security_module`.
        )r*   ©r,   s    r-   r   zEthereumKey.security_moduleH   s   € ð
 Ô$Ð$r/   c                 ó   — | j         S )zJ
        Implements :meth:`autobahn.wamp.interfaces.IKey.key_no`.
        )r+   r1   s    r-   r   zEthereumKey.key_noO   s   € ð
 Œ|Ðr/   c                 ó   — dS )zL
        Implements :meth:`autobahn.wamp.interfaces.IKey.key_type`.
        Úethereum© r1   s    r-   Úkey_typezEthereumKey.key_typeV   s	   € ð
 ˆzr/   FÚbinaryc                 ó   — t          ¦   «         ‚)zN
        Implements :meth:`autobahn.wamp.interfaces.IKey.public_key`.
        ©ÚNotImplementedError©r,   r7   s     r-   Ú
public_keyzEthereumKey.public_key]   s   € õ "Ñ#Ô#Ð#r/   c                 ó   — | j         S )zL
        Implements :meth:`autobahn.wamp.interfaces.IKey.can_sign`.
        )r)   r1   s    r-   r   zEthereumKey.can_signc   s   € ð
 Œ~Ðr/   c                 óV   — |r!t          j        | j        dd…         ¦  «        S | j        S )zS
        Implements :meth:`autobahn.wamp.interfaces.IEthereumKey.address`.
        é   N)ÚbinasciiÚa2b_hexr&   r;   s     r-   r%   zEthereumKey.addressj   s0   € ð ð 	!ÝÔ# D¤M°!°"°"Ô$5Ñ6Ô6Ð6à”=Ð r/   Údatac                 ó   — t          ¦   «         ‚)zH
        Implements :meth:`autobahn.wamp.interfaces.IKey.sign`.
        r9   )r,   rB   s     r-   ÚsignzEthereumKey.signs   ó   € õ
 "Ñ#Ô#Ð#r/   Ú	signaturec                 ó   — t          ¦   «         ‚)zK
        Implements :meth:`autobahn.wamp.interfaces.IKey.recover`.
        r9   )r,   rB   rF   s      r-   ÚrecoverzEthereumKey.recoverz   rE   r/   Tc                 ó¬  — | j         r"| j         j        r| j         j        r
J d¦   «         ‚	 t          |¦  «        }t	          || j        j        ¦  «        }t          |Ž }|rt          j	        |¦  «        S t          j	        t          j        |¦  «                             ¦   «         ¦  «        S # t          $ r}t          j        |¦  «        cY d}~S d}~ww xY w)z[
        Implements :meth:`autobahn.wamp.interfaces.IEthereumKey.sign_typed_data`.
        ú)security module must be open and unlockedN)r*   Úis_openÚ	is_lockedr   r   r$   Úkeyr   ÚtxaioÚcreate_future_successr@   Úb2a_hexÚdecodeÚ	ExceptionÚcreate_future_error)r,   rB   r7   Úmsg_hashÚsignature_vrsrF   Úes          r-   Úsign_typed_datazEthereumKey.sign_typed_data�   s  € ð Ô ð 	FØÔ(Ô0ð  F¸Ô9NÔ9Xð  Fð  Fð  [Fñ  Fô  Fð  Fð	Yå(¨Ñ.Ô.ˆHõ # 8¨T¬Y¬]Ñ;Ô;ˆMõ +¨MÐ:ˆIð ð YÝÔ2°9Ñ=Ô=Ð=åÔ2µ8Ô3CÀIÑ3NÔ3N×3UÒ3UÑ3WÔ3WÑXÔXÐXøõ ð 	0ð 	0ð 	0ÝÔ,¨QÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/øøøøð	0øøøs   «2B+ Â+
CÂ5CÃCÃCc                 óˆ  — | j         r"| j         j        r| j         j        r
J d¦   «         ‚	 t          |¦  «        }t	          |¦  «        }t          |g|¢R Ž }t          |¦  «        dd…         }t          |¦  «        }t          j	        || j
        k    ¦  «        S # t          $ r}t          j        |¦  «        cY d}~S d}~ww xY w)z]
        Implements :meth:`autobahn.wamp.interfaces.IEthereumKey.verify_typed_data`.
        rJ   iìÿÿÿN)r*   rK   rL   r   r   r   r   r   rN   rO   r&   rR   rS   )	r,   rB   rF   rT   rU   r<   Úaddress_bytesr%   rV   s	            r-   Úverify_typed_datazEthereumKey.verify_typed_dataœ   sÿ   € ð Ô ð 	FØÔ(Ô0ð  F¸Ô9NÔ9Xð  Fð  Fð  [Fñ  Fô  Fð  Fð		IÝ(¨Ñ.Ô.ˆHÝ.¨yÑ9Ô9ˆMÝ)¨(ÐC°]ÐCÐCÐCˆJÝ  Ñ,Ô,¨S¨T¨TÔ2ˆMÝ% mÑ4Ô4ˆGõ Ô.¨w¸$¼-Ò/GÑHÔHÐHøõ ð 	0ð 	0ð 	0ÝÔ,¨QÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/øøøøð	0øøøs   «AB Â
CÂ#B<Â6CÂ<Cr%   c                 ó$   — t          |d¬¦  «        S )zÏ
        Create a public key from an address, which can be used to verify signatures.

        :param address: The Ethereum address (20 octets).
        :return: New instance of :class:`EthereumKey`
        F©r   r   )r   )Úclsr%   s     r-   Úfrom_addresszEthereumKey.from_address­   s   € õ ¨'¸EÐBÑBÔBÐBr/   rM   c                 ó^  — t          |¦  «        t          k    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t	          |¦  «        dk    r/t          d                     t	          |¦  «        ¦  «        ¦  «        ‚t          j        |¦  «        }t          |d¬¦  «        S )zÞ
        Create a private key from seed bytes, which can be used to sign and create signatures.

        :param key: The Ethereum private key seed (32 octets).
        :return: New instance of :class:`EthereumKey`
        z&invalid seed type {} (expected binary)é    z$invalid seed length {} (expected 32)Tr\   )r#   r(   Ú
ValueErrorÚformatÚlenr   Úfrom_keyr   )r]   rM   Úaccounts      r-   Ú
from_byteszEthereumKey.from_bytes·   sŽ   € õ �‰9Œ9�ÒÐÝÐE×LÒLÍTÐRUÉYÌYÑWÔWÑXÔXÐXåˆs‰8Œ8�rŠ>ˆ>ÝÐC×JÒJÍ3ÈsÉ8Ì8ÑTÔTÑUÔUÐUå 'Ô 0°Ñ 5Ô 5ˆÝ¨'¸DÐAÑAÔAÐAr/   r   Ú
seedphraseÚindexc                 óö   — d                      |¦  «        }t          ||¬¦  «        }t          |¦  «        t          k    sJ ‚t	          |¦  «        dk    sJ ‚t          j        |¦  «        }t          |d¬¦  «        S )a„  
        Create a private key from the given BIP-39 mnemonic seed phrase and index,
        which can be used to sign and create signatures.

        :param seedphrase: The BIP-39 seedphrase ("Mnemonic") from which to derive the account.
        :param index: The account index in account hierarchy defined by the seedphrase.
        :return: New instance of :class:`EthereumKey`
        zm/44'/60'/0'/0/{})Ústr_derivation_pathr`   Tr\   )rb   r   r#   r(   rc   r   rd   r   )r]   rg   rh   Úderivation_pathrM   re   s         r-   Úfrom_seedphrasezEthereumKey.from_seedphraseÈ   sv   € ð .×4Ò4°UÑ;Ô;ˆå% jÀoÐVÑVÔVˆÝ�C‰yŒy�EÒ!Ð!Ð!Ð!Ý�3‰xŒx˜2Š~ˆ~ˆ~ˆ~å 'Ô 0°Ñ 5Ô 5ˆÝ¨'¸DÐAÑAÔAÐAr/   Úkeyfilec                 ó  — t           j                             |¦  «        rt           j                             |¦  «        s"t	          d                     |¦  «        ¦  «        ‚t          |¦  «        }|                     dd¦  «        }|€T|                     dd¦  «        }|€"t	          d                     |¦  «        ¦  «        ‚t           	                    |¦  «        S t           
                    t          j        |¦  «        ¦  «        S )a  
        Create a public or private key from reading the given public or private key file.

        Here is an example key file that includes an Ethereum private key ``private-key-eth``, which
        is loaded in this function, and other fields, which are ignored by this function:

        .. code-block::

            This is a comment (all lines until the first empty line are comments indeed).

            creator: oberstet@intel-nuci7
            created-at: 2022-07-05T12:29:48.832Z
            user-id: oberstet@intel-nuci7
            public-key-ed25519: 7326d9dc0307681cc6940fde0e60eb31a6e4d642a81e55c434462ce31f95deed
            public-adr-eth: 0x10848feBdf7f200Ba989CDf7E3eEB3EC03ae7768
            private-key-ed25519: f750f42b0430e28a2e272c3cedcae4dcc4a1cf33bc345c35099d3322626ab666
            private-key-eth: 4d787714dcb0ae52e1c5d2144648c255d660b9a55eac9deeb80d9f506f501025

        :param keyfile: Path (relative or absolute) to a public or private keys file.
        :return: New instance of :class:`EthereumKey`
        úkeyfile "{}" is not a fileúprivate-key-ethNzpublic-adr-ethzBneither "private-key-eth" nor "public-adr-eth" found in keyfile {})ÚosÚpathÚexistsÚisfileÚRuntimeErrorrb   r   Úgetr   r^   rf   r@   rA   )r]   rm   rB   Úprivkey_eth_hexÚpub_adr_eths        r-   Úfrom_keyfilezEthereumKey.from_keyfileÜ   sâ   € õ. Œw�~Š~˜gÑ&Ô&ð 	M­b¬g¯nªn¸WÑ.EÔ.Eð 	MÝÐ;×BÒBÀ7ÑKÔKÑLÔLÐLõ ˜WÑ%Ô%ˆàŸ(š(Ð#4°dÑ;Ô;ˆØÐ"ØŸ(š(Ð#3°TÑ:Ô:ˆKØÐ"Ý"Ð#g×#nÒ#nÐovÑ#wÔ#wÑxÔxÐxå"×/Ò/°Ñ<Ô<Ð<å×)Ò)­(Ô*:¸?Ñ*KÔ*KÑLÔLÐLr/   )NN)F)T)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r'   r(   Úboolr   r   Úintr.   Úpropertyr   r   r6   r<   r   r%   rD   rH   r   r   rW   rZ   Úclassmethodr^   rf   rl   ry   r5   r/   r-   r   r   3   s$  € € € € € ðð ð
 ?CØ)-ðð  u¨\¸3ÀÐ-EÔ'Fð ÐRVð Ø"*¨?Ô";ðà! #œðà26ðð ð ð ð  ð% Ð*;Ô!<ð %ð %ð %ñ „Xð%ð ð˜ œð ð ð ñ „Xðð ð˜#ð ð ð ñ „Xðð$ð $ ð $°%¸¸U¸
Ô2Cð $ð $ð $ð $ð ð˜$ð ð ð ñ „Xðð!ð !˜dð !¨u°S¸%°ZÔ/@ð !ð !ð !ð !ð$˜ð $ 5ð $ð $ð $ð $ð$˜Eð $¨eð $¸ð $ð $ð $ð $ðYð Y D¨¨c¨¤Nð YÀEð Yð Yð Yð Yð6I d¨3°¨8¤nð IÀð IÈ4ð Ið Ið Ið Ið" ðC 5¨¨e¨Ô#4ð C¸ð Cð Cð Cñ „[ðCð ðB˜Uð B }ð Bð Bð Bñ „[ðBð  ðBð B¨ð B°Sð BÀð Bð Bð Bñ „[ðBð& ð,M 3ð ,M¨=ð ,Mð ,Mð ,Mñ „[ð,Mð ,Mð ,Mr/   r   c            
       óü  — e Zd ZdZd(deeeeef                           fd„Z	de
fd„Zde
defd„Zdee
         fd	„Zde
deeef         fd
„Zde
deeef         ddfd„Zde
ddfd„Zd„ Zd„ Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zd„ Zd„ Zdede
fd„Zde
fd„Zde
defd„Zde
de
fd„Z de
de
fd„Z!e"	 	 d)dede
d e
dd fd!„¦   «         Z#e"d*d#ed$edd fd%„¦   «         Z$e"d&edd fd'„¦   «         Z%dS )+r   zO
    A transient, memory-based implementation of :class:`ISecurityModule`.
    NÚkeysc                 óª   — t          ¦   «         | _        d| _        d| _        i | _        i | _        |rt          |¦  «        D ]\  }}|| j        |<   Œd S d S )NFT)r
   Ú_mutexÚ_is_openÚ
_is_lockedÚ_keysÚ	_countersÚ	enumerate)r,   rƒ   ÚirM   s       r-   r.   zSecurityModuleMemory.__init__  sk   € Ý‘f”fˆŒØˆŒØˆŒØCEˆŒ
Ø)+ˆŒØð 	$Ý# D™/œ/ð $ð $‘��3Ø #�”
˜1‘�ð	$ð 	$ð$ð $r/   r    c                 óL   — | j         s
J d¦   «         ‚t          | j        ¦  «        S )z<
        Implements :meth:`ISecurityModule.__len__`
        úsecurity module not open)r†   rc   rˆ   r1   s    r-   Ú__len__zSecurityModuleMemory.__len__  s)   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8å�4”:‰ŒÐr/   r   c                 ó6   — | j         s
J d¦   «         ‚|| j        v S ©Nr�   ©r†   rˆ   ©r,   r   s     r-   Ú__contains__z!SecurityModuleMemory.__contains__&  s&   € ØŒ}Ð8Ð8Ð8Ñ8Ô8Ð8à˜œÐ#Ð#r/   c              #   óF   K  — | j         s
J d¦   «         ‚| j        E d{V —† dS )z=
        Implements :meth:`ISecurityModule.__iter__`
        r�   Nr‘   r1   s    r-   Ú__iter__zSecurityModuleMemory.__iter__+  s?   è è € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8à”:ÐÐÐÐÐÐÐÐÐr/   c                 ó”   — | j         s
J d¦   «         ‚|| j        v r| j        |         S t          d                     |¦  «        ¦  «        ‚)z@
        Implements :meth:`ISecurityModule.__getitem__`
        r�   zkey_no {} not found)r†   rˆ   Ú
IndexErrorrb   r’   s     r-   Ú__getitem__z SecurityModuleMemory.__getitem__3  sR   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8à�T”ZÐÐØ”:˜fÔ%Ð%åÐ2×9Ò9¸&ÑAÔAÑBÔBÐBr/   rM   c                 ó`   — | j         s
J d¦   «         ‚|dk    sJ ‚|| j        v r	 || j        |<   d S )Nr�   r   r‘   )r,   r   rM   s      r-   Ú__setitem__z SecurityModuleMemory.__setitem__>  sH   € ØŒ}Ð8Ð8Ð8Ñ8Ô8Ð8à˜Š{ˆ{ˆ{ˆ{Ø�T”ZÐÐàØ ˆŒ
�6ÑÐÐr/   c                 óf   — | j         s
J d¦   «         ‚|| j        v r
| j        |= d S t          ¦   «         ‚r�   )r†   rˆ   r—   r’   s     r-   Ú__delitem__z SecurityModuleMemory.__delitem__G  s@   € ØŒ}Ð8Ð8Ð8Ñ8Ô8Ð8à�T”ZÐÐØ”
˜6Ð"Ð"Ð"å‘,”,Ðr/   c                 óZ   — | j         r
J d¦   «         ‚d| _         t          j        d¦  «        S )z9
        Implements :meth:`ISecurityModule.open`
        zsecurity module already openTN)r†   rN   rO   r1   s    r-   ÚopenzSecurityModuleMemory.openO  s3   € ð ”=Ð@Ð@Ð"@Ñ@Ô@Ð@àˆŒÝÔ*¨4Ñ0Ô0Ð0r/   c                 óh   — | j         s
J d¦   «         ‚d| _         d| _        t          j        d¦  «        S )z:
        Implements :meth:`ISecurityModule.close`
        r�   FTN©r†   r‡   rN   rO   r1   s    r-   ÚclosezSecurityModuleMemory.closeX  s:   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8àˆŒØˆŒÝÔ*¨4Ñ0Ô0Ð0r/   c                 ó   — | j         S )z<
        Implements :meth:`ISecurityModule.is_open`
        )r†   r1   s    r-   rK   zSecurityModuleMemory.is_openb  s   € ð
 Œ}Ðr/   c                 ó   — dS )z=
        Implements :meth:`ISecurityModule.can_lock`
        Tr5   r1   s    r-   Úcan_lockzSecurityModuleMemory.can_locki  s	   € ð
 ˆtr/   c                 ó   — | j         S )z>
        Implements :meth:`ISecurityModule.is_locked`
        )r‡   r1   s    r-   rL   zSecurityModuleMemory.is_lockedp  s   € ð
 ŒÐr/   c                 ól   — | j         s
J d¦   «         ‚| j        rJ ‚d| _        t          j        d¦  «        S )z9
        Implements :meth:`ISecurityModule.lock`
        r�   TNr    r1   s    r-   ÚlockzSecurityModuleMemory.lockw  sA   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8Ø”?Ð"Ð"Ð"àˆŒÝÔ*¨4Ñ0Ô0Ð0r/   c                 ól   — | j         s
J d¦   «         ‚| j        sJ ‚d| _        t          j        d¦  «        S )z;
        Implements :meth:`ISecurityModule.unlock`
        r�   FNr    r1   s    r-   ÚunlockzSecurityModuleMemory.unlock�  sA   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8ØŒÐÐÐàˆŒÝÔ*¨4Ñ0Ô0Ð0r/   r6   c                 óÚ  — | j         s
J d¦   «         ‚t          | j        ¦  «        }|dk    rCt          t          j                             t          j        d¦  «        ¦  «        d| |¬¦  «        }n`|dk    r8t          t          j        t          j        d¦  «        ¦  «        d| |¬¦  «        }n"t          d                     |¦  «        ¦  «        ‚|| j        |<   t          j        |¦  «        S )	Nr�   Ú
cryptosignr`   T)rM   r   r   r   r4   )r   r   r   r   zinvalid key_type "{}")r†   rc   rˆ   r   ÚnaclÚsigningÚ
SigningKeyrq   Úurandomr   r   rd   ra   rb   rN   rO   )r,   r6   r   rM   s       r-   Ú
create_keyzSecurityModuleMemory.create_key‹  sç   € ØŒ}Ð8Ð8Ð8Ñ8Ô8Ð8å�T”Z‘”ˆØ�|Ò#Ð#Ý¥D¤L×$;Ò$;½B¼JÀr¹N¼NÑ$KÔ$KØ)-Ø04Ø'-ð/ñ /ô /ˆCˆCð ˜Ò#Ð#Ý­WÔ-=½b¼jÈ¹n¼nÑ-MÔ-MØ'+Ø.2Ø%+ð-ñ -ô -ˆCˆCõ
 Ð4×;Ò;¸HÑEÔEÑFÔFÐFØ ˆŒ
�6ÑÝÔ*¨6Ñ2Ô2Ð2r/   c                 ó–   — | j         s
J d¦   «         ‚|| j        v r| j        |= t          j        |¦  «        S t          j        d ¦  «        S r�   )r†   rˆ   rN   rO   r’   s     r-   Ú
delete_keyzSecurityModuleMemory.delete_keyž  sR   € ØŒ}Ð8Ð8Ð8Ñ8Ô8Ð8à�T”ZÐÐØ”
˜6Ð"ÝÔ.¨vÑ6Ô6Ð6åÔ.¨tÑ4Ô4Ð4r/   Úoctetsc                 ót   — | j         s
J d¦   «         ‚t          j        |¦  «        }t          j        |¦  «        S )z?
        Implements :meth:`ISecurityModule.get_random`
        r�   )r†   rq   r¯   rN   rO   )r,   r³   rB   s      r-   Ú
get_randomzSecurityModuleMemory.get_random§  s;   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8åŒz˜&Ñ!Ô!ˆÝÔ*¨4Ñ0Ô0Ð0r/   Ú
counter_noc                 óæ   — | j         s
J d¦   «         ‚| j                             ¦   «          | j                             |d¦  «        }| j                             ¦   «          t          j        |¦  «        S )z@
        Implements :meth:`ISecurityModule.get_counter`
        r�   r   )r†   r…   Úacquirer‰   rv   ÚreleaserN   rO   ©r,   r¶   Úress      r-   Úget_counterz SecurityModuleMemory.get_counter°  sk   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8àŒ×ÒÑÔÐØŒn× Ò  ¨QÑ/Ô/ˆØŒ×ÒÑÔÐÝÔ*¨3Ñ/Ô/Ð/r/   c                 ó  — | j         s
J d¦   «         ‚| j                             ¦   «          || j        vr
d| j        |<   | j        |xx         dz  cc<   | j        |         }| j                             ¦   «          t          j        |¦  «        S )zF
        Implements :meth:`ISecurityModule.increment_counter`
        r�   r   é   )r†   r…   r¸   r‰   r¹   rN   rO   rº   s      r-   Úincrement_counterz&SecurityModuleMemory.increment_counter»  s—   € ð Œ}Ð8Ð8Ð8Ñ8Ô8Ð8àŒ×ÒÑÔÐØ˜Tœ^Ð+Ð+Ø)*ˆDŒN˜:Ñ&ØŒ�zÐ"Ð"Ô" aÑ'Ð"Ð"Ñ"ØŒn˜ZÔ(ˆØŒ×ÒÑÔÐÝÔ*¨3Ñ/Ô/Ð/r/   r¾   rg   Únum_eth_keysÚnum_cs_keysc                 ó,  — g }t          |¦  «        D ]2}t                               ||¦  «        }|                     |¦  «         Œ3t          |¦  «        D ]/}t	          j        |||z   ¦  «        }|                     |¦  «         Œ0t          |¬¦  «        }|S )aó  
        Create a new memory-backed security module with

        1. ``num_eth_keys`` keys of type :class:`EthereumKey`, followed by
        2. ``num_cs_keys`` keys of type :class:`CryptosignKey`

        computed from a (common) BIP44 seedphrase.

        :param seedphrase: BIP44 seedphrase to use.
        :param num_eth_keys: Number of Ethereum keys to derive.
        :param num_cs_keys: Number of Cryptosign keys to derive.
        :return: New memory-backed security module instance.
        ©rƒ   )Úranger   rl   Úappendr   r   )r]   rg   rÀ   rÁ   rƒ   r‹   rM   Úsms           r-   rl   z$SecurityModuleMemory.from_seedphraseÉ  s¨   € ð  9;ˆõ �|Ñ$Ô$ð 	ð 	ˆAÝ×-Ò-¨j¸!Ñ<Ô<ˆCØ�KŠK˜ÑÔÐÐõ �{Ñ#Ô#ð 	ð 	ˆAÝÔ/°
¸AÀÑ<LÑMÔMˆCØ�KŠK˜ÑÔÐÐõ " tÐ,Ñ,Ô,ˆØˆ	r/   ÚdefaultÚconfigÚprofilec                 ó(  — g }t          j        ¦   «         }|                     |¦  «         |                     |¦  «        s#t	          d                     ||¦  «        ¦  «        ‚|                     |d¦  «        s#t	          d                     ||¦  «        ¦  «        ‚t          j         	                    t          j         
                    |¦  «        |                     |d¦  «        ¦  «        }t          j                             |¦  «        rt          j                             |¦  «        s$t	          d                     |||¦  «        ¦  «        ‚t          |¦  «        }|                     dd¦  «        }|                     t                                t%          j        |¦  «        ¦  «        ¦  «         |                     dd¦  «        }|                     t)          j        t%          j        |¦  «        ¦  «        ¦  «         t+          |¬¦  «        }	|	S )	ak  
        Create a new memory-backed security module with keys referred from a profile in
        the given configuration file.

        :param config: Path (relative or absolute) to an INI configuration file.
        :param profile: Name of the profile within the given INI configuration file.
        :return: New memory-backed security module instance.
        z1profile "{}" not found in configuration file "{}"ÚprivkeyzCmissing option "privkey" in profile "{}" of configuration file "{}"zEprivkey "{}" is not a file in profile "{}" of configuration file "{}"rp   Núprivate-key-ed25519rÃ   )ÚconfigparserÚConfigParserÚreadÚhas_sectionru   rb   Ú
has_optionrq   rr   ÚjoinÚdirnamerv   rs   rt   r   rÅ   r   rf   r@   rA   r   r   )
r]   rÈ   rÉ   rƒ   ÚcfgrË   rB   rw   Úprivkey_ed25519_hexrÆ   s
             r-   Úfrom_configz SecurityModuleMemory.from_configé  sÓ  € ð 9;ˆåÔ'Ñ)Ô)ˆØ�Š�ÑÔÐà�Š˜wÑ'Ô'ð 	lÝÐR×YÒYÐZaÐciÑjÔjÑkÔkÐkà�~Š~˜g yÑ1Ô1ð 	~ÝÐd×kÒkÐlsÐu{Ñ|Ô|Ñ}Ô}Ð}å”'—,’,�rœwŸš¨vÑ6Ô6¸¿ºÀÈÑ8SÔ8SÑTÔTˆÝŒw�~Š~˜gÑ&Ô&ð 	I­b¬g¯nªn¸WÑ.EÔ.Eð 	IÝÐf×mÒmÐnuÐw~ð  AGñ   Hô   Hñ  Iô  Ið  Iõ
 ˜WÑ%Ô%ˆð Ÿ(š(Ð#4°dÑ;Ô;ˆØ�Š•K×*Ò*­8Ô+;¸OÑ+LÔ+LÑMÔMÑNÔNÐNð #ŸhšhÐ'<¸dÑCÔCÐØ�Š•MÔ,­XÔ-=Ð>QÑ-RÔ-RÑSÔSÑTÔTÐTõ " tÐ,Ñ,Ô,ˆØˆ	r/   rm   c                 óà  — g }t           j                             |¦  «        rt           j                             |¦  «        s"t	          d                     |¦  «        ¦  «        ‚t          |¦  «        }|                     dd¦  «        }|€"t	          d                     |¦  «        ¦  «        ‚|                     t           
                    t          j        |¦  «        ¦  «        ¦  «         |                     dd¦  «        }|€"t	          d                     |¦  «        ¦  «        ‚|                     t          j
        t          j        |¦  «        ¦  «        ¦  «         t          |¬¦  «        }|S )a  
        Create a new memory-backed security module with keys referred from a profile in
        the given configuration file.

        :param keyfile: Path (relative or absolute) to a private keys file.
        :return: New memory-backed security module instance.
        ro   rp   Nz)"private-key-eth" not found in keyfile {}rÌ   z-"private-key-ed25519" not found in keyfile {}rÃ   )rq   rr   rs   rt   ru   rb   r   rv   rÅ   r   rf   r@   rA   r   r   )r]   rm   rƒ   rB   rw   rÕ   rÆ   s          r-   ry   z!SecurityModuleMemory.from_keyfile  sB  € ð 9;ˆåŒw�~Š~˜gÑ&Ô&ð 	M­b¬g¯nªn¸WÑ.EÔ.Eð 	MÝÐ;×BÒBÀ7ÑKÔKÑLÔLÐLõ
 ˜WÑ%Ô%ˆð Ÿ(š(Ð#4°dÑ;Ô;ˆØÐ"ÝÐJ×QÒQÐRYÑZÔZÑ[Ô[Ð[Ø�Š•K×*Ò*­8Ô+;¸OÑ+LÔ+LÑMÔMÑNÔNÐNð #ŸhšhÐ'<¸dÑCÔCÐØÐ&ÝÐN×UÒUÐV]Ñ^Ô^Ñ_Ô_Ð_Ø�Š•MÔ,­XÔ-=Ð>QÑ-RÔ-RÑSÔSÑTÔTÐTõ " tÐ,Ñ,Ô,ˆØˆ	r/   r"   )r¾   r¾   )rÇ   )&rz   r{   r|   r}   r   r   r   r   r   r.   r   rŽ   r~   r“   r	   r•   r˜   rš   rœ   rž   r¡   r€   rK   r¤   rL   r§   r©   r'   r°   r²   r(   rµ   r¼   r¿   r�   rl   rÖ   ry   r5   r/   r-   r   r     s>  € € € € € ðð ð$ð $˜X d¨5°ÀÐ1KÔ+LÔ&MÔNð $ð $ð $ð $ð˜ð ð ð ð ð$ 3ð $¨4ð $ð $ð $ð $ð
˜( 3œ-ð ð ð ð ð	C #ð 	C¨%°¸{Ð0JÔ*Kð 	Cð 	Cð 	Cð 	Cð! #ð !¨E°-ÀÐ2LÔ,Mð !ÐRVð !ð !ð !ð !ð #ð ¨$ð ð ð ð ð1ð 1ð 1ð1ð 1ð 1ð ð˜ð ð ð ñ „Xðð ð˜$ð ð ð ñ „Xðð ð˜4ð ð ð ñ „Xðð1ð 1ð 1ð1ð 1ð 1ð3 3ð 3¨3ð 3ð 3ð 3ð 3ð&5 ð 5ð 5ð 5ð 5ð1 ð 1¨ð 1ð 1ð 1ð 1ð	0 cð 	0¨cð 	0ð 	0ð 	0ð 	0ð0¨Cð 0°Cð 0ð 0ð 0ð 0ð ØBCØ+,ðð ¨ð ¸Cð Ø%(ðØ1Gðð ð ñ „[ðð> ð'ð ' ð '¨sð 'ÐCYð 'ð 'ð 'ñ „[ð'ðR ð  3ð  Ð+Að  ð  ð  ñ „[ð ð  ð  r/   r   ),r@   rq   rÍ   Úcollections.abcr   Útypingr   r   r   r   r   r	   Ú	threadingr
   rN   r¬   Úeth_account.accountr   Úeth_account.signers.localr   Úpy_eth_sig_utils.eip712r   Úpy_eth_sig_utils.utilsr   r   r   r   Úpy_eth_sig_utils.signingr   r   Úautobahn.wamp.interfacesr   r   Úautobahn.xbr._mnemonicr   Úautobahn.utilr   Úautobahn.wamp.cryptosignr   Ú__all__Úobjectr   Úregisterr   r5   r/   r-   ú<module>rç      sï  ðð4 €€€Ø 	€	€	€	Ø Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð à €€€Ø €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kà BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ :Ð :Ð :Ð :Ð :Ð :Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2à
3€ðVMð VMð VMð VMð VM�&ñ VMô VMð VMðr €Ô �kÑ "Ô "Ð "ðeð eð eð eð e˜>ñ eô eð eðP	 €Ô Ð-Ñ .Ô .Ð .Ð .Ð .r/   