U
    §òccE  ã                	   @   sJ  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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Úed25519Úed448Úrsa)ÚPRIVATE_KEY_TYPESr   Ú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   úm/var/www/html/project/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   4   s    zPKCS12Certificate.friendly_namec                 C   s   | j S r   ©r   r   r   r   r   Úcertificate8   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__E   s    zPKCS12Certificate.__hash__c                 C   s   d  | j| j¡S )Nz+<PKCS12Certificate({}, friendly_name={!r})>)Úformatr!   r   r   r   r   r   Ú__repr__H   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 )NúLKey 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>e   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   r5   r   r6   r   r   r   r   O   s.    
ûþ
ÿþÿz!PKCS12KeyAndCertificates.__init__r   c                 C   s   | j S r   )r@   r   r   r   r   r5   q   s    zPKCS12KeyAndCertificates.keyc                 C   s   | j S r   r    r   r   r   r   r   u   s    zPKCS12KeyAndCertificates.certc                 C   s   | j S r   )rA   r   r   r   r   r6   y   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$   r5   r   r6   r%   r   r   r   r&   }   s    

ÿ
ýzPKCS12KeyAndCertificates.__eq__c                 C   s   t | j| jt| jƒfƒS r   )r'   r5   r   Útupler6   r   r   r   r   r(   ‡   s    z!PKCS12KeyAndCertificates.__hash__c                 C   s   d}|  | j| j| j¡S )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r)   r5   r   r6   )r   Úfmtr   r   r   r*   Š   s    ÿz!PKCS12KeyAndCertificates.__repr__N)r+   r,   r-   r.   r/   r
   r   ÚListr   r0   r5   r   r6   r1   r2   r&   r3   r(   r4   r*   r   r   r   r   r   N   s   ü"
)Ú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    	c                 C   s   ddl m} | | |¡S rH   )rJ   rG   r   rK   r   r   r   r   Ÿ   s    )Únamer5   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ƒsˆtdƒ‚|d kr¤|d kr¤|s¤tdƒ‚dd	lm} | | ||||¡S )
Nr7   z"cert must be a certificate or Nonec                 s   s   | ]}t |tjtfƒV  qd S r   )r   r   r   r   )r8   Úvalr   r   r   r9   É   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   ÚKeySerializationEncryptionÚ
ValueErrorrJ   rG   Z(serialize_key_and_certificates_to_pkcs12)rL   r5   r   rM   rN   rG   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>   Z_ALLOWED_PKCS12_TYPESr   r   r   r/   ÚAnyÚTupler   rD   r   r   Z_PKCS12_CAS_TYPESÚIterablerQ   r   r   r   r   r   Ú<module>   sj   ú	üÿ	'F ý

þÿü ýü
ÿÿ
ú