o
    
c<                     @   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ed448ed25519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   `/opt/certbot/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   2      zPKCS12Certificate.friendly_namec                 C   r   r   r   r   r   r   r   certificate6   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__C   s   zPKCS12Certificate.__hash__c                 C   s   d | j| jS )Nz+<PKCS12Certificate({}, friendly_name={!r})>)formatr"   r   r   r   r   r   __repr__F   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   ).0add_certr   r   r   	<genexpr>c   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   M   s.   


z!PKCS12KeyAndCertificates.__init__r   c                 C   r   r   )rA   r   r   r   r   r5   o   r    zPKCS12KeyAndCertificates.keyc                 C   r   r   r!   r   r   r   r   r   s   r    zPKCS12KeyAndCertificates.certc                 C   r   r   )rB   r   r   r   r   r6   w   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   L   s"    
"
r   datapasswordbackendr   c                 C      ddl m} || |S Nr   rH   ),cryptography.hazmat.backends.openssl.backendrH   %load_key_and_certificates_from_pkcs12rF   rG   rH   osslr   r   r   r      s   	r   c                 C   rI   rJ   )rL   rH   r   rN   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   r:      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   rK   )r   r	   r;   r   r<   r   r=   r   r>   r   r?   r   r   r   listr@   r   KeySerializationEncryption
ValueErrorrL   rH   (serialize_key_and_certificates_to_pkcs12)rP   r5   r   rQ   rR   rH   r   r   r   r      s@   



r   r   )%r.   cryptographyr   cryptography.hazmat.primitivesr   -cryptography.hazmat.primitives._serializationr   )cryptography.hazmat.primitives.asymmetricr   r   r   r   r	   /cryptography.hazmat.primitives.asymmetric.typesr
   __all__Unionr;   r<   r=   r>   r?   _ALLOWED_PKCS12_TYPESr   r   r   r/   AnyTupler   rE   r   r   _PKCS12_CAS_TYPESIterablerU   r   r   r   r   r   <module>   sx   		'F





