§
    ¥”j3  ã                   óÌ  — d dl Z d dl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 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 d d
lmZmZmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z' g d¢Z( e j)        e*¦  «        Z+ edddd d d  ej,        d¦  «        ¬¦  «        Z-dZ.dZ/ edej0        ej1        ¬¦  «        Z2 G d„ de¦  «        Z3 G d„ d¦  «        Z4dedede'fd„Z5dS ) é    N)Úreplace)Údatetime)Ú	FrozenSetÚIterableÚListÚOptionalÚSetÚTupleÚUnion)Úx509)Úqualified_asn1)ÚAdESIndeterminate)ÚSignatureValidationError)ÚQualificationRequirements)ÚQcPrivateKeyManagementTypeÚQualificationResultÚQualifiedStatus)Ú	CA_QC_URIÚQTST_URIÚBaseServiceInformationÚ
QcCertTypeÚQualificationÚQualifiedServiceInformationÚ	QualifierÚTSPRegistry)ÚTrustedServiceType)ÚValidationPath)ÚQualificationAssessorÚQualificationPolicyErrorÚenforce_requirementsià  é   é   úEurope/Brussels)Útzinfoz0.4.0.1456.1.1z0.4.0.1456.1.2F©Ú	qualifiedÚqc_typeÚqc_key_securityc                   ó   — e Zd ZdZdS )r   z4Error triggered by a qualification policy violation.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úw/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/sign/validation/qualified/assess.pyr   r   6   s   € € € € € Ø>Ð>à€Dr/   r   c                   óò   — e Zd ZdZdefd„Zedej        de	fd„¦   «         Z
edede	fd	„¦   «         Zedej        d
e	dee         fd„¦   «         Zed
e	dee         fd„¦   «         Z	 ddedee         defd„ZdS )r   zk
    Assesses the qualification status of certificates against a particular
    :class:`.TSPRegistry`.
    Útsp_registryc                 ó   — || _         d S ©N)Ú	_registry)Úselfr2   s     r0   Ú__init__zQualificationAssessor.__init__B   s   € Ø%ˆŒˆˆr/   ÚcertÚreturnc                 ó~  — t          j        | ¦  «        }d}d}t          j        }|D ]k}|d         j        }|dk    rd}Œ|dk    rd}Œ!|dk    rD|d         }t          |¦  «        dk    rt          d	¦  «        ‚t          |d
         j        ¦  «        }Œlt          |||r|rt          j	        nt          j
        ¬¦  «        S )NFÚstatement_idÚqc_complianceTÚqc_sscdr'   Ústatement_infor"   zonly support exactly 1 qc_typer   r%   )r   Úget_qc_statementsr   ÚQC_ESIGNÚnativeÚlenÚNotImplementedErrorr   r   ÚQSCDÚUNKNOWN)r8   Úqcsr&   Ú
key_securer'   Ú	statementÚst_typeÚqc_typess           r0   Ú_process_qc_statementsz,QualificationAssessor._process_qc_statementsE   só   € åÔ.¨tÑ4Ô4ˆØˆ	Øˆ
ÝÔ%ˆØð 	9ð 	9ˆIØ Ô/Ô6ˆGØ˜/Ò)Ð)Ø �	�	Ø˜IÒ%Ð%à!�
�
Ø˜IÒ%Ð%Ø=FØ$ô>�õ �x‘=”= AÒ%Ð%õ .Ð.NÑOÔOÐOÝ$ X¨a¤[Ô%7Ñ8Ô8�øÝØØð ð8Ø"+ð8Õ*Ô/Ð/å/Ô7ð
ñ 
ô 
ð 	
r/   ÚsdÚputative_statusc                 ót   — | j         }|r.|j        |vr%t                               d| j        › d�¦  «         dS dS )NzFound matching SDI z1 on path; skipping because QC type does not matchFT)Ú additional_info_certificate_typer'   ÚloggerÚinfoÚservice_name)rL   rM   Úsd_declared_types      r0   Ú_check_cd_applicablez*QualificationAssessor._check_cd_applicableh   s]   € ð Ô>ÐØð 	 Ô 7Ð?OÐ OÐ OÝ�KŠKð; b¤oð ;ð ;ð ;ñô ð ð �5Øˆtr/   Úprelim_statusÚqualificationsc                 óâ   — t          ¦   «         }|D ]7}|j                             | ¦  «        sŒ|                     |j        ¦  «         Œ8t
                               |t          |¦  «        ¦  «        S r4   )ÚsetÚcriteria_listÚmatchesÚupdateÚ
