o
    Òó·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deee	e
ee	e	f  f  f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   ZgetNSZblobÚ	ExceptionÚ_logr   )ÚselfÚksr   ÚkÚtÚe© r    újC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-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
   ZsshTyper   r   r   )r   ZprivateKeysr   ZfullPathÚkeyr   r    r    r!   ÚgetPrivateKeys+   s0    þ€ý€ÿ€zOpenSSHFactory.getPrivateKeysÚreturnc                 C   s(   z	t  | jd ¡W S  ty   Y d S w )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   