U
    g                     @   s   d dl m Z  d dlmZ d dlZd dl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 d dlmZ d	d
lmZ d	dlmZmZ ddlmZ ddlmZ dgZG dd deZdS )    )datetime)OptionalN)algoscmscorekeystspx509)hashesserialization)PKCS1v15)RSAPrivateKey)CertificateStore   )general)get_pyca_cryptography_hashsimple_cms_attribute   )TimeStamper)	get_nonceDummyTimeStamperc                       sb   e Zd ZdZdejejee	 ee
 d fddZejejddd	Zejejdd
dZ  ZS )r   z
    Timestamper that acts as its own TSA. It accepts all requests and
    signs them using the certificate provided.
    Used for testing purposes.
    NT)tsa_certtsa_keycerts_to_embedfixed_dtc                    s8   || _ || _t|pd| _|| _|| _t j|d d S )N )include_nonce)r   r   listr   r   override_mdsuper__init__)selfr   r   r   r   r   r   	__class__r   H/tmp/pip-unpacked-wheel-owvgwkas/pyhanko/sign/timestamps/dummy_client.pyr       s    	zDummyTimeStamper.__init__)reqreturnc                 C   s  t dt di}|d }| j}|d kr8|d d j}td|i}| jpZtj	t
 d}dt d|t |tjd	| jjd
d}|d jd k	r|d |d< t |}| }	t|}
t|
}||	 | }ttddtdtdt|itdt | jtd|g}t!j"| j# d d}t$|t%s>t&d|'| t( t|) }t*dt+dt,| jj-| jj.di|t/ddi||d}t0| j1}|2| j dt3|ft4t5dt6|	d||gd}t7t5dt8|d}t 9||dS )NstatusZgrantedmessage_imprintZhash_algorithm	algorithm)tzZv1z1.3.6.1.4.1.4146.2.2Zdirectory_name)namevalue)versionpolicyr(   serial_numberZgen_timeZtsanoncecontent_typetst_infoZsigning_timeZutc_timeZsigning_certificateZmessage_digest)passwordzDummy timestamper is RSA-only.Zissuer_and_serial_number)issuerr/   Zrsassa_pkcs1v15)r-   ZsidZdigest_algorithmZsignature_algorithmsigned_attrs	signatureZv3)r1   content)r-   Zdigest_algorithmsZencap_content_infoZcertificatesZsigner_infossigned_data)r'   Ztime_stamp_token):r   ZPKIStatusInfoZ	PKIStatusr   Znativer   ZDigestAlgorithmr   r   nowtzlocalZget_localzoneZObjectIdentifierr   r	   ZGeneralNamer   subjectZTSTInfodumpr   r
   ZHashupdatefinalizer   ZCMSAttributesr   ZTimer   ZUTCTimer   Zas_signing_certificater   Zload_der_private_keyr   
isinstancer   NotImplementedErrorsignr   upperZ
SignerInfoZSignerIdentifierZIssuerAndSerialNumberr4   r/   ZSignedDigestAlgorithmsetr   addZDigestAlgorithmsZEncapsulatedContentInfoZContentTypeZParsableOctetStringZContentInfoZ
SignedDataTimeStampResp)r!   r%   r'   r(   Zmd_algorithmZdigest_algorithm_objdtZtst_info_argsr2   Ztst_info_dataZmd_specZmdZmessage_digest_valuer5   Zpriv_keyr6   Zsig_infocertsr8   Ztstr   r   r$   request_tsa_response*   s     


 
 
 


z%DummyTimeStamper.request_tsa_responsec                    s
   |  |S )N)rH   )r!   r%   r   r   r$   async_request_tsa_response   s    z+DummyTimeStamper.async_request_tsa_response)NNTN)__name__
__module____qualname____doc__r	   ZCertificater   ZPrivateKeyInfor   r   r   r    r   ZTimeStampReqrE   rH   rI   __classcell__r   r   r"   r$   r      s   
    i)r   typingr   r:   Z
asn1cryptor   r   r   r   r   r	   Zcryptography.hazmat.primitivesr
   r   Z1cryptography.hazmat.primitives.asymmetric.paddingr   Z-cryptography.hazmat.primitives.asymmetric.rsar   Zpyhanko_certvalidator.registryr    r   r   r   apir   Zcommon_utilsr   __all__r   r   r   r   r$   <module>   s    