
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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 q¬X q¬W x>|d	 D ]2}y| j|| j| ƒ}W qê tk
�r   Y qêX qêW 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 �q¦W �q–W |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   