a
    kÄ#du  ã                   @   sÂ  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlm  mZ dd	„ Zi Zi ZG d
d„ deƒZG dd„ de ee¡ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZ G d$d%„ d%eƒZ!G d&d'„ d'eƒZ"G d(d)„ d)eƒZ#G d*d+„ d+eƒZ$G d,d-„ d-eƒZ%G d.d/„ d/eƒZ&G d0d1„ d1eƒZ'G d2d3„ d3eƒZ(G d4d5„ d5eƒZ)G d6d7„ d7eƒZ*G d8d9„ d9eƒZ+G d:d;„ d;eƒZ,G d<d=„ d=eƒZ-G d>d?„ d?eƒZ.G d@dA„ dAeƒZ/G dBdC„ dCeƒZ0G dDdE„ dEeƒZ1G dFdG„ dGeƒZ2G dHdI„ dIeƒZ3G dJdK„ dKeƒZ4G dLdM„ dMeƒZ5G dNdO„ dOeƒZ6G dPdQ„ dQeƒZ7G dRdS„ dSeƒZ8G dTdU„ dUeƒZ9G dVdW„ dWeƒZ:G dXdY„ dYeƒZ;G dZd[„ d[eƒZ<G d\d]„ d]eƒZ=G d^d_„ d_eƒZ>G d`da„ daeƒZ?G dbdc„ dceƒZ@G ddde„ deeƒZAG dfdg„ dgeƒZBG dhdi„ dieƒZCG djdk„ dkeƒZDG dldm„ dmeƒZEG dndo„ doeƒZFG dpdq„ dqeƒZGG drds„ dseƒZHG dtdu„ dueƒZIG dvdw„ dweƒZJG dxdy„ dyeƒZKG dzd{„ d{eƒZLG d|d}„ d}eƒZMG d~d„ deƒZNG d€d�„ d�eƒZOG d‚dƒ„ dƒeƒZPG d„d…„ d…eƒZQG d†d‡„ d‡eƒZRG dˆd‰„ d‰eƒZSG dŠd‹„ d‹eƒZTG dŒd�„ d�eƒZUG dŽd�„ d�eƒZVG d�d‘„ d‘eƒZWG d’d“„ d“eƒZXG d”d•„ d•eƒZYG d–d—„ d—eƒZZG d˜d™„ d™eƒZ[G dšd›„ d›eƒZ\G dœd�„ d�eƒZ]G dždŸ„ dŸeƒZ^G d d¡„ d¡eƒZ_G d¢d£„ d£eƒZ`G d¤d¥„ d¥eƒZaG d¦d§„ d§eƒZbG d¨d©„ d©eƒZcG dªd«„ d«eƒZdG d¬d­„ d­eƒZeG d®d¯„ d¯eƒZfG d°d±„ d±eƒZgG d²d³„ d³eƒZhG d´dµ„ dµeƒZiG d¶d·„ d·eƒZjG d¸d¹„ d¹eƒZkG dºd»„ d»eƒZlG d¼d½„ d½eƒZmG d¾d¿„ d¿eƒZnG dÀdÁ„ dÁeƒZoG dÂdÃ„ dÃeƒZpG dÄdÅ„ dÅeƒZqG dÆdÇ„ dÇeƒZrG dÈdÉ„ dÉeƒZsG dÊdË„ dËeƒZtG dÌdÍ„ dÍeƒZuG dÎdÏ„ dÏeƒZvG dÐdÑ„ dÑeƒZwG dÒdÓ„ dÓeƒZxG dÔdÕ„ dÕeƒZyG dÖd×„ d×eƒZzG dØdÙ„ dÙeƒZ{G dÚdÛ„ dÛeƒZ|G dÜdÝ„ dÝeƒZ}G dÞdß„ dßeƒZ~G dàdá„ dáeƒZG dâdã„ dãeƒZ€G dädå„ dåeƒZ�G dædç„ dçeƒZ‚G dèdé„ déeƒZƒG dêdë„ dëeƒZ„G dìdí„ díeƒZ…G dîdï„ dïeƒZ†G dðdñ„ dñeƒZ‡G dòdó„ dóeƒZˆG dôdõ„ dõeƒZ‰G död÷„ d÷eƒZŠG dødù„ dùeƒZ‹G dúdû„ dûeƒZŒG düdý„ dýeƒZ�G dþdÿ„ dÿeƒZŽG �d �d„ �deƒZ�G �d�d„ �deƒZ�G �d�d„ �deƒZ‘G �d�d„ �deƒZ’G �d�d	„ �d	eƒZ“G �d
�d„ �deƒZ”G �d�d„ �deƒZ•G �d�d„ �deƒZ–G �d�d„ �deƒZ—G �d�d„ �deƒZ˜G �d�d„ �deƒZ™G �d�d„ �deƒZšG �d�d„ �deƒZ›G �d�d„ �deƒZœG �d�d„ �deƒZ�G �d�d„ �deƒZžG �d �d!„ �d!eƒZŸG �d"�d#„ �d#eƒZ G �d$�d%„ �d%eƒZ¡G �d&�d'„ �d'eƒZ¢G �d(�d)„ �d)eƒZ£G �d*�d+„ �d+eƒZ¤G �d,�d-„ �d-eƒZ¥G �d.�d/„ �d/eƒZ¦G �d0�d1„ �d1eƒZ§G �d2�d3„ �d3eƒZ¨G �d4�d5„ �d5eƒZ©G �d6�d7„ �d7eƒZªG �d8�d9„ �d9eƒZ«G �d:�d;„ �d;eƒZ¬G �d<�d=„ �d=eƒZ­G �d>�d?„ �d?eƒZ®G �d@�dA„ �dAeƒZ¯G �dB�dC„ �dCeƒZ°G �dD�dE„ �dEeƒZ±G �dF�dG„ �dGeƒZ²G �dH�dI„ �dIeƒZ³G �dJ�dK„ �dKeƒZ´G �dL�dM„ �dMeƒZµG �dN�dO„ �dOeƒZ¶G �dP�dQ„ �dQeƒZ·G �dR�dS„ �dSeƒZ¸G �dT�dU„ �dUeƒZ¹G �dV�dW„ �dWeƒZºG �dX�dY„ �dYeƒZ»G �dZ�d[„ �d[eƒZ¼G �d\�d]„ �d]eƒZ½G �d^�d_„ �d_eƒZ¾G �d`�da„ �daeƒZ¿G �db�dc„ �dceƒZÀG �dd�de„ �deeƒZÁG �df�dg„ �dgeƒZÂG �dh�di„ �dieƒZÃG �dj�dk„ �dkeƒZÄG �dl�dm„ �dmeƒZÅG �dn�do„ �doeƒZÆG �dp�dq„ �dqeƒZÇG �dr�ds„ �dseƒZÈG �dt�du„ �dueƒZÉG �dv�dw„ �dweƒZÊG �dx�dy„ �dyeƒZËG �dz�d{„ �d{eƒZÌG �d|�d}„ �d}eƒZÍG �d~�d„ �deƒZÎG �d€�d�„ �d�eƒZÏG �d‚�dƒ„ �dƒeƒZÐG �d„�d…„ �d…eƒZÑG �d†�d‡„ �d‡eƒZÒG �dˆ�d‰„ �d‰eƒZÓG �dŠ�d‹„ �d‹eƒZÔG �dŒ�d�„ �d�eƒZÕG �dŽ�d�„ �d�eƒZÖG �d��d‘„ �d‘eƒZ×G �d’�d“„ �d“eƒZØG �d”�d•„ �d•eƒZÙG �d–�d—„ �d—eƒZÚG �d˜�d™„ �d™eƒZÛG �dš�d›„ �d›eƒZÜG �dœ�d�„ �d�eƒZÝG �dž�dŸ„ �dŸeƒZÞG �d �d¡„ �d¡eƒZßG �d¢�d£„ �d£eƒZàG �d¤�d¥„ �d¥eƒZáG �d¦�d§„ �d§eƒZâG �d¨�d©„ �d©eƒZãG �dª�d«„ �d«eƒZäG �d¬�d­„ �d­eƒZåG �d®�d¯„ �d¯eƒZæG �d°�d±„ �d±eƒZçG �d²�d³„ �d³eƒZèG �d´�dµ„ �dµeƒZéG �d¶�d·„ �d·eƒZêG �d¸�d¹„ �d¹eƒZëG �dº�d»„ �d»eƒZìG �d¼�d½„ �d½eƒZíG �d¾�d¿„ �d¿eƒZîG �dÀ�dÁ„ �dÁeƒZïG �dÂ�dÃ„ �dÃeƒZðG �dÄ�dÅ„ �dÅeƒZñG �dÆ�dÇ„ �dÇeƒZòG �dÈ�dÉ„ �dÉeƒZóG �dÊ�dË„ �dËeƒZôG �dÌ�dÍ„ �dÍeƒZõG �dÎ�dÏ„ �dÏeƒZöG �dÐ�dÑ„ �dÑeƒZ÷G �dÒ�dÓ„ �dÓeƒZøG �dÔ�dÕ„ �dÕeƒZùG �dÖ�d×„ �d×eƒZúG �dØ�dÙ„ �dÙeƒZûG �dÚ�dÛ„ �dÛeƒZüG �dÜ�dÝ„ �dÝeƒZýG �dÞ�dß„ �dßeƒZþG �dà�dá„ �dáeƒZÿG �dâ�dã„ �dãeƒ�Z G �dä�då„ �dåeƒ�ZG �dæ�dç„ �dçeƒ�ZG �dè�dé„ �déeƒ�ZG �dê�dë„ �dëeƒ�ZG �dì�dí„ �díeƒ�ZG �dî�dï„ �dïeƒ�ZG �dð�dñ„ �dñeƒ�ZG �dò�dó„ �dóeƒ�ZG �dô�dõ„ �dõeƒ�Z	G �dö�d÷„ �d÷eƒ�Z
G �dø�dù„ �dùeƒ�ZG �dú�dû„ �dûeƒ�ZG �dü�dý„ �dýeƒ�ZG �dþ�dÿ„ �dÿeƒ�ZG �d �d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d	„ �d	eƒ�ZG �d
�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d �d!„ �d!eƒ�ZG �d"�d#„ �d#eƒ�Z G �d$�d%„ �d%eƒ�Z!G �d&�d'„ �d'eƒ�Z"G �d(�d)„ �d)eƒ�Z#G �d*�d+„ �d+eƒ�Z$G �d,�d-„ �d-eƒ�Z%G �d.�d/„ �d/eƒ�Z&G �d0�d1„ �d1eƒ�Z'G �d2�d3„ �d3eƒ�Z(G �d4�d5„ �d5eƒ�Z)G �d6�d7„ �d7eƒ�Z*G �d8�d9„ �d9eƒ�Z+G �d:�d;„ �d;eƒ�Z,G �d<�d=„ �d=eƒ�Z-G �d>�d?„ �d?eƒ�Z.G �d@�dA„ �dAeƒ�Z/G �dB�dC„ �dCeƒ�Z0G �dD�dE„ �dEeƒ�Z1G �dF�dG„ �dGeƒ�Z2�dHe�dI< �dJe�dK< �dL�dM„ �Z3dS (N  zŸ
TLS cipher suites.

