grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026U iÛf5Íã @s¶ddlZddlZddlmZddlmZmZm Z ddl Z ddl m Z m Z mZddl mZmZmZddl mZmZmZmZmZmZmZddl mZmZddl mZmZmZm Z zdd l m!Z!Wne"k rÐYnXdd 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@mAZAmBZBmCZCdd(l@mDZDmEZEddl@ZFddlGZGddlHZHddlIZIeJZKd)gZLeMe d*ƒZNe-ZOeZPd+d,„ZQd-d.„ZRd/d0„ZSd1d2„ZTed3d4ƒZUd5d6„ZVGd7d8„d8ed8d9ƒƒZWGd:d;„d;eWeƒZXGdœd?d@„Z[e2fe\dAeXjZddddddBœdCdD„Z]e[Z^e]Z_GdEdF„dFƒZ`dGdH„ZaGdIdJ„dJe@ƒZbebeY_ce`eY_ddddAe\e2ddKdKdf dLdM„ZedNdO„ZfdPZgdQZhdRdS„ZidTdU„Zje2dfdVdW„ZkdXdY„ZldS)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,ú(/opt/alt/python38/lib64/python3.8/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-Ú ™sr6ZPROTOCOL_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_EXCHANGEZFINISHEDZCERTIFICATE_URLZCERTIFICATE_STATUSZSUPPLEMENTAL_DATAZ KEY_UPDATEZ NEXT_PROTOZ MESSAGE_HASHrDr,r,r,r-rfßs,rfÚwin32)Úenum_certificatesÚ enum_crls)ÚsocketÚAF_INETÚ 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}.ztd ||d fƒ‚ntd ƒ‚dS)Nztempty or no certificate, match_hostname needs a SSL socket or SSL context with either CERT_OPTIONAL or CERT_REQUIREDZsubjectAltNamer,ZDNSz IP AddressZsubjectZ commonNamergz&hostname %r doesn't match either of %sz, zhostname %r doesn't match %rrz=no appropriate commonName or subjectAltName fields were found) rŽr‘Úgetr‹Úappendr•Úlenr†ÚjoinÚmapÚrepr)Úcertr‰r”ZdnsnamesZsanÚkeyr5Úsubr,r,r-Úmatch_hostnamessB         þ þrŸÚDefaultVerifyPathszQcafile capath openssl_cafile_env openssl_cafile openssl_capath_env openssl_capathcCsdt ¡}tj |d|d¡}tj |d|d¡}ttj |¡rF|ndtj |¡rX|ndf|žŽS)Nrrgrhri) r;Úget_default_verify_pathsÚosÚenvironr–r ÚpathÚisfileÚisdir)ÚpartsÚcafileÚcapathr,r,r-r¡°sÿþr¡cs@eZdZdZ‡fdd„Ze‡fdd„ƒZe‡fdd„ƒZ‡ZS)Ú _ASN1Objectr,cstƒj|ft|dd�žŽS)NFr*©ÚsuperÚ__new__Ú_txt2obj)ÚclsÚoid©Ú __class__r,r-r­Ãsz_ASN1Object.__new__cstƒj|ft|ƒžŽSr’)r¬r­Ú_nid2obj)r¯Znidr±r,r-ÚfromnidÆsz_ASN1Object.fromnidcstƒj|ft|dd�žŽS)NTr*r«)r¯r+r±r,r-ÚfromnameÌsz_ASN1Object.fromname) r8r9r:Ú __slots__r­Ú classmethodr´rµÚ __classcell__r,r,r±r-rª¾s  rªznid shortname longname oidc@seZdZdZdZdS)ÚPurposez1.3.6.1.5.5.7.3.1z1.3.6.1.5.5.7.3.2N)r8r9r:Ú SERVER_AUTHZ CLIENT_AUTHr,r,r,r-r¹Ósr¹csŒeZdZdZdZdZefdd„Zdd„Zd1d d „Z d2d d „Z d d„Z dd„Z dd„Z dd„Zejfdd„Zeedƒr¸e‡fdd„ƒZej‡fdd„ƒZe‡fdd„ƒZej‡fdd„ƒZe‡fdd„ƒZej‡fd d„ƒZeed!ƒ�red"d#„ƒZejd$d#„ƒZn ed%d#„ƒZe‡fd&d'„ƒZej‡fd(d'„ƒZe‡fd)d*„ƒZe‡fd+d,„ƒZej‡fd-d,„ƒZe‡fd.d/„ƒZej‡fd0d/„ƒZ‡ZS)3Ú SSLContext)ZCAZROOTNcOst ||¡}|Sr’)r r­)r¯ÚprotocolÚargsÚkwargsÚselfr,r,r-r­âs zSSLContext.__new__cCs4|dkr dSt|tƒr&| d¡ d¡S| d¡SdS)NZidnaÚascii)Ú isinstanceÚstrÚencodeÚdecode)r¿r‰r,r,r-Ú_encode_hostnameæs  zSSLContext._encode_hostnameFTc Cs|jj|||||||d�S)N)ÚsockÚ server_sideÚdo_handshake_on_connectÚsuppress_ragged_eofsÚserver_hostnameÚcontextÚsession)Ússlsocket_classÚ_create)r¿rÆrÇrÈrÉrÊrÌr,r,r-Ú wrap_socketîsùzSSLContext.wrap_socketcCs|jj|||| |¡||d�S)N)rÇrÊrÌrË)Ússlobject_classrÎrÅ)r¿ÚincomingÚoutgoingrÇrÊrÌr,r,r-Úwrap_bioþsýzSSLContext.wrap_biocCs`tƒ}|D]F}t|dƒ}t|ƒdks0t|ƒdkr8tdƒ‚| t|ƒ¡| |¡q | |¡dS)NrÀréÿz(NPN protocols must be 1 to 255 in length)Ú bytearrayÚbytesr˜r r—ÚextendZ_set_npn_protocols)r¿Z npn_protocolsÚprotosr¼Úbr,r,r-Úset_npn_protocolss  zSSLContext.set_npn_protocolscs8ˆdkrdˆ_n$tˆƒs tdƒ‚‡‡fdd„}|ˆ_dS)Nznot a callable objectcsˆ |¡}ˆ|||ƒSr’)rÅ)ÚsslobjZ servernameZsslctx©r¿Úserver_name_callbackr,r-Úshim_cbs z3SSLContext.set_servername_callback..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_protocolscCsvtƒ}z.inner)r¬r»rùróÚhasattrràrú)r¿rrûr±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»rrórôr±r,r-rÂscs0tƒj}z t|ƒWStk r*|YSXdSr’)r¬Ú verify_moder3rŽrôr±r,r-rÆs  zSSLContext.verify_modecstttƒj ||¡dSr’)r¬r»rró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¼rrr¸r,r,r±r-r»Úsl ý ÿ         &%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»rr¹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_reqsr réÚcertfileÚkeyfiler¨r©rãc Cs¼t|tƒst|ƒ‚t|ƒ} |s$d| _|dk r2|| _|rd?„ƒ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 sZ| tt¡tkrtdƒ‚|r8|r(tdƒ‚|dk r8tdƒ‚|jrJ|sJtdƒ‚t|j|j |j |  ¡d�}|j |f|Ž} t t| ƒjf|Ž| ¡} | ¡|| _|| _d| _d| _|| _| |¡| _|| _|| _z |  ¡Wnötk �rÌ} zÖ| jtjkrø‚d} |  ¡} |   d¡z|  !d¡}Wn>tk �rZ} z| jtjtj"fk�rF‚d}W5d} ~ XYnX|   | ¡|�r¼d }t#| j|ƒ}||_$d|_%z |  &¡Wntk �rªYnXz|‚W5d}XW5d} ~ XYnXd } |  '| ¡| | _(| �rVzH| jj)| || j| | jd �| _|�r.|  ¡}|d k�r&td ƒ‚|  *¡Wn$ttfk �rT|  &¡‚YnX| 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©rrÌçzHdo_handshake_on_connect should not be specified for non-blocking sockets)+Z getsockoptr~rr|ÚNotImplementedErrorrŽr Údictr=r>r?r@r­r¬r<rÚ gettimeoutÚdetachÚ_contextÚ_sessionZ_closedrrÇrÅrÊrÈrÉÚ getpeernamer�ÚerrnoZENOTCONNZ getblockingZ setblockingÚrecvZEINVALr ÚreasonZlibraryÚcloseÚ settimeoutÚ _connectedÚ _wrap_socketr1)r¯rÆrÇrÈrÉrÊrËrÌr¾r¿Z sock_timeoutÚeZ connectedZblockingZnotconn_pre_handshake_datarLZ notconn_pre_handshake_data_errorÚtimeoutr±r,r-rÎ×s– þ        þ  zSSLSocket._createcCs|jSr’)rGrñr,r,r-rË7szSSLSocket.contextcCs||_||j_dSr’)rGrrËrr,r,r-rË<scCs|jdk r|jjSdSr’rrñr,r,r-rÌAs zSSLSocket.sessioncCs||_|jdk r||j_dSr’)rHrrÌr r,r,r-rÌGs cCs|jdk r|jjSdSr’r!rñr,r,r-r"Ms zSSLSocket.session_reusedcCstd|jjƒ‚dS)NzCan't dup() %s instances)rCr²r8rñr,r,r-ÚdupSsÿz SSLSocket.dupcCsdSr’r,)r¿Úmsgr,r,r-Ú _checkClosedWszSSLSocket._checkClosedcCs|js| ¡dSr’)rOrIrñr,r,r-Ú_check_connected[szSSLSocket._check_connectedr#c Cs | ¡|jdkrtdƒ‚z*|dk r4|j ||¡WS|j |¡WSWnVtk rš}z8|jdtkrˆ|jrˆ|dk r|WY¢dSWY¢ dSn‚W5d}~XYnXdS)Nz'Read on closed or unwrapped SSL socket.rr/)rUrrŽr$r r½Z SSL_ERROR_EOFrÉ)r¿r˜r%Úxr,r,r-r$cs   zSSLSocket.readcCs&| ¡|jdkrtdƒ‚|j |¡S)Nz(Write on closed or unwrapped SSL socket.)rUrrŽr'r(r,r,r-r'xs zSSLSocket.writecCs| ¡| ¡|j |¡Sr’)rUrVrr)r*r,r,r-r)�szSSLSocket.getpeercertcCs*| ¡|jdkstjsdS|j ¡SdSr’)rUrr;rr+rñr,r,r-r+‡szSSLSocket.selected_npn_protocolcCs*| ¡|jdkstjsdS|j ¡SdSr’)rUrr;rr,rñr,r,r-r,�sz SSLSocket.selected_alpn_protocolcCs$| ¡|jdkrdS|j ¡SdSr’)rUrr-rñr,r,r-r-—s zSSLSocket.ciphercCs$| ¡|jdkrdS|j ¡SdSr’)rUrr.rñr,r,r-r.Ÿs zSSLSocket.shared_cipherscCs$| ¡|jdkrdS|j ¡SdSr’)rUrr/rñr,r,r-r/§s zSSLSocket.compressionrcsF| ¡|jdk r4|dkr(td|jƒ‚|j |¡Stƒ ||¡SdS)Nrz3non-zero flags not allowed in calls to send() on %s)rUrrŽr²r'r¬Úsend)r¿rÿr r±r,r-rX¯s ÿÿ zSSLSocket.sendcsL| ¡|jdk r"td|jƒ‚n&|dkr8tƒ ||¡Stƒ |||¡SdS)Nz%sendto not allowed on instances of %s)rUrrŽr²r¬Úsendto)r¿rÿZ flags_or_addrr�r±r,r-rYºs ÿzSSLSocket.sendtocOstd|jƒ‚dS)Nz&sendmsg not allowed on instances of %s©rCr²rr,r,r-ÚsendmsgÄsÿzSSLSocket.sendmsgc s–| ¡|jdk r„|dkr(td|jƒ‚d}t|ƒ�H}| d¡�2}t|ƒ}||krn| ||d…¡}||7}qJW5QRXW5QRXntƒ  ||¡SdS)Nrz6non-zero flags not allowed in calls to sendall() on %sÚB) rUrrŽr²Ú memoryviewÚcastr˜rXr¬Úsendall)r¿rÿr r„ZviewZ byte_viewZamountr&r±r,r-r_Ês ÿÿ zSSLSocket.sendallcs,|jdk r| |||¡Stƒ |||¡SdSr’)rZ_sendfile_use_sendr¬Úsendfile)r¿ÚfileÚoffsetr„r±r,r-r`Ús zSSLSocket.sendfilecsD| ¡|jdk r2|dkr(td|jƒ‚| |¡Stƒ ||¡SdS)Nrz3non-zero flags not allowed in calls to recv() on %s)rUrrŽr²r$r¬rK©r¿Zbuflenr r±r,r-rKäs ÿÿ zSSLSocket.recvcsj| ¡|r|dkrt|ƒ}n |dkr*d}|jdk rV|dkrJtd|jƒ‚| ||¡Stƒ |||¡SdS)Nr#rz8non-zero flags not allowed in calls to recv_into() on %s)rUr˜rrŽr²r$r¬Ú recv_into©r¿r%Únbytesr r±r,r-rdïs   ÿÿ zSSLSocket.recv_intocs4| ¡|jdk r"td|jƒ‚ntƒ ||¡SdS)Nz'recvfrom not allowed on instances of %s)rUrrŽr²r¬Úrecvfromrcr±r,r-rgþs  ÿzSSLSocket.recvfromcs6| ¡|jdk r"td|jƒ‚ntƒ |||¡SdS)Nz,recvfrom_into not allowed on instances of %s)rUrrŽr²r¬Ú recvfrom_intorer±r,r-rhs  ÿzSSLSocket.recvfrom_intocOstd|jƒ‚dS)Nz&recvmsg not allowed on instances of %srZrr,r,r-ÚrecvmsgsÿzSSLSocket.recvmsgcOstd|jƒ‚dS)Nz+recvmsg_into not allowed on instances of %srZrr,r,r-Ú recvmsg_intosÿzSSLSocket.recvmsg_intocCs$| ¡|jdk r|j ¡SdSdS)Nr)rUrr0rñr,r,r-r0s  zSSLSocket.pendingcs| ¡d|_tƒ |¡dSr’)rUrr¬r2)r¿Zhowr±r,r-r2szSSLSocket.shutdowncCs.|jr|j ¡}d|_|Stdt|ƒƒ‚dS©NzNo SSL wrapper around )rr2rŽrÂ)r¿Úsr,r,r-r3#s  zSSLSocket.unwrapcCs$|jr|j ¡Stdt|ƒƒ‚dSrk)rr7rŽrÂrñr,r,r-r7,s z&SSLSocket.verify_client_post_handshakecsd|_tƒ ¡dSr’)rr¬Ú _real_closerñr±r,r-rm3szSSLSocket._real_closec CsF| ¡| ¡}z$|dkr(|r(| d¡|j ¡W5| |¡XdS)NrB)rVrErNrr1)r¿ÚblockrRr,r,r-r17s  zSSLSocket.do_handshakec s¨|jrtdƒ‚|js|jdk r&tdƒ‚|jj|d|j||jd�|_z@|rVtƒ  |¡}nd}tƒ  |¡|s~d|_|j r~|  ¡|WSt tfk r¢d|_‚YnXdS)Nz!can't connect in server-side modez/attempt to connect already-connected SSLSocket!FrAT)rÇrŽrOrrËrPrÊrHr¬Ú connect_exÚconnectrÈr1r�)r¿r�roZrcr±r,r-Ú _real_connectBs0þ zSSLSocket._real_connectcCs| |d¡dS)NF©rq©r¿r�r,r,r-rp\szSSLSocket.connectcCs | |d¡Srørrrsr,r,r-roaszSSLSocket.connect_excs.tƒ ¡\}}|jj||j|jdd�}||fS)NT)rÈrÉrÇ)r¬ÚacceptrËrÏrÈrÉ)r¿Znewsockr�r±r,r-rtfsýzSSLSocket.acceptr€cCs4|jdk r|j |¡S|tkr,td |¡ƒ‚dSdS)Nz({0} channel binding type not implemented)rr4ÚCHANNEL_BINDING_TYPESrŽr‡r5r,r,r-r4rs  ÿzSSLSocket.get_channel_bindingcCs|jdk r|j ¡SdSdSr’r6rñ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:rr·rÎrr;rËrrÌr"rSrUrVr$r'r)r+r,r-r.r/rXrYr[r_r`rKrdrgrhrirjr0r2r3r7rmr1rqrprortr4rþr¸r,r,r±r-r<Ës†þ_                          r<Tc 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»rrç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$tk rbtd||fƒ‚Yn0X||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)ÚtimerxZcalendarryÚindexÚtitlerŽ)Z cert_timerxryZmonthsZ time_formatZ month_numberZttr,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-Ú Ísz(DER_cert_to_PEM_cert..rr€Ú ) rÂÚbase64Zstandard_b64encodeÚ PEM_HEADERÚranger˜r—Ú PEM_FOOTERr™)Zder_cert_bytesZssr,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 Csd|\}}|dk rt}nt}t|||d�}t|ƒ�&}| |¡�}| d¡} W5QRXW5QRXt| ƒS)N)rr¨T)r r Ú_create_stdlib_contextr}rÏr)rŠ) r�rvrwZhostZportrrËrÆZsslsockZdercertr,r,r-Úget_server_certificateÞsþ  r�cCs t |d¡S)Nz )Ú_PROTOCOL_NAMESr–)Z protocol_coder,r,r-Úget_protocol_nameñsr’)mrìr¢Ú collectionsrÚenumrZ_EnumrZ_IntEnumrZ_IntFlagr;rrrr r r r r rrrrrrr®rr³rrrrrÚ ImportErrorrrrrrrr r!r"r#r$r%Ú _convert_r8r&rr'Ú __members__Úitemsr‘r8Z_SSLv2_IF_EXISTSr7r=rGrfrírxryrzr{r|r}r~rrŒr†rJrår�Z socket_errorrurZHAS_NEVER_CHECK_COMMON_NAMEZ_RESTRICTED_SERVER_CIPHERSr†r‹r‘r•rŸr r¡rªr¹r»rºrr rZ_create_default_https_contextr�rr;r<rÍrÐrÏr}r‡r‰rŠrŽr�r’r,r,r,r-Ú]sö $0ýýýýýý   )  1# 9ÿzÿ #ý />û