
     h                       d Z ddlZddlZddlZddl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mZmZmZmZmZmZmZmZmZmZmZ ddlZddl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$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQmRZRmSZS ddlTmUZUmVZVmWZWmXZX ddlYmZZZ ddl[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZc dd ldmeZe d!d"lWmfZf d!d#lgmhZhmiZimjZjmkZk d!d$llmmZm g d%Zn ejo        ep          Zq ed&e`d'(          Zr ed')           G d* d+eer                               Zse G d, d-                      Ztedddd.d/eju        d0ejd1evd2eer         d3ee3         d4ee*         d5ee
ewe	f                  d6esfd7            Zxedddd.d/eju        d0ejd1evd3ee3         d4ee*         d5ee
ewe	f                  d6esfd8            Zxdddecfd/eju        d0ejd1evd3ee3         d4ee*         d5ee
ewe	f                  d6esfd9Zxd:ejy        d;e7d<ed=eejz                 fd>Z{decfd/eju        d?e$d1evd5ee
ewe	f                  d6esf
d@Z|dAe}dBevd6esfdCZ~dDeju        dEe`dFe$dGee$         dHee         f
dIZd0ejd3e3d4e*fdJZeddddddKdDeju        d0ejd2eer         d3ee3         dLeev         d4ee*         dHee         d5ee
ewe	f                  d6esfdM            ZeddddddKdDeju        d0ejd3ee3         dLeev         d4ee*         dHee         d5ee
ewe	f                  d6esfdN            ZdddddebfdDeju        d0ejd3ee3         dLeev         d4ee*         dHee         d5ee
ewe	f                  d6esfdOZdDeju        d?e$dFe$dGee$         dPeZdLeev         dHee         d5ee
ewe	f                  dQeem         d2eer         d6eesetf         fdRZ ed')           G dS dTes                      Z eeIj        eHj        eHj        eHj        eHj        h          ZeddddddKdDeju        d0ejd3ee3         dLeev         d4ee*         dHee         d5ee
ewe	f                  d6efdU            ZeddddddKdDeju        d0ejd2eer         d3ee3         dLeev         d4ee*         dHee         d5ee
ewe	f                  d6efdV            ZdddddebfdDeju        d0ejd3ee3         dLeev         d4ee*         dHee         d5ee
ewe	f                  d6efdWZ G dX dYe;          ZdZe@d[ed\e.fd]Zd^eBd[ed\e.fd_Zd`ej        d4e*d<edae8fdbZ	 d|d`ej        dce)d4e*ddee         d6ee5ef         f
deZdDeju        d0ejd\e.dfeeH         ddedge}d6e5fdhZ	 d|dDeju        d0ejd\e.dfeeH         ddee         d6eKfdiZ ed')           G dj dk                      Zdleju        fdmZdleju        d6efdnZdoeEdpe}dqeee         fdrZ	 d|dsee         d0ejdtee3         d6e.fduZ eeIj        eHj        eHj        eHj        eHj        eHj        eHj        h          Z eeHj        eHj        eHj        eHj        eHj        h          Z ed')           G dv dwe                      ZdxeVd0ejd\e.d3e3d6ees         f
dyZ	 	 d}dxeVdzeid3ee3         dHee         d6ef
d{ZdS )~a  
This module contains a number of functions to handle AdES signature validation.


.. danger::
    This API is incubating, and not all features of the spec have been fully
    implemented at this stage. There will be bugs, and API changes may still
    occur.
    N)copy)	dataclass)datetime)AnyDict	FrozenSetGenericIterableIteratorListOptionalSetTupleTypeTypeVarUnionoverload)cmskeys)pdf)tspx509)CertificateList)OCSPResponse)ValidationContext)CertTrustAnchorTrustAnchor)CertValidationPolicySpecValidationDataHandlers)past_validate)
POEManagerdigest_for_poe)ades_gather_prima_facie_revinfo)ValidationTimingInfo)ValidationPath)AlgorithmUsagePolicyRevocationCheckingRule)PathBuilderTrustManager)CRLContainerOCSPContainer)CRLOfInterest)OCSPResponseOfInterest)HistoricalResolverPdfFileReader)AdESFailureAdESIndeterminate
AdESPassed
AdESStatusAdESSubIndic)CMSExtractionErrorCMSStructuralErrorMultivaluedAttributeErrorNonexistentAttributeErrorextract_certificate_infofind_cms_attributefind_unique_cms_attribute)DocumentSecurityStoreEmbeddedPdfSignatureerrorsgeneric_cms)KeyUsageConstraints)DocumentTimestampStatusPdfSignatureStatusRevocationDetailsSignatureCoverageLevelSignatureStatusSignerAttributeStatusStandardCMSSignatureStatusTimestampSignatureStatus   )
DiffPolicy   )NoDSSFoundError)LocalKnowledgePdfSignatureValidationSpecSignatureValidationSpec"bootstrap_validation_data_handlers)CMSAlgorithmUsagePolicy)ades_basic_validationades_with_time_validationades_lta_validationades_timestamp_validationAdESBasicValidationResultAdESWithTimeValidationResultAdESLTAValidationResult
StatusTypeT)bound	covariant)frozenc                   N    e Zd ZU dZeed<   	 ee         ed<   	 ee         ed<   dS )rV   uR   
    Result of validation of basic signatures.

    ETSI EN 319 102-1, § 5.3
    ades_subindic
api_statusfailure_msgN)	__name__
__module____qualname____doc__r4   __annotations__r   rY   str     X/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pyhanko/sign/validation/ades.pyrV   rV   x   s]             $$$$ # rh   rV   c                       e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<    ej	        e
          Ze
ed<   dZee         ed<   dZee         ed	<   dZee         ed
<   dZee         ed<   d ZdS )_InternalBasicValidationResultr^   signature_poe_timesignature_not_before_timevalidation_path)default_factorystatus_kwargsNtrust_subindic_updatesignature_ts_validitycontent_ts_validitysigner_attr_statusc                    | j         }| j        |d<   | j        r
| j        |d<   |r| j        r
| j        |d<   |r| j        r
| j        |d<   |r4| j        r-| j        j        |d<   | j        j        |d<   | j        j        |d<    |di |S )	Nrn   trust_problem_indictimestamp_validitycontent_timestamp_validityac_attrscades_signer_attrsac_validation_errsrg   )	rp   rn   rq   rr   rs   rt   ry   rz   r{   )self
status_clswith_ts
with_attrsrp   s        ri   updatez%_InternalBasicValidationResult.update   s    *+/+?'(% 	N373MM/0 	Mt1 	M262LM./ 	)t/ 	) ( ,  	;$1 	;(,(?(HM*% ': $
 ': $ z**M***rh   )ra   rb   rc   r4   re   r   r   r%   dataclassesfielddictrp   rq   rr   rH   rs   rt   rF   r   rg   rh   ri   rk   rk      s          ****'1111n----+++DAAAM4AAA488L1888@D8$<=DDD>B":;BBB:>!67>>>+ + + + +rh   rk   )timing_infovalidation_data_handlersextra_status_kwargstst_signed_datavalidation_specexpected_tst_imprintr}   r   r   r   returnc                
   K   d S Nrg   )r   r   r   r}   r   r   r   s          ri   rU   rU             Crh   c                
   K   d S r   rg   )r   r   r   r   r   r   s         ri   rU   rU      s       Crh   c                    K   |pt          j                    }|j        p|j        }|t	          ||          }|                    ||          }t          | ||||           d{V S )uW  
    Validate a timestamp token according to ETSI EN 319 102-1 § 5.4.

    :param tst_signed_data:
        The ``SignedData`` value of the timestamp.
    :param validation_spec:
        Validation settings to apply.
    :param expected_tst_imprint:
        The expected message imprint in the timestamp token.
    :param timing_info:
        Data object describing the timing of the validation.
        Defaults to :meth:`.ValidationTimingInfo.now`.
    :param validation_data_handlers:
        Data handlers to manage validation data.
    :param extra_status_kwargs:
        Extra keyword arguments to pass to the signature status object's
        ``__init__`` function.
    :param status_cls:
        The class of the resulting status object in pyHanko's internal
        validation API.
    :return:
        A :class:`.AdESBasicValidationResult`.
    Nspecr   r   handlers)r   r}   )r$   nowts_cert_validation_policycert_validation_policyrP   build_validation_context'_ades_timestamp_validation_from_context)	r   r   r   r   r   r   r}   r   validation_contexts	            ri   rU   rU      s      B ;!5!9!;!;K1 	21 
  '#E k$
 $
 $
  0HH*B I   9/         rh   signer_infoalgo_policycontrol_time
public_keyc                     | d         }|                     |||          }|sAd|j         d| d}t          j        ||j        t
          j        nt
          j                  d S )Nsignature_algorithm)r   zSignature algorithm z not allowed as of z:, which is the time of the earliest PoE for the signature.ades_subindication)signature_algorithm_allowedsignature_algor>   SignatureValidationErrornot_allowed_afterr1   CRYPTO_CONSTRAINTS_FAILURE!CRYPTO_CONSTRAINTS_FAILURE_NO_POE)r   r   r   r   sig_algosig_allowedmsgs          ri   #_ades_signature_crypto_policy_checkr     s     +66K*LH99,: :  K  
?8#: ? ?? ? ? 	
 - 08 "<<&H
 
 
 	

 
rh   r   c                   K   t          |pi           }t          j        | ||           d {V }|                    |            |di |}|j        st          t          j        |d           S |j        st          t          j	        |d           S t          | ||d d            d {V }||_        t          |j        |                    |dd          d           S )N)r   r   r^   r_   r`   ac_validation_contextrm   Fr~   r   rg   )r   r?   validate_tst_signed_datar   intactrV   r0   HASH_FAILUREvalidSIG_CRYPTO_FAILURE_process_basic_validationrp   r^   )	r   r   r   r   r}   rp   status_kwargs_from_validationstatusinterm_results	            ri   r   r   %  sp      ,233M*5*N-1+ + + % % % % % %!
 6777Z((-((F= 
(%2
 
 
 	

 \ 
(%8
 
 
 	
 4""&        M #0M$#1 ''% ( 
 
    rh   signed
tst_digestc                    K   t          j        | |          }|t          |||           d {V S t          t          j        d d           S )Nr   r^   r`   r_   )r?   extract_tst_datar   rV   r1   GENERIC)r   r   r   r   r   s        ri   _ades_process_attached_tsr   R  s       "2;vNNNO"<
 
 
 
 
 
 
 
 	

 %'/   rh   signed_datatemp_statusts_validation_contextr   rm   c                   K   |j         }t          j        |           }d }|t          j        t          j        fv rt          ||dt          j        |d         d          j                   d {V }|j	        t          j        k    r}|j        }|J |t          |j        |          }n|j        }|t          j        k    r|j        }	|	J |	j        }
t"          j        }n|j        j        }
t          j        }|J ||
k    r|}t          j        |           }t          j        |j        |j        ||d                    d {V }|pt          j        }t5          ||||t7          di |d |j                  S )NTsigned_attrsmessage_digestr   r   )sd_attr_certificatessigner_certr   sd_signed_attrs)r^   rq   rs   rm   rt   rl   rn   rg   )rv   r?   extract_signer_infor1   REVOKED_NO_POEOUT_OF_BOUNDS_NO_POEr   r;   nativer^   r2   OKr_   max	timestamprevocation_detailsrevocation_dater0   REVOKEDsigning_certnot_valid_afterEXPIREDr9   collect_signer_attr_statusattribute_certsr   rk   rF   rn   )r   r   r   r   rm   ades_trust_statusr   	ts_statuscontent_ts_resultrevo_detailscutoffperm_status	cert_infoattr_status_kwargsr^   s                  ri   r   r   c  s	      1<0O1+>>K48I(.   #<!"<N+-= #
 #
 #
 
 
 
 
 
 
 *jm;;)4I((((4,/')B- -)) -6,?) !$5$DDD*=#///%5)1$1A/7 -888(F22$/! 4[AAI  +E&6)0#N3	            &6M)#/%";0FF3EFF#3   rh   c                     | j                             ||          }| j        | j                            ||          }n|}| j        | j                            ||          }nd }|||fS )Nr   )r   r   r   ac_validation_policy)r   r   r   r   r   r   s         ri   	_init_vcsr     s     	.GG#.F 	H 	
 	
 
 0<5NN'2J O   	 !3+70II'2J J   	 !%46KKKrh   )r   
raw_digestr   rm   r   r   c                
   K   d S r   rg   r   r   r}   r   r   r   rm   r   s           ri   rR   rR            Crh   c                
   K   d S r   rg   r   r   r   r   r   rm   r   s          ri   rR   rR     r   rh   c                 d  K   |pt          j                    }|t          ||          }t          |||          \  }}	}
t	          | ||	|
|j        |||||j        
  
         d{V }t          |t                    r|S t          |j	        |
                    t          dd          d          S )u  
    Validate a CMS signature according to ETSI EN 319 102-1 § 5.3.

    :param signed_data:
        The ``SignedData`` value.
    :param validation_spec:
        Validation settings to apply.
    :param raw_digest:
        The expected message digest attribute value.
    :param timing_info:
        Data object describing the timing of the validation.
        Defaults to :meth:`.ValidationTimingInfo.now`.
    :param validation_data_handlers:
        Data handlers to manage validation data.
    :param extra_status_kwargs:
        Extra keyword arguments to pass to the signature status object's
        ``__init__`` function.
    :param status_cls:
        The class of the resulting status object in pyHanko's internal
        validation API.
    :param signature_not_before_time:
        Time when the signature was known _not_ to exist.
    :return:
        A :class:`.AdESBasicValidationResult`.
    Nr   )
r   r   r   r   key_usage_settingsr   rm   r   r}   algorithm_policyFTr   r   )r$   r   rP   r   _ades_basic_validationr   signature_algorithm_policy
isinstancerV   r^   r   rG   )r   r   r   r   r   rm   r   r}   r   r   r   r   s               ri   rR   rR     s     H ;!5!9!;!;K'#E k$
 $
 $
  	/;0HII	 1-33*=";/(C        M -!:;; $#1 ''&$ ( 
 
    rh   r   r   c
                   K   t          |pi           }
	 t          j        | ||||           d {V }|
                    |           nD# t          j        $ r2}t          |j        pt          j	        |j
        d           cY d }~S d }~ww xY w |	di |
}|j        st          t          j        |d           S |j        st          t          j        |d           S t!          | ||||           d {V }|
|_        |S )N)r   r   r   r   r   r   r   rg   )r   r?   cms_basic_validationr   r>   r   rV   r   r1   r   failure_messager   r0   r   r   r   r   rp   )r   r   r   r   r   r   rm   r   r   r}   rp   r   er   r   s                  ri   r   r   ;  s      ,233M
.9.N!11-/
 /
 /
 )
 )
 )
 )
 )
 )
% 	:;;;;* 
 
 
(.K2C2K)
 
 
 	
 	
 	
 	
 	
 	

 )j99=99F= 
(%2
 
 
 	

 \ 
(%8
 
 
 	
 43";        M #0Ms   4A
 
B'B BBc                   0    e Zd ZU eed<   ee         ed<   dS )rW   best_signature_timerm   N)ra   rb   rc   r   re   r   rg   rh   ri   rW   rW   r  s/         !!!!'111111rh   rW   c                
   K   d S r   rg   r   s          ri   rS   rS     r   rh   c                
   K   d S r   rg   r   s           ri   rS   rS     r   rh   c                   K   |pt          j                    }|t          ||          }t          |||          \  }}	}
| d         d         d         j        }|j        |         }t          | ||	|
|j        |||||j        
  
         d{V }t          |t                    r#t          |j        |j        |j        ||          S |j        t          vrOt          |t                     sJ |j        }|                    |dd	          }t          |j        |d||          S t'          j        |           }|                    |d
d	          }t'          j        |          }|#t          t,          j        |d|j        |          S t3          ||d
|           d{V }|j        t4          j        k    rt          |j        |d||          S |j        }t          |t8                    sJ |t;          |j        |          }n|j        }||_        ||_         |j        t,          j!        k    r,|j"        }||j#        k    rt          |j        |d||          S n}|j        t,          j$        k    r/||j%        j&        k     rt          t,          j'        |d||          S n9|j        t,          j(        k    r$||j)        k    rt          |j        |d||          S |$||k    rt          t,          j*        |d||          S d|_+        d|j,        d<   |                    |dd	          }t          t4          j        |d||          S )u  
    Validate a CMS signature with time according to ETSI EN 319 102-1 § 5.5.

    :param signed_data:
        The ``SignedData`` value.
    :param validation_spec:
        Validation settings to apply.
    :param raw_digest:
        The expected message digest attribute value.
    :param timing_info:
        Data object describing the timing of the validation.
        Defaults to :meth:`.ValidationTimingInfo.now`.
    :param validation_data_handlers:
        Data handlers to manage validation data.
    :param extra_status_kwargs:
        Extra keyword arguments to pass to the signature status object's
        ``__init__`` function.
    :param status_cls:
        The class of the resulting status object in pyHanko's internal
        validation API.
    :param signature_not_before_time:
        Time when the signature was known _not_ to exist.
    :return:
        A :class:`.AdESBasicValidationResult`.
    Nr   signer_infosr   	signature)	r   r   r   r   r   rm   r   r}   r   )r^   r_   r`   r   rm   Tr   FzNo signature timestamp presentr   rv   )-r$   r   rP   r   r   poe_managerr   r   r   r   rV   rW   r^   r_   r`   _WITH_TIME_FURTHER_PROCrk   rm   r   r?   r   compute_signature_tst_digestr1   SIG_CONSTRAINTS_FAILUREr   r   r2   r   rH   minr   rr   rl   r   r   r   r   r   not_valid_beforeNOT_YET_VALIDr   error_time_horizonTIMESTAMP_ORDER_FAILURErq   rp   )r   r   r   r   r   rm   r   r}   r   r   r   	sig_bytesrl   r   r_   r   r   r   sig_ts_resultr   r   r   s                         ri   rS   rS     sz     H ;!5!9!;!;K'#E k$
 $
 $
  	/;0HII	 N+A.{;BI1=iH0-33*=";/(C        M -!:;; 
+'5$/%1 2&?
 
 
 	
 
	$,C	C	C-)GHHHHH$1$K!")) * 
 

 ,'5! 2&?
 
 
 	
 1+>>K&&Ed '  K 9+FFJ ,+C"8 + ?&?
 
 
 	
 4'*        M "jm33+'5" 2&?
 
 
 	
 (I i!9:::::% !46HII&0*3M''9M$"&7&FFF*5*H!===/+9& $6*C    > 
	$(9(N	N	N  8 III//=& $6*C    J 	#>	? 	?
 !???/+9& $6*C    	"-%(:::++C" 2&?
 
 
 	
 +/M'9=M 56!!*dt!LLF' m.";   rh   c                   N    e Zd Zdej        defdZdej        dee         fdZ	dS )_TrustNoOnecertr   c                     dS )NFrg   r|   r
  s     ri   is_rootz_TrustNoOne.is_rootd  s    urh   c                      t          d          S )Nrg   )iterr  s     ri   find_potential_issuersz"_TrustNoOne.find_potential_issuersg  s     Bxxrh   N)
ra   rb   rc   r   Certificateboolr  r   r   r  rg   rh   ri   r	  r	  c  se        D,     $	+	     rh   r	  crlr   r   c                 H    t          fd| j        D                       S )Nc              3   D   K   | ]}|j         j                 k    V  d S r   )pathleaf).0	prov_pathr   r   s     ri   	<genexpr>z0_crl_issuer_cert_poe_boundary.<locals>.<genexpr>p  sF         	IN'(F2     rh   )any
prov_paths)r  r   r   s    ``ri   _crl_issuer_cert_poe_boundaryr  m  sE               rh   ocspc                 .    || j         j                 |k    S r   )r  r  )r  r   r   s      ri   _ocsp_issuer_cert_poe_boundaryr   v  s     t~*+v55rh   r
  revocation_checking_rulec                 \   K   j         }|                     t                                }dt          j        f fdt          j        fd|D                       }j        }g }g }	t                      }
|D ]}| d {V \  }}|D ]n}t          | j
        |          r|                    |           .|j        j                                        }|
                    t!          |                     o|D ]n}t#          | j
        |          r|	                    |           .|j        j                                        }|
                    t!          |                     o|s|	r4j                            |
           j                            |
           ||	fS )N)r
  trust_managerissc                 r    t          t          |           g           }t          |j                  S )N)trust_anchorintermr  )r  revinfo_managerr   r!  )r%   r   r#   r(  )r$  truncated_pathr
  r   r!  r   s     ri   _for_candidate_issuerzB_find_revinfo_data_for_leaf_in_past.<locals>._for_candidate_issuer  sN    '(--bt
 
 
 /4D%%=	
 
 
 	
rh   c                 &    g | ]} |          S rg   rg   )r  r$  r*  s     ri   
<listcomp>z7_find_revinfo_data_for_leaf_in_past.<locals>.<listcomp>  s%    AAA		s	#	#AAArh   )cert_registryr  r	  r   r  asyncioas_completedr   setr  r   appendr  crl_datadumpaddr"   r   ocsp_responseocsp_response_datar(  
evict_crlsevict_ocsps)r
  r   r   r!  registrycandidate_issuersjob_futuresr   crlsocspsto_evictfut_resultsnew_crls	new_ocspscrl_oirevinfo_dataocsp_oir*  s   ````             @ri   #_find_revinfo_data_for_leaf_in_pastrE  |  s#      (5H 77 8  	
4#3 	
 	
 	
 	
 	
 	
 	
 	
 	
 &AAAA/@AAA K +6K "D*,E 55H" ; ;$///////)  	; 	;F,,k  ; F####%z27799^L99::::  	; 	;G--{  ; W%%%%&4GLLNN^L99::::	;  Gu G 0;;HEEE 0<<XFFF;rh   validation_policy_specinit_control_timec           	      0  K   t          |j        |j                  }d }|                    |           }	 |2 3 d {V }t	          j        t          ||||                     d {V }|j        }|j        }	|$|	J ||	fc |	                                 d {V  S g6 	 |	                                 d {V  n# |	                                 d {V  w xY wd}
|t          j        |
|          t          j        |
 dt          j                  )N)r#  r9  )r  rF  r   rG  z2Unable to construct plausible past validation pathr   r   z": no prima facie paths constructed)r(   r#  r-  async_build_paths_lazyr?   handle_certvalidator_errorsr    error_subindicsuccess_resultcancelr>   r   r1   NO_CERTIFICATE_CHAIN_FOUND)r
  rF  r   rG  path_buildercurrent_subindicationpaths	cand_pathpast_resultvalidation_timer   s              ri   _build_and_past_validate_certrV    s      ,:)7  L
 !//55E$ 	2 	2 	2 	2 	2 	2 	2) + G"+A-E&7	  ! !      K %0$>!)8O$,&222 /111llnn	 -  %u  llnnellnn
>C(-4I
 
 
 	
 -"FFF0K
 
 
 	
s   B< BAB< B< <Ccurrent_time_sub_indicis_timestampc                 b  K   t          |d|          }| d         d         d         j        }||         }	 t          |           }	|	j        }
|j                            |	j                   n.# t          $ r! t          j	        dt          j                  w xY w|r|j        p|j        }n|j        }t          |
|||j        j        j                   d {V \  t%          |
||	           d {V \  }}fd
}||k    r|t          j        k    r |             |S |t          j        t          j        fv r|S |t          j        t          j        fv rB||
j        k     r t          j	        dt2          j                  ||
j        k    r |             |S t          j        d|          )NT)is_historicalpoe_manager_overrider   r   r   z,signer certificate not included in signaturer   )r   r!  )rF  r   c                  n    t          p          s"t          j        } t          j        d|           d S )N)zoPOE for signature available, but could not obtain sufficient POE for the issuance of the revocation informationrI  )r  r1   REVOCATION_OUT_OF_BOUNDS_NO_POEr>   r   )r   	leaf_crls
leaf_ocspss    ri   (_pass_contingent_on_revinfo_issuance_poezQ_ades_past_signature_validation.<locals>._pass_contingent_on_revinfo_issuance_poe&  sN    I+,, 		&FF1!
 $*   		 		rh   z'Signature predates cert validity periodrI  zHPast signature validation did not manage to improve current time result.)rP   r   r9   r   r-  register_multipleother_certsr5   r>   r   r1   NO_SIGNING_CERTIFICATE_FOUNDr   r   rE  revinfo_policyrevocation_checking_policyee_certificate_rulerV  r   REVOKED_CA_NO_POEr   r   OUT_OF_BOUNDS_NOT_REVOKEDr  r0   r  r   SigSeedValueValidationError)r   r   r   rW  rG  rX  r   signature_bytesr   r   r
  r   	cert_pathrU  r`  r^  r_  s                  @@ri   _ades_past_signature_validationrl    s       Bt+      ".1!4[AHO%o6

,[99	$ .@@!	
 	
 	
 	
  
 
 
-:0M
 
 
 	

  H5 65 	
 "1!G"E &"1L`# # #      Iz (E5!9( ( ( " " " " " "I
 
 
 
 
 
 o--!%6%EEE44666#/?(
 
 
 #27(
 
 
 #T%:::5$M'2'@    %(<<<88:::   
,. 2   s   5A/ /+Bc                 j  K   | d         }|d         j         dk    }|&t          j        t          j                              }	 t          | |||||           d{V  t          j        S # t          j	        $ r7}t                              |           |j        pt          j        cY d}~S d}~ww xY w)u  
    Validate a CMS signature in the past according
    to ETSI EN 319 102-1 § 5.6.2.4.

    This is internal API.

    .. danger::
        The notion of "past validation" used here is only valid in the
        narrow technical sense in which it is used within AdES.
        It should _never_ be relied upon as a standalone validation routine.

    :param signed_data:
        The ``SignedData`` value.
    :param validation_spec:
        Validation settings to apply.
    :param poe_manager:
        The POE manager from which to source existence proofs.
    :param current_time_sub_indic:
        The AdES subindication from validating the signature
        at the current time with the relevant settings.
    :param init_control_time:
        Initial value for the control time parameter.
    :return:
        An AdES subindication indicating the validation result
        after going through the past validation process.
    encap_content_infocontent_typetst_infoNtzr   r   r   rW  rG  rX  )r   r   r   tzlocalget_localzonerl  r2   r   r>   r   loggerwarningr   r1   r   )r   r   r   rW  rG  ecirX  r   s           ri   ades_past_signature_validationry  U  s      D *
+C~&-;L $LG,A,C,CDDDA-#+##9/%
 
 
 	
 	
 	
 	
 	
 	
 	
 }* A A Aq#@'8'@@@@@@@As   &A, ,B2;,B-'B2-B2c                   n    e Zd ZU eed<   eed<   ee         ed<   ej	        ed<   eed<   e
