o
    ™¨Êhô1  ã                   @   sx  d dl mZmZmZ d dlZd dlZd dlmZ d dlZd dl	m
Z
 d dlmZ d dlmZmZmZ e ¡ e ¡ e ¡ e ¡ e ¡ dœZG dd	„ d	eƒZG d
d„ deƒZedd„ eD ƒƒZejejejejejfZdd„ ZG dd„ deƒZedd„ eD ƒƒZdd„ Zdd„ Z G dd„ de!ƒZ"G dd„ de!ƒZ#G dd„ de!ƒZ$e %ej&¡G dd„ de!ƒƒZ'e %ej&¡G dd „ d e!ƒƒZ(dS )!é    )Úabsolute_importÚdivisionÚprint_functionN)ÚEnum)Úx509)Úhashes)Ú_UNIX_EPOCHÚ_convert_to_naive_utc_timeÚ_reject_duplicate_extension)z1.3.14.3.2.26z2.16.840.1.101.3.4.2.4z2.16.840.1.101.3.4.2.1z2.16.840.1.101.3.4.2.2z2.16.840.1.101.3.4.2.3c                   @   s   e Zd ZdZdZdS )ÚOCSPResponderEncodingzBy HashzBy NameN)Ú__name__Ú
__module__Ú__qualname__ÚHASHÚNAME© r   r   úH/var/www/html/env/lib/python3.10/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   Ú
SUCCESSFULÚMALFORMED_REQUESTÚINTERNAL_ERRORÚ	TRY_LATERÚSIG_REQUIREDÚUNAUTHORIZEDr   r   r   r   r   "   s    r   c                 c   ó   � | ]}|j |fV  qd S ©N©Úvalue©Ú.0Úxr   r   r   Ú	<genexpr>+   ó   € r&   c                 C   s   t | tƒs	tdƒ‚d S )Nz9Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512)Ú
isinstanceÚ_ALLOWED_HASHESÚ
ValueError)Ú	algorithmr   r   r   Ú_verify_algorithm2   s
   
ÿÿr,   c                   @   s   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-   9   s    r-   c                 c   r   r    r!   r#   r   r   r   r&   ?   r'   c                 C   ó   ddl m} | | ¡S ©Nr   ©Úbackend)Ú,cryptography.hazmat.backends.openssl.backendr4   Úload_der_ocsp_request©Údatar4   r   r   r   r6   B   ó   
r6   c                 C   r1   r2   )r5   r4   Úload_der_ocsp_responser7   r   r   r   r:   G   r9   r:   c                   @   s2   e Zd Zdg fdd„Zdd„ Zdd„ Zdd	„ ZdS )
ÚOCSPRequestBuilderNc                 C   s   || _ || _d S r    )Ú_requestÚ_extensions)ÚselfÚrequestÚ
extensionsr   r   r   Ú__init__M   s   
zOCSPRequestBuilder.__init__c                 C   sL   | j d ur	tdƒ‚t|ƒ t|tjƒrt|tjƒstdƒ‚t|||f| jƒS )Nz.Only one certificate can be added to a requestú%cert and issuer must be a Certificate)	r<   r*   r,   r(   r   ÚCertificateÚ	TypeErrorr;   r=   )r>   ÚcertÚissuerr+   r   r   r   Úadd_certificateQ   s   

ÿ
þz"OCSPRequestBuilder.add_certificatec                 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   ÚExtensionTyperD   Ú	ExtensionÚoidr
   r=   r;   r<   ©r>   Ú	extensionÚcriticalr   r   r   Úadd_extension^   s   ÿz OCSPRequestBuilder.add_extensionc                 C   s(   ddl m} | jd u rtdƒ‚| | ¡S )Nr   r3   z*You must add a certificate before building)r5   r4   r<   r*   Úcreate_ocsp_request)r>   r4   r   r   r   Úbuildi   s   

zOCSPRequestBuilder.build)r   r   r   rA   rG   rO   rQ   r   r   r   r   r;   L   s
    r;   c                   @   s   e Zd Zdd„ ZdS )Ú_SingleResponsec	           	      C   s  t |tjƒrt |tjƒstdƒ‚t|ƒ t |tjƒstdƒ‚|d ur,t |tjƒs,tdƒ‚|| _|| _|| _|| _	|| _
