
    h                        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j?                  d       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rXd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jd                  e1        G d$ d%e0      Z3eji                  g d&       yy# e $ r dZY w xY w)(    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 }| r@t        j                  d| dd       d   }| d|dz    | d|z   d } }|j                  |       | r@|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       T/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/wamp/cryptosign.py_unpackr!   8   s`     E
}}T72A;/2  $(+WQXY-?gT  L    c           	          g }| D ]A  }|j                  t        j                  dt        |                   |j                  |       C dj	                  |      S )z)
    Pack parts into a SSH key blob.
    r   r"   )r   r   packlenjoin)keypartsr   parts      r    _packr)   I   sJ     EV[[s4y12T  88E?r"   c                 ,   t        |       t        k7  r#t        dj                  t        |                   | j	                         j                         }t        |      dk7  rt        d      |\  }} }|dk7  rt        dj                  |            t        j                  |       }	 t        |      d   }t        |      d	k7  r#t        d
j                  t        |                  ||fS # t        $ r}t        dj                  |            d}~ww xY w)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   s    G}5<<T']KLLMMO!!#E
5zQ899"D'7}?FFtLMMw'D>dmA 3x2~SZZ[^_b[cdee<  >299!<==>s   (C+ +	D4DDc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)_SSHPacketReaderzD
    Read OpenSSH packet format which is used for key material.
    c                 @    || _         d| _        t        |      | _        y Nr   )_packet_idxr%   _len)selfpackets     r    __init__z_SSHPacketReader.__init__   s    	K	r"   c                 4    | j                   | j                  d  S N)r@   rA   rC   s    r    get_remaining_payloadz&_SSHPacketReader.get_remaining_payload   s    ||DIIJ''r"   c                     | j                   |z   | j                  kD  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   sS    99tdii'/00TYYtyy4'78		T	r"   c                 R    t        j                  d| j                  d            d   S )Nr   r   r   )r   r   rM   rH   s    r    
get_uint32z_SSHPacketReader.get_uint32   s!    }}T4>>!#45a88r"   c                 @    | j                  | j                               S rG   )rM   rO   rH   s    r    
get_stringz_SSHPacketReader.get_string   s    ~~doo/00r"   N)	__name__
__module____qualname____doc__rE   rI   rM   rO   rQ    r"   r    r=   r=   z   s      
(91r"   r=   rK   returnc                 l    d| cxk  rdk  sJ  J dj                  d t        d| dz         D              S )Nr      r"   c              3   B   K   | ]  }|j                  d d        yw)r,   big)	byteorderN)to_bytes.0xs     r    	<genexpr>z_makepad.<locals>.<genexpr>   s     OqAJJqEJ2Os   r,   )r&   range)rK   s    r    _makepadrc      s7    ?s???88OE!TAX<NOOOr"   c                    d}d}d}| j                  |      r| j                  |      st        d      | j                  |      }| t	        |      | } dj                  d | j                         D              } t        j                  |       }|t	        |      d }t        |      }|j                         }|j                         }|j                          |j                         }	|j                          |j                         }
|j                         }d}|d	k7  rt        d
      |d	k7  rt        d      |	dk7  rt        dj                  |	            |rt        d      t        |
      }|j                          |j                          |j                         }|dk7  r)t        dj                  |j                  d                  |j                         }|j                         }t	        |      t        j                   k7  rt        d      t	        |      t        j"                  k7  rt        d      |j                         }|j                         }t	        |      r\t	        |      |k\  s|t%        t	        |            k7  r7t        dj                  t	        |      |t%        t	        |                        |dt        j&                   }|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   | ]  }|j                           y wrG   )r2   r^   s     r    ra   z,_read_ssh_ed25519_privkey.<locals>.<genexpr>   s     9Aaggi9s   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)g.>.>w.G`aall7#Gc)nW-Ggg999Gw'DN#$%Dd#F##%K



C
E
  "H

