o
    Œõ±jPJ  ã                   @   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                   @   ó   e Zd ZddiZdS )ÚVersionr   Úv1N©Ú__name__Ú
__module__Ú__qualname__Ú_map© r&   r&   ú‚/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asn1crypto/ocsp.pyr   (   ó    ÿr   c                   @   s(   e Zd ZdefdefdefdefgZdS )ÚCertIdÚhash_algorithmÚissuer_name_hashÚissuer_key_hashÚ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 )ÚServiceLocatorÚissuerÚlocatorN)r"   r#   r$   r   r   r.   r&   r&   r&   r'   r/   7   s    þr/   c                   @   r   )ÚRequestExtensionIdz1.3.6.1.5.5.7.48.1.7Úservice_locatorNr!   r&   r&   r&   r'   r2   >   r(   r2   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©r5   r8   r3   N)
r"   r#   r$   r2   r
   r   r.   Ú	_oid_pairr/   Ú
_oid_specsr&   r&   r&   r'   r4   D   s    ýÿr4   c                   @   ó   e Zd ZeZdS )ÚRequestExtensionsN)r"   r#   r$   r4   Ú_child_specr&   r&   r&   r'   r=   Q   ó    r=   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 )ÚRequestÚreq_certÚsingle_request_extensionsr   T©ÚexplicitÚoptionalFNc                 C   ód   t ƒ | _| d D ]$}|d j}d| }t| |ƒr!t| ||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
        rB   r5   ú	_%s_valuer8   r6   TN©ÚsetÚ_critical_extensionsÚnativeÚhasattrÚsetattrÚparsedÚaddÚ_processed_extensions©ÚselfÚ	extensionÚnameÚattribute_namer&   r&   r'   Ú_set_extensions_   ó   


€
zRequest._set_extensionsc                 C   ó   | 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
        ©rQ   rW   rK   ©rS   r&   r&   r'   Úcritical_extensionsq   ó   
zRequest.critical_extensionsc                 C   ó   | j du 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)rQ   rW   Ú_service_locator_valuer\   r&   r&   r'   Úservice_locator_value   ó   

zRequest.service_locator_value)r"   r#   r$   r)   r=   r.   rQ   rK   r`   rW   Úpropertyr]   ra   r&   r&   r&   r'   r@   U   s    þ
r@   c                   @   r<   )ÚRequestsN)r"   r#   r$   r@   r>   r&   r&   r&   r'   rd   Ž   r?   rd   c                   @   r   )ÚResponseTypez1.3.6.1.5.5.7.48.1.1Úbasic_ocsp_responseNr!   r&   r&   r&   r'   re   ’   r(   re   c                   @   r<   )ÚAcceptableResponsesN)r"   r#   r$   re   r>   r&   r&   r&   r'   rg   ˜   r?   rg   c                   @   s"   e Zd ZdefdeddifgZdS )ÚPreferredSignatureAlgorithmÚsig_identifierÚcert_identifierrE   TN)r"   r#   r$   r	   r   r.   r&   r&   r&   r'   rh   œ   s    þrh   c                   @   r<   )ÚPreferredSignatureAlgorithmsN)r"   r#   r$   rh   r>   r&   r&   r&   r'   rk   £   r?   rk   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'   rl   §   s
    
ýrl   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 )	ÚTBSRequestExtensionr5   r6   r7   Fr8   r9   )rm   rn   ro   N)r"   r#   r$   rl   r
   r   r.   r:   r   rg   rk   r;   r&   r&   r&   r'   rq   ¯   s    ý
ýrq   c                   @   r<   )ÚTBSRequestExtensionsN)r"   r#   r$   rq   r>   r&   r&   r&   r'   rr   ¾   r?   rr   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    ©rD   r7   Úrequestor_namer   TrC   Úrequest_listÚrequest_extensionsé   N)r"   r#   r$   r   r   rd   rr   r.   r&   r&   r&   r'   rs   Â   s    ürs   c                   @   r<   )ÚCertificatesN)r"   r#   r$   r   r>   r&   r&   r&   r'   rz   Ë   r?   rz   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   TrC   N)r"   r#   r$   r	   r   rz   r.   r&   r&   r&   r'   r{   Ï   s
    ýr{   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_requestÚoptional_signaturer   TrC   FNc                 C   sh   t ƒ | _| d d D ]$}|d j}d| }t| |ƒr#t| ||d jƒ |d jr.| j |¡ q
