o
    vh                     @   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                
       st   e Zd ZdZ				ddejdejdee	 dee
 f fdd	Zd
ejdejfddZd
ejdejf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   b/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/pyhanko/sign/timestamps/dummy_client.pyr       s   	zDummyTimeStamper.__init__reqreturnc                 C   s  t dt di}|d }| j}|d u r|d d j}td|i}| jp-tj	t
 d}dt d|t |tjd	| jjd
d}|d jd urO|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%st&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statusgrantedmessage_imprinthash_algorithm	algorithm)tzv1z1.3.6.1.4.1.4146.2.2directory_name)namevalue)versionpolicyr)   serial_numbergen_timetsanoncecontent_typetst_infosigning_timeutc_timesigning_certificatemessage_digest)passwordzDummy timestamper is RSA-only.issuer_and_serial_number)issuerr3   rsassa_pkcs1v15)r1   siddigest_algorithmsignature_algorithmsigned_attrs	signaturev3)r7   content)r1   digest_algorithmsencap_content_infocertificatessigner_infossigned_data)r'   time_stamp_token):r   PKIStatusInfo	PKIStatusr   nativer   DigestAlgorithmr   r   nowtzlocalget_localzoneObjectIdentifierr   r	   GeneralNamer   subjectTSTInfodumpr   r
   Hashupdatefinalizer   CMSAttributesr   Timer   UTCTimer   as_signing_certificater   load_der_private_keyr   
isinstancer   NotImplementedErrorsignr   upper
SignerInfoSignerIdentifierIssuerAndSerialNumberr?   r3   SignedDigestAlgorithmsetr   addDigestAlgorithmsEncapsulatedContentInfoContentTypeParsableOctetStringContentInfo
SignedDataTimeStampResp)r!   r%   r'   r)   md_algorithmdigest_algorithm_objdttst_info_argsr8   tst_info_datamd_specmdmessage_digest_valuerD   priv_keyrE   sig_infocertsrL   tstr   r   r$   request_tsa_response+   s   









z%DummyTimeStamper.request_tsa_responsec                    s   |  |S )N)r   )r!   r%   r   r   r$   async_request_tsa_response   s   
z+DummyTimeStamper.async_request_tsa_response)NNTN)__name__
__module____qualname____doc__r	   Certificater   PrivateKeyInfor   r   r   r    r   TimeStampReqrr   r   r   __classcell__r   r   r"   r$   r      s*    
h)r   typingr   rS   
asn1cryptor   r   r   r   r   r	   cryptography.hazmat.primitivesr
   r   1cryptography.hazmat.primitives.asymmetric.paddingr   -cryptography.hazmat.primitives.asymmetric.rsar   pyhanko_certvalidator.registryr    r   r   r   apir   common_utilsr   __all__r   r   r   r   r$   <module>   s     