???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................
]p              #   @   s  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 m Z	 m
 Z d  d l Z d  d l m Z m Z m Z d  d l m Z m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z m Z m Z d  d l m Z m Z d  d	 l m Z m  Z  m! Z! m" Z" y d  d
 l m# Z# Wn e$ k
 rJYn Xd d   Z% e% d  e% d  e% d  e% d  d  d l m& Z& m' Z' m( Z( m) Z) d  d l m* Z* e j+ d e, d d   d e e- j. Z/ e- _/ d d   e- j0 j1   D Z2 y
 e3 Z4 Wn e5 k
 r d Z4 Yn Xe j6 d k rFd  d l m7 Z7 m8 Z8 d  d l9 m9 Z9 m: Z: m; Z; m< Z< d  d l9 m= Z= m> Z> d  d l? Z? d  d l@ Z@ d  d lA ZA eB ZC e jD rd g ZE n g  ZE d ZF d ZG Gd  d!   d! eH  ZI d" d# d$  ZJ d% d&   ZK d' d(   ZL e d) d*  ZM d+ d,   ZN Gd- d.   d. e d. d/   ZO Gd0 d1   d1 eO e	  ZP Gd2 d3   d3 e  ZQ eP jR d4 d d5 d d6 d d7 d8 ZS e. d9 d d: d; d< eP jR d= d d> d d4 d d5 d d6 d d? d@ ZT eS ZU eT ZV GdA dB   dB  ZW GdC dD   dD e9  ZX d d d; e e. d dE dE d dF dG 	 ZY dH dI   ZZ dJ Z[ dK Z\ dL dM   Z] dN dO   Z^ e. d dP dQ  Z_ dR dS   Z` d S)T    N)
namedtuple)EnumIntEnum)OPENSSL_VERSION_NUMBEROPENSSL_VERSION_INFOOPENSSL_VERSION)_SSLContext	MemoryBIO)SSLErrorSSLZeroReturnErrorSSLWantReadErrorSSLWantWriteErrorSSLSyscallErrorSSLEOFError)	CERT_NONECERT_OPTIONALCERT_REQUIRED)txt2objnid2obj)RAND_statusRAND_add
RAND_bytesRAND_pseudo_bytes)RAND_egdc             C   s@   x9 t  t  D]+ } | j |   r t t |  t   | <q Wd  S)N)dir_ssl
startswithgetattrglobals)prefixn r!   (/opt/alt/python35/lib64/python3.5/ssl.py_import_symbolst   s    r#   ZOP_ZALERT_DESCRIPTION_Z
SSL_ERROR_ZVERIFY_)HAS_SNIHAS_ECDHHAS_NPNHAS_ALPN)_OPENSSL_API_VERSION
_SSLMethodc             C   s   |  j  d  o |  d k S)NZ	PROTOCOL_PROTOCOL_SSLv23)r   )namer!   r!   r"   <lambda>   s    r,   sourcec             C   s   i  |  ] \ } } | |  q Sr!   r!   ).0r+   valuer!   r!   r"   
<dictcomp>   s   	 r0   win32)enum_certificates	enum_crls)socketAF_INETSOCK_STREAMcreate_connection)
SOL_SOCKETSO_TYPEz
tls-uniquezECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:!aNULL:!eNULL:!MD5:!3DESzECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DESc               @   s   e  Z d  Z d S)CertificateErrorN)__name__
__module____qualname__r!   r!   r!   r"   r:      s   r:      c       	      C   sA  g  } |  s d S|  j  d  ^ } } | j d  } | | k rV t d t |     | sr |  j   | j   k S| d k r | j d  nY | j d  s | j d  r | j t j |   n" | j t j |  j	 d d   x$ | D] } | j t j |   q Wt j
 d	 d
 j |  d t j  } | j |  S)NF.*z,too many wildcards in certificate DNS name: z[^.]+zxn--z\*z[^.]*z\Az\.z\Z)splitcountr:   reprlowerappendr   reescapereplacecompilejoin
