a
    if                     @   sT   d dl Z d dlZ d dlZd dlmZmZ d dlmZ ddlm	Z	 G dd de	Z
dS )    N)CalledProcessErrorcall)mkstemp   )ConfigGeneratorc                   @   s   e Zd ZdZh dZ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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&d'
Z	d(d)d*d+d,d-d.d/Z
d0d1d2d3d4Zed5d6 Zed7d8 Zd9S ):NSSGeneratornss>   r   ZsslZtls 	HMAC-SHA1HMAC-MD5zHMAC-SHA256zHMAC-SHA384zHMAC-SHA512)ZAEADr
   r   z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	SHAKE-128z	SHAKE-256ZGOSTR94Z
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RSADHE-RSADHE-DSSzECDHE-RSA:ECDHE-ECDSAzECDH-RSA:ECDH-ECDSAzDH-RSA:DH-DSS)
ZPSKzDHE-PSKz	ECDHE-PSKzRSA-PSKr   r   r   Z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ECDSAZDSA)zRSA-PSS-zRSA-zECDSA-zDSA-c              	   C   s  |j }d}|d7 }|d7 }|d7 }d}|d D ].}z| || j| }W q. tyZ   Y q.0 q.|d D ].}z| || j| }W qf ty   Y qf0 qf|d D ].}z| || j| }W q ty   Y q0 q|d	 D ]0}z| || j| }W q ty   Y q0 q|d
 D ]2}z| || j| }W n ty>   Y n0 qt	dddk}|j
d dkrv|sv| |d}t }|d D ]N}| j D ]<\}}	||r|	|vr||	 | ||	} qqq|jr| j|j }
| |d|
 }n| |d}|jr,| j|j }
| |d|
 }n| |d}| |dt|jd  }| |dt|jd  }| |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_exchangeZNSS_NO_TLS_REQUIRE_EMS01Z__emsZENFORCEzTLS-REQUIRE-EMSsignz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osgetenvZenumssetsign_prefix_ordmapitems
startswithaddZmin_tls_versionprotocol_mapZmin_dtls_versionstrZintegers)clsZpolicypZcfgsiZno_tls_require_emsZenabled_sigalgsprefixZsigalgZminver r.   9/usr/share/crypto-policies/python/policygenerators/nss.pygenerate_configf   sn    


zNSSGenerator.generate_configc              	   C   sV  t jd}t |}tdddk}d}z|ds:d}W n tyX   | d Y n0 |rf|sfd	nd
}t	 \}}d}	zt
|d}
|
| W d    n1 s0    Y  ztd| d| ddd}	W n ty   | d Y n0 W t| nt| 0 |	dkr.| d | d|  dS |	rR| d | d|  dS dS )NZnss3ZNSS_LAXr   r   Ts   3.80Fz9Cannot determine nss version with ctypes, assuming >=3.80z-f value -f identifierr	      wz/usr/bin/nss-policy-check  z
>/dev/null)shellz+/usr/bin/nss-policy-check: Execution failed   z*There is a warning in NSS generated policyzPolicy:
z)There is an error in NSS generated policy)ctypesutilZfind_libraryZCDLLr    r!   ZNSS_VersionCheckAttributeErrorZeprintr   fdopenwriter   r   unlink)r)   ZconfigZnss_pathZnss_libZnss_laxZnss_is_lax_by_defaultoptionsfdpathretfr.   r.   r/   test_config   sH    


(



zNSSGenerator.test_configN)__name__
__module____qualname__ZCONFIG_NAMEZSCOPESr   r   r   r   r   r'   r#   classmethodr0   rA   r.   r.   r.   r/   r      s   
	
Gr   )r6   Zctypes.utilr    
subprocessr   r   Ztempfiler   Zconfiggeneratorr   r   r.   r.   r.   r/   <module>   s   