ó
    ð›‘h;5  ã            
       ó(  • S SK r S SKrS SKrS SKJrJrJrJr  S SKJ	r	  S SK
JrJr  S SKJrJr  S SKJr   S SKJr   S SK
Jr  S	r S SKJr  S SKJr  S SKJr  S	rSrSS jrS\\\4   S\ 4S jr!\(       d  SS\"S\#S\\    S\\$   4S jjr%OSS\"S\#S\\    S\\$   4S jjr%\(       d  S\"S\\\ \4      4S jr&OS\S\\\ \4      4S jr&S\\\4   S\#S\4S jr'g! \ a    \" S5      r N°f = f! \ a    S
r\" S5      r N½f = f! \ a    S
r N¶f = f)é    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                 ól   • U(       d  SSK Jn  [        5       nUR                  XR                  S5        U$ )a   
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      ÚYC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\autobahn/twisted/util.pyr   r   D   s*   € ö Ý,Ü‹
€AØ×Ñ�eŸZ™Z¨Ô.Ø€Hó    Ú	transportÚreturnc                 óì  • [         R                  " U 5      (       a  SR                  U R                  5      nU$ [        R                  " U 5      (       Ga  U R                  5       n[        U[        5      (       a(  SR                  UR                  UR                  5      nU$ [        (       a=  [        U[        5      (       a(  SR                  UR                  UR                  5      nU$ [        U[        5      (       a3  UR                  (       a  SR                  UR                  5      nU$ Sn U$ [        U[        5      (       a&  SR                  [        R                   " 5       5      nU$ Sn U$ SnU$ )ay  
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   s:  € ô ×#Ò# I×.Ñ.à×!Ñ! )§-¡-Ó0ˆð, €Jô+ 
×	Ò	˜y×	)Ò	)ØJS×J[ÑJ[ÓJ]ˆÜ�dœK×(Ñ(Ø ×'Ñ'¨¯	©	°4·9±9Ó=ˆCð$ €J÷# ŠYœ: d¬K×8Ñ8Ø ×'Ñ'¨¯	©	°4·9±9Ó=ˆCð  €Jô ˜œk×*Ñ*Ø�y�yØ ×'Ñ'¨¯	©	Ó2�ð €Jð ‘ð €Jô ˜œk×*Ñ*ð  ×&Ñ&¤r§z¢z£|Ó4ˆCð €Jð	 ‰Cð €Jð ˆØ€Jr   Ú	is_serverÚchannel_id_typec                 ó>   • Uc  g[        SR                  U5      5      e)Nó                                    zUcannot determine TLS channel ID of type "{}" when TLS is not available on this system)ÚRuntimeErrorr&   )r    r2   r3   s      r   r   r   €   s0   € ØÑ"ØäÐv×}Ñ}ð  Nó   Oó  Pð  Pr   c                 ó  • Uc  gUS;  a  [        SR                  U5      5      e[        U [        5      (       d$  [        SR                  U[	        U 5      5      5      eU R                  5       nU(       a  [        U[        5      (       d   eSnUS:X  a`  X:w  a  UR                  5       nOUR                  5       nUc  g[        R                  " 5       nUR                  U5        UR                  5       $ [        SR                  U5      5      e)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).
r5   )ú
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   †   s  € ð& Ñ"Øà .Ó0ÜÐK×RÑRÐSbÓcÓdÐdä˜)Ô%9×:Ñ:ÜØm×tÑtØ#¤T¨)£_ó6ó7ð 7ð "+×!4Ñ!4Ó!6ˆ
Þœj¨´Z×@Ñ@Ð@Ð@ð ˆà˜lÓ*àÓ*ð $.×#?Ñ#?Ó#AÑ ð $.×#:Ñ#:Ó#<Ð àÑ'ð
 $ä—N’NÓ$�Ø—‘Ð)Ô*Ø—x‘x“zÐ!ä%Ð&_×&fÑ&fÐgvÓ&wÓxÐxr   c                 ó   • g)z^
Dummy when no TLS is available.

:param transport: Ignored.
:return: Always return ``None``.
N© )r    s    r   r   r   È   s   € ð r   c                 óL  • [         R                  " U 5      (       a  [        U S5      (       d  gU R                  5       nU(       Ga_  S nSR	                  U" UR                  S5      5      5      R                  5       SR	                  U" UR                  S5      5      5      R                  5       SR	                  U" UR                  S5      5      5      R                  5       [        UR                  5       5      U" UR                  5       5      [        UR                  5       5      U" UR                  5       5      [        UR                  5       5      U" UR                  5       5      U" UR                  5       5      / S.n[!        UR#                  5       5       Hw  nUR%                  U5      nSR	                  U" UR'                  5       5      5      SR	                  U" U5      5      UR)                  5       S	:g  S
.nUS   R+                  U5        My     SUR-                  5       4SUR/                  5       44 He  u  px0 X7'   UR1                  5        HH  u  pšU" U	5      n	U" U
5      n
SR	                  U
5      X7   SR	                  U	5      R3                  5       '   MJ     Mg     U$ g)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                 óR   • [        U [        5      (       a  U R                  S5      $ U $ )NÚutf8)r)   ÚbytesÚdecode)Ú_values    r   Úmaybe_bytesÚ-extract_peer_certificate.<locals>.maybe_bytesá   s#   € Ü˜f¤e×,Ñ,Ø!Ÿ=™=¨Ó0Ð0à!�Mr   z{}Úmd5Úsha1r>   )rQ   rR   r>   ÚexpiredÚhashÚserialÚsignature_algorithmÚversionÚ
not_beforeÚ	not_afterÚ
extensionsr   )r-   ÚvalueÚcriticalrZ   Ú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-   Úkeyr[   s              r   r   r   Ñ   s;  € ô ×(Ò(¨×3Ñ3¼À	ÐK_×8`Ñ8`Øà×+Ñ+Ó-ˆßò"ð —{‘{¡;¨t¯{©{¸5Ó/AÓ#BÓC×IÑIÓKØŸ™¡K°·±¸FÓ0CÓ$DÓE×KÑKÓMØŸ+™+¡k°$·+±+¸hÓ2GÓ&HÓI×OÑOÓQÜ × 0Ñ 0Ó 2Ó3Ù# D×$:Ñ$:Ó$<Ó=Ü˜d×4Ñ4Ó6Ó7Ù'2°4×3OÑ3OÓ3QÓ'RÜ˜t×/Ñ/Ó1Ó2Ù)¨$×*<Ñ*<Ó*>Ó?Ù(¨×):Ñ):Ó)<Ó=Ø ñˆFô ˜4×3Ñ3Ó5Ö6�Ø×(Ñ(¨Ó+�à ŸK™K©°C×4FÑ4FÓ4HÓ(IÓJØ!Ÿ[™[©°SÓ)9Ó:Ø #× 0Ñ 0Ó 2°aÑ 7ñ�ð
 �|Ñ$×+Ñ+¨HÖ5ñ 7ð #,¨T×-=Ñ-=Ó-?Ð!@À8ÈTÏ_É_ÓM^ÐB_Ó `‘�Ø!#�‘Ø"&×"5Ñ"5Ö"7‘J�CÙ% cÓ*�CÙ'¨Ó.�EØ?C¿{¹{È5Ó?Q�F‘N 4§;¡;¨sÓ#3×#9Ñ#9Ó#;Ó<ó #8ñ !að ˆMðM r   c                 óÖ  • [        U 5      n[        R                  " 5       n[        [        S5      (       a  [        R
                  " 5       nO[        R                  " 5       nSn[        (       aG  [        R                  " U 5      (       a,  S[        XS5      0n[        R                  n[        U 5      nSn	O0 n[        R                  nSnSn	[        R                  n
[        XzUXXEX–US9
nU$ )a.  
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Ši‹k€GÜŒy˜/×*Ñ*ô ×)Ò)Ó+‰ä×%Ò%Ó'ˆØ€Fç‚x”M×,Ò,¨Y×7Ñ7ð Ô.¨yÀ\ÓRð
ˆ
ô (×8Ñ8ˆÜ,¨YÓ7ˆ	Ø‰	àˆ
Ü'×8Ñ8ˆØˆ	Øˆ	ô '×@Ñ@€Oä	 |Ð[_Ø$-ÈØ$-Ð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   Úobjectra   rL   r   r   r   rG   r   r   Ú<module>r›      s¢  ðó6 
Û Û ß -Ó -å +ß =ß Eå 0ðÝ2ð
Ý4Ø€Ið
Ý9Ý:Ý&Ø€Hð	€ôð($˜˜jÐ*;Ð;Ñ<ð $Àô $öN ñP¨ð P¸4ð PÐRZÐ[^ÑR_ð PÐksÐtyÑkzö Pñ>y¨ð >y¸4ð >yÐRZÐ[^ÑR_ð >yÐksÐtyÑkzõ >yöB ð¨Fð °xÀÀSÈ#ÀXÁÑ7Oõ ð4Ð,@ð 4ÀXÈdÐSVÐX[ÐS[ÉnÑE]ô 4ðn(¨¨jÐ:KÐ.KÑ(Lð (ÐY]ð (Ðbrõ (øðA ó á�t“*‚Kðûð ó Ø€IÙ�t“*‚Kðûð ó Ø‚Hðús4   ¶C ½C0 ÁD ÃC-Ã,C-Ã0DÄDÄDÄD