�
��fg�B � � � d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl m
Z
mZmZ ddl
mZmZmZmZ d dlZddlmZmZ dZdZd Zd Zd Zd
gZe
eed�Zd� Z eed
e� � Z d dl Z d dl m!Z!m"Z" n# e#$ r Y nw xY w d dl mZ n# e#$ r Y nw xY w ddl$mZ n# e#$ r Y nw xY w d dl m%Z% e%Z&n$# e#$ r d dl m&Z% e%Z&n# e#$ r dxZ&Z%Y nw xY wY nw xY w d dl m'Z' n
# e#$ r e%Z'Y nw xY w d dl m(Z(m)Z)m*Z* n# e#$ r
d\ Z)Z*dZ(Y nw xY w d dl m+Z+ n
# e#$ r dZ+Y nw xY wd�, g d�� � Z- d dl mZ n# e#$ r G d� de.� � ZY nw xY wd� Z/d� Z0d � Z1 d&d!�Z2 d'd"�Z3d#� Z4d$� Z5d(d%�Z6dS ))� )�absolute_importN)�hexlify� unhexlify)�md5�sha1�sha256� )�InsecurePlatformWarning�ProxySchemeUnsupported�SNIMissingWarning�SSLError� )�BRACELESS_IPV6_ADDRZ_RE�IPV4_REFzhttp/1.1)� �( �@ c �� � t t | � � t |� � z
� � }t t | � � t |� � � � D ]
\ }}|||z z }�|dk S )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�left�rights �3/usr/lib/python3/dist-packages/urllib3/util/ssl_.py�_const_compare_digest_backportr sd � � ��Q���#�a�&�&��
!�
!�F��9�Q�<�<��1���6�6� � ���e��$��,�����Q�;�� �compare_digest)�
CERT_REQUIRED�wrap_socket)�HAS_SNI)�SSLTransport)�PROTOCOL_TLS)�PROTOCOL_SSLv23)�PROTOCOL_TLS_CLIENT)�OP_NO_COMPRESSION�OP_NO_SSLv2�OP_NO_SSLv3)i i i )�OP_NO_TICKETi @ �:)zECDHE+AESGCMzECDHE+CHACHA20z
DHE+AESGCMzDHE+CHACHA20zECDH+AESGCMz DH+AESGCMzECDH+AESzDH+AESz
RSA+AESGCMzRSA+AESz!aNULLz!eNULLz!MD5z!DSS)�
SSLContextc �0 � e Zd Zd� Zd� Zdd�Zd� Zd d�ZdS )
r. c � � || _ d| _ t j | _ d | _ d| _ d | _ d | _ d | _ d S )NFr )
�protocol�check_hostname�ssl� CERT_NONE�verify_mode�ca_certs�options�certfile�keyfile�ciphers)�self�protocol_versions r �__init__zSSLContext.__init__� sB � �,�D�M�"'�D��"�}�D�� �D�M��D�L� �D�M��D�L��D�L�L�Lr c �" |