§
    Ìtºfá™  ã                   ó2  — d dl Z d dlZd dlmZmZ d dlZd dlmZmZmZm	Z	m
Z
 d dlZd dl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	gZ	 d d
lmZmZmZ d dlmZ dZe                     d¦  «         n# e $ r dZY nw xY wd„ Z!d„ Z"d„ Z# G d„ d¦  «        Z$de%de&fd„Z'd„ Z(d„ Z)d„ Z*d(d„Z+d„ Z,ergdedee&         dee-         de&fd „Z.d!e&d"ede&fd#„Z/ G d$„ de0¦  «        Z1 ej2        e1¦  «          G d%„ d&e0¦  «        Z3e 4                    g d'¢¦  «         dS dS ))é    N)Úa2b_hexÚb2a_hex)ÚCallableÚOptionalÚUnionÚDictÚAny)Úutil)ÚISecurityModuleÚICryptosignKey)Ú	Challenge)Ú_URI_PAT_REALM_NAME_ETH)Úparse_keyfileÚHAS_CRYPTOSIGN)ÚencodingÚsigningÚbindings)ÚSignedMessageTÚCryptosignKeyFc                 ó¶   — g }| rTt          j        d| dd…         ¦  «        d         }| d|dz   …         | d|z   d…         } }|                     |¦  «         | °T|S )z}
    Unpack a SSH agent key blob into parts.

    See: http://blog.oddbit.com/2011/05/08/converting-openssh-public-keys/
    ú>INé   r   )ÚstructÚunpackÚappend)ÚkeydataÚpartsÚdlenÚdatas       úW/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/wamp/cryptosign.pyÚ_unpackr!   8   sw   € ð €EØ
ð åŒ}˜T 7¨2¨A¨2¤;Ñ/Ô/°Ô2ˆð    $¨¡( 
Ô+¨W°Q¸±X°Y°YÔ-?ˆgˆØ�Š�TÑÔÐð ð ð €Ló    c           	      óÎ   — g }| D ]L}|                      t          j        dt          |¦  «        ¦  «        ¦  «         |                      |¦  «         ŒMd                     |¦  «        S )z)
    Pack parts into a SSH key blob.
    r   r"   )r   r   ÚpackÚlenÚjoin)Úkeypartsr   Úparts      r    Ú_packr)   I   sa   € ð €EØð ð ˆØ�Š•V”[ ¥s¨4¡y¤yÑ1Ô1Ñ2Ô2Ð2Ø�Š�TÑÔÐÐØ�8Š8�E‰?Œ?Ðr"   c                 óÆ  — t          | ¦  «        t          k    r/t          d                     t          | ¦  «        ¦  «        ¦  «        ‚|                      ¦   «                              ¦   «         }t          |¦  «        dk    rt          d¦  «        ‚|\  }} }|dk    r"t          d                     |¦  «        ¦  «        ‚t          j        | ¦  «        }	 t          |¦  «        d         }n4# t          $ r'}t          d                     |¦  «        ¦  «        ‚d}~ww xY wt          |¦  «        d	k    r/t          d
                     t          |¦  «        ¦  «        ¦  «        ‚||fS )a€  
    Parse an OpenSSH Ed25519 public key from a string into a raw public key.

    Example input:

        ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJukDU5fqXv/yVhSirsDWsUFyOodZyCSLxyitPPzWJW9 oberstet@office-corei7

    :param keydata: The OpenSSH Ed25519 public key data to parse.
    :type keydata: str

    :returns: pair of raw public key (32 bytes) and comment
    :rtype: tuple
    zinvalid type {} for keydataé   zinvalid SSH Ed25519 public keyzssh-ed25519z%not a Ed25519 SSH public key (but {})é   zcould not parse key ({})Né    z9invalid length {} for embedded raw key (must be 32 bytes))
ÚtypeÚstrÚ	ExceptionÚformatÚstripÚsplitr%   ÚbinasciiÚ
a2b_base64r!   )r   r   ÚalgoÚcommentÚblobÚkeyÚes          r    Ú_read_ssh_ed25519_pubkeyr;   T   sH  € õ ˆG�}„}�ÒÐÝÐ5×<Ò<½TÀ'¹]¼]ÑKÔKÑLÔLÐLà�MŠM‰OŒO×!Ò!Ñ#Ô#€EÝ
ˆ5�z„z�Q‚€ÝÐ8Ñ9Ô9Ð9Ø"Ñ€Dˆ'�7àˆ}ÒÐÝÐ?×FÒFÀtÑLÔLÑMÔMÐMåÔ˜wÑ'Ô'€Dð>Ý�d‰mŒm˜AÔˆˆøÝð >ð >ð >ÝÐ2×9Ò9¸!Ñ<Ô<Ñ=Ô=Ð=øøøøð>øøøõ ˆ3�x„x�2‚~€~ÝÐS×ZÒZÕ[^Ð_bÑ[cÔ[cÑdÔdÑeÔeÐeà�ˆ<Ðs   ÃC) Ã)
DÃ3"DÄDc                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú_SSHPacketReaderzD
    Read OpenSSH packet format which is used for key material.
    c                 óJ   — || _         d| _        t          |¦  «        | _        d S ©Nr   )Ú_packetÚ_idxr%   Ú_len)ÚselfÚpackets     r    Ú__init__z_SSHPacketReader.__init__   s!   € ØˆŒØˆŒ	Ý˜‘K”KˆŒ	ˆ	ˆ	r"   c                 ó*   — | j         | j        d …         S ©N)r@   rA   ©rC   s    r    Úget_remaining_payloadz&_SSHPacketReader.get_remaining_payload„   s   € ØŒ|˜DœI˜J˜JÔ'Ð'r"   c                 ó¢   — | j         |z   | j        k    rt          d¦  «        ‚| j        | j         | j         |z   …         }| xj         |z  c_         |S )Nzincomplete packet)rA   rB   r0   r@   )rC   ÚsizeÚvalues      r    Ú	get_bytesz_SSHPacketReader.get_bytes‡   sT   € ØŒ9�tÑ˜dœiÒ'Ð'ÝÐ/Ñ0Ô0Ð0à”˜TœY t¤y°4Ñ'7Ð7Ô8ˆØˆ	Œ	�TÑˆ	Œ	Øˆr"   c                 ó^   — t          j        d|                      d¦  «        ¦  «        d         S )Nr   r   r   )r   r   rM   rH   s    r    Ú