qualifiersr   Ú_final_statusÚ	frozenset)r8   rU   rV   Úapplicable_qualifiersÚqualifications        r0   Ú_apply_sd_qualificationsz.QualificationAssessor._apply_sd_qualificationsu   s{   € õ 14±´ÐØ+ð 	Cð 	CˆMØ Ô.×6Ò6°tÑ<Ô<ð ØØ!×(Ò(¨Ô)AÑBÔBÐBÐBÝ$×2Ò2Ø�9Ð%:Ñ;Ô;ñ
ô 
ð 	
r/   r_   c                 óJ  — t           j        |v st           j        |v rd}nt           j        |v rd}n| j        }t           j        |v rt          j        }n=t           j        |v rt          j	        }n"t           j
        |v rt          j        }n| j        }|st          j        }ntt           j        |v st           j        |v rt          j        }nKt           j        |v rt          j        }n0t           j        |v st           j        |v rt          j        }n| j        }t/          |||¬¦  «        S )NFTr%   )r   ÚNOT_QUALIFIEDÚLEGAL_PERSONÚQC_STATEMENTr&   ÚFOR_WSAr   ÚQC_WEBÚFOR_ESIGr@   Ú	FOR_ESEALÚQC_ESEALr'   r   rE   ÚNO_SSCDÚNO_QSCDÚQSCD_MANAGED_ON_BEHALFÚQSCD_DELEGATEDÚ	WITH_SSCDÚ	WITH_QSCDrD   r(   r   )rU   r_   Úis_qualifiedr'   Úkey_mgmts        r0   r]   z#QualificationAssessor._final_status„   sA  € õ Ô#Ð'<Ð<Ð<ÝÔ%Ð)>Ð>Ð>à ˆLˆLÝÔ#Ð'<Ð<Ð<ØˆLˆLà(Ô2ˆLõ ÔÐ 5Ð5Ð5Ý Ô'ˆGˆGÝÔÐ#8Ð8Ð8Ý Ô)ˆGˆGÝÔ Ð$9Ð9Ð9Ý Ô)ˆGˆGà#Ô+ˆGð ð 	5Ý1Ô9ˆHˆHåÔÐ!6Ð6Ð6ÝÔ Ð$9Ð9Ð9å1Ô9ˆHˆHÝÔ-Ð1FÐFÐFÝ1Ô@ˆHˆHåÔÐ#8Ð8Ð8ÝÔ"Ð&;Ð;Ð;å1Ô6ˆHˆHà$Ô4ˆHÝØ"ØØ$ð
ñ 
ô 
ð 	
r/   NÚpathÚmomentc           	      ó‚  — |j         }t          |t          j        ¦  «        st	          d¦  «        ‚t
                               |¦  «        }|                     ¦   «         }|p&t          j	        t          j        d¦  «        ¬¦  «        }|t          k     ra|r_d„ |D ¦   «         }t          |v r0t          |d|j        j        st"          j        n|j        ¬¦  «        }nt&          |v rt          |d¬¦  «        }g }| j                             ||¦  «        D ]Z}	t
                               |||	j        ¦  «        }
t
                               |	j        |
