o
    eo                     @  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typing.Optional[bytes]c                 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   f/var/www/html/venv/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 typing.Optional[PrivateKeyTypes]r   "typing.Optional[PKCS12Certificate]additional_certstyping.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 )NLKey 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    ptyping.Tuple[typing.Optional[PrivateKeyTypes], typing.Optional[x509.Certificate], typing.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:   &typing.Optional[PKCS12PrivateKeyTypes]r   !typing.Optional[x509.Certificate]cas0typing.Optional[typing.Iterable[_PKCS12CATypes]]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