get_uint32z_SSHPacketReader.get_uint32�   s%   € ÝŒ}˜T 4§>¢>°!Ñ#4Ô#4Ñ5Ô5°aÔ8Ð8r"   c                 óP   — |                       |                      ¦   «         ¦  «        S rG   )rM   rO   rH   s    r    Ú
get_stringz_SSHPacketReader.get_string’   s   € Ø�~Š~˜dŸošoÑ/Ô/Ñ0Ô0Ð0r"   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   rI   rM   rO   rQ   © r"   r    r=   r=   z   si   € € € € € ðð ð ð  ð  ð
(ð (ð (ðð ð ð9ð 9ð 9ð1ð 1ð 1ð 1ð 1r"   r=   rK   Úreturnc                 ó„   — d| cxk    rdk     sn J ‚d                      d„ t          d| dz   ¦  «        D ¦   «         ¦  «        S )Nr   éÿ   r"   c              3   óD   K  — | ]}|                      d d¬¦  «        V — ŒdS )r,   Úbig)Ú	byteorderN)Úto_bytes©Ú.0Úxs     r    ú	<genexpr>z_makepad.<locals>.<genexpr>˜   s2   è è € ÐOÐO°q�A—J’J˜q¨E�JÑ2Ô2ÐOÐOÐOÐOÐOÐOr"   r,   )r&   Úrange)rK   s    r    Ú_makepadrc   –   sL   € Ø�ˆ?ˆ?Š?ˆ?�sŠ?ˆ?ˆ?ˆ?ˆ?ˆ?Ø�8Š8ÐOÐO½EÀ!ÀTÈAÁXÑ<NÔ<NÐOÑOÔOÑOÔOÐOr"   c                 ó`  — d}d}d}|                       |¦  «        r|                      |¦  «        st          d¦  «        ‚|                      |¦  «        }| t	          |¦  «        |…         } d                     d„ |                      ¦   «         D ¦   «         ¦  «        } t          j        | ¦  «        }|t	          |¦  «        d…         }t          |¦  «        }| 
                    ¦   «         }| 
                    ¦   «         }| 
                    ¦   «          |                     ¦   «         }	| 
                    ¦   «          | 
                    ¦   «         }
|                     ¦   «         }d}|d	k    rt          d
¦  «        ‚|d	k    rt          d¦  «        ‚|	dk    r"t          d                     |	¦  «        ¦  «        ‚|rt          d¦  «        ‚t          |
¦  «        }|                     ¦   «          |                     ¦   «          | 
                    ¦   «         }|dk    r5t          d                     |                     d¦  «        ¦  «        ¦  «        ‚| 
                    ¦   «         }| 
                    ¦   «         }t	          |¦  «        t          j        k    rt          d¦  «        ‚t	          |¦  «        t          j        k    rt          d¦  «        ‚| 
                    ¦   «         }|                     ¦   «         }t	          |¦  «        r~t	          |¦  «        |k    s |t%          t	          |¦  «        ¦  «        k    rKt          d                     t	          |¦  «        |t%          t	          |¦  «        ¦  «        ¦  «        ¦  «        ‚|dt          j        …         }|                     d¦  «        }||fS )að  
    Parse an OpenSSH Ed25519 private key from a string into a raw private key.

    Example input:

        -----BEGIN OPENSSH PRIVATE KEY-----
        b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
        QyNTUxOQAAACCbpA1OX6l7/8lYUoq7A1rFBcjqHWcgki8corTz81iVvQAAAKDWjZ0Y1o2d
        GAAAAAtzc2gtZWQyNTUxOQAAACCbpA1OX6l7/8lYUoq7A1rFBcjqHWcgki8corTz81iVvQ
        AAAEArodzIMjH9MOBz0X+HDvL06rEJOMYFhzGQ5zXPM7b7fZukDU5fqXv/yVhSirsDWsUF
        yOodZyCSLxyitPPzWJW9AAAAFm9iZXJzdGV0QG9mZmljZS1jb3JlaTcBAgMEBQYH
        -----END OPENSSH PRIVATE KEY-----


    :param keydata: The OpenSSH Ed25519 private key data to parse.
    :type keydata: str

    :returns: pair of raw private key (32 bytes) and comment
    :rtype: tuple
    ú#-----BEGIN OPENSSH PRIVATE KEY-----z!-----END OPENSSH PRIVATE KEY-----s   openssh-key-v1 zFinvalid OpenSSH private key (does not start/end with OPENSSH preamble)Ú c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rG   )r2   r^   s     r    ra   z,_read_ssh_ed25519_privkey.<locals>.<genexpr>Â   s*   è è € Ð9Ð9 A�a—g’g‘i”iÐ9Ð9Ð9Ð9Ð9Ð9r"   Né   s   nonezjencrypted private keys not supported (please remove the passphrase from your private key or use SSH agent)z/passphrase encrypted private keys not supportedr,   zAmultiple private keys in a key file not supported (found {} keys)z=invalid OpenSSH private key (found remaining payload for mac)s   ssh-ed25519z6invalid key type: we only support Ed25519 (found "{}")Úasciizinvalid public key lengthzGinvalid OpenSSH private key (padlen={}, actual_pad={}, expected_pad={}))Ú
startswithÚendswithr0   Úfindr%   r&   r3   r4   r5   r=   rQ   rO   rI   r1   Údecoder   Úcrypto_sign_PUBLICKEYBYTESÚcrypto_sign_SECRETKEYBYTESrc   Úcrypto_sign_SEEDBYTES)r   Ú	SSH_BEGINÚSSH_ENDÚOPENSSH_KEY_V1Ússh_endr8   rD   Úcipher_nameÚkdfÚnkeysÚkey_dataÚmacÚ
block_sizeÚalgÚvkÚskr7   ÚpadÚseeds                      r    Ú_read_ssh_ed25519_privkeyr€   ›   s¢  € ð< 6€IØ1€GØ(€Nà×Ò˜yÑ)Ô)ð b¨g×.>Ò.>¸wÑ.GÔ.Gð bÝÐ`ÑaÔaÐaà�lŠl˜7Ñ#Ô#€GØ•c˜)‘n”n WÐ,Ô-€GØ�gŠgÐ9Ð9¨¯ª©¬Ð9Ñ9Ô9Ñ9Ô9€GÝÔ˜wÑ'Ô'€Dà•�NÑ#Ô#Ð$Ð$Ô%€DÝ˜dÑ#Ô#€Fà×#Ò#Ñ%Ô%€KØ
×
Ò
Ñ
Ô
€CØ
×ÒÑÔÐØ×ÒÑÔ€EØ
×ÒÑÔÐØ× Ò Ñ"Ô"€HØ
×
&Ò
&Ñ
(Ô
(€Cà€Jà�gÒÐÝð  Eñ  Fô  Fð  	Fà
ˆg‚~€~ÝÐIÑJÔJÐJà�‚z€zÝÐ[×bÒbÐchÑiÔiÑjÔjÐjà
ð YÝÐWÑXÔXÐXå˜hÑ'Ô'€Fà
×ÒÑÔÐØ
×ÒÑÔÐà
×
Ò
Ñ
Ô
€Cà
ˆnÒÐÝÐP×WÒWÐX[×XbÒXbÐcjÑXkÔXkÑlÔlÑmÔmÐmà	×	Ò	Ñ	Ô	€BØ	×	Ò	Ñ	Ô	€Bå
ˆ2�w„w•(Ô5Ò5Ð5ÝÐ3Ñ4Ô4Ð4å
ˆ2�w„w•(Ô5Ò5Ð5ÝÐ3Ñ4Ô4Ð4à×ÒÑ!Ô!€GØ
×
&Ò
&Ñ
(Ô
(€Cå
ˆ3�x„xð M•S˜‘X”X Ò+Ð+¨sµh½sÀ3¹x¼xÑ6HÔ6HÒ/HÐ/HÝÐa×hÒhÕilÐmpÑiqÔiqÐsvõ  yAõ  BEð  FIñ  BJô  BJñ  yKô  yKñ  Lô  Lñ  Mô  Mð  	Mð Ð-�xÔ-Ð-Ô.€Dà�nŠn˜WÑ%Ô%€Gà�ˆ=Ðr"   c                 óh  — t          | ¦  «        5 }t          j        |                     ¦   «                              ¦   «         d         ¦  «        dd…         }t          |¦  «        dk    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚|cddd¦  «         S # 1 swxY w Y   dS )z€
    Read a Ed25519 signature file created with OpenBSD signify.

    http://man.openbsd.org/OpenBSD-current/man1/signify.1
    r,   é
   Né@   zEbogus Ed25519 signature: raw signature length was {}, but expected 64©Úopenr4   r5   ÚreadÚ
splitlinesr%   r0   r1   )Úsignature_fileÚfÚsigs      r    Ú_read_signify_ed25519_signaturer‹   ÿ   sÞ   € õ 
ˆnÑ	Ô	ð  åÔ! !§&¢&¡(¤(×"5Ò"5Ñ"7Ô"7¸Ô":Ñ;Ô;¸B¸C¸CÔ@ˆÝˆs‰8Œ8�rŠ>ˆ>ÝÐc×jÒjÕknÐorÑksÔksÑtÔtÑuÔuÐuØðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ó   �B
B'Â'B+Â.B+c                 óh  — t          | ¦  «        5 }t          j        |                     ¦   «                              ¦   «         d         ¦  «        dd…         }t          |¦  «        dk    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚|cddd¦  «         S # 1 swxY w Y   dS )zŒ
    Read a public key from a Ed25519 key pair created with OpenBSD signify.

    http://man.openbsd.org/OpenBSD-current/man1/signify.1
    r,   r‚   Nr-   z@bogus Ed25519 public key: raw key length was {}, but expected 32r„   )Úpubkey_filer‰   Úpubkeys      r    Ú_read_signify_ed25519_pubkeyr�     sà   € õ 
ˆkÑ	Ô	ð ˜aåÔ$ Q§V¢V¡X¤X×%8Ò%8Ñ%:Ô%:¸1Ô%=Ñ>Ô>¸r¸s¸sÔCˆÝˆv‰;Œ;˜"ÒÐÝÐ^×eÒeÕfiÐjpÑfqÔfqÑrÔrÑsÔsÐsØðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð rŒ   Útextc                 ó¾  — |dv sJ ‚ddl }t          | ¦  «        5 }|                     ¦   «                              ¦   «         d         }|                     d|j        ¬¦  «        }|                     |¦  «         |dk    rhddl}|                     ¦   «         5 }| 	                    |d¬	¦  «         | 
                    ¦   «         cddd¦  «         cddd¦  «         S # 1 swxY w Y   n^|d
k    rIddl}|                     |j        j        j        ¬¦  «        }|                     ¦   «         cddd¦  «         S t#          d¦  «        ‚	 ddd¦  «         dS # 1 swxY w Y   dS )a�  

    Usage:

    1. Get the OpenBSD 5.7 release public key from here

        http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/etc/signify/Attic/openbsd-57-base.pub?rev=1.1

    2. Generate QR Code and print to terminal

        print(cryptosign._qrcode_from_signify_ed25519_pubkey('openbsd-57-base.pub'))

    3. Compare to (scroll down) QR code here

        https://www.openbsd.org/papers/bsdcan-signify.html
    )r‘   Úsvgr   Nr,   r+   )Úbox_sizeÚerror_correctionr‘   T)ÚoutÚinvertr“   )Úimage_factoryzlogic error)Úqrcoder…   r†   r‡   ÚQRCodeÚERROR_CORRECT_LÚadd_dataÚioÚStringIOÚprint_asciiÚgetvalueÚqrcode.image.svgÚ
