U
    ÈZjPJ  ã                   @   s  d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZ dd	lmZm Z m!Z!m"Z" G d
d„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd„ deƒZ&G dd„ deƒZ'G dd„ deƒZ(G dd„ deƒZ)G dd„ deƒZ*G dd„ deƒZ+G dd„ deƒZ,G dd„ deƒZ-G d d!„ d!eƒZ.G d"d#„ d#eƒZ/G d$d%„ d%eƒZ0G d&d'„ d'eƒZ1G d(d)„ d)eƒZ2G d*d+„ d+eƒZ3G d,d-„ d-eƒZ4G d.d/„ d/eƒZ5G d0d1„ d1eƒZ6G d2d3„ d3eƒZ7G d4d5„ d5eƒZ8G d6d7„ d7eƒZ9G d8d9„ d9eƒZ:G d:d;„ d;eƒZ;G d<d=„ d=eƒZ<G d>d?„ d?eƒZ=G d@dA„ dAeƒZ>G dBdC„ dCeƒZ?G dDdE„ dEeƒZ@G dFdG„ dGeƒZAG dHdI„ dIeƒZBG dJdK„ dKeƒZCG dLdM„ dMeƒZDG dNdO„ dOeƒZEG dPdQ„ dQeƒZFG dRdS„ dSeƒZGG dTdU„ dUeƒZHdVS )WzÒ
ASN.1 type classes for the online certificate status protocol (OCSP). Exports
the following items:

 - OCSPRequest()
 - OCSPResponse()

Other type classes are defined that help compose the types listed above.
é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functioné   )Úunwrap)ÚDigestAlgorithmÚSignedDigestAlgorithm)ÚBooleanÚChoiceÚ
EnumeratedÚGeneralizedTimeÚ	IA5StringÚIntegerÚNullÚObjectIdentifierÚOctetBitStringÚOctetStringÚParsableOctetStringÚSequenceÚ
SequenceOf)ÚAuthorityInfoAccessSyntaxÚ	CRLReason)ÚPublicKeyAlgorithm)ÚCertificateÚGeneralNameÚGeneralNamesÚNamec                   @   s   e Zd ZddiZdS )ÚVersionr   Úv1N©Ú__name__Ú
__module__Ú__qualname__Ú_map© r%   r%   úR/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/asn1crypto/ocsp.pyr   (   s    ÿr   c                   @   s(   e Zd ZdefdefdefdefgZdS )ÚCertIdZhash_algorithmZissuer_name_hashZissuer_key_hashZserial_numberN)r!   r"   r#   r   r   r   Ú_fieldsr%   r%   r%   r&   r'   .   s
   ür'   c                   @   s   e Zd ZdefdefgZdS )ÚServiceLocatorZissuerZlocatorN)r!   r"   r#   r   r   r(   r%   r%   r%   r&   r)   7   s   þr)   c                   @   s   e Zd ZddiZdS )ÚRequestExtensionIdz1.3.6.1.5.5.7.48.1.7Úservice_locatorNr    r%   r%   r%   r&   r*   >   s    ÿr*   c                   @   s4   e Zd ZdefdeddifdefgZdZdeiZ	dS )	ÚRequestExtensionÚextn_idÚcriticalÚdefaultFÚ
extn_value©r-   r0   r+   N)
r!   r"   r#   r*   r
   r   r(   Ú	_oid_pairr)   Ú
_oid_specsr%   r%   r%   r&   r,   D   s   ý ÿr,   c                   @   s   e Zd ZeZdS )ÚRequestExtensionsN)r!   r"   r#   r,   Ú_child_specr%   r%   r%   r&   r4   Q   s   r4   c                   @   sP   e Zd ZdefdedddœfgZdZdZdZdd	„ Z	e
d
d„ ƒZe
dd„ ƒZdS )ÚRequestZreq_certÚsingle_request_extensionsr   T©ÚexplicitÚoptionalFNc                 C   sd   t ƒ | _| d D ]H}|d j}d| }t| |ƒrBt| ||d jƒ |d jr| j |¡ qd| _dS )úv
        Sets common named extensions to private attributes and creates a list
        of critical extensions
        r7   r-   ú	_%s_valuer0   r.   TN©ÚsetÚ_critical_extensionsÚnativeÚhasattrÚsetattrÚparsedÚaddÚ_processed_extensions©ÚselfÚ	extensionÚnameZattribute_namer%   r%   r&   Ú_set_extensions_   s    


