File: //usr/lib/python3/dist-packages/acme/__pycache__/crypto_util.cpython-38.pyc
U
�*Pd�+ � @ s� d Z ddlZddlZddlZddlZddlZddlZddlZddl m
Z
ddl mZ ddlm
Z
ddlmZ ddlmZ ddlmZ dd lmZ e�e�ZejZG d
d� de�Zdd
edfdd�Zddd�Zdd� Zdd� Zddd�Ze
jfdd�Z dS ) zCrypto utilities.� N)�crypto)�SSL)�errors)�Callable)�Optional)�Tuple)�Unionc @ sD e Zd ZdZefdd�Zdd� Zdd� ZG dd � d e�Z d
d� Z
dS )
� SSLSocketz�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.
c C s || _ || _|| _d S �N)�sock�certs�method)�selfr r r
� r �2/usr/lib/python3/dist-packages/acme/crypto_util.py�__init__( s zSSLSocket.__init__c C s t | j|�S r
)�getattrr �r �namer r r �__getattr__- s zSSLSocket.__getattr__c C s� |� � }z| j| \}}W n" tk
r< t�d|� Y dS X t�| j�}|�tj � |�tj
� |�|� |�|� |�
|� 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`
z-Server name (%s) not recognized, dropping SSLN)Zget_servernamer �KeyError�logger�debugr �Contextr
�set_options�OP_NO_SSLv2�OP_NO_SSLv3Zuse_privatekeyZuse_certificateZset_context)r �
connectionZserver_name�key�certZnew_contextr r r �_pick_certificate_cb0 s �
zSSLSocket._pick_certificate_cbc @ s( e Zd ZdZdd� Zdd� Zdd� ZdS ) zSSLSocket.FakeConnectionzFake OpenSSL.SSL.Connection.c C s
|| _ d S r
)�_wrapped)r r r r r r O s z!SSLSocket.FakeConnection.__init__c C s t | j|�S r
)r r! r r r r r R s z$SSLSocket.FakeConnection.__getattr__c G s
| j �� S r
)r! �shutdown)r Zunused_argsr r r r"