U
    ÒZj3A  ã                   @   sV  d dl Z d dlZd dlZd dlmZ d dl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	„ d	ejƒZG d
d„ dejƒZe	je	je	je	je	jfZe	jddœdd„ZG dd„ dejƒZG dd„ dƒZG dd„ de jd�ZG dd„ de jd�Z G dd„ de jd�Z!G dd„ dƒZ"G dd„ dƒZ#e$edœdd „Z%e$e!dœd!d"„Z&dS )#é    N)Úutils)Úx509)Úocsp)ÚhashesÚserialization)ÚCERTIFICATE_PRIVATE_KEY_TYPES)Ú_EARLIEST_UTC_TIMEÚ_convert_to_naive_utc_timeÚ_reject_duplicate_extensionc                   @   s   e Zd ZdZdZdS )ÚOCSPResponderEncodingzBy HashzBy NameN)Ú__name__Ú
__module__Ú__qualname__ÚHASHÚNAME© r   r   úY/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/x509/ocsp.pyr      s   r   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚOCSPResponseStatusr   é   é   é   é   é   N)	r   r   r   Ú
SUCCESSFULZMALFORMED_REQUESTÚINTERNAL_ERRORZ	TRY_LATERZSIG_REQUIREDÚUNAUTHORIZEDr   r   r   r   r      s   r   )Ú	algorithmÚreturnc                 C   s   t | tƒstdƒ‚d S )Nz9Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512)Ú
isinstanceÚ_ALLOWED_HASHESÚ
ValueError)r   r   r   r   Ú_verify_algorithm/   s    
ÿr!   c                   @   s   e Zd ZdZdZdZdS )ÚOCSPCertStatusr   r   r   N)r   r   r   ZGOODÚREVOKEDÚUNKNOWNr   r   r   r   r"   6   s   r"   c                	   @   sH   e Zd Zejejejeeje	j
ej e	j
ej e	j
ej dœdd„ZdS )Ú_SingleResponse)ÚcertÚissuerr   Úcert_statusÚthis_updateÚnext_updateÚrevocation_timeÚrevocation_reasonc	           	      C   s  t |tjƒrt |tjƒs tdƒ‚t|ƒ t |tjƒs<tdƒ‚|d k	rXt |tjƒsXtdƒ‚|| _|| _|| _|| _	|| _
t |tƒsˆtdƒ‚|tjk	r´|d k	r¢tdƒ‚|d k	rütdƒ‚nHt |tjƒsÈtdƒ‚t|ƒ}|tk ràtdƒ‚|d k	rü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!   ÚdatetimeZ_certZ_issuerÚ
_algorithmZ_this_updateZ_next_updater"   r#   r    r	   r   ÚReasonFlagsZ_cert_statusZ_revocation_timeZ_revocation_reason)	Úselfr&   r'   r   r(   r)   r*   r+   r,   r   r   r   Ú__init__=   s`     ÿ
 ÿ
ÿ
ÿÿÿ
 ÿÿz_SingleResponse.__init__N)r   r   r   r   r.   r   ÚHashAlgorithmr"   r0   ÚtypingÚOptionalr2   r4   r   r   r   r   r%   <   s   


÷r%   c                   @   sŒ   e Zd Zejedœdd„ƒZejedœdd„ƒZejej	dœdd„ƒZ
ejedœdd	„ƒZejejed
œdd„ƒZejejdœdd„ƒZdS )ÚOCSPRequest©r   c                 C   s   dS ©z3
        The hash of the issuer public key
        Nr   ©r3   r   r   r   Úissuer_key_hashƒ   s    zOCSPRequest.issuer_key_hashc                 C   s   dS ©z-
        The hash of the issuer name
        Nr   r;   r   r   r   Úissuer_name_hash‰   s    zOCSPRequest.issuer_name_hashc                 C   s   dS ©zK
        The hash algorithm used in the issuer name and key hashes
        Nr   r;   r   r   r   Úhash_algorithm�   s    zOCSPRequest.hash_algorithmc                 C   s   dS ©zM
        The serial number of the cert whose status is being checked
        Nr   r;   r   r   r   Úserial_number•   s    zOCSPRequest.serial_number©Úencodingr   c                 C   s   dS )z/
        Serializes the request to DER
        Nr   ©r3   rD   r   r   r   Úpublic_bytes›   s    zOCSPRequest.public_bytesc                 C   s   dS )zP
        The list of request extensions. Not single request extensions.
        Nr   r;   r   r   r   Ú
