
     hQH                        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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e	j        ddfdZ G d dej                  Z G d d          Z G d de j                  Z G d de j                  Z  G d de j                  Z! G d d          Z" G d d          Z#de$defdZ%de$de!fdZ&dS )     N)utilsx509)ocsp)hashesserialization) 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/Sam_Eipo/venv/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returnc                 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ej        dej        dej        dedej        de	j
        ej                 de	j
        ej                 de	j
        ej                 fd	Zd
S )_SingleResponsecertissuerr#   cert_statusthis_updatenext_updaterevocation_timerevocation_reasonc	                 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)	selfr1   r2   r#   r3   r4   r5   r6   r7   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)r   r   r   r   r:   r   HashAlgorithmr+   r<   typingOptionalrB   rG   r   r   r   r0   r0   ;   s        B4B4  B4 '	B4
 $B4 &B4 _X%67B4  ):;B4 "?4+;<B4 B4 B4 B4 B4 B4r   r0   c                   d   e Zd Zeej        defd                        Zeej        defd                        Zeej        de	j
        fd                        Zeej        defd                        Zej        dej        defd            Zeej        dej        fd                        Zd	S )
OCSPRequestr$   c                     dS z3
        The hash of the issuer public key
        Nr   rF   s    r   issuer_key_hashzOCSPRequest.issuer_key_hash         r   c                     dS z-
        The hash of the issuer name
        Nr   rO   s    r   issuer_name_hashzOCSPRequest.issuer_name_hash   rQ   r   c                     dS zK
        The hash algorithm used in the issuer name and key hashes
        Nr   rO   s    r   hash_algorithmzOCSPRequest.hash_algorithm   rQ   r   c                     dS zM
        The serial number of the cert whose status is being checked
        Nr   rO   s    r   serial_numberzOCSPRequest.serial_number   rQ   r   encodingc                     dS )z/
        Serializes the request to DER
        Nr   rF   r[   s     r   public_byteszOCSPRequest.public_bytes   rQ   r   c                     dS )zP
        The list of request extensions. Not single request extensions.
        Nr   rO   s    r   
