o
    ÖèFhÇ  ã                   @  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 g d¢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„Z	d$d&dd„Zejejef Zd'd"d#„ZdS )(é    )ÚannotationsN)Úx509)Úserialization)ÚPBES)ÚdsaÚecÚed448Úed25519Úrsa)ÚPrivateKeyTypes)r   ÚPKCS12PrivateKeyTypesÚPKCS12CertificateÚPKCS12KeyAndCertificatesÚload_key_and_certificatesÚload_pkcs12Úserialize_key_and_certificatesc                   @  sP   e Zd Zddd„Zeddd	„ƒZedd
d„ƒZddd„Zddd„Zddd„Z	dS )r   Úcertúx509.CertificateÚfriendly_nameúbytes | Nonec                 C  s>   t |tjƒs
tdƒ‚|d u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   úl/var/www/html/loop/nvenv/lib/python3.10/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.pyÚ__init__)   s   
zPKCS12Certificate.__init__Úreturnc                 C  ó   | j S ©N)r   ©r   r   r   r   r   5   ó   zPKCS12Certificate.friendly_namec                 C  r!   r"   ©r   r#   r   r   r   Úcertificate9   r$   zPKCS12Certificate.certificateÚotherÚobjectÚboolc                 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)r   r   r   r   )r    r   )r    r   ©r'   r(   r    r)   ©r    r-   ©r    r0   )
Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r&   r,   r/   r2   r   r   r   r   r   (   s    


	r   c                   @  s^   e Zd Zddd„Zedd
d„ƒZeddd„ƒZeddd„ƒZd dd„Zd!dd„Z	d"dd„Z
dS )#r   ÚkeyúPrivateKeyTypes | Noner   úPKCS12Certificate | NoneÚadditional_certsúlist[PKCS12Certificate]c                 C  sx   |d urt |tjtjtjtjt	j
fƒstdƒ‚|d ur$t |tƒs$tdƒ‚tdd„ |D ƒƒs1t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   )Ú.0Ú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   r:   r   r=   r   r   r   r   P   s.   
ûþ
ÿþÿ
z!PKCS12KeyAndCertificates.__init__r    c                 C  r!   r"   )rI   r#   r   r   r   r:   r   r$   zPKCS12KeyAndCertificates.keyc                 C  r!   r"   r%   r#   r   r   r   r   v   r$   zPKCS12KeyAndCertificates.certc                 C  r!   r"   )rJ   r#   r   r   r   r=   z   r$   z)PKCS12KeyAndCertificates.additional_certsr'   r(   r)   c                 C  s2   t |tƒstS | j|jko| j|jko| j|jkS r"   )r   r   r*   r:   r   r=   r+   r   r   r   r,   ~   s   

ÿ
ýzPKCS12KeyAndCertificates.__eq__r-   c                 C  s   t | j| jt| jƒfƒS r"   )r.   r:   r   Útupler=   r#   r   r   r   r/   ˆ   s   z!PKCS12KeyAndCertificates.__hash__r0   c                 C  s   d}|  | j| j| j¡S )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r1   r:   r   r=   )r   Úfmtr   r   r   r2   ‹   s   ÿz!PKCS12KeyAndCertificates.__repr__N)r:   r;   r   r<   r=   r>   )r    r;   )r    r<   )r    r>   r3   r4   r5   )r6   r7   r8   r   r9   r:   r   r=   r,   r/   r2   r   r   r   r   r   O   s    
"


r   Údatar   Úpasswordr   Úbackendú
typing.Anyr    úNtuple[PrivateKeyTypes | None, x509.Certificate | None, list[x509.Certificate]]c                 C  ó   ddl m} | | |¡S ©Nr   ©rO   )Ú,cryptography.hazmat.backends.openssl.backendrO   Ú%load_key_and_certificates_from_pkcs12©rM   rN   rO   Úosslr   r   r   r   ’   s   	r   c                 C  rR   rS   )rU   rO   r   rW   r   r   r   r       s   r   Únamer:   úPKCS12PrivateKeyTypes | Noner   úx509.Certificate | NoneÚcasú&typing.Iterable[_PKCS12CATypes] | NoneÚencryption_algorithmú(serialization.KeySerializationEncryptionc                 C  sÂ   |d urt |tjtjtjtjt	j
fƒstdƒ‚|d ur%t |tjƒs%tdƒ‚|d ur:t|ƒ}tdd„ |D ƒƒs:tdƒ‚t |tjƒsDtdƒ‚|d u rR|d u rR|sRtdƒ‚dd	lm} | | ||||¡S )
Nr?   z"cert must be a certificate or Nonec                 s  s    � | ]}t |tjtfƒV  qd S r"   )r   r   r   r   )r@   Úvalr   r   r   rB   Ê   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   rT   )r   r
   rC   r   rD   r   rE   r	   rF   r   rG   r   r   r   ÚlistrH   r   ÚKeySerializationEncryptionÚ
ValueErrorrU   rO   Ú(serialize_key_and_certificates_to_pkcs12)rY   r:   r   r\   r^   rO   r   r   r   r   °   s@   
ûþ
ÿø
ÿÿ
ÿr   r"   )rM   r   rN   r   rO   rP   r    rQ   )rM   r   rN   r   rO   rP   r    r   )rY   r   r:   rZ   r   r[   r\   r]   r^   r_   r    r   ) Ú
__future__r   ÚtypingÚcryptographyr   Úcryptography.hazmat.primitivesr   Ú-cryptography.hazmat.primitives._serializationr   Ú)cryptography.hazmat.primitives.asymmetricr   r   r   r	   r
   Ú/cryptography.hazmat.primitives.asymmetric.typesr   Ú__all__ÚUnionrC   rD   rE   rF   rG   r   r   r   r   r   r   Ú_PKCS12CATypesr   r   r   r   r   Ú<module>   s8   
üÿ	'Fýý
ÿÿ