ó
¡\\c           @   sY  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l	 Z
 d d l Z d d l m Z d d l m Z d d l m Z d e j f d „  ƒ  YZ d	 e j f d
 „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ e d k rUe j ƒ  n  d S(   s   Tests for acme.crypto_util.iÿÿÿÿN(   t   socketserver(   t   errors(   t	   test_util(   t   Listt   SSLSocketAndProbeSNITestc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s/   Tests for acme.crypto_util.SSLSocket/probe_sni.c            s¹   t  j d ƒ |  _ t  j d ƒ } i | |  j j f d 6‰ d d l m ‰  d t j f ‡  ‡ f d †  ƒ  Y} | d t j	 ƒ |  _
 |  j
 j j ƒ  d
 |  _ t j d |  j
 j ƒ |  _ d  S(   Ns   rsa2048_cert.pems   rsa2048_key.pemt   fooiÿÿÿÿ(   t	   SSLSockett   _TestServerc              s   e  Z ‡  ‡ f d  †  Z RS(   c            s/   ˆ  t  j  ƒ  d ˆ ƒ|  _  t j j |  ƒ d  S(   Nt   certs(   t   socketR    t	   TCPServert   server_bind(   t   self(   R   R   (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR   $   s    (   t   __name__t
   __module__R   (    (   R   R   (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR      s   t    i    i   t   target(   R   i    (   R   t   load_comparable_certt   certt   load_pyopenssl_private_keyt   wrappedt   acme.crypto_utilR   R    R
   t   BaseRequestHandlert   serverR	   t   getsocknamet   portt	   threadingt   Threadt   handle_requestt   server_thread(   R   t   keyR   (    (   R   R   s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   setUp   s    "		c         C   s#   |  j  j ƒ  r |  j  j ƒ  n  d  S(   N(   R   t   is_alivet   join(   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   tearDown.   s    c         C   s2   d d l  m } t j | | d d d |  j ƒƒ S(   Niÿÿÿÿ(   t	   probe_snit   hosts	   127.0.0.1R   (   R   R#   t   joset   ComparableX509R   (   R   t   nameR#   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   _probe3   s    	c         C   s   |  j  j ƒ  t j d ƒ d  S(   Ni   (   R   t   startt   timet   sleep(   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   _start_server8   s    c         C   s*   |  j  ƒ  |  j |  j |  j d ƒ ƒ d  S(   NR   (   R,   t   assertEqualR   R(   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_probe_ok<   s    
c         C   s'   |  j  ƒ  |  j t j |  j d ƒ d  S(   Nt   bar(   R,   t   assertRaisesR   t   ErrorR(   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_probe_not_recognized_name@   s    
c         C   sX   |  j  j ƒ  t j ƒ  } z* t j d ƒ |  j t j |  j d ƒ Wd  t j | ƒ Xd  S(   Ni   R/   (	   R   t   server_closeR	   t   getdefaulttimeoutt   setdefaulttimeoutR0   R   R1   R(   (   R   t   original_timeout(    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_probe_connection_errorD   s    (
   R   R   t   __doc__R   R"   R(   R,   R.   R2   R7   (    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR      s   						t   PyOpenSSLCertOrReqAllNamesTestc           B   sA   e  Z d  Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z RS(   s;   Test for acme.crypto_util._pyopenssl_cert_or_req_all_names.c         C   s    d d l  m } | | | ƒ ƒ S(   Niÿÿÿÿ(   t    _pyopenssl_cert_or_req_all_names(   R   R:   (   t   clst   loaderR'   R:   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   _callR   s    c         C   s   |  j  t j | ƒ S(   N(   R=   R   t	   load_cert(   R   R'   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt
   _call_certX   s    c         C   s    |  j  |  j d ƒ d g ƒ d  S(   Ns   cert-nocn.ders   no-common-name.badssl.com(   R-   R?   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_one_san_no_common[   s    c         C   s    |  j  |  j d ƒ d g ƒ d  S(   Ns   cert.pems   example.com(   R-   R?   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_no_sans_yes_common_   s    c         C   s#   |  j  |  j d ƒ d d g ƒ d  S(   Ns   cert-san.pems   example.coms   www.example.com(   R-   R?   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_two_sans_yes_commonb   s    (	   R   R   R8   t   classmethodR=   R?   R@   RA   RB   (    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR9   O   s   			t   PyOpenSSLCertOrReqSANTestc           B   s¡   e  Z d  Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s5   Test for acme.crypto_util._pyopenssl_cert_or_req_san.c         C   s    d d l  m } | | | ƒ ƒ S(   Niÿÿÿÿ(   t   _pyopenssl_cert_or_req_san(   R   RE   (   R;   R<   R'   RE   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR=   k   s    c         C   s   g  t  j t d d ƒ t d d ƒ t d d ƒ ƒ D] } t j | ƒ ^ q1 } g  t d t | ƒ d ƒ D]$ } d	 j | | | d !ƒ d
 ^ qe S(   s5   Returns expected names from '{cert,csr}-idnsans.pem'.iÃ  i   iA  iü  i   iw  i    i-   R   s   .invalid(   t	   itertoolst   chaint   ranget   sixt   unichrt   lenR!   (   R;   t   it   chars(    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   _get_idn_namesq   s
    +c         C   s   |  j  t j | ƒ S(   N(   R=   R   R>   (   R   R'   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR?   z   s    c         C   s   |  j  t j | ƒ S(   N(   R=   R   t   load_csr(   R   R'   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt	   _call_csr}   s    c         C   s   |  j  |  j d ƒ g  ƒ d  S(   Ns   cert.pem(   R-   R?   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_no_sans€   s    c         C   s#   |  j  |  j d ƒ d d g ƒ d  S(   Ns   cert-san.pems   example.coms   www.example.com(   R-   R?   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_two_sansƒ   s    c         C   sB   |  j  |  j d ƒ g  t d d ƒ D] } d j | ƒ ^ q" ƒ d  S(   Ns   cert-100sans.pemi   ie   s   example{0}.com(   R-   R?   RH   t   format(   R   RL   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_hundred_sans‡   s    c         C   s#   |  j  |  j d ƒ |  j ƒ  ƒ d  S(   Ns   cert-idnsans.pem(   R-   R?   RN   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_cert_idn_sans‹   s    c         C   s   |  j  |  j d ƒ g  ƒ d  S(   Ns   csr-nosans.pem(   R-   RP   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_csr_no_sans   s    c         C   s    |  j  |  j d ƒ d g ƒ d  S(   Ns   csr.pems   example.com(   R-   RP   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_csr_one_san’   s    c         C   s#   |  j  |  j d ƒ d d g ƒ d  S(   Ns   csr-san.pems   example.coms   www.example.com(   R-   RP   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_csr_two_sans•   s    c         C   s/   |  j  |  j d ƒ d d d d d d g ƒ d  S(   Ns   csr-6sans.pems   example.coms   example.orgs   example.nets   example.infos   subdomain.example.coms   other.subdomain.example.com(   R-   RP   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_csr_six_sans™   s    	c         C   sB   |  j  |  j d ƒ g  t d d ƒ D] } d j | ƒ ^ q" ƒ d  S(   Ns   csr-100sans.pemi   ie   s   example{0}.com(   R-   RP   RH   RS   (   R   RL   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_csr_hundred_sansŸ   s    c         C   s#   |  j  |  j d ƒ |  j ƒ  ƒ d  S(   Ns   csr-idnsans.pem(   R-   RP   RN   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_csr_idn_sans£   s    c         C   s#   |  j  |  j d ƒ d d g ƒ d  S(   Ns   critical-san.pems   chicago-cubs.venafi.examples   cubs.venafi.example(   R-   R?   (   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_critical_san§   s    (   R   R   R8   RC   R=   RN   R?   RP   RQ   RR   RT   RU   RV   RW   RX   RY   RZ   R[   R\   (    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyRD   g   s    													t   RandomSnTestc           B   s    e  Z d  Z d „  Z d „  Z RS(   s+   Test for random certificate serial numbers.c         C   sA   d |  _  g  |  _ t j j ƒ  |  _ |  j j t j j d ƒ d  S(   Ni   i   (   t
   cert_countt
   serial_numt   OpenSSLt   cryptot   PKeyR   t   generate_keyt   TYPE_RSA(   R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR   ±   s    		c         C   s   d d l  m } xH t |  j ƒ D]7 } | |  j d g d t ƒ} |  j j | j ƒ  ƒ q  W|  j	 t
 t |  j ƒ ƒ d k ƒ d  S(   Niÿÿÿÿ(   t   gen_ss_certt   dummyt	   force_sani   (   R   Re   RH   R^   R   t   TrueR_   t   appendt   get_serial_numbert
   assertTrueRK   t   set(   R   Re   t   _R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_sn_collisions·   s
    (   R   R   R8   R   Rn   (    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR]   ­   s   	t   MakeCSRTestc           B   s/   e  Z d  Z e d „  ƒ Z d „  Z d „  Z RS(   s   Test for standalone functions.c         O   s`   t  j j ƒ  } | j t  j j d ƒ t  j j t  j j | ƒ } d d l m } | | | | Ž S(   Ni   iÿÿÿÿ(   t   make_csr(	   R`   Ra   Rb   Rc   Rd   t   dump_privatekeyt   FILETYPE_PEMR   Rp   (   R;   t   argst   kwargst   privkeyt   privkey_pemRp   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   _call_with_keyÂ   s
    c         C   sÆ   |  j  d d g ƒ } |  j d | k ƒ |  j d | k ƒ t j j t j j | ƒ } t | d ƒ rÂ |  j t | j	 ƒ  ƒ d ƒ |  j | j	 ƒ  d j
 ƒ  t j j d d	 t d
 d ƒj
 ƒ  ƒ n  d  S(   Ns	   a.examples	   b.examples   --BEGIN CERTIFICATE REQUEST--s   --END CERTIFICATE REQUEST--t   get_extensionsi   i    t   subjectAltNamet   criticalt   values   DNS:a.example, DNS:b.example(   Rw   Rk   R`   Ra   t   load_certificate_requestRr   t   hasattrR-   RK   Rx   t   get_datat   X509Extensiont   False(   R   t   csr_pemt   csr(    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_make_csrÊ   s    		c         C   s¯   |  j  d g d t ƒ} t j j t j j | ƒ } t | d ƒ r« |  j t | j	 ƒ  ƒ d ƒ g  | j	 ƒ  D] } | j
 ƒ  d k rk | ^ qk } |  j t | ƒ d d ƒ n  d  S(   Ns	   a.examplet   must_stapleRx   i   s   0i   s*   Expected exactly one Must Staple extension(   Rw   Rh   R`   Ra   R|   Rr   R}   R-   RK   Rx   R~   (   R   R   R‚   t   et   must_staple_exts(    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_make_csr_must_stapleÝ   s    	(   R   R   R8   RC   Rw   Rƒ   R‡   (    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyRo   ¿   s   	t   DumpPyopensslChainTestc           B   s/   e  Z d  Z e d „  ƒ Z d „  Z d „  Z RS(   s   Test for dump_pyopenssl_chain.c         C   s   d d l  m } | | ƒ S(   Niÿÿÿÿ(   t   dump_pyopenssl_chain(   R   R‰   (   R;   t   loadedR‰   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyR=   ó   s    c         C   sj   d d d g } g  | D] } t  j | ƒ ^ q } t d „  | Dƒ ƒ } |  j t |  j | ƒ ƒ | ƒ d  S(   Ns   cert.pems   cert-san.pems   cert-idnsans.pemc         s   s0   |  ]& } t  t j j t j j | ƒ ƒ Vq d  S(   N(   RK   R`   Ra   t   dump_certificateRr   (   t   .0R   (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pys	   <genexpr>ý   s   (   R   R>   t   sumR-   RK   R=   (   R   t   namesR'   RŠ   t   length(    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   test_dump_pyopenssl_chainù   s    "c            s¤   d d d g } g  | D] } t  j | ƒ ^ q } t j } g  | D] } | | ƒ ^ qA } t j j ‰  t ‡  f d †  | Dƒ ƒ } |  j t	 |  j
 | ƒ ƒ | ƒ d  S(   Ns   cert.pems   cert-san.pems   cert-idnsans.pemc         3   s*   |  ]  } t  ˆ  t j j | ƒ ƒ Vq d  S(   N(   RK   R`   Ra   Rr   (   RŒ   R   (   t	   dump_func(    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pys	   <genexpr>  s    (   R   R>   R%   R&   R`   Ra   R‹   R   R-   RK   R=   (   R   RŽ   R'   RŠ   t	   wrap_funcR   R   R   (    (   R‘   s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt!   test_dump_pyopenssl_chain_wrapped  s    "	(   R   R   R8   RC   R=   R   R“   (    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyRˆ   ð   s   	t   __main__(   R8   RF   R	   R   R*   t   unittestRI   t	   six.movesR    t   josepyR%   R`   t   acmeR   R   t   acme.magic_typingR   t   TestCaseR   R9   RD   R]   Ro   Rˆ   R   t   main(    (    (    s9   /usr/lib/python2.7/dist-packages/acme/crypto_util_test.pyt   <module>   s(   <F1