extensionszOCSPRequest.extensions   rQ   r   N)r   r   r   propertyabcabstractmethodbytesrP   rT   r   rH   rW   intrZ   r   Encodingr^   r   
Extensionsr`   r   r   r   rL   rL      sU            X
 %     X
  4     X
 s     X
 	]%;     
 DO     X  r   rL   )	metaclassc                   h   e Zd Zeej        defd                        Zeej        dej	        e
j
                 fd                        Zeej        dej	        ej                 fd                        Zeej        de
j
        fd                        Zeej        dej	        e
j
                 fd                        Zeej        defd                        Zeej        defd                        Zeej        dej        fd	                        Zeej        defd
                        ZdS )OCSPSingleResponser$   c                     dS zY
        The status of the certificate (an element from the OCSPCertStatus enum)
        Nr   rO   s    r   certificate_statusz%OCSPSingleResponse.certificate_status   rQ   r   c                     dS z^
        The date of when the certificate was revoked or None if not
        revoked.
        Nr   rO   s    r   r6   z"OCSPSingleResponse.revocation_time   rQ   r   c                     dS zi
        The reason the certificate was revoked or None if not specified or
        not revoked.
        Nr   rO   s    r   r7   z$OCSPSingleResponse.revocation_reason   rQ   r   c                     dS z
        The most recent time at which the status being indicated is known by
        the responder to have been correct
        Nr   rO   s    r   r4   zOCSPSingleResponse.this_update   rQ   r   c                     dS zC
        The time when newer information will be available
        Nr   rO   s    r   r5   zOCSPSingleResponse.next_update   rQ   r   c                     dS rN   r   rO   s    r   rP   z"OCSPSingleResponse.issuer_key_hash   rQ   r   c                     dS rS   r   rO   s    r   rT   z#OCSPSingleResponse.issuer_name_hash   rQ   r   c                     dS rV   r   rO   s    r   rW   z!OCSPSingleResponse.hash_algorithm   rQ   r   c                     dS rY   r   rO   s    r   rZ   z OCSPSingleResponse.serial_number   rQ   r   N)r   r   r   ra   rb   rc   r+   rm   rI   rJ   r<   r6   r   rB   r7   r4   r5   rd   rP   rT   r   rH   rW   re   rZ   r   r   r   rj   rj      s       N     X
 1B!C     X 6?43C#D     X X.     X V_X->?     X
      X
 %     X
  4     X
 s     X  r   rj   c                      e Zd Zeej        dej        e         fd                        Z	eej        de
fd                        Zeej        dej        fd                        Zeej        dej        ej                 fd                        Zeej        defd                        Zeej        defd                        Zeej        dej        ej                 fd                        Zeej        dej        e         fd	                        Zeej        dej        ej                 fd
                        Zeej        dej        fd                        Zeej        defd                        Zeej        dej        ej                 fd                        Z eej        dej        ej!                 fd                        Z"eej        dej        fd                        Z#eej        dej        ej                 fd                        Z$eej        defd                        Z%eej        defd                        Z&eej        dej        fd                        Z'eej        de(fd                        Z)eej        dej*        fd                        Z+eej        dej*        fd                        Z,ej        de-j.        defd            Z/dS )OCSPResponser$   c                     dS )z_
        An iterator over the individual SINGLERESP structures in the
        response
        Nr   rO   s    r   	responseszOCSPResponse.responses   rQ   r   c                     dS )zm
        The status of the response. This is a value from the OCSPResponseStatus
        enumeration
        Nr   rO   s    r   response_statuszOCSPResponse.response_status   rQ   r   c                     dS )zA
        The ObjectIdentifier of the signature algorithm
        Nr   rO   s    r   signature_algorithm_oidz$OCSPResponse.signature_algorithm_oid  rQ   r   c                     dS )zX
        Returns a HashAlgorithm corresponding to the type of the digest signed
        Nr   rO   s    r   signature_hash_algorithmz%OCSPResponse.signature_hash_algorithm  rQ   r   c                     dS )z%
        The signature bytes
        Nr   rO   s    r   	signaturezOCSPResponse.signature  rQ   r   c                     dS )z+
        The tbsResponseData bytes
        Nr   rO   s    r   tbs_response_byteszOCSPResponse.tbs_response_bytes  rQ   r   c                     dS )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   rO   s    r   certificateszOCSPResponse.certificates  rQ   r   c                     dS )z2
        The responder's key hash or None
        Nr   rO   s    r   responder_key_hashzOCSPResponse.responder_key_hash(  rQ   r   c                     dS )z.
        The responder's Name or None
        Nr   rO   s    r   responder_namezOCSPResponse.responder_name/  rQ   r   c                     dS )z4
        The time the response was produced
        Nr   rO   s    r   produced_atzOCSPResponse.produced_at6  rQ   r   c                     dS rl   r   rO   s    r   rm   zOCSPResponse.certificate_status=  rQ   r   c                     dS ro   r   rO   s    r   r6   zOCSPResponse.revocation_timeD  rQ   r   c                     dS rq   r   rO   s    r   r7   zOCSPResponse.revocation_reasonL  rQ   r   c                     dS rs   r   rO   s    r   r4   zOCSPResponse.this_updateT  rQ   r   c                     dS ru   r   rO   s    r   r5   zOCSPResponse.next_update\  rQ   r   c                     dS rN   r   rO   s    r   rP   zOCSPResponse.issuer_key_hashc  rQ   r   c                     dS rS   r   rO   s    r   rT   zOCSPResponse.issuer_name_hashj  rQ   r   c                     dS rV   r   rO   s    r   rW   zOCSPResponse.hash_algorithmq  rQ   r   c                     dS rY   r   rO   s    r   rZ   zOCSPResponse.serial_numberx  rQ   r   c                     dS )zR
        The list of response extensions. Not single response extensions.
        Nr   rO   s    r   r`   zOCSPResponse.extensions  rQ   r   c                     dS )zR
        The list of single response extensions. Not response extensions.
        Nr   rO   s    r   single_extensionszOCSPResponse.single_extensions  rQ   r   r[   c                     dS )z0
        Serializes the response to DER
        Nr   r]   s     r   r^   zOCSPResponse.public_bytes  rQ   r   N)0r   r   r   ra   rb   rc   rI   Iteratorrj   r}   r   r   r   ObjectIdentifierr   rJ   r   rH   r   rd   r   r   Listr:   r   r   Namer   r<   r   r+   rm   r6   rB   r7   r4   r5   rP   rT   rW   re   rZ   rg   r`   r   r   rf   r^   r   r   r   r{   r{      s       6?+=>     X !3     X )>     X
 	-	.    X 5     X
 E     X
 fk$*:;     X FOE$:     X
 	 :     X
 X.     X
 N     X
 1B!C     X 6?43C#D     X X.     X V_X->?     X
      X
 %     X
  4     X
 s     X
 DO     X
 4?     X
 	]%;       r   r{   c            
       x   e Zd Zddg fdej        ej        ej        ej        ej	        f                  dej        ej        e
e
eej	        f                  dej        ej        ej                          ddfdZdej        dej        d	ej	        dd fd
Zde
de
ded	ej	        dd f
dZdej        dedd fdZdefdZdS )OCSPRequestBuilderNrequestrequest_hashr`   r$   c                 0    || _         || _        || _        d S N)_request_request_hash_extensions)rF   r   r   r`   s       r   rG   zOCSPRequestBuilder.__init__  s!      )%r   r1   r2   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 requestr9   )
r   r   r(   r)   r&   r   r:   r;   r   r   )rF   r1   r2   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   rT   rP   rZ   c                    | 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 integerrT   rP   z`issuer_name_hash and issuer_key_hash must be the same length as the digest size of the algorithm)r   r   r(   r&   re   r;   r)   r   _check_bytesdigest_sizelenr   r   )rF   rT   rP   rZ   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criticalc                     t          |t          j                  st          d          t          j        |j        ||          }t          || j                   t          | j	        | j
        | j        |gz             S Nz"extension must be an ExtensionType)r&   r   ExtensionTyper;   	Extensionoidr   r   r   r   r   rF   r   r   	extensions       r   add_extensionz OCSPRequestBuilder.add_extension  sy     &$"455 	B@AAAN6:x@@	#It/?@@@!M4-t/?9+/M
 
 	