extensions¡   s    zOCSPRequest.extensionsN)r   r   r   ÚabcÚabstractpropertyÚbytesr<   r>   r   r5   r@   ÚintrB   Úabstractmethodr   ÚEncodingrF   r   Ú
ExtensionsrG   r   r   r   r   r8   ‚   s   r8   )Ú	metaclassc                   @   sÜ   e Zd Zejedœdd„ƒZejeje	j	 dœdd„ƒZ
ejejej dœdd„ƒZeje	j	dœdd	„ƒZejeje	j	 dœd
d„ƒZejedœdd„ƒZejedœdd„ƒZejejdœdd„ƒZejedœdd„ƒZdS )ÚOCSPSingleResponser9   c                 C   s   dS ©zY
        The status of the certificate (an element from the OCSPCertStatus enum)
        Nr   r;   r   r   r   Úcertificate_status©   s    z%OCSPSingleResponse.certificate_statusc                 C   s   dS ©z^
        The date of when the certificate was revoked or None if not
        revoked.
        Nr   r;   r   r   r   r+   ¯   s    z"OCSPSingleResponse.revocation_timec                 C   s   dS ©zi
        The reason the certificate was revoked or None if not specified or
        not revoked.
        Nr   r;   r   r   r   r,   ¶   s    z$OCSPSingleResponse.revocation_reasonc                 C   s   dS ©z�
        The most recent time at which the status being indicated is known by
        the responder to have been correct
        Nr   r;   r   r   r   r)   ½   s    zOCSPSingleResponse.this_updatec                 C   s   dS ©zC
        The time when newer information will be available
        Nr   r;   r   r   r   r*   Ä   s    zOCSPSingleResponse.next_updatec                 C   s   dS r:   r   r;   r   r   r   r<   Ê   s    z"OCSPSingleResponse.issuer_key_hashc                 C   s   dS r=   r   r;   r   r   r   r>   Ð   s    z#OCSPSingleResponse.issuer_name_hashc                 C   s   dS r?   r   r;   r   r   r   r@   Ö   s    z!OCSPSingleResponse.hash_algorithmc                 C   s   dS rA   r   r;   r   r   r   rB   Ü   s    z OCSPSingleResponse.serial_numberN)r   r   r   rH   rI   r"   rR   r6   r7   r0   r+   r   r2   r,   r)   r*   rJ   r<   r>   r   r5   r@   rK   rB   r   r   r   r   rP   ¨   s$   rP   c                   @   s  e Zd Zejeje dœdd„ƒZeje	dœdd„ƒZ