ed<   defdZd	S )
PrimaFaciePOEpdf_revisiontimestamp_dtdigests_coveredtimestamp_token_signed_data
doc_digestforensic_infomanagerc                 R    | j         D ]}|                    || j                   d S )N)digestdt)r~  register_by_digestr}  )r|   r  things      ri   add_to_poe_managerz PrimaFaciePOE.add_to_poe_manager  sA    ) 	K 	KE&&e8I&JJJJ	K 	Krh   N)ra   rb   rc   intre   r   r   bytesr   
SignedDatar   r!   r  rg   rh   ri   r{  r{    s         u%%%%!$///K* K K K K K Krh   r{  sdc              #      K   | d         D ]3}|j         dv r(t          |j                                                  V  4d S )Ncertificates)certificatev2_attr_set)namer"   chosenr3  )r  cert_choices     ri   &_extract_cert_digests_from_signed_datar    sW      .) < <=== !3!8!8!:!:;;;;;< <rh   c                 B    | d         d         j         }|d         j        S )Nrn  contentgen_time)parsedr   )r  rp  s     ri   _get_tst_timestampr    s#    34Y?FHJ&&rh   rinclude_content_tsdiff_policyc                    t                      }t                      }g }t          | j                  D ]3\  }}|                    ||d u            t	          | |j                  }|j        }	d }
d}|j        dk    r|	}
d}n|rt          j	        |j
        d          }