¦  «        r|                     |	|
f¦  «         Œ[t7          d„ |D ¦   «         ¦  «        }t9          |¦  «        d	k    r)t;          |d
         d	         |d
         d
         ¬¦  «        S t9          |¦  «        d	k    rrd                     d„ |D ¦   «         ¦  «        }t>                                d|j!        j"        › d|› �¦  «         t;          |d
         d	         |d
         d
         ¬¦  «        S |st;          tF          d¬¦  «        S d                     d„ |D ¦   «         ¦  «        }t>                                d|j!        j"        › d|› d|› d�¦  «         t;          tF          d¬¦  «        S )a¼  
        Evaluate the qualified status of a certificate (given a specific
        validation path).

        :param path:
            Validation path to scrutinise.
        :param moment:
            Evaluate the status against the service definitions valid
            at the time specified. If ``None``, take the latest
            available service definitions.
        :return:
            A :class:`.QualificationResult` instance.
        z4Only public-key certs are in scope for qualificationr#   )Útzc                 ó   — h | ]	}|j         ’Œ
S r.   )Úuser_domain_policy_id)Ú.0Úqs     r0   ú	<setcomp>zDQualificationAssessor.check_entity_cert_qualified.<locals>.<setcomp>Ó   s   € ÐJÐJÐJ°q˜1Ô2ÐJÐJÐJr/   T)r&   r(   )r&   c              3   ó    K  — | ]	\  }}|V — Œ
d S r4   r.   )ry   Ú_Ústs      r0   ú	<genexpr>zDQualificationAssessor.check_entity_cert_qualified.<locals>.<genexpr>ï   s&   è è € Ð;Ð;¡5 1 b˜BÐ;Ð;Ð;Ð;Ð;Ð;r/   r"   r   )Úservice_definitionú, c              3   ó4   K  — | ]\  }}|j         j        V — Œd S r4   ©Ú	base_inforR   ©ry   rL   r}   s      r0   r   zDQualificationAssessor.check_entity_cert_qualified.<locals>.<genexpr>ø   ó<   è è € ð %ð %Ù.3¨b°!�”Ô)ð%ð %ð %ð %ð %ð %r/   zQualification algorithm for zU reached a consistent conclusion, but through several different service definitions: Nc              3   ó4   K  — | ]\  }}|j         j        V — Œd S r4   rƒ   r…   s      r0   r   zDQualificationAssessor.check_entity_cert_qualified.<locals>.<genexpr>  r†   r/   z$ reached contradictory conclusions: z5. Several service definitions were found applicable: z4. This certificate will not be considered qualified.)$ÚleafÚ
isinstancer   ÚCertificaterC   r   rK   Úqualified_policiesr   ÚnowÚzoneinfoÚZoneInfoÚEIDAS_START_DATEÚPRE_EIDAS_QCP_PLUS_POLICYr   r(   Úis_qscdr   ÚQSCD_BY_POLICYÚPRE_EIDAS_QCP_POLICYr5   Úapplicable_tsps_on_pathra   rV   rT   r„   ÚappendrX   rB   r   ÚjoinrP   ÚwarningÚsubjectÚhuman_friendlyÚUNQUALIFIED)r6   rs   rt   r8   rU   Úpath_policiesÚreference_timeÚpolicy_oidsÚstatuses_foundrL   rM   Úuniq_statusesÚservice_infos                r0   Úcheck_entity_cert_qualifiedz1QualificationAssessor.check_entity_cert_qualified·   se  € ð  ŒyˆÝ˜$¥Ô 0Ñ1Ô1ð 	Ý%ØFñô ð õ .×DÒDÀTÑJÔJˆØ×/Ò/Ñ1Ô1ˆØð 
¥8¤<ÝÔ Ð!2Ñ3Ô3ð$
ñ $
ô $
ˆð Õ,Ò,Ð,°Ð,àJÐJ¸MÐJÑJÔJˆKÝ(¨KÐ7Ð7Ý 'Ø!Ø"ð  -Ô<ÔDð;Õ2ÔAÐAà*Ô:ð!ñ !ô !��õ &¨Ð4Ð4Ý '¨ÀÐ FÑ FÔ F�ð ð 	ð ”.×8Ò8¸¸~ÑNÔNð 		=ð 		=ˆBõ 4×LÒLØ�m RÔ%6ñô ˆOõ %×9Ò9Ø”˜oñô ð =ð ×%Ò% r¨?Ð&;Ñ<Ô<Ð<øåÐ;Ð;¨NÐ;Ñ;Ô;Ñ;Ô;ˆÝˆ~ÑÔ !Ò#Ð#å&Ø˜qÔ! !Ô$¸ÈÔ9JÈ1Ô9Mðñ ô ð õ �ÑÔ 1Ò$Ð$ð  Ÿ9š9ð %ð %Ø7Eð%ñ %ô %ñ ô ˆLõ �NŠNðA¨t¬|Ô/Jð Að Aà2>ðAð Añô ð õ
 'Ø˜qÔ! !Ô$¸ÈÔ9JÈ1Ô9Mðñ ô ð ð ð 	MÝ&¥{ÀtÐLÑLÔLÐLàŸ9š9ð %ð %Ø7Eð%ñ %ô %ñ ô ˆLõ �NŠNð¨t¬|Ô/Jð ð Ø6Cðð ð  ðð ð ñô ð õ '¥{ÀtÐLÑLÔLÐLr/   r4   )r*   r+   r,   r-   r   r7   Ústaticmethodr   rŠ   r   rK   r   rT   r   r   ra   r   r   r]   r   r   r   r   r¡   r.   r/   r0   r   r   <   sd  € € € € € ðð ð
