ó
ßüÚ\c           @` s{  d  d l  m Z m Z m Z d  d l m Z d  d l Z y d  d l Z Wn e k
 ra d Z n Xd  d l
 Z
 d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z e d ƒ Z e d	 ƒ Z e d
 ƒ Z e d ƒ Z d Z d d d d d g Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# e ƒ  d „  ƒ Z$ e ƒ  d „  ƒ Z% d S(   i    (   t   print_functiont   divisiont   absolute_import(   t   contextmanagerN(   t   gen(   t   connectt   listen(   t   Security(   t
   new_configt   get_certt   gen_tests   tls-ca-cert.pems   tls-cert.pems   tls-key.pems   tls-key-cert.pems   ECDHE-RSA-AES128-GCM-SHA256t   TLS_AES_128_GCM_SHA256t   TLS_AES_256_GCM_SHA384t   TLS_CHACHA20_POLY1305_SHA256t   TLS_AES_128_CCM_SHA256t   TLS_AES_128_CCM_8_SHA256c          C` sã   t  i  ƒ  t ƒ  }  Wd  QX|  j d  t f k s7 t ‚ |  j d  k sL t ‚ |  j d  k sa t ‚ |  j d  k sv t ‚ |  j	 d  k s‹ t ‚ |  j
 d  k s  t ‚ |  j d  k sµ t ‚ |  j d  k sÊ t ‚ |  j d  k sß t ‚ d  S(   N(   R   R   t   require_encryptiont   Nonet   Falset   AssertionErrort   tls_ca_filet   tls_cipherst   tls_client_keyt   tls_client_certt   tls_scheduler_keyt   tls_scheduler_certt   tls_worker_keyt   tls_worker_cert(   t   sec(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_defaults%   s    c          C` s^   t  ƒ  }  t |  d ƒ s t ‚ t j t ƒ  |  j Wd  QXt j t ƒ  d |  _ Wd  QXd  S(   NR   t    (   R   t   hasattrR   t   pytestt   raisest   AttributeErrort
   tls_foobar(   R   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_attribute_error3   s    	c          C` s"  i i d d 6i d d 6d d 6d 6i d d 6d	 6t  d
 6d 6t d 6}  t |  ƒ  t ƒ  } Wd  QX| j t k sv t ‚ | j d k s‹ t ‚ | j t  k s  t ‚ | j d  k sµ t ‚ | j
 d  k sÊ t ‚ | j d k sß t ‚ | j d k sô t ‚ | j d  k s	t ‚ | j d k st ‚ d  S(   Ns   ca.pems   ca-files   skey.pemt   keys	   scert.pemt   certt	   schedulers	   wcert.pemt   workert   cipherst   tlss   require-encryption(   t   FORCED_CIPHERt   TrueR   R   R   R   R   R   R   R   R   R   R   R   R   (   t   cR   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_from_config<   s$    
c          C` s  i i d d 6i d d 6d d 6d 6d 6}  t  |  ƒ   t d	 d
 d t d d  ƒ } Wd  QX| j t k sl t ‚ | j d k s t ‚ | j d  k s– t ‚ | j d  k s« t ‚ | j	 d  k sÀ t ‚ | j
 d k sÕ t ‚ | j d
 k sê t ‚ | j d  k sÿ t ‚ | j d  k st ‚ d  S(   Ns   ca.pems   ca-files   skey.pemR%   s	   scert.pemR&   R'   R*   R   s   newcert.pemR   R   (   R   R   R,   R   R   R   R   R   R   R   R   R   R   R   (   R-   R   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_kwargsS   s     c       	   C` sD   t  i  ƒ 2 t d d d d ƒ }  t |  ƒ d k s: t ‚ Wd  QXd  S(   NR   s   ca.pemR   s	   scert.pems>   Security(tls_ca_file='ca.pem', tls_scheduler_cert='scert.pem')(   R   R   t   reprR   (   R   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt	   test_reprj   s    	c          C` s8  i i d d 6i d d 6d d 6d 6i d d 6d	 6t  d
 6d 6}  t |  ƒ  t ƒ  } Wd  QX| j d ƒ } | i d d 6d d 6d d 6t  d
 6k s— t ‚ | j d	 ƒ } | i d d 6d  d 6d d 6t  d
 6k sÔ t ‚ | j d ƒ } | i d d 6d  d 6d  d 6t  d
 6k st ‚ t j t ƒ  | j d ƒ Wd  QXd  S(   Ns   ca.pems   ca-files   skey.pemR%   s	   scert.pemR&   R'   s	   wcert.pemR(   R)   R*   t   ca_filet   clientt
   supervisor(	   R+   R   R   t   get_tls_config_for_roleR   R   R    R!   t
   ValueError(   R-   R   t   t(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_tls_config_for_roles   s8    c    	      C` s  d „  }  d „  } i i t  d 6i t d 6t d 6d 6i t d 6d 6d 6} t | ƒ  t ƒ  } Wd  QX| j d ƒ } | d	 s… t ‚ | d
 } |  | ƒ | | ƒ | j d ƒ } | d
 } |  | ƒ | | ƒ | j d ƒ } | j d
 ƒ d  k sú t ‚ t
 | d d <t | d <t | ƒ  t ƒ  } Wd  QX| j d ƒ } | d	 sMt ‚ | d
 } |  | ƒ t j d k r| j ƒ  } g  | D] } | d d k rƒ| ^ qƒ} t | ƒ d k s½t ‚ g  | D] } | d d k rÄ| ^ qÄ} t | ƒ rt | ƒ d k st ‚ qn  d  S(   Nc         S` s1   |  j  t j k s t ‚ |  j t k s- t ‚ d  S(   N(   t   verify_modet   sslt   CERT_REQUIREDR   t   check_hostnameR   (   t   ctx(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   basic_checks˜   s    c         S` s4   t  j d k r0 t |  j ƒ  ƒ d k s0 t ‚ n  d  S(   Ni   i   i   (   i   i   (   t   syst   version_infot   lent   get_ciphersR   (   R=   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   many_ciphersœ   s    s   ca-fileR%   R&   R'   R(   R*   R   t   ssl_contextR3   R)   s   require-encryptioni   i   t   protocols   TLSv1.2i   s   TLSv1.3(   i   i   (   R2   t   key1t   cert1t   keycert1R   R   t   get_connection_argsR   t   getR   R+   R,   t   get_listen_argsR?   R@   RB   RA   (	   R>   RC   R-   R   t   dR=   t   supported_cipherst   tls_12_cipherst   tls_13_ciphers(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_connection_args—   sF    		








))c    	      C` s  d „  }  d „  } i i t  d 6i t d 6t d 6d 6i t d 6d 6d 6} t | ƒ  t ƒ  } Wd  QX| j d ƒ } | d	 s… t ‚ | d
 } |  | ƒ | | ƒ | j d ƒ } | d
 } |  | ƒ | | ƒ | j d ƒ } | j d
 ƒ d  k sú t ‚ t
 | d d <t | d <t | ƒ  t ƒ  } Wd  QX| j d ƒ } | d	 sMt ‚ | d
 } |  | ƒ t j d k r| j ƒ  } g  | D] } | d d k rƒ| ^ qƒ} t | ƒ d k s½t ‚ g  | D] } | d d k rÄ| ^ qÄ} t | ƒ rt | ƒ d k st ‚ qn  d  S(   Nc         S` s1   |  j  t j k s t ‚ |  j t k s- t ‚ d  S(   N(   R9   R:   R;   R   R<   R   (   R=   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyR>   Î   s    c         S` s4   t  j d k r0 t |  j ƒ  ƒ d k s0 t ‚ n  d  S(   Ni   i   i   (   i   i   (   R?   R@   RA   RB   R   (   R=   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyRC   Ò   s    s   ca-fileR%   R&   R'   R(   R*   R   RD   R3   R)   s   require-encryptioni   i   RE   s   TLSv1.2i   s   TLSv1.3(   i   i   (   R2   RF   RG   RH   R   R   RK   R   RJ   R   R+   R,   R?   R@   RB   RA   (	   R>   RC   R-   R   RL   R=   RM   RN   RO   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_listen_argsÍ   sF    		








))c    	      c` s  t  j d „  ƒ }  i i t d 6i t d 6t d 6d 6i t d 6d 6d 6} t | ƒ  t ƒ  } Wd QXt | d d	 <t | ƒ  t ƒ  } Wd QXt	 d
 |  d | j
 d ƒ ƒÚ } t | j d | j d ƒ ƒV} | j ƒ  V} | d k sî t ‚ | j ƒ  t j t ƒ " t | j d | j d ƒ ƒVWd QXt | j d | j d ƒ ƒV} | j d \ } } } | t g t k syt ‚ | j ƒ  Wd QXd S(   s2   
    Functional test for TLS connection args.
    c         s` s;   |  j  } | j d ƒ s t ‚ |  j d ƒ V|  j ƒ  Vd  S(   Ns   tls://t   hello(   t   peer_addresst
   startswithR   t   writet   close(   t   commt	   peer_addr(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   handle_comm	  s    	s   ca-fileR%   R&   R'   R(   R*   NR)   s   tls://t   connection_argsRR   R3   t   cipher(   R   t	   coroutineR2   RF   RG   RH   R   R   R+   R   RK   R   t   contact_addressRI   t   readR   t   abortR    R!   t	   TypeErrort
   extra_infot   TLS_13_CIPHERS(	   RY   R-   R   t   forced_cipher_sect   listenerRW   t   msgR[   t   _(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_tls_listen_connect  s:    
		c          c` s  t  j d „  ƒ }  i i t d 6i t d 6t d 6d 6i t d 6d 6d 6} t | ƒ  t ƒ  } Wd QXt | d	 <t | ƒ  t ƒ  } Wd QXx´ d
 d g D]¦ } t	 | |  d | j
 d ƒ ƒ0 } t | j d | j d ƒ ƒV} | j ƒ  Wd QXt	 | |  d | j
 d ƒ ƒ0 } t | j d | j d ƒ ƒV} | j ƒ  Wd QXq˜ Wt d „  ƒ } xÆ d g D]» } t	 | |  d | j
 d ƒ ƒc } t | j d | j d ƒ ƒV} | j ƒ  t j t ƒ " t | j d | j d ƒ ƒVWd QXWd QXt j t ƒ ! t	 | |  d | j
 d ƒ ƒWd QXq[Wd S(   s;   
    Functional test for "require_encryption" setting.
    c         S` s   |  j  ƒ  d  S(   N(   R_   (   RW   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyRY   ?  s    s   ca-fileR%   R&   R'   R(   R*   Ns   require-encryptions	   inproc://s   tls://RZ   c          s` s<   t  j t ƒ  }  d  VWd  QXd t |  j ƒ k s8 t ‚ d  S(   Ns   encryption required(   R    R!   t   RuntimeErrort   strt   valueR   (   t   excinfo(    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   check_encryption_errorc  s    s   tcp://(   R   R\   R2   RF   RG   RH   R   R   R,   R   RK   R   R]   RI   R_   R   R    R!   Rh   (   RY   R-   R   t   sec2t   listen_addrRd   RW   Rl   (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   test_require_encryption9  sX    
			
	(&   t
   __future__R    R   R   t
   contextlibR   R?   R:   t   ImportErrorR   R    t   tornadoR   t   distributed.commR   R   t   distributed.securityR   t   distributed.utils_testR   R	   R
   R2   RG   RF   RH   R+   Rb   R   R$   R.   R/   R1   R8   RP   RQ   Rg   Ro   (    (    (    s>   lib/python2.7/site-packages/distributed/tests/test_security.pyt   <module>   s>   
									$	6	66