§
    Ìtºf)  ã                   ó†  — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z
 ddgZ	 d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZ dZe                     ddg¦  «         n# e$ r dZY nw xY werTe G d„ de¦  «        ¦   «         Ze G d„ de¦  «        ¦   «         Ze G d„ de¦  «        ¦   «         Z ej        e¦  «         dS dS )é    )Úpublic)ÚIPayloadCodec)ÚEncodedPayload)Ú_dumps)Ú_loadsÚHAS_CRYPTOBOXr   )ÚBase64EncoderÚ
RawEncoderÚ
HexEncoder)Ú
PrivateKeyÚ	PublicKeyÚBox)Úrandom)Ú
StringTrieTÚKeyÚKeyRingFc                   ó   — e Zd ZdZdd„ZdS )r   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                 ó¸  — |rt          |t          ¬¦  «        | _        nd | _        | j        r!| j        j        | _        |�|| j        k    sJ ‚nt          |t          ¬¦  «        | _        |rt          |t          ¬¦  «        | _        nd | _        | j        r!| j        j        | _        |�|| j        k    sJ ‚nt          |t          ¬¦  «        | _        | j        r'| j        r t          | j        | j        ¦  «        | _	        nd | _	        | j        r'| j        r t          | j        | j        ¦  «        | _
        nd | _
        | j	        s| j
        st          d¦  «        ‚d S d S )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        úV/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/wamp/cryptobox.pyÚ__init__zKey.__init__>   s˜  € àð ,Ý'1°/Í=Ð'YÑ'YÔ'Y�Ô$Ð$à'+�Ô$àÔ#ð WØ&*Ô&:Ô&E�Ô#Ø%Ð-°À4ÔCVÒ1VÐ1VÐ1VÐ1Vøå&/°ÍÐ&VÑ&VÔ&V�Ô#ð ð +Ý&0°ÍÐ&WÑ&WÔ&W�Ô#Ð#à&*�Ô#àÔ"ð UØ%)Ô%8Ô%C�Ô"Ø$Ð,°ÀÔASÒ0SÐ0SÐ0SÐ0Søå%.¨}ÅmÐ%TÑ%TÔ%T�Ô"ð Ô#ð +¨Ô(:ð +Ý&)¨$Ô*>ÀÔ@RÑ&SÔ&S�Ô#Ð#à&*�Ô#ð Ô"ð * tÔ':ð *Ý%(¨Ô)<¸dÔ>QÑ%RÔ%R�Ô"Ð"à%)�Ô"àÔ'ð h¨4Ô+=ð hÝÐ fÑgÔgÐgðhð hð hð hó    )NNNN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   © r"   r    r   r   6   s8   € € € € € ð	ð 	ð.	hð .	hð .	hð .	hð .	hð .	hr"   c                   ó   — e Zd ZdZdd„ZdS )ÚSymKeyz3
        Holds a symmetric key for an URI.
        Nc                 ó   — d S ©Nr(   )r   Úraws     r    r!   zSymKey.__init__s   s   € ØˆDr"   r,   r#   r(   r"   r    r*   r*   n   s2   € € € € € ð	ð 	ð	ð 	ð 	ð 	ð 	ð 	r"   r*   c                   ó¸   — e Zd ZdZedd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	dd	„Z
