3 5lc^A @ s\ d Z ddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlmZ ddlmZ ddlm Z ddlmZ dd lmZ dd lmZ ddlZddlmZ ddlmZ dd lmZ ejeZejZG dd dZG dd dZdded0dfeee e e ee!e f e ee! ej"dddZ#d1ee eee! ee! f e$e eeej%ej&f edddZ'eej"ej(f ee! dddZ)eej"ej(f ee! dd d!Z*eej"ej(f ee! dd"d#Z+eej"ej(f ee! dd$d%Z,d5ej-e ee! e e e e$e eej. e eeej%ej&f ej"d*d+d,Z/ej0feej" e ed-d.d/Z1dS )6zCrypto utilities. N)Any)Callable)List)Mapping)Optional)Set)Tuple)Union)crypto)SSL)errorsc @ sP e Zd Zeeeejejf f dddZ e jeeejejf dddZ dS )_DefaultCertSelection)certsc C s || _ d S )N)r )selfr r !/usr/lib/python3.6/crypto_util.py__init__% s z_DefaultCertSelection.__init__) connectionreturnc C s |j }| jj|d S )N)get_servernamer get)r r Zserver_namer r r __call__( s z_DefaultCertSelection.__call__N)__name__ __module____qualname__r bytesr r PKeyX509r r Connectionr r r r r r r $ s "r c @ s e Zd ZdZdeddfejeeee e je jf f e eeejee gef eeejge e je jf f ddddZeedddZejdd d dZG dd d Ze eef dddZdS ) SSLSocketa SSL wrapper for sockets. :ivar socket sock: Original wrapped socket. :ivar dict certs: Mapping from domain names (`bytes`) to `OpenSSL.crypto.X509`. :ivar method: See `OpenSSL.SSL.Context` for allowed values. :ivar alpn_selection: Hook to select negotiated ALPN protocol for connection. :ivar cert_selection: Hook to select certificate for connection. If given, `certs` parameter would be ignored, and therefore must be empty. N)sockr methodalpn_selectioncert_selectionr c C s\ || _ || _|| _| r&| r&td|r6|r6td|}|d krRt|rL|ni }|| _d S )Nz*Neither cert_selection or certs specified.z(Both cert_selection and certs specified.)r r" r! ValueErrorr r# )r r r r! r" r# Zactual_cert_selectionr r r r : s zSSLSocket.__init__)namer c C s t | j|S )N)getattrr )r r% r r r __getattr__P s zSSLSocket.__getattr__)r r c C s | j |}|dkr&tjd|j dS |\}}tj| j}|jtj |jtj |j | |j| | jdk r||j | j |j| dS )a SNI certificate callback. This method will set a new OpenSSL context object for this connection when an incoming connection provides an SNI name (in order to serve the appropriate certificate, if any). :param connection: The TLS connection object on which the SNI extension was received. :type connection: :class:`OpenSSL.Connection` Nz=Certificate selection for server name %s failed, dropping SSL)r# loggerdebugr r Contextr! set_optionsOP_NO_SSLv2OP_NO_SSLv3Zuse_privatekeyZuse_certificater" set_alpn_select_callbackZset_context)r r ZpairkeycertZnew_contextr r r _pick_certificate_cbS s zSSLSocket._pick_certificate_cbc @ sB e Zd ZdZejddddZeedddZ ee d d dZdS )zSSLSocket.FakeConnectionzFake OpenSSL.SSL.Connection.N)r r c C s || _ d S )N)_wrapped)r r r r r r s s z!SSLSocket.FakeConnection.__init__)r% r c C s t | j|S )N)r&