
    #N                       S SK Jr  S SK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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.                  \R0                  \R2                  \R4                  4rSS jr " S S\R&                  5      r " S S5      r " S S\R>                  S9r  " S S\R>                  S9r! " S S\R>                  S9r"\ RG                  \	R@                  5        \"RG                  \	RD                  5        \!RG                  \	RB                  5         " S S5      r$ " S S5      r%\	RL                  r&\	RN                  r'g)    )annotationsN)utilsx509)ocsp)hashesserialization) 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       Qplatform/bundledpythonunix/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)OCSPCertStatus6   r   r   r   r   N)r   r   r   r   GOODREVOKEDUNKNOWNr   r   r   r   r/   r/   6   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/   r2   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<   rB   r=   r@   rD   rC   r?   N)rF   x509.CertificaterG   rO   r,   hashes.HashAlgorithmrH   r/   rI   datetime.datetimerJ   datetime.datetime | NonerK   rR   rL   x509.ReasonFlags | None)r   r   r   r   rM   r   r   r   r   r5   r5   <   s^    B4B4 !B4 (	B4
 $B4 'B4 .B4 2B4 3B4r   r5   c                  6   \ rS rSr\\R                  S
S j5       5       r\\R                  S
S j5       5       r\\R                  SS j5       5       r	\\R                  SS j5       5       r
\R                  SS j5       r\\R                  SS j5       5       rSrg	)OCSPRequest   c                    gz#
The hash of the issuer public key
Nr   rE   s    r   issuer_key_hashOCSPRequest.issuer_key_hash       r   c                    gz
The hash of the issuer name
Nr   rY   s    r   issuer_name_hashOCSPRequest.issuer_name_hash   r\   r   c                    gz;
The hash algorithm used in the issuer name and key hashes
Nr   rY   s    r   hash_algorithmOCSPRequest.hash_algorithm   r\   r   c                    gz=
The serial number of the cert whose status is being checked
Nr   rY   s    r   serial_numberOCSPRequest.serial_number   r\   r   c                    g)z
Serializes the request to DER
Nr   rE   encodings     r   public_bytesOCSPRequest.public_bytes   r\   r   c                    g)z@
The list of request extensions. Not single request extensions.
Nr   rY   s    r   
extensionsOCSPRequest.extensions   r\   r   r   Nreturnbytesrr   rP   rr   intrk   zserialization.Encodingrr   rs   rr   zx509.Extensions)r   r   r   r   propertyabcabstractmethodrZ   r_   rc   rg   rl   ro   r   r   r   r   rU   rU      s      
   
   
   
 	 
   r   rU   )	metaclassc                  l   \ rS rSr\\R                  SS j5       5       r\\R                  SS j5       5       r\\R                  SS j5       5       r	\\R                  SS j5       5       r
\\R                  SS j5       5       r\\R                  SS j5       5       r\\R                  SS j5       5       r\\R                  SS	 j5       5       r\\R                  SS
 j5       5       r\\R                  SS j5       5       r\\R                  SS j5       5       r\\R                  SS j5       5       rSrg)OCSPSingleResponse   c                    gzI
The status of the certificate (an element from the OCSPCertStatus enum)
Nr   rY   s    r   certificate_status%OCSPSingleResponse.certificate_status   r\   r   c                    gzF
The date of when the certificate was revoked or None if not
revoked.
Nr   rY   s    r   rK   "OCSPSingleResponse.revocation_time   r\   r   c                    gzo
The date of when the certificate was revoked or None if not
revoked. Represented as a non-naive UTC datetime.
Nr   rY   s    r   revocation_time_utc&OCSPSingleResponse.revocation_time_utc   r\   r   c                    gzQ
The reason the certificate was revoked or None if not specified or
not revoked.
Nr   rY   s    r   rL   $OCSPSingleResponse.revocation_reason   r\   r   c                    gzi
The most recent time at which the status being indicated is known by
the responder to have been correct
Nr   rY   s    r   rI   OCSPSingleResponse.this_update   r\   r   c                    gz
The most recent time at which the status being indicated is known by
the responder to have been correct. Represented as a non-naive UTC
datetime.
Nr   rY   s    r   this_update_utc"OCSPSingleResponse.this_update_utc   r\   r   c                    gz3
The time when newer information will be available
Nr   rY   s    r   rJ   OCSPSingleResponse.next_update   r\   r   c                    gz]
The time when newer information will be available. Represented as a
non-naive UTC datetime.
Nr   rY   s    r   next_update_utc"OCSPSingleResponse.next_update_utc   r\   r   c                    grX   r   rY   s    r   rZ   "OCSPSingleResponse.issuer_key_hash   r\   r   c                    gr^   r   rY   s    r   r_   #OCSPSingleResponse.issuer_name_hash   r\   r   c                    grb   r   rY   s    r   rc   !OCSPSingleResponse.hash_algorithm   r\   r   c                    grf   r   rY   s    r   rg    OCSPSingleResponse.serial_number  r\   r   r   Nrr   r/   rr   rR   rr   rS   rr   rQ   rq   rt   ru   )r   r   r   r   ry   rz   r{   r   rK   r   rL   rI   r   rJ   r   rZ   r_   rc   rg   r   r   r   r   r~   r~      s     
                  
      
   
   
   r   r~   c                  "   \ rS rSr\\R                  SS j5       5       r\\R                  SS j5       5       r\\R                  S S j5       5       r	\\R                    S!S j5       5       r
