§
    Ìtºf;5  ã            
       óL  — d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ 	 d dlmZ n# e$ r  ed¦  «        ZY nw xY w	 d dl
mZ d	Zn# e$ r d
Z ed¦  «        ZY nw xY w	 d dlmZ d dlmZ d dlmZ d	Zn# e$ r d
ZY nw xY wdZdd„Zdeeef         de fd„Z!esdde"de#dee          dee$         fd„Z%ndde"de#dee          dee$         fd„Z%esde"deee ef                  fd„Z&ndedeee ef                  fd„Z&deeef         de#defd„Z'dS )é    N)ÚOptionalÚUnionÚDictÚAny)ÚDeferred)ÚIPv4AddressÚUNIXAddress)Ú
ITransportÚIProcessTransport)ÚTransportDetails)ÚPipeAddress)ÚIPv6AddressTF)ÚISSLTransport)ÚTLSMemoryBIOProtocol)Ú
Connection)ÚsleepÚpeer2strÚtransport_channel_idÚextract_peer_certificateÚcreate_transport_detailsc                 ój   — |sddl m} t          ¦   «         }|                     | |j        d¦  «         |S )aD  
    Inline sleep for use in co-routines (Twisted ``inlineCallback`` decorated functions).

    .. seealso::
       * `twisted.internet.defer.inlineCallbacks <http://twistedmatrix.com/documents/current/api/twisted.internet.defer.html#inlineCallbacks>`__
       * `twisted.internet.interfaces.IReactorTime <http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IReactorTime.html>`__

    :param delay: Time to sleep in seconds.
    :type delay: float
    :param reactor: The Twisted reactor to use.
    :type reactor: None or provider of ``IReactorTime``.
    r   )ÚreactorN)Útwisted.internetr   r   Ú	callLaterÚcallback)Údelayr   Úds      úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/twisted/util.pyr   r   D   sF   € ð ð -Ø,Ð,Ð,Ð,Ð,Ð,Ý‰
Œ
€AØ×Ò�e˜QœZ¨Ñ.Ô.Ð.Ø€Hó    Ú	transportÚreturnc                 ó”  — t          j        | ¦  «        rd                     | j        ¦  «        }�nt	          j        | ¦  «        �r |                      ¦   «         }t          |t          ¦  «        r!d                     |j        |j	        ¦  «        }n¸t          r6t          |t          ¦  «        r!d                     |j        |j	        ¦  «        }n{t          |t          ¦  «        r%|j        rd                     |j        ¦  «        }nDd}nAt          |t          ¦  «        r'd                     t          j        ¦   «         ¦  «        }nd}nd}|S )a•  
    Return a *peer descriptor* given a Twisted transport, for example:

    * ``tcp4:127.0.0.1:52914``: a TCPv4 socket
    * ``unix:/tmp/server.sock``: a Unix domain socket
    * ``process:142092``: a Pipe originating from a spawning (parent) process
    * ``pipe``: a Pipe terminating in a spawned (child) process

    :returns: Returns a string representation of the peer of the Twisted transport.
    z
process:{}ztcp4:{0}:{1}ztcp6:{0}:{1}zunix:{0}Úunixzprocess:{0}Úunknown)r   Ú
providedByÚformatÚpidr
   ÚgetPeerÚ