IGNORECASEmatch)	ZdnhostnameZmax_wildcardsZpatsZleftmostZ	remainderZ	wildcardsZfragpatr!   r!   r"   _dnsname_match   s&    "&rO   c             C   s   t  j |  j    } | | k S)N)	ipaddress
ip_addressrstrip)Zipnamehost_ipZipr!   r!   r"   _ipaddress_match   s    rT   c             C   s  |  s t  d   y t j |  } Wn t  k
 r? d  } Yn Xg  } |  j d f   } x | D] \ } } | d k r | d  k r t | |  r d  S| j |  q_ | d k r_ | d  k	 r t | |  r d  S| j |  q_ W| sHx] |  j d f   D]I } x@ | D]8 \ } } | d k rt | |  r3d  S| j |  qWq Wt |  d k rt d | d	 j	 t
 t |   f   n; t |  d k rt d
 | | d f   n t d   d  S)Nztempty or no certificate, match_hostname needs a SSL socket or SSL context with either CERT_OPTIONAL or CERT_REQUIREDZsubjectAltNameZDNSz
IP AddressZsubjectZ
commonNamer>   z&hostname %r doesn't match either of %sz, zhostname %r doesn't match %rr   z=no appropriate commonName or subjectAltName fields were found)
ValueErrorrP   rQ   getrO   rE   rT   lenr:   rJ   maprC   )certrM   rS   ZdnsnamesZsankeyr/   subr!   r!   r"   match_hostname  s>    %r\   DefaultVerifyPathszQcafile capath openssl_cafile_env openssl_cafile openssl_capath_env openssl_capathc              C   s   t  j   }  t j j |  d |  d  } t j j |  d |  d  } t t j j |  ra | n d  t j j |  r| | n d  |   S)Nr   r>         )	r   get_default_verify_pathsosenvironrV   r]   pathisfileisdir)partscafilecapathr!   r!   r"   r`   ?  s    r`   c                   sX   e  Z d  Z f  Z   f d d   Z e   f d d    Z e   f d d    Z   S)_ASN1Objectc                s   t    j |  t | d d  S)Nr+   F)super__new___txt2obj)clsoid)	__class__r!   r"   rk   R  s    z_ASN1Object.__new__c                s   t    j |  t |   S)N)rj   rk   _nid2obj)rm   Znid)ro   r!   r"   fromnidU  s    z_ASN1Object.fromnidc                s   t    j |  t | d d  S)Nr+   T)rj   rk   rl   )rm   r+   )ro   r!   r"   fromname[  s    z_ASN1Object.fromname)r;   r<   r=   	__slots__rk   classmethodrq   rr   r!   r!   )ro   r"   ri   M  s   ri   znid shortname longname oidc               @   s   e  Z d  Z d Z d Z d S)Purposez1.3.6.1.5.5.7.3.1z1.3.6.1.5.5.7.3.2N)r;   r<   r=   SERVER_AUTHCLIENT_AUTHr!   r!   r!   r"   ru   b  s   ru   c               @   s   e  Z d  Z d Z d Z e d d  Z e d d  Z d	 d
 d
 d d d  Z d	 d d d  Z	 d d   Z
 d d   Z d d   Z e j d d  Z d S)
