
    Ng~,                       d dl m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
 d dlmZ d dlmZmZmZ  G d d	ej                  Z G d
 dej                  Ze
j        e
j        e
j        e
j        e
j        fZddZ G d dej                  Z G d d          Zej        Zej        Zej        Z G d d          Z  G d d          Z!ej"        Z"ej#        Z#dS )    )annotationsN)utilsx509)ocsp)hashes) CertificateIssuerPrivateKeyTypes)_EARLIEST_UTC_TIME_convert_to_naive_utc_time_reject_duplicate_extensionc                      e Zd ZdZdZdS )OCSPResponderEncodingzBy HashzBy NameN)__name__
__module____qualname__HASHNAME     R/var/www/html/ai-engine/env/lib/python3.11/site-packages/cryptography/x509/ocsp.pyr   r      s        DDDDr   r   c                  &    e Zd ZdZdZdZdZdZdZdS )OCSPResponseStatusr                  N)	r   r   r   
SUCCESSFULMALFORMED_REQUESTINTERNAL_ERROR	TRY_LATERSIG_REQUIREDUNAUTHORIZEDr   r   r   r   r      s-        JNILLLLr   r   	algorithmhashes.HashAlgorithmreturnNonec                N    t          | t                    st          d          d S )Nz9Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512)
isinstance_ALLOWED_HASHES
ValueError)r#   s    r   _verify_algorithmr+   .   s3    i11 
G
 
 	

 
r   c                      e Zd ZdZdZdZdS )OCSPCertStatusr   r   r   N)r   r   r   GOODREVOKEDUNKNOWNr   r   r   r-   r-   5   s        DGGGGr   r-   c                      e Zd ZddZdS )_SingleResponsecertx509.Certificateissuerr#   r$   cert_statusr-   this_updatedatetime.datetimenext_updatedatetime.datetime | Nonerevocation_timerevocation_reasonx509.ReasonFlags | Nonec	                f   t          |t          j                  rt          |t          j                  st          d          t	          |           t          |t
          j                  st          d          |)t          |t
          j                  st          d          || _        || _        || _        || _	        || _
        t          |t                    st          d          |t          j        ur#|t          d          |t          d          n}t          |t
          j                  st          d          t          |          }|t          k     rt          d          |)t          |t          j                  st          d	          || _        || _        || _        d S )
N%cert and issuer must be a Certificatez%this_update must be a datetime objectz-next_update must be a datetime object or Nonez8cert_status must be an item from the OCSPCertStatus enumzBrevocation_time can only be provided if the certificate is revokedzDrevocation_reason can only be provided if the certificate is revokedz)revocation_time must be a datetime objectz7The revocation_time must be on or after 1950 January 1.zCrevocation_reason must be an item from the ReasonFlags enum or None)r(   r   Certificate	TypeErrorr+   datetime_cert_issuer
_algorithm_this_update_next_updater-   r/   r*   r
   r	   ReasonFlags_cert_status_revocation_time_revocation_reason)	selfr3   r5   r#   r6   r7   r9   r;   r<   s	            r   __init__z_SingleResponse.__init__<   s    $ 011 	ED$:
 :
 	E CDDD)$$$+x'899 	ECDDD":*,
 ,
" KLLL
#''+~66 	J   n444* !   !, "   - ox/@AA M KLLL8IIO!333 '  
 !,Z!4#36 6,  #  
 ( /"3r   N)r3   r4   r5   r4   r#   r$   r6   r-   r7   r8   r9   r:   r;   r:   r<   r=   )r   r   r   rM   r   r   r   r2   r2   ;   s.        B4 B4 B4 B4 B4 B4r   r2   c                  >    e Zd Zddg fdd
ZddZd dZd!dZd"dZdS )#OCSPRequestBuilderNrequestFtuple[x509.Certificate, x509.Certificate, hashes.HashAlgorithm] | Nonerequest_hash5tuple[bytes, bytes, int, hashes.HashAlgorithm] | None
extensions(list[x509.Extension[x509.ExtensionType]]r%   r&   c                0    || _         || _        || _        d S N)_request_request_hash_extensions)rL   rP   rR   rT   s       r   rM   zOCSPRequestBuilder.__init__   s!      )%r   r3   r4   r5   r#   r$   c                   | j         | j        t          d          t          |           t	          |t
          j                  rt	          |t
          j                  st          d          t          |||f| j        | j	                  S )N.Only one certificate can be added to a requestr?   )