isinstancer   ÚhostÚportÚ	_HAS_IPV6r   r	   Únamer   ÚosÚgetppid)r    ÚresÚaddrs      r   r   r   X   s1  € õ Ô# IÑ.Ô.ð à×!Ò! )¤-Ñ0Ô0ˆ‰Ý	Ô	˜yÑ	)Ô	)ñ ØJS×J[ÒJ[ÑJ]ÔJ]ˆÝ�d�KÑ(Ô(ð 	Ø ×'Ò'¨¬	°4´9Ñ=Ô=ˆCˆCÝð 	�: d­KÑ8Ô8ð 	Ø ×'Ò'¨¬	°4´9Ñ=Ô=ˆCˆCÝ˜�kÑ*Ô*ð 	ØŒyð Ø ×'Ò'¨¬	Ñ2Ô2��à��Ý˜�kÑ*Ô*ð 	ð  ×&Ò&¥r¤z¡|¤|Ñ4Ô4ˆCˆCð ˆCˆCð ˆØ€Jr   Ú	is_serverÚchannel_id_typec                 óN   — |€dS t          d                     |¦  «        ¦  «        ‚)Nó                                    zUcannot determine TLS channel ID of type "{}" when TLS is not available on this system)ÚRuntimeErrorr&   )r    r2   r3   s      r   r   r   €   s>   € ØÐ"Ø�<åÐv×}Ò}ð  Nñ   Oô   Oñ  Pô  Pð  Pr   c                 ól  — |€dS |dvr"t          d                     |¦  «        ¦  «        ‚t          | t          ¦  «        s0t          d                     |t	          | ¦  «        ¦  «        ¦  «        ‚|                      ¦   «         }|rt          |t          ¦  «        sJ ‚d}|dk    ro||k    r|                     ¦   «         }n|                     ¦   «         }|€dS t          j
        ¦   «         }|                     |¦  «         |                     ¦   «         S t          d                     |¦  «        ¦  «        ‚)	a(  
        Return TLS channel ID of WAMP transport of the given TLS channel ID type.

        Application-layer user authentication protocols are vulnerable to generic credential forwarding attacks,
        where an authentication credential sent by a client C to a server M may then be used by M to impersonate C at
        another server S.
        To prevent such credential forwarding attacks, modern authentication protocols rely on channel bindings.
        For example, WAMP-cryptosign can use the tls-unique channel identifier provided by the TLS layer to strongly
        bind authentication credentials to the underlying channel, so that a credential received on one TLS channel
        cannot be forwarded on another.

        :param transport: The Twisted TLS transport to extract the TLS channel ID from. If the transport isn't
            TLS based, and non-empty ``channel_id_type`` is requested, ``None`` will be returned. If the transport
            is indeed TLS based, an empty ``channel_id_type`` of ``None`` is requested, 32 NUL bytes will be returned.
        :param is_server: Flag indicating that the transport is a server transport.
        :param channel_id_type: TLS channel ID type, if set currently only ``"tls-unique"`` is supported.
        :returns: The TLS channel ID (32 bytes).
        Nr5   )ú
tls-uniquez*invalid TLS channel ID type "{}" requestedz[cannot determine TLS channel ID of type "{}" when TLS is not available on this transport {}Tr8   z7should not arrive here (unhandled channel_id_type "{}"))r6   r&   r)   r   ÚtypeÚ	getHandler   Úget_peer_finishedÚget_finishedÚhashlibÚsha256ÚupdateÚdigestÚNotImplementedError)r    r2   r3   Ú
connectionÚis_not_resumedÚtls_finished_msgÚms          r   r   r   †   sJ  € ð& Ð"Ø�<à .Ð0Ð0ÝÐK×RÒRÐSbÑcÔcÑdÔdÐdå˜)Õ%9Ñ:Ô:ð 	7ÝØm×tÒtØ#¥T¨)¡_¤_ñ6ô 6ñ7ô 7ð 7ð "+×!4Ò!4Ñ!6Ô!6ˆ
ØÐ@�j¨µZÑ@Ô@Ð@Ð@Ð@ð ˆà˜lÒ*Ð*à˜NÒ*Ð*ð $.×#?Ò#?Ñ#AÔ#AÐ Ð ð $.×#:Ò#:Ñ#<Ô#<Ð àÐ'ð
 $�|å”NÑ$Ô$�Ø—’Ð)Ñ*Ô*Ð*Ø—x’x‘z”zÐ!å%Ð&_×&fÒ&fÐgvÑ&wÔ&wÑxÔxÐxr   c                 ó   — dS )z~
        Dummy when no TLS is available.

        :param transport: Ignored.
        :return: Always return ``None``.
        N© )r    s    r   r   r   È   s	   € ð ˆtr   c                 ó†  — t          j        | ¦  «        rt          | d¦  «        sdS |                      ¦   «         }|�rd„ }d                      ||                     d¦  «        ¦  «        ¦  «                             ¦   «         d                      ||                     d¦  «        ¦  «        ¦  «                             ¦   «         d                      ||                     d¦  «        ¦  «        ¦  «                             ¦   «         t          |                     ¦   «         ¦  «         || 	                    ¦   «         ¦  «        t          |                     ¦   «         ¦  «         ||                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «         ||                     ¦   «         ¦  «         ||                     ¦   «         ¦  «        g dœ}t!          |                     ¦   «         ¦  «        D ]˜}|                     |¦  «        }d                      ||                     ¦   «         ¦  «        ¦  «        d                      ||¦  «        ¦  «        |                     ¦   «         d	k    d