r   c                 d    | j         | j        t          d          t          j        |           S )Nz*You must add a certificate before building)r   r   r(   r   create_ocsp_requestrO   s    r   buildzOCSPRequestBuilder.build  s2    = T%7%?IJJJ'---r   )r   r   r   rI   rJ   Tupler   r:   r   rH   rd   re   r   r   r   rG   r   r   boolr   rL   r   r   r   r   r   r     s         FH& &L $"2F4HH
& oLsF,@@A
& Kt/A BC& 
& & & & 

  
 '	

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

 '
 

 
 
 
<
(
48
	
 
 
 
.{ . . . . . .r   r   c                   `   e Zd Zdddg fdej        e         dej        ej        ej        e	f                  dej        ej
        ej                          dej
        ej        ej                          fdZdej        dej        d	ej        d
edej        dej        ej                 dej        ej                 dej        ej                 dd fdZde	dej        dd fdZdej        ej                 dd fdZdej        dedd fdZded	ej        ej                 defdZededefd            ZdS )OCSPResponseBuilderNresponseresponder_idcertsr`   c                 >    || _         || _        || _        || _        d S r   )	_response_responder_id_certsr   )rF   r   r   r   r`   s        r   rG   zOCSPResponseBuilder.__init__  s(     ")%r   r1   r2   r#   r3   r4   r5   r6   r7   r$   c	           
          | j         t          d          t          ||||||||          }	t          |	| j        | j        | j                  S )Nz#Only one response per OCSPResponse.)r   r(   r0   r   r   r   r   )
rF   r1   r2   r#   r3   r4   r5   r6   r7   
singleresps
             r   add_responsez OCSPResponseBuilder.add_response  sj     >%BCCC$	
 	

 #K	
 
 	
r   r[   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:   r;   r   r   r   r   r   )rF   r[   r   s      r   r   z OCSPResponseBuilder.responder_id  s     )@AAA.$*:;; 	DBCCC($9:: 	H   #NX&K	
 
 	
r   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 r   )r&   r   r:   ).0xs     r   	<genexpr>z3OCSPResponseBuilder.certificates.<locals>.<genexpr>3  s/      BBq:a!122BBBBBBr   z$certs must be a list of Certificates)
r   r(   listr   allr;   r   r   r   r   )rF   r   s     r   r   z OCSPResponseBuilder.certificates+  s     ;"@AAAUu::??>???BBEBBBBB 	DBCCC"N	
 
 	
r   r   r   c                    t          |t          j                  st          d          t          j        |j        ||          }t          || j                   t          | j	        | j
        | j        | j        |gz             S r   )r&   r   r   r;   r   r   r   r   r   r   r   r   r   s       r   r   z!OCSPResponseBuilder.add_extension<  s     &$"455 	B@AAAN6:x@@	#It/?@@@"NK	{*	
 
 	
r   private_keyc                     | 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   )rF   r   r#   s      r   signzOCSPResponseBuilder.signL  sT    
 >!EFFF%IJJJ()4i
 
 	
r   r   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   r;   r   r(   r   r   )clsr   s     r   build_unsuccessfulz&OCSPResponseBuilder.build_unsuccessfulZ  sc     /+=>> 	I   0;;;CDDD($dKKKr   )r   r   r   rI   rJ   r0   r   r   r:   r   r   r   r   rG   r   rH   r+   r<   rB   r   r   Iterabler   r   r   r   r{   r   classmethodr   r   r   r   r   r   r     s:        6: @DFH& &//2& oL)+@@A
& v{4+;<=& Kt/A BC& & & &

  
 '	

 $
 &
 _X%67
  ):;
 "?4+;<
 

 
 
 
>
-
?C?O
	
 
 
 
&
_T%56
	
 
 
 
"
(
48
	
 
 
 
 
5
 ?6#78
 
	
 
 
 
 
L0
L	
L 
L 
L [
L 
L 
Lr   r   datac                 *    t          j        |           S r   )r   load_der_ocsp_requestr   s    r   r   r   h  s    %d+++r   c                 *    t          j        |           S r   )r   load_der_ocsp_responser   s    r   r   r   l  s    &t,,,r   )'rb   r<   rI   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'   rH   r)   r+   r0   ABCMetarL   rj   r{   r   r   rd   r   r   r   r   r   <module>r      s   


   $ $ $ $ $ $ $ $ 3 3 3 3 3 3 @ @ @ @ @ @ @ @                  EJ   
        K
M
M
M
M
!5 
$ 
 
 
 
    UZ   C4 C4 C4 C4 C4 C4 C4 C4L( ( ( ( (CK ( ( ( (VA A A A A3; A A A AHa a a a aS[ a a a aHS. S. S. S. S. S. S. S.l{L {L {L {L {L {L {L {L|, ,+ , , , ,- -< - - - - - -r   