make_imageÚimager“   ÚSvgImageÚ	to_stringr0   )	rŽ   Úmoder™   r‰   r�   Úqrr�   Údata_bufferr£   s	            r    Ú#_qrcode_from_signify_ed25519_pubkeyr©     s  € ð" �?Ð"Ð"Ð"Ð"à€M€M€Må	ˆkÑ	Ô	ð +˜aØ—’‘”×$Ò$Ñ&Ô& qÔ)ˆà�]Š] AØ,2Ô,Bð ñ Dô Dˆà
�Š�FÑÔÐà�6Š>ˆ>ØˆIˆIˆIà—’‘”ð . +Ø—’ ;°t�Ñ<Ô<Ð<Ø"×+Ò+Ñ-Ô-ð.ð .ð .ð .ñ .ô .ð .ð+ð +ð +ð +ñ +ô +ð +ð +ð.ð .ð .ð .øøøð .ð .ð .ð .ð .ð �UŠ]ˆ]Ø#Ð#Ð#Ð#à—M’M°´Ô0@Ô0I�MÑJÔJˆEØ—?’?Ñ$Ô$ð#+ð +ð +ð +ñ +ô +ð +ð +õ& ˜MÑ*Ô*Ð*ð.ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s=   šA<EÂ+CÃEÃC	ÃEÃ!C	Ã"AEÄ5EÅEÅEc                 ó–   — t          | ¦  «        }t          j        |¦  «        }t          |¦  «        }|                     ||¦  «         dS )a‡  
    Verify a Ed25519 signature created with OpenBSD signify.

    This will raise a `nacl.exceptions.BadSignatureError` if the signature is bad
    and return silently when the signature is good.

    Usage:

    1. Create a signature:

        signify-openbsd -S -s ~/.signify/crossbario-trustroot.sec -m .profile

    2. Verify the signature

        from autobahn.wamp import cryptosign

        with open('.profile', 'rb') as f:
            message = f.read()
            cryptosign._verify_signify_ed25519_signature('.signify/crossbario-trustroot.pub', '.profile.sig', message)

    http://man.openbsd.org/OpenBSD-current/man1/signify.1
    N)r�   r   Ú	VerifyKeyr‹   Úverify)rŽ   rˆ   Úmessager�   Ú
verify_keyrŠ   s         r    Ú!_verify_signify_ed25519_signaturer¯   F  sJ   € õ. *¨+Ñ6Ô6€FÝÔ" 6Ñ*Ô*€JÝ
)¨.Ñ
9Ô
9€CØ×Ò�g˜sÑ#Ô#Ð#Ð#Ð#r"   Ú	challengeÚchannel_id_rawÚchannel_id_typec                 ó  — t          | t          ¦  «        s/t          d                     t	          | ¦  «        ¦  «        ¦  «        ‚d| j        vrt          d¦  «        ‚| j        d         }t	          |¦  «        t          k    r/t          d                     t	          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          j	        |¦  «        }|dk    rSt          |¦  «        dk    s*J d	                     t          |¦  «        ¦  «        ¦   «         ‚t          j        ||¦  «        }n"|€|}nJ d                     |¦  «        ¦   «         ‚|S )a  
        Format the challenge based on provided parameters

        :param challenge: The WAMP-cryptosign challenge object for which a signature should be computed.
        :param channel_id_raw: The channel ID when channel_id_type is 'tls-unique'.
        :param channel_id_type: The type of the channel id, currently handles 'tls-unique' and
            ignores otherwise.
        zCchallenge must be instance of autobahn.wamp.types.Challenge, not {}r°   z*missing challenge value in challenge.extraz5invalid type {} for challenge (expected a hex string)rƒ   z:unexpected challenge (hex) length: was {}, but expected 64ú
tls-uniquer-   zDunexpected TLS transport channel ID length (was {}, but expected 32)NFzinvalid channel_id_type "{}")Ú
isinstancer   r0   r1   r.   Úextrar/   r%   r4   r   r
   Úxor)r°   r±   r²   Úchallenge_hexÚchallenge_rawr   s         r    Ú_format_challengerº   n  s—  € õ ˜)¥YÑ/Ô/ð 	oÝØU×\Ò\Õ]aÐbkÑ]lÔ]lÑmÔmñoô oð oð ˜iœoÐ-Ð-ÝÐHÑIÔIÐIð "œ¨Ô4ˆå�ÑÔ¥#Ò%Ð%ÝÐS×ZÒZÕ[_Ð`mÑ[nÔ[nÑoÔoÑpÔpÐpåˆ}ÑÔ Ò#Ð#ÝÐX×_Ò_Õ`cÐdqÑ`rÔ`rÑsÔsÑtÔtÐtõ !Ô(¨Ñ7Ô7ˆà˜lÒ*Ð*ÝØñ ô  Ø#%ò&ð &ð &Ø'm×'tÒ'tÝ�NÑ#Ô#ñ(%ô (%ñ&ô &ð &õ ”8˜M¨>Ñ:Ô:ˆDˆDØÐ$à ˆDˆDàPÐ8×?Ò?ÀÑPÔPÑPÔPÐPàˆr"   r   Úsigner_funcc                 ó~   ‡ ‡—  |‰ ¦  «        }t          j        ¦   «         Šˆˆ fd„}t          j        ||d¦  «         ‰S )a  
        Sign the provided data using the provided signer.

        :param data: challenge to sign
        :param signer_func: The callable function to use for signing
        :returns: A Deferred/Future that resolves to the computed signature.
        :rtype: str
        c                 óØ   •— t          j        | ¦  «                             d¦  «        }t          j        ‰¦  «                             d¦  «        }||z   }t          j        ‰|¦  «         d S )Nri   )r4   r   rm   ÚtxaioÚresolve)Úsignature_rawÚsignature_hexÚdata_hexrŠ   Úd2r   s       €€r    Úprocessz _sign_challenge.<locals>.processª  sc   ø€ å$Ô,¨]Ñ;Ô;×BÒBÀ7ÑKÔKˆMõ  Ô'¨Ñ-Ô-×4Ò4°WÑ=Ô=ˆHà (Ñ*ˆCÝŒM˜"˜cÑ"Ô"Ð"Ð"Ð"r"   N)r¾   Úcreate_futureÚadd_callbacks)r   r»   Úd1rÄ   rÃ   s   `   @r    Ú_sign_challengerÈ   š  s_   øø€ ð ˆ[˜ÑÔˆõ Ô Ñ"Ô"ˆð	#ð 	#ð 	#ð 	#ð 	#ð 	#õ 	Ô˜B ¨Ñ.Ô.Ð.àˆ	r"   c                   óŒ  — e Zd ZdZ	 	 d'dede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e         fd„¦   «         Ze