SSLContextprotocol__weakref__CAROOTc             O   s/   t  j |  |  } | t k r+ | j t  | S)N)r   rk   _SSLv2_IF_EXISTSset_ciphers_DEFAULT_CIPHERS)rm   ry   argskwargsselfr!   r!   r"   rk   p  s    zSSLContext.__new__c             C   s   | |  _  d  S)N)ry   )r   ry   r!   r!   r"   __init__v  s    zSSLContext.__init__FTNc             C   s+   t  d | d | d | d | d | d |   S)Nsockserver_sidedo_handshake_on_connectsuppress_ragged_eofsserver_hostname_context)	SSLSocket)r   r   r   r   r   r   r!   r!   r"   wrap_sockety  s
    zSSLContext.wrap_socketc             C   s(   |  j  | | d | d | } t |  S)Nr   r   )Z	_wrap_bio	SSLObject)r   ZincomingZoutgoingr   r   sslobjr!   r!   r"   wrap_bio  s    	zSSLContext.wrap_bioc             C   s   t    } xm | D]e } t | d  } t |  d k sI t |  d k rU t d   | j t |   | j |  q W|  j |  d  S)Nasciir      z(NPN protocols must be 1 to 255 in length)	bytearraybytesrW   r
   rE   extendZ_set_npn_protocols)r   npn_protocolsprotosry   br!   r!   r"   set_npn_protocols  s    	$zSSLContext.set_npn_protocolsc             C   s   t    } xm | D]e } t | d  } t |  d k sI t |  d k rU t d   | j t |   | j |  q W|  j |  d  S)Nr   r   r   z)ALPN protocols must be 1 to 255 in length)r   r   rW   r
   rE   r   Z_set_alpn_protocols)r   Zalpn_protocolsr   ry   r   r!   r!   r"   set_alpn_protocols  s    	$zSSLContext.set_alpn_protocolsc             C   s   t    } yX xQ t |  D]C \ } } } | d k r | d k sO | j | k r | j |  q WWn t k
 r t j d  Yn X| r |  j d |  | S)NZx509_asnTz-unable to enumerate Windows certificate storecadata)r   r2   rn   r   PermissionErrorwarningswarnload_verify_locations)r   	storenamepurposeZcertsrY   encodingZtrustr!   r!   r"   _load_windows_store_certs  s    	z$SSLContext._load_windows_store_certsc             C   s\   t  | t  s t |   t j d k rN x! |  j D] } |  j | |  q4 W|  j   d  S)Nr1   )
isinstanceri   	TypeErrorsysplatform_windows_cert_storesr   Zset_default_verify_paths)r   r   r   r!   r!   r"   load_default_certs  s    zSSLContext.load_default_certs)ry   rz   )r{   r|   )r;   r<   r=   rs   r   PROTOCOL_TLSrk   r   r   r   r   r   r   ru   rv   r   r!   r!   r!   r"   rx   i  s   rx   rg   rh   r   c            C   s9  t  |  t  s t |    t t  } | j t O_ | j t O_ | j t t	 d d  O_ |  t
 j k r t | _ d | _ nm |  t
 j k r | j t t	 d d  O_ | j t t	 d d  O_ | j t t	 d d  O_ | j t  | s| s| r| j | | |  n | j t k r5| j |   | S)NZOP_NO_COMPRESSIONr   TZOP_CIPHER_SERVER_PREFERENCEZOP_SINGLE_DH_USEZOP_SINGLE_ECDH_USE)r   ri   r   rx   r   optionsOP_NO_SSLv2OP_NO_SSLv3r   r   ru   rv   r   verify_modecheck_hostnamerw   r~   _RESTRICTED_SERVER_CIPHERSr   r   r   )r   rg   rh   r   contextr!   r!   r"   create_default_context  s&    	r   	cert_reqsr   Fr   certfilekeyfilec      
      C   s   t  | t  s t |   t |   }	 |	 j t O_ |	 j t O_ | d  k	 rZ | |	 _ | |	 _ | r| | r| t	 d   | s | r |	 j
 | |  | s | s | r |	 j | | |  n |	 j t k r |	 j |  |	 S)Nzcertfile must be specified)r   ri   r   rx   r   r   r   r   r   rU   load_cert_chainr   r   r   )