zRequest._set_extensionsc                 C   s   | j s|  ¡  | jS ©z²
        Returns a set of the names (or OID if not a known extension) of the
        extensions marked as critical

        :return:
            A set of unicode strings
        ©rE   rJ   r?   ©rG   r%   r%   r&   Úcritical_extensionsq   s    
zRequest.critical_extensionsc                 C   s   | j dkr|  ¡  | jS )z¿
        This extension is used when communicating with an OCSP responder that
        acts as a proxy for OCSP requests

        :return:
            None or a ServiceLocator object
        F)rE   rJ   Ú_service_locator_valuerM   r%   r%   r&   Úservice_locator_value   s    

zRequest.service_locator_value)r!   r"   r#   r'   r4   r(   rE   r?   rO   rJ   ÚpropertyrN   rP   r%   r%   r%   r&   r6   U   s   þ
r6   c                   @   s   e Zd ZeZdS )ÚRequestsN)r!   r"   r#   r6   r5   r%   r%   r%   r&   rR   Ž   s   rR   c                   @   s   e Zd ZddiZdS )ÚResponseTypez1.3.6.1.5.5.7.48.1.1Úbasic_ocsp_responseNr    r%   r%   r%   r&   rS   ’   s    ÿrS   c                   @   s   e Zd ZeZdS )ÚAcceptableResponsesN)r!   r"   r#   rS   r5   r%   r%   r%   r&   rU   ˜   s   rU   c                   @   s"   e Zd ZdefdeddifgZdS )ÚPreferredSignatureAlgorithmZsig_identifierZcert_identifierr:   TN)r!   r"   r#   r	   r   r(   r%   r%   r%   r&   rV   œ   s   þrV   c                   @   s   e Zd ZeZdS )ÚPreferredSignatureAlgorithmsN)r!   r"   r#   rV   r5   r%   r%   r%   r&   rW   £   s   rW   c                   @   s   e Zd ZddddœZdS )ÚTBSRequestExtensionIdÚnonceÚacceptable_responsesÚpreferred_signature_algorithms)ú1.3.6.1.5.5.7.48.1.2z1.3.6.1.5.5.7.48.1.4z1.3.6.1.5.5.7.48.1.8Nr    r%   r%   r%   r&   rX   §   s   ýrX   c                   @   s8   e Zd ZdefdeddifdefgZdZee	e
dœZdS )	ÚTBSRequestExtensionr-   r.   r/   Fr0   r1   )rY   rZ   r[   N)r!   r"   r#   rX   r
   r   r(   r2   r   rU   rW   r3   r%   r%   r%   r&   r]   ¯   s   ýýr]   c                   @   s   e Zd ZeZdS )ÚTBSRequestExtensionsN)r!   r"   r#   r]   r5   r%   r%   r%   r&   r^   ¾   s   r^   c                   @   s@   e Zd Zdedddœfdedddœfd	efd
edddœfgZdS )Ú
TBSRequestÚversionr   r   ©r9   r/   Zrequestor_namer   Tr8   Zrequest_listÚrequest_extensionsé   N)r!   r"   r#   r   r   rR   r^   r(   r%   r%   r%   r&   r_   Â   s
   ür_   c                   @   s   e Zd ZeZdS )ÚCertificatesN)r!   r"   r#   r   r5   r%   r%   r%   r&   rd   Ë   s   rd   c                   @   s*   e Zd ZdefdefdedddœfgZdS )Ú	SignatureÚsignature_algorithmÚ	signatureÚcertsr   Tr8   N)r!   r"   r#   r	   r   rd   r(   r%   r%   r%   r&   re   Ï   s   ýre   c                   @   sp   e Zd ZdefdedddœfgZdZdZdZdZ	dZ
dd	„ Zed
d„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdS )ÚOCSPRequestÚtbs_requestZoptional_signaturer   Tr8   FNc                 C   sh   t ƒ | _| d d D ]H}|d j}d| }t| |ƒrFt| ||d jƒ |d jr| j |¡ qd| _dS )	r;   rj   rb   r-   r<   r0   r.   TNr=   rF   r%   r%   r&   rJ   ã   s    