defd„¦   «         Ze
defd„¦   «         Zdedefd„Z	 	 d(dedee         dee         defd„Zd)dedeeef         fd„Zed*dedee         dd fd„¦   «         Zed*dedee         dd fd„¦   «         Zed*dedee         dd fd„¦   «         Zede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   z¬
        A cryptosign private key for signing, and hence usable for authentication or a
        public key usable for verification (but can't be used for signing).
        NÚcan_signÚsecurity_moduleÚkey_nor7   rW   c                 ó†  — t          |t          j        ¦  «        sIt          |t          j        ¦  «        s/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚|rt          |t          j        ¦  «        s|st          |t          j        ¦  «        sJ ‚|| _        || _        || _	        || _
        || _        d S )Nzinvalid type {} for key)rµ   r   r«   Ú
SigningKeyr0   r1   r.   Ú_keyÚ	_can_signÚ_security_moduleÚ_key_noÚ_comment)rC   r9   rÊ   rË   rÌ   r7   s         r    rE   zCryptosignKey.__init__¾  s°   € å˜s¥GÔ$5Ñ6Ô6ð M½*ÀSÍ'ÔJ\Ñ:]Ô:]ð MÝÐ 9× @Ò @ÅÀcÁÄÑ KÔ KÑLÔLÐLàÐ~¥¨CµÔ1CÑ!DÔ!DÐ~ÈhÐ~Õ[eÐfiÕkrÔk|Ñ[}Ô[}Ð~Ð~Ð~ØˆDŒIØ%ˆDŒNØ$3ˆDÔ!Ø!ˆDŒLØ#ˆDŒMˆMˆMr"   r   c                 ó   — | j         S )z[
            Implements :meth:`autobahn.wamp.interfaces.IKey.security_module`.
            )rÑ   rH   s    r    rË   zCryptosignKey.security_moduleÊ  s   € ð
 Ô(Ð(r"   c                 ó   — | j         S )zR
            Implements :meth:`autobahn.wamp.interfaces.IKey.key_no`.
            )rÒ   rH   s    r    rÌ   zCryptosignKey.key_noÑ  s   € ð
 ”<Ðr"   c                 ó   — | j         S )zS
            Implements :meth:`autobahn.wamp.interfaces.IKey.comment`.
            )rÓ   rH   s    r    r7   zCryptosignKey.commentØ  s   € ð
 ”=Ð r"   c                 ó   — dS )zT
            Implements :meth:`autobahn.wamp.interfaces.IKey.key_type`.
            Ú
cryptosignrV   rH   s    r    Úkey_typezCryptosignKey.key_typeß  s	   € ð
  �<r"   c                 ó   — | j         S )zT
            Implements :meth:`autobahn.wamp.interfaces.IKey.can_sign`.
            )rÐ   rH   s    r    rÊ   zCryptosignKey.can_signæ  s   € ð
 ”>Ð!r"   r   c                 óâ   — | j         st          d¦  «        ‚t          |¦  «        t          k    rt          d¦  «        ‚| j                             |¦  «        }t          j        |j        ¦  «        S )zP
            Implements :meth:`autobahn.wamp.interfaces.IKey.sign`.
            za signing key required to signz data to be signed must be binary)	rÐ   r0   r.   ÚbytesrÏ   Úsignr¾   Úcreate_future_successÚ	signature)rC   r   rŠ   s      r    rÝ   zCryptosignKey.signí  sf   € ð ”>ð BÝÐ @ÑAÔAÐAå�D‰zŒz�UÒ"Ð"ÝÐ BÑCÔCÐCà!%¤§¢°Ñ!5Ô!5ˆCõ Ô.¨s¬}Ñ=Ô=Ð=r"   r°   Ú
channel_idr²   c                 ó¤   — |j         dv s"J d                     |j         ¦  «        ¦   «         ‚t          |||¦  «        }t          || j        ¦  «        S )zd
            Implements :meth:`autobahn.wamp.interfaces.ICryptosignKey.sign_challenge`.
            )rØ   zcryptosign-proxyz0unexpected cryptosign challenge with method "{}")Úmethodr1   rº   rÈ   rÝ   )rC   r°   rà   r²   r   s        r    Úsign_challengezCryptosignKey.sign_challengeÿ  s[   € ð
 Ô#Ð'IÐIÐIÐIØB×IÒIÈ)ÔJZÑ[Ô[ñ JÔIÐIõ % Y°
¸OÑLÔLˆDå" 4¨¬Ñ3Ô3Ð3r"   FÚbinaryc                 óú   — t          | j        t          j        ¦  «        r| j        j        }n| j        }|r|                     ¦   «         S |                     t          j        ¬¦  «                             d¦  «        S )z¿
            Returns the public key part of a signing key or the (public) verification key.

            :returns: The public key in Hex encoding.
            :rtype: str or None
            ©Úencoderri   )	rµ   rÏ   r   rÎ   r®   Úencoder   Ú
HexEncoderrm   )rC   rä   r9   s      r    Ú
public_keyzCryptosignKey.public_key  sj   € õ ˜$œ)¥WÔ%7Ñ8Ô8ð  Ø”iÔ*��à”i�àð OØ—z’z‘|”|Ð#à—z’z­(Ô*=�zÑ>Ô>×EÒEÀgÑNÔNÐNr"   r�   c                 óæ  — |�Gt          |¦  «        t          k    s/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        t          k    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚ | t          j        |¦  «        d|¬¦  «        S )Núinvalid type {} for commentú%invalid key type {} (expected binary)r-   ú#invalid key length {} (expected 32)F©r9   rÊ   r7   )r.   r/   Ú
ValueErrorr1   rÜ   r%   r   r«   )Úclsr�   r7   s      r    Úfrom_pubkeyzCryptosignKey.from_pubkey  sÉ   € à�O¥t¨G¡}¤}½Ò';Ð';Ý Ð!>×!EÒ!EÅdÈ7ÁmÄmÑ!TÔ!TÑUÔUÐUå�F‰|Œ|�uÒ$Ð$Ý Ð!H×!OÒ!OÕPTÐU[ÑP\ÔP\Ñ!]Ô!]Ñ^Ô^Ð^å�6‰{Œ{˜bÒ Ð Ý Ð!F×!MÒ!MÍcÐRXÉkÌkÑ!ZÔ!ZÑ[Ô[Ð[à�3�7Ô,¨VÑ4Ô4¸uÈgÐVÑVÔVÐVr"   r9   c                 óæ  — |�Gt          |¦  «        t          k    s/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        t          k    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚ | t          j        |¦  «        d|¬¦  «        S )Nrì   rí   r-   rî   Trï   )r.   r/   rð   r1   rÜ   r%   r   rÎ   )rñ   r9   r7   s      r    Ú
from_byteszCryptosignKey.from_bytes)  sÇ   € à�O¥t¨G¡}¤}½Ò';Ð';Ý Ð!>×!EÒ!EÅdÈ7ÁmÄmÑ!TÔ!TÑUÔUÐUå�C‰yŒy�EÒ!Ð!Ý Ð!H×!OÒ!OÕPTÐUXÑPYÔPYÑ!ZÔ!ZÑ[Ô[Ð[å�3‰xŒx˜2Š~ˆ~Ý Ð!F×!MÒ!MÍcÐRUÉhÌhÑ!WÔ!WÑXÔXÐXà�3�7Ô-¨cÑ2Ô2¸TÈ7ÐSÑSÔSÐSr"   Úfilenamec                 ó®  — |�Gt          |¦  «        t          k    s/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        t          k    r"t          d                     |¦  «        ¦  «        ‚t	          |d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      ||¬¦  «        S )aÉ  
            Load an Ed25519 (private) signing key (actually, the seed for the key) from a raw file of 32 bytes length.
            This can be any random byte sequence, such as generated from Python code like

                os.urandom(32)

            or from the shell

                dd if=/dev/urandom of=client02.key bs=1 count=32

            :param filename: Filename of the key.
            :param comment: Comment for key (optional).
           Nrì   zinvalid type {} for filenameÚrb)r7   )r.   r/   r0   r1   r…   r†   rô   )rñ   rõ   r7   r‰   rx   s        r    Ú	from_filezCryptosignKey.from_file6  sñ   € ð �O¥t¨G¡}¤}½Ò';Ð';ÝÐ =× DÒ DÅTÈ'Á]Ä]Ñ SÔ SÑTÔTÐTå�H‰~Œ~¥Ò$Ð$ÝÐ >× EÒ EÀhÑ OÔ OÑPÔPÐPå�h Ñ%Ô%ð $¨ØŸ6š6™8œ8�ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð —>’> (°G�>Ñ<Ô<Ð<s   ÂB5Â5B9Â<B9c                 óî   — t          |d¦  «        5 }|                     ¦   «                              d¦  «                             ¦   «         }ddd¦  «         n# 1 swxY w Y   |                      |¦  «        S )a  
            Load an Ed25519 key from a SSH key file. The key file can be a (private) signing
            key (from a SSH private key file) or a (public) verification key (from a SSH
            public key file). A private key file must be passphrase-less.
            r÷   zutf-8N)r…   r†   rm   r2   Úfrom_ssh_bytes)rñ   rõ   r‰   rx   s       r    Úfrom_ssh_filezCryptosignKey.from_ssh_fileP  sŸ   € õ �h Ñ%Ô%ð <¨ØŸ6š6™8œ8Ÿ?š?¨7Ñ3Ô3×9Ò9Ñ;Ô;�ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <à×%Ò% hÑ/Ô/Ð/s   ‘:AÁAÁArx   c                 ó  — d}|                      |¦  «        r5t          |¦  «        \  }}t          j        |t          j        ¬¦  «        }d}n(t          |¦  «        \  }}t          j        |¦  «        }d} | |||¬¦  «        S )a  
            Load an Ed25519 key from SSH key file. The key file can be a (private) signing
            key (from a SSH private key file) or a (public) verification key (from a SSH
            public key file). A private key file must be passphrase-less.
            re   ræ   TFrï   )rj   r€   r   rÎ   r   Ú