&
&
(CJg  E  F  	F
g~IJJz[bbchijj
WXXh'F





C
nPWWX[XbXbcjXklmm				B				B
2w(555344
2w(555344!G

&
&
(C
3xSX+shs3x6H/Hahhilmpiqsv  yA  BE  FI  BJ  yK  L  M  	M -x--.DnnW%G=r"   c                    t        |       5 }t        j                  |j                         j	                         d         dd }t        |      dk7  r#t        dj                  t        |                  |cddd       S # 1 sw Y   yxY w)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      sz     
n	 !!!&&("5"5"7":;BC@s8r>cjjknorkstuu     A*B  B	c                    t        |       5 }t        j                  |j                         j	                         d         dd }t        |      dk7  r#t        dj                  t        |                  |cddd       S # 1 sw Y   yxY w)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$$QVVX%8%8%:1%=>rsCv;"^eefijpfqrss  r   c                 h   |dv sJ ddl }t        |       5 }|j                         j                         d   }|j	                  d|j
                        }|j                  |       |dk(  rJddl}|j                         5 }|j                  |d	       |j                         cddd       cddd       S |d
k(  rMddl}|j                  |j                  j                  j                        }|j!                         cddd       S t#        d      # 1 sw Y   nxY w	 ddd       y# 1 sw Y   yxY w)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
    )text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   " ?"#"	k	 +a$$&q)]]A,2,B,B  D
F6> .+;t<"++-. .+ + U]#MM0@0@0I0IMJE??$#+ +& M**. . .+ + +s1   A)D(?#D"	D(5AD(D(D	D((D1c                 ~    t        |       }t        j                  |      }t        |      }|j	                  ||       y)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  s8    . *+6F""6*J
).
9Cgs#r"   	challengechannel_id_rawchannel_id_typec                 z   t        | t              s#t        dj                  t	        |                   d| j
                  vrt        d      | j
                  d   }t	        |      t        k7  r#t        dj                  t	        |                  t        |      dk7  r#t        dj                  t        |                  t        j                  |      }|dk(  rEt        |      dk(  sJ d	j                  t        |                   t        j                  ||      }|S ||}|S J d
j                  |             )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)z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  sJ    )Y/U\\]abk]lmo o ioo-HII "4#%SZZ[_`m[nopp}#X__`cdq`rstt !((7l* #%& %'m't'tN#(%% & 88M>:D  $ D  Q8??PP5r"   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                  |       j                  d      }t        j                        j                  d      }||z   }t        j                  |       y )Nri   )r4   r   rm   txaioresolve)signature_rawsignature_hexdata_hexr   d2r   s       r    processz _sign_challenge.<locals>.process  sS    $,,];BB7KM  ''-44W=H(*CMM"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y)*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                 l   t        |t        j                        s=t        |t        j                        s#t	        dj                  t        |                  |rt        |t        j                        s|st        |t        j                        sJ || _        || _        || _	        || _
        || _        y )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$56*S'J\J\:] 9 @ @c KLLC1C1C!Dh[efikrk|k|[}~~DI%DN$3D!!DL#DMr"   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                      y)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        k7  rt        d      | j                  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  sX     >> @AADzU" BCC!%!5C ..s}}==r"   r   
channel_idr   c                     |j                   dv s J dj                  |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  sW    
 ##'II \BII)JZJZ[\I %Y
