grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ´iŽÍã @s°ddlZddlZddlmZddlmZmZm Z ddl Z ddl m Z m Z mZddl mZmZmZddl mZmZmZmZmZmZmZddl mZmZddl mZmZmZm Z zdd l m!Z!Wne"yÎYn0dd l m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,dd l m-Z-m.Z.ej/d e0d d„e d�e j/de0dd„e d�ej/de0dd„e d�ej/de0dd„e d�e j/de0dd„e d�ej/de0dd„e d�e1j2Z3e1_3dd„e1j4 5¡DƒZ6e7e1ddƒZ8Gdd„deƒZ9Gdd „d eƒZ:Gd!d"„d"eƒZ;Gd#d$„d$eƒZZ>m?Z?dd'l@m@Z@mAZAmBZBdd(l@mCZCmDZDddl@ZEddlFZFddlGZGddlHZHeIZJd)gZKeLe d*ƒZMe-ZNeZOd+d,„ZPd-d.„ZQd/d0„ZRd1d2„ZSed3d4ƒZTd5d6„ZUGd7d8„d8ed8d9ƒƒZVGd:d;„d;eVeƒZWGdœd?d@„ZZe2fe[dAeWjYddddddBœdCdD„Z\eZZ]e\Z^GdEdF„dFƒZ_dGdH„Z`GdIdJ„dJe@ƒZaeaeX_be_eX_cdddAe[e2ddKdKdf dLdM„ZddNdO„ZedPZfdQZgdRdS„ZhdTdU„Zie2dfdVdW„ZjdXdY„ZkdS)ZéN)Ú namedtuple)ÚEnumÚIntEnumÚIntFlag)ÚOPENSSL_VERSION_NUMBERÚOPENSSL_VERSION_INFOÚOPENSSL_VERSION)Ú _SSLContextÚ MemoryBIOÚ SSLSession)ÚSSLErrorÚSSLZeroReturnErrorÚSSLWantReadErrorÚSSLWantWriteErrorÚSSLSyscallErrorÚ SSLEOFErrorÚSSLCertVerificationError)Útxt2objÚnid2obj)Ú RAND_statusÚRAND_addÚ RAND_bytesÚRAND_pseudo_bytes)ÚRAND_egd) ÚHAS_SNIÚHAS_ECDHÚHAS_NPNÚHAS_ALPNÚ HAS_SSLv2Ú HAS_SSLv3Ú HAS_TLSv1Ú HAS_TLSv1_1Ú HAS_TLSv1_2Ú HAS_TLSv1_3)Ú_DEFAULT_CIPHERSÚ_OPENSSL_API_VERSIONÚ _SSLMethodcCs| d¡o|dkS)NZ PROTOCOL_ÚPROTOCOL_SSLv23©Ú startswith©Úname©r,ú/usr/lib64/python3.9/ssl.pyÚ}ór.)ÚsourceÚOptionscCs | d¡S)NZOP_r(r*r,r,r-r.‚r/ZAlertDescriptioncCs | d¡S)NZALERT_DESCRIPTION_r(r*r,r,r-r.‡r/ZSSLErrorNumbercCs | d¡S)NZ SSL_ERROR_r(r*r,r,r-r.Œr/Ú VerifyFlagscCs | d¡S)NZVERIFY_r(r*r,r,r-r.‘r/Ú VerifyModecCs | d¡S)NZCERT_r(r*r,r,r-r.–r/cCsi|]\}}||“qSr,r,)Ú.0r+Úvaluer,r,r-Ú šr/r6ZPROTOCOL_SSLv2c@s6eZdZejZejZejZ ej Z ej Z ejZejZdS)Ú TLSVersionN)Ú__name__Ú __module__Ú __qualname__Ú_sslZPROTO_MINIMUM_SUPPORTEDZMINIMUM_SUPPORTEDZ PROTO_SSLv3ÚSSLv3Z PROTO_TLSv1ZTLSv1Z PROTO_TLSv1_1ZTLSv1_1Z PROTO_TLSv1_2ZTLSv1_2Z PROTO_TLSv1_3ZTLSv1_3ZPROTO_MAXIMUM_SUPPORTEDZMAXIMUM_SUPPORTEDr,r,r,r-r7Ÿsr7c@s$eZdZdZdZdZdZdZdZdS)Ú_TLSContentTypeééééééN) r8r9r:ÚCHANGE_CIPHER_SPECÚALERTZ HANDSHAKEZAPPLICATION_DATAÚHEADERZINNER_CONTENT_TYPEr,r,r,r-r=©s r=c@s”eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#S)$Ú _TLSAlertTyperé r>r?r@éé(é)é*é+é,é-é.é/é0é1é2é3é<éFéGéPéVéZédéménéoépéqérésétéxN)%r8r9r:Z CLOSE_NOTIFYZUNEXPECTED_MESSAGEZBAD_RECORD_MACZDECRYPTION_FAILEDZRECORD_OVERFLOWZDECOMPRESSION_FAILUREZHANDSHAKE_FAILUREZNO_CERTIFICATEZBAD_CERTIFICATEZUNSUPPORTED_CERTIFICATEZCERTIFICATE_REVOKEDZCERTIFICATE_EXPIREDZCERTIFICATE_UNKNOWNZILLEGAL_PARAMETERZ UNKNOWN_CAZ ACCESS_DENIEDZ DECODE_ERRORZ DECRYPT_ERRORZEXPORT_RESTRICTIONZPROTOCOL_VERSIONZINSUFFICIENT_SECURITYZINTERNAL_ERRORZINAPPROPRIATE_FALLBACKZ USER_CANCELEDZNO_RENEGOTIATIONZMISSING_EXTENSIONZUNSUPPORTED_EXTENSIONZCERTIFICATE_UNOBTAINABLEZUNRECOGNIZED_NAMEZBAD_CERTIFICATE_STATUS_RESPONSEZBAD_CERTIFICATE_HASH_VALUEZUNKNOWN_PSK_IDENTITYZCERTIFICATE_REQUIREDZNO_APPLICATION_PROTOCOLr,r,r,r-rG·sDrGc@sdeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdS)Ú_TLSMessageTyperéééééééé é é ééér>r?r@rAééCéþrCN)r8r9r:Z HELLO_REQUESTZ CLIENT_HELLOZ SERVER_HELLOZHELLO_VERIFY_REQUESTZNEWSESSION_TICKETZEND_OF_EARLY_DATAZHELLO_RETRY_REQUESTZENCRYPTED_EXTENSIONSZ CERTIFICATEZSERVER_KEY_EXCHANGEZCERTIFICATE_REQUESTZ SERVER_DONEZCERTIFICATE_VERIFYZCLIENT_KEY_EXCHANGEÚFINISHEDZCERTIFICATE_URLZCERTIFICATE_STATUSZSUPPLEMENTAL_DATAZ KEY_UPDATEZ NEXT_PROTOZ MESSAGE_HASHrDr,r,r,r-rfàs,rfÚwin32)Úenum_certificatesÚ enum_crls)ÚsocketÚ SOCK_STREAMÚcreate_connection)Ú SOL_SOCKETÚSO_TYPEú tls-uniqueÚHOSTFLAG_NEVER_CHECK_SUBJECTcCs¶|sdS| d¡}|s&| ¡| ¡kS|dkrsole wildcard without additional labels are not support: {!r}.z.shim_cb)Z sni_callbackÚcallableÚ TypeError)rÄrârãr,rár-Úset_servername_callbacks z"SSLContext.set_servername_callbackcCs`tƒ}|D]F}t|dƒ}t|ƒdks0t|ƒdkr8tdƒ‚| t|ƒ¡| |¡q | |¡dS)NrÅrrÙz)ALPN protocols must be 1 to 255 in length)rÚrÛr�r rœrÜZ_set_alpn_protocols)rÄZalpn_protocolsrÝrÁrÞr,r,r-Úset_alpn_protocols#s  zSSLContext.set_alpn_protocolscCsttƒ}zYn0|tjkrPt}n|tjkr`t}nt}z ||ƒ}Wnty‚Yn0ˆ||||||ƒSr–)r7r�r=rFrErGrf)ÚconnÚ directionÚversionZ content_typeZmsg_typeÚdataZmsg_enum©Úcallbackr,r-r s(        ÿz'SSLContext._msg_callback..inner)r±rÀrþrøÚhasattrrårÿ)rÄrrr¶rr-rþ—s  cs ttƒjƒSr–)r&r±rÁrör¶r,r-rÁ½szSSLContext.protocolcs ttƒjƒSr–)r2r±Ú verify_flagsrör¶r,r-r ÁszSSLContext.verify_flagscstttƒj ||¡dSr–)r±rÀr rørùr¶r,r-r Åscs.tƒj}z t|ƒWSty(|YS0dSr–)r±Ú verify_moder3r�rùr¶r,r-r És   zSSLContext.verify_modecstttƒj ||¡dSr–)r±rÀr rørùr¶r,r-r Ñs)FTTNN)FNN) r8r9r:rórÒrÕÚ PROTOCOL_TLSr²rÊrÔrØrßrærçrðr¾r¿rôrr ÚpropertyrõÚsetterrúr÷r;rürþrÁr r r½r,r,r¶r-rÀÛsh ý ÿ         &%rÀ)r­r®rècCsŒt|tƒst|ƒ‚ttƒ}|tjkr0t|_d|_ |s<|s<|rL|  |||¡n|jt kr`|  |¡t |dƒrˆtj d¡}|rˆtjjsˆ||_|S)NTÚkeylog_filenameÚ SSLKEYLOGFILE)rÆr¯rårÀr r¾r¿Ú CERT_REQUIREDr Úcheck_hostnamerìÚ CERT_NONErôrr§r¨r›rñÚflagsÚignore_environmentr)rîr­r®rèrÐÚ keylogfiler,r,r-Úcreate_default_contextÖs        rF)Ú cert_reqsrrîÚcertfileÚkeyfiler­r®rèc Cs¼t|tƒst|ƒ‚t|ƒ} |s$d| _|dur2|| _|rs ÿzSSLObject.__init__FNc Cs*| |¡}|j||||||d�}||_|S)N)rÌrÏÚownerrÑ)r²Z _wrap_bioÚ_sslobj) r´rÖr×rÌrÏrÑrÐrÄràr,r,r-rÓDs ýzSSLObject._createcCs|jjSr–©r"rÐrör,r,r-rÐPszSSLObject.contextcCs ||j_dSr–r#©rÄÚctxr,r,r-rÐUscCs|jjSr–©r"rÑrör,r,r-rÑYszSSLObject.sessioncCs ||j_dSr–r&©rÄrÑr,r,r-rÑ^scCs|jjSr–©r"Úsession_reusedrör,r,r-r)bszSSLObject.session_reusedcCs|jjSr–)r"rÌrör,r,r-rÌgszSSLObject.server_sidecCs|jjSr–)r"rÏrör,r,r-rÏlszSSLObject.server_hostnameécCs(|dur|j ||¡}n |j |¡}|Sr–)r"Úread)rÄr�ÚbufferÚvr,r,r-r+rs zSSLObject.readcCs |j |¡Sr–)r"Úwrite©rÄrr,r,r-r.~szSSLObject.writecCs |j |¡Sr–)r"Ú getpeercert©rÄZ binary_formr,r,r-r0†szSSLObject.getpeercertcCstjr|j ¡SdSr–)r;rr"Úselected_npn_protocolrör,r,r-r2�szSSLObject.selected_npn_protocolcCstjr|j ¡SdSr–)r;rr"Úselected_alpn_protocolrör,r,r-r3–sz SSLObject.selected_alpn_protocolcCs |j ¡Sr–)r"Úcipherrör,r,r-r4�szSSLObject.ciphercCs |j ¡Sr–)r"Úshared_ciphersrör,r,r-r5¢szSSLObject.shared_cipherscCs |j ¡Sr–)r"Ú compressionrör,r,r-r6¨szSSLObject.compressioncCs |j ¡Sr–)r"Úpendingrör,r,r-r7­szSSLObject.pendingcCs|j ¡dSr–)r"Ú do_handshakerör,r,r-r8±szSSLObject.do_handshakecCs |j ¡Sr–)r"Úshutdownrör,r,r-ÚunwrapµszSSLObject.unwrapr€cCs |j |¡Sr–)r"Úget_channel_binding©rÄZcb_typer,r,r-r;¹szSSLObject.get_channel_bindingcCs |j ¡Sr–©r"rrör,r,r-r¿szSSLObject.versioncCs |j ¡Sr–)r"Úverify_client_post_handshakerör,r,r-r>Äsz&SSLObject.verify_client_post_handshake)FNNN)r*N)F)r€)r8r9r:r r¼rÓr rÐr rÑr)rÌrÏr+r.r0r2r3r4r5r6r7r8r:r;rr>r,r,r,r-r/sBÿ           rcCstt|jƒj|_|Sr–)Úgetattrrr8Ú__doc__)Úfuncr,r,r-Ú _sslcopydocÈsrBcseZdZdd„ZedW‡fdd„ ƒZeedd „ƒƒZej d d „ƒZeed d „ƒƒZ e j d d „ƒZ eedd„ƒƒZ dd„Z dXdd„Z dd„ZdYdd„Zdd„ZedZdd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZed%d&„ƒZd[‡fd(d)„ Zd\‡fd*d+„ Zd,d-„Zd]‡fd.d/„ Zd^‡fd0d1„ Zd_‡fd2d3„ Zd`‡fd4d5„ Zda‡fd6d7„ Zdb‡fd8d9„ Zd:d;„Z dd?„ƒZ"‡fd@dA„Z#edBdC„ƒZ$edDdE„ƒZ%‡fdFdG„Z&edcdHdI„ƒZ'‡fdJdK„Z(dLdM„Z)dNdO„Z*‡fdPdQ„Z+edddSdT„ƒZ,edUdV„ƒZ-‡Z.S)eÚ SSLSocketcOst|jj›d�ƒ‚dS)NzX does not have a public constructor. Instances are returned by SSLContext.wrap_socket().rrr,r,r-r Ós ÿzSSLSocket.__init__FTNc sf| tt¡tkrtdƒ‚|r8|r(tdƒ‚|dur8tdƒ‚|jrJ|sJtdƒ‚t|j|j |j |  ¡d�}|j |fi|¤Ž} t t| ƒjfi|¤Ž| ¡} | ¡|| _|| _d| _d| _|| _| |¡| _|| _|| _z |  ¡Wnüt�yÚ} zâ| jtjkrþ‚d} |  ¡} |   d¡z|  !d¡}Wn@t�yb} z&| jtjtj"fv�rJ‚d}WYd} ~ n d} ~ 00|   | ¡|�rÆd }t#| j|ƒ}||_$d|_%z |  &¡Wnt�y°Yn0z |‚Wd}nd}0WYd} ~ nd} ~ 00d } |  '| ¡| | _(| �rbzH| jj)| || j| | jd �| _|�r<|  ¡}|d k�r4td ƒ‚|  *¡Wn"ttf�y`|  &¡‚Yn0| S)Nz!only stream sockets are supportedz4server_hostname can only be specified in client modez,session can only be specified in client modez'check_hostname requires server_hostname)ÚfamilyÚtypeÚprotoÚfilenoFrgr/z5Closed before TLS handshake with data in recv buffer.T©r!rÑçzHdo_handshake_on_connect should not be specified for non-blocking sockets)+Ú getsockoptr~rr|ÚNotImplementedErrorr�rÚdictrDrErFrGr²r±rCr Ú gettimeoutÚdetachÚ_contextÚ_sessionÚ_closedr"rÌrÊrÏrÍrÎÚ getpeernamerŽÚerrnoZENOTCONNÚ getblockingÚ setblockingÚrecvÚEINVALr ÚreasonZlibraryÚcloseÚ settimeoutÚ _connectedÚ _wrap_socketr8)r´rËrÌrÍrÎrÏrÐrÑrÃrÄZ sock_timeoutÚeZ connectedÚblockingZnotconn_pre_handshake_datarXZ notconn_pre_handshake_data_errorÚtimeoutr¶r,r-rÓÚsŒ  þ       " þ  zSSLSocket._createcCs|jSr–)rOrör,r,r-rÐ:szSSLSocket.contextcCs||_||j_dSr–)rOr"rÐr$r,r,r-rÐ?scCs|jdur|jjSdSr–r&rör,r,r-rÑDs zSSLSocket.sessioncCs||_|jdur||j_dSr–)rPr"rÑr'r,r,r-rÑJs cCs|jdur|jjSdSr–r(rör,r,r-r)Ps zSSLSocket.session_reusedcCstd|jjƒ‚dS)NzCan't dup() %s instances)rKr·r8rör,r,r-ÚdupVsÿz SSLSocket.dupcCsdSr–r,)rÄÚmsgr,r,r-Ú _checkClosedZszSSLSocket._checkClosedcCs|js| ¡dSr–)r[rRrör,r,r-Ú_check_connected^szSSLSocket._check_connectedr*c Csª| ¡|jdurtdƒ‚z*|dur4|j ||¡WS|j |¡WSWn`ty¤}zH|jdtkrŽ|jrŽ|dur~WYd}~dSWYd}~dSn‚WYd}~n d}~00dS)Nz'Read on closed or unwrapped SSL socket.rr/)rbr"r�r+r rÂZ SSL_ERROR_EOFrÎ)rÄr�r,Úxr,r,r-r+fs zSSLSocket.readcCs&| ¡|jdurtdƒ‚|j |¡S)Nz(Write on closed or unwrapped SSL socket.)rbr"r�r.r/r,r,r-r.{s zSSLSocket.writecCs| ¡| ¡|j |¡Sr–)rbrcr"r0r1r,r,r-r0„szSSLSocket.getpeercertcCs*| ¡|jdustjsdS|j ¡SdSr–)rbr"r;rr2rör,r,r-r2ŠszSSLSocket.selected_npn_protocolcCs*| ¡|jdustjsdS|j ¡SdSr–)rbr"r;rr3rör,r,r-r3’sz SSLSocket.selected_alpn_protocolcCs$| ¡|jdurdS|j ¡SdSr–)rbr"r4rör,r,r-r4šs zSSLSocket.ciphercCs$| ¡|jdurdS|j ¡SdSr–)rbr"r5rör,r,r-r5¢s zSSLSocket.shared_cipherscCs$| ¡|jdurdS|j ¡SdSr–)rbr"r6rör,r,r-r6ªs zSSLSocket.compressionrcsF| ¡|jdur4|dkr(td|jƒ‚|j |¡Stƒ ||¡SdS)Nrz3non-zero flags not allowed in calls to send() on %s)rbr"r�r·r.r±Úsend)rÄrrr¶r,r-re²s ÿÿ zSSLSocket.sendcsL| ¡|jdur"td|jƒ‚n&|dur8tƒ ||¡Stƒ |||¡SdS)Nz%sendto not allowed on instances of %s)rbr"r�r·r±Úsendto)rÄrZ flags_or_addrr”r¶r,r-rf½s ÿzSSLSocket.sendtocOstd|jƒ‚dS)Nz&sendmsg not allowed on instances of %s©rKr·rr,r,r-ÚsendmsgÇsÿzSSLSocket.sendmsgc s¾| ¡|jdur¬|dkr(td|jƒ‚d}t|ƒ�f}| d¡�<}t|ƒ}||krn| ||d…¡}||7}qJWdƒn1s‚0YWdƒqº1s 0Yntƒ  ||¡SdS)Nrz6non-zero flags not allowed in calls to sendall() on %sÚB) rbr"r�r·Ú memoryviewÚcastr�rer±Úsendall)rÄrrr„ÚviewÚ byte_viewÚamountr-r¶r,r-rlÍs ÿÿHzSSLSocket.sendallcs,|jdur| |||¡Stƒ |||¡SdSr–)r"Ú_sendfile_use_sendr±Úsendfile)rÄÚfileÚoffsetr„r¶r,r-rqÝs zSSLSocket.sendfilecsD| ¡|jdur2|dkr(td|jƒ‚| |¡Stƒ ||¡SdS)Nrz3non-zero flags not allowed in calls to recv() on %s)rbr"r�r·r+r±rV©rÄÚbuflenrr¶r,r-rVçs ÿÿ zSSLSocket.recvcsj| ¡|r|durt|ƒ}n |dur*d}|jdurV|dkrJtd|jƒ‚| ||¡Stƒ |||¡SdS)Nr*rz8non-zero flags not allowed in calls to recv_into() on %s)rbr�r"r�r·r+r±Ú recv_into©rÄr,Únbytesrr¶r,r-rvòs   ÿÿ zSSLSocket.recv_intocs4| ¡|jdur"td|jƒ‚ntƒ ||¡SdS)Nz'recvfrom not allowed on instances of %s)rbr"r�r·r±Úrecvfromrtr¶r,r-rys  ÿzSSLSocket.recvfromcs6| ¡|jdur"td|jƒ‚ntƒ |||¡SdS)Nz,recvfrom_into not allowed on instances of %s)rbr"r�r·r±Ú recvfrom_intorwr¶r,r-rz s  ÿzSSLSocket.recvfrom_intocOstd|jƒ‚dS)Nz&recvmsg not allowed on instances of %srgrr,r,r-ÚrecvmsgsÿzSSLSocket.recvmsgcOstd|jƒ‚dS)Nz+recvmsg_into not allowed on instances of %srgrr,r,r-Ú recvmsg_intosÿzSSLSocket.recvmsg_intocCs$| ¡|jdur|j ¡SdSdS)Nr)rbr"r7rör,r,r-r7s  zSSLSocket.pendingcs| ¡d|_tƒ |¡dSr–)rbr"r±r9)rÄÚhowr¶r,r-r9!szSSLSocket.shutdowncCs.|jr|j ¡}d|_|Stdt|ƒƒ‚dS©NzNo SSL wrapper around )r"r9r�rÇ)rÄÚsr,r,r-r:&s  zSSLSocket.unwrapcCs$|jr|j ¡Stdt|ƒƒ‚dSr~)r"r>r�rÇrör,r,r-r>/s z&SSLSocket.verify_client_post_handshakecsd|_tƒ ¡dSr–)r"r±Ú _real_closerör¶r,r-r€6szSSLSocket._real_closec CsP| ¡| ¡}z.|dkr(|r(| d¡|j ¡W| |¡n | |¡0dS)NrI)rcrMrZr"r8)rÄÚblockr_r,r,r-r8:s   zSSLSocket.do_handshakec s¦|jrtdƒ‚|js|jdur&tdƒ‚|jj|d|j||jd�|_z@|rVtƒ  |¡}nd}tƒ  |¡|s~d|_|j r~|  ¡|WSt tfy d|_‚Yn0dS)Nz!can't connect in server-side modez/attempt to connect already-connected SSLSocket!FrHT)rÌr�r[r"rÐr\rÏrPr±Ú connect_exÚconnectrÍr8rŽ)rÄr”r‚Úrcr¶r,r-Ú _real_connectEs*þ zSSLSocket._real_connectcCs| |d¡dS)NF©r…©rÄr”r,r,r-rƒ_szSSLSocket.connectcCs | |d¡Srýr†r‡r,r,r-r‚dszSSLSocket.connect_excs.tƒ ¡\}}|jj||j|jdd�}||fS)NT)rÍrÎrÌ)r±ÚacceptrÐrÔrÍrÎ)rÄZnewsockr”r¶r,r-rˆisýzSSLSocket.acceptr€cCs4|jdur|j |¡S|tvr,td |¡ƒ‚dSdS)Nz({0} channel binding type not implemented)r"r;ÚCHANNEL_BINDING_TYPESr�r‡r<r,r,r-r;us  ÿzSSLSocket.get_channel_bindingcCs|jdur|j ¡SdSdSr–r=rör,r,r-r€s  zSSLSocket.version)FTTNNN)N)r*N)F)r)N)r)rN)r*r)Nr)r*r)Nr)F)r€)/r8r9r:r r¼rÓr rBrÐr rÑr)r`rbrcr+r.r0r2r3r4r5r6rerfrhrlrqrVrvryrzr{r|r7r9r:r>r€r8r…rƒr‚rˆr;rr½r,r,r¶r-rCÎs‚þ_                          rCTc Csl|r|stdƒ‚|r |s tdƒ‚t|ƒ} || _|r<|  |¡|rL|  ||¡| rZ|  | ¡| j||||d�S)Nz5certfile must be specified for server-side operationsr)rËrÌrÍrÎ)r�rÀr rìrZ set_ciphersrÔ) rËrrrÌrÚ ssl_versionÚca_certsrÍrÎZciphersrÐr,r,r-rÔ�s"   ýrÔcCs”ddlm}ddlm}d}d}z| |dd… ¡¡d}Wn"ty`td||fƒ‚Yn00||dd…|ƒ}||d|f|d d …ƒSdS) Nr)Ústrptime)Útimegm) ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecz %d %H:%M:%S %Y GMTrirgz*time data %r does not match format "%%b%s"rhrl)ÚtimerŒZcalendarr�ÚindexÚtitler�)Z cert_timerŒr�ZmonthsZ time_formatZ month_numberÚttr,r,r-Úcert_time_to_seconds©s   ÿ r’z-----BEGIN CERTIFICATE-----z-----END CERTIFICATE-----csRtt |¡ddƒ‰tg}|‡fdd„tdtˆƒdƒDƒ7}| td¡d |¡S)NÚASCIIÚstrictcsg|]}ˆ||d…‘qS)é@r,)r4Úi©Úfr,r-Ú Ðr/z(DER_cert_to_PEM_cert..rr•Ú ) rÇÚbase64Zstandard_b64encodeÚ PEM_HEADERÚranger�rœÚ PEM_FOOTERrž)Zder_cert_bytesÚssr,r—r-ÚDER_cert_to_PEM_certÊs "r cCs\| t¡stdtƒ‚| ¡ t¡s0tdtƒ‚| ¡ttƒttƒ …}t |  dd¡¡S)Nz(Invalid PEM encoding; must start with %sz&Invalid PEM encoding; must end with %sr“r”) r)rœr�ÚstripÚendswithržr�r›Z decodebytesrÈ)Zpem_cert_stringÚdr,r,r-ÚPEM_cert_to_DER_certÔs ÿÿr¤c CsŒ|\}}|durt}nt}t|||d�}t|ƒ�D}| |¡�}| d¡} Wdƒn1s\0YWdƒn1sz0Yt| ƒS)N)rr­T)rrÚ_create_stdlib_contextr}rÔr0r ) r”rŠr‹ÚhostÚportrrÐrËZsslsockZdercertr,r,r-Úget_server_certificateásþ  Fr¨cCs t |d¡S)Nz )Ú_PROTOCOL_NAMESr›)Z protocol_coder,r,r-Úget_protocol_nameôsrª)lrñr§Ú collectionsrÚenumrZ_EnumrÚ_IntEnumrZ_IntFlagr;rrrr r r r r rrrrrrr³rr¸rrrrrÚ ImportErrorrrrrrrr r!r"r#r$r%Ú _convert_r8r&r r'Ú __members__Úitemsr©r?Z_SSLv2_IF_EXISTSr7r=rGrfròryrzr{r|r}r~rrŒr›rSrêrŽZ socket_errorr‰rZHAS_NEVER_CHECK_COMMON_NAMEZ_RESTRICTED_SERVER_CIPHERSr†r‹r•ršr¤r¥r¦r¯r¾rÀr¿rrrZ_create_default_https_contextr¥rrBrCrÒrÕrÔr’rœržr r¤r¨rªr,r,r,r-Ú^sÜ $ 0ýýýýýý   )  1# 9ÿ|ÿ #ý />û