\\R                  S"S j5       5       r\\R                  S"S j5       5       r\\R                  S#S j5       5       r\\R                  S$S	 j5       5       r\\R                  S%S
 j5       5       r\\R                  S&S j5       5       r\\R                  S&S j5       5       r\\R                  S'S j5       5       r\\R                  S(S j5       5       r\\R                  S(S j5       5       r\\R                  S)S j5       5       r\\R                  S&S j5       5       r\\R                  S&S j5       5       r\\R                  S(S j5       5       r\\R                  S(S j5       5       r\\R                  S"S j5       5       r\\R                  S"S j5       5       r\\R                  S*S j5       5       r\\R                  S+S j5       5       r\\R                  S,S j5       5       r\\R                  S,S j5       5       r\R                  S-S j5       r Sr!g).OCSPResponsei
  c                    g)zG
An iterator over the individual SINGLERESP structures in the
response
Nr   rY   s    r   	responsesOCSPResponse.responses  r\   r   c                    g)zU
The status of the response. This is a value from the OCSPResponseStatus
enumeration
Nr   rY   s    r   response_statusOCSPResponse.response_status  r\   r   c                    g)z1
The ObjectIdentifier of the signature algorithm
Nr   rY   s    r   signature_algorithm_oid$OCSPResponse.signature_algorithm_oid  r\   r   c                    g)zH
Returns a HashAlgorithm corresponding to the type of the digest signed
Nr   rY   s    r   signature_hash_algorithm%OCSPResponse.signature_hash_algorithm"  r\   r   c                    g)z
The signature bytes
Nr   rY   s    r   	signatureOCSPResponse.signature+  r\   r   c                    g)z
The tbsResponseData bytes
Nr   rY   s    r   tbs_response_bytesOCSPResponse.tbs_response_bytes2  r\   r   c                    g)z
A list of certificates used to help build a chain to verify the OCSP
response. This situation occurs when the OCSP responder uses a delegate
certificate.
Nr   rY   s    r   certificatesOCSPResponse.certificates9  r\   r   c                    g)z"
The responder's key hash or None
Nr   rY   s    r   responder_key_hashOCSPResponse.responder_key_hashB  r\   r   c                    g)z
The responder's Name or None
Nr   rY   s    r   responder_nameOCSPResponse.responder_nameI  r\   r   c                    g)z$
The time the response was produced
Nr   rY   s    r   produced_atOCSPResponse.produced_atP  r\   r   c                    g)zN
The time the response was produced. Represented as a non-naive UTC
datetime.
Nr   rY   s    r   produced_at_utcOCSPResponse.produced_at_utcW  r\   r   c                    gr   r   rY   s    r   r   OCSPResponse.certificate_status_  r\   r   c                    gr   r   rY   s    r   rK   OCSPResponse.revocation_timef  r\   r   c                    gr   r   rY   s    r   r    OCSPResponse.revocation_time_utcn  r\   r   c                    gr   r   rY   s    r   rL   OCSPResponse.revocation_reasonv  r\   r   c                    gr   r   rY   s    r   rI   OCSPResponse.this_update~  r\   r   c                    gr   r   rY   s    r   r   OCSPResponse.this_update_utc  r\   r   c                    gr   r   rY   s    r   rJ   OCSPResponse.next_update  r\   r   c                    gr   r   rY   s    r   r   OCSPResponse.next_update_utc  r\   r   c                    grX   r   rY   s    r   rZ   OCSPResponse.issuer_key_hash  r\   r   c                    gr^   r   rY   s    r   r_   OCSPResponse.issuer_name_hash  r\   r   c                    grb   r   rY   s    r   rc   OCSPResponse.hash_algorithm  r\   r   c                    grf   r   rY   s    r   rg   OCSPResponse.serial_number  r\   r   c                    g)zB
The list of response extensions. Not single response extensions.
Nr   rY   s    r   ro   OCSPResponse.extensions  r\   r   c                    g)zB
The list of single response extensions. Not response extensions.
Nr   rY   s    r   single_extensionsOCSPResponse.single_extensions  r\   r   c                    g)z 
Serializes the response to DER
Nr   rj   s     r   rl   OCSPResponse.public_bytes  r\   r   r   N)rr   z#typing.Iterator[OCSPSingleResponse])rr   r   )rr   zx509.ObjectIdentifier)rr   hashes.HashAlgorithm | Nonerq   )rr   zlist[x509.Certificate])rr   zbytes | None)rr   zx509.Name | Noner   r   r   r   rt   ru   rx   rw   )"r   r   r   r   ry   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   rK   r   rL   rI   r   rJ   r   rZ   r_   rc   rg   ro   r   rl   r   r   r   r   r   r   
  st           
 	$     
   
      
   
   
      
                  
      
   
   
   
   
   
 	 r   r   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)OCSPRequestBuilderi  Nc                (    Xl         X l        X0l        g N)_request_request_hash_extensions)rE   requestrequest_hashro   s       r   rM   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 requestr8   )
