U
    ;g                     @   s  d dl m Z  d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dl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edd d!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/d0 d0eZ#G d1d2 d2eZ$G d3d4 d4e#Z%G d5d6 d6e	Z&G d7d8 d8e	Z'd9S ):    )datetime)ListOptionalTypeTypeVar)	CRLReason)InvalidSignature)ValProcState)ValidationPathc                   @   s   e Zd ZdS )	PathErrorN__name__
__module____qualname__ r   r   @/tmp/pip-unpacked-wheel-hgp_x7fx/pyhanko_certvalidator/errors.pyr      s   r   c                   @   s   e Zd ZdS )PathBuildingErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )CertificateFetchErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )CRLValidationErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )CRLNoMatchesErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )CRLFetchErrorNr   r   r   r   r   r       s   r   c                       s0   e Zd Zdeee ee d fddZ  ZS )CRLValidationIndeterminateErrorNmsgfailuressuspect_stalec                    s$   || _ || _|| _t || d S Nr   r   r   super__init__selfr   r   r   	__class__r   r   r   %   s    z(CRLValidationIndeterminateError.__init__)N	r   r   r   strr   r   r   r   __classcell__r   r   r"   r   r   $   s    r   c                   @   s   e Zd ZdS )OCSPValidationErrorNr   r   r   r   r   r'   1   s   r'   c                   @   s   e Zd ZdS )OCSPNoMatchesErrorNr   r   r   r   r   r(   5   s   r(   c                       s0   e Zd Zdeee ee d fddZ  ZS ) OCSPValidationIndeterminateErrorNr   c                    s$   || _ || _|| _t || d S r   r   r    r"   r   r   r   :   s    z)OCSPValidationIndeterminateError.__init__)Nr$   r   r   r"   r   r)   9   s    r)   c                   @   s   e Zd ZdS )OCSPFetchErrorNr   r   r   r   r   r*   F   s   r*   c                       s"   e Zd Zed fddZ  ZS )ValidationError)messagec                    s   || _ t | d S r   )Zfailure_msgr   r   )r!   r,   r"   r   r   r   K   s    zValidationError.__init__)r   r   r   r%   r   r&   r   r   r"   r   r+   J   s   r+   TPathErrPathValidationError)boundc                       s@   e Zd Zeee eeedddZeed fddZ	  Z
S )r.   )clsr   
proc_statereturnc                 C   s   | ||dS N)r1   r   )r0   r   r1   r   r   r   
from_stateT   s    zPathValidationError.from_state)r   r1   c                   sP   |j | _ |j| _|jj}|jj}|d k	r0|d k	s4t|| _|| _t 	| d S r   )
Z
is_ee_certZis_side_validationZcert_path_stackheadlastAssertionErrorcurrent_pathZoriginal_pathr   r   )r!   r   r1   currentorigr"   r   r   r   Z   s    zPathValidationError.__init__)r   r   r   classmethodr   r-   r%   r	   r4   r   r&   r   r   r"   r   r.   S   s     c                       s>   e Zd ZeeeeedddZeeed fddZ	  Z
S )RevokedError)reasonrevocation_dtrevinfo_typer1   c           	   
   C   sN   |j }|d}|d}| d|  d| d| d| d
}t||||S )Nz%Y-%m-%dz%H:%M:%Sz indicates z was revoked at z on z	, due to .)Zhuman_friendlystrftimedescribe_certr<   )	r0   r=   r>   r?   r1   Z
reason_strdatetimer   r   r   r   formatf   s    

$zRevokedError.format)r=   r>   r1   c                    s    || _ || _t j||d d S r3   )r=   r>   r   r   )r!   r   r=   r>   r1   r"   r   r   r   w   s    zRevokedError.__init__)r   r   r   r;   r   r   r%   r	   rE   r   r&   r   r   r"   r   r<   e   s   r<   c                   @   s   e Zd ZdS )InsufficientRevinfoErrorNr   r   r   r   r   rF      s   rF   c                       s<   e Zd ZeeeedddZeeed fddZ  Z	S )StaleRevinfoError)r   time_cutoffr1   c                 C   s   t |||S r   )rG   )r0   r   rH   r1   r   r   r   rE      s    zStaleRevinfoError.formatc                    s   || _ t j||d d S r3   )rH   r   r   )r!   r   rH   r1   r"   r   r   r      s    zStaleRevinfoError.__init__)
r   r   r   r;   r%   r   r	   rE   r   r&   r   r   r"   r   rG      s   	  rG   c                   @   s   e Zd ZdS )InsufficientPOEErrorNr   r   r   r   r   rI      s   rI   c                       s8   e Zd ZeeedddZeed fddZ  ZS )ExpiredError)
expired_dtr1   c                C   s&   d|   d|d }t|||S )N(The path could not be validated because z	 expired %Y-%m-%d %H:%M:%SZ)rB   rA   rJ   )r0   rK   r1   r   r   r   r   rE      s    zExpiredError.formatc                    s   || _ t j||d d S r3   )rK   r   r   )r!   r   rK   r1   r"   r   r   r      s    zExpiredError.__init__	r   r   r   r;   r   r	   rE   r   r&   r   r   r"   r   rJ      s
   rJ   c                       s8   e Zd ZeeedddZeed fddZ  ZS )NotYetValidError)
valid_fromr1   c                C   s&   d|   d|d }t|||S )NrL   z is not valid until rM   )rB   rA   rO   )r0   rP   r1   r   r   r   r   rE      s    zNotYetValidError.formatc                    s   || _ t j||d d S r3   )rP   r   r   )r!   r   rP   r1   r"   r   r   r      s    zNotYetValidError.__init__rN   r   r   r"   r   rO      s
   rO   c                   @   s   e Zd ZdS )InvalidCertificateErrorNr   r   r   r   r   rQ      s   rQ   c                       sJ   e Zd Zddee d fddZedeeee d dddZ	  Z
S )	DisallowedAlgorithmErrorN)banned_sincec                   s   || _ t j|| d S r   )rS   r   r   )r!   rS   argskwargsr"   r   r   r      s    z!DisallowedAlgorithmError.__init__)r   r1   rS   r2   c                 C   s   | |||dS )N)rS   r1   r   )r0   r   r1   rS   r   r   r   r4      s    z#DisallowedAlgorithmError.from_state)N)r   r   r   r   r   r   r;   r%   r	   r4   r&   r   r   r"   r   rR      s    rR   c                   @   s   e Zd ZdS )InvalidAttrCertificateErrorNr   r   r   r   r   rV      s   rV   c                   @   s   e Zd ZdS )PSSParameterMismatchNr   r   r   r   r   rW      s   rW   c                   @   s   e Zd ZdS )DSAParametersUnavailableNr   r   r   r   r   rX      s   rX   N)(r   typingr   r   r   r   Zasn1crypto.crlr   cryptography.exceptionsr   Zpyhanko_certvalidator._stater	   Zpyhanko_certvalidator.pathr
   	Exceptionr   r   r   r   r   r   r   r'   r(   r)   r*   r+   r-   r.   r<   rF   rG   rI   rJ   rO   rQ   rR   rV   rW   rX   r   r   r   r   <module>   s<   