o
    cE                     @   s\  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ede je de jde je je e jej e jej f fddZ	ddede je de jdefddZ e jejef Z!de je de je de jej de je j"e!  dej#defddZ$dS )    N)x509)serialization)PBES)dsaeced25519ed448rsa)PRIVATE_KEY_TYPES)r   PKCS12CertificatePKCS12KeyAndCertificatesload_key_and_certificatesload_pkcs12serialize_key_and_certificatesc                   @   s   e Zd Zdejdeje fddZe	deje fddZ
e	dejfdd	Zd
edefddZdefddZdefddZdS )r   certfriendly_namec                 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   Wusr/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   4      zPKCS12Certificate.friendly_namec                 C   r   r   r   r   r   r   r   certificate8   r    zPKCS12Certificate.certificateotherc                 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__c                 C   s   t | j| jfS r   )hashr"   r   r   r   r   r   __hash__E   s   zPKCS12Certificate.__hash__c                 C   s   d | j| jS )Nz+<PKCS12Certificate({}, friendly_name={!r})>)formatr"   r   r   r   r   r   __repr__H   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    
	r   c                   @   s   e Zd Zdeje deje deje fddZe	deje fddZ
e	deje fd	d
Ze	deje fddZdedefddZdefddZdefddZdS )r   keyr   additional_certsc                 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   ).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   r5   r   r6   r   r   r   r   O   s.   


z!PKCS12KeyAndCertificates.__init__r   c                 C   r   r   )r@   r   r   r   r   r5   q   r    zPKCS12KeyAndCertificates.keyc                 C   r   r   r!   r   r   r   r   r   u   r    zPKCS12KeyAndCertificates.certc                 C   r   r   )rA   r   r   r   r   r6   y   r    z)PKCS12KeyAndCertificates.additional_certsr#   c                 C   s2   t |tstS | j|jko| j|jko| j|jkS r   )r   r   r$   r5   r   r6   r%   r   r   r   r&   }   s   


zPKCS12KeyAndCertificates.__eq__c                 C   s   t | j| jt| jfS r   )r'   r5   r   tupler6   r   r   r   r   r(      s   z!PKCS12KeyAndCertificates.__hash__c                 C   s   d}| | j| j| jS )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r)   r5   r   r6   )r   fmtr   r   r   r*      s   z!PKCS12KeyAndCertificates.__repr__N)r+   r,   r-   r.   r/   r
   r   Listr   r0   r5   r   r6   r1   r2   r&   r3   r(   r4   r*   r   r   r   r   r   N   s"    
"
r   datapasswordbackendr   c                 C      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   	r   c                 C   rH   rI   )rK   rG   r   rL   r   r   r   r      s   r   namer5   r   casencryption_algorithmc                 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 )
Nr7   z"cert must be a certificate or Nonec                 s   s     | ]}t |tjtfV  qd S r   )r   r   r   r   )r8   valr   r   r   r9      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   rJ   )r   r	   r:   r   r;   r   r<   r   r=   r   r>   r   r   r   listr?   r   KeySerializationEncryption
ValueErrorrK   rG   Z(serialize_key_and_certificates_to_pkcs12)rM   r5   r   rN   rO   rG   r   r   r   r      s@   



r   r   )%r.   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>   Z_ALLOWED_PKCS12_TYPESr   r   r   r/   AnyTupler   rD   r   r   Z_PKCS12_CAS_TYPESIterablerR   r   r   r   r   r   <module>   sx   		'F