A comprehensive list of specified cipher suites can be consulted at:
https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml
é    )Úabsolute_import)Ú_tls_kx_algs)Ú_tls_hash_algs)Ú_tls_hmac_algs)Ú_tls_cipher_algsNc                 C   sl  d}|   d¡rþ| dd… }| d¡s.| d¡r`| d¡\}}t |¡}t d¡}t |¡}d}nœd	|v r‚| d¡\}}t |¡}nd
}t d¡}| d¡d }t |¡}|dt|ƒd  … }	|rÊ|	d7 }	t |	¡}d}|durü|jdkrüd| }
t	 |
¡}n`|   d¡�r^| dd… }t d¡}| d¡\}	}t |	 
d¡¡}|	 d¡|_t	 d¡}t |¡}|||||fS )zœ
    Return the 3-tuple made of the Key Exchange Algorithm class, the Cipher
    class and the HMAC class, through the parsing of the ciphersuite name.
    FZTLSé   NZCCMZCCM_8Z_WITH_ÚSHA256ZWITHTÚTLS13Ú_éÿÿÿÿé   Z_TLS13ÚaeadzHMAC-%sZSSLé   ZSSLv2Z	_EXPORT40z	HMAC-NULL)Ú
startswithÚendswithÚsplitr   Úgetr   r   ÚlenÚtyper   ÚrstripZexport)Zciphersuite_nameÚtls1_3ÚsZkx_nameÚkx_algÚhash_algÚ
cipher_algÚhmac_algÚ	hash_nameZcipher_nameZ	hmac_name© r   úU/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/tls/crypto/suites.pyÚget_algs_from_ciphersuite_name   sB    









r   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )Ú_GenericCipherSuiteMetaclassa  
    Cipher suite classes are automatically registered through this metaclass.
    Their name attribute equates their respective class name.

    We also pre-compute every expected length of the key block to be generated,
    which may vary according to the current tls_version. The default is set to
    the TLS 1.2 length, and the value should be set at class instantiation.

    Regarding the AEAD cipher suites, note that the 'hmac_alg' attribute will
    be set to None. Yet, we always need a 'hash_alg' for the PRF.
    c                    s6  |  d¡}|dk�r
