
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
."d                  @   sd   d dl mZmZ d dlmZ d dlZddlmZ G dd deZG dd	 d	eZ	G d
d deZ
dS )    )callCalledProcessError)mkstempN   )ConfigGeneratorc               @   s   e Zd ZdZdddddddddddddd	d
dddddddZdddddddZdddddddZddddddd d!d"d#	Zd$d%d&Zd'd(d)d*d+d,d-d.Z	d/d0d1d2d3d4d5d6d7Z
d8d9d:d;d<d=d>d?d7Zed@dA ZdBS )COpenSSHGenerator zaes256-gcm@openssh.comz
aes256-ctrz
aes192-ctrzaes128-gcm@openssh.comz
aes128-ctrzchacha20-poly1305@openssh.comz
aes256-cbcz
aes192-cbcz
aes128-cbcz3des-cbc)zAES-256-GCMzAES-256-CTRzAES-192-GCMzAES-192-CTRzAES-128-GCMzAES-128-CTRzCHACHA20-POLY1305zCAMELLIA-256-GCMzAES-256-CCMzAES-192-CCMzAES-128-CCMzCAMELLIA-128-GCMzAES-256-CBCzAES-192-CBCzAES-128-CBCzCAMELLIA-256-CBCzCAMELLIA-128-CBCzRC4-128zDES-CBCzCAMELLIA-128-CTSz3DES-CBCzhmac-md5-etm@openssh.comzumac-64-etm@openssh.comzumac-128-etm@openssh.comzhmac-sha1-etm@openssh.comzhmac-sha2-256-etm@openssh.comzhmac-sha2-512-etm@openssh.com)zHMAC-MD5zUMAC-64zUMAC-128z	HMAC-SHA1zHMAC-SHA2-256zHMAC-SHA2-512zhmac-md5zumac-64@openssh.comzumac-128@openssh.comz	hmac-sha1zhmac-sha2-256zhmac-sha2-512zecdh-sha2-nistp521zecdh-sha2-nistp384zecdh-sha2-nistp256z.curve25519-sha256,curve25519-sha256@libssh.orgzdiffie-hellman-group1-sha1zdiffie-hellman-group14-sha1zdiffie-hellman-group14-sha256zdiffie-hellman-group16-sha512zdiffie-hellman-group18-sha512)	zECDHE-SECP521R1-SHA2-512zECDHE-SECP384R1-SHA2-384zECDHE-SECP256R1-SHA2-256zECDHE-X25519-SHA2-256zDHE-FFDHE-1024-SHA1zDHE-FFDHE-2048-SHA1zDHE-FFDHE-2048-SHA2-256zDHE-FFDHE-4096-SHA2-512zDHE-FFDHE-8192-SHA2-512z"diffie-hellman-group-exchange-sha1z$diffie-hellman-group-exchange-sha256)zDHE-SHA1zDHE-SHA2-256zgss-gex-sha1-zgss-group1-sha1-zgss-group14-sha1-zgss-group14-sha256-zgss-nistp256-sha256-zgss-curve25519-sha256-zgss-group16-sha512-)zDHE-GSS-SHA1zDHE-GSS-FFDHE-1024-SHA1zDHE-GSS-FFDHE-2048-SHA1zDHE-GSS-FFDHE-2048-SHA2-256zECDHE-GSS-SECP256R1-SHA2-256zECDHE-GSS-X25519-SHA2-256zDHE-GSS-FFDHE-4096-SHA2-512zssh-rsazssh-dsszrsa-sha2-256zrsa-sha2-512zecdsa-sha2-nistp256zecdsa-sha2-nistp384zecdsa-sha2-nistp521zssh-ed25519)zRSA-SHA1zDSA-SHA1zRSA-SHA2-256zRSA-SHA2-512zECDSA-SHA2-256zECDSA-SHA2-384zECDSA-SHA2-512zEDDSA-ED25519zssh-rsa-cert-v01@openssh.comzssh-dss-cert-v01@openssh.comz!rsa-sha2-256-cert-v01@openssh.comz!rsa-sha2-512-cert-v01@openssh.comz(ecdsa-sha2-nistp256-cert-v01@openssh.comz(ecdsa-sha2-nistp384-cert-v01@openssh.comz(ecdsa-sha2-nistp521-cert-v01@openssh.comz ssh-ed25519-cert-v01@openssh.comc          &   C   s  |j }d}d}d}x>|d D ]2}	y| j|| j|	 |}W q tk
rL   Y qX qW |rh|| jjd|7 }d}|jd rx>|d D ]2}	y| j|| j|	 |}W q tk
r   Y qX qW x>|d D ]2}	y| j|| j|	 |}W q tk
r   Y qX qW |r|| jjd|7 }d}d}
xF|d D ]8}x.|d	 D ] }|jd
 ry$| j	|d |  }| j|||}W n tk
r   Y nX y"||d |  }| j|
||}
W n tk
r   Y nX x|d D ]}y*||d | d |  }| j|||}W n tk
r
   Y nX y*||d | d |  }| j|