œ}|d                              |¦  «         Œ™d|                     ¦   «         fd|                     ¦   «         ffD ]}\  }}i ||<   |                     ¦   «         D ]^\  }	}
 ||	¦  «        }	 ||
¦  «        }
d                     |
¦  «        ||         d                     |	¦  «                             ¦   «         <   Œ_Œ~|S dS )a«  
        Extract TLS x509 client certificate information from a Twisted stream transport, and
        return a dict with x509 TLS client certificate information (if the client provided a
        TLS client certificate).

        :param transport: The secure transport from which to extract the peer certificate (if present).
        :returns: If the peer provided a certificate, the parsed certificate information set.
        ÚgetPeerCertificateNc                 óZ   — t          | t          ¦  «        r|                      d¦  «        S | S )NÚutf8)r)   ÚbytesÚdecode)Ú_values    r   Úmaybe_bytesz-extract_peer_certificate.<locals>.maybe_bytesá   s+   € Ý˜f¥eÑ,Ô,ð "Ø!Ÿ=š=¨Ñ0Ô0Ð0à!�Mr   z{}Úmd5Úsha1r>   )rP   rQ   r>   ÚexpiredÚhashÚserialÚsignature_algorithmÚversionÚ
not_beforeÚ	not_afterÚ
extensionsr   )r-   ÚvalueÚcriticalrY   ÚsubjectÚissuer)r   r%   ÚhasattrrI   r&   r@   ÚupperÚboolÚhas_expiredÚsubject_name_hashÚintÚget_serial_numberÚget_signature_algorithmÚget_versionÚget_notBeforeÚget_notAfterÚrangeÚget_extension_countÚget_extensionÚget_short_nameÚget_criticalÚappendÚget_subjectÚ
get_issuerÚget_componentsÚlower)r    ÚcertrO   ÚresultÚiÚextÚext_infoÚentityr-   ÚkeyrZ   s              r   r   r   Ñ   s&  € õ Ô(¨Ñ3Ô3ð 	½À	ÐK_Ñ8`Ô8`ð 	Ø�4à×+Ò+Ñ-Ô-ˆØñ &	ð"ð "ð "ð —{’{ ; ;¨t¯{ª{¸5Ñ/AÔ/AÑ#BÔ#BÑCÔC×IÒIÑKÔKØŸš K K°·²¸FÑ0CÔ0CÑ$DÔ$DÑEÔE×KÒKÑMÔMØŸ+š+ k k°$·+²+¸hÑ2GÔ2GÑ&HÔ&HÑIÔI×OÒOÑQÔQÝ × 0Ò 0Ñ 2Ô 2Ñ3Ô3Ø#˜ D×$:Ò$:Ñ$<Ô$<Ñ=Ô=Ý˜d×4Ò4Ñ6Ô6Ñ7Ô7Ø'2 {°4×3OÒ3OÑ3QÔ3QÑ'RÔ'RÝ˜t×/Ò/Ñ1Ô1Ñ2Ô2Ø)˜k¨$×*<Ò*<Ñ*>Ô*>Ñ?Ô?Ø(˜[¨×):Ò):Ñ)<Ô)<Ñ=Ô=Ø ðð ˆFõ ˜4×3Ò3Ñ5Ô5Ñ6Ô6ð 6ð 6�Ø×(Ò(¨Ñ+Ô+�à ŸKšK¨¨°C×4FÒ4FÑ4HÔ4HÑ(IÔ(IÑJÔJØ!Ÿ[š[¨¨°SÑ)9Ô)9Ñ:Ô:Ø #× 0Ò 0Ñ 2Ô 2°aÒ 7ðð �ð
 �|Ô$×+Ò+¨HÑ5Ô5Ð5Ð5à"+¨T×-=Ò-=Ñ-?Ô-?Ð!@À8ÈTÏ_Ê_ÑM^ÔM^ÐB_Ð `ð Rð R‘�˜Ø!#��v‘Ø"&×"5Ò"5Ñ"7Ô"7ð Rð R‘J�C˜Ø%˜+ cÑ*Ô*�CØ'˜K¨Ñ.Ô.�EØ?C¿{º{È5Ñ?QÔ?Q�F˜6”N 4§;¢;¨sÑ#3Ô#3×#9Ò#9Ñ#;Ô#;Ñ<Ð<ðRð
 ˆMðM&	ð &	r   c                 óÌ  — t          | ¦  «        }t          j        ¦   «         }t          t          d¦  «        rt	          j        ¦   «         }nt	          j        ¦   «         }d}t          rEt          j	        | ¦  «        r1dt          | |d¦  «        i}t          j        }t          | ¦  «        }d}	ni }t          j        }d}d}	t          j        }