ejejdœdd„ƒZejejej dœdd	„ƒZejedœd
d„ƒZejedœdd„ƒZejejej dœdd„ƒZejeje dœdd„ƒZejejej dœdd„ƒZejejdœdd„ƒZejedœdd„ƒZejejej dœdd„ƒZejejej  dœdd„ƒZ!ejejdœdd„ƒZ"ejejej dœdd„ƒZ#ejedœd d!„ƒZ$ejedœd"d#„ƒZ%ejejdœd$d%„ƒZ&eje'dœd&d'„ƒZ(ejej)dœd(d)„ƒZ*ejej)dœd*d+„ƒZ+ej,e-j.ed,œd-d.„ƒZ/d/S )0ÚOCSPResponser9   c                 C   s   dS )z_
        An iterator over the individual SINGLERESP structures in the
        response
        Nr   r;   r   r   r   Ú	responsesä   s    zOCSPResponse.responsesc                 C   s   dS )zm
        The status of the response. This is a value from the OCSPResponseStatus
        enumeration
        Nr   r;   r   r   r   Úresponse_statusë   s    zOCSPResponse.response_statusc                 C   s   dS )zA
        The ObjectIdentifier of the signature algorithm
        Nr   r;   r   r   r   Úsignature_algorithm_oidò   s    z$OCSPResponse.signature_algorithm_oidc                 C   s   dS )zX
        Returns a HashAlgorithm corresponding to the type of the digest signed
        Nr   r;   r   r   r   Úsignature_hash_algorithmø   s    z%OCSPResponse.signature_hash_algorithmc                 C   s   dS )z%
        The signature bytes
        Nr   r;   r   r   r   Ú	signature   s    zOCSPResponse.signaturec                 C   s   dS )z+
        The tbsResponseData bytes
        Nr   r;   r   r   r   Útbs_response_bytes  s    zOCSPResponse.tbs_response_bytesc                 C   s   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   r;   r   r   r   Úcertificates  s    zOCSPResponse.certificatesc                 C   s   dS )z2
        The responder's key hash or None
        Nr   r;   r   r   r   Úresponder_key_hash  s    zOCSPResponse.responder_key_hashc                 C   s   dS )z.
        The responder's Name or None
        Nr   r;   r   r   r   Úresponder_name  s    zOCSPResponse.responder_namec                 C   s   dS )z4
        The time the response was produced
        Nr   r;   r   r   r   Úproduced_at   s    zOCSPResponse.produced_atc                 C   s   dS rQ   r   r;   r   r   r   rR   &  s    zOCSPResponse.certificate_statusc                 C   s   dS rS   r   r;   r   r   r   r+   ,  s    zOCSPResponse.revocation_timec                 C   s   dS rT   r   r;   r   r   r   r,   3  s    zOCSPResponse.revocation_reasonc                 C   s   dS rU   r   r;   r   r   r   r)   :  s    zOCSPResponse.this_updatec                 C   s   dS rV   r   r;   r   r   r   r*   A  s    zOCSPResponse.next_updatec                 C   s   dS r:   r   r;   r   r   r   r<   G  s    zOCSPResponse.issuer_key_hashc                 C   s   dS r=   r   r;   r   r   r   r>   M  s    zOCSPResponse.issuer_name_hashc                 C   s   dS r?   r   r;   r   r   r   r@   S  s    zOCSPResponse.hash_algorithmc                 C   s   dS rA   r   r;   r   r   r   rB   Y  s    zOCSPResponse.serial_numberc                 C   s   dS )zR
        The list of response extensions. Not single response extensions.
        Nr   r;   r   r   r   rG   _  s    zOCSPResponse.extensionsc                 C   s   dS )zR
        The list of single response extensions. Not response extensions.
        Nr   r;   r   r   r   Úsingle_extensionse  s    zOCSPResponse.single_extensionsrC   c                 C   s   dS )z0
        Serializes the response to DER
        Nr   rE   r   r   r   rF   k  s    zOCSPResponse.public_bytesN)0r   r   r   rH   rI   r6   ÚIteratorrP   rX   r   rY   r   ZObjectIdentifierrZ   r7   r   r5   r[   rJ   r\   r]   ÚListr.   r^   r_   ÚNamer`   r0   ra   r"   rR   r+   r2   r,   r)   r*   r<   r>   r@   rK   rB   rN   rG   rb   rL   r   rM   rF   r   r   r   r   rW   ã   sZ   
þrW   c                   @   s†   e Zd Zdg fejejejejej	f  ej
ejej  ddœdd„Zejejej	d dœdd„Zejed dœd	d
„Zedœdd„ZdS )ÚOCSPRequestBuilderN)ÚrequestrG   r   c                 C   s   || _ || _d S ©N)Ú_requestÚ_extensions)r3   rg   rG   r   r   r   r4   s  s    	zOCSPRequestBuilder.__init__)r&   r'   r   r   c                 C   sL   | j d k	rtdƒ‚t|ƒ t|tjƒr2t|tjƒs:tdƒ‚t|||f| jƒS )Nz.Only one certificate can be added to a requestr-   )	ri   r    r!   r   r   r.   r/   rf   rj   )r3   r&   r'   r   r   r   r   Úadd_certificate  s    
 ÿz"OCSPRequestBuilder.add_certificate©ÚextvalÚcriticalr   c                 C   sD   t |tjƒstdƒ‚t |j||¡}t|| jƒ t| j	| j|g ƒS ©Nz"extension must be an ExtensionType)
r   r   ÚExtensionTyper/   Ú	ExtensionÚoidr
   rj   rf   ri   ©r3   rm   rn   Ú	extensionr   r   r   Úadd_extension�  s     
ÿz OCSPRequestBuilder.add_extensionr9   c                 C   s   | j d krtdƒ‚t | ¡S )Nz*You must add a certificate before building)ri   r    r   Zcreate_ocsp_requestr;   r   r   r   Úbuild�  s    
zOCSPRequestBuilder.build)r   r   r   r6   r7   ÚTupler   r.   r   r5   rd   rq   rp   r4   rk   Úboolru   r8   rv   r   r   r   r   rf   r  s*   ùÿÿøû þrf   c                
   @   s
  e Zd Zdddg feje ejejeje	f  ejej
ej  ej
ejej  dœdd„Zejejejeejejej ejej ejej d dœ	dd„Ze	ejd dœd	d
„Zejej d dœdd„Zejed dœdd„Zeejej edœdd„Zeeedœdd„ƒZdS )ÚOCSPResponseBuilderN)ÚresponseÚresponder_idÚcertsrG   c                 C   s   || _ || _|| _|| _d S rh   )Ú	_responseÚ_responder_idÚ_certsrj   )r3   rz   r{   r|   rG   r   r   r   r4   ¥  s    	zOCSPResponseBuilder.__init__)	r&   r'   r   r(   r)   r*   r+   r,   r   c	           
   	   C   s<   | j d k	rtdƒ‚t||||||||ƒ}	t|	| j| j| jƒS )Nz#Only one response per OCSPResponse.)r}   r    r%   ry   r~   r   rj   )
r3   r&   r'   r   r(   r)   r*   r+   r,   Z
singlerespr   r   r   Úadd_response³  s$    
ø
üz OCSPResponseBuilder.add_response)rD   Úresponder_certr   c                 C   sP   | j d k	rtdƒ‚t|tjƒs&tdƒ‚t|tƒs8t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   ry   r}   r   rj   )r3   rD   r�   r   r   r   r{   Ò  s    

ÿüz OCSPResponseBuilder.responder_id)r|   r   c                 C   s\   | j d k	rtdƒ‚t|ƒ}t|ƒdkr.tdƒ‚tdd„ |D ƒƒsHtdƒ‚t| j| j|| j	ƒS )Nz!certificates may only be set oncer   zcerts must not be an empty listc                 s   s   | ]}t |tjƒV  qd S rh   )r   r   r.   )Ú.0Úxr   r   r   Ú	<genexpr>í  s     z3OCSPResponseBuilder.certificates.<locals>.<genexpr>z$certs must be a list of Certificates)
r   r    ÚlistÚlenÚallr/   ry   r}   r~   rj   )r3   r|   r   r   r   r^   å  s    
üz OCSPResponseBuilder.certificatesrl   c                 C   sL   t |tjƒstdƒ‚t |j||¡}t|| jƒ t| j	| j
| j| j|g ƒS ro   )r   r   rp   r/   rq   rr   r
   rj   ry   r}   r~   r   rs   r   r   r   ru   ö  s    
üz!OCSPResponseBuilder.add_extension)Úprivate_keyr   r   c                 C   s6   | j d krtdƒ‚| jd kr$tdƒ‚t 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   )r3   rˆ   r   r   r   r   Úsign  s    

   ÿzOCSPResponseBuilder.sign)rY   r   c                 C   s4   t |tƒstdƒ‚|tjkr$tdƒ‚t |d d d ¡S )Nz7response_status must be an item from OCSPResponseStatusz$response_status cannot be SUCCESSFUL)r   r   r/   r   r    r   r‰   )ÚclsrY   r   r   r   Úbuild_unsuccessful  s    
ÿ
z&OCSPResponseBuilder.build_unsuccessful)r   r   r   r6   r7   r%   rw   r   r.   r   rd   rq   rp   r4   r   r5   r"   r0   r2   r€   r{   ÚIterabler^   rx   ru   r   rW   rŠ   Úclassmethodr   rŒ   r   r   r   r   ry   ¤  sR   ùÿù


ö  þ
þ þ
üþry   )Údatar   c                 C   s
   t  | ¡S rh   )r   Úload_der_ocsp_request©r�   r   r   r   r�   "  s    r�   c                 C   s
   t  | ¡S rh   )r   Úload_der_ocsp_responser‘   r   r   r   r’   &  s    r’   )'rH   r0   r6   Zcryptographyr   r   Z"cryptography.hazmat.bindings._rustr   Zcryptography.hazmat.primitivesr   r   Z/cryptography.hazmat.primitives.asymmetric.typesr   Zcryptography.x509.baser   r	   r
   ÚEnumr   r   ÚSHA1ÚSHA224ÚSHA256ÚSHA384ÚSHA512r   r5   r!   r"   r%   ÚABCMetar8   rP   rW   rf   ry   rJ   r�   r’   r   r   r   r   Ú<module>   s6   
û	F&; 2~