||}
W n tk
rL   Y nX qW q4W q"W |
rz|| jjd|
7 }n|| jjdd7 }|r|| jjd|7 }d}x|d D ]v}	y| j|| j
|	 |}W n tk
r   Y nX |jd dkry| j|| j|	 |}W n tk
r$   Y nX qW |r\|rJ|| jjd|7 }|| jjd|7 }d}xB|d D ]6}	y| j|| j
|	 |}W n tk
r   Y nX qjW |r|| jjd|7 }|S )Nr   ,ZcipherZCiphersZssh_etmZmacZMACsZkey_exchangehashZarbitrary_dh_groups-groupZGSSAPIKexAlgorithmsZGSSAPIKeyExchangenoZKexAlgorithmsZsignZ	ssh_certsr   ZHostKeyAlgorithmsZPubkeyAcceptedKeyTypesZCASignatureAlgorithms)Zenabledappend
cipher_mapKeyError_FORMAT_STRINGformatZintegersmac_map_etmmac_mapgx_mapsign_mapsign_map_certs)clspolicylocal_kx_maplocal_gss_kx_mapZdo_host_keypcfgsepsiZgssZkxhvalg r$   >./usr/share/crypto-policies/python/policygenerators/openssh.pygenerate_optionsl   s    



z!OpenSSHGenerator.generate_optionsN)__name__
__module____qualname__r   r   r   r   kx_mapr   
gss_kx_mapr   r   classmethodr&   r$   r$   r$   r%   r      s   r   c               @   s6   e Zd ZdZdddhZdZedd Zedd Zd	S )
OpenSSHClientGeneratoropensshsshzopenssh-clientz{0} {1}
c             C   s$   t | j}t | j}| j|||dS )NF)dictr*   r+   r&   )r   r   r   r   r$   r$   r%   generate_config   s    

z&OpenSSHClientGenerator.generate_configc             C   s   t jdt jsdS t \}}d}z^t j|d}|j| W d Q R X ytd| d dd}W n tk
rz   | jd Y nX W d t j	| X |r| jd	 | jd
|  dS dS )Nz/usr/bin/sshT   wz/usr/bin/ssh -G -F z bogus654_server >/dev/null)shellz/usr/bin/ssh: Execution failedz-There is an error in OpenSSH generated policyz
Policy:
%sF)
osaccessX_OKr   fdopenwriter   r   eprintunlink)r   configfdpathretfr$   r$   r%   test_config   s&    

z"OpenSSHClientGenerator.test_configN)	r'   r(   r)   CONFIG_NAMESCOPESr   r,   r1   rA   r$   r$   r$   r%   r-      s
   
r-   c               @   sR   e Zd ZdZdddhZdZdZedd Zed	d
 Z	edd Z
edd ZdS )OpenSSHServerGeneratorZopensshserverr/   r.   zopenssh-serverz4systemctl try-restart sshd.service 2>/dev/null || :
z
-o{0}={1} c             C   sD   t | j}t | j}|d= |d= | j|||d}|j }d| d S )NzDHE-FFDHE-1024-SHA1zDHE-GSS-FFDHE-1024-SHA1TzCRYPTO_POLICY='')r0   r*   r+   r&   rstrip)r   r   r   r   r   r$   r$   r%   r1     s    

z&OpenSSHServerGenerator.generate_configc             C   sf   t  \}}tj| d}ytd| d dd}W n tk
rN   | jd Y nX |rb| jd dS |S )	Nr2   z&/usr/bin/ssh-keygen -t rsa -b 2048 -f z -N "" >/dev/nullT)r4   z%/usr/bin/ssh-keygen: Execution failedz4SSH Keygen failed when testing OpenSSH server policyr   )r   r5   r;   r   r   r:   )r   Z_fdr>   r?   r$   r$   r%   _test_setup  s    


z"OpenSSHServerGenerator._test_setupc             C   s   |rt j| d S )N)r5   r;   )r   r>   r$   r$   r%   _test_cleanup  s    z$OpenSSHServerGenerator._test_cleanupc             C   s   t jdt jsdS | j }|s"dS t \}}d}zft j|d}|j| W d Q R X y td| d | d dd	}W n tk
r   | j	d
 Y nX W d t j
| | j| X |r| j	d | j	d|  dS dS )Nz/usr/sbin/sshdTFr2   r3   z/usr/bin/bash -c 'source z( && /usr/sbin/sshd -T $CRYPTO_POLICY -h z -f /dev/null' >/dev/null)r4   z /usr/sbin/sshd: Execution failedz4There is an error in OpenSSH server generated policyz
Policy:
%s)r5   r6   r7   rG   r   r8   r9   r   r   r:   r;   rH   )r   r<   Zhost_key_filenamer=   r>   r?   r@   r$   r$   r%   rA   #  s0    


z"OpenSSHServerGenerator.test_configN)r'   r(   r)   rB   rC   Z
RELOAD_CMDr   r,   r1   rG   rH   rA   r$   r$   r$   r%   rD      s   
rD   )
subprocessr   r   Ztempfiler   r5   Zconfiggeneratorr   r   r-   rD   r$   r$   r$   r%   <module>   s    C(