RawEncoderr;   r«   )rñ   rx   rq   r7   r9   rÊ   s         r    rú   zCryptosignKey.from_ssh_bytes\  s�   € ð >ˆIØ×"Ò" 9Ñ-Ô-ð 	!å$=¸hÑ$GÔ$GÑ!�˜'ÝÔ(¨½8Ô;NÐOÑOÔO�Ø��õ %=¸XÑ$FÔ$FÑ!�˜'ÝÔ'¨Ñ1Ô1�Ø �à�3˜3¨¸7ÐCÑCÔCÐCr"   r   Ú
seedphraseÚindexc                 óH  — 	 ddl m} n4# t          $ r'}t          d                     |¦  «        ¦  «        ‚d}~ww xY wd                     |¦  «        } |||¦  «        }t          |¦  «        t          k    sJ ‚t          |¦  «        dk    sJ ‚|                      |¦  «        }|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`
            r   )Úmnemonic_to_private_keyz*package autobahn[xbr] not installed ("{}")Nzm/44'/655'/0'/0/{}r-   )	Úautobahn.xbr._mnemonicr  ÚImportErrorÚRuntimeErrorr1   r.   rÜ   r%   rô   )rñ   rþ   rÿ   r  r:   Úderivation_pathÚkey_rawr9   s           r    Úfrom_seedphrasezCryptosignKey.from_seedphraseq  sË   € ð[ØJÐJÐJÐJÐJÐJÐJøÝð [ð [ð [Ý"Ð#O×#VÒ#VÐWXÑ#YÔ#YÑZÔZÐZøøøøð[øøøð 3×9Ò9¸%Ñ@Ô@ˆOà-Ð-¨j¸/ÑJÔJˆGÝ˜‘=”=¥EÒ)Ð)Ð)Ð)Ý�w‘<”< 2Ò%Ð%Ð%Ð%ð —.’. Ñ)Ô)ˆCàˆJs   ‚	 ‰
:“"5µ:Úkeyfilec                 ó4  — t           j                             |¦  «        rt           j                             |¦  «        s"t	          d                     |¦  «        ¦  «        ‚t          |¦  «        }|                     dd¦  «        }|€f|                     dd¦  «        }|€"t	          d                     |¦  «        ¦  «        ‚t           	                    t          j        |¦  «        ¦  «        S t                               t          j        |¦  «        ¦  «        S )aY  
            Create a public or private key from reading the given public or private key file.

            Here is an example key file that includes an CryptosignKey private key ``private-key-ed25519``, 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:`CryptosignKey`
            zkeyfile "{}" is not a filezprivate-key-ed25519Nzpublic-key-ed25519zJneither "private-key-ed25519" nor "public-key-ed25519" found in keyfile {})ÚosÚpathÚexistsÚisfiler  r1   r   Úgetr   rò   r4   r   rô   )rñ   r  r   Úprivkey_ed25519_hexÚpubkey_ed25519_hexs        r    Úfrom_keyfilezCryptosignKey.from_keyfileŽ  s  € õ. ”7—>’> 'Ñ*Ô*ð Qµ"´'·.².ÀÑ2IÔ2Ið QÝ"Ð#?×#FÒ#FÀwÑ#OÔ#OÑPÔPÐPõ ! Ñ)Ô)ˆDà"&§(¢(Ð+@À$Ñ"GÔ"GÐØ"Ð*Ø%)§X¢XÐ.BÀDÑ%IÔ%IÐ"Ø%Ð-Ý&Ð's×'zÒ'zð  |Cñ  (Dô  (Dñ  Eô  Eð  Eå(×4Ò4µXÔ5EÐFXÑ5YÔ5YÑZÔZÐZå$×/Ò/µÔ0@ÐATÑ0UÔ0UÑVÔVÐVr"   )NNN)NN)FrG   )r   )rR   rS   rT   rU   Úboolr   r   Úintr/   rE   ÚpropertyrË   rÌ   r7   rÙ   rÊ   rÜ   rÝ   r   rã   r   rê   Úclassmethodrò   rô   rø   rû   rú   r  r  rV   r"   r    r   r   ¸  sƒ  € € € € € ð	ð 	ð
 ^bØLPð
	$ð 
	$¨$ð 
	$ÀÈ/ÔAZð 
	$Ø% cœ]ð
	$Ø<DÀS¼Mð
	$ØUYð
	$ð 
	$ð 
	$ð 
	$ð 
ð	) XÐ.?Ô%@ð 	)ð 	)ð 	)ñ 
Œð	)ð 
ð	 ˜H SœMð 	 ð 	 ð 	 ñ 
Œð	 ð 
ð	!˜X cœ]ð 	!ð 	!ð 	!ñ 
Œð	!ð 
ð	 ˜cð 	 ð 	 ð 	 ñ 
Œð	 ð 
ð	"˜dð 	"ð 	"ð 	"ñ 
Œð	"ð	>˜Uð 	> uð 	>ð 	>ð 	>ð 	>ð$ VZØ<@ð
	4ð 
	4¨Ið 
	4À8ÈEÄ?ð 
	4Ø,4°S¬Mð
	4ØEJð
	4ð 
	4ð 
	4ð 
	4ð	Oð 	O Tð 	O°e¸CÀ¸JÔ6Gð 	Oð 	Oð 	Oð 	Oð" 
ð
	Wð 
	W Uð 
	W°X¸c´]ð 
	WÈoð 
	Wð 
	Wð 
	Wñ 
Œð
	Wð 
ð
	Tð 
	T ð 
	T°¸#´ð 
	TÈ/ð 
	Tð 
	Tð 
	Tñ 
Œð
	Tð 
