U
    <gj
                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 ddlmZ dd	d
dddgZG dd deZdd	 Ze
ddd
ZeedddZejee ejdddZedddZdS )    N)Optional)cmstsp)hashes)CertificateStore   )get_pyca_cryptography_hashTimestampRequestError	get_nonceextract_ts_certsdummy_digesthandle_tsp_responseset_tsp_headersc                   @   s   e Zd ZdZdS )r	   zC
    Raised when an error occurs while requesting a timestamp.
    N)__name__
__module____qualname____doc__ r   r   H/tmp/pip-unpacked-wheel-w101_d3s/pyhanko/sign/timestamps/common_utils.pyr	      s   c                   C   s   t ddtd d S )Nz>q      r   )structunpackosurandomr   r   r   r   r
      s    )storec                 #   sj   | d }|d }dd  t  fdd|d D }|D ].}|j}|| |j |jf|kr6|V  q6d S )Ncontentcertificatesc                 S   s0   | d j }t|tjst|d  |d jfS )Nsidissuerserial_number)chosen
isinstancer   ZIssuerAndSerialNumberAssertionErrordumpnative)sir   r   r   r   extract_ts_sid'   s    
z(extract_ts_certs.<locals>.extract_ts_sidc                 3   s   | ]} |V  qd S Nr   ).0r&   r'   r   r   	<genexpr>-   s     z#extract_ts_certs.<locals>.<genexpr>Zsigner_infos)setr!   registerr   r$   r    )Zts_tokenr   Zts_signed_dataZts_certsZ	ts_leavesZ	wrapped_ccr   r*   r   r   #   s    
)md_algorithmreturnc                 C   s   t | }t| S r(   )r   r   Hashfinalize)r/   Zmd_specr   r   r   r   6   s    )responsenoncer0   c           
      C   s   | d }|d j dkr\|d j p"g }d|}|d j p:g }d|}td| d| d| d	 }|d
 d d
 }|jd j }	|d k	r|	|krtd|  dt|	 d|S )NstatusZgrantedstatus_stringz; 	fail_infoz4Timestamp server refused our request: statusString "z", failInfo ""Ztime_stamp_tokenr   Zencap_content_infor4   z<Time stamping authority sent back bad nonce value. Expected z
, but got .)r%   joinr	   parsedhex)
r3   r4   Zpki_status_infoZstatus_strsr6   Z
fail_infosr7   ZtstZtst_infoZnonce_receivedr   r   r   r   ;   s"    

headersc                 C   s   d| d< d| d< | S )Nzapplication/timestamp-queryzContent-Typezapplication/timestamp-replyAcceptr   r=   r   r   r   r   S   s    )r   r   typingr   Z
asn1cryptor   r   Zcryptography.hazmat.primitivesr   Zpyhanko_certvalidator.registryr   Zgeneralr   __all__IOErrorr	   r
   r   strbytesr   ZTimeStampRespZContentInfor   dictr   r   r   r   r   <module>   s,   
 