zOCSPRequest._set_extensionsc                 C   s   | j s|  ¡  | jS rK   rL   rM   r%   r%   r&   rN   õ   s    
zOCSPRequest.critical_extensionsc                 C   s   | j dkr|  ¡  | jS )zÊ
        This extension is used to prevent replay attacks by including a unique,
        random value with each request/response pair

        :return:
            None or an OctetString object
        F©rE   rJ   Ú_nonce_valuerM   r%   r%   r&   Únonce_value  s    

zOCSPRequest.nonce_valuec                 C   s   | j dkr|  ¡  | jS )a(  
        This extension is used to allow the client and server to communicate
        with alternative response formats other than just basic_ocsp_response,
        although no other formats are defined in the standard.

        :return:
            None or an AcceptableResponses object
        F)rE   rJ   Ú_acceptable_responses_valuerM   r%   r%   r&   Úacceptable_responses_value  s    
z&OCSPRequest.acceptable_responses_valuec                 C   s   | j dkr|  ¡  | jS )aj  
        This extension is used by the client to define what signature algorithms
        are preferred, including both the hash algorithm and the public key
        algorithm, with a level of detail down to even the public key algorithm
        parameters, such as curve name.

        :return:
            None or a PreferredSignatureAlgorithms object
        F)rE   rJ   Ú%_preferred_signature_algorithms_valuerM   r%   r%   r&   Ú$preferred_signature_algorithms_value   s    
z0OCSPRequest.preferred_signature_algorithms_value)r!   r"   r#   r_   re   r(   rE   r?   rl   rn   rp   rJ   rQ   rN   rm   ro   rq   r%   r%   r%   r&   ri   ×   s"   þ


