ó
ÐH/\c        
   @@  sÛ  d  Z  d d l m Z d d l Z e j Z d d l Z d d l m Z m	 Z	 d d l m
 Z d d l m Z d d l m Z d d l m Z d	 d
 d d g Z e e e ƒ  d e d g d f  ƒZ e e Z d e k rê e j d ƒ n  e j Z d	 e f d „  ƒ  YZ d e j f d „  ƒ  YZ y
 e Z Wn e k
 r?n" Xe e d ƒ rae  e  d „ Z n  d
 e f d „  ƒ  YZ! e! e _" e d ƒ Z# e d ƒ Z$ e d ƒ Z% e  e  e& e' e( e  e) e) e  d „	 Z* e( e  d „ Z+ d S(   s    SSL wrapper for socket objects on Python 3.

For the documentation, refer to :mod:`ssl` module manual.

This module implements cooperative SSL socket wrappers.
i    (   t   absolute_importN(   t   sockett   timeout_default(   t   error(   t   timeout(   t   copy_globals(   t   reft
   SSLContextt	   SSLSockett   wrap_sockett   get_server_certificatet   names_to_ignoreR   t   dunder_names_to_keept
   namedtuplec           B@  sÎ   e  Z d	 Z e e e d	 d	 d  „ Z e e d ƒ s< e Z	 n  e e j
 d ƒ r e j
 j d „  ƒ Z
 e j j d „  ƒ Z e j j d „  ƒ Z n  e e d ƒ rÌ e j j d „  ƒ Z e j j d „  ƒ Z n  RS(
   c         C@  s4   |  j  d | d | d | d | d | d |  d | ƒ S(   Nt   sockt   server_sidet   do_handshake_on_connectt   suppress_ragged_eofst   server_hostnamet   _contextt   _session(   t   sslsocket_class(   t   selfR   R   R   R   R   t   session(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR	   4   s    	t   check_hostnamet   setterc         C@  s    t  t t ƒ j j |  | ƒ d  S(   N(   t   supert   orig_SSLContextt   optionst   __set__(   R   t   value(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR   O   s    c         C@  s    t  t t ƒ j j |  | ƒ d  S(   N(   R   R   t   verify_flagsR   (   R   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR   S   s    c         C@  s    t  t t ƒ j j |  | ƒ d  S(   N(   R   R   t   verify_modeR   (   R   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR    W   s    t   minimum_versionc         C@  s    t  t t ƒ j j |  | ƒ d  S(   N(   R   R   R!   R   (   R   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR!   ]   s    c         C@  s    t  t t ƒ j j |  | ƒ d  S(   N(   R   R   t   maximum_versionR   (   R   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR"   a   s    N(   t   __name__t
   __module__t   NoneR   t   Falset   TrueR	   t   hasattrR   R   R   R   R   R    R!   R"   (    (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR   /   s   	t   _contextawaresockc           B@  sY   e  Z d Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z d „  Z RS(   t   _sslsockc         C@  s   |  j  ƒ  j S(   N(   R*   t   context(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR+   s   s    c         C@  s   | |  j  ƒ  _ d  S(   N(   R*   R+   (   R   t   ctx(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR+   w   s    c         C@  s   |  j  ƒ  j S(   s!   The SSLSession for client socket.(   R*   R   (   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR   {   s    c         C@  s   | |  j  ƒ  _ d  S(   N(   R*   R   (   R   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR   €   s    c         C@  s;   y t  |  j ƒ  | ƒ SWn t k
 r* n Xt | ƒ ‚ d  S(   N(   t   getattrR*   t   RuntimeErrort   AttributeError(   R   t   name(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   __getattr__„   s
    (   R*   (   R#   R$   t	   __slots__t   propertyR+   R   R   R1   (    (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR)   f   s   t   _createc         C@  sI   t  j t  ƒ } |  | _ | p! | | j _ | d  k	 rE | | j _ n  | S(   N(   t	   SSLObjectt   __new__t   _sslobjt   ownerR%   R   (   t   sslobjR8   R   t   s(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   _SSLObject_factory—   s    	c           B@  s	  e  Z d  Z e Z d+ d+ d+ e e e d+ e	 e
 e d d+ e	 d+ d+ d+ d+ d+ d „ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z d „  Z d+ d	 „ Z d
 „  Z d d+ d „ Z d „  Z e d „ Z d „  Z e e d ƒ rd „  Z d „  Z d „  Z n  d „  Z d „  Z d e  d „ Z! d+ d „ Z" d „  Z# d d „ Z$ d d d „ Z% d+ d d „ Z& d d d „ Z' d+ d d „ Z( d „  Z) d „  Z* d  „  Z+ d! „  Z, d" „  Z- d# „  Z. d$ „  Z/ d% „  Z0 d& „  Z1 d' „  Z2 d( „  Z3 d) d* „ Z4 RS(,   sl   
    gevent `ssl.SSLSocket <https://docs.python.org/3/library/ssl.html#ssl-sockets>`_
    for Python 3.
    i    c      
   C@  sœ  | r | |  _  n| r. | r. t d ƒ ‚ n  | rJ | rJ t d ƒ ‚ n  | r` | r` | } n  t | ƒ |  _  | |  j  _ | r” |  j  j | ƒ n  | r° |  j  j | | ƒ n  | rÉ |  j  j | ƒ n  | râ |  j  j | ƒ n  | |  _ | |  _	 | |  _
 | |  _ | |  _ | |  _ | j t t ƒ t k r?t d ƒ ‚ n  | rx| rZt d ƒ ‚ n  | d  k	 rxt d ƒ ‚ qxn  |  j  j rš| ršt d ƒ ‚ n  | |  _ | |  _ | |  _ | |  _ | |  _ t } | d  k	 rot j |  d | j d | j d	 | j d
 | j  ƒ  ƒ|  j! | j" ƒ  ƒ y | j# ƒ  Wn+ t$ k
 r[} | j% t% j& k rb‚  qbn Xt' } | j( ƒ  nA | d  k	 r‘t j |  d
 | ƒn t j |  d |	 d |
 d	 | ƒt) |  ƒ |  j* _+ t |  _, d  |  _- | |  _. | r˜yŒ |  j  j/ |  j* | | ƒ |  _- | d  k	 r4t0 |  j- d |  d |  j ƒ|  _- n  | rn|  j" ƒ  } | d k rat d ƒ ‚ n  |  j1 ƒ  n  Wq˜t$ k
 r”} |  j2 ƒ  | ‚ q˜Xn  d  S(   Ns5   certfile must be specified for server-side operationss   certfile must be specifieds!   only stream sockets are supporteds4   server_hostname can only be specified in client modes,   session can only be specified in client modes'   check_hostname requires server_hostnamet   familyt   typet   protot   filenoR8   R   g        sH   do_handshake_on_connect should not be specified for non-blocking sockets(3   R   t
   ValueErrorR   R    t   load_verify_locationst   load_cert_chaint   set_npn_protocolst   set_cipherst   keyfilet   certfilet	   cert_reqst   ssl_versiont   ca_certst   cipherst
   getsockoptt
   SOL_SOCKETt   SO_TYPEt   SOCK_STREAMt   NotImplementedErrorR%   R   R   R   R   R   R   R&   R   t   __init__R<   R=   R>   R?   t
   settimeoutt
   gettimeoutt   getpeernamet   socket_errort   errnot   ENOTCONNR'   t   detacht   _wreft   _sockR*   t   _closedR7   t
   _connectedt   _wrap_socketR;   t   do_handshaket   close(   R   R   RE   RF   R   RG   RH   RI   R   R<   R=   R>   R?   R   t   npn_protocolsRJ   R   R   R   t	   connectedt   eR   t   x(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRP   ©   s–    															
			
c         C@  s   |  j  S(   N(   R   (   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR+     s    c         C@  s   | |  _  | |  j _ d  S(   N(   R   R7   R+   (   R   R,   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR+     s    	c         C@  s   |  j  d k	 r |  j  j Sd S(   s!   The SSLSession for client socket.N(   R7   R%   R   (   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR     s    c         C@  s+   | |  _  |  j d  k	 r' | |  j _ n  d  S(   N(   R   R7   R%   R   (   R   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR     s    	c         C@  s   |  j  d k	 r |  j  j Sd S(   s.   Was the client session reused during handshakeN(   R7   R%   t   session_reused(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRc   "  s    c         C@  s   t  d |  j j ƒ ‚ d  S(   Ns   Can't dup() %s instances(   RO   t	   __class__R#   (   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   dup(  s    c         C@  s   d  S(   N(    (   R   t   msg(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   _checkClosed,  s    c         C@  s   |  j  s |  j ƒ  n  d  S(   N(   R[   RS   (   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   _check_connected0  s    	i   c         C@  sK  |  j  ƒ  x:t rF|  j s+ t d ƒ ‚ n  | d k rK | d k rG d Sd Sy9 | d k	 rm |  j j | | ƒ S|  j j | p d ƒ SWq t k
 rÂ |  j d k r© ‚  n  |  j |  j	 d t
 ƒq t k
 rý |  j d k rä ‚  n  |  j |  j d t
 ƒq t k
 rB} | j d t k r<|  j r<| d k r8d Sd S‚  q Xq Wd S(   sO   Read up to LEN bytes and return them.
        Return zero-length string on EOF.s'   Read on closed or unwrapped SSL socket.i    t    i   g        t   timeout_excN(   Rg   R'   R7   R@   R%   t   readt   SSLWantReadErrorR   t   _waitt   _read_eventt   _SSLErrorReadTimeoutt   SSLWantWriteErrort   _write_eventt   SSLErrort   argst   SSL_ERROR_EOFR   (   R   t   lent   buffert   ex(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRk   8  s0    
		c         C@  sâ   |  j  ƒ  xÑ t rÝ |  j s+ t d ƒ ‚ n  y |  j j | ƒ SWq t k
 rÙ } | j d t k r’ |  j d k ry ‚  n  |  j	 |  j
 d t ƒqÚ | j d t k rÓ |  j d k rº ‚  n  |  j	 |  j d t ƒqÚ ‚  q Xq Wd S(   sh   Write DATA to the underlying SSL channel.  Returns
        number of bytes of DATA actually transmitted.s(   Write on closed or unwrapped SSL socket.i    g        Rj   N(   Rg   R'   R7   R@   t   writeRr   Rs   t   SSL_ERROR_WANT_READR   Rm   Rn   t   _SSLErrorWriteTimeoutt   SSL_ERROR_WANT_WRITERq   (   R   t   dataRw   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRx   Y  s     
		c         C@  sN   |  j  ƒ  |  j ƒ  y |  j j } Wn t k
 rC |  j j } n X| | ƒ S(   sá   Returns a formatted version of the data in the
        certificate provided by the other end of the SSL channel.
        Return None if no certificate was provided, {} if a
        certificate was provided, but not validated.(   Rg   Rh   R7   t   peer_certificateR/   t   getpeercert(   R   t   binary_formt   c(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR~   p  s    

c         C@  s/   |  j  ƒ  |  j s t j r" d  S|  j j ƒ  S(   N(   Rg   R7   t   _sslt   HAS_NPNR%   t   selected_npn_protocol(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRƒ   €  s    
t   HAS_ALPNc         C@  s/   |  j  ƒ  |  j s t j r" d  S|  j j ƒ  S(   N(   Rg   R7   R   R„   R%   t   selected_alpn_protocol(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR…   ˆ  s    
c         C@  s   |  j  j ƒ  S(   s   Return a list of ciphers shared by the client during the handshake or
            None if this is not a valid server connection.
            (   R7   t   shared_ciphers(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR†   Ž  s    c         C@  s   |  j  s d S|  j  j ƒ  S(   s^   Return a string identifying the protocol version used by the
            current SSL channel. N(   R7   R%   t   version(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR‡   ”  s    	c         C@  s$   |  j  ƒ  |  j s d  S|  j j ƒ  S(   N(   Rg   R7   R%   t   cipher(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRˆ     s    
	c         C@  s$   |  j  ƒ  |  j s d  S|  j j ƒ  S(   N(   Rg   R7   R%   t   compression(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR‰   £  s    
	c         C@  sõ   |  j  ƒ  | t k r" |  j } n  |  j rÛ | d k rM t d |  j ƒ ‚ n  x¡ t r× y |  j j | ƒ SWqP t k
 r  |  j d k r d S|  j	 |  j
 ƒ qP t k
 rÓ |  j d k rÀ d S|  j	 |  j ƒ qP XqP Wn t j |  | | | ƒ Sd  S(   Ni    s3   non-zero flags not allowed in calls to send() on %sg        (   Rg   R   R   R7   R@   Rd   R'   Rx   Rl   Rm   Rn   Rp   Rq   R   t   send(   R   R|   t   flagsR   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRŠ   ©  s(    
		c         C@  sb   |  j  ƒ  |  j r) t d |  j ƒ ‚ n5 | d  k rH t j |  | | ƒ St j |  | | | ƒ Sd  S(   Ns%   sendto not allowed on instances of %s(   Rg   R7   R@   Rd   R%   R   t   sendto(   R   R|   t   flags_or_addrt   addr(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRŒ   À  s    
	c         O@  s   t  d |  j ƒ ‚ d  S(   Ns&   sendmsg not allowed on instances of %s(   RO   Rd   (   R   Rs   t   kwargs(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   sendmsgÊ  s    c         C@  sˆ   |  j  ƒ  |  j r8 | d k r8 t d |  j ƒ ‚ q8 n  y t j |  | | ƒ SWn2 t k
 rƒ |  j d k r} t d ƒ ‚ n  ‚  n Xd  S(   Ni    s6   non-zero flags not allowed in calls to sendall() on %sg        s&   The operation did not complete (write)(	   Rg   R7   R@   Rd   R   t   sendallt   _socket_timeoutR   Rp   (   R   R|   R‹   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR‘   Ð  s    
	c         C@  se   |  j  ƒ  |  j rR | d k r5 t d |  j ƒ ‚ n  | d k rE d S|  j | ƒ St j |  | | ƒ S(   Ni    s3   non-zero flags not allowed in calls to recv() on %sRi   (   Rg   R7   R@   Rd   Rk   R   t   recv(   R   t   buflenR‹   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR“   à  s    
	c         C@  s‘   |  j  ƒ  | r+ | d  k r+ t | ƒ } n | d  k r@ d } n  |  j r{ | d k rk t d |  j ƒ ‚ n  |  j | | ƒ St j |  | | | ƒ S(   Ni   i    s8   non-zero flags not allowed in calls to recv_into() on %s(	   Rg   R%   Ru   R7   R@   Rd   Rk   R   t	   recv_into(   R   Rv   t   nbytesR‹   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR•   î  s    
		c         C@  s@   |  j  ƒ  |  j r) t d |  j ƒ ‚ n t j |  | | ƒ Sd  S(   Ns'   recvfrom not allowed on instances of %s(   Rg   R7   R@   Rd   R   t   recvfrom(   R   R”   R‹   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR—   ú  s
    
	c         C@  sC   |  j  ƒ  |  j r) t d |  j ƒ ‚ n t j |  | | | ƒ Sd  S(   Ns,   recvfrom_into not allowed on instances of %s(   Rg   R7   R@   Rd   R   t   recvfrom_into(   R   Rv   R–   R‹   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR˜     s
    
	c         O@  s   t  d |  j ƒ ‚ d  S(   Ns&   recvmsg not allowed on instances of %s(   RO   Rd   (   R   Rs   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   recvmsg
  s    c         O@  s   t  d |  j ƒ ‚ d  S(   Ns+   recvmsg_into not allowed on instances of %s(   RO   Rd   (   R   Rs   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   recvmsg_into  s    c         C@  s$   |  j  ƒ  |  j r  |  j j ƒ  Sd S(   Ni    (   Rg   R7   t   pending(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR›     s    
	c         C@  s'   |  j  ƒ  d  |  _ t j |  | ƒ d  S(   N(   Rg   R%   R7   R   t   shutdown(   R   t   how(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRœ     s    
	c         C@  sÓ   |  j  s" t d t |  ƒ ƒ ‚ n  xŒ t r° y |  j  j ƒ  } PWq% t k
 rw |  j d k rd ‚  n  |  j |  j ƒ q% t	 k
 r¬ |  j d k r™ ‚  n  |  j |  j
 ƒ q% Xq% Wd  |  _  | |  j k sÏ t ‚ |  S(   Ns   No SSL wrapper around g        (   R7   R@   t   strR'   Rœ   Rl   R   Rm   Rn   Rp   Rq   R%   RY   t   AssertionError(   R   R:   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   unwrap  s"    			c         C@  s   d  |  _ t j |  ƒ d  S(   N(   R%   R7   R   t   _real_close(   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR¡   A  s    	c         C@  s÷   |  j  ƒ  x– t r¢ y |  j j ƒ  PWq t k
 rc |  j d k rJ ‚  n  |  j |  j d t ƒq t	 k
 rž |  j d k r… ‚  n  |  j |  j
 d t ƒq Xq Wt j d  d k  ró |  j j ró |  j sÚ t d ƒ ‚ n  t |  j ƒ  |  j ƒ n  d S(	   s   Perform a TLS/SSL handshake.g        Rj   i   i   i   s-   check_hostname needs server_hostname argumentN(   i   i   (   Rh   R'   R7   R]   Rl   R   Rm   Rn   t   _SSLErrorHandshakeTimeoutRp   Rq   t   syst   version_infoR   R   R   R@   t   match_hostnameR~   (   R   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR]   F  s"    
		c         C@  s	  |  j  r t d ƒ ‚ n  |  j r0 t d ƒ ‚ n  |  j j |  j t |  j ƒ |  _ |  j	 d  k	 r„ t |  j d |  d |  j	 ƒ|  _ n  ya | r¢ t j |  | ƒ } n d  } t j |  | ƒ | sà |  j rÔ |  j ƒ  n  t |  _ n  | SWn t k
 rd  |  _ ‚  n Xd  S(   Ns!   can't connect in server-side modes/   attempt to connect already-connected SSLSocket!R8   R   (   R   R@   R[   R   R\   RY   R&   R   R7   R   R%   R;   R   t
   connect_ext   connectR   R]   R'   RT   (   R   RŽ   R¦   t   rc(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   _real_connect^  s(    		!$		c         C@  s   |  j  | t ƒ d S(   sQ   Connects to remote ADDR, and then wraps the connection in
        an SSL channel.N(   R©   R&   (   R   RŽ   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR§   w  s    c         C@  s   |  j  | t ƒ S(   sQ   Connects to remote ADDR, and then wraps the connection in
        an SSL channel.(   R©   R'   (   R   RŽ   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR¦   |  s    c         C@  sS   t  j |  ƒ \ } } | j ƒ  |  j j | d |  j d |  j d t ƒ} | | f S(   s¿   Accepts a new connection from a remote client, and returns
        a tuple containing that new connection wrapped with a server-side
        SSL channel, and the address of the remote client.R   R   R   (   R   t   acceptt   _drop_eventsR   R	   R   R   R'   (   R   t   newsockRŽ   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyRª     s    
			s
   tls-uniquec         C@  s   t  |  j d ƒ r" |  j j | ƒ S| t k r= t d ƒ ‚ n  | d k ra t d j | ƒ ƒ ‚ n  |  j d k rt d S|  j j ƒ  S(   sä   Get channel binding data for current connection.  Raise ValueError
        if the requested `cb_type` is not supported.  Return bytes of the data
        or None if the data is not available (e.g. before the handshake).
        t   get_channel_bindings    Unsupported channel binding types
   tls-uniques(   {0} channel binding type not implementedN(	   R(   R7   R­   t   CHANNEL_BINDING_TYPESR@   RO   t   formatR%   t   tls_unique_cb(   R   t   cb_type(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR­   Ž  s    N(5   R#   R$   t   __doc__R)   t   _gevent_sock_classR%   R&   t	   CERT_NONEt   PROTOCOL_SSLv23R'   t   AF_INETRN   RP   R3   R+   R   R   Rc   Re   Rg   Rh   Rk   Rx   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­   (    (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR   Ÿ   sb   		\		!							
						$						s   The read operation timed outs   The write operation timed outs!   The handshake operation timed outc
   
      C@  sC   t  d |  d | d | d | d | d | d | d | d	 | d
 |	 ƒ 
S(   NR   RE   RF   R   RG   RH   RI   R   R   RJ   (   R   (
   R   RE   RF   R   RG   RH   RI   R   R   RJ   (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR	   ©  s    c         C@  st   |  \ } } | d k	 r! t } n t } t |  ƒ } t | d | d | d | ƒ} | j t ƒ } | j ƒ  t | ƒ S(   s÷   Retrieve the certificate from the server at the specified address,
    and return it as a PEM-encoded string.
    If 'ca_certs' is specified, validate the server cert against it.
    If 'ssl_version' is specified, use it in the connection attempt.RH   RG   RI   N(	   R%   t   CERT_REQUIREDR´   t   create_connectionR	   R~   R'   R^   t   DER_cert_to_PEM_cert(   RŽ   RH   RI   t   _RG   R:   t   dercert(    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyR
   ¸  s    	
(,   R²   t
   __future__R    t   sslt   __ssl__R   RU   t   gevent.socketR   R   R   RT   R   R’   t   gevent._utilR   t   weakrefR   RX   t   __implements__t   globalst   __imports__t   __all__t   removeR   R   R³   R)   R5   R;   t	   NameErrorR(   R%   R   R   Ro   Rz   R¢   R&   R´   Rµ   R'   R	   R
   (    (    (    s+   lib/python2.7/site-packages/gevent/_ssl3.pyt   <module>   sT   			
	7'
ÿ ÿ 	
