a
    )(b                     @   sv   d Z ddlZddlmZmZmZ ddlmZmZ ddl	m
Z
 G dd dejZG dd	 d	ejZG d
d dejZdS )zJ
Accesses the key agent for user authentication.

Maintainer: Paul Swartz
    N)agentchannelkeys)protocolreactor)Loggerc                   @   s2   e Zd Ze Zdd Zdd Zdd Zdd Zd	S )
SSHAgentClientc                 C   s   t j|  g | _d S N)r   r   __init__blobsself r   9lib/python3.9/site-packages/twisted/conch/client/agent.pyr
      s    zSSHAgentClient.__init__c                 C   s   |   | jS r	   )ZrequestIdentitiesaddCallback_cbPublicKeysr   r   r   r   getPublicKeys   s    zSSHAgentClient.getPublicKeysc                 C   s(   | j jdt|d dd |D | _d S )Nzgot {num_keys} public keys)Znum_keysc                 S   s   g | ]}|d  qS )r   r   ).0xr   r   r   
<listcomp>       z0SSHAgentClient._cbPublicKeys.<locals>.<listcomp>)_logdebuglenr   )r   Zblobcommr   r   r   r      s    zSSHAgentClient._cbPublicKeysc                 C   s   | j rtj| j dS dS )zj
        Return a L{Key} from the first blob in C{self.blobs}, if any, or
        return L{None}.
        r   N)r   r   ZKeyZ
fromStringpopr   r   r   r   getPublicKey    s    zSSHAgentClient.getPublicKeyN)	__name__
__module____qualname__r   r   r
   r   r   r   r   r   r   r   r      s
   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
SSHAgentForwardingChannelc                    sD   t tt}|tjd }| j |	 fdd d _
d S )NZSSH_AUTH_SOCKc                    s      S r	   )loseConnection)r   r   r   r   <lambda>/   r   z7SSHAgentForwardingChannel.channelOpen.<locals>.<lambda> )r   ZClientCreatorr   SSHAgentForwardingLocalZconnectUNIXosenvironr   _cbGotLocalZ
addErrbackbuf)r   ZspecificDataZccdr   r   r   channelOpen+   s
    z%SSHAgentForwardingChannel.channelOpenc                 C   s    || _ | j jj| _| j| j _d S r	   )localZ	transportwritedataReceived)r   r*   r   r   r   r&   2   s    z%SSHAgentForwardingChannel._cbGotLocalc                 C   s   |  j |7  _ d S r	   )r'   )r   datar   r   r   r,   7   s    z&SSHAgentForwardingChannel.dataReceivedc                 C   s   | j r| j   d | _ d S r	   )r*   r    r   r   r   r   closed:   s    
z SSHAgentForwardingChannel.closedN)r   r   r   r)   r&   r,   r.   r   r   r   r   r   *   s   r   c                   @   s   e Zd ZdS )r#   N)r   r   r   r   r   r   r   r#   @   s   r#   )__doc__r$   Ztwisted.conch.sshr   r   r   Ztwisted.internetr   r   Ztwisted.loggerr   r   Z
SSHChannelr   Protocolr#   r   r   r   r   <module>   s   