OLD"433r"   binaryc                    t        | j                  t        j                        r| j                  j                  }n| j                  }|r|j                         S |j                  t        j                        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  sa     $))W%7%78ii**iizz|#zz(*=*=z>EEgNNr"   r   c                 x   |5t        |      t        k(  s#t        dj                  t        |                  t        |      t        k7  r#t        dj                  t        |                  t        |      dk7  r#t        dj                  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!Ed7m!TUUF|u$ !H!O!OPTU[P\!]^^6{b  !F!M!McRXk!Z[[7,,V4ugVVr"   r9   c                 x   |5t        |      t        k(  s#t        dj                  t        |                  t        |      t        k7  r#t        dj                  t        |                  t        |      dk7  r#t        dj                  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!Ed7m!TUUCyE! !H!O!OPTUXPY!Z[[3x2~ !F!M!McRUh!WXX7--c2T7SSr"   filenamec                 P   |5t        |      t        k(  s#t        dj                  t        |                  t        |      t        k7  rt        dj                  |            t	        |d      5 }|j                         }ddd       | j                  |      S # 1 sw Y   xY w)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TTH~$ > E Eh OPPh% $668$ >>(G><<$ $s   0BB%c                     t        |d      5 }|j                         j                  d      j                         }ddd       | j	                        S # 1 sw Y   xY w)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  sS     h% <668??7399;<%%h//< <s   .AArx   c                     d}|j                  |      r6t        |      \  }}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\  sx     >I""9-$=h$G!'((8;N;NO %=X$F!'''1 37CCr"   
seedphraseindexc                    	 ddl m} dj	                  |      } |||      }t        |      t        k(  sJ t        |      dk(  sJ | j                  |      }|S # t        $ r}t        dj	                  |            d}~ww xY w)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 399%@O-j/JG=E)))w<2%%% ..)CJ  ["#O#V#VWX#YZZ[s   A 	B"A<<Bkeyfilec                    t         j                  j                  |      rt         j                  j                  |      st	        dj                  |            t        |      }|j                  dd      }|V|j                  dd      }|t	        dj                  |            t        j                  t        j                  |            S t        j                  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    . 77>>'*"''..2I"#?#F#Fw#OPP !)D"&((+@$"G"*%)XX.BD%I"%-&'s'z'z  |C  (D  E  E(44X5E5EFX5YZZ$//0@0@AT0U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     sm   	
 ^bLP
	$$ 
	$/AZ 
	$%c]
	$<DSM
	$UY
	$ 
	)X.?%@ 	) 
	) 
	 HSM 	  
	  
	!Xc] 	! 
	! 
	 c 	  
	  
	"d 	" 
	"	>U 	>u 	>$ VZ<@
	4I 
	48E? 
	4,4SM
	4EJ
	4	OT 	OeCJ6G 	O" 

	WU 
	WXc] 
	Wo 
	W 

	W 

	T 
	T# 
	T/ 
	T 

	T 
	=S 	=8C= 	=O 	= 
	=2 
		0 		0 		0 
		0 
	D# 	D/ 	D 
	D( 
	S 	 	_ 	 
	8 
,	Ws ,	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y)/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 || _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        y )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__  s   * 6{b(((9~+++9~+++&.888:",,,5zR'''8}***6{b(((9~+++!DL'DO'DO$3D!)DDK%DN%DN%DN!DL'DO'DOr"   rW   c                     | j                   S rG   )r  rH   s    r    r   zCryptosignAuthextra.pubkey      <<r"   rL   c                 6    |t        |      dk(  sJ || _        y Nr-  )r%   r  rC   rL   s     r    r   zCryptosignAuthextra.pubkey
      =CJ"$444 DLr"   c                     | j                   S rG   )r  rH   s    r    r%  zCryptosignAuthextra.trustroot      ??"r"   c                 6    |t        |      dk(  sJ || _        y r3  )r%   r  r4  s     r    r%  zCryptosignAuthextra.trustroot      =CJ"$444#DOr"   c                     | j                   S rG   )r  rH   s    r    r   zCryptosignAuthextra.challenge  r7  r"   c                 6    |t        |      dk(  sJ || _        y 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 || _         y )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                 6    |t        |      dk(  sJ || _        y r<  )r%   r  r4  s     r    r   zCryptosignAuthextra.channel_id.  s     =CJ"$444$Dr"   c                     | j                   S rG   )r  rH   s    r    r&  zCryptosignAuthextra.realm3  s    ;;r"   c                 6    |t        |      dk(  sJ || _        y r3  )r%   r  r4  s     r    r&  zCryptosignAuthextra.realm7  s    =CJ"$444DKr"   c                     | j                   S rG   r  rH   s    r    r'  zCryptosignAuthextra.chain_id<      >>!r"   c                 $    ||dkD  sJ || _         y r?   rE  r4  s     r    r'  zCryptosignAuthextra.chain_id@      =EAI--"DNr"   c                     | j                   S rG   r  rH   s    r    r(  zCryptosignAuthextra.block_noE  rF  r"   c                 $    ||dkD  sJ || _         y 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                 6    |t        |      dk(  sJ || _        y r3  )r%   r   r4  s     r    r)  zCryptosignAuthextra.delegateR  s    =CJ"$444"DNr"   c                     | j                   S rG   )r!  rH   s    r    r*  zCryptosignAuthextra.seederW  r1  r"   c                 6    |t        |      dk(  sJ || _        y 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kD  sJ || _         y r?   rQ  r4  s     r    r+  zCryptosignAuthextra.bandwidthd  s    =EAI--#DOr"   c                     | j                   S rG   )r#  rH   s    r    r   zCryptosignAuthextra.signaturei  r7  r"   c                 6    |t        |      dk(  sJ || _        y )Nr/  )r%   r#  r4  s     r    r   zCryptosignAuthextra.signaturem  r9  r"   r   c                 Z   t               }| j                  dd       }|vt        |      t        k7  r#t	        dj                  t        |                  t        |      dk7  r#t	        dj                  t        |                  t        |      |_        | j                  dd       }|vt        |      t        k7  r#t	        dj                  t        |                  t        |      dk7  r#t	        dj                  t        |                  t        |      |_	        | j                  dd       }|Zt        |      t        k7  r#t	        d	j                  t        |                  |d