rX   rY   r*   r+   r(   r   r@   rA   rO   rZ   )rL   r3   r5   r#   s       r   add_certificatez"OCSPRequestBuilder.add_certificate   s     =$(:(FMNNN)$$$$ 011 	ED$:
 :
 	E CDDD!69%t'94;K
 
 	
r   issuer_name_hashbytesissuer_key_hashserial_numberintc                   | j         | j        t          d          t          |t                    st          d          t          |           t          j        d|           t          j        d|           |j	        t          |          k    s|j	        t          |          k    rt          d          t          | j         ||||f| j                  S )Nr\   z serial_number must be an integerr^   r`   z`issuer_name_hash and issuer_key_hash must be the same length as the digest size of the algorithm)rX   rY   r*   r(   rb   rA   r+   r   _check_bytesdigest_sizelenrO   rZ   )rL   r^   r`   ra   r#   s        r   add_certificate_by_hashz*OCSPRequestBuilder.add_certificate_by_hash   s     =$(:(FMNNN--- 	@>???)$$$-/?@@@,o>>> C%
 %
 
 
"c/&:&:::6  
 "MyI
 
 	
r   extvalx509.ExtensionTypecriticalboolc                    t          |t          j                  st          d          t          j        |j        ||          }t          || j                   t          | j	        | j
        g | j        |          S Nz"extension must be an ExtensionType)r(   r   ExtensionTyperA   	Extensionoidr   rZ   rO   rX   rY   rL   rh   rj   	extensions       r   add_extensionz OCSPRequestBuilder.add_extension   s}     &$"455 	B@AAAN6:x@@	#It/?@@@!M4-/M1A/M9/M
 
 	
r   OCSPRequestc                d    | j         | j        t          d          t          j        |           S )Nz*You must add a certificate before building)rX   rY   r*   r   create_ocsp_request)rL   s    r   buildzOCSPRequestBuilder.build   s2    = T%7%?IJJJ'---r   )rP   rQ   rR   rS   rT   rU   r%   r&   )r3   r4   r5   r4   r#   r$   r%   rO   )
r^   r_   r`   r_   ra   rb   r#   r$   r%   rO   )rh   ri   rj   rk   r%   rO   )r%   rt   )r   r   r   rM   r]   rg   rs   rw   r   r   r   rO   rO      s         ?A& & & & &
 
 
 
&
 
 
 
<
 
 
 