& [ð &ð &ð &ð &ð ð 
 TÔ%5ð  
¸/ð  
ð  
ð  
ñ „\ð 
ðD ð
Ø"ð
Ø5Dð
ð 
ð 
ñ „\ð
ð ð
ØÔð
à&ð
ð ! Ô/ð
ð 
ð 
ñ „\ð
ð ð0
Ø&ð0
à(¨Ô3ð0
ð 0
ð 0
ñ „\ð0
ðf BFðYMð YMØ"ðYMØ,4°XÔ,>ðYMà	ðYMð YMð YMð YMð YMð YMr/   r   ÚrequirementsÚqualification_resultrs   c                 ób  — |j         }t          |t          j        ¦  «        st	          d¦  «        ‚|j        }g }|j        s)t          d|j        j	        › d�t          j        ¬¦  «        ‚|j        €J ‚| j        �±|j        j        j        }t          | j        t           ¦  «        r|}nBt"          t$          j        t(          t$          j        i                     |t$          j        ¦  «        }|| j        k    s|j        dk    r+|                     d|j        j	        › d| j        › d	�¦  «         | j        �c|j        | j        vrU|                     d|j        j	        › d
|j        j        › dd                     d„ | j        D ¦   «         ¦  «        › d	�¦  «         | j        �c|j        | j        vrU|                     d|j        j	        › d|j        j        › dd                     d„ | j        D ¦   «         ¦  «        › d	�¦  «         |r.t          d                     |¦  «        t          j        ¬¦  «        ‚dS )zf
    Internal method to enforce the requirements of a qualification policy
    during validation.
    z3Qualification only makes sense for public-key certszCertificate for z is not qualified)Úades_subindicationNr   zCertificate z. is not directly trusted as a service of type ú.z is qualified,but the type z6 is not permitted by the requirements. Must be one of r�   c              3   ó$   K  — | ]}|j         V — Œd S r4   ©Úname©ry   Úts     r0   r   z'enforce_requirements.<locals>.<genexpr>G  s$   è è € ÐHÐH A˜œÐHÐHÐHÐHÐHÐHr/   z* is qualified,but the key management type c              3   ó$   K  — | ]}|j         V — Œd S r4   r©   r«   s     r0   r   z'enforce_requirements.<locals>.<genexpr>Q  s$   è è € ÐLÐL A˜œÐLÐLÐLÐLÐLÐLr/   z; ) rˆ   r‰   r   rŠ   Ú	TypeErrorÚstatusr&   r   r˜   r™   r   ÚSIG_CONSTRAINTS_FAILUREr€   Úrequire_service_typer„   Úservice_typeÚstrr   r   ÚCERTIFICATE_AUTHORITYr   ÚTIME_STAMPING_AUTHORITYÚgetÚUNSUPPORTEDÚpkix_lenr•   Úpermit_cert_typesr'   rª   r–   Úpermit_key_mgmt_typesr(   )r£   r¤   rs   r8   r¯   Úerr_strsÚservice_type_urir²   s           r0   r    r      s¼  € ð Œ9€DÝ�d�DÔ,Ñ-Ô-ð OÝÐMÑNÔNÐNà!Ô(€Fà€HØÔð 