ri   c                   @   s   e Zd ZdddddddœZdS )	ÚOCSPResponseStatusZ
successfulZmalformed_requestZinternal_errorZ	try_laterZsign_requiredÚunauthorized)r   r   rc   é   é   é   Nr    r%   r%   r%   r&   rr   1  s   úrr   c                   @   s(   e Zd ZdeddifdeddifgZdS )ÚResponderIdZby_namer9   r   Úby_keyrc   N)r!   r"   r#   r   r   Ú_alternativesr%   r%   r%   r&   rw   <  s   þrw   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )Ú
StatusGoodc                 C   s6   |dk	r,|dkr,t |tƒs,ttdt|ƒƒƒ‚d| _dS )z`
        Sets the value of the object

        :param value:
            None or 'good'
        NÚgoodzK
                value must be one of None, "good", not %s
                ó    ©Ú
isinstancer   Ú
ValueErrorr   ÚreprÚcontents©rG   Úvaluer%   r%   r&   r>   E  s    üzStatusGood.setc                 C   s   dS )Nr{   r%   rM   r%   r%   r&   r@   W  s    zStatusGood.nativeN©r!   r"   r#   r>   rQ   r@   r%   r%   r%   r&   rz   D  s   rz   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚStatusUnknownc                 C   s6   |dk	r,|dkr,t |tƒs,ttdt|ƒƒƒ‚d| _dS )zc
        Sets the value of the object

        :param value:
            None or 'unknown'
        NÚunknownzN
                value must be one of None, "unknown", not %s
                r|   r}   r‚   r%   r%   r&   r>   ^  s    üzStatusUnknown.setc                 C   s   dS )Nr†   r%   rM   r%   r%   r&   r@   p  s    zStatusUnknown.nativeNr„   r%   r%   r%   r&   r…   ]  s   r…   c                   @   s$   e Zd ZdefdedddœfgZdS )ÚRevokedInfoZrevocation_timeZrevocation_reasonr   Tr8   N)r!   r"   r#   r   r   r(   r%   r%   r%   r&   r‡   u  s   þr‡   c                   @   s4   e Zd ZdeddifdeddifdeddifgZdS )	Ú
CertStatusr{   Zimplicitr   Zrevokedr   r†   rc   N)r!   r"   r#   rz   r‡   r…   ry   r%   r%   r%   r&   rˆ   |  s   ýrˆ   c                   @   s:   e Zd ZdedddœfdedddœfdedddœfgZd	S )
ÚCrlIdZcrl_urlr   Tr8   Zcrl_numr   Zcrl_timerc   N)r!   r"   r#   r   r   r   r(   r%   r%   r%   r&   r‰   „  s   ýr‰   c                   @   s   e Zd ZdddddddœZdS )	ÚSingleResponseExtensionIdÚcrlÚarchive_cutoffÚ
crl_reasonÚinvalidity_dateÚcertificate_issuerÚ!signed_certificate_timestamp_list)z1.3.6.1.5.5.7.48.1.3z1.3.6.1.5.5.7.48.1.6z	2.5.29.21z	2.5.29.24z	2.5.29.29z1.3.6.1.4.1.11129.2.4.5Nr    r%   r%   r%   r&   rŠ   Œ  s   ÷rŠ   c                   @   s>   e Zd ZdefdeddifdefgZdZee	e
e	eedœZdS )	ÚSingleResponseExtensionr-   r.   r/   Fr0   r1   )r‹   rŒ   r�   rŽ   r�   r�   N)r!   r"   r#   rŠ   r
   r   r(   r2   r‰   r   r   r   r   r3   r%   r%   r%   r&   r‘   š  s   ýúr‘   c                   @   s   e Zd ZeZdS )ÚSingleResponseExtensionsN)r!   r"   r#   r‘   r5   r%   r%   r%   r&   r’   ¬  s   r’   c                	   @   sª   e Zd Zdefdefdefdedddœfded	ddœfgZd
ZdZ	dZ
dZdZdZdZdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdS )ÚSingleResponseZcert_idZcert_statusZthis_updateZnext_updater   Tr8   Úsingle_extensionsr   FNc                 C   sd   t ƒ | _| d D ]H}|d j}d| }t| |ƒrBt| ||d jƒ |d jr| j |¡ qd| _dS )r;   r”   r-   r<   r0   r.   TNr=   rF   r%   r%   r&   rJ   Á  s    


zSingleResponse._set_extensionsc                 C   s   | j s|  ¡  | jS rK   rL   rM   r%   r%   r&   rN   Ó  s    
z"SingleResponse.critical_extensionsc                 C   s   | j dkr|  ¡  | jS )z¬
        This extension is used to locate the CRL that a certificate's revocation
        is contained within.

        :return:
            None or a CrlId object
        F)rE   rJ   Ú
_crl_valuerM   r%   r%   r&   Ú	crl_valueá  s    

zSingleResponse.crl_valuec                 C   s   | j dkr|  ¡  | jS )zÜ
        This extension is used to indicate the date at which an archived
        (historical) certificate status entry will no longer be available.

        :return:
            None or a GeneralizedTime object
        F)rE   rJ   Ú_archive_cutoff_valuerM   r%   r%   r&   Úarchive_cutoff_valueï  s    

z#SingleResponse.archive_cutoff_valuec                 C   s   | j dkr|  ¡  | jS )zŽ
        This extension indicates the reason that a certificate was revoked.

        :return:
            None or a CRLReason object
        F)rE   rJ   Ú_crl_reason_valuerM   r%   r%   r&   Úcrl_reason_valueý  s    	
zSingleResponse.crl_reason_valuec                 C   s   | j dkr|  ¡  | jS )a=  
        This extension indicates the suspected date/time the private key was
        compromised or the certificate became invalid. This would usually be
        before the revocation date, which is when the CA processed the
        revocation.

        :return:
            None or a GeneralizedTime object
        F)rE   rJ   Ú_invalidity_date_valuerM   r%   r%   r&   Úinvalidity_date_value
  s    
z$SingleResponse.invalidity_date_valuec                 C   s   | j dkr|  ¡  | jS )z—
        This extension indicates the issuer of the certificate in question.

        :return:
            None or an x509.GeneralNames object
        F)rE   rJ   Ú_certificate_issuer_valuerM   r%   r%   r&   Úcertificate_issuer_value  s    	
z'SingleResponse.certificate_issuer_value)r!   r"   r#   r'   rˆ   r   r’   r(   rE   r?   r•   r—   r™   r›   r�   rJ   rQ   rN   r–   r˜   rš   rœ   rž   r%   r%   r%   r&   r“   °  s4   û




r“   c                   @   s   e Zd ZeZdS )Ú	ResponsesN)r!   r"   r#   r“   r5   r%   r%   r%   r&   rŸ   (  s   rŸ   c                   @   s   e Zd ZdddœZdS )ÚResponseDataExtensionIdrY   Úextended_revoke)r\   z1.3.6.1.5.5.7.48.1.9Nr    r%   r%   r%   r&   r    ,  s   þr    c                   @   s6   e Zd ZdefdeddifdefgZdZee	dœZ
dS )	ÚResponseDataExtensionr-   r.   r/   Fr0   r1   )rY   r¡   N)r!   r"   r#   r    r
   r   r(   r2   r   r   r3   r%   r%   r%   r&   r¢   3  s   ýþr¢   c                   @   s   e Zd ZeZdS )ÚResponseDataExtensionsN)r!   r"   r#   r¢   r5   r%   r%   r%   r&   r£   A  s   r£   c                	   @   s>   e Zd Zdedddœfdefdefdefded	d
dœfgZdS )ÚResponseDatar`   r   r   ra   Zresponder_idZproduced_atÚ	responsesÚresponse_extensionsr   Tr8   N)	r!   r"   r#   r   rw   r   rŸ   r£   r(   r%   r%   r%   r&   r¤   E  s   ûr¤   c                   @   s0   e Zd ZdefdefdefdedddœfgZdS )	ÚBasicOCSPResponseÚtbs_response_datarf   rg   rh   r   Tr8   N)r!   r"   r#   r¤   r	   r   rd   r(   r%   r%   r%   r&   r§   O  s
   ür§   c                   @   s(   e Zd ZdefdefgZdZdeiZdS )ÚResponseBytesÚresponse_typeÚresponse)rª   r«   rT   N)	r!   r"   r#   rS   r   r(   r2   r§   r3   r%   r%   r%   r&   r©   X  s   þ ÿr©   c                   @   sx   e Zd ZdefdedddœfgZdZdZdZdZ	dd	„ Z