|
>t          j        |          }|                    d t          j        |j        |j        |j                                                  D                        |                    |           |                                }|                                t,          j        k    }|rg|                    t3          |j        t5          |
          t7          |          |
||                                                     t                      }|                    t;          |
                     |                    t;          |	                     |j
        d	         }|sg	 t=          |d
          }|                    d t          j        |d         |d                   D                        n# t>          t@          f$ r Y nw xY w|j
        d         j!        }|"                    tG          |                     	 tI          |d          }n# t@          tJ          f$ r d}Y nw xY w	 tI          |j
        d         d          }n# t@          tJ          f$ r d}Y nw xY wt          j        ||          D ]B}|d         d         D ]1}|d         j!        }|"                    tG          |                     2C5|S )N)	skip_diff)revisionFz/DocTimeStampTr   c              3   b   K   | ]*}t          |                                j                  V  +d S r   )r"   
get_objectdatar  items     ri   r  zC_build_prima_facie_poe_index_from_pdf_timestamps.<locals>.<genexpr>  sK       $ $ t00566$ $ $ $ $ $rh   )r|  r}  r~  r  r  r  r   adobe_revocation_info_archivalc              3   X   K   | ]%}t          |                                          V  &d S r   )r"   r3  r  s     ri   r  zC_build_prima_facie_poe_index_from_pdf_timestamps.<locals>.<genexpr>"  sF       # # #499;;//# # # # # #rh   r  r  r   content_time_stamprg   unsigned_attrssignature_time_stampr  r   )&r0  	enumerateembedded_signaturescompute_integrity_infor.   signed_revisionr   sig_object_typer?   r   r   r<   read_dssr   	itertoolschainr<  r=  certsvaluescompute_digestevaluate_signature_coveragerD   ENTIRE_REVISIONr1  r{  r  	frozensetsummarise_integrity_infor  r;   r7   r8   r   r4  r"   r:   r6   )r  r  r  collected_so_farfor_next_tsprima_facie_poe_setsixembedded_sighist_handlerr   ts_signed_data	is_doc_tsdssr  coverage_normalr   revinfo_attrr  content_tsessignature_tsests_datats_signer_infots_sig_bytess                          ri   0_build_prima_facie_poe_index_from_pdf_timestampsr    s2   < $'55 "eeK 13
 &a&;<< s> s>L++!T) 	, 	
 	
 	
 *4
 
 
 '3&>37	'?::(NII 	(9(  N %'0>>C## $ $%OHci)9)9);); $ $ $    ##K000%4466J88::)9:   $$++!%1%A%7%G%G(12B(C(C4B#-&2&K&K&M&M  	 	 	 "ee6~FF   	A+NNOOO
 $/? 	-$&F   "" # # )$U+\&-A! !# # #     ./HI   
 !,[9@	y11222	-2 LL *+=> 	 	 	LLL		 /()9:& NN *+=> 	  	  	 NNN	  !~|DD 	> 	>G"))"4^"D > >-k:A| < <====>	>
  s7   AI""I65I6.J??KKK55L
Lr  cur_timing_infoc           
        K   t          | d           }|p%t          j        t          j                              }t                      }|j                            |           t          |          D ]e\  }}t          |          }|t          |          dz
  k     r ||dz            }|                    |           t          |||          }	t          |j        |||j        |	|j        t                      d {V }
