U
    
W[	                     @   sb   d Z ddlZddlZddl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)log)runAsEffectiveUser)keysfactorycommon)primesc                   @   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 ]}|dd dkr|dd dkrz6tjt j| j|}t	|
 d }|||< W q tk
r } ztd||f  W 5 d}~X Y qX q|S )z0
        Return the server public keys.
        N	   	ssh_host_iz_key.pubr   zbad public key file %s: %s)oslistdirdataRootr   KeyfromFilepathjoinr   ZgetNSZblob	Exceptionr   msg)selfZksfilename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 ]}|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rtddtjj|}||| < n W 5 d}~X Y q tk
r } ztd||f  W 5 d}~X Y qX ||| < q|S )z1
        Return the server private keys.
        Nr	   r
   Z_keyr   zbad private key file %s: %s)r   r   r   r   r   r   r   r   IOErrorerrnoZEACCESr   ZsshTyper   r   r   )r   ZprivateKeysr   ZfullPathkeyr   r   r   r   getPrivateKeys+   s(        $zOpenSSHFactory.getPrivateKeysc                 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   	getPrimesD   s    zOpenSSHFactory.getPrimesN)__name__
__module____qualname__r   r!   r   r    r"   r   r   r   r   r      s
   r   )__doc__r   r   Ztwisted.pythonr   Ztwisted.python.utilr   Ztwisted.conch.sshr   r   r   Ztwisted.conch.openssh_compatr   Z
SSHFactoryr   r   r   r   r   <module>   s   