
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
."d$                 @   sT   d dl mZmZ d dlmZ d dlZd dl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ddddd	d
Zddddddddddd
ZddddddZ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%d&d'd(	Z	d)d*d+d,d-d.d/d0Z
d1d2d3d4d5Zed6d7 Zed8d9 Zd:S );NSSGeneratorZnssZtlsZssl z	HMAC-SHA1zHMAC-MD5zHMAC-SHA256zHMAC-SHA384zHMAC-SHA512)ZAEADz	HMAC-SHA1zHMAC-MD5zHMAC-SHA2-256zHMAC-SHA2-384zHMAC-SHA2-512SHA1MD5ZSHA224ZSHA256ZSHA384ZSHA512)
r	   r
   zSHA2-224zSHA2-256zSHA2-384zSHA2-512zSHA3-256zSHA3-384zSHA3-512ZGOSTZ
CURVE25519	SECP256R1	SECP384R1	SECP521R1)ZX25519ZX448r   r   r   Zrc2Zrc4z
aes256-gcmz
aes128-gcmz
aes256-cbcz
aes128-cbczcamellia256-cbczcamellia128-cbczchacha20-poly1305zdes-ede3-cbc)zAES-256-CTRzAES-128-CTRzRC2-CBCzRC4-128zAES-256-GCMzAES-128-GCMzAES-256-CBCzAES-128-CBCzCAMELLIA-256-CBCzCAMELLIA-128-CBCzCAMELLIA-256-GCMzCAMELLIA-128-GCMzAES-256-CCMzAES-128-CCMzCHACHA20-POLY1305z3DES-CBCRSAzDHE-RSAzDHE-DSSzECDHE-RSA:ECDHE-ECDSAzECDH-RSA:ECDH-ECDSAzDH-RSA:DH-DSS)	ZPSKzDHE-PSKz	ECDHE-PSKr   zDHE-RSAzDHE-DSSZECDHEZECDHZDHzssl3.0ztls1.0ztls1.1ztls1.2ztls1.3zdtls1.0zdtls1.2)zSSL3.0zTLS1.0zTLS1.1zTLS1.2zTLS1.3zDTLS1.0zDTLS1.2zRSA-PSSzRSA-PKCSZECDSADSA)zRSA-PSS-zRSA-zECDSA-zDSA-c             C   s  |j }d}|d7 }|d7 }|d7 }d}x<|d D ]0}y| j|| j| }W q0 tk
r^   Y q0X q0W x<|d D ]0}y| j|| j| }W qn tk
r   Y qnX qnW x<|d D ]0}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 x@|d
 D ]4}y| j|| j| }W n tk
rZ   Y nX q*W dd |d D }|r| j|d}t }xZ|d D ]N}xF| j	j
 D ]8\}}	|j|r|	|kr|j|	 | j||	}P qW qW |jr| j|j }
| j|d|
 }n| j|d}|jr@| j|j }
| j|d|
 }n| j|d}| j|dt|jd  }| j|dt|jd  }| j|dt|jd  }||d 7 }|S )Nz	library=
zname=Policy
zNSS=flags=policyOnly,moduleDB
zconfig="disallow=ALL allow=r   ZmacgroupZcipherhashZkey_exchangec             S   s   g | ]}|j d dkr|qS )zDSA-r   )find).0i r   :./usr/share/crypto-policies/python/policygenerators/nss.py
<listcomp>   s    z0NSSGenerator.generate_config.<locals>.<listcomp>Zsignr   ztls-version-min=ztls-version-min=0zdtls-version-min=zdtls-version-min=0zDH-MIN=Zmin_dh_sizezDSA-MIN=Zmin_dsa_sizezRSA-MIN=Zmin_rsa_sizez"


)Zenabledappendmac_mapKeyError	curve_map
cipher_maphash_mapkey_exchange_mapsetsign_prefix_ordmapitems
startswithaddZmin_tls_versionprotocol_mapZmin_dtls_versionstrZintegers)clsZpolicypZcfgsr   ZdsaZenabled_sigalgsprefixZsigalgZminverr   r   r   generate_configd   sn    





zNSSGenerator.generate_configc              C   s  y2t jjd}t j|}|jds0| jd dS W n tk
rP   | jd Y nX tjdtj	sddS t
 \}}d}z^tj|d}|j| W d Q R X ytd	| d
 dd}W n tk
r   | jd Y nX W d tj| X |r | jd | jd|  dS dS )NZnss3s   3.66z:Skipping nss-policy-check due to nss being older than 3.66Tz(Cannot determine nss version with ctypesz/usr/bin/nss-policy-check   wz/usr/bin/nss-policy-check z >/dev/null)shellz+/usr/bin/nss-policy-check: Execution failedz)There is an error in NSS generated policyz
Policy:
%sF)ctypesutilZfind_libraryZCDLLZNSS_VersionCheckZeprintAttributeErrorosaccessX_OKr   fdopenwriter   r   unlink)r&   configZnss_pathZnss_libfdpathZretfr   r   r   test_config   s6    




zNSSGenerator.test_configN)__name__
__module____qualname__ZCONFIG_NAMEZSCOPESr   r   r   r   r   r$   r    classmethodr*   r;   r   r   r   r   r      sz   
Hr   )
subprocessr   r   Ztempfiler   r.   Zctypes.utilr1   Zconfiggeneratorr   r   r   r   r   r   <module>   s   