3
'YE                 @   s  d Z ddlmZmZmZ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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/d0 d0eZ4G d1d2 d2eZ5G d3d4 d4eZ6G d5d6 d6eZ7G d7d8 d8eZ8G d9d: d:eZ9G d;d< d<eZ:G d=d> d>eZ;G d?d@ d@eZ<G dAdB dBeZ=G dCdD dDeZ>G dEdF dFeZ?G dGdH dHeZ@G dIdJ dJeZAG dKdL dLeZBG dMdN dNeZCG dOdP dPeZDdQS )Rz
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   )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#   1/usr/lib/python3/dist-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'   6   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_locatorN)r   r    r!   r"   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_valuer)   N)r+   r.   )
r   r    r!   r(   r	   r   r&   	_oid_pairr'   
_oid_specsr#   r#   r#   r$   r*   C   s
   
r*   c               @   s   e Zd ZeZdS )RequestExtensionsN)r   r    r!   r*   _child_specr#   r#   r#   r$   r1   P   s   r1   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   sh   t  | _xT| d D ]H}|d j}d| }t| |rDt| ||d j |d jr| jj| qW d| _dS )zv
        Sets common named extensions to private attributes and creates a list
        of critical extensions
        r4   r+   z	_%s_valuer.   r,   TN)set_critical_extensionsnativehasattrsetattrparsedadd_processed_extensions)self	extensionnameattribute_namer#   r#   r$   _set_extensions^   s    


zRequest._set_extensionsc             C   s   | j s| j  | 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
        )r>   rC   r8   )r?   r#   r#   r$   critical_extensionsp   s    
zRequest.critical_extensionsc             C   s   | j dkr| j  | 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)r>   rC   _service_locator_value)r?   r#   r#   r$   service_locator_value~   s    

zRequest.service_locator_value)r   r    r!   r%   r1   r&   r>   r8   rE   rC   propertyrD   rF   r#   r#   r#   r$   r3   T   s   r3   c               @   s   e Zd ZeZdS )RequestsN)r   r    r!   r3   r2   r#   r#   r#   r$   rH      s   rH   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_responseN)r   r    r!   r"   r#   r#   r#   r$   rI      s   rI   c               @   s   e Zd ZeZdS )AcceptableResponsesN)r   r    r!   rI   r2   r#   r#   r#   r$   rK      s   rK   c               @   s"   e Zd ZdefdeddifgZdS )PreferredSignatureAlgorithmZsig_identifierZcert_identifierr6   TN)r   r    r!   r   r   r&   r#   r#   r#   r$   rL      s   rL   c               @   s   e Zd ZeZdS )PreferredSignatureAlgorithmsN)r   r    r!   rL   r2   r#   r#   r#   r$   rM      s   rM   c               @   s   e Zd ZddddZdS )TBSRequestExtensionIdnonceacceptable_responsespreferred_signature_algorithms)z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.8N)r   r    r!   r"   r#   r#   r#   r$   rN      s   rN   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-   Fr.   )rO   rP   rQ   N)r+   r.   )r   r    r!   rN   r	   r   r&   r/   r   rK   rM   r0   r#   r#   r#   r$   rR      s   
rR   c               @   s   e Zd ZeZdS )TBSRequestExtensionsN)r   r    r!   rR   r2   r#   r#   r#   r$   rS      s   rS   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   )r5   r-   Zrequestor_namer   T)r5   r6   Zrequest_listrequest_extensions   N)r   r    r!   r   r   rH   rS   r&   r#   r#   r#   r$   rT      s   rT   c               @   s   e Zd ZeZdS )CertificatesN)r   r    r!   r   r2   r#   r#   r#   r$   rX      s   rX   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   T)r5   r6   N)r   r    r!   r   r   rX   r&   r#   r#   r#   r$   rY      s   rY   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   T)r5   r6   FNc             C   sl   t  | _xX| d d D ]H}|d j}d| }t| |rHt| ||d j |d jr| jj| qW d| _dS )	zv
        Sets common named extensions to private attributes and creates a list
        of critical extensions
        r^   rV   r+   z	_%s_valuer.   r,   TN)r7   r8   r9   r:   r;   r<   r=   r>   )r?   r@   rA   rB   r#   r#   r$   rC      s    


zOCSPRequest._set_extensionsc             C   s   | j s| j  | 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
        )r>   rC   r8   )r?   r#   r#   r$   rD      s    
zOCSPRequest.critical_extensionsc             C   s   | j dkr| j  | 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)r>   rC   _nonce_value)r?   r#   r#   r$   nonce_value  s    