t|ƒ\}}}}}	|d u sB|d u sB|d u rL|	sLd|d< n¶d|d< ||d< ||d< ||d< ||d	< ||d
< |	�sd|j }
|jdks |jdkr®|
d|j 7 }
|
}|jdkrÌ|d|j 7 }n&|jdkrò|d|j 7 }|
d|j 7 }
||d< |
|d< |t|< tt| ƒ 	| |||¡}|dk�r2|t
|< |S )NÚvalÚ_GenericCipherSuiteFÚusableTÚnamer   r   r   r   é   ÚstreamÚblockr   Ú_key_block_len_v1_0Úkey_block_len)r   r   Zkey_lenr   Ú
block_sizeZfixed_iv_lenÚ_tls_cipher_suitesÚsuperr    Ú__new__Ú_tls_cipher_suites_cls)ÚclsZcs_nameÚbasesÚdctZcs_valÚkxÚcZhmÚhr   Zkb_lenZkb_len_v1_0Z	the_class©Ú	__class__r   r   r-   W   s@    





ý
z$_GenericCipherSuiteMetaclass.__new__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   Ú__classcell__r   r   r5   r   r    K   s   r    c                       s   e Zd Zd‡ fdd„	Z‡  ZS )r"   é  c                    s"   t t| ƒ ¡  |dkr| j| _dS )a  
        Most of the attributes are fixed and have already been set by the
        metaclass, but we still have to provide tls_version differentiation.

        For now, the key_block_len remains the only application if this.
        Indeed for TLS 1.1+, when using a block cipher, there are no implicit
        IVs derived from the master secret. Note that an overlong key_block_len
        would not affect the secret generation (the trailing bytes would
        simply be discarded), but we still provide this for completeness.
        i  N)r,   r"   Ú__init__r(   r)   )ÚselfZtls_versionr5   r   r   r=   ƒ   s    z_GenericCipherSuite.__init__)r<   )r7   r8   r9   r=   r;   r   r   r5   r   r"   ‚   s   r"   c                   @   s   e Zd ZdZdS )ÚTLS_NULL_WITH_NULL_NULLr   N©r7   r8   r9   r!   r   r   r   r   r?   “   s   r?   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_NULL_MD5r   Nr@   r   r   r   r   rA   —   s   rA   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_NULL_SHAr%   Nr@   r   r   r   r   rB   ›   s   rB   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_EXPORT_WITH_RC4_40_MD5é   Nr@   r   r   r   r   rC   Ÿ   s   rC   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_RC4_128_MD5r   Nr@   r   r   r   r   rE   £   s   rE   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_RC4_128_SHAé   Nr@   r   r   r   r   rF   §   s   rF   c                   @   s   e Zd ZdZdS )Ú"TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5é   Nr@   r   r   r   r   rH   «   s   rH   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_IDEA_CBC_SHAr   Nr@   r   r   r   r   rJ   ¯   s   rJ   c                   @   s   e Zd ZdZdS )Ú!TLS_RSA_EXPORT_WITH_DES40_CBC_SHAé   Nr@   r   r   r   r   rK   ³   s   rK   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_DES_CBC_SHAé	   Nr@   r   r   r   r   rM   ·   s   rM   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_3DES_EDE_CBC_SHAé
   Nr@   r   r   r   r   rO   »   s   rO   c                   @   s   e Zd ZdZdS )Ú$TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHAé   Nr@   r   r   r   r   rQ   ¿   s   rQ   c                   @   s   e Zd ZdZdS )ÚTLS_DH_DSS_WITH_DES_CBC_SHAé   Nr@   r   r   r   r   rS   Ã   s   rS   c                   @   s   e Zd ZdZdS )Ú TLS_DH_DSS_WITH_3DES_EDE_CBC_SHAé   Nr@   r   r   r   r   rU   Ç   s   rU   c                   @   s   e Zd ZdZdS )Ú$TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHAé   Nr@   r   r   r   r   rW   Ë   s   rW   c                   @   s   e Zd ZdZdS )ÚTLS_DH_RSA_WITH_DES_CBC_SHAé   Nr@   r   r   r   r   rY   Ï   s   rY   c                   @   s   e Zd ZdZdS )Ú TLS_DH_RSA_WITH_3DES_EDE_CBC_SHAé   Nr@   r   r   r   r   r[   Ó   s   r[   c                   @   s   e Zd ZdZdS )Ú%TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHAé   Nr@   r   r   r   r   r]   ×   s   r]   c                   @   s   e Zd ZdZdS )ÚTLS_DHE_DSS_WITH_DES_CBC_SHAé   Nr@   r   r   r   r   r_   Û   s   r_   c                   @   s   e Zd ZdZdS )Ú!TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHAé   Nr@   r   r   r   r   ra   ß   s   ra   c                   @   s   e Zd ZdZdS )Ú%TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHAé   Nr@   r   r   r   r   rc   ã   s   rc   c                   @   s   e Zd ZdZdS )ÚTLS_DHE_RSA_WITH_DES_CBC_SHAé   Nr@   r   r   r   r   re   ç   s   re   c                   @   s   e Zd ZdZdS )Ú!TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHAé   Nr@   r   r   r   r   rg   ë   s   rg   c                   @   s   e Zd ZdZdS )Ú"TLS_DH_anon_EXPORT_WITH_RC4_40_MD5é   Nr@   r   r   r   r   ri   ï   s   ri   c                   @   s   e Zd ZdZdS )ÚTLS_DH_anon_WITH_RC4_128_MD5é   Nr@   r   r   r   r   rk   ó   s   rk   c                   @   s   e Zd ZdZdS )Ú%TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHAé   Nr@   r   r   r   r   rm   ÷   s   rm   c                   @   s   e Zd ZdZdS )ÚTLS_DH_anon_WITH_DES_CBC_SHAé   Nr@   r   r   r   r   ro   û   s   ro   c                   @   s   e Zd ZdZdS )Ú!TLS_DH_anon_WITH_3DES_EDE_CBC_SHAé   Nr@   r   r   r   r   rq   ÿ   s   rq   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_DES_CBC_SHAé   Nr@   r   r   r   r   rs     s   rs   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_3DES_EDE_CBC_SHAé   Nr@   r   r   r   r   ru     s   ru   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_RC4_128_SHAé    Nr@   r   r   r   r   rw     s   rw   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_IDEA_CBC_SHAé!   Nr@   r   r   r   r   ry     s   ry   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_DES_CBC_MD5é"   Nr@   r   r   r   r   r{     s   r{   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_3DES_EDE_CBC_MD5é#   Nr@   r   r   r   r   r}     s   r}   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_RC4_128_MD5é$   Nr@   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_WITH_IDEA_CBC_MD5é%   Nr@   r   r   r   r   r�     s   r�   c                   @   s   e Zd ZdZdS )Ú"TLS_KRB5_EXPORT_WITH_DES40_CBC_SHAé&   Nr@   r   r   r   r   rƒ   #  s   rƒ   c                   @   s   e Zd ZdZdS )Ú#TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHAé'   Nr@   r   r   r   r   r…   '  s   r…   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_EXPORT_WITH_RC4_40_SHAé(   Nr@   r   r   r   r   r‡   +  s   r‡   c                   @   s   e Zd ZdZdS )Ú"TLS_KRB5_EXPORT_WITH_DES40_CBC_MD5é)   Nr@   r   r   r   r   r‰   /  s   r‰   c                   @   s   e Zd ZdZdS )Ú#TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5é*   Nr@   r   r   r   r   r‹   3  s   r‹   c                   @   s   e Zd ZdZdS )ÚTLS_KRB5_EXPORT_WITH_RC4_40_MD5é+   Nr@   r   r   r   r   r�   7  s   r�   c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_NULL_SHAé,   Nr@   r   r   r   r   r�   ;  s   r�   c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_NULL_SHAé-   Nr@   r   r   r   r   r‘   ?  s   r‘   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_PSK_WITH_NULL_SHAé.   Nr@   r   r   r   r   r“   C  s   r“   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_128_CBC_SHAé/   Nr@   r   r   r   r   r•   G  s   r•   c                   @   s   e Zd ZdZdS )ÚTLS_DH_DSS_WITH_AES_128_CBC_SHAé0   Nr@   r   r   r   r   r—   K  s   r—   c                   @   s   e Zd ZdZdS )ÚTLS_DH_RSA_WITH_AES_128_CBC_SHAé1   Nr@   r   r   r   r   r™   O  s   r™   c                   @   s   e Zd ZdZdS )Ú TLS_DHE_DSS_WITH_AES_128_CBC_SHAé2   Nr@   r   r   r   r   r›   S  s   r›   c                   @   s   e Zd ZdZdS )Ú TLS_DHE_RSA_WITH_AES_128_CBC_SHAé3   Nr@   r   r   r   r   r�   W  s   r�   c                   @   s   e Zd ZdZdS )Ú TLS_DH_anon_WITH_AES_128_CBC_SHAé4   Nr@   r   r   r   r   rŸ   [  s   rŸ   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_256_CBC_SHAé5   Nr@   r   r   r   r   r¡   _  s   r¡   c                   @   s   e Zd ZdZdS )ÚTLS_DH_DSS_WITH_AES_256_CBC_SHAé6   Nr@   r   r   r   r   r£   c  s   r£   c                   @   s   e Zd ZdZdS )ÚTLS_DH_RSA_WITH_AES_256_CBC_SHAé7   Nr@   r   r   r   r   r¥   g  s   r¥   c                   @   s   e Zd ZdZdS )Ú TLS_DHE_DSS_WITH_AES_256_CBC_SHAé8   Nr@   r   r   r   r   r§   k  s   r§   c                   @   s   e Zd ZdZdS )Ú TLS_DHE_RSA_WITH_AES_256_CBC_SHAé9   Nr@   r   r   r   r   r©   o  s   r©   c                   @   s   e Zd ZdZdS )Ú TLS_DH_anon_WITH_AES_256_CBC_SHAé:   Nr@   r   r   r   r   r«   s  s   r«   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_NULL_SHA256é;   Nr@   r   r   r   r   r­   w  s   r­   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_128_CBC_SHA256é<   Nr@   r   r   r   r   r¯   {  s   r¯   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_256_CBC_SHA256é=   Nr@   r   r   r   r   r±     s   r±   c                   @   s   e Zd ZdZdS )Ú"TLS_DH_DSS_WITH_AES_128_CBC_SHA256é>   Nr@   r   r   r   r   r³   ƒ  s   r³   c                   @   s   e Zd ZdZdS )Ú"TLS_DH_RSA_WITH_AES_128_CBC_SHA256é?   Nr@   r   r   r   r   rµ   ‡  s   rµ   c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_DSS_WITH_AES_128_CBC_SHA256é@   Nr@   r   r   r   r   r·   ‹  s   r·   c                   @   s   e Zd ZdZdS )Ú!TLS_RSA_WITH_CAMELLIA_128_CBC_SHAéA   Nr@   r   r   r   r   r¹   �  s   r¹   c                   @   s   e Zd ZdZdS )Ú$TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHAéB   Nr@   r   r   r   r   r»   “  s   r»   c                   @   s   e Zd ZdZdS )Ú$TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHAéC   Nr@   r   r   r   r   r½   —  s   r½   c                   @   s   e Zd ZdZdS )Ú%TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHAéD   Nr@   r   r   r   r   r¿   ›  s   r¿   c                   @   s   e Zd ZdZdS )Ú%TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHAéE   Nr@   r   r   r   r   rÁ   Ÿ  s   rÁ   c                   @   s   e Zd ZdZdS )Ú%TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHAéF   Nr@   r   r   r   r   rÃ   £  s   rÃ   c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_RSA_WITH_AES_128_CBC_SHA256ég   Nr@   r   r   r   r   rÅ   §  s   rÅ   c                   @   s   e Zd ZdZdS )Ú"TLS_DH_DSS_WITH_AES_256_CBC_SHA256éh   Nr@   r   r   r   r   rÇ   «  s   rÇ   c                   @   s   e Zd ZdZdS )Ú"TLS_DH_RSA_WITH_AES_256_CBC_SHA256éi   Nr@   r   r   r   r   rÉ   ¯  s   rÉ   c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_DSS_WITH_AES_256_CBC_SHA256éj   Nr@   r   r   r   r   rË   ³  s   rË   c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_RSA_WITH_AES_256_CBC_SHA256ék   Nr@   r   r   r   r   rÍ   ·  s   rÍ   c                   @   s   e Zd ZdZdS )Ú#TLS_DH_anon_WITH_AES_128_CBC_SHA256él   Nr@   r   r   r   r   rÏ   »  s   rÏ   c                   @   s   e Zd ZdZdS )Ú#TLS_DH_anon_WITH_AES_256_CBC_SHA256ém   Nr@   r   r   r   r   rÑ   ¿  s   rÑ   c                   @   s   e Zd ZdZdS )Ú!TLS_RSA_WITH_CAMELLIA_256_CBC_SHAé„   Nr@   r   r   r   r   rÓ   Ã  s   rÓ   c                   @   s   e Zd ZdZdS )Ú$TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHAé…   Nr@   r   r   r   r   rÕ   Ç  s   rÕ   c                   @   s   e Zd ZdZdS )Ú$TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHAé†   Nr@   r   r   r   r   r×   Ë  s   r×   c                   @   s   e Zd ZdZdS )Ú%TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHAé‡   Nr@   r   r   r   r   rÙ   Ï  s   rÙ   c                   @   s   e Zd ZdZdS )Ú%TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHAéˆ   Nr@   r   r   r   r   rÛ   Ó  s   rÛ   c                   @   s   e Zd ZdZdS )Ú%TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHAé‰   Nr@   r   r   r   r   rÝ   ×  s   rÝ   c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_RC4_128_SHAéŠ   Nr@   r   r   r   r   rß   Û  s   rß   c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_3DES_EDE_CBC_SHAé‹   Nr@   r   r   r   r   rá   ß  s   rá   c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_128_CBC_SHAéŒ   Nr@   r   r   r   r   rã   ã  s   rã   c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_256_CBC_SHAé�   Nr@   r   r   r   r   rå   ç  s   rå   c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_RC4_128_SHAéŽ   Nr@   r   r   r   r   rç   ë  s   rç   c                   @   s   e Zd ZdZdS )Ú!TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHAé�   Nr@   r   r   r   r   ré   ï  s   ré   c                   @   s   e Zd ZdZdS )Ú TLS_DHE_PSK_WITH_AES_128_CBC_SHAé�   Nr@   r   r   r   r   rë   ó  s   rë   c                   @   s   e Zd ZdZdS )Ú TLS_DHE_PSK_WITH_AES_256_CBC_SHAé‘   Nr@   r   r   r   r   rí   ÷  s   rí   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_PSK_WITH_RC4_128_SHAé’   Nr@   r   r   r   r   rï   û  s   rï   c                   @   s   e Zd ZdZdS )Ú!TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHAé“   Nr@   r   r   r   r   rñ   ÿ  s   rñ   c                   @   s   e Zd ZdZdS )Ú TLS_RSA_PSK_WITH_AES_128_CBC_SHAé”   Nr@   r   r   r   r   ró     s   ró   c                   @   s   e Zd ZdZdS )Ú TLS_RSA_PSK_WITH_AES_256_CBC_SHAé•   Nr@   r   r   r   r   rõ     s   rõ   c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_SEED_CBC_SHAé–   Nr@   r   r   r   r   r÷     s   r÷   c                   @   s   e Zd ZdZdS )ÚTLS_DH_DSS_WITH_SEED_CBC_SHAé—   Nr@   r   r   r   r   rù     s   rù   c                   @   s   e Zd ZdZdS )ÚTLS_DH_RSA_WITH_SEED_CBC_SHAé˜   Nr@   r   r   r   r   rû     s   rû   c                   @   s   e Zd ZdZdS )ÚTLS_DHE_DSS_WITH_SEED_CBC_SHAé™   Nr@   r   r   r   r   rý     s   rý   c                   @   s   e Zd ZdZdS )ÚTLS_DHE_RSA_WITH_SEED_CBC_SHAéš   Nr@   r   r   r   r   rÿ     s   rÿ   c                   @   s   e Zd ZdZdS )ÚTLS_DH_anon_WITH_SEED_CBC_SHAé›   Nr@   r   r   r   r   r    s   r  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_128_GCM_SHA256éœ   Nr@   r   r   r   r   r  #  s   r  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_256_GCM_SHA384é�   Nr@   r   r   r   r   r  '  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_RSA_WITH_AES_128_GCM_SHA256éž   Nr@   r   r   r   r   r  +  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_RSA_WITH_AES_256_GCM_SHA384éŸ   Nr@   r   r   r   r   r	  /  s   r	  c                   @   s   e Zd ZdZdS )Ú"TLS_DH_RSA_WITH_AES_128_GCM_SHA256é    Nr@   r   r   r   r   r  3  s   r  c                   @   s   e Zd ZdZdS )Ú"TLS_DH_RSA_WITH_AES_256_GCM_SHA384é¡   Nr@   r   r   r   r   r  7  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_DSS_WITH_AES_128_GCM_SHA256é¢   Nr@   r   r   r   r   r  ;  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_DSS_WITH_AES_256_GCM_SHA384é£   Nr@   r   r   r   r   r  ?  s   r  c                   @   s   e Zd ZdZdS )Ú"TLS_DH_DSS_WITH_AES_128_GCM_SHA256é¤   Nr@   r   r   r   r   r  C  s   r  c                   @   s   e Zd ZdZdS )Ú"TLS_DH_DSS_WITH_AES_256_GCM_SHA384é¥   Nr@   r   r   r   r   r  G  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DH_anon_WITH_AES_128_GCM_SHA256é¦   Nr@   r   r   r   r   r  K  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DH_anon_WITH_AES_256_GCM_SHA384é§   Nr@   r   r   r   r   r  O  s   r  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_128_GCM_SHA256é¨   Nr@   r   r   r   r   r  S  s   r  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_256_GCM_SHA384é©   Nr@   r   r   r   r   r  W  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_PSK_WITH_AES_128_GCM_SHA256éª   Nr@   r   r   r   r   r  [  s   r  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_PSK_WITH_AES_256_GCM_SHA384é«   Nr@   r   r   r   r   r!  _  s   r!  c                   @   s   e Zd ZdZdS )Ú#TLS_RSA_PSK_WITH_AES_128_GCM_SHA256é¬   Nr@   r   r   r   r   r#  c  s   r#  c                   @   s   e Zd ZdZdS )Ú#TLS_RSA_PSK_WITH_AES_256_GCM_SHA384é­   Nr@   r   r   r   r   r%  g  s   r%  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_128_CBC_SHA256é®   Nr@   r   r   r   r   r'  k  s   r'  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_256_CBC_SHA384é¯   Nr@   r   r   r   r   r)  o  s   r)  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_NULL_SHA256é°   Nr@   r   r   r   r   r+  s  s   r+  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_NULL_SHA384é±   Nr@   r   r   r   r   r-  w  s   r-  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_PSK_WITH_AES_128_CBC_SHA256é²   Nr@   r   r   r   r   r/  {  s   r/  c                   @   s   e Zd ZdZdS )Ú#TLS_DHE_PSK_WITH_AES_256_CBC_SHA384é³   Nr@   r   r   r   r   r1    s   r1  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_NULL_SHA256é´   Nr@   r   r   r   r   r3  ƒ  s   r3  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_NULL_SHA384éµ   Nr@   r   r   r   r   r5  ‡  s   r5  c                   @   s   e Zd ZdZdS )Ú#TLS_RSA_PSK_WITH_AES_128_CBC_SHA256é¶   Nr@   r   r   r   r   r7  ‹  s   r7  c                   @   s   e Zd ZdZdS )Ú#TLS_RSA_PSK_WITH_AES_256_CBC_SHA384é·   Nr@   r   r   r   r   r9  �  s   r9  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_PSK_WITH_NULL_SHA256é¸   Nr@   r   r   r   r   r;  “  s   r;  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_PSK_WITH_NULL_SHA384é¹   Nr@   r   r   r   r   r=  —  s   r=  c                   @   s   e Zd ZdZdS )Ú$TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256éº   Nr@   r   r   r   r   r?  ›  s   r?  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256é»   Nr@   r   r   r   r   rA  Ÿ  s   rA  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256é¼   Nr@   r   r   r   r   rC  £  s   rC  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256é½   Nr@   r   r   r   r   rE  §  s   rE  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256é¾   Nr@   r   r   r   r   rG  «  s   rG  c                   @   s   e Zd ZdZdS )Ú(TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256é¿   Nr@   r   r   r   r   rI  ¯  s   rI  c                   @   s   e Zd ZdZdS )Ú$TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256éÀ   Nr@   r   r   r   r   rK  ³  s   rK  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256éÁ   Nr@   r   r   r   r   rM  ·  s   rM  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256éÂ   Nr@   r   r   r   r   rO  »  s   rO  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256éÃ   Nr@   r   r   r   r   rQ  ¿  s   rQ  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256éÄ   Nr@   r   r   r   r   rS  Ã  s   rS  c                   @   s   e Zd ZdZdS )Ú(TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256éÅ   Nr@   r   r   r   r   rU  Ç  s   rU  c                   @   s   e Zd ZdZdS )ÚTLS_ECDH_ECDSA_WITH_NULL_SHAiÀ  Nr@   r   r   r   r   rW  Ñ  s   rW  c                   @   s   e Zd ZdZdS )ÚTLS_ECDH_ECDSA_WITH_RC4_128_SHAiÀ  Nr@   r   r   r   r   rX  Õ  s   rX  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rY  Ù  s   rY  c                   @   s   e Zd ZdZdS )Ú#TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   rZ  Ý  s   rZ  c                   @   s   e Zd ZdZdS )Ú#TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHAiÀ  Nr@   r   r   r   r   r[  á  s   r[  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_ECDSA_WITH_NULL_SHAiÀ  Nr@   r   r   r   r   r\  å  s   r\  c                   @   s   e Zd ZdZdS )Ú TLS_ECDHE_ECDSA_WITH_RC4_128_SHAiÀ  Nr@   r   r   r   r   r]  é  s   r]  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   r^  í  s   r^  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHAi	À  Nr@   r   r   r   r   r_  ñ  s   r_  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHAi
À  Nr@   r   r   r   r   r`  õ  s   r`  c                   @   s   e Zd ZdZdS )ÚTLS_ECDH_RSA_WITH_NULL_SHAiÀ  Nr@   r   r   r   r   ra  ù  s   ra  c                   @   s   e Zd ZdZdS )ÚTLS_ECDH_RSA_WITH_RC4_128_SHAiÀ  Nr@   r   r   r   r   rb  ý  s   rb  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rc    s   rc  c                   @   s   e Zd ZdZdS )Ú!TLS_ECDH_RSA_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   rd    s   rd  c                   @   s   e Zd ZdZdS )Ú!TLS_ECDH_RSA_WITH_AES_256_CBC_SHAiÀ  Nr@   r   r   r   r   re  	  s   re  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_RSA_WITH_NULL_SHAiÀ  Nr@   r   r   r   r   rf    s   rf  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_RSA_WITH_RC4_128_SHAiÀ  Nr@   r   r   r   r   rg    s   rg  c                   @   s   e Zd ZdZdS )Ú#TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rh    s   rh  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   ri    s   ri  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAiÀ  Nr@   r   r   r   r   rj    s   rj  c                   @   s   e Zd ZdZdS )ÚTLS_ECDH_anon_WITH_NULL_SHAiÀ  Nr@   r   r   r   r   rk  !  s   rk  c                   @   s   e Zd ZdZdS )ÚTLS_ECDH_anon_WITH_RC4_128_SHAiÀ  Nr@   r   r   r   r   rl  %  s   rl  c                   @   s   e Zd ZdZdS )Ú#TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rm  )  s   rm  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDH_anon_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   rn  -  s   rn  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDH_anon_WITH_AES_256_CBC_SHAiÀ  Nr@   r   r   r   r   ro  1  s   ro  c                   @   s   e Zd ZdZdS )Ú!TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rp  5  s   rp  c                   @   s   e Zd ZdZdS )Ú%TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rq  9  s   rq  c                   @   s   e Zd ZdZdS )Ú%TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHAiÀ  Nr@   r   r   r   r   rr  =  s   rr  c                   @   s   e Zd ZdZdS )Ú TLS_SRP_SHA_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   rs  A  s   rs  c                   @   s   e Zd ZdZdS )Ú$TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   rt  E  s   rt  c                   @   s   e Zd ZdZdS )Ú$TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHAiÀ  Nr@   r   r   r   r   ru  I  s   ru  c                   @   s   e Zd ZdZdS )Ú TLS_SRP_SHA_WITH_AES_256_CBC_SHAi À  Nr@   r   r   r   r   rv  M  s   rv  c                   @   s   e Zd ZdZdS )Ú$TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHAi!À  Nr@   r   r   r   r   rw  Q  s   rw  c                   @   s   e Zd ZdZdS )Ú$TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHAi"À  Nr@   r   r   r   r   rx  U  s   rx  c                   @   s   e Zd ZdZdS )Ú'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256i#À  Nr@   r   r   r   r   ry  Y  s   ry  c                   @   s   e Zd ZdZdS )Ú'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384i$À  Nr@   r   r   r   r   rz  ]  s   rz  c                   @   s   e Zd ZdZdS )Ú&TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256i%À  Nr@   r   r   r   r   r{  a  s   r{  c                   @   s   e Zd ZdZdS )Ú&TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384i&À  Nr@   r   r   r   r   r|  e  s   r|  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256i'À  Nr@   r   r   r   r   r}  i  s   r}  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384i(À  Nr@   r   r   r   r   r~  m  s   r~  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256i)À  Nr@   r   r   r   r   r  q  s   r  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384i*À  Nr@   r   r   r   r   r€  u  s   r€  c                   @   s   e Zd ZdZdS )Ú'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256i+À  Nr@   r   r   r   r   r�  y  s   r�  c                   @   s   e Zd ZdZdS )Ú'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384i,À  Nr@   r   r   r   r   r‚  }  s   r‚  c                   @   s   e Zd ZdZdS )Ú&TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256i-À  Nr@   r   r   r   r   rƒ  �  s   rƒ  c                   @   s   e Zd ZdZdS )Ú&TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384i.À  Nr@   r   r   r   r   r„  …  s   r„  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256i/À  Nr@   r   r   r   r   r…  ‰  s   r…  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384i0À  Nr@   r   r   r   r   r†  �  s   r†  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256i1À  Nr@   r   r   r   r   r‡  ‘  s   r‡  c                   @   s   e Zd ZdZdS )Ú$TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384i2À  Nr@   r   r   r   r   rˆ  •  s   rˆ  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_PSK_WITH_RC4_128_SHAi3À  Nr@   r   r   r   r   r‰  ™  s   r‰  c                   @   s   e Zd ZdZdS )Ú#TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHAi4À  Nr@   r   r   r   r   rŠ  �  s   rŠ  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDHE_PSK_WITH_AES_128_CBC_SHAi5À  Nr@   r   r   r   r   r‹  ¡  s   r‹  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDHE_PSK_WITH_AES_256_CBC_SHAi6À  Nr@   r   r   r   r   rŒ  ¥  s   rŒ  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256i7À  Nr@   r   r   r   r   r�  ©  s   r�  c                   @   s   e Zd ZdZdS )Ú%TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384i8À  Nr@   r   r   r   r   rŽ  ­  s   rŽ  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_PSK_WITH_NULL_SHAi9À  Nr@   r   r   r   r   r�  ±  s   r�  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_PSK_WITH_NULL_SHA256i:À  Nr@   r   r   r   r   r�  µ  s   r�  c                   @   s   e Zd ZdZdS )ÚTLS_ECDHE_PSK_WITH_NULL_SHA384i;À  Nr@   r   r   r   r   r‘  ¹  s   r‘  c                   @   s   e Zd ZdZdS )Ú,TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256irÀ  Nr@   r   r   r   r   r’  ¿  s   r’  c                   @   s   e Zd ZdZdS )Ú,TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384isÀ  Nr@   r   r   r   r   r“  Ã  s   r“  c                   @   s   e Zd ZdZdS )Ú+TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256itÀ  Nr@   r   r   r   r   r”  Ç  s   r”  c                   @   s   e Zd ZdZdS )Ú+TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384iuÀ  Nr@   r   r   r   r   r•  Ë  s   r•  c                   @   s   e Zd ZdZdS )Ú*TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256ivÀ  Nr@   r   r   r   r   r–  Ï  s   r–  c                   @   s   e Zd ZdZdS )Ú*TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384iwÀ  Nr@   r   r   r   r   r—  Ó  s   r—  c                   @   s   e Zd ZdZdS )Ú)TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256ixÀ  Nr@   r   r   r   r   r˜  ×  s   r˜  c                   @   s   e Zd ZdZdS )Ú)TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384iyÀ  Nr@   r   r   r   r   r™  Û  s   r™  c                   @   s   e Zd ZdZdS )Ú$TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256izÀ  Nr@   r   r   r   r   rš  ß  s   rš  c                   @   s   e Zd ZdZdS )Ú$TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384i{À  Nr@   r   r   r   r   r›  ã  s   r›  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256i|À  Nr@   r   r   r   r   rœ  ç  s   rœ  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384i}À  Nr@   r   r   r   r   r�  ë  s   r�  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256i~À  Nr@   r   r   r   r   rž  ï  s   rž  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384iÀ  Nr@   r   r   r   r   rŸ  ó  s   rŸ  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256i€À  Nr@   r   r   r   r   r   ÷  s   r   c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384i�À  Nr@   r   r   r   r   r¡  û  s   r¡  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256i‚À  Nr@   r   r   r   r   r¢  ÿ  s   r¢  c                   @   s   e Zd ZdZdS )Ú'TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384iƒÀ  Nr@   r   r   r   r   r£    s   r£  c                   @   s   e Zd ZdZdS )Ú(TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256i„À  Nr@   r   r   r   r   r¤    s   r¤  c                   @   s   e Zd ZdZdS )Ú(TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384i…À  Nr@   r   r   r   r   r¥    s   r¥  c                   @   s   e Zd ZdZdS )Ú,TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256i†À  Nr@   r   r   r   r   r¦    s   r¦  c                   @   s   e Zd ZdZdS )Ú,TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384i‡À  Nr@   r   r   r   r   r§    s   r§  c                   @   s   e Zd ZdZdS )Ú+TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256iˆÀ  Nr@   r   r   r   r   r¨    s   r¨  c                   @   s   e Zd ZdZdS )Ú+TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384i‰À  Nr@   r   r   r   r   r©    s   r©  c                   @   s   e Zd ZdZdS )Ú*TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256iŠÀ  Nr@   r   r   r   r   rª    s   rª  c                   @   s   e Zd ZdZdS )Ú*TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384i‹À  Nr@   r   r   r   r   r«  #  s   r«  c                   @   s   e Zd ZdZdS )Ú)TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256iŒÀ  Nr@   r   r   r   r   r¬  '  s   r¬  c                   @   s   e Zd ZdZdS )Ú)TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384i�À  Nr@   r   r   r   r   r­  +  s   r­  c                   @   s   e Zd ZdZdS )Ú$TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256iŽÀ  Nr@   r   r   r   r   r®  /  s   r®  c                   @   s   e Zd ZdZdS )Ú$TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384i�À  Nr@   r   r   r   r   r¯  3  s   r¯  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256i�À  Nr@   r   r   r   r   r°  7  s   r°  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384i‘À  Nr@   r   r   r   r   r±  ;  s   r±  c                   @   s   e Zd ZdZdS )Ú(TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256i’À  Nr@   r   r   r   r   r²  ?  s   r²  c                   @   s   e Zd ZdZdS )Ú(TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384i“À  Nr@   r   r   r   r   r³  C  s   r³  c                   @   s   e Zd ZdZdS )Ú$TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256i”À  Nr@   r   r   r   r   r´  G  s   r´  c                   @   s   e Zd ZdZdS )Ú$TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384i•À  Nr@   r   r   r   r   rµ  K  s   rµ  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256i–À  Nr@   r   r   r   r   r¶  O  s   r¶  c                   @   s   e Zd ZdZdS )Ú(TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384i—À  Nr@   r   r   r   r   r·  S  s   r·  c                   @   s   e Zd ZdZdS )Ú(TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256i˜À  Nr@   r   r   r   r   r¸  W  s   r¸  c                   @   s   e Zd ZdZdS )Ú(TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384i™À  Nr@   r   r   r   r   r¹  [  s   r¹  c                   @   s   e Zd ZdZdS )Ú*TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256išÀ  Nr@   r   r   r   r   rº  _  s   rº  c                   @   s   e Zd ZdZdS )Ú*TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384i›À  Nr@   r   r   r   r   r»  c  s   r»  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_128_CCMiœÀ  Nr@   r   r   r   r   r¼  g  s   r¼  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_256_CCMi�À  Nr@   r   r   r   r   r½  k  s   r½  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_RSA_WITH_AES_128_CCMižÀ  Nr@   r   r   r   r   r¾  o  s   r¾  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_RSA_WITH_AES_256_CCMiŸÀ  Nr@   r   r   r   r   r¿  s  s   r¿  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_128_CCM_8i À  Nr@   r   r   r   r   rÀ  w  s   rÀ  c                   @   s   e Zd ZdZdS )ÚTLS_RSA_WITH_AES_256_CCM_8i¡À  Nr@   r   r   r   r   rÁ  {  s   rÁ  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_RSA_WITH_AES_128_CCM_8i¢À  Nr@   r   r   r   r   rÂ    s   rÂ  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_RSA_WITH_AES_256_CCM_8i£À  Nr@   r   r   r   r   rÃ  ƒ  s   rÃ  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_128_CCMi¤À  Nr@   r   r   r   r   rÄ  ‡  s   rÄ  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_256_CCMi¥À  Nr@   r   r   r   r   rÅ  ‹  s   rÅ  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_AES_128_CCMi¦À  Nr@   r   r   r   r   rÆ  �  s   rÆ  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_AES_256_CCMi§À  Nr@   r   r   r   r   rÇ  “  s   rÇ  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_128_CCM_8i¨À  Nr@   r   r   r   r   rÈ  —  s   rÈ  c                   @   s   e Zd ZdZdS )ÚTLS_PSK_WITH_AES_256_CCM_8i©À  Nr@   r   r   r   r   rÉ  ›  s   rÉ  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_AES_128_CCM_8iªÀ  Nr@   r   r   r   r   rÊ  Ÿ  s   rÊ  c                   @   s   e Zd ZdZdS )ÚTLS_DHE_PSK_WITH_AES_256_CCM_8i«À  Nr@   r   r   r   r   rË  £  s   rË  c                   @   s   e Zd ZdZdS )Ú TLS_ECDHE_ECDSA_WITH_AES_128_CCMi¬À  Nr@   r   r   r   r   rÌ  §  s   rÌ  c                   @   s   e Zd ZdZdS )Ú TLS_ECDHE_ECDSA_WITH_AES_256_CCMi­À  Nr@   r   r   r   r   rÍ  «  s   rÍ  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8i®À  Nr@   r   r   r   r   rÎ  ¯  s   rÎ  c                   @   s   e Zd ZdZdS )Ú"TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8i¯À  Nr@   r   r   r   r   rÏ  ³  s   rÏ  c                   @   s   e Zd ZdZdS )Ú/TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLDiÌ  Nr@   r   r   r   r   rÐ  ¹  s   rÐ  c                   @   s   e Zd ZdZdS )Ú1TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256_OLDiÌ  Nr@   r   r   r   r   rÑ  ½  s   rÑ  c                   @   s   e Zd ZdZdS )Ú-TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLDiÌ  Nr@   r   r   r   r   rÒ  Á  s   rÒ  c                   @   s   e Zd ZdZdS )Ú+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256i¨Ì  Nr@   r   r   r   r   rÓ  Å  s   rÓ  c                   @   s   e Zd ZdZdS )Ú-TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256i©Ì  Nr@   r   r   r   r   rÔ  É  s   rÔ  c                   @   s   e Zd ZdZdS )Ú)TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256iªÌ  Nr@   r   r   r   r   rÕ  Í  s   rÕ  c                   @   s   e Zd ZdZdS )Ú%TLS_PSK_WITH_CHACHA20_POLY1305_SHA256i«Ì  Nr@   r   r   r   r   rÖ  Ñ  s   rÖ  c                   @   s   e Zd ZdZdS )Ú+TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256i¬Ì  Nr@   r   r   r   r   r×  Õ  s   r×  c                   @   s   e Zd ZdZdS )Ú)TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256i­Ì  Nr@   r   r   r   r   rØ  Ù  s   rØ  c                   @   s   e Zd ZdZdS )Ú)TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256i®Ì  Nr@   r   r   r   r   rÙ  Ý  s   rÙ  c                   @   s   e Zd ZdZdS )ÚTLS_AES_128_GCM_SHA256i  Nr@   r   r   r   r   rÚ  á  s   rÚ  c                   @   s   e Zd ZdZdS )ÚTLS_AES_256_GCM_SHA384i  Nr@   r   r   r   r   rÛ  å  s   rÛ  c                   @   s   e Zd ZdZdS )ÚTLS_CHACHA20_POLY1305_SHA256i  Nr@   r   r   r   r   rÜ  é  s   rÜ  c                   @   s   e Zd ZdZdS )ÚTLS_AES_128_CCM_SHA256i  Nr@   r   r   r   r   rÝ  í  s   rÝ  c                   @   s   e Zd ZdZdS )ÚTLS_AES_128_CCM_8_SHA256i  Nr@   r   r   r   r   rÞ  ñ  s   rÞ  c                   @   s   e Zd ZdZdS )ÚSSL_CK_RC4_128_WITH_MD5i€  Nr@   r   r   r   r   rß  õ  s   rß  c                   @   s   e Zd ZdZdS )Ú SSL_CK_RC4_128_EXPORT40_WITH_MD5i€  Nr@   r   r   r   r   rà  ù  s   rà  c                   @   s   e Zd ZdZdS )ÚSSL_CK_RC2_128_CBC_WITH_MD5i€  Nr@   r   r   r   r   rá  ý  s   rá  c                   @   s   e Zd ZdZdS )Ú$SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5i€  Nr@   r   r   r   r   râ    s   râ  c                   @   s   e Zd ZdZdS )ÚSSL_CK_IDEA_128_CBC_WITH_MD5i€  Nr@   r   r   r   r   rã    s   rã  c                   @   s   e Zd ZdZdS )ÚSSL_CK_DES_64_CBC_WITH_MD5i@  Nr@   r   r   r   r   rä  	  s   rä  c                   @   s   e Zd ZdZdS )Ú SSL_CK_DES_192_EDE3_CBC_WITH_MD5iÀ  Nr@   r   r   r   r   rå    s   rå  Z!TLS_EMPTY_RENEGOTIATION_INFO_SCSVéÿ   ZTLS_FALLBACK_SCSVi V  c                 C   sR   g }| D ]D}|t v rt | }|jr|jjsB||jjv sB|jjdkr| |¡ q|S )ab  
    From a list of proposed ciphersuites, this function returns a list of
    usable cipher suites, i.e. for which key exchange, cipher and hash
    algorithms are known to be implemented and usable in current version of the
    TLS extension. The order of the cipher suites in the list returned by the
    function matches the one of the proposal.
    r	   )r.   r#   r   Z	anonymousr$   Úappend)Zlir2   Úresr3   Úcipherr   r   r   Úget_usable_ciphersuites  s    
