3 »nNj35 ã ) @ s d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl m Z mZmZ ddl mZmZmZ ddlmZ dZdZdZdZe eed œZd d„ ZeedeƒZy,d dlZd d lmZmZmZ d dlmZ W n ek rà Y nX yd dlm Z m!Z!m"Z" W n" ek �r d6\Z Z!dZ"Y nX e#edƒ�r2ej$Z$n4yd dl%Z%dd„ Z$W n ek �rd dd„ Z$Y nX dj&dddddddddd d!d"d#d$d%d&gƒZ'yd d'lmZ W n. ek �rÎ d dl(Z(G d(d)„ d)e)ƒZY nX d*d+„ Z*d,d-„ Z+d.d/„ Z,d7d0d1„Z-d8d2d3„Z.d4d5„ Z/dS )9é )Úabsolute_importN)ÚhexlifyÚ unhexlify)Úmd5Úsha1Úsha256é )ÚSSLErrorÚInsecurePlatformWarningÚSNIMissingWarning)ÚsixF)é é( é@ c C sH t t| ƒt|ƒ ƒ}x*tt| ƒt|ƒƒD ]\}}|||A O }q(W |dkS )z§ Compare two digests of equal length in constant time. The digests must be of type str/bytes. Returns True if the digests match, and False otherwise. r )ÚabsÚlenÚzipÚ bytearray)ÚaÚbÚresultÚlÚr© r ú/usr/lib/python3.6/ssl_.pyÚ_const_compare_digest_backport s r Zcompare_digest)Úwrap_socketÚ CERT_NONEÚPROTOCOL_SSLv23)ÚHAS_SNI)ÚOP_NO_SSLv2ÚOP_NO_SSLv3ÚOP_NO_COMPRESSIONé é i Ú inet_ptonc C s t |tƒr|jdƒ}tj|ƒS )NÚascii)Ú isinstanceÚbytesÚdecodeÚ ipaddressZ ip_address)Ú_Úhostr r r r% D s c C s t j|ƒS )N)ÚsocketZ inet_aton)r+ r, r r r r% J s ú:zTLS13-AES-256-GCM-SHA384zTLS13-CHACHA20-POLY1305-SHA256zTLS13-AES-128-GCM-SHA256zECDH+AESGCMz ECDH+CHACHA20z DH+AESGCMzDH+CHACHA20zECDH+AES256z DH+AES256zECDH+AES128zDH+AESz RSA+AESGCMzRSA+AESz!aNULLz!eNULLz!MD5)Ú SSLContextc @ s8 e Zd Zdd„ Zdd„ Zd dd„Zdd „ Zddd„ZdS )r/ c C s6 || _ d| _tj| _d | _d| _d | _d | _d | _ d S )NFr ) ÚprotocolÚcheck_hostnameÚsslr Úverify_modeÚca_certsÚoptionsÚcertfileÚkeyfileÚciphers)ÚselfZprotocol_versionr r r Ú__init__v s zSSLContext.__init__c C s || _ || _d S )N)r6 r7 )r9 r6 r7 r r r Úload_cert_chain� s zSSLContext.load_cert_chainNc C s || _ |d k rtdƒ‚d S )Nz-CA directories not supported in older Pythons)r4 r )r9 ZcafileZcapathr r r Úload_verify_locations… s z SSLContext.load_verify_locationsc C s || _ d S )N)r8 )r9 Zcipher_suiter r r Úset_ciphers‹ s zSSLContext.set_ciphersFc C s> t jdtƒ | j| j| j| j| j|dœ}t|fd| j i|—ŽS )Na2 A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings)r7 r6 r4 Ú cert_reqsÚssl_versionÚserver_sider8 ) ÚwarningsÚwarnr r7 r6 r4 r3 r0 r r8 )r9 r- Úserver_hostnamer@ Úkwargsr r r r Ž s zSSLContext.wrap_socket)NN)NF)Ú__name__Ú __module__Ú__qualname__r: r; r<