zOCSPRequest.nonce_valuec             C   s   | j dkr| j  | 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)r>   rC   _acceptable_responses_value)r?   r#   r#   r$   acceptable_responses_value  s    
z&OCSPRequest.acceptable_responses_valuec             C   s   | j dkr| j  | 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)r>   rC   %_preferred_signature_algorithms_value)r?   r#   r#   r$   $preferred_signature_algorithms_value  s    
z0OCSPRequest.preferred_signature_algorithms_value)r   r    r!   rT   rY   r&   r>   r8   r_   ra   rc   rC   rG   rD   r`   rb   rd   r#   r#   r#   r$   r]      s   r]   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_requiredZunauthorized)r   r   rW            N)r   r    r!   r"   r#   r#   r#   r$   re   0  s   re   c               @   s(   e Zd ZdeddifdeddifgZdS )ResponderIdZby_namer5   r   Zby_keyrW   N)r   r    r!   r   r   _alternativesr#   r#   r#   r$   ri   ;  s   ri   c               @   s$   e Zd ZdefdedddfgZdS )RevokedInfoZrevocation_timeZrevocation_reasonr   T)r5   r6   N)r   r    r!   r   r   r&   r#   r#   r#   r$   rk   B  s   rk   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 )	
CertStatusZgoodZimplicitr   Zrevokedr   unknownrW   N)r   r    r!   r   rk   rj   r#   r#   r#   r$   rl   I  s   rl   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   T)r5   r6   Zcrl_numr   Zcrl_timerW   N)r   r    r!   r   r   r   r&   r#   r#   r#   r$   rn   Q  s   rn   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.5N)r   r    r!   r"   r#   r#   r#   r$   ro   Y  s   ro   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-   Fr.   )rp   rq   rr   rs   rt   ru   N)r+   r.   )r   r    r!   ro   r	   r   r&   r/   rn   r   r   r   r   r0   r#   r#   r#   r$   rv   g  s   
rv   c               @   s   e Zd ZeZdS )SingleResponseExtensionsN)r   r    r!   rv   r2   r#   r#   r#   r$   rw   y  s   rw   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   T)r5   r6   single_extensionsr   FNc             C   sh   t  | _xT| d D ]H}|d j}d| }t| |rDt| ||d j |d jr| jj| qW d| _dS )zv
        Sets common named extensions to private attributes and creates a list
        of critical extensions
        ry   r+   z	_%s_valuer.   r,   TN)r7   r8   r9   r:   r;   r<   r=   r>   )r?   r@   rA   rB   r#   r#   r$   rC     s    


zSingleResponse._set_extensionsc             C   s   | j s| j  | 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
        )r>   rC   r8   )r?   r#   r#   r$   rD     s    
z"SingleResponse.critical_extensionsc             C   s   | j dkr| j  | 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)r>   rC   
_crl_value)r?   r#   r#   r$   	crl_value  s    

zSingleResponse.crl_valuec             C   s   | j dkr| j  | 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)r>   rC   _archive_cutoff_value)r?   r#   r#   r$   archive_cutoff_value  s    

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

        :return:
            None or a CRLReason object
        F)r>   rC   _crl_reason_value)r?   r#   r#   r$   crl_reason_value  s    	
zSingleResponse.crl_reason_valuec             C   s   | j dkr| j  | 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)r>   rC   _invalidity_date_value)r?   r#   r#   r$   invalidity_date_value  s    
z$SingleResponse.invalidity_date_valuec             C   s   | j dkr| j  | jS )z
        This extension indicates the issuer of the certificate in question.

        :return:
            None or an x509.GeneralNames object
        F)r>   rC   _certificate_issuer_value)r?   r#   r#   r$   certificate_issuer_value  s    	
z'SingleResponse.certificate_issuer_value)r   r    r!   r%   rl   r   rw   r&   r>   r8   rz   r|   r~   r   r   rC   rG   rD   r{   r}   r   r   r   r#   r#   r#   r$   rx   }  s&   rx   c               @   s   e Zd ZeZdS )	ResponsesN)r   r    r!   rx   r2   r#   r#   r#   r$   r     s   r   c               @   s   e Zd ZdddZdS )ResponseDataExtensionIdrO   extended_revoke)z1.3.6.1.5.5.7.48.1.2z1.3.6.1.5.5.7.48.1.9N)r   r    r!   r"   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-   Fr.   )rO   r   N)r+   r.   )r   r    r!   r   r	   r   r&   r/   r   r   r0   r#   r#   r#   r$   r      s   
r   c               @   s   e Zd ZeZdS )ResponseDataExtensionsN)r   r    r!   r   r2   r#   r#   r#   r$   r     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 )ResponseDatarU   r   r   )r5   r-   Zresponder_idZproduced_atZ	responsesresponse_extensionsr   T)r5   r6   N)	r   r    r!   r   ri   r   r   r   r&   r#   r#   r#   r$   r     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_datarZ   r[   r\   r   T)r5   r6   N)r   r    r!   r   r   r   rX   r&   r#   r#   r#   r$   r     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responserJ   N)r   r   )	r   r    r!   rI   r   r&   r/   r   r0   r#   r#   r#   r$   r   %  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   T)r5   r6   FNc             C   sv   t  | _xb| d d jd d D ]H}|d j}d| }t| |rRt| ||d j |d jr | jj| q W d	| _d
S )zv
        Sets common named extensions to private attributes and creates a list
        of critical extensions
        r   r   r   r   r+   z	_%s_valuer.   r,   TN)r7   r8   r<   r9   r:   r;   r=   r>   )r?   r@   rA   rB   r#   r#   r$   rC   <  s    


zOCSPResponse._set_extensionsc             C   s   | j s| j  | 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
        )r>   rC   r8   )r?   r#   r#   r$   rD   N  s    
z OCSPResponse.critical_extensionsc             C   s   | j dkr| j  | jS )z
        This extension is used to prevent replay attacks on the request/response
        exchange

        :return:
            None or an OctetString object
        F)r>   rC   r_   )r?   r#   r#   r$   r`   \  s    

zOCSPResponse.nonce_valuec             C   s   | j dkr| j  | 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)r>   rC   _extended_revoke_value)r?   r#   r#   r$   extended_revoke_valuej  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   )r<   )r?   r#   r#   r$   rJ   x  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!   re   r   r&   r>   r8   r_   r   rC   rG   rD   r`   r   rJ   r   r#   r#   r#   r$   r   1  s   r   N)E__doc__Z
__future__r   r   r   r   Zalgosr   r   Zcorer	   r
   r   r   r   r   r   r   r   r   r   r   r   rp   r   r   keysr   Zx509r   r   r   r   r   r%   r'   r(   r*   r1   r3   rH   rI   rK   rL   rM   rN   rR   rS   rT   rX   rY   r]   re   ri   rk   rl   rn   ro   rv   rw   rx   r   r   r   r   r   r   r   r   r#   r#   r#   r$   <module>   sT   <	9	Zx
	