관리-도구
편집 파일: libreswan.cpython-39.pyc
a � �g� � @ sD d dl Z d dlmZmZ d dlmZ ddlmZ G dd� de�ZdS )� N)�CalledProcessError�call)�mkstemp� )�ConfigGeneratorc @ s e Zd ZdZh d�ZdZddddddd d ddd d�Zdddddddd�Zdddddddddddddd� Zddddddddddddd�Z ddddd d!d"d d!d"d#� Z d$d%d&d'd(�Zd$d%d&d'd)�Zd$d%d*�Z ed+d,� �Zed-d.� �Zed/d0� �Zed1d2� �Zed3d4� �Zd5S )6�LibreswanGenerator� libreswan> ZipsecZiker z5systemctl try-restart ipsec.service 2>/dev/null || : � Zdh31Zdh19Zdh20Zdh21Zdh5Zdh14Zdh15Zdh16Zdh18)ZX448ZX25519� SECP256R1Z SECP384R1Z SECP521R1z FFDHE-6144z FFDHE-1536� FFDHE-2048z FFDHE-3072z FFDHE-4096z FFDHE-8192Zaes256Zaes192Zaes128Z aes_gcm256Z aes_gcm192Z aes_gcm128Zchacha20_poly1305)zAES-256-CBCzAES-192-CBCzAES-128-CBCzAES-256-GCMzAES-192-GCMzAES-128-GCMzCHACHA20-POLY1305Zsha2_512Zsha2_256) �AES-256-CBC-HMAC-SHA2-512�AES-256-CBC-HMAC-SHA2-256�AES-192-CBC-HMAC-SHA2-512�AES-192-CBC-HMAC-SHA2-256�AES-128-CBC-HMAC-SHA2-256zAES-256-GCM-HMAC-SHA2-512zAES-256-GCM-HMAC-SHA2-256zAES-192-GCM-HMAC-SHA2-512zAES-192-GCM-HMAC-SHA2-256zAES-128-GCM-HMAC-SHA2-512zAES-128-GCM-HMAC-SHA2-256zCHACHA20-POLY1305-HMAC-SHA2-512zCHACHA20-POLY1305-HMAC-SHA2-256Zsha1)r r r r r zAES-256-CBC-HMAC-SHA1zAES-192-CBC-HMAC-SHA1zAES-128-CBC-HMAC-SHA1zAES-256-GCM-AEADzAES-192-GCM-AEADzAES-128-GCM-AEADzCHACHA20-POLY1305-AEADzrsa-sha1zecdsa-sha2_256zecdsa-sha2_384zecdsa-sha2_512zrsa-sha2_256zrsa-sha2_384zrsa-sha2_512) zRSA-SHA1zECDSA-SHA2-256zECDSA-SHA2-384zECDSA-SHA2-512zRSA-PSS-SHA2-256zRSA-PSS-SHA2-384zRSA-PSS-SHA2-512zRSA-PSS-RSAE-SHA2-256zRSA-PSS-RSAE-SHA2-384zRSA-PSS-RSAE-SHA2-512r r � � )�AEAD� HMAC-SHA2-512� HMAC-SHA2-256� HMAC-SHA1)r r r r )r r c C s || j vrdS | j | S �N�c )�mac_ike_prio_map��cls�key� r �?/usr/share/crypto-policies/python/policygenerators/libreswan.pyZ__get_ike_prios s z!LibreswanGenerator.__get_ike_prioc C s || j vrdS | j | S r )�mac_esp_prio_mapr r r r Z__get_esp_prioz s z!LibreswanGenerator.__get_esp_prioc C s || j vrdS | j | S r )�group_prio_mapr r r r Z__get_group_prio� s z#LibreswanGenerator.__get_group_prioc C s d}d}|j }d}dd� |d D �}d|v r2d}nd |v r>d }|rR|d| d 7 }|d 7 }t|d | jd�}t|d | jd�}d} |d D ]�} z| j| }W n ty� Y q�Y n0 |d }d}|D ]@} z| j| d | }W n ty� Y q�Y n0 | �||d�}q�|�sq�||7 }d}|D ]>}z| j| }W n t�yJ Y �qY n0 | �||d�}�q| �||d�}| �| ||�} q�| �r�|d| d 7 }t|d | j d�}d} |d D ]�} z| j| }W n t�y� Y �q�Y n0 |d }d}|D ]V} z| j | d | }W n t�y" Y �q�Y n0 |�s4|} �qF| �||d�}�q�||7 }|dd � dk�rd�q�| �| ||�} �q�| �r�|d| d 7 }d} t� }|d D ]R}z| j| }W n t�y� Y �q�Y n0 ||v�r�|� |� | �| ||�} �q�| �r|d| d 7 }|S )Nzconn %default �,r c S s g | ]}|� d �r|�qS )ZIKE)� startswith)�.0�xr r r � <listcomp>� � z6LibreswanGenerator.generate_config.<locals>.<listcomp>ZprotocolZIKEv2zikev2=insistZIKEv1zikev2=never� � z pfs=yes �mac)r �group�cipher�-�+z ike=���z esp=�signz authby=)Zenabled�sorted�!_LibreswanGenerator__get_ike_prio�#_LibreswanGenerator__get_group_prio� cipher_map�KeyError�cipher_prf_map�append� group_map�!_LibreswanGenerator__get_esp_prio�cipher_mac_map�set�sign_map�add)r ZpolicyZcfg�sep�p�s�protoZsorted_macsZ sorted_groups�tmpr+ �cmZcombor) Zmm�ir* Zsigalgsr/ Zsmr r r �generate_config� s� �� � z"LibreswanGenerator.generate_configc C s� t �dt j�sdS t� \}}d}zzt �|d��}|�|� W d � n1 sN0 Y ztd|� d�dd�}W n ty� | �d� Y n0 W t � |� nt � |� 0 |r�| �d � | �d |� �� dS dS )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 policyzPolicy: F) �os�access�X_OKr �fdopen�writer r Zeprint�unlink)r Zconfig�fd�path�ret�fr r r �test_config� s&