Ý&ØM˜tœ|Ô:ÐMÐMÐMÝ0ÔHð
ñ 
ô 
ð 	
ð  Ô2Ð>Ð>Ð>ØÔ(Ð4à Ô3Ô=ÔJð 	õ �lÔ7½Ñ=Ô=ð 	DØ+ˆLˆLõ Õ-ÔCÝÕ,ÔDð÷ ŠcÐ"Õ$6Ô$BÑCÔCð ð
 ˜LÔ=Ò=Ð=ØŒ}˜qÒ Ð à�OŠOð8˜tœ|Ô:ð 8ð 8àÔ4ð8ð 8ð 8ñô ð ð 	Ô&Ð2ØŒN ,Ô"@Ð@Ð@à�ŠðL˜tœ|Ô:ð Lð LØ"œNÔ/ðLð Lð �yŠyÐHÐH¨Ô)GÐHÑHÔHÑHÔHðLð Lð Lñ	
ô 	
ð 	
ð 	Ô*Ð6ØÔ"¨,Ô*LÐLÐLà�ŠðP˜tœ|Ô:ð Pð PØ+1Ô+AÔ+FðPð Pð �yŠyÐLÐL¨Ô)KÐLÑLÔLÑLÔLðPð Pð Pñ	
ô 	
ð 	
ð ð 
Ý&Ø�IŠI�hÑÔÝ0ÔHð
ñ 
ô 
ð 	
ð
ð 
r/   )6Úloggingr�   Údataclassesr   r   Útypingr   r   r   r   r	   r
   r   Ú
asn1cryptor   Úpyhanko.sign.adesr   Úpyhanko.sign.ades.reportr   Úpyhanko.sign.validation.errorsr   Ú#pyhanko.sign.validation.policy_declr   Ú*pyhanko.sign.validation.qualified.q_statusr   r   r   Ú%pyhanko.sign.validation.qualified.tspr   r   r   r   r   r   r   r   Úpyhanko_certvalidator.authorityr   Úpyhanko_certvalidator.pathr   Ú__all__Ú	getLoggerr*   rP   rŽ   r�   r“   r�   r@   rE   rš   r   r   r    r.   r/   r0   ú<module>rË      s»  ðØ €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø CÐ CÐ CÐ CÐ CÐ CØ IÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð ð ð ð ð
	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ?Ð >Ð >Ð >Ð >Ð >Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð €ð 
ˆÔ	˜8Ñ	$Ô	$€ð �8Øˆ!ˆQ��1�aÐ 1 Ô 1Ð2CÑ DÔ Dðñ ô Ð ð (Ð Ø,Ð àˆoØØÔØ.Ô6ðñ ô €ð	ð 	ð 	ð 	ð 	Ð7ñ 	ô 	ð 	ðTMð TMð TMð TMð TMñ TMô TMð TMðnE
Ø+ðE
à-ðE
ð ðE
ð E
ð E
ð E
ð E
ð E
r/   