
    Ih                    &   d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZmZ dd	lmZ d
dlmZ er*ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ dZ% G d d      Z& G d d      Z' G d de'      Z(y)zX.509 certificates.    )annotationsN)TYPE_CHECKINGIterator)default_backend)paddingrsa)load_pem_x509_certificate)bytes_to_strensure_bytes)SecurityError   )reraise_errors)DSAPublicKey)EllipticCurvePublicKey)Ed448PublicKey)Ed25519PublicKey)RSAPublicKey)	Prehashed)HashAlgorithm)Certificate	CertStoreFSCertStorec                  L    e Zd ZdZd
dZddZ	 	 ddZddZddZddZ	ddZ
y	)r   zX.509 certificate.c                   t        dt        f      5  t        t        |      t	                     | _        t        | j
                  j                         t        j                        st        d      	 d d d        y # 1 sw Y   y xY w)NzInvalid certificate: {0!r})errors)backendz'Non-RSA certificates are not supported.)
r   
ValueErrorr	   r   r   _cert
isinstance
public_keyr   r   )selfcerts     T/var/www/html/planif/env/lib/python3.12/site-packages/celery/security/certificate.py__init__zCertificate.__init__"   sv    (*
 	L 3T"O,=?DJ djj335s7G7GH !JKK I	L 	L 	Ls   A!A>>Bc                    t         j                   j                  t         j                  j                        | j                  j
                  k\  S )z%Check if the certificate has expired.)datetimenowtimezoneutcr   not_valid_after_utcr!   s    r#   has_expiredzCertificate.has_expired,   s4      $$X%6%6%:%:;tzz?]?]]]    c                6    | j                   j                         S N)r   r    r+   s    r#   
get_pubkeyzCertificate.get_pubkey0   s     zz$$&&r-   c                .    | j                   j                  S )z,Return the serial number in the certificate.)r   serial_numberr+   s    r#   get_serial_numberzCertificate.get_serial_number5   s    zz'''r-   c                Z    dj                  d | j                  j                  D              S )zReturn issuer (CA) as a string. c              3  4   K   | ]  }|j                     y wr/   )value).0xs     r#   	<genexpr>z)Certificate.get_issuer.<locals>.<genexpr>;   s     ;A;s   )joinr   issuerr+   s    r#   
get_issuerzCertificate.get_issuer9   s!    xx;):):;;;r-   c                H    | j                          d| j                          S )z<Serial number/issuer pair uniquely identifies a certificate.r5   )r=   r3   r+   s    r#   get_idzCertificate.get_id=   s%    //#$Ad&<&<&>%?@@r-   c                   t        d      5  t        j                  t        j                  |      t        j                  j                        }| j                         j                  |t        |      ||       ddd       y# 1 sw Y   yxY w)z,Verify signature for string containing data.zBad signature: {0!r})mgfsalt_lengthN)r   r   PSSMGF1
MAX_LENGTHr0   verifyr   )r!   data	signaturedigestpads        r#   rF   zCertificate.verifyA   sm    23 	Q++LL(#KK224C OO$$YT0BCP	Q 	Q 	Qs   A.BBN)r"   strreturnNone)rL   bool)rL   zXDSAPublicKey | EllipticCurvePublicKey | Ed448PublicKey | Ed25519PublicKey | RSAPublicKey)rL   int)rL   rK   )rG   bytesrH   rP   rI   zHashAlgorithm | PrehashedrL   rM   )__name__
__module____qualname____doc__r$   r,   r0   r3   r=   r?   rF    r-   r#   r   r      s4    L^'`'
(<AQr-   r   c                  0    e Zd ZdZddZddZd	dZd
dZy)r   z"Base class for certificate stores.c                    i | _         y r/   )_certsr+   s    r#   r$   zCertStore.__init__O   s	    .0r-   c              #  T   K   | j                   j                         E d{    y7 w)zReturn certificate iterator.N)rX   valuesr+   s    r#   	itercertszCertStore.itercertsR   s     ;;%%'''s   (&(c                j    	 | j                   t        |         S # t        $ r t        d|      w xY w)zGet certificate by id.zUnknown certificate: )rX   r
   KeyErrorr   )r!   ids     r#   __getitem__zCertStore.__getitem__V   s@    	@;;|B/00 	@"7v >??	@s    2c                    t        |j                               }|| j                  v rt        dt              || j                  |<   y )NzDuplicate certificate: )r
   r?   rX   r   r^   )r!   r"   cert_ids      r#   add_certzCertStore.add_cert]   s?    t{{}-dkk!"9" @AA#Gr-   N)rL   rM   )rL   zIterator[Certificate])r^   rK   rL   r   )r"   r   rL   rM   )rQ   rR   rS   rT   r$   r[   r_   rb   rU   r-   r#   r   r   L   s    ,1(@$r-   r   c                  $     e Zd ZdZd fdZ xZS )r   zFile system certificate store.c                   t         |           t        j                  j	                  |      r t        j                  j                  |d      }t        j                  |      D ]l  }t        |      5 }t        |j                               }|j                         rt        d|j                               | j                  |       d d d        n y # 1 sw Y   yxY w)N*zExpired certificate: )superr$   ospathisdirr;   globopenr   readr,   r   r?   rb   )r!   rh   pfr"   	__class__s        r#   r$   zFSCertStore.__init__g   s    77==77<<c*D4 	$Aa $A"1668,##%'//@AC Cd#$ $	$$ $s   2ACC	)rh   rK   rL   rM   )rQ   rR   rS   rT   r$   __classcell__)ro   s   @r#   r   r   d   s    (
$ 
$r-   r   ))rT   
__future__r   r&   rj   rg   typingr   r   cryptography.hazmat.backendsr   )cryptography.hazmat.primitives.asymmetricr   r   cryptography.x509r	   kombu.utils.encodingr
   r   celery.exceptionsr   utilsr   -cryptography.hazmat.primitives.asymmetric.dsar   ,cryptography.hazmat.primitives.asymmetric.ecr   /cryptography.hazmat.primitives.asymmetric.ed448r   1cryptography.hazmat.primitives.asymmetric.ed25519r   -cryptography.hazmat.primitives.asymmetric.rsar   /cryptography.hazmat.primitives.asymmetric.utilsr   %cryptography.hazmat.primitives.hashesr   __all__r   r   r   rU   r-   r#   <module>r      sk     "   	 * 8 B 7 ; + !JSNRJIC 6*Q *QZ$ $0$) $r-   