o
    vhPJ                     @   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&   M/var/www/html/hyperkenya/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
	