§
    ¥”ji  ã                   óÀ  — d dl 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 ddlmZmZmZ dd	lmZ  eg d
¢¦  «        Z eddge¢¦  «        Z eddge¢¦  «        Z eddg¦  «        eeedœZdej        dej        de	fd„Z G d„ de
e j        ¦  «        Z G d„ de¦  «        Z eh d£¦  «        Ze                      ee¦  «        ¦  «        Zdej         fd„Z!dS )é    N)Údatetime)ÚOptional)ÚalgosÚcmsÚkeys)ÚAlgorithmUsageConstraintÚAlgorithmUsagePolicyÚDisallowWeakAlgorithmsPolicyé   )ÚMultivaluedAttributeErrorÚNonexistentAttributeErrorÚfind_unique_cms_attributeé   )ÚSignatureValidationError)Úsha512Úsha3_512Úshake256Úshake256_lenÚsha384Úsha3_384Úsha256Úsha3_256r   r   )Úed448Úmldsa44Úmldsa65Úmldsa87Úsignature_algoÚmessage_digest_algoÚreturnc                 ó  — | d         j         }t                               |t          ¦   «         ¦  «        }|r8|d         j         }||v rt	          d¬¦  «        S t	          dd|› d|› �¬¦  «        S 	 t          j        d| j        i¦  «        }n# t          $ r d }Y nw xY w|�W| 	                    ¦   «         | 	                    ¦   «         k    r-t	          dd|d         j         › d| d         j         › �¬¦  «        S t	          d¬¦  «        S )NÚ	algorithmT)ÚallowedFzDigest algorithm z5 does not match value implied by signature algorithm )r"   Úfailure_reason)
ÚnativeÚ_SIG_ALGO_ALLOWED_DIGEST_LUTÚgetÚ	frozensetr   r   ÚDigestAlgorithmÚ	hash_algoÚ
ValueErrorÚdump)r   r   Úsig_algo_nameÚallowed_digests_from_tableÚalgoÚsig_hash_algo_objs         úl/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/sign/validation/utils.pyÚ_ensure_digest_matchr1   &   sx  € ð # ;Ô/Ô6€MÝ!=×!AÒ!AØ•y‘{”{ñ"ô "Ðð "ð Ø" ;Ô/Ô6ˆØÐ-Ð-Ð-Ý+°DÐ9Ñ9Ô9Ð9å+ØðF¨ð Fð FØ6CðFð Fðñ ô ð ð!Ý!Ô1Ø˜.Ô2Ð3ñ
ô 
ÐÐøõ ð !ð !ð !Ø ÐÐÐð!øøøð 	Ð%Ø×"Ò"Ñ$Ô$Ð(;×(@Ò(@Ñ(BÔ(BÒBÐBå'Øð8Ð$7¸Ô$DÔ$Kð 8ð 8à! +Ô.Ô5ð8ð 8ð
ñ 
ô 
ð 	
õ $¨DÐ1Ñ1Ô1Ð1s   Á0B ÂBÂBc                   ój   — e Zd ZdZdej        dej        dee         de	fd„Z
ededd fd„¦   «         Zd	S )
ÚCMSAlgorithmUsagePolicyz4
    Algorithm usage policy for CMS signatures.
    r   r   Úmomentr   c                 ó"   — t          ||¦  «        S )a  
        Verify whether a digest algorithm is compatible with the digest
        algorithm implied by the provided signature algorithm, if any.

        By default, this enforces the convention (requirement in RFC 8933) that
        the message digest must be computed using the same digest algorithm
        as the one used by the signature, if applicable.

        Checking whether the individual algorithms are allowed is not the
        responsibility of this method.

        :param signature_algo:
            A signature mechanism to use
        :param message_digest_algo:
            The digest algorithm used for the message digest
        :param moment:
            The point in time for which the assessment needs to be made.
        :return:
            A usage constraint.
        )r1   )Úselfr   r   r4   s       r0   Údigest_combination_allowedz2CMSAlgorithmUsagePolicy.digest_combination_allowedV   s   € õ4 $ NÐ4GÑHÔHÐHó    Úpolicyc                 óN   — t          | t          ¦  «        r| S t          | ¦  «        S )aP  
        Lift a 'base' :class:`.AlgorithmUsagePolicy` to a CMS usage algorithm
        policy with default settings. If the policy passed in is already
        a :class:`.CMSAlgorithmUsagePolicy`, return it as-is.

        :param policy:
            The underlying original policy
        :return:
            The lifted policy
        )Ú