edd
„¦   «         Zed„ ¦   «         ZdS )r   a	  
        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                 óî   — |�/t          |t          ¦  «        st          |t          k    ¦  «        sJ ‚t	          ¦   «         | _        t          |¦  «        t          k    rt          ||¬¦  «        }|| _        dS )zj

            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!   zKeyRing.__init__~   sq   € ð Ð&­*°[Å#Ñ*FÔ*FÐ&Í$È{Õ^aÒOaÑJbÔJbÐ&Ð&Ð&Ý)™|œ|ˆDÔÝ�KÑ Ô ¥CÒ'Ð'Ý!°+ÈkÐZÑZÔZ�Ø +ˆDÔÐÐr"   c                 óò   — t          j        ¦   «         }|                     t          ¬¦  «        }|j                             t          ¬¦  «        }|                     d¦  «        |                     d¦  «        fS )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_keyzKeyRing.generate_keyŠ   s`   € õ Ô%Ñ'Ô'ˆCØ—z’z­-�zÑ8Ô8ˆHØ”n×+Ò+µMÐ+ÑBÔBˆGØ—?’? 7Ñ+Ô+¨W¯^ª^¸GÑ-DÔ-DÐDÐDr"   c                 óò   — t          j        ¦   «         }|                     t          ¬¦  «        }|j                             t          ¬¦  «        }|                     d¦  «        |                     d¦  «        fS )z�
            Generate a new private key and return a pair with the hex encodings
            of (priv_key, pub_key).
            r   r8   )r   r9   r:   r   r   r;   r<   s       r    Úgenerate_key_hexzKeyRing.generate_key_hex•   s`   € õ Ô%Ñ'Ô'ˆCØ—z’z­*�zÑ5Ô5ˆHØ”n×+Ò+µJÐ+Ñ?Ô?ˆGØ—?’? 7Ñ+Ô+¨W¯^ª^¸GÑ-DÔ-DÐDÐDr"   c                 óN  — t          |¦  «        t          k    sJ ‚|�/t          |t          ¦  «        st          |¦  «        t          k    sJ ‚t          |¦  «        t          k    rt          ||¬¦  «        }|dk    r	|| _        dS |€|| j        v r
| j        |= dS dS || j        |<   dS )z8
            Add a key set for a given URI.
            Nr0   Ú )r2   r3   r1   r   r5   r4   )r   Úurir=   s      r    Úset_keyzKeyRing.set_key    s¿   € õ
 ˜‘9”9¥Ò#Ð#Ð#Ð#Ø�;¥*¨Sµ#Ñ"6Ô"6�;½$¸s¹)¼)ÅsÒ:JÐ:JÐ:JÐ:JÝ�C‰yŒy�CÒÐÝ¨#¸cÐBÑBÔB�Ø�bŠyˆyØ$'�Ô!Ð!Ð!à�;Ø˜dÔ.Ð.Ð.Ø Ô,¨SÐ1Ð1Ð1ð /Ð.ð -0�DÔ$ SÑ)Ð)Ð)r"   c                 óÌ   — t          |¦  «        t          k    sJ ‚|| j        v r!| j        |                              ¦   «          d S | j        |                              ¦   «          d S r,   )r2   r3   r4   Úrotate)r   rE   s     r    Ú
rotate_keyzKeyRing.rotate_key²   sg   € å˜‘9”9¥Ò#Ð#Ð#Ð#Ø�dÔ&Ð&Ð&ØÔ  Ô%×,Ò,Ñ.Ô.Ð.Ð.Ð.àÔ  Ô%×,Ò,Ñ.Ô.Ð.Ð.Ð.r"   Fc                 ó¾   — 	 |r| j         |         }n| j                              |¦  «        }n"# t          $ r | j        r| j        }nY d S Y nw xY w|r|j        S |j        S r,   )r4   Úlongest_prefix_valueÚKeyErrorr5   r   r   )r   Úis_originatingrE   Úmatch_exactr=   s        r    Ú_get_boxzKeyRing._get_boxº   s�   € ð	 Øð EØÔ*¨3Ô/�C�CàÔ*×?Ò?ÀÑDÔD�CøøÝð  ð  ð  ØÔ$ð  ØÔ+�C�Cà˜4˜4ð �Cð øøøð ð )ØÔ)Ð)àÔ(Ð(s   ‚*- ­AÁAc                 ó  — t          |¦  «        t          k    sJ ‚t          |¦  «        t          k    sJ ‚|�t          |¦  «        t          t          fv sJ ‚|�t          |¦  «        t
          k    sJ ‚|                      ||¦  «        }|sdS |||dœ}t          t          j	        ¦  «        }t          |¦  «                             d¦  «        }|                     ||t          ¬¦  «        }	t          |	¦  «        }
d}t          |
dd|¬¦  «        S )zž
            Encrypt the given WAMP URI, args and kwargs into an EncodedPayload instance, or None
            if the URI should not be encrypted.
            N)rE   ÚargsÚkwargsÚutf8r   Ú	cryptoboxÚjson)Úenc_key)r2   Úboolr3   ÚlistÚtupleÚdictrO   r   r   Ú
NONCE_SIZEÚ_json_dumpsr:   Úencryptr
   Úbytesr   )r   rM   rE   rQ   rR   ÚboxÚpayloadÚnonceÚpayload_serÚpayload_encrÚpayload_bytesÚpayload_keys               r    r:   zKeyRing.encodeË   s  € õ ˜Ñ'Ô'­4Ò/Ð/Ð/Ð/Ý˜‘9”9¥Ò#Ð#Ð#Ð#Ø�<¥4¨¡:¤:µ$½°Ð#>Ð#>Ð#>Ð#>Ø�>¥T¨&¡\¤\µTÒ%9Ð%9Ð%9Ð%9à—-’- °Ñ4Ô4ˆCàð ð �tð ØØ ðð ˆGõ
 �3œ>Ñ*Ô*ˆEÝ% gÑ.Ô.×5Ò5°fÑ=Ô=ˆKàŸ;š; {°EÅ:˜;ÑNÔNˆLõ
 " ,Ñ/Ô/ˆMØˆKå! -°¸fÈkÐZÑZÔZÐZr"   c                 óD  — t          |¦  «        t          k    sJ ‚t          |t          ¦  «        sJ ‚|j        dk    sJ ‚|                      ||¦  «        }|st          d¦  «        ‚|                     |j        t          ¬¦  «        }|j
        dk    r't          d                     |j
        ¦  «        ¦  «        ‚t          |                     d¦  «        ¦  «        }|                     dd¦  «        }|                     d	d¦  «        }|                     d
d¦  «        }|||fS )zm
            Decrypt the given WAMP URI and EncodedPayload into a tuple ``(uri, args, kwargs)``.
            rT   z/received encrypted payload, but can't find key!r   rU   zIreceived encrypted payload, but don't know how to process serializer '{}'rS   rE   NrQ   rR   )r2   r3   r1   r   Úenc_algorO   r   Údecryptr`   r
   Úenc_serializerÚformatÚ_json_loadsr;   Úget)	r   rM   rE   Úencoded_payloadr_   rb   r`   rQ   rR   s	            r    r;   zKeyRing.decodeï   s/  € õ
 ˜‘9”9¥Ò#Ð#Ð#Ð#Ý˜o­~Ñ>Ô>Ð?Ð?Ð?Ø"Ô+¨{Ò:Ð:Ð:Ð:à—-’- °Ñ4Ô4ˆCàð SÝÐ QÑRÔRÐRàŸ+š+ oÔ&=Åz˜+ÑRÔRˆKàÔ-°Ò7Ð7ÝÐ k× rÒ rð  tCô  tRñ  !Sô  !Sñ  Tô  Tð  Tå! +×"4Ò"4°VÑ"<Ô"<Ñ=Ô=ˆGà—+’+˜e TÑ*Ô*ˆCØ—;’;˜v tÑ,Ô,ˆDØ—[’[ ¨4Ñ0Ô0ˆFà˜˜fÐ$Ð$r"   r,   )F)NN)r$   r%   r&   r'   r   r!   r@   rB   rF   rI   rO   r:   r;   r(   r"   r    r   r   v   s  € € € € € ð	ð 	ð 
ð		,ð 		,ð 		,ñ 
Œð		,ð 
ð	Eð 	Eñ 
Œð	Eð 
ð	Eð 	Eñ 
Œð	Eð 
ð	0ð 	0ñ 
Œð	0ð" 
ð	/ð 	/ñ 
Œð	/ð	)ð 	)ð 	)ð 	)ð" 
ð!	[ð !	[ð !	[ñ 
Œð!	[ðF 
ð	%ð 	%ñ 
Œð	%ð 	%ð 	%r"   N) Úautobahn.utilr   Úautobahn.wamp.interfacesr   Úautobahn.wamp.typesr   Úautobahn.wamp.serializerr   r\   r   rk   Ú__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Ð 2Ð 2Ð 2Ð 2Ð 2Ø .Ð .Ð .Ð .Ð .Ð .Ø :Ð :Ð :Ð :Ð :Ð :Ø :Ð :Ð :Ð :Ð :Ð :ð Øð€ð

'àCÐCÐCÐCÐCÐCÐCÐCÐCÐCØ6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø!Ð!Ð!Ð!Ð!Ð!Ø!Ð!Ð!Ð!Ð!Ð!ð €MØ‡N‚N�E˜9Ð%Ñ&Ô&Ð&Ð&øð	 ð ð ð Ø€M€M€Mðøøøð ð X$àð5hð 5hð 5hð 5hð 5hˆfñ 5hô 5hñ „Vð5hðn ðð ð ð ð �ñ ô ñ „Vðð ðQ%ð Q%ð Q%ð Q%ð Q%�&ñ Q%ô Q%ñ „VðQ%ðj €MÔ˜7Ñ#Ô#Ð#Ð#Ð#ðqX$ð X$s   ¤ A ÁA(Á'A(