
     h                         d dl Z d dlmZ d dlmZmZmZ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 dlmZmZ n# e$ rZdxZZY dZ[ndZ[ww xY wd d	lmZ  e j        d
          Z G d d          ZdS )    N)Path)x509pemcrlocsp)IncrementalPdfFileWriter)signers
timestamps)SigSeedSubFilter)ValidationContext)open_pkcs11_sessionPKCS11Signer)getFile	xhtml2pdfc                   X   e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             ZdS )PDFSignaturec                 t    d| v r3| d         }t          |t                    r|                                }|S d S )N
passphrase)
isinstancestrencode)configr   s     T/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/xhtml2pdf/builders/signs.pyget_passphrasezPDFSignature.get_passphrase   sH    6!!-J*c** 1'..00
	 "!    c                    g }d| v r| d         }t          |t                    s|g}|D ]}t          |t                    st          |t                    rlt	          |          }t          j        |                                          \  }}}|                    t          j
                            |                     |                    |           |sd S |S )Nca_chain)r   listr   r   r   r   unarmorgetDataappendr   Certificateload)r   keychainschaincpisafile_digicert_ca_bytess           r   
get_chainszPDFSignature.get_chains   s    :&EeT**   % %a&& %*Q*<*< %%ajjH.1k(:J:J:L:L.M.M+Aq+MM$"2"7"78I"J"JKKKKMM!$$$$ 	Fr   c                     t                               |           }d| v rRd| v rP|rPt                               | d          }t          j                            | d         | d         ||          }|S d S d S d S )Nr$   certr   )ca_chain_fileskey_passphrase)r   r   r+   r	   SimpleSignerr#   )r   r   r&   signers       r   test_simple_signerzPDFSignature.test_simple_signer/   s    !0088
F??v//J/ ++FJ??E)..uvf~$) /  F
 M ?////r   c                     t                               |           }d| v r+|r+t          j                            | d         |          }|S d S d S )Npfx_file)r4   r   )r   r   r	   r0   load_pkcs12)r   r   r1   s      r   test_pkcs12_signerzPDFSignature.test_pkcs12_signer;   sa    !0088
J)55
+
 6  F M	  r   c                     t                               |           }t          |d d d d ddddd d d          }|D ]8}|| v r2|dk    r!t                               | d          }|||<   -| |         ||<   9t	          di |}|S )NFT )pkcs11_session
cert_labelsigning_certr   	key_label
prefer_pssembed_rootsother_certs_to_pull
bulk_fetchkey_idcert_iduse_raw_mechanismr   )r   get_sessiondictr+   r   )r   sessionkeysr$   r&   r1   s         r   test_pkcs11_signerzPDFSignature.test_pkcs11_signerD   s    **6227#!%!T$$(*t &+- - -  	, 	,Cf}}*$$(33FJGGE %DII &sDI%%%%r   c                 H    d| v rt          j        | d                   }|S d S )Ntsa)url)r
   HTTPTimeStamper)r   