ry   r   r   r   r   r   rg   rh   r   r   r!   r!   r"   _create_unverified_context  s"    		r   c               @   s  e  Z d  Z d d d  Z e d d    Z e j d d    Z e d d    Z e d	 d
    Z d d d d  Z	 d d   Z
 d d d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d# d$ d%  Z d& d'   Z d S)(r   Nc             C   s   | |  _  | p |  |  j  _ d  S)N)_sslobjowner)r   r   r   r!   r!   r"   r   '  s    	zSSLObject.__init__c             C   s
   |  j  j S)N)r   r   )r   r!   r!   r"   r   ,  s    zSSLObject.contextc             C   s   | |  j  _ d  S)N)r   r   )r   ctxr!   r!   r"   r   1  s    c             C   s
   |  j  j S)N)r   r   )r   r!   r!   r"   r   5  s    zSSLObject.server_sidec             C   s
   |  j  j S)N)r   r   )r   r!   r!   r"   r   :  s    zSSLObject.server_hostnamei   c             C   s:   | d  k	 r$ |  j  j | |  } n |  j  j |  } | S)N)r   read)r   rW   buffervr!   r!   r"   r   @  s    zSSLObject.readc             C   s   |  j  j |  S)N)r   write)r   datar!   r!   r"   r   L  s    zSSLObject.writeFc             C   s   |  j  j |  S)N)r   Zpeer_certificate)r   binary_formr!   r!   r"   getpeercertT  s    zSSLObject.getpeercertc             C   s   t  j r |  j j   Sd  S)N)r   r&   r   selected_npn_protocol)r   r!   r!   r"   r   ]  s    	zSSLObject.selected_npn_protocolc             C   s   t  j r |  j j   Sd  S)N)r   r'   r   selected_alpn_protocol)r   r!   r!   r"   r   d  s    	z SSLObject.selected_alpn_protocolc             C   s   |  j  j   S)N)r   cipher)r   r!   r!   r"   r   k  s    zSSLObject.cipherc             C   s   |  j  j   S)N)r   shared_ciphers)r   r!   r!   r"   r   p  s    zSSLObject.shared_ciphersc             C   s   |  j  j   S)N)r   compression)r   r!   r!   r"   r   v  s    zSSLObject.compressionc             C   s   |  j  j   S)N)r   pending)r   r!   r!   r"   r   {  s    zSSLObject.pendingc             C   sH   |  j  j   |  j j rD |  j s. t d   t |  j   |  j  d  S)Nz-check_hostname needs server_hostname argument)r   do_handshaker   r   r   rU   r\   r   )r   r!   r!   r"   r     s
    	zSSLObject.do_handshakec             C   s   |  j  j   S)N)r   shutdown)r   r!   r!   r"   unwrap  s    zSSLObject.unwrapz
tls-uniquec             C   sF   | t  k r t d   | d k r9 t d j |    |  j j   S)Nz Unsupported channel binding typez
tls-uniquez({0} channel binding type not implemented)CHANNEL_BINDING_TYPESrU   NotImplementedErrorformatr   Ztls_unique_cb)r   cb_typer!   r!   r"   get_channel_binding  s    zSSLObject.get_channel_bindingc             C   s   |  j  j   S)N)r   version)r   r!   r!   r"   r     s    zSSLObject.version)r;   r<   r=   r   propertyr   setterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r     s$   		r   c                   sA  e  Z d  Z d d d d e e d d e e d d d d d d d d d  Z e d d    Z	 e	 j
 d	 d    Z	 d
 d   Z d d d  Z d d   Z d d d d  Z d d   Z d d d  Z d d   Z d d   Z d d   Z d d   Z d d    Z d d! d"  Z d d# d$  Z d% d&   Z d d' d(  Z d d   f d) d*  Z d d d+ d,  Z d d d- d.  Z d d d/ d0  Z d d d1 d2  Z d3 d4   Z d5 d6   Z  d7 d8   Z! d9 d:   Z" d; d<   Z# d= d>   Z$ d d? d@  Z% dA dB   Z& dC dD   Z' dE dF   Z( dG dH   Z) dI dJ dK  Z* dL dM   Z+   S)Nr   NFTr   c             C   s,  | r | |  _  n | r+ | r+ t d   | rD | rD t d   | rW | rW | } t |  |  _  | |  j  _ | r |  j  j |  | r |  j  j | |  | r |  j  j |  | r |  j  j |  | |  _ | |  _	 | |  _
 | |  _ | |  _ | |  _ | j t t  t k r't d   | r?| r?t d   |  j  j r^| r^t d   | |  _ | |  _ | |  _ | |  _ | d  k	 rt j |  d | j d | j d | j d	 | j   |  j | j    | j    nA | d  k	 rt j |  d	 | n t j |  d |	 d |
 d | y |  j!   Wn@ t" k
 rs} z  | j# t# j$ k r[  d
 } WYd  d  } ~ Xn Xd } d
 |  _% d  |  _& | |  _' | r(ye |  j  j( |  | |  } t) | d |  |  _& | r|  j   } | d k rt d   |  j*   Wn% t" t f k
 r'|  j+     Yn Xd  S)Nz5certfile must be specified for server-side operationszcertfile must be specifiedz!only stream sockets are supportedz4server_hostname can only be specified in client modez'check_hostname requires server_hostnamefamilytypeprotofilenoFTr   g        zHdo_handshake_on_connect should not be specified for non-blocking sockets),r   rU   rx   r   r   r   r   r~   r   r   r   ssl_versionca_certsciphers
