Viewing File: /opt/alt/python35/lib/python3.5/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-35.pyc



¨`W.ã'@sdZddlmZy$ddlmZddlmZWn1ek
rmZ	ze
e	ƒ‚WYddZ	[	XnXddlZddl
mZddlmZmZddlmZmZydd	lmZWn(e
k
rôdZdd
lmZYnXddlZddlZddlZddlmZdd
lmZddgZ eZ!ej"ej#j$ej%ej#j&iZ'e(edƒr£e(ej#dƒr£ej#j)e'ej*<e(edƒr×e(ej#dƒr×ej#j+e'ej,<y e'j-ej.ej#j/iƒWne0k
rYnXej1ej#j2ej3ej#j4ej5ej#j4ej#j6iZ7ej8j9j:dƒZ;dZ<ej!Z=ej>Z?dd„Z@dd„ZAGdd„deƒZdd„ZBGdd„deCƒZDerÞd%dd „ZEneZEeEeD_Ed!d"„ZFdddddddd#d$„Z>dS)&a!SSL with SNI_-support for Python 2. Follow these instructions if you would
like to verify SSL certificates in Python 2. Note, the default libraries do
*not* do certificate checking; you need to do additional work to validate
certificates yourself.

This needs the following packages installed:

* pyOpenSSL (tested with 0.13)
* ndg-httpsclient (tested with 0.3.2)
* pyasn1 (tested with 0.1.6)

You can install them with the following command:

    pip install pyopenssl ndg-httpsclient pyasn1

To activate certificate checking, call
:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code
before you begin making HTTP requests. This can be done in a ``sitecustomize``
module, or at any other time before your application begins using ``urllib3``,
like this::

    try:
        import urllib3.contrib.pyopenssl
        urllib3.contrib.pyopenssl.inject_into_urllib3()
    except ImportError:
        pass

Now you can use :mod:`urllib3` as you normally would, and it will support SNI
when the required modules are installed.

Activating this module also has the positive side effect of disabling SSL/TLS
compression in Python 2 (see `CRIME attack`_).

If you want to configure the default list of supported cipher suites, you can
set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable.

Module Variables
----------------

:var DEFAULT_SSL_CIPHER_LIST: The list of supported SSL/TLS cipher suites.

.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication
.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit)

é)Úabsolute_import)ÚSUBJ_ALT_NAME_SUPPORT)ÚSubjectAltNameN)Údecoder)ÚunivÚ
constraint)ÚtimeoutÚerror)Ú_fileobject)Úbackport_makefileé)Ú
connection)ÚutilÚinject_into_urllib3Úextract_from_urllib3ÚPROTOCOL_TLSv1_1ÚTLSv1_1_METHODÚPROTOCOL_TLSv1_2ÚTLSv1_2_METHODÚasciii@cCstt_tt_dt_dS)z7Monkey-patch urllib3 with PyOpenSSL-backed SSL-support.TN)Ússl_wrap_socketr
ÚHAS_SNIrÚIS_PYOPENSSL©rrú
/pyopenssl.pyrns		cCstt_tt_dt_dS)z4Undo monkey-patching by :func:`inject_into_urllib3`.FN)Úorig_connection_ssl_wrap_socketr
rÚorig_util_HAS_SNIrrrrrrrrvs		c@s2eZdZdZejjejddƒZdS)rz0ASN.1 implementation for subjectAltNames supportéiN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rZ
SequenceOfZsizeSpecrZValueSizeConstraintrrrrrs	rcCsg}ts|Stƒ}xât|jƒƒD]Î}|j|ƒ}|jƒ}|dkr\q,|jƒ}tj|d|ƒ}xz|D]r}t	|tƒsœq„xWtt
|ƒƒD]C}	|j|	ƒ}
|
jƒdkrÙq¯|j
t|
jƒƒƒq¯Wq„Wq,W|S)NssubjectAltNameZasn1SpecZdNSName)rrÚrangeZget_extension_countÚ
get_extensionZget_short_nameÚget_dataÚder_decoderÚdecodeÚ
isinstanceÚlenZgetComponentByPositionÚgetNameÚappendÚstrZgetComponent)Z	peer_certZdns_nameZ
general_namesÚiÚextZext_nameZext_datZdecoded_datÚnameÚentryZ	componentrrrÚget_subj_alt_nameŠs*		
%r0c@s¸eZdZdZddd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
dd„Zdd„Zdd„Z
ddd„Zdd„Zdd„ZdS)Ú
WrappedSocketz§API-compatibility wrapper for Python OpenSSL's Connection-class.

    Note: _makefile_refs, _drop() and _reuse() are needed for the garbage
    collector of pypy.
    TcCs1||_||_||_d|_d|_dS)NrF)r
ÚsocketÚsuppress_ragged_eofsÚ_makefile_refsÚ_closed)Úselfr
r2r3rrrÚ__init__¯s
				zWrappedSocket.__init__cCs
|jjƒS)N)r2Úfileno)r6rrrr8¶szWrappedSocket.filenocCs5|jdkr|jd8_|jr1|jƒdS)Nrr)r4r5Úclose)r6rrrÚ_decref_socketiosºs	zWrappedSocket._decref_socketioscOs5y|jj||Ž}Wntjjk
rt}z3|jrP|jdkrPdStt|ƒƒ‚WYdd}~Xn½tjj	k
rÀ}z'|jj
ƒtjjkr«dS‚WYdd}~Xnqtjjk
r,t
j
|jggg|jjƒƒ\}}}|stdƒ‚n|j||ŽSYnX|SdS)NrúUnexpected EOFózThe read operation timed outéÿÿÿÿ)r=r;)r
ÚrecvÚOpenSSLÚSSLÚSysCallErrorr3ÚargsÚSocketErrorr+ÚZeroReturnErrorÚget_shutdownÚRECEIVED_SHUTDOWNÚ
WantReadErrorÚselectr2Ú
gettimeoutr)r6rBÚkwargsÚdataÚeÚrdÚwdÚedrrrr>Às"$*zWrappedSocket.recvcOs/y|jj||ŽSWntjjk
rr}z3|jrN|jdkrNdStt|ƒƒ‚WYdd}~Xn¹tjj	k
r¾}z'|jj
ƒtjjkr©dS‚WYdd}~Xnmtjjk
r*t
j
|jggg|jjƒƒ\}}}|stdƒ‚n|j||ŽSYnXdS)NrúUnexpected EOFrzThe read operation timed outr=)r=rP)r
Ú	recv_intor?r@rAr3rBrCr+rDrErFrGrHr2rIr)r6rBrJrLrMrNrOrrrrQ×s $*zWrappedSocket.recv_intocCs|jj|ƒS)N)r2Ú
settimeout)r6rrrrrRìszWrappedSocket.settimeoutcCs|xuy|jj|ƒSWqtjjk
rstjg|jgg|jjƒƒ\}}}|sltƒ‚wYqXqWdS)N)	r
Úsendr?r@ZWantWriteErrorrHr2rIr)r6rKÚ_ZwlistrrrÚ_send_until_doneïs	zWrappedSocket._send_until_donecCsJd}x=|t|ƒkrE|j|||t…ƒ}||7}q	WdS)Nr)r(rUÚSSL_WRITE_BLOCKSIZE)r6rKÚ
total_sentÚsentrrrÚsendallúszWrappedSocket.sendallcCs|jjƒdS)N)r
Úshutdown)r6rrrrZszWrappedSocket.shutdowncCs^|jdkrKyd|_|jjƒSWqZtjjk
rGdSYqZXn|jd8_dS)NrT)r4r5r
r9r?r@ÚError)r6rrrr9s	zWrappedSocket.closeFcCsp|jjƒ}|s|S|r8tjjtjj|ƒSdd|jƒjfffddd„t|ƒDƒiS)NZsubjectZ
commonNameZsubjectAltNamecSsg|]}d|f‘qS)ZDNSr)Ú.0Úvaluerrrú
<listcomp>s	z-WrappedSocket.getpeercert.<locals>.<listcomp>)	r
Zget_peer_certificater?ZcryptoZdump_certificateZ
FILETYPE_ASN1Zget_subjectZCNr0)r6Zbinary_formÚx509rrrÚgetpeercerts			zWrappedSocket.getpeercertcCs|jd7_dS)Nr)r4)r6rrrÚ_reuse#szWrappedSocket._reusecCs/|jdkr|jƒn|jd8_dS)Nr)r4r9)r6rrrÚ_drop&s
zWrappedSocket._dropN)rrr r!r7r8r:r>rQrRrUrYrZr9r`rarbrrrrr1¨s
r1rcCs%|jd7_t|||ddƒS)Nrr9T)r4r
)r6ÚmodeÚbufsizerrrÚmakefile.srecCs
|dkS)Nrr)Úcnxr_Zerr_noZ	err_depthZreturn_coderrrÚ_verify_callback7srgcCstjjt|ƒ}|r5|p%|}|j|ƒ|rH|j|ƒ|tjkrk|jt	|t
ƒ|sw|rÒy|j||ƒWqÜtjjk
rÎ}	ztj
d||	ƒ‚WYdd}	~	XqÜXn
|jƒd}
|j|
ƒ|jtƒtjj||ƒ}t|tjƒr2|jdƒ}|j|ƒ|jƒxªy|jƒWn”tjjk
r³tj|ggg|jƒƒ\}}
}
|s¬tdƒ‚wLYn>tjjk
rð}	ztj
d|	ƒ‚WYdd}	~	XnXPqLWt||ƒS)Nzbad ca_certs: %rizutf-8zselect timed outzbad handshake: %r)r?r@ZContextÚ_openssl_versionsZuse_certificate_fileZuse_privatekey_fileÚsslÚ	CERT_NONEZ
set_verifyÚ_openssl_verifyrgZload_verify_locationsr[ZSSLErrorZset_default_verify_pathsZset_optionsZset_cipher_listÚDEFAULT_SSL_CIPHER_LISTÚ
Connectionr'ÚsixZ	text_typeÚencodeZset_tlsext_host_nameZset_connect_stateZdo_handshakerGrHrIrr1)ÚsockZkeyfileZcertfileZ	cert_reqsZca_certsZserver_hostnameZssl_versionZca_cert_dirÚctxrLZOP_NO_COMPRESSIONrfrMrTrrrr;sD

,




*&rr=)Gr!Z
__future__rZ%ndg.httpsclient.ssl_peer_verificationrZndg.httpsclient.subj_alt_namerZBaseSubjectAltNameÚSyntaxErrorrLÚImportErrorZOpenSSL.SSLr?Zpyasn1.codec.derrr%Zpyasn1.typerrr2rr	rCr
Z#urllib3.packages.backports.makefilerrirHrnÚr
rÚ__all__rZPROTOCOL_SSLv23r@Z
SSLv23_METHODZPROTOCOL_TLSv1ZTLSv1_METHODrhÚhasattrrrrrÚupdateZPROTOCOL_SSLv3ZSSLv3_METHODÚAttributeErrorrjZVERIFY_NONEZ
CERT_OPTIONALZVERIFY_PEERZ
CERT_REQUIREDZVERIFY_FAIL_IF_NO_PEER_CERTrkZssl_ZDEFAULT_CIPHERSrorlrVrrrrrr0Úobjectr1rergrrrrÚ<module>-sj
!! 
			…		
Back to Directory File Manager