
    Wwg                        d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 g dZ
 ej                  e      Zd Zdefd	Zd
 Zdee   dej$                  fdZdedee   dej$                  fdZdej$                  fdZdej,                  fdZy)z/
Utility module to load keys and certificates.
    N)Optional)keyspemx509)serialization)load_cert_from_pemderload_certs_from_pemderload_certs_from_pemder_dataload_private_key_from_pemder!load_private_key_from_pemder_datac              #      K   | D ]:  }t        |d      5 }|j                         }ddd       t              E d{    < y# 1 sw Y   xY w7 w)z
    A convenience function to load PEM/DER-encoded certificates from files.

    :param cert_files:
        An iterable of file names.
    :return:
        A generator producing :class:`.asn1crypto.x509.Certificate` objects.
    rbN)openreadr
   )
cert_files	cert_filefcert_data_bytess       C/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/keys.pyr	   r	      sV        @	)T" 	'affhO	'.???@	' 	'?s%   AAAAAA	Ar   c              #   ^  K   t        j                  |       rst        j                  | d      }|D ]V  \  }}}||j                         dk(  r"t        j
                  j                  |       >t        j                  d| d       X yt        j
                  j                  |        yw)a  
    A convenience function to load PEM/DER-encoded certificates from
    binary data.

    :param cert_data_bytes:
        ``bytes`` object from which to extract certificates.
    :return:
        A generator producing :class:`.asn1crypto.x509.Certificate` objects.
    T)multipleNcertificatezSkipping PEM block of type z in CA chain file.)	r   detectunarmorlowerr   Certificateloadloggerdebug)r   pems	type_name_ders        r   r
   r
   %   s      zz/"{{?T:!% 	Iq# IOO$5$F&&++C001) =% &		 ##O44s   B+B-c                 p    t        t        | g            }t        |      dk7  rt        d|  d      |d   S )z
    A convenience function to load a single PEM/DER-encoded certificate
    from a file.

    :param cert_file:
        A file name.
    :return:
        An :class:`.asn1crypto.x509.Certificate` object.
       zNumber of certs in z should be exactly 1r   )listr	   len
ValueError)r   certss     r   r   r   A   s@     '45E
5zQ.yk9MNOO8O    
passphrasereturnc                 ~    t        | d      5 }|j                         }ddd       t        |      S # 1 sw Y   xY w)a  
    A convenience function to load PEM/DER-encoded keys from files.

    :param key_file:
        File to read the key from.
    :param passphrase:
        Key passphrase.
    :return:
        A private key encoded as an unencrypted PKCS#8 PrivateKeyInfo object.
    r   N)r+   )r   r   r   )key_filer+   r   	key_bytess       r   r   r   Q   s=     
h	 FFH	,Y:NN s   3<r/   c                     t        j                  |       rt        j                  nt        j                  }t         || |            S )a  
    A convenience function to load PEM/DER-encoded keys from binary data.

    :param key_bytes:
        ``bytes`` object to read the key from.
    :param passphrase:
        Key passphrase.
    :return:
        A private key encoded as an unencrypted PKCS#8 PrivateKeyInfo object.
    )password)r   r   r   load_pem_private_keyload_der_private_key(_translate_pyca_cryptography_key_to_asn1)r/   r+   load_funs      r   r   r   c   sB     ::i  	**// 
 4Z0 r*   c                     t         j                  j                  | j                  t        j
                  j                  t        j                  j                  t	        j                                     S N)
r   PrivateKeyInfor   private_bytesr   EncodingDERPrivateFormatPKCS8NoEncryption)private_keys    r   r4   r4   z   sU     ##!!""&&''--&&(	
 r*   c                     t         j                  j                  | j                  t        j
                  j                              S r7   )r   r   r   public_bytesr   r:   r;   )certs    r   )_translate_pyca_cryptography_cert_to_asn1rC      s0      !2!2=3I3I3M3M!NOOr*   )__doc__loggingtypingr   
asn1cryptor   r   r   cryptography.hazmat.primitivesr   __all__	getLogger__name__r   r	   bytesr
   r   r8   r   r   r4   r   rC    r*   r   <module>rN      s      & & 8 
		8	$@5 58 O"5/O	O$"*5/	.	,Pt7G7G Pr*   