JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrў f_c+@sdZddlZddlZddlZddlmZmZmZddlmZddlmZm Z m Z m Z m Z m Z ddlmZmZmZddlmZmZmZmZmZmZyddlmZWnek rYnXydd lmZWnek rYnXdd lmZmZmZmZydd lmZWnek rjYnXdd lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'dd lm(Z(m)Z)m*Z*ddlm+Z+m,Z,m-Z-m.Z.ddlm/Z/e0ede1dZ>m?Z?ddl@Z@ddlAZAddlBZBejCrdgZDngZDdZEGdddeFZGdd d!ZHd"d#ZIGd$d%d%eZJGd&d'd'e6ZKe5e5eLee.e5eMeMe5d(d) ZNd*d+ZOd,ZPd-ZQd.d/ZRd0d1ZSe+e5d2d3ZTd4d5ZUdS(6uThis module provides some more Pythonic support for SSL. Object types: SSLSocket -- subtype of socket.socket which does SSL over the socket Exceptions: SSLError -- exception raised for I/O errors Functions: cert_time_to_seconds -- convert time string used for certificate notBefore and notAfter functions to integer seconds past the Epoch (the time values returned from time.time()) fetch_server_certificate (HOST, PORT) -- fetch the certificate provided by the server running on HOST at port PORT. No validation of the certificate is performed. Integer constants: SSL_ERROR_ZERO_RETURN SSL_ERROR_WANT_READ SSL_ERROR_WANT_WRITE SSL_ERROR_WANT_X509_LOOKUP SSL_ERROR_SYSCALL SSL_ERROR_SSL SSL_ERROR_WANT_CONNECT SSL_ERROR_EOF SSL_ERROR_INVALID_ERROR_CODE The following group define certificate requirements that one side is allowing/requiring from the other side: CERT_NONE - no certificates from the other side are required (or will be looked at if provided) CERT_OPTIONAL - certificates are not required, but if provided will be validated, and if validation fails, the connection will also fail CERT_REQUIRED - certificates are required, and will be validated, and if validation fails, the connection will also fail The following constants identify various SSL protocol variants: PROTOCOL_SSLv2 PROTOCOL_SSLv3 PROTOCOL_SSLv23 PROTOCOL_TLSv1 iN(uOPENSSL_VERSION_NUMBERuOPENSSL_VERSION_INFOuOPENSSL_VERSION(u _SSLContext(uSSLErroruSSLZeroReturnErroruSSLWantReadErroruSSLWantWriteErroruSSLSyscallErroru SSLEOFError(u CERT_NONEu CERT_OPTIONALu CERT_REQUIRED(uOP_ALLu OP_NO_SSLv2u OP_NO_SSLv3u OP_NO_TLSv1uOP_CIPHER_SERVER_PREFERENCEuOP_SINGLE_DH_USE(uOP_NO_COMPRESSION(uOP_SINGLE_ECDH_USE(u RAND_statusuRAND_addu RAND_bytesuRAND_pseudo_bytes(uRAND_egd( uSSL_ERROR_ZERO_RETURNuSSL_ERROR_WANT_READuSSL_ERROR_WANT_WRITEuSSL_ERROR_WANT_X509_LOOKUPuSSL_ERROR_SYSCALLu SSL_ERROR_SSLuSSL_ERROR_WANT_CONNECTu SSL_ERROR_EOFuSSL_ERROR_INVALID_ERROR_CODE(uHAS_SNIuHAS_ECDHuHAS_NPN(uPROTOCOL_SSLv3uPROTOCOL_SSLv23uPROTOCOL_TLSv1u PROTOCOL_TLS(u_OPENSSL_API_VERSIONu PROTOCOL_TLSuPROTOCOL_SSLv23uTLSv1uSSLv23uSSLv3(uPROTOCOL_SSLv2uSSLv2(u getnameinfo(uerror(usocketuAF_INETu SOCK_STREAMucreate_connection(u SOL_SOCKETuSO_TYPEu tls-uniqueu)DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2cBs|EeZdZdS(uCertificateErrorN(u__name__u __module__u __qualname__(u __locals__((u(/opt/alt/python33/lib64/python3.3/ssl.pyuCertificateErrorsuCertificateErroric CsDg}|sd S|jd^}}|jd}||krYtdt|n|su|j|jkS|dkr|jdnY|jds|jdr|jtj |n"|jtj |j ddx$|D]}|jtj |qWtj dd j |d tj }|j|S( uhMatching according to RFC 6125, section 6.4.3 http://tools.ietf.org/html/rfc6125#section-6.4.3 u.u*u,too many wildcards in certificate DNS name: u[^.]+uxn--u\*u[^.]*u\Au\.u\ZF(uFalseusplitucountuCertificateErrorurepruloweruappendu startswithureuescapeureplaceucompileujoinu IGNORECASEumatch( udnuhostnameu max_wildcardsupatsuleftmostu remainderu wildcardsufragupat((u(/opt/alt/python33/lib64/python3.3/ssl.pyu_dnsname_matchs&  " &u_dnsname_matchcCs[|stdng}|jdf}xC|D];\}}|dkr4t||r_dS|j|q4q4W|sxc|jdfD]L}xC|D];\}}|dkrt||rdS|j|qqWqWnt|dkrtd|d jtt|fn;t|dkrKtd ||d fn td dS( u)Verify that *cert* (in decoded format as returned by SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 rules are followed, but IP addresses are not accepted for *hostname*. CertificateError is raised on failure. On success, the function returns nothing. uempty or no certificateusubjectAltNameuDNSNusubjectu commonNameiu&hostname %r doesn't match either of %su, uhostname %r doesn't match %riu=no appropriate commonName or subjectAltName fields were found( u ValueErrorugetu_dnsname_matchuappendulenuCertificateErrorujoinumapurepr(ucertuhostnameudnsnamesusanukeyuvalueusub((u(/opt/alt/python33/lib64/python3.3/ssl.pyumatch_hostnames.  %umatch_hostnamecBs\|EeZdZdZd ZddZddZd ddd ddZ d d Z d S(u SSLContextu|An SSLContext holds various SSL-related configuration options and data, such as certificates and possibly a private key.uprotocolcOs2tj||}|tkr.|jtn|S(N(u _SSLContextu__new__u_SSLv2_IF_EXISTSu set_ciphersu_DEFAULT_CIPHERS(uclsuprotocoluargsukwargsuself((u(/opt/alt/python33/lib64/python3.3/ssl.pyu__new__s uSSLContext.__new__cCs ||_dS(N(uprotocol(uselfuprotocol((u(/opt/alt/python33/lib64/python3.3/ssl.pyu__init__suSSLContext.__init__c Cs+td|d|d|d|d|d|S(Nusocku server_sideudo_handshake_on_connectusuppress_ragged_eofsuserver_hostnameu_context(u SSLSocket(uselfusocku server_sideudo_handshake_on_connectusuppress_ragged_eofsuserver_hostname((u(/opt/alt/python33/lib64/python3.3/ssl.pyu wrap_sockets uSSLContext.wrap_socketcCst}xp|D]h}t|d}t|dksIt|dkrXtdn|jt||j|qW|j|dS(Nuasciiiiu(NPN protocols must be 1 to 255 in length(u bytearrayubytesulenuSSLErroruappenduextendu_set_npn_protocols(uselfu npn_protocolsuprotosuprotocolub((u(/opt/alt/python33/lib64/python3.3/ssl.pyuset_npn_protocolss  $uSSLContext.set_npn_protocolsN(uprotocolFT( u__name__u __module__u __qualname__u__doc__u __slots__u__new__u__init__uFalseuTrueuNoneu wrap_socketuset_npn_protocols(u __locals__((u(/opt/alt/python33/lib64/python3.3/ssl.pyu SSLContexts  u SSLContextcBs|EeZdZdZd?d?d?d@eed?dAe e dd?dAd?d?d?d?ddZ ddZ d?ddZ dd?d d Zd d Zd@d dZddZddZddZdddZd?ddZddZdddZddddZd?dd d!Zddd"d#Zd?dd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Z d0d1Z!d@d2d3Z"d4d5Z#d6d7Z$d8d9Z%d:d;Z&d<d=d>Z'd?S(Bu SSLSocketuThis class implements a subtype of socket.socket that wraps the underlying OS socket in an SSL context when necessary, and provides read and write methods over that channel.ic"Cs2|r||_n|r.| r.tdn|rJ| rJtdn|r`| r`|}nt||_||j_|r|jj|n|r|jj||n|r|jj|n|r|jj|n||_||_ ||_ ||_ ||_ ||_ |jtttkr?tdn|rZ|rZtdn||_||_||_| |_d }|dk r8tj|d|jd|jd|jd|j|j|j y|j!Wn=t"k r$}z|j#t#j$krnWYdd}~XnXd }|j&nA| dk rZtj|d| ntj|d| d| d| d |_'d|_(||_)|r.yY|jj*||||_(|r|j }|d krtd n|j+nWq.t"k r*}z|j,|WYdd}~Xq.XndS( Nu5certfile must be specified for server-side operationsucertfile must be specifiedu!only stream sockets are supportedu4server_hostname can only be specified in client modeufamilyutypeuprotoufilenoguHdo_handshake_on_connect should not be specified for non-blocking socketsFT(-ucontextu ValueErroru SSLContextu verify_modeuload_verify_locationsuload_cert_chainuset_npn_protocolsu set_ciphersukeyfileucertfileu cert_reqsu ssl_versionuca_certsuciphersu getsockoptu SOL_SOCKETuSO_TYPEu SOCK_STREAMuNotImplementedErroru server_sideuserver_hostnameudo_handshake_on_connectusuppress_ragged_eofsuFalseuNoneusocketu__init__ufamilyutypeuprotoufilenou settimeoutu gettimeoutu getpeernameu socket_erroruerrnouENOTCONNuTrueudetachu_closedu_sslobju _connectedu _wrap_socketu do_handshakeuclose(uselfusockukeyfileucertfileu server_sideu cert_reqsu ssl_versionuca_certsudo_handshake_on_connectufamilyutypeuprotoufilenousuppress_ragged_eofsu npn_protocolsuciphersuserver_hostnameu_contextu connectedueutimeoutux((u(/opt/alt/python33/lib64/python3.3/ssl.pyu__init__s                                 uSSLSocket.__init__cCstd|jjdS(NuCan't dup() %s instances(uNotImplementedu __class__u__name__(uself((u(/opt/alt/python33/lib64/python3.3/ssl.pyuduphsu SSLSocket.dupcCsdS(N((uselfumsg((u(/opt/alt/python33/lib64/python3.3/ssl.pyu _checkClosedlsuSSLSocket._checkClosedcCs|jyD|dk r1|jj||}n|jj|pCd}|SWn[tk r}z;|jdtkr|jr|dk rdSdSnWYdd}~XnXdS(uORead up to LEN bytes and return them. Return zero-length string on EOF.iisN(u _checkCloseduNoneu_sslobjureaduSSLErroruargsu SSL_ERROR_EOFusuppress_ragged_eofs(uselfulenubufferuvux((u(/opt/alt/python33/lib64/python3.3/ssl.pyureadps   uSSLSocket.readcCs|j|jj|S(uhWrite DATA to the underlying SSL channel. Returns number of bytes of DATA actually transmitted.(u _checkClosedu_sslobjuwrite(uselfudata((u(/opt/alt/python33/lib64/python3.3/ssl.pyuwrites uSSLSocket.writecCs|j|jj|S(uReturns 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.(u _checkClosedu_sslobjupeer_certificate(uselfu binary_form((u(/opt/alt/python33/lib64/python3.3/ssl.pyu getpeercerts uSSLSocket.getpeercertcCs3|j|j stj r"dS|jjSdS(N(u _checkClosedu_sslobju_ssluHAS_NPNuNoneuselected_npn_protocol(uself((u(/opt/alt/python33/lib64/python3.3/ssl.pyuselected_npn_protocols uSSLSocket.selected_npn_protocolcCs(|j|jsdS|jjSdS(N(u _checkClosedu_sslobjuNoneucipher(uself((u(/opt/alt/python33/lib64/python3.3/ssl.pyuciphers  uSSLSocket.ciphercCs(|j|jsdS|jjSdS(N(u _checkClosedu_sslobjuNoneu compression(uself((u(/opt/alt/python33/lib64/python3.3/ssl.pyu compressions  uSSLSocket.compressioncCs|j|jr|dkr5td|jnxy|jj|}WnVtk r}z6|jdtkrzdS|jdtkrdSWYdd}~Xq8X|Sq8nt j |||SdS(Niu3non-zero flags not allowed in calls to send() on %s( u _checkClosedu_sslobju ValueErroru __class__uwriteuSSLErroruargsuSSL_ERROR_WANT_READuSSL_ERROR_WANT_WRITEusocketusend(uselfudatauflagsuvux((u(/opt/alt/python33/lib64/python3.3/ssl.pyusends"    uSSLSocket.sendcCsb|j|jr)td|jn5|dkrHtj|||Stj||||SdS(Nu%sendto not allowed on instances of %s(u _checkClosedu_sslobju ValueErroru __class__uNoneusocketusendto(uselfudatau flags_or_addruaddr((u(/opt/alt/python33/lib64/python3.3/ssl.pyusendtos   uSSLSocket.sendtocOstd|jdS(Nu&sendmsg not allowed on instances of %s(uNotImplementedErroru __class__(uselfuargsukwargs((u(/opt/alt/python33/lib64/python3.3/ssl.pyusendmsgsuSSLSocket.sendmsgcCs|j|jr|dkr5td|jnt|}d}x3||kr||j||d}||7}qJW|Stj|||SdS(Niu6non-zero flags not allowed in calls to sendall() on %s(u _checkClosedu_sslobju ValueErroru __class__ulenusendusocketusendall(uselfudatauflagsuamountucountuv((u(/opt/alt/python33/lib64/python3.3/ssl.pyusendalls    uSSLSocket.sendallicCsY|j|jrB|dkr5td|jn|j|Stj|||SdS(Niu3non-zero flags not allowed in calls to recv() on %s(u _checkClosedu_sslobju ValueErroru __class__ureadusocketurecv(uselfubuflenuflags((u(/opt/alt/python33/lib64/python3.3/ssl.pyurecvs    uSSLSocket.recvcCs|j|r+|dkr+t|}n|dkr@d}n|jr{|dkrktd|jn|j||Stj||||SdS(Niiu8non-zero flags not allowed in calls to recv_into() on %s( u _checkCloseduNoneulenu_sslobju ValueErroru __class__ureadusocketu recv_into(uselfubufferunbytesuflags((u(/opt/alt/python33/lib64/python3.3/ssl.pyu recv_intos     uSSLSocket.recv_intocCs@|j|jr)td|jntj|||SdS(Nu'recvfrom not allowed on instances of %s(u _checkClosedu_sslobju ValueErroru __class__usocketurecvfrom(uselfubuflenuflags((u(/opt/alt/python33/lib64/python3.3/ssl.pyurecvfroms   uSSLSocket.recvfromcCsC|j|jr)td|jntj||||SdS(Nu,recvfrom_into not allowed on instances of %s(u _checkClosedu_sslobju ValueErroru __class__usocketu recvfrom_into(uselfubufferunbytesuflags((u(/opt/alt/python33/lib64/python3.3/ssl.pyu recvfrom_intos   uSSLSocket.recvfrom_intocOstd|jdS(Nu&recvmsg not allowed on instances of %s(uNotImplementedErroru __class__(uselfuargsukwargs((u(/opt/alt/python33/lib64/python3.3/ssl.pyurecvmsg suSSLSocket.recvmsgcOstd|jdS(Nu+recvmsg_into not allowed on instances of %s(uNotImplementedErroru __class__(uselfuargsukwargs((u(/opt/alt/python33/lib64/python3.3/ssl.pyu recvmsg_into suSSLSocket.recvmsg_intocCs(|j|jr |jjSdSdS(Ni(u _checkClosedu_sslobjupending(uself((u(/opt/alt/python33/lib64/python3.3/ssl.pyupendings   uSSLSocket.pendingcCs'|jd|_tj||dS(N(u _checkCloseduNoneu_sslobjusocketushutdown(uselfuhow((u(/opt/alt/python33/lib64/python3.3/ssl.pyushutdowns  uSSLSocket.shutdowncCs?|jr%|jj}d|_|Stdt|dS(NuNo SSL wrapper around (u_sslobjushutdownuNoneu ValueErrorustr(uselfus((u(/opt/alt/python33/lib64/python3.3/ssl.pyuunwraps   uSSLSocket.unwrapcCsd|_tj|dS(N(uNoneu_sslobjusocketu _real_close(uself((u(/opt/alt/python33/lib64/python3.3/ssl.pyu _real_close%s uSSLSocket._real_closec CsT|j}z3|dkr1|r1|jdn|jjWd|j|XdS(uPerform a TLS/SSL handshake.gN(u gettimeoutu settimeoutuNoneu_sslobju do_handshake(uselfublockutimeout((u(/opt/alt/python33/lib64/python3.3/ssl.pyu do_handshake*s  uSSLSocket.do_handshakec Cs|jrtdn|jr0tdn|jj|d|j|_ya|rltj ||}nd}tj |||s|j r|j nd|_n|SWntk rd|_YnXdS(Nu!can't connect in server-side modeu/attempt to connect already-connected SSLSocket!FT(u server_sideu ValueErroru _connecteducontextu _wrap_socketuFalseuserver_hostnameu_sslobjusocketu connect_exuNoneuconnectudo_handshake_on_connectu do_handshakeuTrueu socket_error(uselfuaddru connect_exurc((u(/opt/alt/python33/lib64/python3.3/ssl.pyu _real_connect5s$       uSSLSocket._real_connectcCs|j|ddS(uQConnects to remote ADDR, and then wraps the connection in an SSL channel.NF(u _real_connectuFalse(uselfuaddr((u(/opt/alt/python33/lib64/python3.3/ssl.pyuconnectLsuSSLSocket.connectcCs|j|dS(uQConnects to remote ADDR, and then wraps the connection in an SSL channel.T(u _real_connectuTrue(uselfuaddr((u(/opt/alt/python33/lib64/python3.3/ssl.pyu connect_exQsuSSLSocket.connect_excCsItj|\}}|jj|d|jd|jdd}||fS(uAccepts 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.udo_handshake_on_connectusuppress_ragged_eofsu server_sideT(usocketuacceptucontextu wrap_socketudo_handshake_on_connectusuppress_ragged_eofsuTrue(uselfunewsockuaddr((u(/opt/alt/python33/lib64/python3.3/ssl.pyuacceptVs    uSSLSocket.acceptu tls-uniquecCs_|tkrtdn|dkr?tdj|n|jdkrRdS|jjS(uGet 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). u Unsupported channel binding typeu tls-uniqueu({0} channel binding type not implementedN(uCHANNEL_BINDING_TYPESu ValueErroruNotImplementedErroruformatu_sslobjuNoneu tls_unique_cb(uselfucb_type((u(/opt/alt/python33/lib64/python3.3/ssl.pyuget_channel_bindingbs  uSSLSocket.get_channel_bindingNFT((u__name__u __module__u __qualname__u__doc__uNoneuFalseu CERT_NONEu PROTOCOL_TLSuTrueuAF_INETu SOCK_STREAMu__init__udupu _checkClosedureaduwriteu getpeercertuselected_npn_protocolucipheru compressionusendusendtousendmsgusendallurecvu recv_intourecvfromu recvfrom_intourecvmsgu recvmsg_intoupendingushutdownuunwrapu _real_closeu do_handshakeu _real_connectuconnectu connect_exuacceptuget_channel_binding(u __locals__((u(/opt/alt/python33/lib64/python3.3/ssl.pyu SSLSocket sJ   P                 u SSLSocketc CsCtd|d|d|d|d|d|d|d|d |d | S( Nusockukeyfileucertfileu server_sideu cert_reqsu ssl_versionuca_certsudo_handshake_on_connectusuppress_ragged_eofsuciphers(u SSLSocket( usockukeyfileucertfileu server_sideu cert_reqsu ssl_versionuca_certsudo_handshake_on_connectusuppress_ragged_eofsuciphers((u(/opt/alt/python33/lib64/python3.3/ssl.pyu wrap_socketrs   u wrap_socketcCs%ddl}|j|j|dS(uTakes a date-time string in standard ASN1_print form ("MON DAY 24HOUR:MINUTE:SEC YEAR TIMEZONE") and return a Python time value in seconds past the epoch.iNu%b %d %H:%M:%S %Y GMT(utimeumktimeustrptime(u cert_timeutime((u(/opt/alt/python33/lib64/python3.3/ssl.pyucert_time_to_secondss ucert_time_to_secondsu-----BEGIN CERTIFICATE-----u-----END CERTIFICATE-----cCs?ttj|dd}tdtj|ddtdS(u[Takes a certificate in binary DER format and returns the PEM version of it as a string.uASCIIustrictu i@(ustrubase64ustandard_b64encodeu PEM_HEADERutextwrapufillu PEM_FOOTER(uder_cert_bytesuf((u(/opt/alt/python33/lib64/python3.3/ssl.pyuDER_cert_to_PEM_certsuDER_cert_to_PEM_certcCs|jts"tdtn|jjtsJtdtn|jtttt }tj|j ddS(uhTakes a certificate in ASCII PEM format and returns the DER-encoded version of it as a byte sequenceu(Invalid PEM encoding; must start with %su&Invalid PEM encoding; must end with %suASCIIustrict( u startswithu PEM_HEADERu ValueErrorustripuendswithu PEM_FOOTERulenubase64u decodebytesuencode(upem_cert_stringud((u(/opt/alt/python33/lib64/python3.3/ssl.pyuPEM_cert_to_DER_certs  #uPEM_cert_to_DER_certcCst|\}}|dk r!t}nt}t|}t|d|d|d|}|jd}|jt|S(uRetrieve 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.u ssl_versionu cert_reqsuca_certsNT( uNoneu CERT_REQUIREDu CERT_NONEucreate_connectionu wrap_socketu getpeercertuTrueucloseuDER_cert_to_PEM_cert(uaddru ssl_versionuca_certsuhostuportu cert_reqsusudercert((u(/opt/alt/python33/lib64/python3.3/ssl.pyuget_server_certificates     uget_server_certificatecCstj|dS(Nu (u_PROTOCOL_NAMESuget(u protocol_code((u(/opt/alt/python33/lib64/python3.3/ssl.pyuget_protocol_namesuget_protocol_name(Vu__doc__utextwrapureu_ssluOPENSSL_VERSION_NUMBERuOPENSSL_VERSION_INFOuOPENSSL_VERSIONu _SSLContextuSSLErroruSSLZeroReturnErroruSSLWantReadErroruSSLWantWriteErroruSSLSyscallErroru SSLEOFErroru CERT_NONEu CERT_OPTIONALu CERT_REQUIREDuOP_ALLu OP_NO_SSLv2u OP_NO_SSLv3u OP_NO_TLSv1uOP_CIPHER_SERVER_PREFERENCEuOP_SINGLE_DH_USEuOP_NO_COMPRESSIONu ImportErroruOP_SINGLE_ECDH_USEu RAND_statusuRAND_addu RAND_bytesuRAND_pseudo_bytesuRAND_egduSSL_ERROR_ZERO_RETURNuSSL_ERROR_WANT_READuSSL_ERROR_WANT_WRITEuSSL_ERROR_WANT_X509_LOOKUPuSSL_ERROR_SYSCALLu SSL_ERROR_SSLuSSL_ERROR_WANT_CONNECTu SSL_ERROR_EOFuSSL_ERROR_INVALID_ERROR_CODEuHAS_SNIuHAS_ECDHuHAS_NPNuPROTOCOL_SSLv3uPROTOCOL_SSLv23uPROTOCOL_TLSv1u PROTOCOL_TLSu_OPENSSL_API_VERSIONugetattruglobalsu_PROTOCOL_NAMESuPROTOCOL_SSLv2u_SSLv2_IF_EXISTSuNoneusocketu getnameinfou _getnameinfouerroru socket_erroruAF_INETu SOCK_STREAMucreate_connectionu SOL_SOCKETuSO_TYPEubase64u tracebackuerrnouHAS_TLS_UNIQUEuCHANNEL_BINDING_TYPESu_DEFAULT_CIPHERSu ValueErroruCertificateErroru_dnsname_matchumatch_hostnameu SSLContextu SSLSocketuFalseuTrueu wrap_socketucert_time_to_secondsu PEM_HEADERu PEM_FOOTERuDER_cert_to_PEM_certuPEM_cert_to_DER_certuget_server_certificateuget_protocol_name(((u(/opt/alt/python33/lib64/python3.3/ssl.pyu7s   ..  " @ "     "     1 )%g