. . . . . .r   rO   c                  `    e Zd Zdddg fd.d
Zd/dZd0dZd1d Zd2d%Zd3d*Ze	d4d-            Z
dS )5OCSPResponseBuilderNresponse_SingleResponse | Noneresponder_id5tuple[x509.Certificate, OCSPResponderEncoding] | Nonecertslist[x509.Certificate] | NonerT   rU   c                >    || _         || _        || _        || _        d S rW   )	_response_responder_id_certsrZ   )rL   rz   r|   r~   rT   s        r   rM   zOCSPResponseBuilder.__init__   s(     ")%r   r3   r4   r5   r#   r$   r6   r-   r7   r8   r9   r:   r;   r<   r=   r%   c	           
         | j         t          d          t          ||||||||          }	t          |	| j        | j        | j                  S )Nz#Only one response per OCSPResponse.)r   r*   r2   ry   r   r   rZ   )
rL   r3   r5   r#   r6   r7   r9   r;   r<   
singleresps
             r   add_responsez OCSPResponseBuilder.add_response   sj     >%BCCC$	
 	

 #K	
 
 	
r   encodingr   responder_certc                   | j         t          d          t          |t          j                  st          d          t          |t                    st          d          t          | j        ||f| j	        | j
                  S )Nz!responder_id can only be set oncez$responder_cert must be a Certificatez6encoding must be an element from OCSPResponderEncoding)r   r*   r(   r   r@   rA   r   ry   r   r   rZ   )rL   r   r   s      r   r|   z OCSPResponseBuilder.responder_id  s     )@AAA.$*:;; 	DBCCC($9:: 	H   #NX&K	
 
 	
r   !typing.Iterable[x509.Certificate]c                "   | j         t          d          t          |          }t          |          dk    rt          d          t	          d |D                       st          d          t          | j        | j        || j	                  S )Nz!certificates may only be set oncer   zcerts must not be an empty listc              3  J   K   | ]}t          |t          j                  V  d S rW   )r(   r   r@   ).0xs     r   	<genexpr>z3OCSPResponseBuilder.certificates.<locals>.<genexpr>"  s/      BBq:a!122BBBBBBr   z$certs must be a list of Certificates)
r   r*   listrf   allrA   ry   r   r   rZ   )rL   r~   s     r   certificatesz OCSPResponseBuilder.certificates  s     ;"@AAAUu::??>???BBEBBBBB 	DBCCC"N	
 
 	
r   rh   ri   rj   rk   c                   t          |t          j                  st          d          t          j        |j        ||          }t          || j                   t          | j	        | j
        | j        g | j        |          S rm   )r(   r   rn   rA   ro   rp   r   rZ   ry   r   r   r   rq   s       r   rs   z!OCSPResponseBuilder.add_extension+  s     &$"455 	B@AAAN6:x@@	#It/?@@@"NK*d*	*	
 
 	
r   private_keyr   hashes.HashAlgorithm | NoneOCSPResponsec                    | j         t          d          | j        t          d          t          j        t
          j        | ||          S )Nz&You must add a response before signingz*You must add a responder_id before signing)r   r*   r   r   create_ocsp_responser   r   )rL   r   r#   s      r   signzOCSPResponseBuilder.sign;  sT    
 >!EFFF%IJJJ()4i
 
 	
r   response_statusr   c                    t          |t                    st          d          |t          j        u rt	          d          t          j        |d d d           S )Nz7response_status must be an item from OCSPResponseStatusz$response_status cannot be SUCCESSFUL)r(   r   rA   r   r*   r   r   )clsr   s     r   build_unsuccessfulz&OCSPResponseBuilder.build_unsuccessfulI  sc     /+=>> 	I   0;;;CDDD($dKKKr   )rz   r{   r|   r}   r~   r   rT   rU   )r3   r4   r5   r4   r#   r$   r6   r-   r7   r8   r9   r:   r;   r:   r<   r=   r%   ry   )r   r   r   r4   r%   ry   )r~   r   r%   ry   )rh   ri   rj   rk   r%   ry   )r   r   r#   r   r%   r   )r   r   r%   r   )r   r   r   rM   r   r|   r   rs   r   classmethodr   r   r   r   ry   ry      s         ,0/3?A& & & & &
 
 
 
>
 
 
 
&
 
 
 
"
 
 
 
 
 
 
 
 
L 
L 
L [
L 
L 
Lr   ry   )r#   r$   r%   r&   )$
__future__r   rB   typingcryptographyr   r   "cryptography.hazmat.bindings._rustr   cryptography.hazmat.primitivesr   /cryptography.hazmat.primitives.asymmetric.typesr   cryptography.x509.baser	   r
   r   Enumr   r   SHA1SHA224SHA256SHA384SHA512r)   r+   r-   r2   rt   r   OCSPSingleResponserO   ry   load_der_ocsp_requestload_der_ocsp_responser   r   r   <module>r      sA  
 # " " " " "   $ $ $ $ $ $ $ $ 3 3 3 3 3 3 1 1 1 1 1 1                  EJ   
        K
M
M
M
M
 
 
 
    UZ   C4 C4 C4 C4 C4 C4 C4 C4L  , Q. Q. Q. Q. Q. Q. Q. Q.hzL zL zL zL zL zL zL zLz 2 4   r   