
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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 r¶x>|d D ]2}	y| j|| j|	 |ƒ}W q€ tk
r°   Y q€X q€W x>|d D ]2}	y| j|| j|	 |ƒ}W qÀ tk
rð   Y qÀX qÀW |�r|| jjd|ƒ7 }d}d}
�xF|d D �]8}�x.|d	 D �] }|jd
 �r¼y$| 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 �qÆW �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�r²y| j|| j|	 |ƒ}W n tk
�r$   Y nX �q²W |�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(