t |tƒsDtdƒ‚|tjurZ|d urQtdƒ‚|d urYtdƒ‚n$t |tjƒsdtdƒ‚t|ƒ}|tkrptdƒ‚|d ur~t |tjƒs~td	ƒ‚|| _|| _|| _d S )
NrB   z%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 objectzBThe revocation_time must be after the unix epoch (1970 January 1).zCrevocation_reason must be an item from the ReasonFlags enum or None)r(   r   rC   rD   r,   ÚdatetimeÚ_certÚ_issuerÚ
_algorithmÚ_this_updateÚ_next_updater-   r/   r*   r	   r   ÚReasonFlagsÚ_cert_statusÚ_revocation_timeÚ_revocation_reason)	r>   rE   rF   r+   Úcert_statusÚthis_updateÚnext_updateÚrevocation_timeÚrevocation_reasonr   r   r   rA   r   sZ   
ÿ
þ
ÿ
ÿ
ÿÿÿ
ÿÿ
z_SingleResponse.__init__N)r   r   r   rA   r   r   r   r   rR   q   s    rR   c                   @   sR   e Zd Zdddg fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	dd„ ƒZ
dS )ÚOCSPResponseBuilderNc                 C   s   || _ || _|| _|| _d S r    )Ú	_responseÚ_responder_idÚ_certsr=   )r>   ÚresponseÚresponder_idÚcertsr@   r   r   r   rA   °   s   
zOCSPResponseBuilder.__init__c	           
   	   C   s<   | j d ur	tdƒ‚t||||||||ƒ}	t|	| j| j| jƒS )Nz#Only one response per OCSPResponse.)rc   r*   rR   rb   rd   re   r=   )
r>   rE   rF   r+   r]   r^   r_   r`   ra   Ú
singlerespr   r   r   Úadd_response·   s   
þþz OCSPResponseBuilder.add_responsec                 C   sP   | j d ur	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)rd   r*   r(   r   rC   rD   r   rb   rc   re   r=   )r>   ÚencodingÚresponder_certr   r   r   rg   Å   s   

ÿ
þz OCSPResponseBuilder.responder_idc                 C   s\   | j d ur	tdƒ‚t|ƒ}t|ƒdkrtdƒ‚td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                 s   s   � | ]	}t |tjƒV  qd S r    )r(   r   rC   r#   r   r   r   r&   Ú   s   € z3OCSPResponseBuilder.certificates.<locals>.<genexpr>z$certs must be a list of Certificates)
re   r*   ÚlistÚlenÚallrD   rb   rc   rd   r=   )r>   rh   r   r   r   ÚcertificatesÔ   s   
þz OCSPResponseBuilder.certificatesc                 C   sL   t |tjƒs
tdƒ‚t |j||¡}t|| jƒ t| j	| j
| j| j|g ƒS rH   )r(   r   rI   rD   rJ   rK   r
   r=   rb   rc   rd   re   rL   r   r   r   rO   á   s   þz!OCSPResponseBuilder.add_extensionc                 C   sV   ddl m} | jd u rtdƒ‚| jd u rtdƒ‚t|tjƒs"tdƒ‚| 	t
j| ||¡S )Nr   r3   z&You must add a response before signingz*You must add a responder_id before signingz.Algorithm must be a registered hash algorithm.)r5   r4   rc   r*   rd   r(   r   ÚHashAlgorithmrD   Úcreate_ocsp_responser   r   )r>   Úprivate_keyr+   r4   r   r   r   Úsigní   s   


ÿzOCSPResponseBuilder.signc                 C   s@   ddl m} t|tƒstdƒ‚|tju rtdƒ‚| |d d d ¡S )Nr   r3   z7response_status must be an item from OCSPResponseStatusz$response_status cannot be SUCCESSFUL)r5   r4   r(   r   rD   r   r*   rr   )ÚclsÚresponse_statusr4   r   r   r   Úbuild_unsuccessfulû   s   
ÿ
z&OCSPResponseBuilder.build_unsuccessful)r   r   r   rA   rj   rg   rp   rO   rt   Úclassmethodrw   r   r   r   r   rb   ¯   s    
ÿrb   c                   @   s`   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZej	d	d
„ ƒZ
ejdd„ ƒZdS )ÚOCSPRequestc                 C   ó   dS ©z3
        The hash of the issuer public key
        Nr   ©r>   r   r   r   Úissuer_key_hash
  ó    zOCSPRequest.issuer_key_hashc                 C   rz   ©z-
        The hash of the issuer name
        Nr   r|   r   r   r   Úissuer_name_hash  r~   zOCSPRequest.issuer_name_hashc                 C   rz   ©zK
        The hash algorithm used in the issuer name and key hashes
        Nr   r|   r   r   r   Úhash_algorithm  r~   zOCSPRequest.hash_algorithmc                 C   rz   ©zM
        The serial number of the cert whose status is being checked
        Nr   r|   r   r   r   Úserial_number  r~   zOCSPRequest.serial_numberc                 C   rz   )z/
        Serializes the request to DER
        Nr   )r>   rk   r   r   r   Úpublic_bytes!  r~   zOCSPRequest.public_bytesc                 C   rz   )zP
        The list of request extensions. Not single request extensions.
        Nr   r|   r   r   r   r@   '  r~   zOCSPRequest.extensionsN)r   r   r   ÚabcÚabstractpropertyr}   r€   r‚   r„   Úabstractmethodr…   r@   r   r   r   r   ry     s    