d| _dS )	rG   r€   rx   r5   rH   r8   r6   TNrI   rR   r&   r&   r'   rW   ã   s   


€
zOCSPRequest._set_extensionsc                 C   rY   rZ   r[   r\   r&   r&   r'   r]   õ   r^   zOCSPRequest.critical_extensionsc                 C   r_   )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©rQ   rW   Ú_nonce_valuer\   r&   r&   r'   Únonce_value  rb   zOCSPRequest.nonce_valuec                 C   r_   )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)rQ   rW   Ú_acceptable_responses_valuer\   r&   r&   r'   Úacceptable_responses_value  s   
z&OCSPRequest.acceptable_responses_valuec                 C   r_   )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)rQ   rW   Ú%_preferred_signature_algorithms_valuer\   r&   r&   r'   Ú$preferred_signature_algorithms_value   ó   
z0OCSPRequest.preferred_signature_algorithms_value)r"   r#   r$   rs   r{   r.   rQ   rK   rƒ   r…   r‡   rW   rc   r]   r„   r†   rˆ   r&   r&   r&   r'   r   ×   s$    þ


r   c                   @   ó   e Zd ZdddddddœZdS )	ÚOCSPResponseStatusÚ
successfulÚmalformed_requestÚinternal_errorÚ	try_laterÚsign_requiredÚunauthorized)r   r   ry   é   é   é   Nr!   r&   r&   r&   r'   r‹   1  s    
úr‹   c                   @   s(   e Zd ZdeddifdeddifgZdS )ÚResponderIdÚby_namerD   r   Úby_keyry   N)r"   r#   r$   r   r   Ú_alternativesr&   r&   r&   r'   r•   <  s    þr•   c                   @   ó    e Zd Zdd„ Zedd„ ƒZdS )Ú
StatusGoodc                 C   ó6   |du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©rS   Úvaluer&   r&   r'   rJ   E  ó   ü
zStatusGood.setc                 C   ó   dS )Nrœ   r&   r\   r&   r&   r'   rL   W  ó   zStatusGood.nativeN©r"   r#   r$   rJ   rc   rL   r&   r&   r&   r'   rš   D  ó    rš   c                   @   r™   )ÚStatusUnknownc                 C   r›   )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'   rJ   ^  r¥   zStatusUnknown.setc                 C   r¦   )Nr«   r&   r\   r&   r&   r'   rL   p  r§   zStatusUnknown.nativeNr¨   r&   r&   r&   r'   rª   ]  r©   rª   c                   @   s$   e Zd ZdefdedddœfgZdS )ÚRevokedInfoÚrevocation_timeÚrevocation_reasonr   TrC   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œ   Úimplicitr   Úrevokedr   r«   ry   N)r"   r#   r$   rš   r¬   rª   r˜   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 )
ÚCrlIdÚcrl_urlr   TrC   Úcrl_numr   Úcrl_timery   N)r"   r#   r$   r   r   r   r.   r&   r&   r&   r'   r²   „  s
    ýr²   c                   @   rŠ   )	Ú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 )	ÚSingleResponseExtensionr5   r6   r7   Fr8   r9   )r·   r¸   r¹   rº   r»   r¼   N)r"   r#   r$   r¶   r
   r   r.   r:   r²   r   r   r   r   r;   r&   r&   r&   r'   r½   š  s    ý
úr½   c                   @   r<   )ÚSingleResponseExtensionsN)r"   r#   r$   r½   r>   r&   r&   r&   r'   r¾   ¬  r?   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 )ÚSingleResponseÚcert_idÚcert_statusÚthis_updateÚnext_updater   TrC   Úsingle_extensionsr   FNc                 C   rF   )rG   rÄ   r5   rH   r8   r6   TNrI   rR   r&   r&   r'   rW   Á  rX   zSingleResponse._set_extensionsc                 C   rY   rZ   r[   r\   r&   r&   r'   r]   Ó  r^   z"SingleResponse.critical_extensionsc                 C   r_   )z¬
        This extension is used to locate the CRL that a certificate's revocation
        is contained within.

        :return:
            None or a CrlId object
        F)rQ   rW   Ú
