File: //snap/certbot/4965/lib/python3.12/site-packages/certbot/__pycache__/crypto_util.cpython-312.pyc
�
N�hGU � �� � d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddl m
Z
ddlmZ ddlm
Z
dd lmZ dd
lmZ ddlmZ ddlmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z ddlm!Z! ddlm"Z" ddl#m$Z$ ddl%m&Z' ddl(m)Z) ddl(m*Z* ddl(m+Z+ ddl,m-Z- erddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ejl e7� Z8 dWd e9d!ee: d"e:d#e:d$e:d%e;d&e+jx fd'�Z= dXd(e+jx d)ee>e: e?e: f d*ee: d+e;d%e;d&e+j� fd,�ZAd-eBd&e;fd.�ZCd-eBd(eBd&e;fd/�ZDd0e:d1eBd&eEe'j� e+j� e>e: f fd2�ZG dYd3e9d"e:d#ee: d&eBfd4�ZHd(ee:eBf d&e;fd5�ZId6e*j� d&dfd7�ZKd6e*j� d&dfd8�ZLd9eed:d;eed<d=f d>eBd?eBd@ej� d&df
dA�ZNdBe:dCe:d&dfdD�ZOd6e*j� d&dfdE�ZPe'j� j� fdFeBdGee'j� e9f d&e>e: fdH�ZRe'j� j� fdFeBdGee'j� e9f d&e>e: fdI�ZSe'j� j� fd-eBdGee'j� e9f d&e>e: fdJ�ZTdBe:d&ej fdK�ZUdBe:d&ej fdL�ZVdMe:d&e:fdN�ZW ej� dOej� � ZZdPe:d&eEe:e:f fdQ�Z[dBe:d&e9fdR�Z\ dZdSe>e: dTe:dUe;d&e:fdV�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"