U
    c                     @   s   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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 )    )datetimeN)algoscmscorekeystspx509)hashesserialization)PKCS1v15)RSAPrivateKey   )general)CertificateStoreget_pyca_cryptography_hashsimple_cms_attribute   )TimeStamper)	get_nonceDummyTimeStamperc                       sZ   e Zd ZdZdejej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-0kb_yl26/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)r0   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IssuerAndSerialNumberr3   r.   ZSignedDigestAlgorithmsetr   addZDigestAlgorithmsZEncapsulatedContentInfoZContentTypeZParsableOctetStringZContentInfoZ
SignedDataTimeStampResp)r    r$   r&   r'   Zmd_algorithmZdigest_algorithm_objdtr1   Ztst_info_dataZmd_specZmdZmessage_digest_valuer4   Zpriv_keyr5   Zsig_infocertsr7   Ztstr   r   r#   request_tsa_response)   s      


 
  
 

z%DummyTimeStamper.request_tsa_responsec                    s
   |  |S )N)rG   )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   ZTimeStampReqrD   rG   rH   __classcell__r   r   r!   r#   r      s        \)r   r9   Z
asn1cryptor   r   r   r   r   r   Zcryptography.hazmat.primitivesr	   r
   Z1cryptography.hazmat.primitives.asymmetric.paddingr   Z-cryptography.hazmat.primitives.asymmetric.rsar    r   r   r   r   apir   Zcommon_utilsr   __all__r   r   r   r   r#   <module>   s    