r   r   r+   r-   r)   r   r9   r:   r   r   )rE   rF   rG   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 integerr_   rZ   z`issuer_name_hash and issuer_key_hash must be the same length as the digest size of the algorithm)r   r   r+   r)   rv   r:   r-   r   _check_bytesdigest_sizelenr   r   )rE   r_   rZ   rg   r,   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   ExtensionTyper:   	Extensionoidr   r   r   r   r   rE   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)r   r   r+   r   create_ocsp_requestrY   s    r   buildOCSPRequestBuilder.build!  s4    == T%7%7%?IJJ''--r   )r   r   r   )r   zFtuple[x509.Certificate, x509.Certificate, hashes.HashAlgorithm] | Noner   z5tuple[bytes, bytes, int, hashes.HashAlgorithm] | Nonero   (list[x509.Extension[x509.ExtensionType]]rr   None)rF   rO   rG   rO   r,   rP   rr   r   )
r_   rs   rZ   rs   rg   rv   r,   rP   rr   r   )r  x509.ExtensionTyper  boolrr   r   )rr   rU   )
r   r   r   r   rM   r   r   r  r  r   r   r   r   r   r     s     ?A&&& =& 
&

 !
 (	

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

 (
 

<
(
48
	
.r   r   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)OCSPResponseBuilderi(  Nc                4    Xl         X l        X0l        X@l        g r   )	_response_responder_id_certsr   )rE   responseresponder_idcertsro   s        r   rM   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+   r5   r  r  r  r   )
rE   rF   rG   r,   rH   rI   rJ   rK   rL   
singleresps
             r   add_response OCSPResponseBuilder.add_response6  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   r9   r:   r   r  r  r  r   )rE   rk   responder_certs      r   r   OCSPResponseBuilder.responder_idU  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r   )r)   r   r9   ).0xs     r   	<genexpr>3OCSPResponseBuilder.certificates.<locals>.<genexpr>p  s      BEq:a!1!122Es   ')z$certs must be a list of Certificates)
r  r+   listr   allr:   r  r  r  r   )rE   r  s     r   r    OCSPResponseBuilder.certificatesh  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      $ r   )r)   r   r  r:   r  r  r   r   r  r  r  r  r  s       r   r  !OCSPResponseBuilder.add_extensiony  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"   )rE   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   r:   r"   r+   r   r/  )clsr   s     r   build_unsuccessful&OCSPResponseBuilder.build_unsuccessful  sV     /+=>>I  0;;;CDD(($dKKr   )r  r   r  r  )r  z_SingleResponse | Noner  z5tuple[x509.Certificate, OCSPResponderEncoding] | Noner  zlist[x509.Certificate] | Nonero   r  )rF   rO   rG   rO   r,   rP   rH   r/   rI   rQ   rJ   rR   rK   rR   rL   rS   rr   r  )rk   r   r!  rO   rr   r  )r  z!typing.Iterable[x509.Certificate]rr   r  )r  r  r  r  rr   r  )r0  r	   r,   r   rr   r   )r   r   rr   r   )r   r   r   r   rM   r  r  r   r  r1  classmethodr5  r   r   r   r   r  r  (  s0    ,0/3?A&(&&
 -& =&

 !
 (	

 $
 '
 .
 2
 3
 

>
-
?O
	
&
6
	
"
(
48
	
 
5
 /
 
	
 
L0
L	
L 
Lr   r  )r,   rP   rr   r  )(
__future__r   rz   r;   typingcryptographyr   r   "cryptography.hazmat.bindings._rustr   cryptography.hazmat.primitivesr   r   /cryptography.hazmat.primitives.asymmetric.typesr	   cryptography.x509.baser
   r   r   Enumr   r   SHA1SHA224SHA256SHA384SHA512r*   r-   r/   r5   ABCMetarU   r~   r   registerr   r  load_der_ocsp_requestload_der_ocsp_responser   r   r   <module>rI     sD  
 # 
   $ 3 @ EJJ 
  KK
MM
MM
MM
MM
UZZ C4 C4L(CKK (VZ3;; ZzBS[[ BJ   T%% &   d'' (   D33 4Q. Q.hzL zLz 22 44 r   