
[XMc           @   s  d  Z  d d l Z yP d d l m Z d d l m Z m Z m Z d d l m Z d d l	 m
 Z Wn e k
 ru n Xd d l m Z d d l	 m Z m Z m Z d d	 l m Z m Z d d
 l m Z d d l m Z m Z d d l	 m Z d Z d Z e j   j Z d   Z  d e j! f d     YZ" d e j! f d     YZ# d e j$ f d     YZ% e j& e e'  e' k rd e% _( n  d f  d     YZ) d f  d     YZ* d f  d     YZ+ d e j$ f d     YZ, e j& e e'  e' k rd e, _( n  d S(   s+   
Tests for L{twisted.internet._sslverify}.
iN(   t   SSL(   t   PKeyt   X509t   X509Req(   t   TYPE_RSA(   t
   _sslverify(   t   unittest(   t   protocolt   defert   reactor(   t   objgrept   isSame(   t   log(   t   CertificateErrort   ConnectionLost(   t
   interfacess  
-----BEGIN CERTIFICATE-----
        MIIC2jCCAkMCAjA5MA0GCSqGSIb3DQEBBAUAMIG0MQswCQYDVQQGEwJVUzEiMCAG
        A1UEAxMZZXhhbXBsZS50d2lzdGVkbWF0cml4LmNvbTEPMA0GA1UEBxMGQm9zdG9u
        MRwwGgYDVQQKExNUd2lzdGVkIE1hdHJpeCBMYWJzMRYwFAYDVQQIEw1NYXNzYWNo
        dXNldHRzMScwJQYJKoZIhvcNAQkBFhhub2JvZHlAdHdpc3RlZG1hdHJpeC5jb20x
        ETAPBgNVBAsTCFNlY3VyaXR5MB4XDTA2MDgxNjAxMDEwOFoXDTA3MDgxNjAxMDEw
        OFowgbQxCzAJBgNVBAYTAlVTMSIwIAYDVQQDExlleGFtcGxlLnR3aXN0ZWRtYXRy
        aXguY29tMQ8wDQYDVQQHEwZCb3N0b24xHDAaBgNVBAoTE1R3aXN0ZWQgTWF0cml4
        IExhYnMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxJzAlBgkqhkiG9w0BCQEWGG5v
        Ym9keUB0d2lzdGVkbWF0cml4LmNvbTERMA8GA1UECxMIU2VjdXJpdHkwgZ8wDQYJ
        KoZIhvcNAQEBBQADgY0AMIGJAoGBAMzH8CDF/U91y/bdbdbJKnLgnyvQ9Ig9ZNZp
        8hpsu4huil60zF03+Lexg2l1FIfURScjBuaJMR6HiMYTMjhzLuByRZ17KW4wYkGi
        KXstz03VIKy4Tjc+v4aXFI4XdRw10gGMGQlGGscXF/RSoN84VoDKBfOMWdXeConJ
        VyC4w3iJAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAviMT4lBoxOgQy32LIgZ4lVCj
        JNOiZYg8GMQ6y0ugp86X80UjOvkGtNf/R7YgED/giKRN/q/XJiLJDEhzknkocwmO
        S+4b2XpiaZYxRyKWwL221O7CGmtWYyZl2+92YYmmCiNzWQPfP6BOMlfax0AGLHls
        fXzCWdG0O/3Lk2SRM0I=
-----END CERTIFICATE-----
s  
-----BEGIN CERTIFICATE-----
        MIIC3jCCAkcCAjA6MA0GCSqGSIb3DQEBBAUAMIG2MQswCQYDVQQGEwJVUzEiMCAG
        A1UEAxMZZXhhbXBsZS50d2lzdGVkbWF0cml4LmNvbTEPMA0GA1UEBxMGQm9zdG9u
        MRwwGgYDVQQKExNUd2lzdGVkIE1hdHJpeCBMYWJzMRYwFAYDVQQIEw1NYXNzYWNo
        dXNldHRzMSkwJwYJKoZIhvcNAQkBFhpzb21lYm9keUB0d2lzdGVkbWF0cml4LmNv
        bTERMA8GA1UECxMIU2VjdXJpdHkwHhcNMDYwODE2MDEwMTU2WhcNMDcwODE2MDEw
        MTU2WjCBtjELMAkGA1UEBhMCVVMxIjAgBgNVBAMTGWV4YW1wbGUudHdpc3RlZG1h
        dHJpeC5jb20xDzANBgNVBAcTBkJvc3RvbjEcMBoGA1UEChMTVHdpc3RlZCBNYXRy
        aXggTGFiczEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEpMCcGCSqGSIb3DQEJARYa
        c29tZWJvZHlAdHdpc3RlZG1hdHJpeC5jb20xETAPBgNVBAsTCFNlY3VyaXR5MIGf
        MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnm+WBlgFNbMlHehib9ePGGDXF+Nz4
        CjGuUmVBaXCRCiVjg3kSDecwqfb0fqTksBZ+oQ1UBjMcSh7OcvFXJZnUesBikGWE
        JE4V8Bjh+RmbJ1ZAlUPZ40bAkww0OpyIRAGMvKG+4yLFTO4WDxKmfDcrOb6ID8WJ
        e1u+i3XGkIf/5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAD4Oukm3YYkhedUepBEA
        vvXIQhVDqL7mk6OqYdXmNj6R7ZMC8WWvGZxrzDI1bZuB+4aIxxd1FXC3UOHiR/xg
        i9cDl1y8P/qRp4aEBNF6rI0D4AxTbfnHQx4ERDAOShJdYZs/2zifPJ6va6YvrEyr
        yqDtGhklsWW3ZwBzEh5VEOUp
-----END CERTIFICATE-----
c          K   s   t    } | j t d  t   } | j d  | j d	  xM | j   | j   f D]3 } x* |  j   D] \ } } t	 | | |  qh WqU W| j
 t    | j |  | j | d  | | f S(
   Ni   i    i<   i   im  t   md5i  iQ i3(   R   t   generate_keyR   R   t   gmtime_adj_notBeforet   gmtime_adj_notAftert
   get_issuert   get_subjectt   itemst   setattrt   set_serial_numbert   countert
   set_pubkeyt   sign(   t   kwt   keypairt   certificatet   xnamet   kt   v(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   makeCertificateJ   s    		t   DataCallbackProtocolc           B   s   e  Z d    Z d   Z RS(   c         C   s9   |  j  j d  } |  j  _ | d  k	 r5 | j |  n  d  S(   N(   t   factoryt   onDatat   Nonet   callback(   t   selft   datat   d(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   dataReceived^   s    c         C   s9   |  j  j d  } |  j  _ | d  k	 r5 | j |  n  d  S(   N(   R$   t   onLostR&   t   errback(   R(   t   reasonR*   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   connectionLostc   s    (   t   __name__t
   __module__R+   R/   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR#   ]   s   	t   WritingProtocolc           B   s    e  Z d  Z d   Z d   Z RS(   t   xc         C   s   |  j  j |  j  d  S(   N(   t	   transportt   writet   byte(   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   connectionMadej   s    c         C   s   |  j  j j |  d  S(   N(   R$   R,   R-   (   R(   R.   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR/   m   s    (   R0   R1   R6   R7   R/   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR2   h   s   	t   OpenSSLOptionsc           B   s   e  Z d Z Z d Z Z d Z d Z d Z	 d Z
 d    Z d   Z d d d 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(   c         C   sF   t  d d d d  \ |  _ |  _ t  d d d d  \ |  _ |  _ d S(   sK   
        Create class variables of client and server certificates.
        t   Os   Server Test Certificatet   CNt   servers   Client Test Certificatet   clientN(   R"   t   sKeyt   sCertt   cKeyt   cCert(   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   setUpz   s    c         C   s   |  j  d  k	 r |  j  j   n  |  j d  k	 r> |  j j   n  g  } |  j d  k	 rf | j |  j  n  |  j d  k	 r | j |  j  n  t j	 | d t
 S(   Nt   consumeErrors(   t
   serverPortR&   t   stopListeningt
   clientConnt
   disconnectt   onServerLostt   appendt   onClientLostR   t   DeferredListt   True(   R(   t   L(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   tearDown   s    c         C   s   | d  k r" t j   |  _ } n  | d  k rD t j   |  _ } n  | d  k r_ t j   } n  t j   } t | _ | | _ | | _	 t j
   } t | _ | | _ t j d | |  |  _ t j d |  j j   j | |  |  _ d  S(   Ni    s	   127.0.0.1(   R&   R   t   DeferredRG   RI   R   t   ServerFactoryR#   R,   R%   t   ClientFactoryR2   R	   t	   listenSSLRC   t
   connectSSLt   getHostt   portRE   (   R(   t   serverCertOptst   clientCertOptsRG   RI   R%   t   serverFactoryt   clientFactory(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   loopback   s     						c      	   C   s   |  j  t j d d d d  t j d d d d   |  j t j d d d d  t j d d d d d d   t j d d	  } |  j t t | d
 d  |  j  | j | j	  d | _ |  j  | j | j	  d S(   sh   
        Check that abbreviations used in certificates correctly map to
        complete names.
        R:   t   at   OUt   hellot
   commonNamet   organizationalUnitNamet   emailAddresst   xxxt   abcdefgt   CnR3   t   bcdefgaN(
   t   assertEqualst	   sslverifyt   DNt   DistinguishedNamet   assertNotEqualst   assertRaisest   AttributeErrorR   R:   R]   (   R(   t   dn(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt#   test_abbreviatingDistinguishedNames   s    
	c         C   s   t  j d d d d d d d d d	 d
 d d d d  } | j   } x] d d d d d
 d d g D]@ } |  j | | d | f  |  j | j   | d | f  q^ Wd  S(   NR]   s   common namet   organizationNames   organization nameR^   s   organizational unit namet   localityNames   locality namet   stateOrProvinceNames   state or province namet   countryNames   country nameR_   s   email addresss   %r was not in inspect output.(   Re   Rf   t   inspectt   assertInt   title(   R(   t   nt   sR    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   testInspectDistinguishedName   s$    	c         C   s   t  j d d  } | j   } xZ d d d d d d g D]@ } |  j | | d	 | f  |  j | j   | d	 | f  q7 W|  j d |  |  j d
 |  d  S(   NRn   s   locality names   common names   organization names   organizational unit names   state or province names   country names   email addresss   %r was in inspect output.s   Locality Name(   Re   Rf   Rq   t   assertNotInRs   Rr   (   R(   Rt   Ru   R    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt,   testInspectDistinguishedNameWithoutAllFields   s    $c         C   st   t  j j t  } |  j | j   j d  d d d d d d d d	 d
 d d d d d d d d	 d
 d d d g  d S(   s   
        Test that the C{inspect} method of L{sslverify.Certificate} returns
        a human-readable string containing some basic information about the
        certificate.
        s   
s   Certificate For Subject:s$     Organizational Unit Name: Securitys/            Organization Name: Twisted Matrix Labss5                  Common Name: example.twistedmatrix.coms)       State Or Province Name: Massachusettss                 Country Name: USs4                Email Address: nobody@twistedmatrix.coms"                Locality Name: Bostont    s   Issuer:s   Serial Number: 12345s7   Digest: C4:96:11:00:30:C3:EC:EE:A3:55:AA:ED:8C:84:85:18s6   Public Key with Hash: ff33994c80812aa95a79cdb85362d054N(   Re   t   Certificatet   loadPEMt   A_HOST_CERTIFICATE_PEMt   assertEqualRq   t   split(   R(   t   c(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_inspectCertificate   s0    c         C   s  t  j d |  j d |  j d t j d t d |  j g d d d t d	 t d
 t d t d t d t  } | j   } | j	   } |  j
 t | | t  t | | t   t  j   } | j |  |  j | j |  j  |  j | j |  j  |  j | j t j  |  j | j t  |  j | j |  j g  |  j | j d  |  j | j t  |  j | j t  |  j | j t  |  j | j t  |  j | j t  |  j | j t  d S(   sN   
        Test that __setstate__(__getstate__()) round-trips properly.
        t
   privateKeyR   t   methodt   verifyt   caCertst   verifyDepthi   t   requireCertificatet
   verifyOncet   enableSingleUseKeyst   enableSessionst   fixBrokenPeerst   enableSessionTicketsN(   Re   t   OpenSSLCertificateOptionsR=   R>   R    t   SSLv3_METHODRK   t   Falset
   getContextt   __getstate__t   failIfR
   R   t   __setstate__R}   R   R   R   R   R   R   R   R   R   R   R   R   (   R(   t	   firstOptst   contextt   statet   opts(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt$   test_certificateOptionsSerialization  s>    					c         C   s?   t  j d t  } | j   } |  j d | j d  d @ d S(   sR   
        Enabling session tickets should not set the OP_NO_TICKET option.
        R   i    i @  N(   Re   R   RK   R   Rd   t   set_options(   R(   R   t   ctx(    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt%   test_certificateOptionsSessionTickets)  s    c         C   s?   t  j d t  } | j   } |  j d | j d  d @ d S(   sN   
        Enabling session tickets should set the OP_NO_TICKET option.
        R   i @  i    N(   Re   R   R   R   Rd   R   (   R(   R   R   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt-   test_certificateOptionsSessionTicketsDisabled2  s    c            sb   t  j   }   j t j d   j d   j d t  t j d t  d | | j   f d    S(   sw   
        Check that anonymous connections are allowed when certificates aren't
        required on the server.
        R   R   R   R%   c            s     j  |  t j  S(   N(   Rd   R2   R6   (   t   result(   R(   (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   <lambda>H  s    (	   R   RN   RY   Re   R   R=   R>   R   t   addCallback(   R(   R%   (    (   R(   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt%   test_allowedAnonymousClientConnection;  s    		c            s   t  j   } t  j   }   j t j d   j d   j d t d   j g d t  t j d t  d | d | t  j	 | | g d t }   f d	   } | j
 |  S(
   st   
        Check that anonymous connections are refused when certificates are
        required on the server.
        R   R   R   R   R   RG   RI   RB   c            sh   |  \ \ } } \ } }   j  |    j  |    j | j t j t f    j | j t j  d  S(   N(   R   t   assertIsInstancet   valueR    t   ErrorR   (   t   .0t   cSuccesst   cResultt   sSuccesst   sResult(   R(   (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt	   afterLost]  s
    (   R   RN   RY   Re   R   R=   R>   RK   R   RJ   R   (   R(   RG   RI   R*   R   (    (   R(   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt%   test_refusedAnonymousClientConnectionJ  s    			
c      
      s   t  j   } t  j   }   j t j d   j d   j d t d t  t j d t d t d   j	 g  d | d | t  j
 | | g d t }   f d	   } | j |  S(
   sg   
        Check that connecting with a certificate not accepted by the server CA
        fails.
        R   R   R   R   R   RG   RI   RB   c            s6   |  \ \ } } \ } }   j  |    j  |  d  S(   N(   R   (   R   R   R   R   R   (   R(   (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR   z  s    (   R   RN   RY   Re   R   R=   R>   R   RK   R@   RJ   R   (   R(   RG   RI   R*   R   (    (   R(   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt"   test_failedCertificateVerificationi  s    	c      
      sz   t  j   }   j t j d   j d   j d t d t  t j d t d t d   j g  d | | j	   f d    S(   si   
        Test a successful connection with client certificate validation on
        server side.
        R   R   R   R   R   R%   c            s     j  |  t j  S(   N(   Rd   R2   R6   (   R   (   R(   (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    (
   R   RN   RY   Re   R   R=   R>   R   RK   R   (   R(   R%   (    (   R(   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt&   test_successfulCertificateVerification  s    c            s   t  j   }   j t j d   j d   j d t d t d   j g  t j d   j	 d   j d t d t d   j g  d | | j
   f d    S(   sg   
        Test a successful connection with validation on both server and client
        sides.
        R   R   R   R   R   R%   c            s     j  |  t j  S(   N(   Rd   R2   R6   (   R   (   R(   (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    (   R   RN   RY   Re   R   R=   R>   RK   R@   R?   R   (   R(   R%   (    (   R(   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt9   test_successfulSymmetricSelfSignedCertificateVerification  s    c            s|  t  j d d  } t  j j   } | j |  } t  j d d  } t  j j   } | j |  } | j |  } | j | | d   d  } | j |  }	 | j |  }
 | j | |
 d   d  } | j |  } | j | | d   d	  } | j |  } | j | | d
   d  } | j |  } t j   } | j	 |  } | j	 |	  }   j
 | | d | | j   f d    S(   sT   
        Check certificates verification building custom certificates data.
        R]   R<   R;   c         S   s   t  S(   N(   RK   (   Rk   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    i   c         S   s   t  S(   N(   RK   (   Rk   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    i  c         S   s   t  S(   N(   RK   (   Rk   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    i   c         S   s   t  S(   N(   RK   (   Rk   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    i*   R%   c            s     j  |  t j  S(   N(   Rd   R2   R6   (   R   (   R(   (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    (   Re   Rg   t   KeyPairt   generatet   certificateRequestt   signCertificateRequestt   newCertificateR   RN   t   optionsRY   R   (   R(   t   clientDNt	   clientKeyt   clientCertReqt   serverDNt	   serverKeyt   serverCertReqt   clientSelfCertReqt   clientSelfCertDatat   clientSelfCertt   serverSelfCertReqt   serverSelfCertDatat   serverSelfCertt   clientCertDatat
   clientCertt   serverCertDatat
   serverCertR%   t
   serverOptst
   clientOpts(    (   R(   s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_verification  s8    	N(   R0   R1   R&   RC   RE   RG   RI   R=   R>   R?   R@   RA   RM   RY   Rl   Rv   Rx   R   R   R   R   R   R   R   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR8   q   s,   

						 	(									s2   Reactor does not support SSL, cannot run SSL testst   _NotSSLTransportc           B   s   e  Z d    Z RS(   c         C   s   |  S(   N(    (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt	   getHandle  s    (   R0   R1   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s   t   _MaybeSSLTransportc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   |  S(   N(    (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    c         C   s   d  S(   N(   R&   (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   get_peer_certificate  s    c         C   s   d  S(   N(   R&   (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   get_host_certificate  s    (   R0   R1   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s   		t   _ActualSSLTransportc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   |  S(   N(    (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    c         C   s   t  j j t  j S(   N(   Re   Rz   R{   R|   t   original(   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    c         C   s   t  j j t  j S(   N(   Re   Rz   R{   t   A_PEER_CERTIFICATE_PEMR   (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s    (   R0   R1   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s   		t   Constructorsc           B   s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s>   |  j  t t j j t    } |  j t |  j d   d S(   s   
        Verify that peerFromTransport raises an exception if the transport
        passed is not actually an SSL transport.
        s   non-TLSN(	   Ri   R   Re   Rz   t   peerFromTransportR   t
   failUnlesst   strt
   startswith(   R(   R3   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_peerFromNonSSLTransport  s    		c         C   s>   |  j  t t j j t    } |  j t |  j d   d S(   s   
        Verify that peerFromTransport raises an exception if the transport
        passed is an SSL transport, but doesn't have a peer certificate.
        t   TLSN(	   Ri   R   Re   Rz   R   R   R   R   R   (   R(   R3   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_peerFromBlankSSLTransport  s    		c         C   s>   |  j  t t j j t    } |  j t |  j d   d S(   s   
        Verify that hostFromTransport raises an exception if the transport
        passed is not actually an SSL transport.
        s   non-TLSN(	   Ri   R   Re   Rz   t   hostFromTransportR   R   R   R   (   R(   R3   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_hostFromNonSSLTransport  s    		c         C   s>   |  j  t t j j t    } |  j t |  j d   d S(   s   
        Verify that hostFromTransport raises an exception if the transport
        passed is an SSL transport, but doesn't have a host certificate.
        R   N(	   Ri   R   Re   Rz   R   R   R   R   R   (   R(   R3   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_hostFromBlankSSLTransport  s    		c         C   s)   |  j  t j j t    j   d  d S(   s   
        Verify that hostFromTransport successfully creates the correct
        certificate if passed a valid SSL transport.
        i90  N(   R}   Re   Rz   R   R   t   serialNumber(   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_hostFromSSLTransport  s    	c         C   s)   |  j  t j j t    j   d  d S(   s   
        Verify that peerFromTransport successfully creates the correct
        certificate if passed a valid SSL transport.
        i:0  N(   R}   Re   Rz   R   R   R   (   R(   (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   test_peerFromSSLTransport!  s    	(   R0   R1   R   R   R   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyR     s   	
	
	
		
(-   t   __doc__t	   itertoolst   OpenSSLR    t   OpenSSL.cryptoR   R   R   R   t   twisted.internetR   Re   t   ImportErrort   twisted.trialR   R   R   R	   t   twisted.python.reflectR
   R   t   twisted.pythonR   t   twisted.internet.errorR   R   R   R|   R   t   countt   nextR   R"   t   ProtocolR#   R2   t   TestCaseR8   t   IReactorSSLR&   t   skipR   R   R   R   (    (    (    s?   /usr/lib/python2.7/dist-packages/twisted/test/test_sslverify.pyt   <module>   s<   		 ^@