ð	=ð 	= Sð 	=°8¸C´=ð 	=ÈOð 	=ð 	=ð 	=ñ 
Œð	=ð2 
ð		0¨ð 		0°ð 		0ð 		0ð 		0ñ 
Œð		0ð 
ð	D¨#ð 	D°/ð 	Dð 	Dð 	Dñ 
Œð	Dð( 
ð	ð 	¨Sð 	¸ð 	À_ð 	ð 	ð 	ñ 
Œð	ð8 
ð,	W sð ,	W¨ð ,	Wð ,	Wð ,	Wñ 
Œð,	Wð ,	Wð ,	Wr"   c                   ó€  — e Zd ZdZg d¢Z	 	 	 	 	 	 	 	 	 	 	 	 d.dee         dee         dee         dee         dee         d	ee         d
ee         dee         dee         dee         dee         dee         fd„Z	e
dee         fd„¦   «         Zej        dee         fd„¦   «         Ze
dee         fd„¦   «         Zej        dee         fd„¦   «         Ze
dee         fd„¦   «         Zej        dee         fd„¦   «         Ze
dee         fd„¦   «         Zej        dee         fd„¦   «         Ze
dee         fd„¦   «         Zej        dee         fd„¦   «         Ze
dee         fd„¦   «         Zej        dee         fd„¦   «         Ze
dee         fd„¦   «         Zej        dee         fd „¦   «         Ze
dee         fd!„¦   «         Zej        dee         fd"„¦   «         Ze
dee         fd#„¦   «         Zej        dee         fd$„¦   «         Ze
dee         fd%„¦   «         Zej        dee         fd&„¦   «         Ze
dee         fd'„¦   «         Zej        dee         fd(„¦   «         Ze
dee         fd)„¦   «         Zej        dee         fd*„¦   «         Zed+eeef         dd fd,„¦   «         Zdeeef         fd-„ZdS )/ÚCryptosignAuthextraz3
        WAMP-Cryptosign authextra object.
        )Ú_pubkeyÚ
