U
    n5{i!
  ã                   @   sn   d Z ddlZddlZddlmZmZmZm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)ÚDictÚListÚOptionalÚTuple)Úprimes)ÚcommonÚfactoryÚkeys)ÚrunAsEffectiveUserc                   @   sJ   e Zd ZdZdZdd„ Zdd„ Zeee	e
ee	e	f  f  dœdd„Zd	S )
ÚOpenSSHFactoryz/usr/local/etcc                 C   s¦   i }t  | j¡D ]�}|dd… dkr|dd… dkrz6tj t j | j|¡¡}t 	| 
¡ ¡d }|||< W q tk
rž } z| jjd||d� W 5 d}~X Y qX 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   ZgetNSZblobÚ	ExceptionÚ_logr   )ÚselfÚksr   ÚkÚtÚe© r    úH/tmp/pip-unpacked-wheel-mnhg7r0q/twisted/conch/openssh_compat/factory.pyÚgetPublicKeys   s     ýzOpenSSHFactory.getPublicKeysc                 C   sê   i }t  | j¡D ]Ô}|dd… dkr|dd… dkrt j | j|¡}ztj |¡}W n‚ tk
r¤ } z2|j	t	j
kr’tddtjj|ƒ}||| ¡ < n‚ W 5 d}~X Y q tk
rÖ } z| jjd||d� W 5 d}~X Y qX ||| ¡ < q|S )	z1
        Return the server private keys.
        Nr   r   éüÿÿÿÚ_keyr   r   r   )r   r   r   r   r   r	   r   r   ÚOSErrorÚerrnoÚEACCESr
   ZsshTyper   r   r   )r   ZprivateKeysr   ZfullPathÚkeyr   r    r    r!   ÚgetPrivateKeys+   s&     ýzOpenSSHFactory.getPrivateKeys)Úreturnc                 C   s.   zt  | jd ¡W S  tk
r(   Y d S X d S )Nz/moduli)r   ZparseModuliFileÚ
moduliRootr%   )r   r    r    r!   Ú	getPrimesF   s    zOpenSSHFactory.getPrimesN)Ú__name__Ú
__module__Ú__qualname__r   r+   r"   r)   r   r   Úintr   r   r,   r    r    r    r!   r      s
   r   )Ú__doc__r&   r   Útypingr   r   r   r   Ztwisted.conch.openssh_compatr   Ztwisted.conch.sshr   r   r	   Ztwisted.python.utilr
   Z
SSHFactoryr   r    r    r    r!   Ú<module>   s   