File: //lib/python3.9/site-packages/certbot/__pycache__/crypto_util.cpython-39.opt-1.pyc
a
}|�g�] � @ s` d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlm Z ddlm
Z
ddlmZ ddlmZ dd l
mZ dd
lmZ ddlmZ ddlmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z ddl!m"Z" ddl#m$Z$ ddl#m%Z% ddl#m&Z& ddl'Z'ddl(m)Z) ddl(m*Z* ddl+m,Z- ddl.m/Z/ ddl.m0Z0 ddl.m1Z1 ddl2m3Z3 e�r�dd l4m5Z5 dd!l6m7Z7 dd"l8m9Z9 dd#l:m;Z; e�<e=�Z>doe?ee@ e@e@e@eAe1jBd(�d)d*�ZCdpe1jBeee@ e e@ f ee@ eAeAe1jDd,�d-d.�ZEeFeAd/�d0d1�ZGeFeFeAd2�d3d4�ZHe@eFe
e-jIe1jDee@ f d5�d6d7�ZJdqe?e@ee@ eFd9�d:d;�ZKee@eFf eAd<�d=d>�ZLe0jMdd?�d@dA�ZNe0jMdd?�dBdC�ZOeedDdEee"dFdGf eFeFejPddH�dIdJ�ZQe@e@ddK�dLdM�ZRe0jMdd?�dNdO�ZSeFe
e)jTe?f dP�dQdR�ZUe-jIjVfeFee-jIe?f ee@ dS�dTdU�ZWe-jIjVfeFee-jIe?f ee@ dS�dVdW�ZXe-jIjVfeFee-jIe?f ee@ dX�dYdZ�ZYe-jIjVfeee)jT ee'jZ f ee-jIe?f eFd[�d\d]�Z[e@ejd^�d_d`�Z\e@ejd^�dadb�Z]e@e@dc�ddde�Z^e�_dfej`�Zae@e
e@e@f dg�dhdi�Zbe@e?d^�djdk�Zcdree@ e@eAe@dl�dmdn�ZddS )sz�Certbot client crypto utility functions.
.. todo:: Make the transition to use PSS rather than PKCS1_v1_5 when the server
is capable of handling the signatures.
� N)�List)�Optional)�Set)�Tuple)�
TYPE_CHECKING)�Union)�x509)�InvalidSignature)�UnsupportedAlgorithm)�default_backend)�hashes)�
serialization)�ec)�rsa)�DSAPublicKey)�ECDSA)�EllipticCurvePublicKey)�PKCS1v15)�RSAPublicKey)�Encoding)�NoEncryption)�
PrivateFormat)�crypto)�SSL)�crypto_util)�errors)�
interfaces)�util)�os)�Ed448PublicKey)�Ed25519PublicKey)�
X448PublicKey)�X25519PublicKeyr � secp256r1�key-certbot.pemT)�key_size�key_dir�key_type�elliptic_curve�keyname�strict_permissions�returnc
C s� zt | |pd|d�}W nF ty\ } z.tjddd� t�dt|�� |�W Y d}~n
d}~0 0 d}|r�t�|d|� t�t j
�||�d d
�\} }| � | �|� W d � n1 s�0 Y |dkr�t�d| |� nt�d
| |� t�
||�S )a$ Initializes and saves a privkey.
Inits key and saves it in PEM format on the filesystem.
.. note:: keyname is the attempted filename, it may be different if a file
already exists at the path.
:param int key_size: key size in bits if key size is rsa.
:param str key_dir: Optional key save directory.
:param str key_type: Key Type [rsa, ecdsa]
:param str elliptic_curve: Name of the elliptic curve if key type is ecdsa.
:param str keyname: Filename of key
:param bool strict_permissions: If true and key_dir exists, an exception is raised if
the directory doesn't have 0700 permissions or isn't owned by the current user.
:returns: Key
:rtype: :class:`certbot.util.Key`
:raises ValueError: If unable to generate the key given key_size.
r# )�bitsr( r'