
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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dS )é    )ÚcallÚCalledProcessError)ÚmkstempNé   )ÚConfigGeneratorc               @   sØ   e Zd ZdZdddhZdZddddddd	d
ddddœZddddddddœZddddddddddddddœZdddddddddddddœZ	ddddd œZ
ddddd!œZed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZed(d)„ ƒZd*S )+ÚLibreswanGeneratorZ	libreswanZipsecZikez5systemctl try-restart ipsec.service 2>/dev/null || :
Ú Zdh19Zdh20Zdh21Zdh5Zdh14Zdh15Zdh16Zdh18)ZX448ZX25519Z	SECP256R1Z	SECP384R1Z	SECP521R1z
FFDHE-6144z
FFDHE-1536z
FFDHE-2048z
FFDHE-3072z
FFDHE-4096z
FFDHE-8192Zaes256Zaes192Zaes128Z
aes_gcm256Z
aes_gcm192Z
aes_gcm128Zchacha20_poly1305)zAES-256-CBCzAES-192-CBCzAES-128-CBCzAES-256-GCMzAES-192-GCMzAES-128-GCMzCHACHA20-POLY1305Zsha2_512Zsha2_256)zAES-256-CBC-HMAC-SHA2-512zAES-256-CBC-HMAC-SHA2-256zAES-192-CBC-HMAC-SHA2-512zAES-192-CBC-HMAC-SHA2-256zAES-128-CBC-HMAC-SHA2-256zAES-256-GCM-HMAC-SHA2-512zAES-256-GCM-HMAC-SHA2-256zAES-192-GCM-HMAC-SHA2-512zAES-192-GCM-HMAC-SHA2-256zAES-128-GCM-HMAC-SHA2-512zAES-128-GCM-HMAC-SHA2-256zCHACHA20-POLY1305-HMAC-SHA2-512zCHACHA20-POLY1305-HMAC-SHA2-256Zsha1)zAES-256-CBC-HMAC-SHA2-512zAES-192-CBC-HMAC-SHA2-512zAES-256-CBC-HMAC-SHA2-256zAES-192-CBC-HMAC-SHA2-256zAES-128-CBC-HMAC-SHA2-256zAES-256-CBC-HMAC-SHA1zAES-192-CBC-HMAC-SHA1zAES-128-CBC-HMAC-SHA1zAES-256-GCM-AEADzAES-192-GCM-AEADzAES-128-GCM-AEADzCHACHA20-POLY1305-AEADr   r   é   é   )ÚAEADzHMAC-SHA2-512zHMAC-SHA2-256z	HMAC-SHA1)r   zHMAC-SHA2-512z	HMAC-SHA1zHMAC-SHA2-256c             C   s   || j krdS | j | S )Néc   )Úmac_ike_prio_map)ÚclsÚkey© r   ú@./usr/share/crypto-policies/python/policygenerators/libreswan.pyZ__get_ike_priob   s    
z!LibreswanGenerator.__get_ike_prioc             C   s   || j krdS | j | S )Nr   )Úmac_esp_prio_map)r   r   r   r   r   Z__get_esp_prioh   s    
z!LibreswanGenerator.__get_esp_prioc             C   sˆ  d}d}|j }d}|d }d|kr(d}nd|kr4d}|rH|d	| d
 7 }|d7 }t|d | jd�}d}�x|d D ]ú}	y| j|	 }
W n tk
rš   wrY nX |
d }d}xH|D ]@}y| j|	d |  }W n tk
rÞ   w®Y nX | j||dƒ}q®W |søqr||7 }d}xJ|d D ]>}y| j| }W n tk
�r:   �wY nX | j||dƒ}�qW | j||dƒ}| j|||ƒ}qrW |�r†|d| d
 7 }t|d | jd�}d}xÐ|d D ]Ä}	y| j|	 }
W n tk
�rÒ   �w¦Y nX |
d }d}xZ|D ]R}y| j	|	d |  }W n tk
�r   �wæY nX |�s(|
}P | j||dƒ}�qæW ||7 }|dd … dk�rZ�q¦| j|||ƒ}�q¦W |�r„|d| d
 7 }|S )Nzconn %default
ú,r   ZprotocolZIKEv2zikev2=insistZIKEv1zikev2=neverú	Ú
z		pfs=yes
Úmac)r   Úcipherú-ú+Úgroupz	ike=r   z	esp=éÿÿÿÿ)
ZenabledÚsortedÚ!_LibreswanGenerator__get_ike_prioÚ
cipher_mapÚKeyErrorÚcipher_prf_mapÚappendÚ	group_mapÚ!_LibreswanGenerator__get_esp_prioÚcipher_mac_map)r   ZpolicyZcfgÚsepÚpÚsÚprotoZsorted_macsZtmpr   ÚcmZcombor   ZmmÚir   r   r   r   Úgenerate_confign   s†    





z"LibreswanGenerator.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/sbin/ipsecTéÿ   Úwz'/usr/sbin/ipsec readwriteconf --config z >/dev/null)Úshellz!/usr/sbin/ipsec: Execution failedz/There is an error in libreswan generated policyz
Policy:
%sF)
ÚosÚaccessÚX_OKr   ÚfdopenÚwriter   r   ZeprintÚunlink)r   ÚconfigÚfdÚpathZretÚfr   r   r   Útest_config¾   s&    

zLibreswanGenerator.test_configN)Ú__name__Ú
__module__Ú__qualname__ZCONFIG_NAMEZSCOPESZ
RELOAD_CMDr"   r   r    r$   r   r   Úclassmethodr   r#   r+   r9   r   r   r   r   r      st   
Pr   )	Ú
subprocessr   r   Ztempfiler   r/   Zconfiggeneratorr   r   r   r   r   r   Ú<module>   s   