U
    ¸~Hjð  ã                   @  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 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dgZejejejejejejf Ze	jZG dd„ dƒZe	j Z e	j!Z!ejej"ef Z#ddddœdd„Z$dddddddœdd„Z%dS )é    )ÚannotationsN)ÚIterable)Úx509)Úpkcs12)Úserialization)ÚPBES)ÚdsaÚecÚed448Úed25519Úrsa)ÚPrivateKeyTypesr   ÚPKCS12CertificateÚPKCS12KeyAndCertificatesÚPKCS12PrivateKeyTypesÚload_key_and_certificatesÚload_pkcs12Úserialize_java_truststoreÚserialize_key_and_certificatesc                   @  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])ÚkeyÚcertÚ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 ©N)Ú
isinstancer   )Ú.0Zadd_cert© r   úW/tmp/pip-unpacked-wheel-5jtya3dl/cryptography/hazmat/primitives/serialization/pkcs12.pyÚ	<genexpr>E   s   ÿz4PKCS12KeyAndCertificates.__init__.<locals>.<genexpr>z@all values in additional_certs must be PKCS12Certificate objects)r   r   ÚRSAPrivateKeyr   ÚDSAPrivateKeyr	   ÚEllipticCurvePrivateKeyr   ÚEd25519PrivateKeyr
   ÚEd448PrivateKeyÚ	TypeErrorr   ÚallÚ_keyÚ_certÚ_additional_certs)Úselfr   r   r   r   r   r   Ú__init__/   s.    
ûþ
ÿþÿz!PKCS12KeyAndCertificates.__init__)Úreturnc                 C  s   | j S r   )r&   ©r)   r   r   r   r   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   )r(   r,   r   r   r   r   Y   s    z)PKCS12KeyAndCertificates.additional_certsÚobjectÚbool)Úotherr+   c                 C  s2   t |tƒstS | j|jko0| j|jko0| j|jkS r   )r   r   ÚNotImplementedr   r   r   )r)   r/   r   r   r   Ú__eq__]   s    

ÿ
ýzPKCS12KeyAndCertificates.__eq__Úintc                 C  s   t | j| jt| jƒfƒS r   )Úhashr   r   Útupler   r,   r   r   r   Ú__hash__g   s    z!PKCS12KeyAndCertificates.__hash__Ústrc                 C  s   d}|  | j| j| j¡S )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)Úformatr   r   r   )r)   Úfmtr   r   r   Ú__repr__j   s    ÿz!PKCS12KeyAndCertificates.__repr__N)Ú__name__Ú
__module__Ú__qualname__r*   Úpropertyr   r   r   r1   r5   r9   r   r   r   r   r   .   s   "
zIterable[PKCS12Certificate]z(serialization.KeySerializationEncryptionÚbytes)ÚcertsÚencryption_algorithmr+   c                 C  s,   | st dƒ‚t|tjƒs tdƒ‚t | |¡S )Nz!You must supply at least one certúFKey encryption algorithm must be a KeySerializationEncryption instance)Ú
ValueErrorr   r   ÚKeySerializationEncryptionr$   Úrust_pkcs12r   )r?   r@   r   r   r   r   {   s     ÿÿzbytes | NonezPKCS12PrivateKeyTypes | Nonezx509.Certificate | NonezIterable[_PKCS12CATypes] | None)Únamer   r   Úcasr@   r+   c                 C  sp   |d k	r.t |tjtjtjtjt	j
fƒs.tdƒ‚t |tjƒsBtdƒ‚|d kr^|d kr^|s^tdƒ‚t | ||||¡S )Nr   rA   z1You must supply at least one of key, cert, or cas)r   r   r   r   r    r	   r!   r   r"   r
   r#   r$   r   rC   rB   rD   r   )rE   r   r   rF   r@   r   r   r   r   �   s8    
ûþ
ÿ ÿÿ    ÿ)&Ú
__future__r   ÚtypingÚcollections.abcr   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   rD   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   ZCertificateZ_PKCS12CATypesr   r   r   r   r   r   Ú<module>   sH   øüÿ	Cÿÿ