_trustrootÚ
_challengeÚ_channel_bindingÚ_channel_idÚ_realmÚ	_chain_idÚ	_block_noÚ	_delegateÚ_seederÚ
_bandwidthÚ
_signatureNr�   r°   Úchannel_bindingrà   Ú	trustrootÚrealmÚchain_idÚblock_noÚdelegateÚseederÚ	bandwidthrß   c                 ó.  — |rt          |¦  «        dk    sJ ‚|rt          |¦  «        dk    sJ ‚|rt          |¦  «        dk    sJ ‚|r|dv sJ ‚|rt          |¦  «        dk    sJ ‚|rt          |¦  «        dk    sJ ‚|	rt          |	¦  «        dk    sJ ‚|
rt          |
¦  «        dk    sJ ‚|rt          |¦  «        dk    sJ ‚|| _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        d S )Nr-   é   ©r´   éA   )r%   r  r  r  r  r  r  r  r  r   r!  r"  r#  )rC   r�   r°   r$  rà   r%  r&  r'  r(  r)  r*  r+  rß   s                r    rE   zCryptosignAuthextra.__init__Ò  so  € ð* ð )Ý˜6‘{”{ bÒ(Ð(Ð(Ð(Øð ,Ý˜9‘~”~¨Ò+Ð+Ð+Ð+Øð ,Ý˜9‘~”~¨Ò+Ð+Ð+Ð+Øð 9Ø&¨.Ð8Ð8Ð8Ð8Øð -Ý˜:‘”¨"Ò,Ð,Ð,Ð,Øð (Ý˜5‘z”z RÒ'Ð'Ð'Ð'Øð +Ý˜8‘}”}¨Ò*Ð*Ð*Ð*Øð )Ý˜6‘{”{ bÒ(Ð(Ð(Ð(Øð ,Ý˜9‘~”~¨Ò+Ð+Ð+Ð+Ø!ˆDŒLØ'ˆDŒOØ'ˆDŒOØ$3ˆDÔ!Ø)ˆDÔØˆDŒKØ%ˆDŒNØ%ˆDŒNØ%ˆDŒNØ!ˆDŒLØ'ˆDŒOØ'ˆDŒOˆOˆOr"   rW   c                 ó   — | j         S rG   )r  rH   s    r    r�   zCryptosignAuthextra.pubkey  ó
   € à”<Ðr"   rL   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S ©Nr-  )r%   r  ©rC   rL   s     r    r�   zCryptosignAuthextra.pubkey
  ó(   € à�=¥C¨¡J¤J°"Ò$4Ð$4Ð$4Ð$4Ø ˆDŒLˆLˆLr"   c                 ó   — | j         S rG   )r  rH   s    r    r%  zCryptosignAuthextra.trustroot  ó
   € à”?Ð"r"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S r3  )r%   r  r4  s     r    r%  zCryptosignAuthextra.trustroot  ó(   € à�=¥C¨¡J¤J°"Ò$4Ð$4Ð$4Ð$4Ø#ˆDŒOˆOˆOr"   c                 ó   — | j         S rG   )r  rH   s    r    r°   zCryptosignAuthextra.challenge  r7  r"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S ©Nr-   )r%   r  r4  s     r    r°   zCryptosignAuthextra.challenge  r9  r"   c                 ó   — | j         S rG   ©r  rH   s    r    r$  z#CryptosignAuthextra.channel_binding!  s   € àÔ(Ð(r"   c                 ó$   — |�|dv sJ ‚|| _         d S )Nr.  r>  r4  s     r    r$  z#CryptosignAuthextra.channel_binding%  s%   € à�= E¨^Ð$;Ð$;Ð$;Ð$;Ø$)ˆDÔ!Ð!Ð!r"   c                 ó   — | j         S rG   )r  rH   s    r    rà   zCryptosignAuthextra.channel_id*  s   € àÔ#Ð#r"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S r<  )r%   r  r4  s     r    rà   zCryptosignAuthextra.channel_id.  s+   € à�=¥C¨¡J¤J°"Ò$4Ð$4Ð$4Ð$4Ø$ˆDÔÐÐr"   c                 ó   — | j         S rG   )r  rH   s    r    r&  zCryptosignAuthextra.realm3  s
   € à”;Ðr"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S r3  )r%   r  r4  s     r    r&  zCryptosignAuthextra.realm7  s(   € à�=¥C¨¡J¤J°"Ò$4Ð$4Ð$4Ð$4ØˆDŒKˆKˆKr"   c                 ó   — | j         S rG   ©r  rH   s    r    r'  zCryptosignAuthextra.chain_id<  ó
   € à”>Ð!r"   c                 ó(   — |�|dk    sJ ‚|| _         d S r?   rE  r4  s     r    r'  zCryptosignAuthextra.chain_id@  ó   € à�= E¨A¢I I I IØ"ˆDŒNˆNˆNr"   c                 ó   — | j         S rG   ©r  rH   s    r    r(  zCryptosignAuthextra.block_noE  rF  r"   c                 ó(   — |�|dk    sJ ‚|| _         d S r?   rJ  r4  s     r    r(  zCryptosignAuthextra.block_noI  rH  r"   c                 ó   — | j         S rG   )r   rH   s    r    r)  zCryptosignAuthextra.delegateN  rF  r"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S r3  )r%   r   r4  s     r    r)  zCryptosignAuthextra.delegateR  s(   € à�=¥C¨¡J¤J°"Ò$4Ð$4Ð$4Ð$4Ø"ˆDŒNˆNˆNr"   c                 ó   — | j         S rG   )r!  rH   s    r    r*  zCryptosignAuthextra.seederW  r1  r"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S r3  )r%   r!  r4  s     r    r*  zCryptosignAuthextra.seeder[  r5  r"   c                 ó   — | j         S rG   ©r"  rH   s    r    r+  zCryptosignAuthextra.bandwidth`  r7  r"   c                 ó(   — |�|dk    sJ ‚|| _         d S r?   rQ  r4  s     r    r+  zCryptosignAuthextra.bandwidthd  s   € à�= E¨A¢I I I IØ#ˆDŒOˆOˆOr"   c                 ó   — | j         S rG   )r#  rH   s    r    rß   zCryptosignAuthextra.signaturei  r7  r"   c                 óB   — |�t          |¦  «        dk    sJ ‚|| _        d S )Nr/  )r%   r#  r4  s     r    rß   zCryptosignAuthextra.signaturem  r9  r"   r   c                 óö  — t          ¦   «         }|                      dd ¦  «        }|��t          |¦  «        t          k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        |_        |                      dd ¦  «        }|��t          |¦  «        t          k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        |_	        |                      dd ¦  «        }|�tt          |¦  «        t          k    r/t	          d	                     t          |¦  «        ¦  «        ¦  «        ‚|d
vr"t	          d                     |¦  «        ¦  «        ‚||_
        |                      dd ¦  «        }|��t          |¦  «        t          k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        |_        |                      dd ¦  «        }|�¦t          |¦  «        t          k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          j        |¦  «        s/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |dd …         ¦  «        |_        |                      dd ¦  «        }|��³t          |¦  «        t          k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚|                     dd ¦  «        }|�Nt          |¦  «        t           k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚||_        |                     dd ¦  «        }	|	�Nt          |	¦  «        t           k    r/t	          d                     t          |	¦  «        ¦  «        ¦  «        ‚|	|_        |                     dd ¦  «        }
|
�¦t          |
¦  «        t          k    r/t	          d                     t          |
¦  «        ¦  «        ¦  «        ‚t          j        |
¦  «        s/t	          d                     t          |
¦  «        ¦  «        ¦  «        ‚t          |
dd …         ¦  «        |_        |                     dd ¦  «        }|�¦t          |¦  «        t          k    r/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          j        |¦  «        s/t	          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |dd …         ¦  «        |_        |                     dd ¦  «        }|�¦t          |¦  «        t          k    r/t	          d                      t          |¦  «        ¦  «        ¦  «        ‚t          j        |¦  «        s/t	          d!                     t          |¦  «        ¦  «        ¦  «        ‚t          |dd …         ¦  «        |_        |                     d"d ¦  «        }|�Nt          |¦  «        t           k    r/t	          d#                     t          |¦  «        ¦  «        ¦  «        ‚||_        |                      d$d ¦  «        }|��t          |¦  «        t          k    r/t	          d%                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        d&k    r/t	          d'                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        |_        |S )(Nr�   zinvalid type {} for pubkeyrƒ   zinvalid length {} of pubkeyr°   zinvalid type {} for challengezinvalid length {} of challenger$  z#invalid type {} for channel_bindingr.  z&invalid value "{}" for channel_bindingrà   zinvalid type {} for channel_idzinvalid length {} of channel_idr%  z1invalid type {} for trustroot - expected a stringz?invalid value "{}" for trustroot - expected an Ethereum addressé   Úreservationzinvalid type {} for reservationr'  z>invalid type {} for reservation.chain_id - expected an integerr(  z>invalid type {} for reservation.block_no - expected an integerr&  z9invalid type {} for reservation.realm - expected a stringzGinvalid value "{}" for reservation.realm - expected an Ethereum addressr)  z<invalid type {} for reservation.delegate - expected a stringzJinvalid value "{}" for reservation.delegate - expected an Ethereum addressr*  z:invalid type {} for reservation.seeder - expected a stringzHinvalid value "{}" for reservation.seeder - expected an Ethereum addressr+  z?invalid type {} for reservation.bandwidth - expected an integerrß   zinvalid type {} for signatureé‚   zinvalid length {} of signature)r  r  r.   r/   rð   r1   r%   r   r  r  r  r  r   Úmatchr  Údictr  r  r  r  r   r!  r"  r#  )r   Úobjr�   r°   r$  rà   r%  rW  r'  r(  r&  r)  r*  r+  rß   s                  r    ÚparsezCryptosignAuthextra.parser  sS  € å%Ñ'Ô'ˆCà—X’X˜h¨Ñ-Ô-ˆFØÐ!Ý˜‘<”<¥3Ò&Ð&Ý$Ð%A×%HÒ%HÍÈfÉÌÑ%VÔ%VÑWÔWÐWÝ�v‘;”; &Ò(Ð(Ý$Ð%B×%IÒ%IÍ#ÈfÉ+Ì+Ñ%VÔ%VÑWÔWÐWÝ% f™oœo�”àŸš ¨dÑ3Ô3ˆIØÐ$Ý˜	‘?”?¥cÒ)Ð)Ý$Ð%D×%KÒ%KÍDÐQZÉOÌOÑ%\Ô%\Ñ]Ô]Ð]Ý�y‘>”> VÒ+Ð+Ý$Ð%E×%LÒ%LÍSÐQZÉ^Ì^Ñ%\Ô%\Ñ]Ô]Ð]Ý!(¨Ñ!3Ô!3�”à"ŸhšhÐ'8¸$Ñ?Ô?ˆOØÐ*Ý˜Ñ(Ô(­CÒ/Ð/Ý$Ð%J×%QÒ%QÕRVÐWfÑRgÔRgÑ%hÔ%hÑiÔiÐiØ"¨.Ð8Ð8Ý$Ð%M×%TÒ%TÐUdÑ%eÔ%eÑfÔfÐfØ'6�Ô$àŸš ,°Ñ5Ô5ˆJØÐ%Ý˜
Ñ#Ô#¥sÒ*Ð*Ý$Ð%E×%LÒ%LÍTÐR\ÑM]ÔM]Ñ%^Ô%^Ñ_Ô_Ð_Ý�z‘?”? fÒ,Ð,Ý$Ð%F×%MÒ%MÍcÐR\ÉoÌoÑ%^Ô%^Ñ_Ô_Ð_Ý")¨*Ñ"5Ô"5�”àŸš ¨dÑ3Ô3ˆIØÐ$Ý˜	‘?”?¥cÒ)Ð)Ý$Ð%X×%_Ò%_Õ`dÐenÑ`oÔ`oÑ%pÔ%pÑqÔqÐqÝ.Ô4°YÑ?Ô?ð @Ý$Ð%f×%mÒ%mÕnrÐs|Ñn}Ôn}Ñ%~Ô%~ÑÔÐÝ!(¨°1°2°2¬Ñ!7Ô!7�”àŸ(š( =°$Ñ7Ô7ˆKØÑ&Ý˜Ñ$Ô$­Ò,Ð,Ý$Ð%F×%MÒ%MÍdÐS^ÑN_ÔN_Ñ%`Ô%`ÑaÔaÐaà&Ÿ?š?¨:°tÑ<Ô<�ØÐ'Ý˜H‘~”~­Ò,Ð,Ý(Ð)i×)pÒ)pÕquÐv~ÑqÔqñ  *Aô  *Añ  Bô  Bð  BØ$,�C”Mà&Ÿ?š?¨:°tÑ<Ô<�ØÐ'Ý˜H‘~”~­Ò,Ð,Ý(Ð)i×)pÒ)pÕquÐv~ÑqÔqñ  *Aô  *Añ  Bô  Bð  BØ$,�C”Mà#Ÿš¨°Ñ6Ô6�ØÐ$Ý˜E‘{”{¥cÒ)Ð)Ý(Ð)d×)kÒ)kÕlpÐqvÑlwÔlwÑ)xÔ)xÑyÔyÐyÝ2Ô8¸Ñ?Ô?ð HÝ(Ð)r×)yÒ)yÕz~ð  @Eñ  {Fô  {Fñ  *Gô  *Gñ  Hô  Hð  HÝ!(¨¨q¨r¨r¬Ñ!3Ô!3�C”Jà&Ÿ?š?¨:°tÑ<Ô<�ØÐ'Ý˜H‘~”~­Ò,Ð,Ý(Ð)g×)nÒ)nÕosÐt|Ño}Ôo}Ñ)~Ô)~ÑÔÐÝ2Ô8¸ÑBÔBð NÝ(Ð)u×)|Ò)|õ  ~Bð  CKñ  ~Lô  ~Lñ  *Mô  *Mñ  Nô  Nð  NÝ$+¨H°Q°R°R¬LÑ$9Ô$9�C”Mà$Ÿš¨°4Ñ8Ô8�ØÐ%Ý˜F‘|”|¥sÒ*Ð*Ý(Ð)e×)lÒ)lÕmqÐrxÑmyÔmyÑ)zÔ)zÑ{Ô{Ð{Ý2Ô8¸Ñ@Ô@ð JÝ(Ð)s×)zÒ)zÕ{ð  AGñ  |Hô  |Hñ  *Iô  *Iñ  Jô  Jð  JÝ")¨&°°°¬*Ñ"5Ô"5�C”Kà'ŸOšO¨K¸Ñ>Ô>�	ØÐ(Ý˜I‘”­#Ò-Ð-Ý(Ð)j×)qÒ)qÕrvð  xAñ  sBô  sBñ  *Cô  *Cñ  Dô  Dð  DØ%.�C”NàŸš ¨dÑ3Ô3ˆIØÐ$Ý˜	‘?”?¥cÒ)Ð)Ý$Ð%D×%KÒ%KÍDÐQZÉOÌOÑ%\Ô%\Ñ]Ô]Ð]Ý�y‘>”> VÒ+Ð+Ý$Ð%E×%LÒ%LÍSÐQZÉ^Ì^Ñ%\Ô%\Ñ]Ô]Ð]Ý!(¨Ñ!3Ô!3�”àˆJr"   c                 ó¼  — i }| j         �)t          | j         ¦  «                             ¦   «         |d<   | j        �)t          | j        ¦  «                             ¦   «         |d<   | j        �
| j        |d<   | j        �)t          | j        ¦  «                             ¦   «         |d<   | j        �,dt          | j        ¦  «                             ¦   «         z   |d<   i }| j        �
| j        |d<   | j        �
| j        |d<   | j	        �,dt          | j	        ¦  «                             ¦   «         z   |d	<   | j
        �,dt          | j
        ¦  «                             ¦   «         z   |d
<   | j        �,dt          | j        ¦  «                             ¦   «         z   |d<   | j        �
| j        |d<   |r||d<   | j        �)t          | j        ¦  «                             ¦   «         |d<   |S )Nr�   r°   r$  rà   Ú0xr%  r'  r(  r&  r)  r*  r+  rW  rß   )r  r   rm   r  r  r  r  r  r  r  r   r!  r"  r#  )rC   ÚresrW  s      r    ÚmarshalzCryptosignAuthextra.marshal×  sÍ  € ØˆCð Œ|Ð'Ý '¨¬Ñ 5Ô 5× <Ò <Ñ >Ô >��H‘àŒÐ*Ý#*¨4¬?Ñ#;Ô#;×#BÒ#BÑ#DÔ#D��KÑ ØÔ$Ð0Ø)-Ô)>�Ð%Ñ&ØÔÐ+Ý$+¨DÔ,<Ñ$=Ô$=×$DÒ$DÑ$FÔ$F��LÑ!àŒÐ*Ø#'­'°$´/Ñ*BÔ*B×*IÒ*IÑ*KÔ*KÑ#K��KÑ àˆKØŒ~Ð)Ø*.¬.�˜JÑ'ØŒ~Ð)Ø*.¬.�˜JÑ'ØŒ{Ð&Ø'+­g°d´kÑ.BÔ.B×.IÒ.IÑ.KÔ.KÑ'K�˜GÑ$ØŒ~Ð)Ø*.µ¸¼Ñ1HÔ1H×1OÒ1OÑ1QÔ1QÑ*Q�˜JÑ'ØŒ|Ð'Ø(,­w°t´|Ñ/DÔ/D×/KÒ/KÑ/MÔ/MÑ(M�˜HÑ%ØŒÐ*Ø+/¬?�˜KÑ(Øð 1Ø%0��MÑ"àŒÐ*Ý#*¨4¬?Ñ#;Ô#;×#BÒ#BÑ#DÔ#D��KÑ àˆJr"   )NNNNNNNNNNNN)rR   rS   rT   rU   Ú	__slots__r   rÜ   r/   r  rE   r  r�   Úsetterr%  r°   r$  rà   r&  r'  r(  r)  r*  r+  rß   Ústaticmethodr   r	   r\  r`  rV   r"   r    r  r  ¿  s¤  € € € € € ð	ð 	ð
ð 
ð 
ˆ	ð  04Ø26Ø6:Ø37ð 37ð
 /3Ø/3Ø/3Ø15Ø/3Ø04à26ð'2	(ð 2	(Ø% eœ_ð2	(à (¨¤ð2	(ð '/¨s¤mð2	(ð "*¨%¤ð	2	(ð !)¨¤ð2	(ð % UœOð2	(ð  (¨œ}ð2	(ð  (¨œ}ð2	(ð  (¨œð2	(ð  & eœ_ð!2	(ð" !)¨¤ð#2	(ð& !)¨¤ð'2	(ð 2	(ð 2	(ð 2	(ðh 
ð	 ˜H UœOð 	 ð 	 ð 	 ñ 
Œð	 ð 
Œð	! ¨¤ð 	!ð 	!ð 	!ñ 
Œð	!ð 
ð	#˜x¨œð 	#ð 	#ð 	#ñ 
Œð	#ð 
Ô	ð	$ 8¨E¤?ð 	$ð 	$ð 	$ñ 
Ô	ð	$ð 
ð	#˜x¨œð 	#ð 	#ð 	#ñ 
Œð	#ð 
Ô	ð	$ 8¨E¤?ð 	$ð 	$ð 	$ñ 
Ô	ð	$ð 
ð	) X¨c¤]ð 	)ð 	)ð 	)ñ 
Œð	)ð 
Ô	ð	*¨°#¬ð 	*ð 	*ð 	*ñ 
 Ô	ð	*ð 
ð	$ ¨¤ð 	$ð 	$ð 	$ñ 
Œð	$ð 
Ô	ð	% H¨U¤Oð 	%ð 	%ð 	%ñ 
Ô	ð	%ð 
ð	˜8 Eœ?ð 	ð 	ð 	ñ 
Œð	ð 
Œð	 ˜x¨œð 	 ð 	 ð 	 ñ 
Œð	 ð 
ð	"˜h sœmð 	"ð 	"ð 	"ñ 
Œð	"ð 
Œð	# (¨3¤-ð 	#ð 	#ð 	#ñ 
Œð	#ð 
ð	"˜h sœmð 	"ð 	"ð 	"ñ 
Œð	"ð 
Œð	# (¨3¤-ð 	#ð 	#ð 	#ñ 
Œð	#ð 
ð	"˜h uœoð 	"ð 	"ð 	"ñ 
Œð	"ð 
Œð	# (¨5¤/ð 	#ð 	#ð 	#ñ 
Œð	#ð 
ð	 ˜H UœOð 	 ð 	 ð 	 ñ 
Œð	 ð 
Œð	! ¨¤ð 	!ð 	!ð 	!ñ 
Œð	!ð 
ð	#˜x¨œ}ð 	#ð 	#ð 	#ñ 
Œð	#ð 
Ô	ð	$ 8¨C¤=ð 	$ð 	$ð 	$ñ 
Ô	ð	$ð 
ð	#˜x¨œð 	#ð 	#ð 	#ñ 
Œð	#ð 
Ô	ð	$ 8¨E¤?ð 	$ð 	$ð 	$ñ 
Ô	ð	$ð 
ðb	˜˜S #˜Xœð b	Ð+@ð b	ð b	ð b	ñ 
Œðb	ðH%	˜T # s (œ^ð %	ð %	ð %	ð %	ð %	ð %	r"   r  )r   Úformat_challengerã   r  )r‘   )5r
  r4   r   r   r   Útypingr   r   r   r   r	   r¾   Úautobahnr
   Úautobahn.wamp.interfacesr   r   Úautobahn.wamp.typesr   Úautobahn.wamp.messager   Úautobahn.utilr   Ú__all__Únaclr   r   r   Únacl.signingr   r   r   r  r!   r)   r;   r=   r  rÜ   rc   r€   r‹   r�   r©   r¯   r/   rº   rÈ   Úobjectr   Úregisterr  ÚextendrV   r"   r    ú<module>rq     sI  ðð6 
€	€	€	Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à €€€à Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ð€ð$à0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø*Ð*Ð*Ð*Ð*Ð*ð €NØ‡N‚N�?Ñ#Ô#Ð#Ð#øð	 ð ð ð Ø€N€N€Nðøøøðð ð ð"ð ð ð#ð #ð #ðL1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð8P�3ð P˜5ð Pð Pð Pð Pð
að að aðHð ð ðð ð ð(+ð (+ð (+ð (+ðV$ð $ð $ðL ð R
cð* Yð *ÀÈÄð *ÐbjÐknÔboð *Ðtyð *ð *ð *ð *ðX˜eð °(ð ¸uð ð ð ð ð<CWð CWð CWð CWð CW˜ñ CWô CWð CWðJ €NÔ˜MÑ*Ô*Ð*ð}ð }ð }ð }ð }˜fñ }ô }ð }ð~	 ‡N‚NÐaÐaÐaÑbÔbÐbÐbÐbðeR
cð R
cs   ÁA3 Á3A=Á<A=