o
    ¯bÄ	  ã                   @   sV   d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
 G dd„ dejƒZdS )z^
Factory for reading openssh configuration files: public keys, private keys, and
moduli file.
é    N)Úprimes)ÚcommonÚfactoryÚkeys)ÚrunAsEffectiveUserc                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ ZdS )	ÚOpenSSHFactoryz/usr/local/etcc                 C   s¨   i }t  | j¡D ]I}|dd… dkrQ|dd… dkrQztj t j | j|¡¡}t 	| 
¡ ¡d }|||< W q tyP } z| jjd||d� W Y d}~qd}~ww q|S )	z0
        Return the server public keys.
        Né	   Ú	ssh_host_iøÿÿÿz_key.pubr   ú'bad public key file {filename}: {error}©ÚfilenameÚerror)ÚosÚlistdirÚdataRootr   ÚKeyÚfromFileÚpathÚjoinr   ÚgetNSÚblobÚ	ExceptionÚ_logr   )ÚselfÚksr   ÚkÚtÚe© r   úF/usr/lib/python3/dist-packages/twisted/conch/openssh_compat/factory.pyÚgetPublicKeys   s"    ý€ÿ€zOpenSSHFactory.getPublicKeysc                 C   sî   i }t  | j¡D ]l}|dd… dkrt|dd… dkrtt j | j|¡}ztj |¡}W nC tyS } z|j	t	j
krHtddtjj|ƒ}||| ¡ < n‚ W Y d}~qd}~w tym } z| jjd||d� W Y d}~qd}~ww ||| ¡ < q|S )	z1
        Return the server private keys.
        Nr   r	   éüÿÿÿÚ_keyr   r
   r   )r   r   r   r   r   r   r   r   ÚOSErrorÚerrnoÚEACCESr   ÚsshTyper   r   r   )r   ÚprivateKeysr   ÚfullPathÚkeyr   r   r   r   ÚgetPrivateKeys*   s0    þ€ý€ÿ€zOpenSSHFactory.getPrivateKeysc                 C   s(   z	t  | jd ¡W S  ty   Y d S w )Nz/moduli)r   ÚparseModuliFileÚ
moduliRootr#   )r   r   r   r   Ú	getPrimesE   s
   ÿzOpenSSHFactory.getPrimesN)Ú__name__Ú
__module__Ú__qualname__r   r,   r    r*   r-   r   r   r   r   r      s    r   )Ú__doc__r$   r   Útwisted.conch.openssh_compatr   Útwisted.conch.sshr   r   r   Útwisted.python.utilr   Ú
SSHFactoryr   r   r   r   r   Ú<module>   s   