_crl_valuer\   r&   r&   r'   Ú	crl_valueá  rb   zSingleResponse.crl_valuec                 C   r_   )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)rQ   rW   Ú_archive_cutoff_valuer\   r&   r&   r'   Úarchive_cutoff_valueï  rb   z#SingleResponse.archive_cutoff_valuec                 C   r_   )zŽ
        This extension indicates the reason that a certificate was revoked.

        :return:
            None or a CRLReason object
        F)rQ   rW   Ú_crl_reason_valuer\   r&   r&   r'   Úcrl_reason_valueý  ó   
	zSingleResponse.crl_reason_valuec                 C   r_   )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)rQ   rW   Ú_invalidity_date_valuer\   r&   r&   r'   Úinvalidity_date_value
  r‰   z$SingleResponse.invalidity_date_valuec                 C   r_   )z—
        This extension indicates the issuer of the certificate in question.

        :return:
            None or an x509.GeneralNames object
        F)rQ   rW   Ú_certificate_issuer_valuer\   r&   r&   r'   Úcertificate_issuer_value  rË   z'SingleResponse.certificate_issuer_value)r"   r#   r$   r)   r¯   r   r¾   r.   rQ   rK   rÅ   rÇ   rÉ   rÌ   rÎ   rW   rc   r]   rÆ   rÈ   rÊ   rÍ   rÏ   r&   r&   r&   r'   r¿   °  s6    û




r¿   c                   @   r<   )Ú	ResponsesN)r"   r#   r$   r¿   r>   r&   r&   r&   r'   rÐ   (  r?   rÐ   c                   @   s   e Zd ZdddœZdS )ÚResponseDataExtensionIdrm   Úextended_revoke)rp   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 )	ÚResponseDataExtensionr5   r6   r7   Fr8   r9   )rm   rÒ   N)r"   r#   r$   rÑ   r
   r   r.   r:   r   r   r;   r&   r&   r&   r'   rÓ   3  s    ý
þrÓ   c                   @   r<   )ÚResponseDataExtensionsN)r"   r#   r$   rÓ   r>   r&   r&   r&   r'   rÔ   A  r?   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 )ÚResponseDatart   r   r    ru   Úresponder_idÚproduced_atÚ	responsesÚresponse_extensionsr   TrC   N)	r"   r#   r$   r   r•   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_datar|   r}   r~   r   TrC   N)r"   r#   r$   rÕ   r	   r   rz   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Þ   rf   N)	r"   r#   r$   re   r   r.   r:   rÚ   r;   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 )ÚOCSPResponseÚresponse_statusÚresponse_bytesr   TrC   FNc                 C   sr   t ƒ | _| d d jd d D ]$}|d j}d| }t| |ƒr(t| ||d jƒ |d jr3| j |¡ qd	| _d
S )rG   rá   rÞ   rÛ   rÙ   r5   rH   r8   r6   TN)rJ   rK   rO   rL   rM   rN   rP   rQ   rR   r&   r&   r'   rW   o  s   


€
zOCSPResponse._set_extensionsc                 C   rY   rZ   r[   r\   r&   r&   r'   r]   �  r^   z OCSPResponse.critical_extensionsc                 C   r_   )z§
        This extension is used to prevent replay attacks on the request/response
        exchange

        :return:
            None or an OctetString object
        Fr‚   r\   r&   r&   r'   r„   �  rb   zOCSPResponse.nonce_valuec                 C   r_   )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)rQ   rW   Ú_extended_revoke_valuer\   r&   r&   r'   Úextended_revoke_value�  rb   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Þ   ©rO   r\   r&   r&   r'   rf   «  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ä   r\   r&   r&   r'   Úresponse_data¶  s   	zOCSPResponse.response_data)r"   r#   r$   r‹   rÜ   r.   rQ   rK   rƒ   râ   rW   rc   r]   r„   rã   rf   rå   r&   r&   r&   r'   rß   d  s&    þ




rß   N)IÚ__doc__Ú
__future__r   r   r   r   Ú_errorsr   Ú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/   r2   r4   r=   r@   rd   re   rg   rh   rk   rl   rq   rr   rs   rz   r{   r   r‹   r•   rš   rª   r¬   r¯   r²   r¶   r½   r¾   r¿   rÐ   rÑ   rÓ   rÔ   rÕ   rÚ   rÜ   rß   r&   r&   r&   r'   Ú<module>   s\   
<	9	Zx
	