isinstancer3   Ú_DefaultPolicyMixin)r9   s    r0   Úlift_policyz#CMSAlgorithmUsagePolicy.lift_policyr   s*   € õ �fÕ5Ñ6Ô6ð 	/ØˆMå& vÑ.Ô.Ð.r8   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚSignedDigestAlgorithmr(   r   r   r   r7   Ústaticmethodr	   r=   © r8   r0   r3   r3   Q   s›   € € € € € ðð ðIàÔ3ðIð #Ô2ðIð ˜Ô"ð	Ið
 
"ðIð Ið Ið Ið8 ð/Ð0ð /Ð5Nð /ð /ð /ñ „\ð/ð /ð /r8   r3   c                   óˆ   — e Zd Zdefd„Zdej        dee         de	fd„Z
dej        dee         deej                 de	fd„Zd	S )
r<   Úunderlying_policyc                 ó   — || _         d S ©N)Ú_policy)r6   rF   s     r0   Ú__init__z_DefaultPolicyMixin.__init__…   s   € Ø(ˆŒˆˆr8   r.   r4   r   c                 ó8   — | j                              ||¦  «        S rH   )rI   Údigest_algorithm_allowed)r6   r.   r4   s      r0   rL   z,_DefaultPolicyMixin.digest_algorithm_allowedˆ   s   € ð Œ|×4Ò4°T¸6ÑBÔBÐBr8   Ú
public_keyc                 ó:   — | j                              |||¦  «        S rH   )rI   Úsignature_algorithm_allowed)r6   r.   r4   rM   s       r0   rO   z/_DefaultPolicyMixin.signature_algorithm_allowed�   s%   € ð Œ|×7Ò7Ø�&˜*ñ
ô 
ð 	
r8   N)r>   r?   r@   r	   rJ   r   r(   r   r   r   rL   rB   r   ÚPublicKeyInforO   rD   r8   r0   r<   r<   „   sµ   € € € € € ð)Ð*>ð )ð )ð )ð )ðCØÔ)ðCØ3;¸HÔ3EðCà	!ðCð Cð Cð Cð

àÔ)ð
ð ˜Ô"ð
ð ˜TÔ/Ô0ð	
ð
 
"ð
ð 
ð 
ð 
ð 
ð 
r8   r<   >   Úmd2Úmd5Úsha1Úsigner_infoc                 ó†   — 	 t          | d         d¦  «        }|j        S # t          t          f$ r t	          d¦  «        ‚w xY w)NÚsigned_attrsÚmessage_digestzUMessage digest not found in signature, or multiple message digest attributes present.)r   r$   r   r   r   )rT   Úembedded_digests     r0   Úextract_message_digestrY   Ÿ   sd   € ð	
Ý3Ø˜Ô'Ð)9ñ
ô 
ˆð Ô%Ð%øÝ%Õ'@ÐAð 
ð 
ð 
Ý&ð)ñ
ô 
ð 	
ð
øøøs	   ‚ Ÿ!A )"Úabcr   Útypingr   Ú
asn1cryptor   r   r   Ú!pyhanko_certvalidator.policy_declr   r	   r
   Úgeneralr   r   r   Úerrorsr   r'   ÚMLDSA87_DIGEST_ALGOSÚMLDSA65_DIGEST_ALGOSÚMLDSA44_DIGEST_ALGOSr%   rB   r(   r1   ÚABCr3   r<   ÚDEFAULT_WEAK_HASH_ALGORITHMSr=   ÚDEFAULT_ALGORITHM_USAGE_POLICYÚ
SignerInforY   rD   r8   r0   ú<module>rg      s<  ðØ 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 -Ð ,Ð ,Ð ,Ð ,Ð ,ð !�yØ6Ð6Ð6ñô Ð ð !�y (¨JÐ!NÐ9MÐ!NÑOÔOÐ Ø �y (¨JÐ!NÐ9MÐ!NÑOÔOÐ ð ˆY˜
 NÐ3Ñ4Ô4Ø#Ø#Ø#ð ð  Ð ð(2ØÔ/ð(2àÔ.ð(2ð ð(2ð (2ð (2ð (2ðV0/ð 0/ð 0/ð 0/ð 0/Ð2°C´Gñ 0/ô 0/ð 0/ðf
ð 
ð 
ð 
ð 
Ð1ñ 
ô 
ð 
ð(  )˜yÐ)?Ð)?Ð)?Ñ@Ô@Ð à!8×!DÒ!DØ Ð Ð!=Ñ>Ô>ñ"ô "Ð ð


¨¬ð 

ð 

ð 

ð 

ð 

ð 

r8   