vrt	        dj                  |            ||_
        | j                  dd       }|vt        |      t        k7  r#t	        dj                  t        |                  t        |      dk7  r#t	        dj                  t        |                  t        |      |_        | j                  dd       }|t        |      t        k7  r#t	        dj                  t        |                  t        j                  |      s#t	        dj                  t        |                  t        |dd        |_        | j                  dd       }|t        |      t        k7  r#t	        dj                  t        |                  |j                  dd       }|<t        |      t         k7  r#t	        dj                  t        |                  ||_        |j                  dd       }	|	<t        |	      t         k7  r#t	        dj                  t        |	                  |	|_        |j                  dd       }
|
t        |
      t        k7  r#t	        dj                  t        |
                  t        j                  |
      s#t	        dj                  t        |
                  t        |
dd        |_        |j                  dd       }|t        |      t        k7  r#t	        dj                  t        |                  t        j                  |      s#t	        dj                  t        |                  t        |dd        |_        |j                  dd       }|t        |      t        k7  r#t	        d j                  t        |                  t        j                  |      s#t	        d!j                  t        |                  t        |dd        |_        |j                  d"d       }|<t        |      t         k7  r#t	        d#j                  t        |                  ||_        | j                  d$d       }|vt        |      t        k7  r#t	        d%j                  t        |                  t        |      d&k7  r#t	        d'j                  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  s   %'CXXh-F!<3&$%A%H%Hf%VWWv;&($%B%I%I#f+%VWW%fod3I$	?c)$%D%K%KDQZO%\]]y>V+$%E%L%LSQZ^%\]]!(!3"hh'8$?O*(C/$%J%Q%QRVWfRg%hii".8$%M%T%TUd%eff'6$,5J%
#s*$%E%L%LTR\M]%^__z?f,$%F%M%McR\o%^__")*"5d3I$	?c)$%X%_%_`den`o%pqq.44Y?$%f%m%mnrs|n}%~!(12!7((=$7K&$,$%F%M%MdS^N_%`aa&??:t<'H~,()i)p)pquv~q  *A  B  B$,CM&??:t<'H~,()i)p)pquv~q  *A  B  B$,CM#6$E{c)()d)k)klpqvlw)xyy288?()r)y)yz~  @E  {F  *G  H  H!(qr!3CJ&??:t<'H~,()g)n)nost|o})~288B()u)|)|  ~B  CK  ~L  *M  N  N$+HQRL$9CM$48%F|s*()e)l)lmqrxmy)z{{288@()s)z)z{  AG  |H  *I  J  J")&*"5CK'OOK>	(I#-()j)q)qrv  xA  sB  *C  D  D%.CNd3I$	?c)$%D%K%KDQZO%\]]y>V+$%E%L%LSQZ^%\]]!(!3Jr"   c                 ,   i }| j                   &t        | j                         j                         |d<   | j                  &t        | j                        j                         |d<   | j                  | j                  |d<   | j
                  &t        | j
                        j                         |d<   | j                  )dt        | j                        j                         z   |d<   i }| j                  | j                  |d<   | j                  | j                  |d<   | j                  )dt        | j                        j                         z   |d	<   | j                  )dt        | j                        j                         z   |d
<   | j                  )dt        | j                        j                         z   |d<   | j                  | j                  |d<   |r||d<   | j                  &t        | j                        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 < < >H*#*4??#;#B#B#DK $$0)-)>)>%&+$+D,<,<$=$D$D$FL!*#''$//*B*I*I*K#KK K~~)*...J'~~)*...J'{{&'+gdkk.B.I.I.K'KG$~~)*.1H1O1O1Q*QJ'||'(,wt||/D/K/K/M(MH%*+/??K(%0M"*#*4??#;#B#B#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    sJ   	
	  04266:37 37
 /3/3/315/30426'2	(%e_2	( (2	( '/sm2	( "*%	2	( !)2	( %UO2	(  (}2	(  (}2	(  (2	(  &e_!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	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     sP  6 
  %  7 7   D ) 9 ' $00* NNN?#"#L1 18P3 P5 P
aH(+V$L *Y * *bjknbo *ty *Xe ( u <CW CWJ NM*}f }~	 NNabe w	  Ns   C4 4C>=C>