
    af                     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       J/var/www/html/env/lib/python3.11/site-packages/autobahn/wamp/cryptosign.py_unpackr!   8   sw     E
 }T72A2;//2  $(
+WQXYY-?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[s4yy11222T88E??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MMOO!!##E
5zzQ8999"D'7}?FFtLLMMMw''D>dmmA > > >299!<<===> 3xx2~~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!    	KK			r"   c                 *    | j         | j        d          S N)r@   rA   rC   s    r    get_remaining_payloadz&_SSHPacketReader.get_remaining_payload   s    |DIJJ''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    9tdi''/000TYty4'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%    }T4>>!#4#455a88r"   c                 P    |                      |                                           S rG   )rM   rO   rH   s    r    
get_stringz_SSHPacketReader.get_string   s    ~~doo//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OqAJJqEJ22OOOOOOr"   r,   )r&   range)rK   s    r    _makepadrc      sL    ????s??????88OOE!TAX<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9Aaggii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   < 6I1G(Ny)) bg.>.>w.G.G b`aaall7##Gc)nnW,-Ggg9999999Gw''DN##$$%Dd##F##%%K




C
E
  ""H

&
&
(
(CJg  E  F  F  	F
g~~IJJJzz[bbchiijjj
 YWXXXh''F






C
nPWWX[XbXbcjXkXkllmmm					B					B
2ww(5553444
2ww(5553444!!G

&
&
(
(C
3xx MSXX++shs3xx6H6H/H/Hahhilmpiqiqsv  yA  BE  FI  BJ  BJ  yK  yK  L  L  M  M  	M -x--.DnnW%%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":;;BCC@s88r>>cjjknorksks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$QVVXX%8%8%:%:1%=>>rssCv;;"^eefijpfqfq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   " ?""""MMM	k		 +a$$&&q)]]A,2,B  D D
F6>>III .+;t<<<"++--. . . . . . .+ + + + + + + +. . . . . . . . . U]]####MM0@0IMJJE??$$#+ + + + + + + +& 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6F"6**J
).
9
9Cgs#####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\\]abk]l]lmmo o o io--HIII "4#%%SZZ[_`m[n[nooppp}##X__`cdq`r`rssttt !(77l**   #%& & &'m't'tN##(% (%& & & 8M>::DD$ DDP8??PPPP5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B7KKM  '--44W==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    sG$566 M*S'J\:]:] M 9 @ @c K KLLL~C1C!D!D~h~[efikrk|[}[}~~~DI%DN$3D!!DL#DMMMr"   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DzzU"" BCCC!%!5!5C .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LD"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zz||#zz(*=z>>EEg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    OtG}}';'; !>!E!Ed7mm!T!TUUUF||u$$ !H!O!OPTU[P\P\!]!]^^^6{{b   !F!M!McRXkk!Z!Z[[[37,V44ug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    OtG}}';'; !>!E!Ed7mm!T!TUUUCyyE!! !H!O!OPTUXPYPY!Z!Z[[[3xx2~~ !F!M!McRUhh!W!WXXX37-c22T7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     OtG}}';'; = D DT']] S STTTH~~$$ > E Eh O OPPPh%% $6688$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ >>(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%% <6688??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 33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#VWX#Y#YZZZ[ 399%@@O--j/JJG==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"'..2I2I Q"#?#F#Fw#O#OPPP !))D"&((+@$"G"G"*%)XX.BD%I%I"%-&'s'z'z  |C  (D  (D  E  E  E(44X5EFX5Y5YZZZ$//0@AT0U0U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]
	$<DSM
	$UY
	$ 
	$ 
	$ 
	$ 
	)X.?%@ 	) 	) 	) 
	) 
	 HSM 	  	  	  
	  
	!Xc] 	! 	! 	! 
	! 
	 c 	  	  	  
	  
	"d 	" 	" 	" 
	"	>U 	>u 	> 	> 	> 	>$ VZ<@
	4 
	4I 
	48E? 
	4,4SM
	4EJ
	4 
	4 
	4 
	4	O 	OT 	OeCJ6G 	O 	O 	O 	O" 

	W 
	WU 
	WXc] 
	Wo 
	W 
	W 
	W 

	W 

	T 
	T 
	T# 
	T/ 
	T 
	T 
	T 

	T 
	= 	=S 	=8C= 	=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 -:",,,, (5zzR'''' +8}}**** )6{{b(((( ,9~~++++!DL'DO'DO$3D!)DDK%DN%DN%DN!DL'DO'DOOOr"   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JJ"$4$4$44 DLLLr"   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JJ"$4$4$44#DOOOr"   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JJ"$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JJ"$4$4$44DKKKr"   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@      =EAIII-"DNNNr"   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JJ"$4$4$44"DNNNr"   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    =EAIII-#DOOOr"   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XXh--F!<<3&&$%A%H%Hf%V%VWWWv;;&(($%B%I%I#f++%V%VWWW%food33I$	??c))$%D%K%KDQZOO%\%\]]]y>>V++$%E%L%LSQZ^^%\%\]]]!(!3!3"hh'8$??O*((C//$%J%Q%QRVWfRgRg%h%hiii".88$%M%T%TUd%e%efff'6$,55J%
##s**$%E%L%LTR\M]M]%^%^___z??f,,$%F%M%McR\oo%^%^___")*"5"5d33I$	??c))$%X%_%_`den`o`o%p%pqqq.4Y?? @$%f%m%mnrs|n}n}%~%~!(122!7!7((=$77K&$$,,$%F%M%MdS^N_N_%`%`aaa&??:t<<'H~~,,()i)p)pquv~qq  *A  *A  B  B  B$,CM&??:t<<'H~~,,()i)p)pquv~qq  *A  *A  B  B  B$,CM#66$E{{c))()d)k)klpqvlwlw)x)xyyy28?? H()r)y)yz~  @E  {F  {F  *G  *G  H  H  H!(qrr!3!3CJ&??:t<<'H~~,,()g)n)nost|o}o})~)~28BB N()u)|)|  ~B  CK  ~L  ~L  *M  *M  N  N  N$+HQRRL$9$9CM$488%F||s**()e)l)lmqrxmymy)z)z{{{28@@ J()s)z)z{  AG  |H  |H  *I  *I  J  J  J")&*"5"5CK'OOK>>	(I#--()j)q)qrv  xA  sB  sB  *C  *C  D  D  D%.CNd33I$	??c))$%D%K%KDQZOO%\%\]]]y>>V++$%E%L%LSQZ^^%\%\]]]!(!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'{&'+gdk.B.B.I.I.K.K'KG$~)*.1H1H1O1O1Q1Q*QJ'|'(,wt|/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       	 	
 
 
	  04266:37 37
 /3/3/315/30426'2	( 2	(%e_2	( (2	( '/sm2	( "*%	2	( !)2	( %UO2	(  (}2	(  (}2	(  (2	(  &e_!2	(" !)#2	(& !)'2	( 2	( 2	( 2	(h 
	 HUO 	  	  	  
	  
	! 	! 	! 	! 
	! 
	#x 	# 	# 	# 
	# 
		$8E? 	$ 	$ 	$ 
		$ 
	#x 	# 	# 	# 
	# 
		$8E? 	$ 	$ 	$ 
		$ 
	)Xc] 	) 	) 	) 
	) 
		*# 	* 	* 	* 
 		* 
	$ 	$ 	$ 	$ 
	$ 
		%HUO 	% 	% 	% 
		% 
	8E? 	 	 	 
	 
	 x 	  	  	  
	  
	"hsm 	" 	" 	" 
	" 
	#(3- 	# 	# 	# 
	# 
	"hsm 	" 	" 	" 
	" 
	#(3- 	# 	# 	# 
	# 
	"huo 	" 	" 	" 
	" 
	#(5/ 	# 	# 	# 
	# 
	 HUO 	  	  	  
	  
	! 	! 	! 	! 
	! 
	#x} 	# 	# 	# 
	# 
		$8C= 	$ 	$ 	$ 
		$ 
	#x 	# 	# 	# 
	# 
		$8E? 	$ 	$ 	$ 
		$ 
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NN?####	    NNN  "  # # #L1 1 1 1 1 1 1 18P3 P5 P P P P
a a aH    (+ (+ (+ (+V$ $ $L  R
c*Y * *bjknbo *ty * * * *Xe ( u    <CW CW CW CW CW CW CW CWJ NM***} } } } }f } } }~	 NNaaabbbbbeR
c R
cs   A3 3A=<A=