
    Xwg!                         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 d d	lmZ  e j.                  e      Z G d
 d      Zy# e$ r dxZZY .w xY w)    N)Path)crlocsppemx509)IncrementalPdfFileWriter)signers
timestamps)SigSeedSubFilter)ValidationContext)PKCS11Signeropen_pkcs11_session)getFilec                       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y)PDFSignaturec                 Z    d| v r'| d   }t        |t              r|j                         }|S y )N
passphrase)
isinstancestrencodeconfigr   s     O/var/www/horilla/myenv/lib/python3.12/site-packages/xhtml2pdf/builders/signs.pyget_passphrasezPDFSignature.get_passphrase   s5    6!-J*c*'..0
    c                 f   g }d| v r| d   }t        |t              s|g}|D ]  }t        |t        t        f      rat	        |      }t        j                  |j                               \  }}}|j                  t        j                  j                  |             z|j                  |        |sy |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$-&qzH.1kk(:J:J:L.M+Aq+MM$"2"2"7"78I"JKMM!$% r   c                     t         j                  |       }d| v rEd| v rA|r?t         j                  | d      }t        j                  j                  | d   | d   ||      S y )Nkeycertr   )ca_chain_fileskey_passphrase)r   r   r+   r	   SimpleSignerr#   )r   r   r&   s      r   test_simple_signerzPDFSignature.test_simple_signer0   sk    !008
F?v/J ++FJ?E'',,uv$)	 -   r   c                     t         j                  |       }d| v r&|r$t        j                  j	                  | d   |      S y )Npfx_file)r4   r   )r   r   r	   r1   load_pkcs12r   s     r   test_pkcs12_signerzPDFSignature.test_pkcs12_signer=   sI    !008
J''33
+
 4   r   c                     t         j                  |       }|d d d d ddddd d dd}|D ]0  }|| v s|dk(  rt         j                  | d      }|||<   )| |   ||<   2 t        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_sessionr+   r   )r   sessionkeysr-   r&   s        r   test_pkcs11_signerzPDFSignature.test_pkcs11_signerF   s    **62% #%!&
  	,Cf}*$(33FJGE %DI &sDI	, #d##r   c                 >    d| v rt        j                  | d         S y )Ntsa)url)r
   HTTPTimeStamper)r   s    r   get_timestampszPDFSignature.get_timestampsb   s!    F?--&-@@r   c                     d| vry d }| d   }|dk(  rt         j                  |       }|S |dk(  r*t        d}t        |      t         j	                  |       }|S |dk(  rt         j                  |       }|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   ImportErrorrG   r2   )r   signerrN   msgs       r   get_signerszPDFSignature.get_signersh   s    6!!X!44V<F  x#: 
 "#&&!44V<F  x!44V<Fr   c                 n    |d   dk(  rt         j                  | ||      S t         j                  | ||      S )Ntypelta)r   lta_signsimple_sign)	inputfileoutputr   s      r   signzPDFSignature.sign   s8    &>U"((FFCC''	66BBr   c                     g }| D ]s  }t        |t        t        f      rJt        |      }t        j
                  j                  |j                               }|j                  |       c|j                  |       u |S N)	r   r   r   r   r   CertificateListr#   r    r!   )crls	list_crlsxr(   	cert_lists        r   
parse_crlszPDFSignature.parse_crls   sp    	 	$A!dC[)"1://44X5E5E5GH	  +  #	$ r   c                     g }| D ]K  }t        |      }t        j                  j                  |j	                               }|j                  |       M |S r_   )r   r   OCSPResponser#   r    r!   )oscps	list_oscprc   r(   datas        r   
parse_oscpzPDFSignature.parse_oscp   sT    	 	#AqzH$$))(*:*:*<=DT"	# r   c                    ddi}d| v rd| d   v r!t         j                  | d   d         | d   d<   d| d   v r!t         j                  | d   d         | d   d<   d| d   v rt         j                  | d      | d   d<   d| d   v rt         j                  | d      | d   d<   d| d   v rt         j                  | d      | d   d<   |j	                  | d          t        d	i |S )
Nallow_fetchingTvalidation_contextra   ocspstrust_rootsextra_trust_rootsother_certsr8   )r   re   rk   r+   updater   )r   contexts     r   get_validation_contextz#PDFSignature.get_validation_context   s8   #T*6) 4557C7N7N/088+,V4 &!5668D8O8O/099+,W5 '; <<>J>U>UM?+,]; #f-A&BB ++F4GH +,-@A '; <<>J>U>UM?+,]; NN6"678 +7++r   c                     ddd d d dddt         j                  d t        j                  |       d}d| v r|j	                  | d          |S )N
Signature1sha256FT)
field_namemd_algorithmlocationreasonnamecertifyembed_validation_infouse_pades_lta	subfiltertimestamp_field_namern   meta)r   PADESr   ru   rs   )r   r   s     r   get_signature_metazPDFSignature.get_signature_meta   s\     '$%)!)//$("."E"Ef"M
 VKKv'r   c                     t         j                  |      }|rOt        |       }t         j                  |      }t	        j
                  |t	        j                  d      |||       yy )Nrw   )ry   )rS   r\   timestamperT)r   rU   r   rL   r	   sign_pdfPdfSignatureMetadata)r[   r\   r   rS   wr   s         r   rZ   zPDFSignature.simple_sign   s_    ))&1(3A&55f=K,,E' r   c                     t         j                  |      }t         j                  |      }t        |       }t         j	                  |      }t        j                  di |}|r|rt        j                  |||||       yy )N)signature_metarS   r   r\   Tr8   )r   rU   rL   r   r   r	   r   r   )r[   r\   r   rS   r   r   r   r   s           r   rY   zPDFSignature.lta_sign   sy    ))&1"11&9$Y/..v6 55==k-' r   c                     | j                  dd       }| j                  dd       }| j                  dd       }| j                  dd       }||||t        ||||      S y y )Nlib_locationslot_notoken_labeluser_pin)r   r   r   )getr   )r   r   r   r   r   s        r   rD   zPDFSignature.get_session   sy    zz.$7**Y-jj5::j$/L$<"k&=* # +%	  r   N)__name__
__module____qualname__staticmethodr   r+   r2   r6   rG   rL   rU   r]   re   rk   ru   r   rZ   rY   rD   r8   r   r   r   r      s.      " 
 
   $ $6  
  , C C
 	 	   , ,<  $    $  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   rR   xhtml2pdf.filesr   	getLoggerr   logr   r8   r   r   <module>r      sd      + + I , 0 3.E $g!k k  .)--,.s   A 	A)(A)