t          ||
||||||	||¬¦
  «
        }|S )aB  
    Create transport details from Twisted transport.

    :param transport: The Twisted transport to extract information from.
    :param is_server: Flag indicating whether this transport side is a "server" (as in TCP server).
    :return: Transport details object filled with information from the Twisted transport.
    Úget_native_idéÿÿÿÿr8   TNF)
Úchannel_typeÚchannel_framingÚpeerr2   Úown_pidÚown_tidÚown_fdÚ	is_secureÚ
channel_idÚ	peer_cert)r   r.   Úgetpidr^   Ú	threadingr{   Ú	get_identÚ_HAS_TLSr   r%   r   r   ÚCHANNEL_TYPE_TLSr   ÚCHANNEL_TYPE_TCPÚCHANNEL_FRAMING_WEBSOCKET)r    r2   r   r€   r�   r‚   r„   r}   r…   rƒ   r~   Útds               r   r   r     sþ   € õ �IÑÔ€DåŒi‰kŒk€GÝ�y˜/Ñ*Ô*ð (õ Ô)Ñ+Ô+ˆˆåÔ%Ñ'Ô'ˆØ€Fåð •MÔ,¨YÑ7Ô7ð ð Õ.¨y¸)À\ÑRÔRð
ˆ
õ (Ô8ˆÝ,¨YÑ7Ô7ˆ	Øˆ	ˆ	àˆ
Ý'Ô8ˆØˆ	Øˆ	õ 'Ô@€Oå	 |À_Ð[_Ø$-°wÈÐX^Ø$-¸*ÐPYð
[ñ 
[ô 
[€Bð €Ir   )N)(r.   r=   r‡   Útypingr   r   r   r   Útwisted.internet.deferr   Útwisted.internet.addressr   r	   Útwisted.internet.interfacesr
   r   Úautobahn.wamp.typesr   Útwisted.internet.stdior   ÚImportErrorr9   r   r,   r   Útwisted.protocols.tlsr   ÚOpenSSL.SSLr   r‰   Ú__allr   Ústrr   Úobjectr`   rL   r   r   r   rG   r   r   ú<module>rš      s>  ðð6 
€	€	€	Ø €€€Ø Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à +Ð +Ð +Ð +Ð +Ð +Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà 0Ð 0Ð 0Ð 0Ð 0Ð 0ðØ2Ð2Ð2Ð2Ð2Ð2Ð2øØð ð ð à�$�t‘*”*€K€K€KðøøøðØ4Ð4Ð4Ð4Ð4Ð4Ø€I€IøØð ð ð Ø€IØ�$�t‘*”*€K€K€KðøøøðØ9Ð9Ð9Ð9Ð9Ð9Ø:Ð:Ð:Ð:Ð:Ð:Ø&Ð&Ð&Ð&Ð&Ð&Ø€H€HøØð ð ð Ø€H€H€Hðøøøð	€ðð ð ð ð($˜˜jÐ*;Ð;Ô<ð $Àð $ð $ð $ð $ðN ð EyðPð P¨ð P¸4ð PÐRZÐ[^ÔR_ð PÐksÐtyÔkzð Pð Pð Pð Pð Pð>yð >y¨ð >y¸4ð >yÐRZÐ[^ÔR_ð >yÐksÐtyÔkzð >yð >yð >yð >yðB ð >ð¨Fð °xÀÀSÈ#ÀXÄÔ7Oð ð ð ð ð ð4Ð,@ð 4ÀXÈdÐSVÐX[ÐS[ÌnÔE]ð 4ð 4ð 4ð 4ðn(¨¨jÐ:KÐ.KÔ(Lð (ÐY]ð (Ðbrð (ð (ð (ð (ð (ð (s3   ¶= ½AÁAÁA ÁA2Á1A2Á6B ÂBÂB