
    #	h~,                       S SK Jr  S SKrS SKrS SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJr   " S S	\R"                  5      r " S
 S\R"                  5      r\
R(                  \
R*                  \
R,                  \
R.                  \
R0                  4rSS jr " S S\R"                  5      r " S S5      r\R:                  r\R<                  r\R>                  r " S S5      r  " S S5      r!\RD                  r"\RF                  r#g)    )annotationsN)utilsx509)ocsp)hashes) CertificateIssuerPrivateKeyTypes)_EARLIEST_UTC_TIME_convert_to_naive_utc_time_reject_duplicate_extensionc                      \ rS rSrSrSrSrg)OCSPResponderEncoding   zBy HashzBy Name N)__name__
__module____qualname____firstlineno__HASHNAME__static_attributes__r       H/var/www/html/env/lib/python3.13/site-packages/cryptography/x509/ocsp.pyr   r      s    DDr   r   c                  ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
OCSPResponseStatus   r                  r   N)r   r   r   r   
SUCCESSFULMALFORMED_REQUESTINTERNAL_ERROR	TRY_LATERSIG_REQUIREDUNAUTHORIZEDr   r   r   r   r   r      s!    JNILLr   r   c                D    [        U [        5      (       d  [        S5      eg )Nz9Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512)
isinstance_ALLOWED_HASHES
ValueError)	algorithms    r   _verify_algorithmr,   .   s$    i11G
 	
 2r   c                       \ rS rSrSrSrSrSrg)OCSPCertStatus5   r   r   r   r   N)r   r   r   r   GOODREVOKEDUNKNOWNr   r   r   r   r.   r.   5   s    DGGr   r.   c                  >    \ rS rSr                SS jrSrg)_SingleResponse;   c	                H   [        U[        R                  5      (       a  [        U[        R                  5      (       d  [        S5      e[	        U5        [        U[
        R
                  5      (       d  [        S5      eUb*  [        U[
        R
                  5      (       d  [        S5      eXl        X l        X0l        XPl	        X`l
        [        U[        5      (       d  [        S5      eU[        R                  La  Ub  [        S5      eUb  [        S5      eOw[        U[
        R
                  5      (       d  [        S5      e[        U5      nU[        :  a  [        S5      eUb*  [        U[        R                   5      (       d  [        S	5      eX@l        Xpl        Xl        g )
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.   r1   r*   r
   r	   ReasonFlags_cert_status_revocation_time_revocation_reason)	selfcertissuerr+   cert_statusthis_updatenext_updaterevocation_timerevocation_reasons	            r   __init___SingleResponse.__init__<   s    $ 0 011D$$:
 :
 CDD)$+x'8'899CDD":**,
 ,
 KLL
#''+~66J  n444* !  !, "  - ox/@/@AA KLL8IO!33 ' 
 !,Z!4#3#36 6  # 
 ( /"3r   )r=   r;   rA   r<   r?   rC   rB   r>   N)rE   x509.CertificaterF   rN   r+   hashes.HashAlgorithmrG   r.   rH   datetime.datetimerI   datetime.datetime | NonerJ   rQ   rK   x509.ReasonFlags | None)r   r   r   r   rL   r   r   r   r   r4   r4   ;   s^    B4B4 !B4 (	B4
 $B4 'B4 .B4 2B4 3B4r   r4   c                      \ rS rSrSS/ 4       S	S jjr        S
S jr          SS jr      SS jrSS jrSr	g)OCSPRequestBuilder   Nc                (    Xl         X l        X0l        g N)_request_request_hash_extensions)rD   requestrequest_hash
extensionss       r   rL   OCSPRequestBuilder.__init__   s      )%r   c                :   U R                   c  U R                  b  [        S5      e[        U5        [	        U[
        R                  5      (       a  [	        U[
        R                  5      (       d  [        S5      e[        XU4U R                  U R                  5      $ )N.Only one certificate can be added to a requestr7   )
rX   rY   r*   r,   r(   r   r8   r9   rT   rZ   )rD   rE   rF   r+   s       r   add_certificate"OCSPRequestBuilder.add_certificate   s     ==$(:(:(FMNN)$$ 0 011D$$:
 :
 CDD!9%t'9'94;K;K
 	
r   c                   U R                   c  U R                  b  [        S5      e[        U[        5      (       d  [        S5      e[        U5        [        R                  " SU5        [        R                  " SU5        UR                  [        U5      :w  d  UR                  [        U5      :w  a  [        S5      e[        U R                   XX44U R                  5      $ )Nr`   z serial_number must be an integerissuer_name_hashissuer_key_hashz`issuer_name_hash and issuer_key_hash must be the same length as the digest size of the algorithm)rX   rY   r*   r(   intr9   r,   r   _check_bytesdigest_sizelenrT   rZ   )rD   rd   re   serial_numberr+   s        r   add_certificate_by_hash*OCSPRequestBuilder.add_certificate_by_hash   s     ==$(:(:(FMNN--->??)$-/?@,o>  C%
 
""c/&::6 
 "MMI
 	
r   c                    [        U[        R                  5      (       d  [        S5      e[        R                  " UR
                  X!5      n[        X0R                  5        [        U R                  U R                  / U R                  QUP5      $ Nz"extension must be an ExtensionType)r(   r   ExtensionTyper9   	Extensionoidr   rZ   rT   rX   rY   rD   extvalcritical	extensions       r   add_extension OCSPRequestBuilder.add_extension   st     &$"4"455@AANN6::x@	#I/?/?@!MM4--/M1A1A/M9/M
 	
r   c                x    U R                   c  U R                  c  [        S5      e[        R                  " U 5      $ )Nz*You must add a certificate before building)rX   rY   r*   r   create_ocsp_request)rD   s    r   buildOCSPRequestBuilder.build   s4    == T%7%7%?IJJ''--r   )rZ   rX   rY   )r[   zFtuple[x509.Certificate, x509.Certificate, hashes.HashAlgorithm] | Noner\   z5tuple[bytes, bytes, int, hashes.HashAlgorithm] | Noner]   (list[x509.Extension[x509.ExtensionType]]returnNone)rE   rN   rF   rN   r+   rO   r}   rT   )
rd   bytesre   r   rj   rf   r+   rO   r}   rT   )rs   x509.ExtensionTypert   boolr}   rT   )r}   OCSPRequest)
r   r   r   r   rL   ra   rk   rv   rz   r   r   r   r   rT   rT      s     ?A&&& =& 
&

 !
 (	

 

&

 
 	

 (
 

<
(
48
	
.r   rT   c                      \ rS rSrSSS/ 4       SS jjr                  SS jr      SS jr    SS jr      SS jr      SS jr	\
    SS	 j5       rS
rg)OCSPResponseBuilder   Nc                4    Xl         X l        X0l        X@l        g rW   )	_response_responder_id_certsrZ   )rD   responseresponder_idcertsr]   s        r   rL   OCSPResponseBuilder.__init__   s     ")%r   c	           
         U R                   b  [        S5      e[        UUUUUUUU5      n	[        U	U R                  U R
                  U R                  5      $ )Nz#Only one response per OCSPResponse.)r   r*   r4   r   r   r   rZ   )
rD   rE   rF   r+   rG   rH   rI   rJ   rK   
singleresps
             r   add_response OCSPResponseBuilder.add_response   sg     >>%BCC$	

 #KK	
 	
r   c                    U R                   b  [        S5      e[        U[        R                  5      (       d  [        S5      e[        U[        5      (       d  [        S5      e[        U R                  X!4U R                  U R                  5      $ )Nz!responder_id can only be set oncez$responder_cert must be a Certificatez6encoding must be an element from OCSPResponderEncoding)r   r*   r(   r   r8   r9   r   r   r   r   rZ   )rD   encodingresponder_certs      r   r    OCSPResponseBuilder.responder_id  s     )@AA.$*:*:;;BCC($9::H  #NN&KK	
 	
r   c                   U R                   b  [        S5      e[        U5      n[        U5      S:X  a  [        S5      e[	        S U 5       5      (       d  [        S5      e[        U R                  U R                  UU R                  5      $ )Nz!certificates may only be set oncer   zcerts must not be an empty listc              3  V   #    U  H  n[        U[        R                  5      v   M!     g 7frW   )r(   r   r8   ).0xs     r   	<genexpr>3OCSPResponseBuilder.certificates.<locals>.<genexpr>"  s      BEq:a!1!122Es   ')z$certs must be a list of Certificates)
r   r*   listri   allr9   r   r   r   rZ   )rD   r   s     r   certificates OCSPResponseBuilder.certificates  s     ;;"@AAUu:?>??BEBBBBCC"NN	
 	
r   c                6   [        U[        R                  5      (       d  [        S5      e[        R                  " UR
                  X!5      n[        X0R                  5        [        U R                  U R                  U R                  / U R                  QUP5      $ rn   )r(   r   ro   r9   rp   rq   r   rZ   r   r   r   r   rr   s       r   rv   !OCSPResponseBuilder.add_extension+  s|     &$"4"455@AANN6::x@	#I/?/?@"NNKK*d*	*	
 	
r   c                    U R                   c  [        S5      eU R                  c  [        S5      e[        R                  " [
        R                  XU5      $ )Nz&You must add a response before signingz*You must add a responder_id before signing)r   r*   r   r   create_ocsp_responser   r!   )rD   private_keyr+   s      r   signOCSPResponseBuilder.sign;  sR    
 >>!EFF%IJJ(())4i
 	
r   c                    [        U[        5      (       d  [        S5      eU[        R                  L a  [	        S5      e[
        R                  " US S S 5      $ )Nz7response_status must be an item from OCSPResponseStatusz$response_status cannot be SUCCESSFUL)r(   r   r9   r!   r*   r   r   )clsresponse_statuss     r   build_unsuccessful&OCSPResponseBuilder.build_unsuccessfulI  sV     /+=>>I  0;;;CDD(($dKKr   )r   rZ   r   r   )r   z_SingleResponse | Noner   z5tuple[x509.Certificate, OCSPResponderEncoding] | Noner   zlist[x509.Certificate] | Noner]   r|   )rE   rN   rF   rN   r+   rO   rG   r.   rH   rP   rI   rQ   rJ   rQ   rK   rR   r}   r   )r   r   r   rN   r}   r   )r   z!typing.Iterable[x509.Certificate]r}   r   )rs   r   rt   r   r}   r   )r   r   r+   zhashes.HashAlgorithm | Noner}   OCSPResponse)r   r   r}   r   )r   r   r   r   rL   r   r   r   rv   r   classmethodr   r   r   r   r   r   r      s0    ,0/3?A&(&&
 -& =&

 !
 (	

 $
 '
 .
 2
 3
 

>
-
?O
	
&
6
	
"
(
48
	
 
5
 /
 
	
 
L0
L	
L 
Lr   r   )r+   rO   r}   r~   )$
__future__r   r:   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.   r4   r   r   OCSPSingleResponserT   r   load_der_ocsp_requestload_der_ocsp_responser   r   r   <module>r      s   
 #   $ 3 1 EJJ 
  KK
MM
MM
MM
MM
UZZ C4 C4L   ,, Q. Q.hzL zLz 22 44 r   