|
j        }|j        t&          j        k    r|                    |           |j        t&          j        k    rt-          j        d|          t1          |t2                    sJ t5          |j        ||||j        	           d {V }|j        t&          j        k    r|                    |           Qt-          j        d
|          |S )Nc                     | j         S r   r|  )ps    ri   <lambda>z+_validate_prima_facie_poe.<locals>.<lambda>R  s     rh   )keyrq  rK   r   r[  )r   r   r   r   r   r   r}   z9Permanent failure while evaluating timestamp in PoE chainr   )r   r   r   rW  rG  zZCould not validate timestamp in PoE chain at current time, and past validation also failed)sortedr$   r   rt  ru  r!   local_knowledger  r  r   lenrP   rU   r  r  r  rA   r^   r   r3   PASSEDFAILEDr>   r   r   r1   ry  rU  )r  r   r  candidate_poesresulting_poesr  poetemporary_poesnext_poer   cur_time_result	sub_indicrT  s                ri   _validate_prima_facie_poer  H  sV      06N6NOOON% )=)A ""* * *O  \\N#66~FFF^,, 2 2Cn--N##a'''%b1f-H''777#E'!/$
 $
 $
 
 !:;+'!$%= # 1.!
 !
 !
 
 
 
 
 
 
 $1	z000 "">2222!2221K#,    i):;;;;; >; /*'0"1"A! ! !      K !Z%666&&~66665<'0   
 rh   c                   B    e Zd ZU dZee         ed<   	 ee         ed<   dS )rX   u   
    Result of a PAdES validation for a signature providing long-term
    availability and integrity of validation material.
    See ETSI EN 319 102-1, § 5.6.3.
     oldest_evidence_record_timestampsignature_timestamp_statusN)ra   rb   rc   rd   r   r   re   rV   rg   rh   ri   rX   rX     sL           '/x&8888 !))B CCCC rh   rX   r  c                 ,  K   | j         d         j        }| j        }|j        p|j        }|j        }|d S |                                 }|J t          ||||t          |||                     d {V }	|	j	        }
