
    Vh!
                         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ej                         Zy)	z^
Factory for reading openssh configuration files: public keys, private keys, and
moduli file.
    N)DictListOptionalTuple)primes)commonfactorykeys)runAsEffectiveUserc                   L    e Zd ZdZdZd Zd Zdeee	e
ee	e	f      f      fdZy)OpenSSHFactoryz/usr/local/etcc                    i }t        j                  | j                        D ]  }|dd dk(  s|dd dk(  s	 t        j                  j                  t         j                  j                  | j                  |            }t        j                  |j                               d   }|||<    |S # t        $ r(}| j                  j                  d||       Y d}~d}~ww xY w)	z0
        Return the server public keys.
        N	   	ssh_host_iz_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es         T/home/dcms/DCMS/lib/python3.12/site-packages/twisted/conch/openssh_compat/factory.pygetPublicKeyszOpenSSHFactory.getPublicKeys   s     

4==1 	H|{*x}
/J	))"'',,t}}h*OPAQVVX.q1ABqE	 	 ! IIOOA!) $  s   A2B..	C7CCc                 l   i }t        j                  | j                        D ]q  }|dd dk(  s|dd dk(  st         j                  j	                  | j                  |      }	 t
        j                  j                  |      }|||j                         <   s |S # t        $ rb}|j                  t        j                  k(  r:t        ddt
        j                  j                  |      }|||j                         <   n Y d}~d}~wt        $ r)}| j                  j                  d||       Y d}~d}~ww xY w)	z1
        Return the server private keys.
        Nr   r   _keyr   r   r   )r   r   r   r   r   r
   r   r   sshTypeOSErrorerrnoEACCESr   r   r   r   )r    privateKeysr   fullPathkeyr$   s         r%   getPrivateKeyszOpenSSHFactory.getPrivateKeys+   s    

4==1 	5H|{*x}/F77<<x@5((++H5C 25K.'	5(   ww%,,.0Atxx7H7H(S58CKKM2 3 ! IIOOA!) $  s%   "B	D3!AC>>D3
D..D3returnc                 f    	 t        j                  | j                  dz         S # t        $ r Y y w xY w)Nz/moduli)r   parseModuliFile
moduliRootr+   )r    s    r%   	getPrimeszOpenSSHFactory.getPrimesF   s3    	))$//I*EFF 		s   !$ 	00N)__name__
__module____qualname__r   r5   r&   r1   r   r   intr   r   r6        r%   r   r      s>    H!J&68Dd5c?.C)C$DE r<   r   )__doc__r,   r   typingr   r   r   r   twisted.conch.openssh_compatr   twisted.conch.sshr   r	   r
   twisted.python.utilr   
SSHFactoryr   r;   r<   r%   <module>rC      s6   

  	 . . / 3 3 27W'' 7r<   