Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/
Upload File :
Current File : //usr/lib/python2.7/ssl.pyc


|_c
@sdZddlZddlZddlmZmZmZddlmZddlmZmZm	Z	ddlm
Z
mZmZddlm
Z
mZmZmZmZmZmZmZmZddlmZmZmZid	e6d
e6de6ZyddlmZeZWnek
r,eZnXd
ee<ddlmZmZm Z m!Z"ddlm#Z$ddl%Z%ddl&Z&dZ'defdYZ(eee)eeee*e*ed	Z+dZ,dZ-dZ.dZ/dZ0eedZ1dZ2eedZ3dS(sThis 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(tOPENSSL_VERSION_NUMBERtOPENSSL_VERSION_INFOtOPENSSL_VERSION(tSSLError(t	CERT_NONEt
CERT_OPTIONALt
CERT_REQUIRED(tRAND_statustRAND_egdtRAND_add(	tSSL_ERROR_ZERO_RETURNtSSL_ERROR_WANT_READtSSL_ERROR_WANT_WRITEtSSL_ERROR_WANT_X509_LOOKUPtSSL_ERROR_SYSCALLt
SSL_ERROR_SSLtSSL_ERROR_WANT_CONNECTt
SSL_ERROR_EOFtSSL_ERROR_INVALID_ERROR_CODE(tPROTOCOL_SSLv3tPROTOCOL_SSLv23tPROTOCOL_TLSv1tTLSv1tSSLv23tSSLv3(tPROTOCOL_SSLv2tSSLv2(tsockett_fileobjectt_delegate_methodsterror(tgetnameinfos)DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2t	SSLSocketc
BseZdZddeeedeedd	ZddZ	dZ
edZdZddZ
dd	Zdd
ZdddZdddZddd
ZdddZdZdZdZdZdZdZdZdZdZdddZRS(sThis 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.c
Csotj|d|jx3tD]+}yt||Wqtk
rGqXqW|
dkrm|tkrmt}
n|r|r|}nytj	|Wn=t
k
r}|jtjkrnt
|_d|_nGXt|_tj|j|||||||
|_|r|jn||_||_||_||_||_|
|_||_|	|_d|_dS(Nt_socki(Rt__init__R!RtdelattrtAttributeErrortNonet_SSLv2_IF_EXISTSt_DEFAULT_CIPHERStgetpeernametsocket_errorterrnotENOTCONNtFalset
_connectedt_sslobjtTruet_ssltsslwraptdo_handshaketkeyfiletcertfilet	cert_reqstssl_versiontca_certstcipherstdo_handshake_on_connecttsuppress_ragged_eofst_makefile_refs(
tselftsockR3R4tserver_sideR5R6R7R9R:R8tattrte((s/usr/lib/python2.7/ssl.pyR"jsB

	
		
		
								icCsQy|jj|SWn6tk
rL}|jdtkrF|jrFdSnXdS(sORead up to LEN bytes and return them.
        Return zero-length string on EOF.itN(R.treadRtargsRR:(R<tlentx((s/usr/lib/python2.7/ssl.pyRBscCs|jj|S(shWrite DATA to the underlying SSL channel.  Returns
        number of bytes of DATA actually transmitted.(R.twrite(R<tdata((s/usr/lib/python2.7/ssl.pyRFscCs|jj|S(sReturns 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.(R.tpeer_certificate(R<tbinary_form((s/usr/lib/python2.7/ssl.pytgetpeercertscCs|js
dS|jjSdS(N(R.R%tcipher(R<((s/usr/lib/python2.7/ssl.pyRKs	icCs|jr|dkr+td|jnxtry|jj|}WnDtk
r}|jdtkrsdS|jdtkrdSq.X|Sq.Wn|j	j
||SdS(Nis3non-zero flags not allowed in calls to send() on %s(R.t
ValueErrort	__class__R/RFRRCRRR!tsend(R<RGtflagstvRE((s/usr/lib/python2.7/ssl.pyRNs 		cCsX|jrtd|jn5|dkr>|jj||S|jj|||SdS(Ns%sendto not allowed on instances of %s(R.RLRMR%R!tsendto(R<RGt
flags_or_addrtaddr((s/usr/lib/python2.7/ssl.pyRQs	cCs|jrq|dkr+td|jnt|}d}x-||krl|j||}||7}q@W|Stj|||SdS(Nis6non-zero flags not allowed in calls to sendall() on %s(R.RLRMRDRNRtsendall(R<RGROtamounttcountRP((s/usr/lib/python2.7/ssl.pyRTs	cCsO|jr8|dkr+td|jn|j|S|jj||SdS(Nis3non-zero flags not allowed in calls to recv() on %s(R.RLRMRBR!trecv(R<tbuflenRO((s/usr/lib/python2.7/ssl.pyRWs	
cCs|r!|dkr!t|}n|dkr6d}n|jr|dkratd|jn|j|}t|}|||*|S|jj|||SdS(Niis8non-zero flags not allowed in calls to recv_into() on %s(R%RDR.RLRMRBR!t	recv_into(R<tbuffertnbytesROt
tmp_bufferRP((s/usr/lib/python2.7/ssl.pyRYs		
cCs6|jrtd|jn|jj||SdS(Ns'recvfrom not allowed on instances of %s(R.RLRMR!trecvfrom(R<RXRO((s/usr/lib/python2.7/ssl.pyR]s	cCs9|jrtd|jn|jj|||SdS(Ns,recvfrom_into not allowed on instances of %s(R.RLRMR!t
recvfrom_into(R<RZR[RO((s/usr/lib/python2.7/ssl.pyR^
s	cCs|jr|jjSdSdS(Ni(R.tpending(R<((s/usr/lib/python2.7/ssl.pyR_s	
cCs?|jr%|jj}d|_|Stdt|dS(NsNo SSL wrapper around (R.tshutdownR%RLtstr(R<ts((s/usr/lib/python2.7/ssl.pytunwraps
		cCsd|_tj||dS(N(R%R.RR`(R<thow((s/usr/lib/python2.7/ssl.pyR`"s	cCs;|jdkr(d|_tj|n|jd8_dS(Ni(R;R%R.Rtclose(R<((s/usr/lib/python2.7/ssl.pyRe&s	cCs|jjdS(sPerform a TLS/SSL handshake.N(R.R2(R<((s/usr/lib/python2.7/ssl.pyR2-sc	Cs|jrtdntj|jt|j|j|j|j	|j
|j|_y*t
j|||jr}|jnWn/tk
r}|r|jSd|_|nXt|_dS(Ns/attempt to connect already-connected SSLSocket!i(R-RLR0R1R!R,R3R4R5R6R7R8R.RtconnectR9R2R)R*R%R/(R<RStreturn_errnoR@((s/usr/lib/python2.7/ssl.pyt
_real_connect3s 			
	cCs|j|tdS(sQConnects to remote ADDR, and then wraps the connection in
        an SSL channel.N(RhR,(R<RS((s/usr/lib/python2.7/ssl.pyRfHscCs|j|tS(sQConnects to remote ADDR, and then wraps the connection in
        an SSL channel.(RhR/(R<RS((s/usr/lib/python2.7/ssl.pyt
connect_exMscCsstj|\}}t|d|jd|jdtd|jd|jd|jd|j	d|j
d	|j	|fS(
sAccepts 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.R3R4R>R5R6R7R8R9R:(RtacceptR R3R4R/R5R6R7R8R9R:(R<tnewsockRS((s/usr/lib/python2.7/ssl.pyRjRs									tricCs%|jd7_t|||dtS(sMake and return a file-like object that
        works with the SSL connection.  Just use the code
        from the socket module.iRe(R;RR/(R<tmodetbufsize((s/usr/lib/python2.7/ssl.pytmakefileesN(t__name__t
__module__t__doc__R%R,RRR/R"RBRFRJRKRNRQRTRWRYR]R^R_RcR`ReR2RhRfRiRjRo(((s/usr/lib/python2.7/ssl.pyR ds6,
				
									c

Cs@t|d|d|d|d|d|d|d|d|d	|		S(
NR3R4R>R5R6R7R9R:R8(R (
R=R3R4R>R5R6R7R9R:R8((s/usr/lib/python2.7/ssl.pytwrap_socketrscCs%ddl}|j|j|dS(sTakes 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.iNs%b %d %H:%M:%S %Y GMT(ttimetmktimetstrptime(t	cert_timeRt((s/usr/lib/python2.7/ssl.pytcert_time_to_secondsss-----BEGIN CERTIFICATE-----s-----END CERTIFICATE-----cCscttdrBtj|}tdtj|ddtdStdtj|tdSdS(s[Takes a certificate in binary DER format and returns the
    PEM version of it as a string.tstandard_b64encodes
i@N(thasattrtbase64Ryt
PEM_HEADERttextwraptfillt
PEM_FOOTERtencodestring(tder_cert_bytestf((s/usr/lib/python2.7/ssl.pytDER_cert_to_PEM_certs$cCsw|jts"tdtn|jjtsJtdtn|jtttt!}tj|S(shTakes a certificate in ASCII PEM format and returns the
    DER-encoded version of it as a byte sequences(Invalid PEM encoding; must start with %ss&Invalid PEM encoding; must end with %s(	t
startswithR|RLtstriptendswithRRDR{tdecodestring(tpem_cert_stringtd((s/usr/lib/python2.7/ssl.pytPEM_cert_to_DER_certs

 cCsx|\}}|dk	r!t}nt}ttd|d|d|}|j||jt}|jt	|S(sRetrieve 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.R6R5R7N(
R%RRRsRRfRJR/ReR(RSR6R7thosttportR5Rbtdercert((s/usr/lib/python2.7/ssl.pytget_server_certificates	

cCstj|dS(Ns	<unknown>(t_PROTOCOL_NAMEStget(t
protocol_code((s/usr/lib/python2.7/ssl.pytget_protocol_namescCslt|dr|j}ntj|d||ttd}y|jWntk
r]nX|j	|S(sA replacement for the old socket.ssl function.  Designed
    for compability with Python 2.5 and earlier.  Will disappear in
    Python 3.0.R!iN(
RzR!R0R1RRR%R(R)R2(R=R3R4tssl_sock((s/usr/lib/python2.7/ssl.pytsslwrap_simples

(4RrR}R0RRRRRRRRRR	R
RRR
RRRRRRRRRRR&tImportErrorR%RRRRR)Rt_getnameinfoR{R*R'R R,R/RsRxR|RRRRRR(((s/usr/lib/python2.7/ssl.pyt<module>8sL@





"