ÿ
þrê  (4  r:   Ú
__future__r   Zscapy.layers.tls.crypto.kx_algsr   Zscapy.layers.tls.crypto.hashr   Zscapy.layers.tls.crypto.h_macr   Zscapy.layers.tls.crypto.ciphersr   Zscapy.libs.sixZlibsÚsixr   r+   r.   r   r    Úwith_metaclassÚobjectr"   r?   rA   rB   rC   rE   rF   rH   rJ   rK   rM   rO   rQ   rS   rU   rW   rY   r[   r]   r_   ra   rc   re   rg   ri   rk   rm   ro   rq   rs   ru   rw   ry   r{   r}   r   r�   rƒ   r…   r‡   r‰   r‹   r�   r�   r‘   r“   r•   r—   r™   r›   r�   rŸ   r¡   r£   r¥   r§   r©   r«   r­   r¯   r±   r³   rµ   r·   r¹   r»   r½   r¿   rÁ   rÃ   rÅ   rÇ   rÉ   rË   rÍ   rÏ   rÑ   rÓ   rÕ   r×   rÙ   rÛ   rÝ   rß   rá   rã   rå   rç   ré   rë   rí   rï   rñ   ró   rõ   r÷   rù   rû   rý   rÿ   r  r  r  r  r	  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r'  r)  r+  r-  r/  r1  r3  r5  r7  r9  r;  r=  r?  rA  rC  rE  rG  rI  rK  rM  rO  rQ  rS  rU  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  r“  r”  r•  r–  r—  r˜  r™  rš  r›  rœ  r�  rž  rŸ  r   r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r­  r®  r¯  r°  r±  r²  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  rå  rê  r   r   r   r   Ú<module>   sV  17