getsockoptr8   r9   r6   r   r   r   r   r   r   r4   r   r   r   r   r   
settimeout
gettimeoutdetachgetpeernameOSErrorerrnoZENOTCONN_closedr   
_connected_wrap_socketr   r   close)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   eZ	connectedr   timeoutr!   r!   r"   r     s    																		
zSSLSocket.__init__c             C   s   |  j  S)N)r   )r   r!   r!   r"   r     s    zSSLSocket.contextc             C   s   | |  _  | |  j _ d  S)N)r   r   r   )r   r   r!   r!   r"   r     s    	c             C   s   t  d |  j j   d  S)NzCan't dup() %s instances)NotImplementedro   r;   )r   r!   r!   r"   dup  s    zSSLSocket.dupc             C   s   d  S)Nr!   )r   msgr!   r!   r"   _checkClosed  s    zSSLSocket._checkClosedc             C   s   |  j  s |  j   d  S)N)r   r   )r   r!   r!   r"   _check_connected  s    	zSSLSocket._check_connectedi   c             C   s   |  j    |  j s t d   y |  j j | |  SWn[ t k
 r } z; | j d t k r~ |  j r~ | d  k	 rw d Sd Sn   WYd  d  } ~ Xn Xd  S)Nz'Read on closed or unwrapped SSL socket.r       )r   r   rU   r   r
   r   ZSSL_ERROR_EOFr   )r   rW   r   xr!   r!   r"   r     s    
	zSSLSocket.readc             C   s/   |  j    |  j s t d   |  j j |  S)Nz(Write on closed or unwrapped SSL socket.)r   r   rU   r   )r   r   r!   r!   r"   r   )  s    
	zSSLSocket.writec             C   s$   |  j    |  j   |  j j |  S)N)r   r   r   r   )r   r   r!   r!   r"   r   2  s    

