o
    >e                     @   s   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eZdd Zd	efd
dZdd Zdee dejfddZdedee dejfddZdejfddZdejfddZdS )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              	   c   sP    | D ]"}t |d}| }W d   n1 sw   Y  t|E dH  qdS )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_bytes r   M/var/www/html/humari/django-venv/lib/python3.10/site-packages/pyhanko/keys.pyr      s   	
r   r   c                 c   sv    t | r2t j| dd}|D ] \}}}|du s| dkr&tj|V  qtd| d qdS tj| V  dS )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_derr   r   r   r	   %   s   


r	   c                 C   s2   t t| g}t|dk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   certsr   r   r   r   A   s   
r   
passphrasereturnc                 C   s>   t | d}| }W d   n1 sw   Y  t||dS )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_bytesr   r   r   r
   Q   s   
r
   r*   c                 C   s&   t | rtjntj}t|| |d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_funr   r   r   r   c   s   
r   c                 C   s"   t j| tjjtjjt	 S N)
r   PrivateKeyInfor   private_bytesr   EncodingDERPrivateFormatPKCS8NoEncryption)private_keyr   r   r   r.   z   s   r.   c                 C   s   t j| tjjS r0   )r   r   r   public_bytesr   r3   r4   )certr   r   r   )_translate_pyca_cryptography_cert_to_asn1   s   r;   )__doc__loggingtypingr   
asn1cryptor   r   r   cryptography.hazmat.primitivesr   __all__	getLogger__name__r   r   bytesr	   r   r1   r
   r   r.   r   r;   r   r   r   r   <module>   s4    



