ó
    ð›‘h)  ã                   ód  • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r
  SS/r S SKJrJrJr  S S	KJrJrJr  S S
KJr  S SKJr  Sr\R3                  SS/5        \(       aC  \ " S S\5      5       r\ " S S\5      5       r\ " S S\5      5       r\R>                  " \5        gg! \ a    Sr NUf = f)é    )Úpublic)ÚIPayloadCodec)ÚEncodedPayload)Ú_dumps)Ú_loadsÚHAS_CRYPTOBOXr   )ÚBase64EncoderÚ
RawEncoderÚ
HexEncoder)Ú
PrivateKeyÚ	PublicKeyÚBox)Úrandom)Ú
StringTrieTÚKeyÚKeyRingFc                   ó"   • \ rS rSrSrSS jrSrg)r   é6   z”
Holds originator and responder keys for an URI.

The originator is either a caller or a publisher. The responder is either a callee or subscriber.
Nc                 ót  • U(       a  [        U[        S9U l        OS U l        U R                  (       a0  U R                  R                  U l        Ub  X R                  :X  d   eO[        U[        S9U l        U(       a  [        U[        S9U l        OS U l        U R                  (       a0  U R                  R                  U l        Ub  X@R                  :X  d   eO[        U[        S9U l        U R                  (       a7  U R                  (       a&  [        U R                  U R                  5      U l	        OS U l	        U R                  (       a7  U R                  (       a&  [        U R                  U R                  5      U l
        OS U l
        U R                  (       d  U R                  (       d  [        S5      eg g )N©ÚencoderzDinsufficient keys provided for at least originator or responder role)r   r	   Úoriginator_privÚ
public_keyÚoriginator_pubr   Úresponder_privÚresponder_pubr   Úoriginator_boxÚresponder_boxÚ	Exception)Úselfr   r   r   r   s        Ú[C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\autobahn/wamp/cryptobox.pyÚ__init__ÚKey.__init__>   sQ  € æÜ'1°/Ì=Ñ'Y�Õ$à'+�Ô$à×#×#Ø&*×&:Ñ&:×&EÑ&E�Ô#Ø%Ñ-°×CVÑCVÓ1VÐWÐVøä&/°ÌÑ&V�Ô#ö Ü&0°ÌÑ&W�Õ#à&*�Ô#à×"×"Ø%)×%8Ñ%8×%CÑ%C�Ô"Ø$Ñ,°×ASÑASÓ0SÐTÐSøä%.¨}ÄmÑ%T�Ô"ð ×#×#¨×(:×(:Ü&)¨$×*>Ñ*>À×@RÑ@RÓ&S�Õ#à&*�Ô#ð ×"×" t×':×':Ü%(¨×)<Ñ)<¸d×>QÑ>QÓ%R�Õ"à%)�Ô"à×'×'¨4×+=×+=ÜÐ fÓgÐgð ,>Ð'ó    )r   r   r   r   r   r   )NNNN©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r"   Ú__static_attributes__© r$   r!   r   r   6   s   † ñ	÷.	hr$   c                   ó"   • \ rS rSrSrSS jrSrg)ÚSymKeyén   z#
Holds a symmetric key for an URI.
Nc                 ó   • g ©Nr,   )r    Úraws     r!   r"   ÚSymKey.__init__s   s   € Ør$   r,   r1   r%   r,   r$   r!   r.   r.   n   s   † ñ	÷	r$   r.   c                   óš   • \ rS rSrSr\SS j5       r\S 5       r\S 5       r\S 5       r	\S 5       r
SS	 jr\SS
 j5       r\S 5       rSrg)r   év   zé
A keyring holds (cryptobox) public-private key pairs for use with WAMP-cryptobox payload
encryption. The keyring can be set on a WAMP session and then transparently will get used
for encrypting and decrypting WAMP message payloads.
Nc                 óÈ   • Ub.  [        U[        5      (       d  [        U[        :H  5      (       d   e[	        5       U l        [        U5      [        :X  a	  [        XS9nXl        g)zR

Create a new key ring to hold public and private keys mapped from an URI space.
N©r   r   )Ú
isinstancer   ÚtypeÚstrr   Ú_uri_to_keyÚ_default_key)r    Údefault_keys     r!   r"   ÚKeyRing.__init__~   sS   € ð Ñ&¬*°[Ä#×*FÑ*FÌ$È{Ô^aÑOa×JbÑJbÐcÐbÜ)›|ˆDÔÜ�KÓ ¤CÓ'Ü!°+ÑZ�Ø +Õr$   c                 óÐ   • [         R                  " 5       nUR                  [        S9nUR                  R                  [        S9nUR                  S5      UR                  S5      4$ )z`
Generate a new private key and return a pair with the base64 encodings
of (priv_key, pub_key).
r   Úascii)r   ÚgenerateÚencoder	   r   Údecode©r    ÚkeyÚpriv_keyÚpub_keys       r!   Úgenerate_keyÚKeyRing.generate_keyŠ   sV   € ô ×%Ò%Ó'ˆCØ—z‘z¬-�zÐ8ˆHØ—n‘n×+Ñ+´MÐ+ÐBˆGØ—?‘? 7Ó+¨W¯^©^¸GÓ-DÐDÐDr$   c                 óÐ   • [         R                  " 5       nUR                  [        S9nUR                  R                  [        S9nUR                  S5      UR                  S5      4$ )z]
Generate a new private key and return a pair with the hex encodings
of (priv_key, pub_key).
r   r@   )r   rA   rB   r   r   rC   rD   s       r!   Úgenerate_key_hexÚKeyRing.generate_key_hex•   sV   € ô ×%Ò%Ó'ˆCØ—z‘z¬*�zÐ5ˆHØ—n‘n×+Ñ+´JÐ+Ð?ˆGØ—?‘? 7Ó+¨W¯^©^¸GÓ-DÐDÐDr$   c                 ó8  • [        U5      [        :X  d   eUb*  [        U[        5      (       d  [        U5      [        :X  d   e[        U5      [        :X  a	  [        X"S9nUS:X  a  X l        gUc  XR
                  ;   a  U R
                  U	 ggX R
                  U'   g)z 
Add a key set for a given URI.
Nr7   Ú )r9   r:   r8   r   r<   r;   )r    ÚurirE   s      r!   Úset_keyÚKeyRing.set_key    s�   € ô
 ˜“9¤Ó#Ð$Ð#Ø‘;¤*¨S´#×"6Ñ"6¼$¸s»)ÄsÓ:JÐKÐJÜ�C‹yœCÓÜ¨#ÑB�Ø�b‹yØ$'Õ!à‘;Ø×.Ñ.Ó.Ø ×,Ñ,¨SÑ1ð /ð -0×$Ñ$ SÒ)r$   c                 óÂ   • [        U5      [        :X  d   eXR                  ;   a  U R                  U   R                  5         g U R                  U   R                  5         g r1   )r9   r:   r;   Úrotate)r    rO   s     r!   Ú
rotate_keyÚKeyRing.rotate_key²   sN   € ä˜“9¤Ó#Ð$Ð#Ø×&Ñ&Ó&Ø× Ñ  Ñ%×,Ñ,Õ.à× Ñ  Ñ%×,Ñ,Õ.r$   c                 ó  •  U(       a  U R                   U   nOU R                   R                  U5      n U(       a  UR                  $ UR
                  $ ! [         a"    U R                  (       a  U R                  n NH g f = fr1   )r;   Úlongest_prefix_valueÚKeyErrorr<   r   r   )r    Úis_originatingrO   Úmatch_exactrE   s        r!   Ú_get_boxÚKeyRing._get_boxº   su   € ð	 ÞØ×*Ñ*¨3Ñ/‘Cà×*Ñ*×?Ñ?ÀÓD‘Cö Ø×)Ñ)Ð)à×(Ñ(Ð(øô ó  Ø×$×$Ø×+Ñ+’Cáð	 ús   ‚A ™A Á'B Á?B c                 óÀ  • [        U5      [        :X  d   e[        U5      [        :X  d   eUb  [        U5      [        [        4;   d   eUb  [        U5      [
        :X  d   eU R                  X5      nU(       d  gUUUS.n[        [        R                  5      n[        U5      R                  S5      nUR                  X‡[        S9n	[        U	5      n
Sn[        U
SSUS9$ )zz
Encrypt the given WAMP URI, args and kwargs into an EncodedPayload instance, or None
if the URI should not be encrypted.
N)rO   ÚargsÚkwargsÚutf8r   Ú	cryptoboxÚjson)Úenc_key)r9   Úboolr:   ÚlistÚtupleÚdictr[   r   r   Ú
NONCE_SIZEÚ_json_dumpsrB   Úencryptr
   Úbytesr   )r    rY   rO   r^   r_   ÚboxÚpayloadÚnonceÚpayload_serÚpayload_encrÚpayload_bytesÚpayload_keys               r!   rB   ÚKeyRing.encodeË   sÚ   € ô ˜Ó'¬4Ó/Ð0Ð/Ü˜“9¤Ó#Ð$Ð#Ø‘<¤4¨£:´$¼°Ó#>Ð?Ð>Ø‘>¤T¨&£\´TÓ%9Ð:Ð9à—-‘- Ó4ˆCæð ð ØØ ñˆGô
 œ3Ÿ>™>Ó*ˆEÜ% gÓ.×5Ñ5°fÓ=ˆKàŸ;™; {Ä:˜;ÐNˆLô
 " ,Ó/ˆMØˆKä! -°¸fÈkÑZÐZr$   c                 ó  • [        U5      [        :X  d   e[        U[        5      (       d   eUR                  S:X  d   eU R                  X5      nU(       d  [        S5      eUR                  UR                  [        S9nUR                  S:w  a$  [        SR                  UR                  5      5      e[        UR                  S5      5      nUR                  SS5      nUR                  S	S5      nUR                  S
S5      nX'U4$ )zU
Decrypt the given WAMP URI and EncodedPayload into a tuple ``(uri, args, kwargs)``.
ra   z/received encrypted payload, but can't find key!r   rb   zIreceived encrypted payload, but don't know how to process serializer '{}'r`   rO   Nr^   r_   )r9   r:   r8   r   Úenc_algor[   r   Údecryptrm   r
   Úenc_serializerÚformatÚ_json_loadsrC   Úget)	r    rY   rO   Úencoded_payloadrl   ro   rm   r^   r_   s	            r!   rC   ÚKeyRing.decodeï   s  € ô
 ˜“9¤Ó#Ð$Ð#Ü˜o¬~×>Ñ>Ð?Ð>Ø"×+Ñ+¨{Ó:Ð;Ð:à—-‘- Ó4ˆCæÜÐ QÓRÐRàŸ+™+ o×&=Ñ&=Äz˜+ÐRˆKà×-Ñ-°Ó7ÜÐ k× rÑ rð  tC÷  tRñ  tRó  !Só  Tð  Tä! +×"4Ñ"4°VÓ"<Ó=ˆGà—+‘+˜e TÓ*ˆCØ—;‘;˜v tÓ,ˆDØ—[‘[ ¨4Ó0ˆFà˜fÐ$Ð$r$   )r<   r;   r1   )F)NN)r&   r'   r(   r)   r*   r   r"   rH   rK   rP   rT   r[   rB   rC   r+   r,   r$   r!   r   r   v   sŸ   † ñ	ð 
ó		,ó 
ð		,ð 
ñ	Eó 
ð	Eð 
ñ	Eó 
ð	Eð 
ñ	0ó 
ð	0ð" 
ñ	/ó 
ð	/ô	)ð" 
ó!	[ó 
ð!	[ðF 
ñ	%ó 
ó	%r$   N) Úautobahn.utilr   Úautobahn.wamp.interfacesr   Úautobahn.wamp.typesr   Úautobahn.wamp.serializerr   ri   r   ry   Ú__all__Únacl.encodingr	   r
   r   Únacl.publicr   r   r   Ú
nacl.utilsr   Úpytrier   r   ÚextendÚImportErrorÚobjectr   r.   r   Úregisterr,   r$   r!   Ú<module>rŠ      sÜ   ðõ8 !Ý 2Ý .Ý :Ý :ð Øð€ð

'çCÑCß6Ñ6Ý!Ý!ð €MØ‡N�N�E˜9Ð%Ô&ö àô5hˆfó 5hó ð5hðn ô�ó ó ðð ôQ%�&ó Q%ó ðQ%ðj ×Ò˜7Õ#ðq øð ó Ø‚Mðús   ¤ B$ Â$B/Â.B/