a
    ϏPf                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZ g dZejeje
jejejejf ZG d	d
 d
ZG dd dZddddddddZddddddddZejejef ZdddddddddZdS )    )annotationsN)x509)serialization)PBES)dsaeced448ed25519rsa)PrivateKeyTypes)r   PKCS12PrivateKeyTypesPKCS12CertificatePKCS12KeyAndCertificatesload_key_and_certificatesload_pkcs12serialize_key_and_certificatesc                   @  sl   e Zd ZdddddZeddddZeddd	d
ZdddddZddddZddddZ	dS )r   zx509.Certificatebytes | None)certfriendly_namec                 C  s>   t |tjstd|d ur.t |ts.td|| _|| _d S )Nz!Expecting x509.Certificate objectz#friendly_name must be bytes or None)
isinstancer   Certificate	TypeErrorbytes_cert_friendly_name)selfr   r    r   t/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py__init__)   s    zPKCS12Certificate.__init__returnc                 C  s   | j S N)r   r   r   r   r   r   5   s    zPKCS12Certificate.friendly_namec                 C  s   | j S r!   r   r"   r   r   r   certificate9   s    zPKCS12Certificate.certificateobjectboolotherr    c                 C  s&   t |tstS | j|jko$| j|jkS r!   )r   r   NotImplementedr$   r   r   r(   r   r   r   __eq__=   s
    

zPKCS12Certificate.__eq__intc                 C  s   t | j| jfS r!   )hashr$   r   r"   r   r   r   __hash__F   s    zPKCS12Certificate.__hash__strc                 C  s   d | j| jS )Nz+<PKCS12Certificate({}, friendly_name={!r})>)formatr$   r   r"   r   r   r   __repr__I   s    zPKCS12Certificate.__repr__N)
__name__
__module____qualname__r   propertyr   r$   r+   r.   r1   r   r   r   r   r   (   s   	r   c                   @  s   e Zd ZddddddZedddd	Zeddd
dZeddddZdddddZddddZ	ddddZ
dS )r   zPrivateKeyTypes | NonezPKCS12Certificate | Nonezlist[PKCS12Certificate])keyr   additional_certsc                 C  sx   |d ur.t |tjtjtjtjt	j
fs.td|d urHt |tsHtdtdd |D sbtd|| _|| _|| _d S )NLKey must be RSA, DSA, EllipticCurve, ED25519, or ED448 private key, or None.z/cert must be a PKCS12Certificate object or Nonec                 s  s   | ]}t |tV  qd S r!   )r   r   ).0Zadd_certr   r   r   	<genexpr>f   s   z4PKCS12KeyAndCertificates.__init__.<locals>.<genexpr>z@all values in additional_certs must be PKCS12Certificate objects)r   r
   RSAPrivateKeyr   DSAPrivateKeyr   EllipticCurvePrivateKeyr	   Ed25519PrivateKeyr   Ed448PrivateKeyr   r   all_keyr   _additional_certs)r   r6   r   r7   r   r   r   r   P   s.    

z!PKCS12KeyAndCertificates.__init__r   c                 C  s   | j S r!   )rA   r"   r   r   r   r6   r   s    zPKCS12KeyAndCertificates.keyc                 C  s   | j S r!   r#   r"   r   r   r   r   v   s    zPKCS12KeyAndCertificates.certc                 C  s   | j S r!   )rB   r"   r   r   r   r7   z   s    z)PKCS12KeyAndCertificates.additional_certsr%   r&   r'   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r!   )r   r   r)   r6   r   r7   r*   r   r   r   r+   ~   s    


zPKCS12KeyAndCertificates.__eq__r,   c                 C  s   t | j| jt| jfS r!   )r-   r6   r   tupler7   r"   r   r   r   r.      s    z!PKCS12KeyAndCertificates.__hash__r/   c                 C  s   d}| | j| j| jS )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r0   r6   r   r7   )r   fmtr   r   r   r1      s    z!PKCS12KeyAndCertificates.__repr__N)r2   r3   r4   r   r5   r6   r   r7   r+   r.   r1   r   r   r   r   r   O   s   "
r   r   r   z
typing.AnyzNtuple[PrivateKeyTypes | None, x509.Certificate | None, list[x509.Certificate]])datapasswordbackendr    c                 C  s   ddl m} || |S Nr   rG   ),cryptography.hazmat.backends.openssl.backendrG   Z%load_key_and_certificates_from_pkcs12rE   rF   rG   Zosslr   r   r   r      s    	r   c                 C  s   ddl m} || |S rH   )rJ   rG   r   rK   r   r   r   r      s    r   zPKCS12PrivateKeyTypes | Nonezx509.Certificate | Nonez&typing.Iterable[_PKCS12CATypes] | Nonez(serialization.KeySerializationEncryption)namer6   r   casencryption_algorithmr    c                 C  s   |d ur.t |tjtjtjtjt	j
fs.td|d urJt |tjsJtd|d urtt|}tdd |D sttdt |tjstd|d u r|d u r|stddd	lm} || ||||S )
Nr8   z"cert must be a certificate or Nonec                 s  s   | ]}t |tjtfV  qd S r!   )r   r   r   r   )r9   valr   r   r   r:      s   z1serialize_key_and_certificates.<locals>.<genexpr>z&all values in cas must be certificateszFKey encryption algorithm must be a KeySerializationEncryption instancez1You must supply at least one of key, cert, or casr   rI   )r   r
   r;   r   r<   r   r=   r	   r>   r   r?   r   r   r   listr@   r   ZKeySerializationEncryption
ValueErrorrJ   rG   Z(serialize_key_and_certificates_to_pkcs12)rL   r6   r   rM   rN   rG   r   r   r   r      s@    



r   )N)N) 
__future__r   typingZcryptographyr   Zcryptography.hazmat.primitivesr   Z-cryptography.hazmat.primitives._serializationr   Z)cryptography.hazmat.primitives.asymmetricr   r   r   r	   r
   Z/cryptography.hazmat.primitives.asymmetric.typesr   __all__Unionr;   r<   r=   r>   r?   r   r   r   r   r   r   Z_PKCS12CATypesr   r   r   r   r   <module>   s6   
	'F  
