o
    èó·iŠ  ã                   @   s”   d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlmZ dZ	dde
dee d	efd
d„Zdejjd	efdd„Zdd„ Zde
d	efdd„ZdS )é    N)ÚPopen)ÚOptional)Úsleep)ÚTransportDetails)r   Úpeer2strÚtransport_channel_idÚcreate_transport_detailsÚ	is_serverÚchannel_id_typeÚreturnc                 C   sˆ   |du rdS |dvrt d |¡ƒ‚|  d¡}|du rt dƒ‚t|dƒs't dƒ‚|jd	d
�}t|ƒtkr5dS t ¡ }| 	|¡ | 
¡ }|S )a’  
    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 asyncio TLS transport to extract the TLS channel ID from.
    :param is_server: Flag indicating the transport is for a server.
    :param channel_id_type: TLS channel ID type, currently only "tls-unique" is supported.
    :returns: The TLS channel id (32 bytes).
    Ns                                    )ú
tls-uniquezinvalid channel ID type {}Ú
ssl_objectzUTLS transport channel_id for tls-unique requested, but ssl_obj not found on transportÚget_channel_bindingz_TLS transport channel_id for tls-unique requested, but get_channel_binding not found on ssl_objr   )Úcb_type)Ú	ExceptionÚformatÚget_extra_infoÚhasattrr   ÚtypeÚbytesÚhashlibÚsha256ÚupdateÚdigest)Ú	transportr	   r
   Zssl_objZtls_finished_msgÚmÚ
channel_id© r   ú[C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\autobahn/asyncio/util.pyr   +   s    


r   r   c                 C   s²   z1|   d¡}t|tƒr!t|ƒdkrdnd}d |d |d |¡W S t|tƒr,d |¡W S d	 |¡W S    Y z|   d
¡}d |j¡W S    Y z|   d¡}d |¡W S    Y dS )NÚpeernameé   é   é   ztcp{2}:{0}:{1}r   é   zunix:{0}z?:{0}Ú
subprocessz
process:{}Úpipezpipe:{}Úunknown)r   Ú
isinstanceÚtupleÚlenr   ÚstrÚpid)r   ÚpeerZip_verÚprocr%   r   r   r   r   V   s*   




r   c                     s8   ddl m‰  g d¢} ttdd„ t‡ fdd„| ƒƒƒ} | S )Nr   ©Ú
serializer)ZCBORSerializerZMsgPackSerializerZUBJSONSerializerZJsonSerializerc                 S   s   | S ©Nr   )Úxr   r   r   Ú<lambda>z   s    z!get_serializers.<locals>.<lambda>c                    s   t ˆ | ƒr
tˆ | ƒS d S r0   )r   Úgetattr)Úsr.   r   r   r2   z   s    )Zautobahn.wampr/   ÚlistÚfilterÚmap)Zserializersr   r.   r   Úget_serializersv   s   ÿr8   c              	   C   sb   t | ƒ}|  dd ¡d u}|rdt| |dƒi}tj}d }ni }tj}d }tj}t|||||||d�S )NÚpeercertr   )Úchannel_typeÚchannel_framingr,   r	   Ú	is_securer   Ú	peer_cert)r   r   r   r   ZCHANNEL_TYPE_TLSZCHANNEL_TYPE_TCPZCHANNEL_FRAMING_WEBSOCKET)r   r	   r,   r<   r   r:   r=   r;   r   r   r   r      s   ÿþr   r0   )r   r$   r   Útypingr   Úasyncior   Zautobahn.wamp.typesr   Z__allÚboolr*   r   r   Ú
transportsÚBaseTransportr   r8   r   r   r   r   r   Ú<module>   s   + 	