ó
ßüÚ\c           @   sò  d  Z  d d l Z d d l Z d d l Z d d l Z d Z e j j e j j e	 ƒ ƒ Z
 e d „ Z d Z d „  Z d „  Z e d k rîe j e
 ƒ e d	 ƒ \ Z Z e d
 d ƒ  Z e j e ƒ Wd QXe d d ƒ  Z e j e ƒ Wd QXe ƒ  e d d ƒ  Z e j ƒ  Z Wd QXe d	 d e ƒ\ Z Z e d d ƒ  Z e j e ƒ Wd QXe d d ƒ ! Z e j e ƒ e j e ƒ Wd QXe d d ƒ  Z e j e ƒ Wd QXe d d ƒ ! Z e j e ƒ e j e ƒ Wd QXe ƒ  n  d S(   s‰   Make the custom certificate and private key files used by TLS tests.

Code heavily borrowed from Lib/tests/make_ssl_certs.py in CPython.
iÿÿÿÿNs‡  
    [req]
    distinguished_name     = req_distinguished_name
    x509_extensions        = req_x509_extensions
    prompt                 = no

    [req_distinguished_name]
    C                      = XY
    L                      = Dask-distributed
    O                      = Dask
    CN                     = {hostname}

    [req_x509_extensions]
    subjectAltName         = @san

    [san]
    DNS.1 = {hostname}

    [ca]
    default_ca      = CA_default

    [CA_default]
    dir = cadir
    database  = $dir/index.txt
    crlnumber = $dir/crl.txt
    default_md = sha256
    default_days = 3600
    default_crl_days = 3600
    certificate = tls-ca-cert.pem
    private_key = tls-ca-key.pem
    serial    = $dir/serial
    RANDFILE  = $dir/.rand

    policy          = policy_match

    [policy_match]
    countryName             = match
    stateOrProvinceName     = optional
    organizationName        = match
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional

    [policy_anything]
    countryName   = optional
    stateOrProvinceName = optional
    localityName    = optional
    organizationName  = optional
    organizationalUnitName  = optional
    commonName    = supplied
    emailAddress    = optional

    [v3_ca]
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid:always,issuer
    basicConstraints = CA:true
    c         C   sõ  d |  GHg  } x? t  d ƒ D]1 } t j d t ƒ  } | j | j ƒ Wd  QXq W| \ } } } zot j d |  ƒ } t | d ƒ  } | j	 | ƒ Wd  QXd d d d	 d
 d d d | d | g }	 | rt j d t ƒ   } | j | j ƒ | j }
 Wd  QX|	 d |
 g 7}	 n |	 d d | g 7}	 t
 j d g |	 ƒ | r|d d | d | d d d d d d |
 g }	 t
 j d g |	 ƒ n  t | d ƒ  } | j ƒ  } Wd  QXt | d ƒ  } | j ƒ  } Wd  QX| | f SWd  x | D] } t j | ƒ qÙWXd  S(   Ns   creating cert for i   t   deletet   hostnamet   wt   reqs   -news   -dayst   3650s   -nodess   -newkeys   rsa:2048s   -keyouts   -configs   -outs   -x509t   opensslt   cas   -outdirt   cadirs   -policyt   policy_anythings   -batchs   -infilest   r(   t   ranget   tempfilet   NamedTemporaryFilet   Falset   appendt   namet   req_templatet   formatt   opent   writet
   subprocesst
   check_callt   readt   ost   remove(   R   t   signt	   tempnamest   it   ft   req_filet	   cert_filet   key_fileR   t   argst   reqfilet   certt   keyR   (    (    s?   lib/python2.7/site-packages/distributed/tests/make_tls_certs.pyt   make_cert_keyH   sb    			R   c           C   s   t  j t ƒ d  S(   N(   t   shutilt   rmtreet	   TMP_CADIR(    (    (    s?   lib/python2.7/site-packages/distributed/tests/make_tls_certs.pyt	   unmake_caˆ   s    c          C   s\  t  j t ƒ t t  j j d d ƒ d ƒ  }  Wd  QXt t  j j d d ƒ d ƒ  }  |  j d ƒ Wd  QXt j d ƒ ß } | j t	 j
 d d	 ƒ ƒ | j ƒ  t j ƒ  § }  d
 d d d d d d d d d d d |  j d d g } t j d g | ƒ d d | j d d d d d t d d d d d  d d d! |  j g } t j d g | ƒ Wd  QXWd  QXd  S("   NR   s	   index.txts   a+s   index.txt.attrs   w+s   unique_subject = noR   R   s   our-ca-serverR   s   -news   -daysR   s   -extensionst   v3_cas   -nodess   -newkeys   rsa:2048s   -keyouts   tls-ca-key.pems   -outs   -subjs3   /C=XY/L=Dask-distributed/O=Dask CA/CN=our-ca-serverR   R   s   -configs   -create_serials   tls-ca-cert.pems   -batchs   -outdirs   -keyfiles	   -selfsigns   -infiles(   R   t   mkdirR'   R   t   patht   joinR   R   R   R   R   t   flushR   R   R   (   R   t   tR    (    (    s?   lib/python2.7/site-packages/distributed/tests/make_tls_certs.pyt   make_caŒ   sX    !!
	t   __main__t	   localhosts   tls-self-signed-cert.pemR   s   tls-self-signed-key.pems   tls-ca-cert.pemR	   R   s   tls-cert.pems   tls-cert-chain.pems   tls-key.pems   tls-key-cert.pem(   t   __doc__R   R%   R   R   R   R+   t   abspatht   dirnamet   __file__t   hereR   R$   R'   R(   R/   t   __name__t   chdirR"   R#   R   R   R   R   t   ca_certt   True(    (    (    s?   lib/python2.7/site-packages/distributed/tests/make_tls_certs.pyt   <module>   s@   :=		8