t          |
t                    r|
t          v r	 t          ||||
|j        d           d {V }t          t           j        t%          j        |	j        |          d           }nA# t*          j        $ r-}t          |j        p|
|j        |	j                  }Y d }~n
d }~ww xY w|	}|d	         d
         j        }|K|                    |d         d         |j                  r#|d         j        }|                    ||           |S )Nr   r  )r   r   r   r   r   Trs  )rn   r   r   rn  r  message_imprinthash_algorithm)momentr  )r   r   attached_timestamp_datar   r   algorithm_usage_policycompute_tst_digestrU   rP   r^   r   r1   _LTA_TS_FURTHER_PROCrl  rU  rV   r2   r   r   replacer_   r>   r   r   r   r  digest_algorithm_allowedregister)r  r   r   r   rj  signature_tsr   r   r   signature_ts_prelim_resultts_current_time_sub_indicrn   signature_ts_resultr   rp  signature_ts_dts                   ri   _process_signature_tsr    s_      #.{;BO#/#GL1 	21  )?Kt'::<<+++'@$'1!C#!,"
 "
 "

( 
( 
( 
" 
" 
" 
" 
" 
" !; H 	,.?@@9%)===	 %D( /''@"-"=!% % %      O #<(m&..9$3   !# # # . 	 	 	";2O6O-5@# # #	 901)<CH;#G#G"#$45* $H $ $ #:.5_o>>> s   AC3 3D/#D**D/pdf_validation_specc           
         K   |p%t          j        t          j                              }t	           j        d|j                  }|j        }|j        }	 t          j
         j                  }d |j        D             }d |j        D             }	t          |                                          }
