grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?h2Íã @s´dZddlZddlZddlmZddlmZmZ m Z ddl Z ddl m Z mZmZddl mZmZmZddl mZmZmZmZmZmZmZddl mZmZdd l mZmZm Z m!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/e j0d e1dd„e d�e j0de1dd„e d�e j0de1dd„e d�e j0de1dd„e d�e j0de1dd„e d�e j0de1dd„e d�e2j3Z4e2_4dd„e2j5 6¡DƒZ7e8e2ddƒZ9Gdd„de ƒZ:Gd d!„d!e ƒZ;Gd"d#„d#e ƒZd&k�r dd'l m?Z?m@Z@dd(lAmAZAmBZBmCZCdd)lAmDZDmEZEddlAZFddlGZGddlHZHddlIZIeJZKd*gZLeMe d+ƒZNe.ZOeZPd,d-„ZQd.d/„ZRd0d1„ZSd2d3„ZTed4d5ƒZUd6d7„ZVGd8d9„d9ed9d:ƒƒZWGd;d<„d„d>eƒZYeXjZfdddd?œd@dA„Z[e3fe\dBeXjZddddddCœdDdE„Z]e[Z^e]Z_GdFdG„dGƒZ`dHdI„ZaGdJdK„dKeAƒZbebeY_ce`eY_ddddBe\e3ddLdLdf dMdN„ZedOdP„ZfdQZgdRZhdSdT„ZidUdV„Zje3dfdWdX„ZkdYdZ„ZldS)[añ This 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()) get_server_certificate (addr, ssl_version, ca_certs, timeout) -- Retrieve the certificate from the server at the specified address and return it as a PEM-encoded string 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_TLS PROTOCOL_TLS_CLIENT PROTOCOL_TLS_SERVER PROTOCOL_TLSv1 PROTOCOL_TLSv1_1 PROTOCOL_TLSv1_2 The following constants identify various SSL alert message descriptions as per http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6 ALERT_DESCRIPTION_CLOSE_NOTIFY ALERT_DESCRIPTION_UNEXPECTED_MESSAGE ALERT_DESCRIPTION_BAD_RECORD_MAC ALERT_DESCRIPTION_RECORD_OVERFLOW ALERT_DESCRIPTION_DECOMPRESSION_FAILURE ALERT_DESCRIPTION_HANDSHAKE_FAILURE ALERT_DESCRIPTION_BAD_CERTIFICATE ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE ALERT_DESCRIPTION_CERTIFICATE_REVOKED ALERT_DESCRIPTION_CERTIFICATE_EXPIRED ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN ALERT_DESCRIPTION_ILLEGAL_PARAMETER ALERT_DESCRIPTION_UNKNOWN_CA ALERT_DESCRIPTION_ACCESS_DENIED ALERT_DESCRIPTION_DECODE_ERROR ALERT_DESCRIPTION_DECRYPT_ERROR ALERT_DESCRIPTION_PROTOCOL_VERSION ALERT_DESCRIPTION_INSUFFICIENT_SECURITY ALERT_DESCRIPTION_INTERNAL_ERROR ALERT_DESCRIPTION_USER_CANCELLED ALERT_DESCRIPTION_NO_RENEGOTIATION ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE ALERT_DESCRIPTION_UNRECOGNIZED_NAME ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY é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/python39/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(eZdZdZdZdZdZdZdZdZ dS) Ú_TLSContentTypez@Content types (record layer) See RFC 8446, section B.1 ééééééN) r8r9r:Ú__doc__ÚCHANGE_CIPHER_SPECÚALERTZ HANDSHAKEZAPPLICATION_DATAÚHEADERZINNER_CONTENT_TYPEr,r,r,r-r=©sr=c@s˜eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$S)%Ú _TLSAlertTypezQAlert types for TLSContentType.ALERT messages See RFC 8466, section B.2 ré r>r?r@éé(é)é*é+é,é-é.é/é0é1é2é3é<éFéGéPéVéZédéménéoépéqérésétéxN)&r8r9r:rDZ 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-rH·sFrHc@sheZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdS)Ú_TLSMessageTypezFMessage types (handshake protocol) See RFC 8446, section B.3 réééééééé é é ééér>r?r@rAééCéþrCN)r8r9r:rDZ 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_HASHrEr,r,r,r-rgàs.rgÚ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=rGrFrHrg)ZconnÚ directionÚversionZ content_typeZmsg_typeÚdataZmsg_enum©Úcallbackr,r-rúžs(        ÿz'SSLContext._msg_callback..inner)r«rºrøróÚhasattrràrù)r¿rrúr°rÿr-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Ãscs.tƒj}z t|ƒWSty(|YS0dSr»)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:rDrî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ºÛsj ý ÿ         &%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)zíCreate a SSLContext object with default settings. NOTE: The protocol and settings may change anytime without prior deprecation. The values represent a fair balance between maximum compatibility and security. TÚ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| _|dur2|| _|r„Z"ed?d@„ƒZ#‡fdAdB„Z$edCdD„ƒZ%edEdF„ƒZ&‡fdGdH„Z'edddIdJ„ƒZ(‡fdKdL„Z)dMdN„Z*dOdP„Z+‡fdQdR„Z,ededTdU„ƒZ-edVdW„ƒZ.‡Z/S)fÚ SSLSocketz¶This 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. cOst|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ÚfilenoFrhr/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_datarKZ notconn_pre_handshake_data_errorÚtimeoutr°r,r-rÎØsŒ  þ       " þ  zSSLSocket._createcCs|jSr»)rFrñr,r,r-rË8szSSLSocket.contextcCs||_||j_dSr»)rFrrËrr,r,r-rË=scCs|jdur|jjSdSr»rrñr,r,r-rÌBs zSSLSocket.sessioncCs||_|jdur||j_dSr»)rGrrÌr r,r,r-rÌHs cCs|jdur|jjSdSr»r!rñr,r,r-r"Ns zSSLSocket.session_reusedcCstd|jjƒ‚dS)NzCan't dup() %s instances)rBr±r8rñr,r,r-ÚdupTsÿz SSLSocket.dupcCsdSr»r,)r¿Úmsgr,r,r-Ú _checkClosedXszSSLSocket._checkClosedcCs|js| ¡dSr»)rNrHrñ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)zORead up to LEN bytes and return them. Return zero-length string on EOF.Nz'Read on closed or unwrapped SSL socket.rr/)rTrrŽr$r r½Z SSL_ERROR_EOFrÉ)r¿r—r%Úxr,r,r-r$ds zSSLSocket.readcCs&| ¡|jdurtdƒ‚|j |¡S)zhWrite DATA to the underlying SSL channel. Returns number of bytes of DATA actually transmitted.Nz(Write on closed or unwrapped SSL socket.)rTrrŽr'r(r,r,r-r'ys zSSLSocket.writecCs| ¡| ¡|j |¡Sr»)rTrUrr)r*r,r,r-r)‚szSSLSocket.getpeercertcCs*| ¡|jdustjsdS|j ¡SdSr»)rTrr;rr+rñr,r,r-r+ˆszSSLSocket.selected_npn_protocolcCs*| ¡|jdustjsdS|j ¡SdSr»)rTrr;rr,rñr,r,r-r,�sz SSLSocket.selected_alpn_protocolcCs$| ¡|jdurdS|j ¡SdSr»)rTrr-rñr,r,r-r-˜s zSSLSocket.ciphercCs$| ¡|jdurdS|j ¡SdSr»)rTrr.rñr,r,r-r. s zSSLSocket.shared_cipherscCs$| ¡|jdurdS|j ¡SdSr»)rTrr/rñr,r,r-r/¨s zSSLSocket.compressionrcsF| ¡|jdur4|dkr(td|jƒ‚|j |¡Stƒ ||¡SdS)Nrz3non-zero flags not allowed in calls to send() on %s)rTrrŽr±r'r«Úsend)r¿rþr r°r,r-rW°s ÿÿ zSSLSocket.sendcsL| ¡|jdur"td|jƒ‚n&|dur8tƒ ||¡Stƒ |||¡SdS)Nz%sendto not allowed on instances of %s)rTrrŽr±r«Úsendto)r¿rþZ flags_or_addrr�r°r,r-rX»s ÿzSSLSocket.sendtocOstd|jƒ‚dS)Nz&sendmsg not allowed on instances of %s©rBr±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) rTrrŽr±Ú memoryviewÚcastr—rWr«Úsendall)r¿rþr r„ZviewZ byte_viewZamountr&r°r,r-r^Ës ÿÿHzSSLSocket.sendallcs,|jdur| |||¡Stƒ |||¡SdS)z…Send a file, possibly by using os.sendfile() if this is a clear-text socket. Return the total number of bytes sent. N)rZ_sendfile_use_sendr«Úsendfile)r¿ÚfileÚoffsetr„r°r,r-r_Ûs zSSLSocket.sendfilecsD| ¡|jdur2|dkr(td|jƒ‚| |¡Stƒ ||¡SdS)Nrz3non-zero flags not allowed in calls to recv() on %s)rTrrŽr±r$r«rJ©r¿Zbuflenr r°r,r-rJå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)rTr—rrŽr±r$r«Ú recv_into©r¿r%Únbytesr r°r,r-rcðs   ÿÿ zSSLSocket.recv_intocs4| ¡|jdur"td|jƒ‚ntƒ ||¡SdS)Nz'recvfrom not allowed on instances of %s)rTrrŽr±r«Úrecvfromrbr°r,r-rfÿs  ÿzSSLSocket.recvfromcs6| ¡|jdur"td|jƒ‚ntƒ |||¡SdS)Nz,recvfrom_into not allowed on instances of %s)rTrrŽr±r«Ú recvfrom_intordr°r,r-rgs  ÿzSSLSocket.recvfrom_intocOstd|jƒ‚dS)Nz&recvmsg not allowed on instances of %srYrr,r,r-ÚrecvmsgsÿzSSLSocket.recvmsgcOstd|jƒ‚dS)Nz+recvmsg_into not allowed on instances of %srYrr,r,r-Ú recvmsg_intosÿzSSLSocket.recvmsg_intocCs$| ¡|jdur|j ¡SdSdS)Nr)rTrr0rñr,r,r-r0s  zSSLSocket.pendingcs| ¡d|_tƒ |¡dSr»)rTrr«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|ƒƒ‚dSrj)rr7rŽrÂrñr,r,r-r7-s z&SSLSocket.verify_client_post_handshakecsd|_tƒ ¡dSr»)rr«Ú _real_closerñr°r,r-rl4szSSLSocket._real_closec CsP| ¡| ¡}z.|dkr(|r(| d¡|j ¡W| |¡n | |¡0dS)NrA)rUrDrMrr1)r¿ÚblockrQr,r,r-r18s   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!Fr@T)rÇrŽrNrrËrOrÊrGr«Ú connect_exÚconnectrÈr1r�)r¿r�rnZrcr°r,r-Ú _real_connectCs*þ zSSLSocket._real_connectcCs| |d¡dS)úQConnects to remote ADDR, and then wraps the connection in an SSL channel.FN©rp©r¿r�r,r,r-ro]szSSLSocket.connectcCs | |d¡S)rqTrrrsr,r,r-rnbszSSLSocket.connect_excs.tƒ ¡\}}|jj||j|jdd�}||fS)z¿Accepts 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.T)rÈrÉrÇ)r«ÚacceptrËrÏrÈrÉ)r¿Znewsockr�r°r,r-rtgsýzSSLSocket.acceptr€cCs4|jdur|j |¡S|tvr,td |¡ƒ‚dSdS)Nz({0} channel binding type not implemented)rr4ÚCHANNEL_BINDING_TYPESrŽr‡r5r,r,r-r4ss  ÿzSSLSocket.get_channel_bindingcCs|jdur|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€)0r8r9r:rDrr¶rÎrr:rËrrÌr"rRrTrUr$r'r)r+r,r-r.r/rWrXrZr^r_rJrcrfrgrhrir0r2r3r7rlr1rprornrtr4rý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"ty`td ||fƒ‚Yn00||dd…|ƒ}||d|f|d d …ƒSdS) a‰Return the time in seconds since the Epoch, given the timestring representing the "notBefore" or "notAfter" date from a certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C locale). "notBefore" or "notAfter" dates must use UTC (RFC 5280). Month is one of: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec UTC should be specified as GMT (see ASN1_TIME_print()) r)Ústrptime)Útimegm) ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecz %d %H:%M:%S %Y GMTNrjrhz*time data %r does not match format "%%b%s"rirm)Ú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)z[Takes a certificate in binary DER format and returns the PEM version of it as a string.Ú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_bytesZssr,r‚r-ÚDER_cert_to_PEM_certÈs "rŠcCs\| t¡stdtƒ‚| ¡ t¡s0tdtƒ‚| ¡ttƒttƒ …}t |  dd¡¡S)zhTakes a certificate in ASCII PEM format and returns the DER-encoded version of it as a byte sequencez(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)z÷Retrieve 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.N)rr§T)r r Ú_create_stdlib_contextr}rÏr)rŠ) r�rvrwZhostZportrrË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’)mrDrì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=rHrgríryrzr{r|r}r~rrŒr†rIrå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ÞZ $ 0ýýýýýý   )  1# 9ÿzÿ #ý />û