ed
d„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdS )ÚOCSPResponseZresponse_statusÚresponse_bytesr   Tr8   FNc                 C   sr   t ƒ | _| d d jd d D ]H}|d j}d| }t| |ƒrPt| ||d jƒ |d jr| j |¡ qd	| _d
S )r;   r­   r«   r¨   r¦   r-   r<   r0   r.   TN)r>   r?   rC   r@   rA   rB   rD   rE   rF   r%   r%   r&   rJ   o  s    


zOCSPResponse._set_extensionsc                 C   s   | j s|  ¡  | jS rK   rL   rM   r%   r%   r&   rN   �  s    
z OCSPResponse.critical_extensionsc                 C   s   | j dkr|  ¡  | jS )z§
        This extension is used to prevent replay attacks on the request/response
        exchange

        :return:
            None or an OctetString object
        Frk   rM   r%   r%   r&   rm   �  s    

zOCSPResponse.nonce_valuec                 C   s   | j dkr|  ¡  | jS )zÊ
        This extension is used to signal that the responder will return a
        "revoked" status for non-issued certificates.

        :return:
            None or a Null object (if present)
        F)rE   rJ   Ú_extended_revoke_valuerM   r%   r%   r&   Úextended_revoke_value�  s    

z"OCSPResponse.extended_revoke_valuec                 C   s   | d d j S )z’
        A shortcut into the BasicOCSPResponse sequence

        :return:
            None or an asn1crypto.ocsp.BasicOCSPResponse object
        r­   r«   ©rC   rM   r%   r%   r&   rT   «  s    	z OCSPResponse.basic_ocsp_responsec                 C   s   | d d j d S )z�
        A shortcut into the parsed, ResponseData sequence

        :return:
            None or an asn1crypto.ocsp.ResponseData object
        r­   r«   r¨   r°   rM   r%   r%   r&   Úresponse_data¶  s    	zOCSPResponse.response_data)r!   r"   r#   rr   r©   r(   rE   r?   rl   r®   rJ   rQ   rN   rm   r¯   rT   r±   r%   r%   r%   r&   r¬   d  s$   þ




r¬   N)IÚ__doc__Ú
__future__r   r   r   r   Ú_errorsr   Zalgosr   r	   Úcorer
   r   r   r   r   r   r   r   r   r   r   r   r   r‹   r   r   Úkeysr   Úx509r   r   r   r   r   r'   r)   r*   r,   r4   r6   rR   rS   rU   rV   rW   rX   r]   r^   r_   rd   re   ri   rr   rw   rz   r…   r‡   rˆ   r‰   rŠ   r‘   r’   r“   rŸ   r    r¢   r£   r¤   r§   r©   r¬   r%   r%   r%   r&   Ú<module>   sZ   
<	9	Zx
	