ry   c                   @   s  e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejd	d
„ ƒZ	ejdd„ ƒZ
ejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd „ ƒZejd!d"„ ƒZejd#d$„ ƒZd%S )&ÚOCSPResponsec                 C   rz   )zm
        The status of the response. This is a value from the OCSPResponseStatus
        enumeration
        Nr   r|   r   r   r   rv   0  r~   zOCSPResponse.response_statusc                 C   rz   )zA
        The ObjectIdentifier of the signature algorithm
        Nr   r|   r   r   r   Úsignature_algorithm_oid7  r~   z$OCSPResponse.signature_algorithm_oidc                 C   rz   )z%
        The signature bytes
        Nr   r|   r   r   r   Ú	signature=  r~   zOCSPResponse.signaturec                 C   rz   )z+
        The tbsResponseData bytes
        Nr   r|   r   r   r   Útbs_response_bytesC  r~   zOCSPResponse.tbs_response_bytesc                 C   rz   )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   rp   I  r~   zOCSPResponse.certificatesc                 C   rz   )z2
        The responder's key hash or None
        Nr   r|   r   r   r   Úresponder_key_hashQ  r~   zOCSPResponse.responder_key_hashc                 C   rz   )z.
        The responder's Name or None
        Nr   r|   r   r   r   Úresponder_nameW  r~   zOCSPResponse.responder_namec                 C   rz   )z4
        The time the response was produced
        Nr   r|   r   r   r   Úproduced_at]  r~   zOCSPResponse.produced_atc                 C   rz   )zY
        The status of the certificate (an element from the OCSPCertStatus enum)
        Nr   r|   r   r   r   Úcertificate_statusc  r~   zOCSPResponse.certificate_statusc                 C   rz   )z^
        The date of when the certificate was revoked or None if not
        revoked.
        Nr   r|   r   r   r   r`   i  r~   zOCSPResponse.revocation_timec                 C   rz   )zi
        The reason the certificate was revoked or None if not specified or
        not revoked.
        Nr   r|   r   r   r   ra   p  r~   zOCSPResponse.revocation_reasonc                 C   rz   )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^   w  r~   zOCSPResponse.this_updatec                 C   rz   )zC
        The time when newer information will be available
        Nr   r|   r   r   r   r_   ~  r~   zOCSPResponse.next_updatec                 C   rz   r{   r   r|   r   r   r   r}   „  r~   zOCSPResponse.issuer_key_hashc                 C   rz   r   r   r|   r   r   r   r€   Š  r~   zOCSPResponse.issuer_name_hashc                 C   rz   r�   r   r|   r   r   r   r‚   �  r~   zOCSPResponse.hash_algorithmc                 C   rz   rƒ   r   r|   r   r   r   r„   –  r~   zOCSPResponse.serial_numberc                 C   rz   )zR
        The list of response extensions. Not single response extensions.
        Nr   r|   r   r   r   r@   œ  r~   zOCSPResponse.extensionsN)r   r   r   r†   r‡   rv   rŠ   r‹   rŒ   rp   r�   rŽ   r�   r�   r`   ra   r^   r_   r}   r€   r‚   r„   r@   r   r   r   r   r‰   .  sJ    
















r‰   ))Ú
__future__r   r   r   r†   rS   Úenumr   ÚsixÚcryptographyr   Úcryptography.hazmat.primitivesr   Úcryptography.x509.baser   r	   r
   ÚSHA1ÚSHA224ÚSHA256ÚSHA384ÚSHA512Ú_OIDS_TO_HASHr   r   ÚdictÚ_RESPONSE_STATUS_TO_ENUMr)   r,   r-   Ú_CERT_STATUS_TO_ENUMr6   r:   Úobjectr;   rR   rb   Úadd_metaclassÚABCMetary   r‰   r   r   r   r   Ú<module>   s@   û		þ%>
Y
%