o
    ˷eQ                     @   sH  d dl 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 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)dsaeced25519ed448rsa)PRIVATE_KEY_TYPESc                   @   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 )PKCS12Certificate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   j/var/www/ideatree/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   +      zPKCS12Certificate.friendly_namec                 C   r   r   r   r   r   r   r   certificate/   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__3   s
   

zPKCS12Certificate.__eq__c                 C   s   t | j| jfS r   )hashr   r   r   r   r   r   __hash__<   s   zPKCS12Certificate.__hash__c                 C   s   d | j| jS )Nz+<PKCS12Certificate({}, friendly_name={!r})>)formatr   r   r   r   r   r   __repr__?   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 )PKCS12KeyAndCertificates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
   ).0add_certr   r   r   	<genexpr>\   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   r1   r   r2   r   r   r   r   F   s.   


z!PKCS12KeyAndCertificates.__init__r   c                 C   r   r   )r=   r   r   r   r   r1   h   r   zPKCS12KeyAndCertificates.keyc                 C   r   r   r   r   r   r   r   r   l   r   zPKCS12KeyAndCertificates.certc                 C   r   r   )r>   r   r   r   r   r2   p   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   r0   r   r1   r   r2   r    r   r   r   r!   t   s   


zPKCS12KeyAndCertificates.__eq__c                 C   s   t | j| jt| jfS r   )r"   r1   r   tupler2   r   r   r   r   r#   ~   s   z!PKCS12KeyAndCertificates.__hash__c                 C   s   d}| | j| j| jS )Nz@<PKCS12KeyAndCertificates(key={}, cert={}, additional_certs={})>)r$   r1   r   r2   )r   fmtr   r   r   r%      s   z!PKCS12KeyAndCertificates.__repr__N)r&   r'   r(   r)   r*   r	   r
   Listr   r+   r1   r   r2   r,   r-   r!   r.   r#   r/   r%   r   r   r   r   r0   E   s"    
"
r0   datapasswordbackendr   c                 C      ddl m} || |S Nr   rD   ),cryptography.hazmat.backends.openssl.backendrD   %load_key_and_certificates_from_pkcs12rB   rC   rD   osslr   r   r   load_key_and_certificates   s   	rL   c                 C   rE   rF   )rH   rD   load_pkcs12rJ   r   r   r   rM      s   rM   namer1   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 )
Nr3   z"cert must be a certificate or Nonec                 s   s     | ]}t |tjtfV  qd S r   )r   r   r   r
   )r4   valr   r   r   r6      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   rG   )r   r   r7   r   r8   r   r9   r   r:   r   r;   r   r   r   listr<   r   KeySerializationEncryption
ValueErrorrH   rD   (serialize_key_and_certificates_to_pkcs12)rN   r1   r   rO   rP   rD   r   r   r   serialize_key_and_certificates   s@   



rV   r   )"r)   cryptographyr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   r   r   r   /cryptography.hazmat.primitives.asymmetric.typesr	   Unionr7   r8   r9   r:   r;   _ALLOWED_PKCS12_TYPESr
   r0   r   r*   AnyTupler   rA   rL   rM   _PKCS12_CAS_TYPESIterablerS   rV   r   r   r   r   <module>   st   	'F





