| Current Path : /snap/certbot/5451/lib/python3.12/site-packages/certbot/__pycache__/ |
| Current File : //snap/certbot/5451/lib/python3.12/site-packages/certbot/__pycache__/crypto_util.cpython-312.pyc |
�
q[�iU^ � �j � d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlm Z ddl
Z
ddlmZ ddl
mZ ddl
mZ dd lmZ dd
lmZ ddlmZ ddlmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl%m&Z& ddl'm(Z) ddl*m+Z+ ddl*m,Z, ddl*m-Z- ddl.m/Z/ erddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ejp e9� Z: d[d e;d!ee< d"e<d#e<d$e<d%e=d&e-j| fd'�Z? d\d(e-j| d)e e@e< eAe< f d*ee< d+e=d%e=d,e@ej� ej� z dz d&e-j� fd-�ZEd.eFd&e=fd/�ZGd.eFd(eFd&e=fd0�ZHd1e<d2eFd&e-j� fd3�ZId1e<d2eFd&eJd4e-j� e@e< f fd5�ZK d]d6e;d"e<d#ee< d&eFfd7�ZLd(e e<eFf d&e=fd8�ZMd9e,j� d&dfd:�ZOd9e,j� d&dfd;�ZPd<e ed=d>ee d?d@f dAeFdBeFdCej� d&df
dD�ZRdEe<dFe<d&dfdG�ZSd9e,j� d&dfdH�ZT d^dIeFdJdKd&e@e< fdL�ZU d^dIeFdJdKd&e@e< fdM�ZV d^d.eFdJdKd&e@e< fdN�ZWdEe<d&ej fdO�ZXdEe<d&ej fdP�ZYdQe<d&e<fdR�ZZ ej� dSej� � Z]dTe<d&eJe<e<f fdU�Z^dEe<d&e;fdV�Z_ d_dWe@e< dXe<dYe=d&e<fdZ�Z`y)`z�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)�Optional)�
TYPE_CHECKING)�Union)�x509)�InvalidSignature)�UnsupportedAlgorithm)�default_backend)�hashes)�
serialization)�ec)�rsa)�DSAPublicKey)�ECDSA)�EllipticCurvePublicKey)�PKCS1v15)�RSAPublicKey)�Encoding)�NoEncryption)�
PrivateFormat)�SSL)�crypto_util)�errors)�
interfaces)�util)�os)�Ed448PublicKey)�Ed25519PublicKey)�
X448PublicKey)�X25519PublicKey�key_size�key_dir�key_type�elliptic_curve�keyname�strict_permissions�returnc �D � t | |xs d|�� }d}|r�t
j |d|� t
j t j j ||� d d
� \ } }| 5 | j |� ddd� |dk( rt j d| |� nt j d
| |� t
j ||� S # t $ r=}t j dd�� t j dt |� � |�d}~ww xY w# 1 sw Y ��xY w)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.
� secp256r1)�bitsr# r"