zSSLSocket.getpeercertc             C   s3   |  j    |  j s t j r" d  S|  j j   Sd  S)N)r   r   r   r&   r   )r   r!   r!   r"   r   <  s    
zSSLSocket.selected_npn_protocolc             C   s3   |  j    |  j s t j r" d  S|  j j   Sd  S)N)r   r   r   r'   r   )r   r!   r!   r"   r   C  s    
z SSLSocket.selected_alpn_protocolc             C   s(   |  j    |  j s d  S|  j j   Sd  S)N)r   r   r   )r   r!   r!   r"   r   J  s    
	zSSLSocket.cipherc             C   s$   |  j    |  j s d  S|  j j   S)N)r   r   r   )r   r!   r!   r"   r   Q  s    
	zSSLSocket.shared_ciphersc             C   s(   |  j    |  j s d  S|  j j   Sd  S)N)r   r   r   )r   r!   r!   r"   r   W  s    
	zSSLSocket.compressionc             C   sY   |  j    |  j rB | d k r2 t d |  j   |  j j |  St j |  | |  Sd  S)Nr   z3non-zero flags not allowed in calls to send() on %s)r   r   rU   ro   r   r4   send)r   r   flagsr!   r!   r"   r   ^  s    
	zSSLSocket.sendc             C   sb   |  j    |  j r) t d |  j   n5 | d  k rH t j |  | |  St j |  | | |  Sd  S)Nz%sendto not allowed on instances of %s)r   r   rU   ro   r4   sendto)r   r   Zflags_or_addraddrr!   r!   r"   r   i  s    
	zSSLSocket.sendtoc             O   s   t  d |  j   d  S)Nz&sendmsg not allowed on instances of %s)r   ro   )r   r   r   r!   r!   r"   sendmsgs  s    zSSLSocket.sendmsgc             C   s   |  j    |  j r~ | d k r2 t d |  j   t |  } d } x3 | | k  ry |  j | | d    } | | 7} qG W| St j |  | |  Sd  S)Nr   z6non-zero flags not allowed in calls to sendall() on %s)r   r   rU   ro   rW   r   r4   sendall)r   r   r   amountrB   r   r!   r!   r"   r   y  s    
	zSSLSocket.sendallc                s<   |  j  d  k r% t   j | | |  S|  j | | |  Sd  S)N)r   rj   sendfile_sendfile_use_send)r   fileoffsetrB   )ro   r!   r"   r     s    zSSLSocket.sendfilec             C   sV   |  j    |  j r? | d k r2 t d |  j   |  j |  St j |  | |  Sd  S)Nr   z3non-zero flags not allowed in calls to recv() on %s)r   r   rU   ro   r   r4   recv)r   buflenr   r!   r!   r"   r     s    
	zSSLSocket.recvc             C   s   |  j    | r+ | d  k r+ t |  } n | d  k r= d } |  j ru | d k re t d |  j   |  j | |  St j |  | | |  Sd  S)Ni   r   z8non-zero flags not allowed in calls to recv_into() on %s)r   rW   r   rU   ro   r   r4   	recv_into)r   r   nbytesr   r!   r!   r"   r     s    
	zSSLSocket.recv_intoc             C   s@   |  j    |  j r) t d |  j   n t j |  | |  Sd  S)Nz'recvfrom not allowed on instances of %s)r   r   rU   ro   r4   recvfrom)r   r   r   r!   r!   r"   r     s
    
	zSSLSocket.recvfromc             C   sC   |  j    |  j r) t d |  j   n t j |  | | |  Sd  S)Nz,recvfrom_into not allowed on instances of %s)r   r   rU   ro   r4   recvfrom_into)r   r   r   r   r!   r!   r"   r     s
    
	zSSLSocket.recvfrom_intoc             O   s   t  d |  j   d  S)Nz&recvmsg not allowed on instances of %s)r   ro   )r   r   r   r!   r!   r"   recvmsg  s    zSSLSocket.recvmsgc             O   s   t  d |  j   d  S)Nz+recvmsg_into not allowed on instances of %s)r   ro   )r   r   r   r!   r!   r"   recvmsg_into  s    zSSLSocket.recvmsg_intoc             C   s(   |  j    |  j r  |  j j   Sd Sd  S)Nr   )r   r   r   )r   r!   r!   r"   r     s    
	zSSLSocket.pendingc             C   s'   |  j    d  |  _ t j |  |  d  S)N)r   r   r4   r   )r   howr!   r!   r"   r     s    
	zSSLSocket.shutdownc             C   s?   |  j  r% |  j  j   } d  |  _  | St d t |     d  S)NzNo SSL wrapper around )r   r   rU   str)r   sr!   r!   r"   r     s
    		zSSLSocket.unwrapc             C   s   d  |  _  t j |   d  S)N)r   r4   _real_close)r   r!   r!   r"   r    s    	zSSLSocket._real_closec             C   s[   |  j    |  j   } z0 | d k r8 | r8 |  j d   |  j j   Wd  |  j |  Xd  S)Ng        )r   r   r   r   r   )r   blockr   r!   r!   r"   r     s    
zSSLSocket.do_handshakec             C   s   |  j  r t d   |  j r* t d   |  j j |  d |  j  } t | d |  |  _ y[ | rx t j	 |  |  } n d  } t j
 |  |  | s d |  _ |  j r |  j   | SWn$ t t f k
 r d  |  _   Yn Xd  S)Nz!can't connect in server-side modez/attempt to connect already-connected SSLSocket!Fr   T)r   rU   r   r   r   r   r   r   r4   