t          |j        |z   |j        |	z   |j        |
z   |j                  }n# t(          $ r |}Y nw xY wt+          j        ||          }d}d}	 t/          |||	           d{V }t1          t3           fd
|          d d          }||j        }nt6                              d           n8# t:          j        $ r&}t6                              d|           Y d}~nd}~ww xY w|#t?                      }|                     |           |J tC          ||tE          |                    }tG           j$        ||| %                                | &                                tN                     d{V }|j(        }|tR          vr+d| d}tU          ||j+        ||j,        |j-        |d          S  j.        d         j/        }|0                    ||j,                   tc           |tE          |          |           d{V }te          |tf                    rtE          |          }	 ti           j$        ||||j5        d           d{V  |}nP# t:          j        $ r>}||         }tU          |j6        p||j7        |j+        ||j-        ||          cY d}~S d}~ww xY w||         }|j8        j9        }	  j:        }|tw           j.        |||j<                   tz          j>        }d}n,# t:          j        $ r}|j6        p|}|j7        }Y d}~nd}~ww xY wtU          ||j+        |||j-        ||          S )u  
    Validate a PAdES signature providing long-term availability and integrity
    of validation material. See ETSI EN 319 102-1, § 5.6.3.

    For the purposes of PAdES validation, the chain of document time stamps
    in the document serves as the unique Evidence Record (ER).

    :param embedded_sig:
        The PDF signature to validate.
    :param pdf_validation_spec:
        PDF signature validation settings.
    :param timing_info:
        Data object describing the timing of the validation.
        Defaults to :meth:`.ValidationTimingInfo.now`.
    :param signature_not_before_time:
        Time when the signature was known _not_ to exist.
    :return:
        A validation result.
    rq  T)r  r  c                     g | ]D}t          j        t          j        |                                j                            D ]}|ES rg   )r+   
