U
    ñN…fÇ  ã                   @  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 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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)ÚPrivateKeyTypesr   Ú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 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   úW/tmp/pip-unpacked-wheel-bjwtc2fy/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   	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 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>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   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    	c                 C  s   ddl m} | | |¡S rH   )rJ   rG   r   rK   r   r   r   r       s    zPKCS12PrivateKeyTypes | Nonezx509.Certificate | Nonez&typing.Iterable[_PKCS12CATypes] | Nonez(serialization.KeySerializationEncryption)Ú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ƒsˆtdƒ‚|d kr¤|d kr¤|s¤t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   °   sJ    
ûþ
ÿø
 ÿÿ    ÿ)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>   sD   ù
üÿ	'F ý ý
ÿÿ