connect_exconnectr   r   r   )r   r   r  r   rcr!   r!   r"   _real_connect  s&    				
	zSSLSocket._real_connectc             C   s   |  j  | d  d  S)NF)r  )r   r   r!   r!   r"   r     s    zSSLSocket.connectc             C   s   |  j  | d  S)NT)r  )r   r   r!   r!   r"   r    s    zSSLSocket.connect_exc             C   sI   t  j |   \ } } |  j j | d |  j d |  j d d } | | f S)Nr   r   r   T)r4   acceptr   r   r   r   )r   Znewsockr   r!   r!   r"   r  
  s    			zSSLSocket.acceptz
tls-uniquec             C   s#   |  j  d  k r d  S|  j  j |  S)N)r   r   )r   r   r!   r!   r"   r     s    zSSLSocket.get_channel_bindingc             C   s    |  j  d  k r d  S|  j  j   S)N)r   r   )r   r!   r!   r"   r     s    zSSLSocket.version),r;   r<   r=   r   r   r5   r6   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!   )ro   r"   r     sV   		T	


	r   Tc
       
      C   sC   t  d |  d | d | d | d | d | d | d | d	 | d
 |	  
S)Nr   r   r   r   r   r   r   r   r   r   )r   )
r   r   r   r   r   r   r   r   r   r   r!   r!   r"   r   )  s    r   c             C   s   d d l  m } d d l m } d } d } y' | j |  d  d  j    d } Wn( t k
 r} t d |  | f   Yn< X| |  d d   |  } | | d | f | d d   Sd  S)Nr   )strptime)timegmJanFebMarAprMayJunJulAugSepOctNovDecz %d %H:%M:%S %Y GMTr_   r>   z*time data %r does not match format "%%b%s"r^      )r  r  r  r  r  r  r  r  r  r  r  r  )timer	  Zcalendarr
  indextitlerU   )Z	cert_timer	  r
  ZmonthsZtime_formatZmonth_numberttr!   r!   r"   cert_time_to_seconds9  s    
 'r  z-----BEGIN CERTIFICATE-----z-----END CERTIFICATE-----c             C   s?   t  t j |   d d  } t d t j | d  d t d S)NASCIIstrict
@   )r   base64Zstandard_b64encode
PEM_HEADERtextwrapfill
PEM_FOOTER)Zder_cert_bytesfr!   r!   r"   DER_cert_to_PEM_certZ  s    r'  c             C   s   |  j  t  s t d t   |  j   j t  sD t d t   |  j   t t  t t   } t j | j	 d d   S)Nz(Invalid PEM encoding; must start with %sz&Invalid PEM encoding; must end with %sr  r  )
r   r"  rU   stripendswithr%  rW   r!  Zdecodebytesencode)Zpem_cert_stringdr!   r!   r"   PEM_cert_to_DER_certc  s    

#r,  c       
      C   s   |  \ } } | d  k	 r! t  } n t } t | d | d | } t |   / } | j |   } | j d  }	 Wd  QRXWd  QRXt |	  S)Nr   rg   T)r   r   _create_stdlib_contextr7   r   r   r'  )
r   r   r   hostportr   r   r   ZsslsockZdercertr!   r!   r"   get_server_certificatep  s    			r0  c             C   s   t  j |  d  S)Nz	<unknown>)_PROTOCOL_NAMESrV   )Zprotocol_coder!   r!   r"   get_protocol_name  s    r2  )arP   r#  rF   r   ra   collectionsr   enumr   Z_Enumr   _IntEnumr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   rl   r   rp   r   r   r   r   r   ImportErrorr#   r$   r%   r&   r'   r(   _convertr;   r)   r   r*   __members__itemsr1  ZPROTOCOL_SSLv2r}   	NameErrorr   r2   r3   r4   r5   r6   r7   r8   r9   r!  r   r   r   Zsocket_errorZHAS_TLS_UNIQUEr   r   r   rU   r:   rO   rT   r\   r]   r`   ri   ru   rx   rv   r   r   Z_create_default_https_contextr-  r   r   r   r  r"  r%  r'  r,  r0  r2  r!   r!   r!   r"   <module>[   s   ."



"
"	14	M/' 	