3
ãdeK  ã            	   @   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	r0t |tƒ r0t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   új/var/www/agendate/envp3/lib/python3.6/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 )N)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 )N)r   r   ÚNotImplementedr   r   )r   r   r   r   r   Ú__eq__;   s    
zPKCS12Certificate.__eq__c             C   s   t | j| jfƒS )N)Úhashr   r   )r   r   r   r   Ú__hash__D   s    zPKCS12Certificate.__hash__c             C   s   dj | 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   s|   |d k	r0t |tjtjtjtjt	j
fƒ r0tdƒ‚|d k	rLt |tƒ rLtdƒ‚tdd„ |D ƒƒsftdƒ‚|| _|| _|| _d S )NzLKey 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 )N)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   r0   r   r1   r   r   r   r   N   s&    

z!PKCS12KeyAndCertificates.__init__)r   c             C   s   | j S )N)r:   )r   r   r   r   r0   p   s    zPKCS12KeyAndCertificates.keyc             C   s   | j S )N)r   )r   r   r   r   r   t   s    zPKCS12KeyAndCertificates.certc             C   s   | j S )N)r;   )r   r   r   r   r1   x   s    z)PKCS12KeyAndCertificates.additional_certs)r   r   c             C   s2   t |tƒstS | j|jko0| j|jko0| j|jkS )N)r   r   r    r0   r   r1   )r   r   r   r   r   r!   |   s
    
zPKCS12KeyAndCertificates.__eq__c             C   s   t | j| jt| jƒfƒS )N)r"   r0   r   Útupler1   )r   r   r   r   r#   †   s    z!PKCS12KeyAndCertificates.__hash__c             C   s   d}|j | j| j| jƒS )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r$   r0   r   r1   )r   Úfmtr   r   r   r%   ‰   s    z!PKCS12KeyAndCertificates.__repr__N)r&   r'   r(   r)   r*   r
   r   ÚListr   r+   r0   r   r1   r,   r-   r!   r.   r#   r/   r%   r   r   r   r   r   M   s   
)ÚdataÚpasswordÚbackendr   c             C   s   ddl m} |j| |ƒS )Nr   )rA   )Ú,cryptography.hazmat.backends.openssl.backendrA   Z%load_key_and_certificates_from_pkcs12)r?   r@   rA   Úosslr   r   r   r   �   s    	c             C   s   ddl m} |j| |ƒS )Nr   )rA   )rB   rA   r   )r?   r@   rA   rC   r   r   r   r   ž   s    )Únamer0   r   ÚcasÚencryption_algorithmr   c             C   sÈ   |d k	r0t |tjtjtjtjt	j
fƒ r0tdƒ‚|d k	rNt |tjƒ rNtdƒ‚|d k	rxt|ƒ}tdd„ |D ƒƒsxtdƒ‚t |tjƒsŒtdƒ‚|d krª|d krª| rªtdƒ‚dd	lm} |j| ||||ƒS )
NzLKey must be RSA, DSA, EllipticCurve, ED25519, or ED448 private key, or None.z"cert must be a certificate or Nonec             s   s   | ]}t |tjtfƒV  qd S )N)r   r   r   r   )r2   Úvalr   r   r   r3   É   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   )rA   )r   r	   r4   r   r5   r   r6   r   r7   r   r8   r   r   r   Úlistr9   r   ÚKeySerializationEncryptionÚ
ValueErrorrB   rA   Z(serialize_key_and_certificates_to_pkcs12)rD   r0   r   rE   rF   rA   r   r   r   r   ®   s4    


)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__ÚUnionr4   r5   r6   r7   r8   r   r   r   r   r*   ÚAnyÚTupler   r>   r   r   Z_PKCS12CATypesÚIterablerI   r   r   r   r   r   Ú<module>   sH   
'F