load_multir   loadr  r  )r  respconts      ri   r,  z'ades_lta_validation.<locals>.<listcomp>8  sg     
 
 
%0!$//"3"3"899 
 
  
 
 
 
rh   c                     g | ];}t          t          j        |                                j                             <S ))r2  )r*   r   r  r  r  )r  r  s     ri   r,  z'ades_lta_validation.<locals>.<listcomp>?  sK     
 
 
 /"6s~~7G7G7L"M"MNNN
 
 
rh   )known_ocsps
known_crlsknown_certs
known_poes)r  N)r   r  c                 $    | j         j        k    S r   )r|  r  )r  r  s    ri   r  z%ades_lta_validation.<locals>.<lambda>]  s    C,|/KK rh   c                     | j         S r   r  )r  s    ri   r  z%ades_lta_validation.<locals>.<lambda>`  s	    C, rh   )r  defaultzRNo document timestamps after signature; proceeding without past proof of existencezXDocument timestamp chain failed to validate; proceeding without past proof of existence.)exc_info)r   r   r[  )r   r   r   r   r   rm   r   r}   z?Validation of signature at current time failed with indication z!. Past validation not applicable.)r^   r_   r`   r   rm   r  r  r   )r   r   r   Frs  )r^   r`   r_   r   rm   r  r  )r   r   r   )r^   r_   r`   r   rm   r  r  )?r$   r   rt  ru  r  readerr  signature_validation_specr  r<   r  r=  r<  list
load_certsrM   r  r  r  r  rL   r   r  r  r  filterr}  rv  rw  r>   r   r!   r  rP   r   rS   r   r  r  rB   r^   _LTA_FURTHER_PROCrX   r_   r   rm   r   r   r  r  r   r1   rl  rU  r   r   r   r  r   r   r   r2   r   )r  r  r   rm   poe_listr   init_local_knowledger  	dss_ocspsdss_crls	dss_certsr  augmented_validation_specupdated_poe_managerr  oldest_docts_recordr   with_time_data_handlerssignature_prelim_resultrW  r`   rj  r  past_sig_poe_managersig_poerl   r   r
  r^   s   `                            ri   rT   rT     s     4  !5!9 """ " "K
 @'3  H *CO*:/#,\-@AA
 
	
 
 
	
 
x
 
 
 ))**	(,89D+6A,89D+6	
 
 
  / / /./ !, 3! ! ! '+$
$=5'%
 %
 %
 
 
 
 
 
 
 "KKKK  -,
 
 
 */B/O,,NN2   * 
 
 
/ 	 	
 	
 	
 	
 	
 	
 	
 	

 (/(ll**+>???*** A&!"566  
 %> ,1!8..00";(AACC%	% 	% 	% 	 	 	 	 	 	 5B%6660   	
 '0.9# 7 K'A.N'+

 

 

 
	
 #.{;BO  0D  
 !61,--	! ! !       (*;<<   $$788	1(4 90'="-"="          #7. 	 	 	*?;G*2L6L-2=$++E+>4        	$ -_= 	"8O (!-!9"/('/?	    #* ( ( (,F0F'( ##*5.#=#6*J
 
 
 
sb   BC$ $C32C3A E2 2F'F""F'0'L M%'3M M% M%=4N2 2OOOr   )NN)rd   r.  r   r  loggingr   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   rt  
asn1cryptor   r   r   asn1_pdfr   r   asn1crypto.crlr   asn1crypto.ocspr   pyhanko_certvalidatorr   pyhanko_certvalidator.authorityr   r   pyhanko_certvalidator.contextr   r   #pyhanko_certvalidator.ltv.ades_pastr    pyhanko_certvalidator.ltv.poer!   r"   $pyhanko_certvalidator.ltv.time_slider#   pyhanko_certvalidator.ltv.typesr$   pyhanko_certvalidator.pathr%   !pyhanko_certvalidator.policy_declr&   r'   pyhanko_certvalidator.registryr(   r)   &pyhanko_certvalidator.revinfo.archivalr*   r+   *pyhanko_certvalidator.revinfo.validate_crlr,   +pyhanko_certvalidator.revinfo.validate_ocspr-   pyhanko.pdf_utils.readerr.   r/   pyhanko.sign.ades.reportr0   r1   r2   r3   r4   pyhanko.sign.generalr5   r6   r7   r8   r9   r:   r;   pyhanko.sign.validationr<   r=   r>   r?    pyhanko.sign.validation.settingsr@   pyhanko.sign.validation.statusrA   rB   rC   rD   rE   rF   rG   rH   diff_analysisrJ   rL   policy_declrM   rN   rO   rP   utilsrQ   __all__	getLoggerra   rv  rY   rV   rk   r  r  rf   rU   
SignerInfoPublicKeyInfor   r   r  r   r   r   rR   r   rW   r  r   r   r   rg  r   r   rS   r	  r  r   r  rE  rV  rl  ry  r{  r  r  r  r  rh  r]  r  r  rX   r  rT   rg   rh   ri   <module>r5     sS                    ! ! ! ! ! !                                     "                  & & & & & &                 * * * * * * ( ( ( ( ( ( 3 3 3 3 3 3 H H H H H H H H        > = = = = = D D D D D D D D P P P P P P @ @ @ @ @ @ 5 5 5 5 5 5        E D D D D D D D N N N N N N N N D D D D D D N N N N N N F F F F F F F F                                          A @ @ @ @ @	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ' & & & & & # # # # # #            + * * * * *   
	8	$	$W\DIII
 $    
 3   4 !+ !+ !+ !+ !+ !+ !+ !+H 
 37AE48
 
 
^
,
  

 Z 
 ./
 ''=>
 "$sCx.1
 
 
 
 

 
 37AE48	 	 	^	,	  	
 ./	 ''=>	 "$sCx.1	 	 	 	 
	  37AE48'5 5^5,5  5 ./	5
 ''=>5 "$sCx.15 5 5 5 5p

%
 
 +,	
 
 
 
< 59'* *^*)*  * "$sCx.1	* * * * *Z-1?D   "OO O -O $$56	O
  (1O O O OdL,L%L 5L L L LD 
 37"&AE4848  , Z 	
 ./  ''=>  (1 "$sCx.1    
 

 37"&AE4848
 
 

,
 ./	

 
 ''=>
  (1
 "$sCx.1
 
 
 
 

  37"&AE4848)D DD,D ./D 	D
 ''=>D  (1D "$sCx.1D D D D DN44)4 -4 $$56	4
 ,4 4  (14 "$sCx.14 674 Z 4 $&DDE4 4 4 4n $2 2 2 2 2#< 2 2 2
 $);(+ 	.
 
  

 37"&AE4848
 
 

,
 ./	

 
 ''=>
  (1
 "$sCx.1
 "
 
 
 

 
 37"&AE4848  , Z 	
 ./  ''=>  (1 "$sCx.1 "   
" 37"&AE4848)~ ~~,~ ./~ 	~
 ''=>~  (1~ "$sCx.1~ "~ ~ ~ ~B    ,   	 (7A   6
 6*26AK6 6 6 6D

D4D D 5	D D D DV -1	)
 )


)
4)
 5)
  )	)

 >8#$)
 )
 )
 )
Xcc,c c %%67	c
  c c c c c cV -12A 2A2A,2A 2A %%67	2A
  )2A 2A 2A 2A 2Aj $K K K K K K K K<s~ < < < <'3> 'h ' ' ' '
` ` `  *%`  `  `  ` R 7;F F}-F
 -F 23F F F F FR I(+.3;9
 
  !y+.3;9   $    :   ,K&K,K K &	K
 '(K K K Kb 3748	b b&b3b ./b  (1	b
 b b b b b brh   