tst_clients     r   get_timestampszPDFSignature.get_timestamps\   s/    F??#3uFFFJ ?r   c                 "   d| vrd S d }| d         }|dk    rt                               |           }n]|dk    r7t          t          dt                    t                               |           }n |dk    rt                               |           }|S )Nenginepkcs12pkcs11zpyhanko.sign.pkcs11 requires pyHanko to be installed with the [pkcs11] option. You can install missing dependencies by running "pip install 'pyHanko[pkcs11]'".simple)r   r6   r   ImportErrorerH   r2   )r   r1   rP   s      r   get_signerszPDFSignature.get_signersb   s    6!!F!X!44V<<FFx#!QRS   "44V<<FFx!44V<<Fr   c                     |d         dk    rt                               | ||          S t                               | ||          S )Ntypelta)r   lta_signsimple_sign)	inputfileoutputr   s      r   signzPDFSignature.signx   sA    &>U""((FFCCC++IvvFFFr   c                 >   g }| D ]}t          |t                    st          |t                    rVt          |          }t          j                            |                                          }|                    |           |                    |           |S N)	r   r   r   r   r   CertificateListr#   r    r!   )crls	list_crlsxr(   	cert_lists        r   
parse_crlszPDFSignature.parse_crls   s    	 	$ 	$A!T"" $jC&8&8 $ /44X5E5E5G5GHH	  ++++  ####r   c                     g }| D ]W}t          |          }t          j                            |                                          }|                    |           X|S r`   )r   r   OCSPResponser#   r    r!   )oscps	list_oscprd   r(   datas        r   
parse_oscpzPDFSignature.parse_oscp   s`    	 	# 	#AqzzH$))(*:*:*<*<==DT""""r   c                 r   t          d          }d| v rd| d         v r/t                              | d         d                   | d         d<   d| d         v r/t                              | d         d                   | d         d<   d| d         v r$t                              | d          | d         d<   d| d         v r$t                              | d          | d         d<   d| d         v r$t                              | d          | d         d<   |                    | d                    t          d	i |S )
NT)allow_fetchingvalidation_contextrb   ocspstrust_rootsextra_trust_rootsother_certsr8   )rE   r   rf   rl   r+   updater   )r   contexts     r   get_validation_contextz#PDFSignature.get_validation_context   s^    D)))6)) 45557C7N7NvVjOklrOs7t7t+,V46"67778D8O8OPVWkPlmtPu8v8v+,W5'; <<<>J>U>UV\^k>l>l+,];"f-A&BBBDPD[D[\bdwDxDx+,-@A'; <<<>J>U>UV\^k>l>l+,]; NN6"67888 ++7+++r   c                     t          ddd d d dddt          j        d t                              |                     }d| v r|                    | d                    |S )N
Signature1sha256FT)
field_namemd_algorithmlocationreasonnamecertifyembed_validation_infouse_pades_lta	subfiltertimestamp_field_namero   meta)rE   r   PADESr   rv   rt   )r   r   s     r   get_signature_metazPDFSignature.get_signature_meta   sm     \'4(,D,2'+%1%H%H%P%P   VKKv'''r   c                     t                               |          }|rWt          |           }t                               |          }t	          j        |t	          j        d          |||           dS d S )Nrx   )rz   )r1   r]   timestamperT)r   rV   IncrementalPdfWriterrN   r	   sign_pdfPdfSignatureMetadata)r\   r]   r   r1   wr   s         r   r[   zPDFSignature.simple_sign   s    ))&11 	$Y//A&55f==K7/<HHHf+    4	 	r   c                 $   t                               |          }t                               |          }t          |           }t                               |          }t          j        di |}|r|rt          j        |||||           dS d S d S )N)signature_metar1   r   r]   Tr8   )r   rV   rN   r   r   r	   r   r   )r\   r]   r   r1   r   r   r   r   s           r   rZ   zPDFSignature.lta_sign   s    ))&11"11&99 ++,,V44 5==== 	k 	Q~f)4V    4		 	 	 	r   c                     |                      dd           }|                      dd           }|                      dd           }|                      dd           }||||t          ||||          }|S d S d S d S )Nlib_locationslot_notoken_labeluser_pin)r   r   r   )getr   )r   r   r   r   r   rF   s         r   rD   zPDFSignature.get_session   s    zz.$77**Y--jj55::j$//L$<"k&=- '{%' ' '   $<$<&=&=r   N)__name__
__module____qualname__staticmethodr   r+   r2   r6   rH   rN   rV   r^   rf   rl   rv   r   r[   rZ   rD   r8   r   r   r   r      s         \   \" 	 	 \	   \   \.   \
   \* G G \G 	 	 \	   \ , , \,.   \ 	 	 \	   \   \  r   r   )loggingpathlibr   
asn1cryptor   r   r   r   $pyhanko.pdf_utils.incremental_writerr   pyhanko.signr	   r
   pyhanko.sign.fieldsr   pyhanko_certvalidatorr   pyhanko.sign.pkcs11r   r   rT   rU   xhtml2pdf.filesr   	getLoggerlogr   r8   r   r   <module>r      sH          + + + + + + + + + + + + I I I I I I , , , , , , , , 0 0 0 0 0 0 3 3 3 3 3 3,EEEEEEEEE , , ,'++, $ # # # # #g$$N N N N N N N N N Ns   ; A A		A