
    Wwg                         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e      Zy)    )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            
            e Zd ZdZ	 	 	 	 ddej
                  dej                  dee	   dee
   f fdZdej                  dej                  fd	Zdej                  dej                  fd
Z x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.
    tsa_certtsa_keycerts_to_embedfixed_dtc                     || _         || _        t        |xs d      | _        || _        || _        t        |   |       y )N )include_nonce)r   r   listr   r   override_mdsuper__init__)selfr   r   r   r   r   r!   	__class__s          [/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/sign/timestamps/dummy_client.pyr#   zDummyTimeStamper.__init__   sD     !">#7R8 &}5    reqreturnc                    t        j                  dt        j                  d      i      }|d   }| j                  }||d   d   j                  }t        j                  d|i      }| j                  xs( t        j                  t        j                               }dt        j                  d      |t               |t        j                  d	| j                   j"                  
      d}|d   j                  |d   |d<   t        j$                  |      }|j'                         }	t)        |      }
t+        j,                  |
      }|j/                  |	       |j1                         }t3        j4                  t7        dd      t7        dt3        j8                  dt;        j<                  |      i            t7        dt?        j@                  | j                               t7        d|      g      }tC        jD                  | jF                  j'                         d       }tI        |tJ              stM        d      |jO                  |j'                         tQ               t)        |jS                                     }t3        jT                  dt3        jV                  dt3        jX                  | j                   jZ                  | j                   j\                  d      i      |t        j^                  ddi      ||d      }ta        | jb                        }|je                  | j                          dt3        jf                  |f      t3        jh                  t3        jj                  d      t3        jl                  |	      d      ||gd}t3        jn                  t3        jj                  d      t3        jp                  |      d      }t        jr                  ||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)issuerr7   rsassa_pkcs1v15)r5   siddigest_algorithmsignature_algorithmsigned_attrs	signaturev3)r;   content)r5   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IssuerAndSerialNumberrC   r7   SignedDigestAlgorithmsetr   addDigestAlgorithmsEncapsulatedContentInfoContentTypeParsableOctetStringContentInfo
SignedDataTimeStampResp)r$   r(   r+   r-   md_algorithmdigest_algorithm_objdttst_info_argsr<   tst_info_datamd_specmdmessage_digest_valuerH   priv_keyrI   sig_infocertsrP   tsts                       r&   request_tsa_responsez%DummyTimeStamper.request_tsa_response*   sQ    ""HcmmI.F#GH.12C.D''*+;<[IPPL$44,' 
 ]]Fhllg.C.C.EF **+AB.&[##%T]]-B-B
 w<*%(\M'";;}- ,\:[[!
		- !{{}(($^Z@$"CHHj$,,r:J-K$L %)224==A %%57KL

 !55LL$
 (M2%&FGGMMJ&|'9'9';<
	
 >>++2C4M4M*.--*>*>151L1L5	 %9','B'B "34( !-&#
* D''(		$--  !$!5!57K6M!N"%"="=$'OOJ$?"66}E# "%J
 oo # >>>+6
   F!LMMr'   c                 ,   K   | j                  |      S w)N)r   )r$   r(   s     r&   async_request_tsa_responsez+DummyTimeStamper.async_request_tsa_response   s      ((--s   )NNTN)__name__
__module____qualname____doc__r
   Certificater   PrivateKeyInfor   r   r   r#   r	   TimeStampReqrv   r   r   __classcell__)r%   s   @r&   r   r      s     6:'+6""6 $$6 !!12	6
 8$6 fN(8(8 fNS=N=N fNP.##.			.r'   )r   typingr   rW   
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&   <module>r      sB       8 8 @ F G ;  F  #
C.{ C.r'   