o
    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   </usr/lib/python3/dist-packages/twisted/conch/client/agent.pyr
      s   
zSSHAgentClient.__init__c                 C   s   |   | jS r	   )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)num_keysc                 S   s   g | ]}|d  qS )r   r   ).0xr   r   r   
<listcomp>   s    z0SSHAgentClient._cbPublicKeys.<locals>.<listcomp>)_logdebuglenr   )r   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   Key
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 )NSSH_AUTH_SOCKc                    s      S r	   )loseConnection)r   r   r   r   <lambda>/   s    z7SSHAgentForwardingChannel.channelOpen.<locals>.<lambda> )r   ClientCreatorr   SSHAgentForwardingLocalconnectUNIXosenvironr   _cbGotLocal
addErrbackbuf)r   specificDataccdr   r   r   channelOpen+   s
   
z%SSHAgentForwardingChannel.channelOpenc                 C   s    || _ | j jj| _| j| j _d S r	   )local	transportwritedataReceived)r   r4   r   r   r   r-   2   s   z%SSHAgentForwardingChannel._cbGotLocalc                 C   s   |  j |7  _ d S r	   )r/   )r   datar   r   r   r7   7   s   z&SSHAgentForwardingChannel.dataReceivedc                 C   s   | j r| j   d | _ d S d S r	   )r4   r%   r   r   r   r   closed:   s   

z SSHAgentForwardingChannel.closedN)r    r!   r"   r3   r-   r7   r9   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+   twisted.conch.sshr   r   r   twisted.internetr   r   twisted.loggerr   r   
SSHChannelr#   Protocolr)   r   r   r   r   <module>   s   