U
    EZhK                  	   @   sL  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 ddd	d
dddg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ee je e je je je e jej e jej f dddZdee je e jedddZ e jejef Z!e je e je e jej e je j"e!  ej#edddZ$dS )    N)x509)serialization)PBES)dsaeced448ed25519rsa)PrivateKeyTypesr   PKCS12PrivateKeyTypesPKCS12CertificatePKCS12KeyAndCertificatesload_key_and_certificatesload_pkcs12serialize_key_and_certificatesc                   @   s|   e Zd Zejeje dddZe	eje dddZ
e	ejdddZeed	d
dZedddZedddZdS )r   )certfriendly_namec                 C   s>   t |tjstd|d k	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   z/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/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   3   s    zPKCS12Certificate.friendly_namec                 C   s   | j S r   r   r    r   r   r   certificate7   s    zPKCS12Certificate.certificate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__c                 C   s   t | j| jfS r   )hashr"   r   r    r   r   r   __hash__D   s    zPKCS12Certificate.__hash__c                 C   s   d | j| jS )Nz+<PKCS12Certificate({}, friendly_name={!r})>)formatr"   r   r    r   r   r   __repr__G   s     zPKCS12Certificate.__repr__N)__name__
__module____qualname__r   r   typingOptionalr   r   propertyr   r"   objectboolr'   intr)   strr+   r   r   r   r   r   &   s   	c                   @   s   e Zd Zeje eje eje dddZe	eje dddZ
e	eje dddZe	eje dd	d
ZeedddZedddZedddZdS )r   )keyr   additional_certsc                 C   sx   |d k	r.t |tjtjtjtjt	j
fs.td|d k	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>d   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   N   s.    

z!PKCS12KeyAndCertificates.__init__r   c                 C   s   | j S r   )rA   r    r   r   r   r6   p   s    zPKCS12KeyAndCertificates.keyc                 C   s   | j S r   r!   r    r   r   r   r   t   s    zPKCS12KeyAndCertificates.certc                 C   s   | j S r   )rB   r    r   r   r   r7   x   s    z)PKCS12KeyAndCertificates.additional_certsr#   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__c                 C   s   t | j| jt| jfS r   )r(   r6   r   tupler7   r    r   r   r   r)      s    z!PKCS12KeyAndCertificates.__hash__c                 C   s   d}| | j| j| jS )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r*   r6   r   r7   )r   fmtr   r   r   r+      s    z!PKCS12KeyAndCertificates.__repr__N)r,   r-   r.   r/   r0   r
   r   Listr   r1   r6   r   r7   r2   r3   r'   r4   r)   r5   r+   r   r   r   r   r   M   s   "
)datapasswordbackendr   c                 C   s   ddl m} || |S Nr   rH   ),cryptography.hazmat.backends.openssl.backendrH   Z%load_key_and_certificates_from_pkcs12rF   rG   rH   Zosslr   r   r   r      s    	c                 C   s   ddl m} || |S rI   )rK   rH   r   rL   r   r   r   r      s    )namer6   r   casencryption_algorithmr   c                 C   s   |d k	r.t |tjtjtjtjt	j
fs.td|d k	rJt |tjsJtd|d k	rtt|}tdd |D sttdt |tjstd|d kr|d k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   rJ   )r   r	   r;   r   r<   r   r=   r   r>   r   r?   r   r   r   listr@   r   KeySerializationEncryption
ValueErrorrK   rH   Z(serialize_key_and_certificates_to_pkcs12)rM   r6   r   rN   rO   rH   r   r   r   r      sJ    


     )N)N)%r/   Z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   r0   AnyTupler   rE   r   r   Z_PKCS12CATypesIterablerR   r   r   r   r   r   <module>   sl   
	'F 

 

