§
    ¥”jMÕ  ã                   óª  — d dl Z d dl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	m
Z
 d dlmZmZmZmZmZ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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) d dl*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? ddl@mAZAmBZB ddlCmDZDmEZEmFZFmGZGmHZH ddlImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR ddlSmTZTmUZU ddlVmWZWmXZXmYZY ddlZm[Z[  ej\        e]¦  «        Z^ ed¬¦  «         G d„ d¦  «        ¦   «         Z_ G d „ d!eLe j`        ¦  «        Za G d"„ d#eaeW¦  «        Zb G d$„ d%eaeX¦  «        Zc G d&„ d'eaeY¦  «        Zd	  eAje        d(¦  «        Zf	  eAje        d)¦  «        Zg	 	 dad*„Zhdad+„Zidad,„Zjejk         G d-„ d.ejl        ¦  «        ¦   «         Zm	 dbd/end0e[fd1„Zod2ed3ejp        d4enfd5„Zqd2ed3ejp        d4enfd6„Zrd3ejp        d7ej        d8enfd9„Zsd2ed:ee!jt        eef         fd;„Zud2ed3ejv        d4enfd<„Zwd3ejv        d=ed7ej        d>end8enf
d?„Zxd4end@ejy        dAe_fdB„Zz	 dbdCeejy                 d/end0e[dAe_d:ej{        f
dD„Z| G dE„ dFe}¦  «        Z~ G dG„ dH¦  «        Z G dI„ dJej€        ¦  «        Z� G dK„ dLej€        ¦  «        Z‚ ejƒ        dM¦  «        Z„dNe!jt        dOej        dPeen         d:e9fdQ„Z… G dR„ dSeeT¦  «        Z† eTj‡        e†¦  «         dTejˆ        dUed:een         fdV„Z‰dWej{        dUed:eeen         ee[         f         fdX„ZŠdYeAj‹        fdZ„ZŒd[„ Z�d\„ ZŽd]„ Z�d^„ Z�ePj‡         G d_„ d`eP¦  «        ¦   «         Z‘dS )cé    N)Ú	dataclass)Úsha1Úsha256)ÚDictÚListÚOptionalÚSetÚTupleÚUnion)ÚalgosÚcmsÚcoreÚx509)ÚRSAESOAEPParams)ÚKeyEncryptionAlgorithmÚKeyEncryptionAlgorithmId)ÚPrivateKeyInfoÚPublicKeyAlgorithmÚPublicKeyInfo)ÚhashesÚkeywrapÚserialization)ÚECDHÚEllipticCurvePrivateKeyÚEllipticCurvePublicKey)Úgenerate_private_key)ÚMGF1ÚOAEPÚAsymmetricPaddingÚPKCS1v15)ÚRSAPrivateKeyÚRSAPublicKey)ÚX448PrivateKeyÚX448PublicKey)ÚX25519PrivateKeyÚX25519PublicKey)ÚKeyDerivationFunction)ÚX963KDF)Úpkcs12)Úget_pyca_cryptography_hashé   )ÚgenericÚmiscé   )Úaes_cbc_decryptÚaes_cbc_encryptÚrc2_decryptÚrc4_encryptÚtripledes_decrypt)	Ú
AuthResultÚ
AuthStatusÚCryptFilterÚCryptFilterBuilderÚCryptFilterConfigurationÚIdentityCryptFilterÚSecurityHandlerÚSecurityHandlerVersionÚbuild_crypt_filter)ÚSerialisableCredentialÚSerialisedCredential)ÚAESCryptFilterMixinÚAESGCMCryptFilterMixinÚRC4CryptFilterMixin)ÚPubKeyPermissionsT)Úfrozenc                   ó.   — e Zd ZU dZeed<   	 dZeed<   dS )ÚRecipientEncryptionPolicyFÚignore_key_usageÚprefer_oaepN)Ú__name__Ú
__module__Ú__qualname__rF   ÚboolÚ__annotations__rG   © ó    úm/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/pdf_utils/crypt/pubkey.pyrE   rE   M   s>   € € € € € € à"Ð�dÐ"Ð"Ñ"ðð €K�ÐÐÑðð rN   rE   c                   óØ   ‡ — e Zd ZU dZdZed         ed<   ddddœˆ fd„
Zed	e	fd
„¦   «         Z
ˆ fd„Z ej        ¦   «         fdeej                 dedefd„Zd	efd„Zd	efd„Zˆ fd„Zˆ xZS )ÚPubKeyCryptFilteraÕ  
    Crypt filter for use with public key security handler.
    These are a little more independent than their counterparts for
    the standard security handlers, since different crypt filters
    can cater to different sets of recipients.

    :param recipients:
        List of CMS objects encoding recipient information for this crypt
        filters.
    :param acts_as_default:
        Indicates whether this filter is intended to be used in
        ``/StrF`` or ``/StmF``.
    :param encrypt_metadata:
        Whether this crypt filter should encrypt document-level metadata.

        .. warning::
            See :class:`.SecurityHandler` for some background on the
            way pyHanko interprets this value.
    NÚPubKeySecurityHandlerÚ_handlerFT)Ú
recipientsÚacts_as_defaultÚencrypt_metadatac                óŽ   •— || _         || _        || _        d| _        d x| _        | _         t          ¦   «         j        di |¤Ž d S )NFrM   )rT   rU   rV   Ú_pubkey_auth_failedÚ_shared_keyÚ_recp_key_seedÚsuperÚ__init__)ÚselfrT   rU   rV   ÚkwargsÚ	__class__s        €rO   r\   zPubKeyCryptFilter.__init__t   sW   ø€ ð %ˆŒØ.ˆÔØ 0ˆÔØ#(ˆÔ Ø15Ð5ˆÔ˜4Ô.Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"rN   Úreturnc                 ó   — | j         S ©N)rX   ©r]   s    rO   Ú_auth_failedzPubKeyCryptFilter._auth_failedƒ   s   € àÔ'Ð'rN   c                 óž   •— t          |t          ¦  «        st          ‚t          ¦   «                              |¦  «         d x| _        | _        d S rb   )Ú
isinstancerR   Ú	TypeErrorr[   Ú_set_security_handlerrY   rZ   )r]   Úhandlerr_   s     €rO   rh   z'PubKeyCryptFilter._set_security_handler‡   sI   ø€ Ý˜'Õ#8Ñ9Ô9ð 	ÝˆOÝ‰Œ×%Ò% gÑ.Ô.Ð.Ø15Ð5ˆÔ˜4Ô.Ð.Ð.rN   ÚcertsÚpolicyÚpermsc                 óL  — | j         s| j        rt          j        d¦  «        ‚| j        € t	          j        d¦  «        | _        g | _        | j        €| j        €t          j        d¦  «        ‚t          || j        ||| j         ¬¦  «        }| j         	                    |¦  «         dS )ay  
        Add recipients to this crypt filter.
        This always adds one full CMS object to the Recipients array

        :param certs:
            A list of recipient certificates.
        :param policy:
            Encryption policy choices for the chosen set of recipients.
        :param perms:
            The permission bits to assign to the listed recipients.
        zCA non-default crypt filter cannot have multiple sets of recipients.Né   zYAdding recipients after deriving the shared key or before authenticating is not possible.)rk   Úinclude_permissions)
rU   rT   r-   ÚPdfErrorÚsecretsÚtoken_bytesrZ   rY   Úconstruct_recipient_cmsÚappend)r]   rj   rk   rl   Únew_cmss        rO   Úadd_recipientsz PubKeyCryptFilter.add_recipients�   sÊ   € ð$ Ô#ð 	¨¬ð 	Ý”-ðñô ð ð Œ?Ð"õ #*Ô"5°bÑ"9Ô"9ˆDÔØ ˆDŒOàÔÐ'¨4Ô+>Ð+FÝ”-ð9ñô ð õ *ØØÔØØØ $Ô 4ð
ñ 
ô 
ˆð 	Œ×Ò˜wÑ'Ô'Ð'Ð'Ð'rN   c                 ó¸   — | j         D ]:}t          ||¦  «        \  }}|�#|| _        t          t          j        |¦  «        c S Œ;t          t          j        ¦  «        S )a‚  
        Authenticate to this crypt filter in particular.
        If used in ``/StmF`` or ``/StrF``, you don't need to worry about
        calling this method directly.

        :param credential:
            The :class:`.EnvelopeKeyDecrypter` to authenticate with.
        :return:
            An :class:`AuthResult` object indicating the level of access
            obtained.
        )rT   Úread_seed_from_recipient_cmsrZ   r4   r5   ÚUSERÚFAILED)r]   Ú
credentialÚrecpÚseedrl   s        rO   ÚauthenticatezPubKeyCryptFilter.authenticate¸   sf   € ð ”Oð 	:ð 	:ˆDÝ6°t¸ZÑHÔH‰KˆD�%ØÐØ&*�Ô#Ý!¥*¤/°5Ñ9Ô9Ð9Ð9Ð9ð  õ �*Ô+Ñ,Ô,Ð,rN   c                 óÖ  — | j         €J ‚| j        €t          j        d¦  «        ‚| j         j        t
          j        k    rt          ¦   «         }nt          ¦   «         }| 	                    | j        ¦  «         | j
        D ])}| 	                    |                     ¦   «         ¦  «         Œ*| j        s| j        r| 	                    d¦  «         |                     ¦   «         d | j        …         S )Nz&No seed available; authenticate first.s   ÿÿÿÿ)rS   rZ   r-   rp   Úversionr;   ÚAES256r   r   ÚupdaterT   ÚdumprV   rU   ÚdigestÚkeylen)r]   Úmdr|   s      rO   Úderive_shared_encryption_keyz.PubKeyCryptFilter.derive_shared_encryption_keyË   sÖ   € ØŒ}Ð(Ð(Ð(ØÔÐ&Ý”-Ð HÑIÔIÐIØŒ=Ô Õ$:Ô$AÒAÐAÝ‘”ˆBˆBå‘”ˆBØ
�	Š	�$Ô%Ñ&Ô&Ð&Ø”Oð 	#ð 	#ˆDØ�IŠI�d—i’i‘k”kÑ"Ô"Ð"Ð"ØÔ$ð 	+¨Ô)=ð 	+Ø�IŠIÐ)Ñ*Ô*Ð*Ø�yŠy‰{Œ{˜=˜Tœ[˜=Ô)Ð)rN   c                 ó4  •— t          ¦   «                              ¦   «         }t          j        | j        dz  ¦  «        |d<   t          j        d„ | j        D ¦   «         ¦  «        }| j        r||d<   n|d         |d<   t          j        | j	        ¦  «        |d<   |S )Né   ú/Lengthc              3   ób   K  — | ]*}t          j        |                     ¦   «         ¦  «        V — Œ+d S rb   ©r,   ÚByteStringObjectrƒ   ©Ú.0r|   s     rO   ú	<genexpr>z2PubKeyCryptFilter.as_pdf_object.<locals>.<genexpr>Ý   sF   è è € ð )
ð )
Ø6:�GÔ$ T§Y¢Y¡[¤[Ñ1Ô1ð)
ð )
ð )
ð )
ð )
ð )
rN   ú/Recipientsr   ú/EncryptMetadata)
r[   Úas_pdf_objectr,   ÚNumberObjectr…   ÚArrayObjectrT   rU   ÚBooleanObjectrV   )r]   ÚresultrT   r_   s      €rO   r“   zPubKeyCryptFilter.as_pdf_objectÚ   s²   ø€ Ý‘”×&Ò&Ñ(Ô(ˆÝ#Ô0°´¸q±ÑAÔAˆˆyÑÝÔ(ð )
ð )
Ø>B¼oð)
ñ )
ô )
ñ 
ô 
ˆ
ð Ôð 	2Ø$.ˆF�=Ñ!Ð!ð %/¨q¤MˆF�=Ñ!Ý%,Ô%:ØÔ!ñ&
ô &
ˆÐ!Ñ"ð ˆrN   )rH   rI   rJ   Ú__doc__rS   r   rL   r\   ÚpropertyrK   rd   rh   rB   Úallow_everythingr   r   ÚCertificaterE   rv   r4   r~   Úbytesr‡   r“   Ú__classcell__©r_   s   @rO   rQ   rQ   ]   sP  ø€ € € € € € ðð ð( 37€HˆhÐ.Ô/Ð6Ð6Ñ6ð
 ØØð#ð #ð #ð #ð #ð #ð #ð ð(˜dð (ð (ð (ñ „Xð(ð6ð 6ð 6ð 6ð 6ð $FÐ#4Ô#EÑ#GÔ#Gð	)(ð )(à�DÔ$Ô%ð)(ð *ð)(ð !ð	)(ð )(ð )(ð )(ðV-¨*ð -ð -ð -ð -ð&*¨eð *ð *ð *ð *ðð ð ð ð ð ð ð ð rN   rQ   c                   ó   — e Zd ZdZdS )ÚPubKeyAESCryptFilterz<
    AES crypt filter for public key security handlers.
    N©rH   rI   rJ   r˜   rM   rN   rO   r    r    ë   ó   € € € € € ðð ð 	€DrN   r    c                   ó   — e Zd ZdZdS )ÚPubKeyAESGCMCryptFilterz@
    AES-GCM crypt filter for public key security handlers.
    Nr¡   rM   rN   rO   r¤   r¤   ó   r¢   rN   r¤   c                   ó   — e Zd ZdZdS )ÚPubKeyRC4CryptFilterz<
    RC4 crypt filter for public key security handlers.
    Nr¡   rM   rN   rO   r¦   r¦   û   r¢   rN   r¦   z/DefaultCryptFilterz/DefEmbeddedFilec           	      ój   — t          t          t          | d||¬¦  «        it          t          ¬¦  «        S ©NT)r…   rU   rT   rV   ©Údefault_stream_filterÚdefault_string_filter)r8   ÚDEFAULT_CRYPT_FILTERr¦   ©r…   rT   rV   s      rO   Ú_pubkey_rc4_configr®     óG   € Ý#å Õ"6ØØ $Ø%Ø!1ð	#ñ #ô #ð	
õ 3Ý2ðñ ô ð rN   c           	      ój   — t          t          t          | d||¬¦  «        it          t          ¬¦  «        S r¨   )r8   r¬   r    r­   s      rO   Ú_pubkey_aes_configr±   (  r¯   rN   c                 óh   — t          t          t          d| |¬¦  «        it          t          ¬¦  «        S )NT)rU   rT   rV   r©   )r8   r¬   r¤   ©rT   rV   s     rO   Ú_pubkey_gcm_configr´   7  sD   € Ý#å Õ"9Ø $Ø%Ø!1ð#ñ #ô #ð	
õ 3Ý2ð
ñ 
ô 
ð 
rN   c                   ór   — e Zd ZdZ ej        d¦  «        Z ej        d¦  «        Z ej        d¦  «        ZdS )ÚPubKeyAdbeSubFilterz{
    Enum describing the different subfilters that can be used for public key
    encryption in the PDF specification.
    z/adbe.pkcs7.s3z/adbe.pkcs7.s4z/adbe.pkcs7.s5N)	rH   rI   rJ   r˜   r,   Ú
NameObjectÚS3ÚS4ÚS5rM   rN   rO   r¶   r¶   E  sS   € € € € € ðð ð
 
ˆÔ	Ð,Ñ	-Ô	-€BØ	ˆÔ	Ð,Ñ	-Ô	-€BØ	ˆÔ	Ð,Ñ	-Ô	-€B€B€BrN   r¶   r}   rl   c                 ób   — t          | ¦  «        dk    sJ ‚| |r|                     ¦   «         ndz   S )Nrn   rN   )ÚlenÚas_bytes)r}   rl   ro   s      rO   Úconstruct_envelope_contentr¾   Q  s7   € õ ˆt‰9Œ9˜Š?ˆ?ˆ?ˆ?ØÐ':ÐC�5—>’>Ñ#Ô#Ð#ÀÑDÐDrN   Úpub_key_infoÚridÚenvelope_keyc                 ó:  — t          ¦   «         }t          j        dt          j        d¦  «        i¦  «        }t	          j        |                      ¦   «         ¦  «        }t          |t          ¦  «        sJ ‚| 	                    ||¬¦  «        }t          |||¬¦  «        S )NÚ	algorithmÚrsaes_pkcs1v15©Úpadding©rÀ   ÚalgoÚencrypted_data)r    r   r   r   r   Úload_der_public_keyrƒ   rf   r"   ÚencryptÚ_format_ktri)r¿   rÀ   rÁ   rÆ   rÈ   Úpub_keyrÉ   s          rO   Ú_rsaes_pkcs1v15_recipientrÎ   X  s‘   € õ
 ‰jŒj€GåÔ%Ø	•cÔ2Ð3CÑDÔDÐEñô €Dõ Ô/°×0AÒ0AÑ0CÔ0CÑDÔD€GÝ�g�|Ñ,Ô,Ð,Ð,Ð,Ø—_’_ \¸7�_ÑCÔC€NÝ˜C d¸>ÐJÑJÔJÐJrN   c           	      óÌ  — ddl m}  || ¦  «        }t          |¦  «        }t          j        t          j        d¦  «        t          d|idd|idœdœ¦  «        dœ¦  «        }t          t          |¦  «        |d ¬¦  «        }t          j
        |                      ¦   «         ¦  «        }t          |t          ¦  «        sJ ‚|                     ||¬	¦  «        }	t          |||	¬
¦  «        S )Nr   )Úselect_suitable_signing_mdÚ
rsaes_oaeprÃ   Úmgf1©rÃ   Ú
parameters)Úhash_algorithmÚmask_gen_algorithm©ÚmgfrÃ   ÚlabelrÅ   rÇ   )Úpyhanko.sign.signers.pdf_cmsrÐ   r*   r   r   r   r   r   r   r   rÊ   rƒ   rf   r"   rË   rÌ   )
r¿   rÀ   rÁ   rÐ   Údigest_function_nameÚdigest_specrÈ   rÆ   rÍ   rÉ   s
             rO   Ú_rsaes_oaep_recipientrÝ   i  s  € ð HÐGÐGÐGÐGÐGà5Ð5°lÑCÔCÐÝ,Ð-AÑBÔB€KÝÔ%åÔ5°lÑCÔCÝ)à'2Ð4HÐ&Ià%+Ø'2Ð4HÐ&Ið+ð +ðð ñô ð	
ð 	
ñô €Dõ •t˜KÑ(Ô(°KÀtÐLÑLÔL€GåÔ/°×0AÒ0AÑ0CÔ0CÑDÔD€GÝ�g�|Ñ,Ô,Ð,Ð,Ð,Ø—_’_ \¸7�_ÑCÔC€NÝ˜C d¸>ÐJÑJÔJÐJrN   rÈ   rÉ   c           
      ó\   — t          j        dt          j        d| ||dœ¦  «        i¦  «        S )NÚktrir   )r€   rÀ   Úkey_encryption_algorithmÚencrypted_key)r   ÚRecipientInfoÚKeyTransRecipientInforÇ   s      rO   rÌ   rÌ   ‰  sF   € õ
 Ôà•CÔ-à ØØ04Ø%3ð	ð ñô ð		
ñô ð rN   r`   c                 ó€  — | j         }|dk    r| j        dz  }n|dk    rd}nd}|dk    r0t          j        ¦   «         t	          d¦  «        t	          d¦  «        fS |dk    r0t          j        ¦   «         t	          d	¦  «        t	          d
¦  «        fS t          j        ¦   «         t	          d¦  «        t	          d¦  «        fS )NÚecr+   Úx25519é€   é   Úaes128_wrapz1.3.132.1.11.1éÀ   Úaes192_wrapz1.3.132.1.11.2Úaes256_wrapz1.3.132.1.11.3)rÃ   Úbit_sizer   ÚSHA256r   ÚSHA384ÚSHA512)r¿   Ú	algo_nameÚapprox_sec_levels      rO   Ú_choose_ecdh_settingsró   œ  sÚ   € ð
 Ô&€IØ�DÒÐØ'Ô0°AÑ5ÐÐØ	�hÒ	Ð	ØÐÐàÐà˜3ÒÐåŒM‰OŒOÝ$ ]Ñ3Ô3Ý$Ð%5Ñ6Ô6ð
ð 	
ð
 
˜SÒ	 Ð	 åŒM‰OŒOÝ$ ]Ñ3Ô3Ý$Ð%5Ñ6Ô6ð
ð 	
õ ŒM‰OŒOÝ$ ]Ñ3Ô3Ý$Ð%5Ñ6Ô6ð
ð 	
rN   c           	      óØ  — t          | ¦  «        \  }}}t          d|i¦  «        }t          j        |                      ¦   «         ¦  «        }t          |t          ¦  «        r7t          |j        ¦  «        }| 	                    t          ¦   «         |¦  «        }	nƒt          |t          ¦  «        r)t          j        ¦   «         }| 	                    |¦  «        }	nEt          |t          ¦  «        r)t          j        ¦   «         }| 	                    |¦  «        }	nt           ‚t#          j        |                     ¦   «                              t          j        j        t          j        j        ¦  «        ¦  «        }
t3          j        d¦  «        }t7          |||¬¦  «        }|                     |	¦  «        }t;          j        ||¬¦  «        }t?          ||
tA          j        ||dœ¦  «        ||¬¦  «        S )NrÃ   é   ©Ú
kdf_digestÚkey_wrap_algoÚuser_keying_material)Úwrapping_keyÚkey_to_wraprÓ   ©rÀ   Úoriginator_keyrÈ   ÚukmrÉ   )!ró   r   r   rÊ   rƒ   rf   r   Úgenerate_ec_private_keyÚcurveÚexchanger   r&   r%   Úgenerater$   r#   ÚNotImplementedErrorr   ÚloadÚ
public_keyÚpublic_bytesÚEncodingÚDERÚPublicFormatÚSubjectPublicKeyInforq   rr   Ú_kdf_for_exchangeÚderiver   Úaes_key_wrapÚ_format_karir   )r¿   rÀ   rÁ   rÜ   Úkey_wrap_algo_idÚkey_exch_algo_idrø   rÍ   rý   Ú
ecdh_valueÚoriginator_key_inforþ   ÚkdfÚkekrÉ   s                  rO   Ú_ecdh_recipientr  ½  sé  € õ 7LØñ7ô 7Ñ3€KÐ!Ð#3õ +¨KÐ9IÐ+JÑKÔK€MÝÔ/°×0AÒ0AÑ0CÔ0CÑDÔD€Gõ
 �'Õ1Ñ2Ô2ð 
"Ý0°´Ñ?Ô?ˆØ#×,Ò,­T©V¬V°WÑ=Ô=ˆ
ˆ
Ý	�G�_Ñ	-Ô	-ð "Ý)Ô2Ñ4Ô4ˆØ#×,Ò,¨WÑ5Ô5ˆ
ˆ
Ý	�G�]Ñ	+Ô	+ð "Ý'Ô0Ñ2Ô2ˆØ#×,Ò,¨WÑ5Ô5ˆ
ˆ
å!Ð!å'Ô,Ø×!Ò!Ñ#Ô#×0Ò0ÝÔ"Ô&ÝÔ&Ô;ñ	
ô 	
ñô Ðõ Ô
˜bÑ
!Ô
!€CÝ
ØØ#Ø ðñ ô €Cð
 �*Š*�ZÑ
 Ô
 €CÝÔ)Ø lðñ ô €Nõ ØØ*ÝÔ'à-Ø+ðð ñ
ô 
ð Ø%ðñ ô ð rN   rý   rþ   c                 ó²   — t          j        dt          j        dt          j        d|¬¦  «        ||t          j        | |dœ¦  «        gdœ¦  «        ¬¦  «        S )NÚkarié   rý   )ÚnameÚvalue)rÀ   rá   )r€   Ú
originatorrþ   rà   Úrecipient_encrypted_keys)r   râ   ÚKeyAgreeRecipientInfoÚOriginatorIdentifierOrKeyÚRecipientEncryptedKeyrü   s        rO   r  r  ÷  s€   € õ ÔØÝÔ'àÝ!Ô;Ø)°ðñ ô ð Ø,0åÔ-Ø #°nÐEÐEñô ð-ðð ñ
ô 
ðñ ô ð rN   Úcertrk   c                 ó"  — |j         }|d         }|d         j        }t          | ¦  «        dk    sJ ‚|j        s4|j        }|�	d|j        vr"t          j        d|j        j        › d�¦  «        ‚t          j
        |j        |j        dœ¦  «        }|dk    r?t          j        d|i¦  «        }|j        rt          ||| ¦  «        S t!          ||| ¦  «        S |d	v r't          j        d|i¦  «        }	t%          ||	| ¦  «        S t'          d
|› d�¦  «        ‚)NrÃ   é    Úkey_enciphermentzCertificate for subject z8 does not have the 'key_encipherment' key usage bit set.)ÚissuerÚserial_numberÚrsaÚissuer_and_serial_number)rå   ræ   Úx448zCannot encrypt for key type 'ú')r  Únativer¼   rF   Úkey_usage_valuer-   ÚPdfWriteErrorÚsubjectÚhuman_friendlyr   ÚIssuerAndSerialNumberr$  r%  ÚRecipientIdentifierrG   rÝ   rÎ   ÚKeyAgreementRecipientIdentifierr  r  )
rÁ   r   rk   r¿   Úpubkey_algo_infoÚalgorithm_nameÚ	key_usageÚiss_serial_ridrÀ   Úka_rids
             rO   Ú_recipient_infor7    sn  € ð
 ”?€LØ+7¸Ô+DÐØ% kÔ2Ô9€Nåˆ|ÑÔ Ò"Ð"Ð"Ð"àÔ"ð àÔ(ˆ	ØÐÐ 2¸)Ô:JÐ JÐ JÝÔ$ðF¨4¬<Ô+Fð Fð Fð Fñô ð õ Ô.Ø”;°Ô1CÐDÐDñô €Nð ˜ÒÐÝÔ%Ø'¨Ð8ñ
ô 
ˆð Ôð 	NÝ(¨°s¸LÑIÔIÐIå,¨\¸3ÀÑMÔMÐMØ	Ð3Ð	3Ð	3ÝÔ4Ø'¨Ð8ñ
ô 
ˆõ ˜|¨V°\ÑBÔBÐBå!Ø=¨NÐ=Ð=Ð=ñ
ô 
ð 	
rN   Úcertificatesc                 óÂ  ‡‡— t          |||¬¦  «        }t          j        d¦  «        Št          ‰|d ¬¦  «        \  }}ˆˆfd„| D ¦   «         }t	          j        t          j        d¦  «        |dœ¦  «        }	t	          j        t	          j	        d¦  «        |	|dœ¦  «        }
t	          j
        d	||
d
œ¦  «        }t	          j        t	          j	        d¦  «        |dœ¦  «        S )N)ro   r"  )Úivc                 ó4   •— g | ]}t          ‰|‰¬ ¦  «        ‘ŒS ))rk   )r7  )r�   r   rÁ   rk   s     €€rO   ú
<listcomp>z+construct_recipient_cms.<locals>.<listcomp>^  s8   ø€ ð ð ð àõ 	˜ d°6Ð:Ñ:Ô:ðð ð rN   Ú
aes256_cbcrÓ   Údata)Úcontent_typeÚcontent_encryption_algorithmÚencrypted_contentr   )r€   Úrecipient_infosÚencrypted_content_infoÚenveloped_data)r?  Úcontent)r¾   rq   rr   r0   r   ÚEncryptionAlgorithmr   ÚEncryptionAlgorithmIdÚEncryptedContentInfoÚContentTypeÚEnvelopedDataÚContentInfo)r8  r}   rl   rk   ro   Úenvelope_contentr:  Úencrypted_envelope_contentÚ	rec_infosrÈ   rC  rD  rÁ   s      `        @rO   rs   rs   =  s=  øø€ õ, 2ØˆeÐ)<ðñ ô Ðõ Ô& rÑ*Ô*€Lå%4ØÐ&¨4ð&ñ &ô &Ñ"€BÐ"ð
ð ð ð ð à ðñ ô €Iõ
 Ô"åÔ4°\ÑBÔBØð	
ð 	
ñô €Dõ !Ô5åœO¨FÑ3Ô3Ø,0Ø!;ð	
ð 	
ñô Ðõ Ô&àØ(Ø&<ð	
ð 	
ñô €Nõ Œ?åœOÐ,<Ñ=Ô=Ø%ð	
ð 	
ñô ð rN   c                   ó   — e Zd ZdS )ÚInappropriateCredentialErrorN)rH   rI   rJ   rM   rN   rO   rP  rP  „  s   € € € € € Ø€DrN   rP  c            
       ó†   — e Zd ZdZedej        fd„¦   «         Zdede	j
        defd„Zdede	j
        de	j        dedef
d	„Zd
S )ÚEnvelopeKeyDecrypterz¦
    General credential class for use with public key security handlers.

    This allows the key decryption process to happen offline, e.g. on a smart
    card.
    r`   c                 ó   — t           ‚)zI
        :return:
            Return the recipient's certificate
        ©r  rc   s    rO   r   zEnvelopeKeyDecrypter.cert‘  s
   € õ "Ð!rN   rá   Úalgo_paramsc                 ó   — t           ‚)a¢  
        Invoke the actual key decryption algorithm.
        Used with key transport.

        :param encrypted_key:
            Payload to decrypt.
        :param algo_params:
            Specification of the encryption algorithm as a CMS object.
        :raises InappropriateCredentialError:
            if the credential cannot be used for key transport.
        :return:
            The decrypted payload.
        rT  )r]   rá   rU  s      rO   ÚdecryptzEnvelopeKeyDecrypter.decrypt™  s
   € õ  "Ð!rN   Úoriginator_identifierrù   c                 ó   — t           ‚)a"  
        Decrypt an envelope key using a key derived from a key exchange.

        :param encrypted_key:
            Payload to decrypt.
        :param algo_params:
            Specification of the encryption algorithm as a CMS object.
        :param originator_identifier:
            Information about the originator necessary to complete the key
            exchange.
        :param user_keying_material:
            The user keying material that will be used in the key derivation.
        :return:
            The decrypted payload.
        rT  )r]   rá   rU  rX  rù   s        rO   Údecrypt_with_exchangez*EnvelopeKeyDecrypter.decrypt_with_exchange«  s
   € õ, "Ð!rN   N)rH   rI   rJ   r˜   r™   r   r›   r   rœ   r   r   rW  r  rZ  rM   rN   rO   rR  rR  ‰  sÁ   € € € € € ðð ð ð"�dÔ&ð "ð "ð "ñ „Xð"ð"Ø"ð"Ø14Ô1Kð"à	ð"ð "ð "ð "ð$"àð"ð Ô/ð"ð  #Ô<ð	"ð
 $ð"ð 
ð"ð "ð "ð "ð "ð "rN   rR  c                   ó(   — e Zd Zdefdej        fgZdS )Ú_PrivKeyAndCertÚkeyr   N)rH   rI   rJ   r   r   r›   Ú_fieldsrM   rN   rO   r\  r\  Ä  s%   € € € € € Ø�~Ð&¨°Ô1AÐ(BÐC€G€G€GrN   r\  c                   óF   — e Zd Zdefdej        dddœfdej        ddifgZd	S )
ÚECCCMSSharedInfoÚkey_infoÚentityUInfor   T)ÚexplicitÚoptionalÚsuppPubInforc  r+   N)rH   rI   rJ   r   r   ÚOctetStringr^  rM   rN   rO   r`  r`  È  sJ   € € € € € à	Ð+Ð,àØÔØ¨Ð-Ð-ð	
ð
 
˜Ô(¨:°q¨/Ð:ð€G€G€GrN   r`  zaes(\d+)_wrap(_pad)?r÷   rø   rù   c                 óV  — |d         j         }t                               |¦  «        }|st          |› d�¦  «        ‚t	          |                     d¦  «        ¦  «        }t          | |dz  t          ||t          j	        d|¦  «        dœ¦  «         
                    ¦   «         ¬¦  «        }|S )NrÃ   ú* is not a supported key wrapping algorithmr.   r‰   z>I)ra  rb  re  )rÃ   ÚlengthÚ
sharedinfo)r*  ÚAES_WRAP_PATTERNÚ	fullmatchr  ÚintÚgroupr(   r`  ÚstructÚpackrƒ   )r÷   rø   rù   r  Ú
wrap_matchÚkek_bit_lenr  s          rO   r  r  ×  sÆ   € ð *¨+Ô6Ô=ÐÝ!×+Ò+Ð,<Ñ=Ô=€JØð 
Ý!ØÐKÐKÐKñ
ô 
ð 	
õ �j×&Ò& qÑ)Ô)Ñ*Ô*€KÝ
ØØ˜aÑÝ#à)Ø3Ý%œ{¨4°Ñ=Ô=ðð ñ
ô 
÷ Š$‰&Œ&ð
ñ 
ô 
€Cð €JrN   c            
       ó@  — e Zd ZdZ ej        d¦  «        Zedefd„¦   «         Z	de
fd„Zede
fd„¦   «         Zdej        d	efd
„Zedej        fd„¦   «         Zedd„¦   «         Zedd„¦   «         Zde
dej        de
fd„Zde
dej        dej        dee
         de
f
d„ZdS )ÚSimpleEnvelopeKeyDecrypterzñ
    Implementation of :class:`.EnvelopeKeyDecrypter` where the private key
    is an RSA or ECC key residing in memory.

    :param cert:
        The recipient's certificate.
    :param private_key:
        The recipient's private key.
    z1\.3\.132\.1\.11\.(\d+)r`   c                 ó   — dS )NÚraw_privkeyrM   ©Úclss    rO   Úget_namez#SimpleEnvelopeKeyDecrypter.get_nameÿ  s   € àˆ}rN   c                 ób   — | j         | j        dœ}t          |¦  «                             ¦   «         S )N)r]  r   )Úprivate_keyr   r\  rƒ   )r]   Úvaluess     rO   Ú
_ser_valuez%SimpleEnvelopeKeyDecrypter._ser_value  s.   € ØÔ)°4´9Ð=Ð=ˆÝ˜vÑ&Ô&×+Ò+Ñ-Ô-Ð-rN   r>  c                 óÊ   — 	 t                                |¦  «        }|d         }|d         }n'# t          $ r}t          j        d¦  «        |‚d }~ww xY wt          ||¬¦  «        S )Nr]  r   z-Failed to decode serialised pubkey credential©r   r{  )r\  r  Ú
ValueErrorr-   ÚPdfReadErrorrt  )rx  r>  Údecodedr]  r   Úes         rO   Ú_deser_valuez'SimpleEnvelopeKeyDecrypter._deser_value  s}   € ð	Ý%×*Ò*¨4Ñ0Ô0ˆGØ˜%”.ˆCØ˜6”?ˆDˆDøÝð 	ð 	ð 	ÝÔ#Ø?ñô àðøøøøð	øøøõ *¨tÀÐEÑEÔEÐEs   ‚*- ­
A·AÁAr   r{  c                 ó"   — || _         || _        d S rb   )r{  Ú_cert)r]   r   r{  s      rO   r\   z#SimpleEnvelopeKeyDecrypter.__init__  s   € Ø+6ˆÔØˆŒ
ˆ
ˆ
rN   c                 ó   — | j         S rb   )r†  rc   s    rO   r   zSimpleEnvelopeKeyDecrypter.cert  s
   € àŒzÐrN   Nc                 óò   — ddl m} 	  || |¬¦  «        }ddl m}  ||¦  «        }nA# t          t          t
          f$ r'}t                               d|¬¦  «         Y d}~dS d}~ww xY wt          ||¬¦  «        S )	aœ  
        Load a key decrypter using key material from files on disk.

        :param key_file:
            File containing the recipient's private key.
        :param cert_file:
            File containing the recipient's certificate.
        :param key_passphrase:
            Passphrase for the key file, if applicable.
        :return:
            An instance of :class:`.SimpleEnvelopeKeyDecrypter`.
        r  )Úload_private_key_from_pemder)Ú
passphrase)Úload_cert_from_pemderz%Could not load cryptographic material©Úexc_infoNr  )	Úkeysr‰  r‹  ÚIOErrorr€  rg   ÚloggerÚerrorrt  )Úkey_fileÚ	cert_fileÚkey_passphraser‰  r{  r‹  r   rƒ  s           rO   r  zSimpleEnvelopeKeyDecrypter.load  s¼   € ð 	9Ð8Ð8Ð8Ð8Ð8ð		Ø6Ð6Ø ^ðñ ô ˆKð 6Ð5Ð5Ð5Ð5Ð5à(Ð(¨Ñ3Ô3ˆDˆDøÝ�¥YÐ/ð 	ð 	ð 	Ý�LŠLÐ@È1ˆLÑMÔMÐMØ�4�4�4�4�4øøøøð	øøøõ *¨tÀÐMÑMÔMÐMs   ˆ' §A%¾A Á A%c                 ó˜  — 	 t          |d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   t          j        ||¦  «        \  }}}ddlm}m}	  ||¦  «        } |	|¦  «        }nE# t          t          t          f$ r+}
t                               d|› d�|
¬¦  «         Y d}
~
dS d}
~
ww xY wt          ||¬¦  «        S )	aZ  
        Load a key decrypter using key material from a PKCS#12 file on disk.

        :param pfx_file:
            Path to the PKCS#12 file containing the key material.
        :param passphrase:
            Passphrase for the private key, if applicable.
        :return:
            An instance of :class:`.SimpleEnvelopeKeyDecrypter`.
        ÚrbNr  )Ú(translate_pyca_cryptography_cert_to_asn1Ú'translate_pyca_cryptography_key_to_asn1zCould not open PKCS#12 file ú.rŒ  r  )ÚopenÚreadr)   Úload_key_and_certificatesÚkeys.internalr—  r˜  r�  r€  rg   r�  r‘  rt  )rx  Úpfx_filerŠ  ÚfÚ	pfx_bytesr{  r   Úother_certsr—  r˜  rƒ  s              rO   Úload_pkcs12z&SimpleEnvelopeKeyDecrypter.load_pkcs127  sJ  € ð	Ý�h Ñ%Ô%ð %¨ØŸFšF™HœH�	ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %å/5Ô/OØ˜:ñ0ô 0Ñ,ˆ[˜$ ðð ð ð ð ð ð ð ð
 <Ð;¸DÑAÔAˆDØAÐAÀ+ÑNÔNˆKˆKøÝ�¥YÐ/ð 	ð 	ð 	Ý�LŠLÐC¸ÐCÐCÐCÈaˆLÑPÔPÐPØ�4�4�4�4�4øøøøð	øøøõ *¨tÀÐMÑMÔMÐMs2   ‚A6 ’3§A6 ³7·A6 º7»:A6 Á6B8Â B3Â3B8rá   rU  c                 ón  — |d         j         }|dk    rt          ¦   «         }n¬|dk    r“|d         }|d         }|d         j         }|dk    rt          d|› d�¦  «        ‚t          t	          t          |d         d         j         ¦  «        ¬	¦  «        t          |d
         d         j         ¦  «        d¬¦  «        }nt          d|› d�¦  «        ‚t          j        | j         	                    ¦   «         d¬¦  «        }t          |t          ¦  «        st          d¦  «        ‚|                     ||¬¦  «        S )a®  
        Decrypt the payload using RSA with PKCS#1 v1.5 padding or OAEP.
        Other schemes are not (currently) supported by this implementation.

        :param encrypted_key:
            Payload to decrypt.
        :param algo_params:
            Specification of the encryption algorithm as a CMS object.
            Must use ``rsaes_pkcs1v15`` or ``rsaes_oaep``.
        :return:
            The decrypted payload.
        rÃ   rÄ   rÑ   rÔ   rÖ   rÒ   z#Only MGF1 is implemented, but got 'r)  )rÃ   rÕ   Nr×   zSOnly 'rsaes_pkcs1v15' and 'rsaes_oaep' are supported for envelope decryption, not 'z'.©Úpasswordz5The loaded key does not seem to be an RSA private keyrÅ   )r*  r    r  r   r   r*   r   Úload_der_private_keyr{  rƒ   rf   r!   rP  rW  )	r]   rá   rU  rñ   rÆ   Úoaep_paramsrØ   Úmgf_nameÚpriv_keys	            rO   rW  z"SimpleEnvelopeKeyDecrypter.decryptX  sˆ  € ð   Ô,Ô3ˆ	àÐ(Ò(Ð(Ý‘j”jˆGˆGØ˜,Ò&Ð&Ø+6°|Ô+DˆKØÐ2Ô3ˆCØ˜;Ô'Ô.ˆHØ˜6Ò!Ð!Ý)ØE¸(ÐEÐEÐEñô ð õ ÝÝ8Ø˜LÔ)¨+Ô6Ô=ñô ðñ ô õ
 5ØÐ 0Ô1°+Ô>ÔEñô ð ð
ñ 
ô 
ˆGˆGõ &ð;Ø-6ð;ð ;ð ;ñô ð õ !Ô5ØÔ×!Ò!Ñ#Ô#¨dð
ñ 
ô 
ˆõ ˜(¥MÑ2Ô2ð 	Ý.ØGñô ð ð ×Ò °wÐÑ?Ô?Ð?rN   rX  rù   c                 óV  — |d         }| j                              |j        ¦  «        }d}|rrt          j        ¦   «         t          j        ¦   «         t          j        ¦   «         t          j        ¦   «         dœ                     | 	                    d¦  «        d¦  «        }|st          d¦  «        ‚t          j                             |d                              ¦   «         ¦  «        }|d         j        }	t                                |	¦  «        st          |	› d�¦  «        ‚|	                     d¦  «        rt$          j        nt$          j        }
t+          |||¬	¦  «        }|j        d
k    rt          d¦  «        ‚|j                             ¦   «         }t3          j        |                     ¦   «         ¦  «        }t3          j        | j                             ¦   «         d¬¦  «        }d}t;          |t<          ¦  «        rat;          |t>          ¦  «        r|j         j        |j         j        k    rtC          |¦  «        ‚| "                    tG          ¦   «         |¦  «        }n­t;          |tH          ¦  «        r:t;          |tJ          ¦  «        stC          |¦  «        ‚| "                    |¦  «        }n^t;          |tL          ¦  «        r:t;          |tN          ¦  «        stC          |¦  «        ‚| "                    |¦  «        }ntQ          d¦  «        ‚| )                    |¦  «        } |
||¬¦  «        S )am  
        Decrypt the payload using a key agreed via ephemeral-static
        standard (non-cofactor) ECDH with X9.63 key derivation.
        Other schemes aer not supported at this time.


        :param encrypted_key:
            Payload to decrypt.
        :param algo_params:
            Specification of the encryption algorithm as a CMS object.
        :param originator_identifier:
            The originator info, which must be an EC key.
        :param user_keying_material:
            The user keying material that will be used in the key derivation.
        :return:
            The decrypted payload.
        rÃ   N)Ú0Ú1Ú2Ú3r.   zGOnly dhSinglePass-stdDH algorithms from SEC 1 / RFC 5753 are supported.rÔ   rh  Ú_padrö   rý   z Only originator_key is supportedr¤  zCOriginator's public key is not compatible with selected private keyz4The loaded key does not seem to be an EC private key)rú   Úwrapped_key)*Údhsinglepass_stddh_arc_patternrl  Údottedr   ÚSHA224rî   rï   rð   Úgetrn  r  r   r   r  rƒ   r*  rk  Úendswithr   Úaes_key_unwrap_with_paddingÚaes_key_unwrapr  r  ÚchosenÚuntagr   rÊ   r¦  r{  rf   r   r   r   r€  r  r   r%   r&   r#   r$   rP  r  )r]   rá   rU  rX  rù   ÚoidÚmatchr÷   rø   r  Ú
unwrap_keyr  Úoriginator_pub_key_infoÚoriginator_pub_keyr©  Úmismatch_msgr  Úderived_keks                     rO   rZ  z0SimpleEnvelopeKeyDecrypter.decrypt_with_exchangeŒ  s.  € ð2 ˜+Ô&ˆàÔ3×=Ò=¸c¼jÑIÔIˆØ59ˆ
Øð 	(å”]‘_”_Ý”]‘_”_Ý”]‘_”_Ý”]‘_”_ð	ð ÷
 Šc�%—+’+˜a‘.”. $Ñ'Ô'ð ð ð 	Ý%ðñô ð õ
 Ô2×7Ò7Ø˜Ô%×*Ò*Ñ,Ô,ñ
ô 
ˆð !.¨kÔ :Ô AÐå×)Ò)Ð*:Ñ;Ô;ð 	Ý%Ø#ÐOÐOÐOñô ð ð
  ×(Ò(¨Ñ0Ô0ð(�GÔ/Ð/åÔ'ð 	õ
  Ø!Ø'Ø!5ð
ñ 
ô 
ˆð !Ô%Ð)9Ò9Ð9Ý%Ð&HÑIÔIÐIð "Ô(×.Ò.Ñ0Ô0ð 	 õ +Ô>Ø#×(Ò(Ñ*Ô*ñ
ô 
Ðõ !Ô5ØÔ×!Ò!Ñ#Ô#¨dð
ñ 
ô 
ˆð
(ð 	õ �hÕ 7Ñ8Ô8ð 	õ Ð1Õ3IÑJÔJð/à%Ô+Ô0°H´NÔ4GÒGÐGå  Ñ.Ô.Ð.Ø!×*Ò*­4©6¬6Ð3EÑFÔFˆJˆJÝ˜Õ"2Ñ3Ô3ð 	ÝÐ0µ/ÑBÔBð /Ý  Ñ.Ô.Ð.Ø!×*Ò*Ð+=Ñ>Ô>ˆJˆJÝ˜¥.Ñ1Ô1ð 	ÝÐ0µ-Ñ@Ô@ð /Ý  Ñ.Ô.Ð.Ø!×*Ò*Ð+=Ñ>Ô>ˆJˆJå.ØFñô ð ð —j’j Ñ,Ô,ˆØˆz {ÀÐNÑNÔNÐNrN   rb   )rH   rI   rJ   r˜   ÚreÚcompiler±  ÚclassmethodÚstrry  rœ   r}  r„  r   r›   r   r\   r™   r   Ústaticmethodr  r¢  r   r   rW  r  r   rZ  rM   rN   rO   rt  rt  ò  sÒ  € € € € € ðð ð &0 R¤ZÐ0JÑ%KÔ%KÐ"àð˜ð ð ð ñ „[ðð.˜Eð .ð .ð .ð .ð ð	F ð 	Fð 	Fð 	Fñ „[ð	Fð˜TÔ-ð ¸Nð ð ð ð ð ð�dÔ&ð ð ð ñ „Xðð ðNð Nð Nñ „\ðNð6 ðNð Nð Nñ „[ðNð@2@Ø"ð2@Ø14Ô1Kð2@à	ð2@ð 2@ð 2@ð 2@ðhfOàðfOð Ô/ðfOð  #Ô<ð	fOð
 ' uœoðfOð 
ðfOð fOð fOð fOð fOð fOrN   rt  ÚedÚ	decrypterc           	      óö  — | d         D �]î}|j         dk    rÓ|j        }|d         j        }t          |t          j        ¦  «        st          d¦  «        ‚|d         }|d         j        }|j        j        |k    rp|j        j	        |k    r`	 | 
                    |d         j        |d         ¦  «        c S # t          $ r}|‚d }~wt          $ r}t          j        d	¦  «        |‚d }~ww xY wŒá|j         d
k    rõ|j        }|d         D ]ã}	|	d         j        }t          |t          j        ¦  «        st          d¦  «        ‚|d         }|d         j        }|j        j        |k    r†|j        j	        |k    rv	 |                     |	d         j        |d         |d         |d         j        ¬¦  «        c c S # t          $ r}|‚d }~wt          $ r}t          j        d	¦  «        |‚d }~ww xY wŒä�Œát          d¦  «        ‚d S )NrB  rß   rÀ   z;Recipient identifier must be of type IssuerAndSerialNumber.r$  r%  rá   rà   zFailed to decrypt envelope keyr  r  r  rþ   )rX  rù   zLRecipientInfo must be of type KeyTransRecipientInfo or KeyAgreeRecipientInfo)r  r¸  rf   r   r/  r  r*  r   r$  r%  rW  rP  Ú	Exceptionr-   r�  rZ  )
rÆ  rÇ  Úrec_inforß   Úissuer_and_serialr$  Úserialrƒ  r  Úrecipient_enc_keys
             rO   Úread_envelope_keyrÎ  ø  s¨  € ð Ð(Ô)ð 9ñ 9ˆØŒ=˜FÒ"Ð"Ø”?ˆDØ $ U¤Ô 2ÐÝÐ/µÔ1JÑKÔKð Ý)ØQñô ð ð ' xÔ0ˆFØ& Ô7Ô>ˆFà”Ô%¨Ò/Ð/Ø”NÔ0°FÒ:Ð:ð
Ø$×,Ò,Ø˜_Ô-Ô4ØÐ7Ô8ñô ð ð ð øõ 4ð ð ð Ø�GøøøøÝ ð ð ð ÝÔ+Ø8ñô àðøøøøðøøøøð Œ]˜fÒ$Ð$Ø”?ˆDØ%)Ð*DÔ%Eð !ð !Ð!Ø$5°eÔ$<Ô$CÐ!å!Ð"3µSÔ5NÑOÔOð Ý-ØUñô ð ð +¨8Ô4�Ø*¨?Ô;ÔB�à”NÔ)¨VÒ3Ð3Ø!œÔ4¸Ò>Ð>ð!Ø(×>Ò>Ø-¨oÔ>ÔEØ Ð!;Ô<Ø26°|Ô2DØ15°e´Ô1Cð	  ?ñ  ô  ð ð ð ð ð øõ 8ð  ð  ð  Ø˜øøøøÝ$ð !ð !ð !Ý"Ô/Ø<ñô à ð!øøøøð!øøøøñ-!õ6 &ð+ñô ð ð
 ˆ4sH   Â
&B3Â3
C&Â=B?Â?C&ÃC!Ã!C&Å2:F1Æ1
G$Æ;F=Æ=G$Ç
GÇG$Úrecipient_cmsc                 óâ  — | d         j         }|dk    rt          j        d|z   ¦  «        ‚| d         }|d         }t          ||¦  «        }|€dS |d         }|d         j         }	 |j        }n$# t
          t          f$ r |d	         j         }Y nw xY w|d
k    rt          d¦  «        ‚|dk    r|j        }	t          |||	¦  «        }
nm|dk    r|j        }	t          |||	¦  «        }
nN|dk    r|j        }	t          |||	¦  «        }
n/|dk    rt          ||¦  «        }
nt          j        d|› d�¦  «        ‚|
d d…         }d }t          |
¦  «        dk    rt          j        |
dd …         ¦  «        }||fS )Nr?  rD  z7Recipient CMS content type must be enveloped data, not rE  rC  )NNr@  rA  rÃ   Údesz2Support for DES has been dropped in pyHanko 0.26.0ÚaesÚ	tripledesÚrc2Úrc4zCipher z is not allowed in PDF 2.0.rn   é   )r*  r-   r�  rÎ  Úencryption_cipherr€  ÚKeyErrorr  Úencryption_ivr/   r3   r1   r2   r¼   rB   Ú
from_bytes)rÏ  rÇ  r?  rÆ  rC  rÁ   rÈ   rM  Úcipher_namer:  rE  r}   rl   s                rO   rx   rx   :  sú  € ð ! Ô0Ô7€LØÐ'Ò'Ð'ÝÔØEØññ
ô 
ð 	
ð *¨)Ô4€BØÐ 8Ô9ÐÝ$ R¨Ñ3Ô3€LØÐØˆzð
 %;Ø&ô%€Dð "8Øô"äð ð/ØÔ,ˆˆøÝ�Ð!ð /ð /ð /Ø˜;Ô'Ô.ˆˆˆð/øøøð �eÒÐÝ!Ø@ñ
ô 
ð 	
ð 
˜Ò	Ð	ØÔˆÝ! ,Ð0JÈBÑOÔOˆˆØ	˜Ò	#Ð	#ØÔˆÝ#ØÐ4°bñ
ô 
ˆˆð 
˜Ò	Ð	ØÔˆÝ˜lÐ,FÈÑKÔKˆˆØ	˜Ò	Ð	Ý˜lÐ,FÑGÔGˆˆåÔØ>�kÐ>Ð>Ð>ñ
ô 
ð 	
ð �3�B�3Œ<€DØ)-€EÝ
ˆ7�|„|�rÒÐå!Ô,¨W°R°S°S¬\Ñ:Ô:ˆØ�ˆ;Ðs   Á%A- Á-BÂBÚcfdictc                 óâ   — 	 | d         }n"# t           $ r t          j        d¦  «        ‚w xY wt          |t          j        ¦  «        r|f}d„ |D ¦   «         }|                      dd¦  «        }||dœS )Nr‘   z.PubKey CF dictionary must have /Recipients keyc                 óV   — g | ]&}t           j                             |j        ¦  «        ‘Œ'S rM   ©r   rK  r  Úoriginal_bytes©r�   Úxs     rO   r<  z0_read_generic_pubkey_cf_info.<locals>.<listcomp>‚  s8   € ð ð ð Ø34�Œ×Ò˜QÔ-Ñ.Ô.ðð ð rN   r’   Tr³   )rØ  r-   r�  rf   r,   r�   r´  )rÜ  rT   Úrecipient_objsrV   s       rO   Ú_read_generic_pubkey_cf_inforä  y  s¨   € ð
Ø˜MÔ*ˆ
ˆ
øÝð 
ð 
ð 
ÝÔØ<ñ
ô 
ð 	
ð
øøøõ �*�gÔ6Ñ7Ô7ð #Ø �]ˆ
ðð Ø8Bðñ ô €Nð —z’zÐ"4°dÑ;Ô;ÐØ(Ð>NÐOÐOÐOs   ‚ ‹*c                 ól   — |                       dd¦  «        }t          d|dz  |dœt          | ¦  «        ¤ŽS )NrŠ   é(   r‰   ©r…   rU   rM   )r´  r¦   rä  )rÜ  rU   Úkeylen_bitss      rO   Ú_build_legacy_pubkey_cfré  ‰  sN   € Ø—*’*˜Y¨Ñ+Ô+€KÝð Ø˜aÑØ'ðð õ ' vÑ
.Ô
.ðð ð rN   c                 ó:   — t          dd|dœt          | ¦  «        ¤ŽS )Nrõ   rç  rM   ©r    rä  ©rÜ  rU   s     rO   Ú_build_aes128_pubkey_cfrí  ’  ó6   € Ýð ØØ'ðð õ ' vÑ
.Ô
.ðð ð rN   c                 ó:   — t          dd|dœt          | ¦  «        ¤ŽS )Nr"  rç  rM   rë  rì  s     rO   Ú_build_aes256_pubkey_cfrð  š  rî  rN   c                 ó8   — t          dd|it          | ¦  «        ¤ŽS )NrU   rM   )r¤   rä  rì  s     rO   Ú_build_aesgcm_pubkey_cfrò  ¢  s1   € Ý"ð ð Ø'ðÝ+GÈÑ+OÔ+Oðð ð rN   c                   ój  ‡ — e Zd ZU dZ ej        d¦  «        e ej        d¦  «        e ej        d¦  «        e ej        d¦  «        e	 ej        d¦  «        d„ iZ
eej        ef         ed<   ed	ej        d
d
 ej        ¦   «         d
 e¦   «         d
fdeej                 dedededd f
d„¦   «         Z	 	 	 	 	 d(dededed         dee         dee         f
ˆ fd„Zedefd„¦   «         Zede e         fd„¦   «         Z!edej"        dede#fd„¦   «         Z$edej"        ded         fˆ fd„¦   «         Z%edej"        fd „¦   «         Z&edej"        fd!„¦   «         Z'edej"        fd"„¦   «         Z(d#„ Z) ej        ¦   «          e¦   «         fdeej                 dedefd$„Z*	 d)d%e+e,e-f         de.fd&„Z/defd'„Z0ˆ xZ1S )*rR   zÎ
    Security handler for public key encryption in PDF.

    As with the standard security handler, you essentially shouldn't ever
    have to instantiate these yourself (see :meth:`build_from_certs`).
    z/V2z/AESV2z/AESV3z/AESV4z	/Identityc                 ó   — t          ¦   «         S rb   )r9   )Ú_Ú__s     rO   ú<lambda>zPubKeySecurityHandler.<lambda>¶  s   € Õ7JÑ7LÔ7L€ rN   Ú_known_crypt_filtersrõ   Trj   rl   rk   Úpdf_macr`   c
                 ón  — |rt           j        nt           j        }d}|t          j        k    r'|rt          d|d¬¦  «        }nt          |d|¬¦  «        }|	r5|t          j        k    r%|t          j	         z  }t          j        d¦  «        }nd} | |||f||d|dœ|
¤Ž}|                     |||¬¦  «         |S )aO  
        Create a new public key security handler.

        This method takes many parameters, but only ``certs`` is mandatory.
        The default behaviour is to create a public key encryption handler
        where the underlying symmetric encryption is provided by AES-256.
        Any remaining keyword arguments will be passed to the constructor.

        :param certs:
            The recipients' certificates.
        :param keylen_bytes:
            The key length (in bytes). This is only relevant for legacy
            security handlers.
        :param version:
            The security handler version to use.
        :param use_aes:
            Use AES-128 instead of RC4 (only meaningful if the ``version``
            parameter is :attr:`~.SecurityHandlerVersion.RC4_OR_AES128`).
        :param use_crypt_filters:
            Whether to use crypt filters. This is mandatory for security
            handlers of version :attr:`~.SecurityHandlerVersion.RC4_OR_AES128`
            or higher.
        :param perms:
            Permission flags.
        :param encrypt_metadata:
            Whether to encrypt document metadata.

            .. warning::
                See :class:`.SecurityHandler` for some background on the
                way pyHanko interprets this value.
        :param pdf_mac:
            Include an ISO 32004 MAC.

            .. warning::
                Only works for PDF 2.0 security handlers.
        :param policy:
            Encryption policy choices for the chosen set of recipients.
        :return:
            An instance of :class:`.PubKeySecurityHandler`.
        Nrõ   )rV   rT   r³   r"  )rV   Úcrypt_filter_configrã  Úkdf_salt©rl   rk   )r¶   rº   r¹   r;   ÚRC4_OR_AES128r±   r®   r�   rB   ÚTOLERATE_MISSING_PDF_MACrq   rr   rv   )rx  rj   Úkeylen_bytesr€   Úuse_aesÚuse_crypt_filtersrl   rV   rk   rù  r^   Ú	subfilterÚcfcrü  Úshs                  rO   Úbuild_from_certsz&PubKeySecurityHandler.build_from_certs¹  s  € ðp !ð(ÕÔ"Ð"å$Ô'ð 	ð
 ˆØÕ,Ô:Ò:Ð:ð ð 	Ý(ØÐ)9Àdðñ ô ��õ )Ø Ø#Ø%5ðñ ô �ð
 ð 	�wÕ"8Ô"?Ò?Ð?ØÕ'Ô@Ð@Ñ@ˆEÝÔ*¨2Ñ.Ô.ˆHˆHàˆHàˆSØØØð	
ð .Ø #ØØð	
ð 	
ð ð	
ð 	
ˆð 	×Ò˜% u°VÐÑ<Ô<Ð<Øˆ	rN   Nr€   Úpubkey_handler_subfilterrû  r8   rã  rü  c	                 ó*  •— |t           j        k    r$|t          j        k    rt	          j        d¦  «        ‚|€Ÿ|t           j        k    rt          d||¬¦  «        }n||t           j        k    rt          |||¬¦  «        }nY|t           j	        k    rt          ||¬¦  «        }n7|t           j        k    rt          d||¬¦  «        }nt	          j        d¦  «        ‚t          ¦   «                              ||||||¬¦  «         || _        || _        d | _        d S )NzESubfilter /adbe.pkcs7.s5 is required for security handlers beyond V4.é   )r…   rV   rT   r³   r"  z1Failed to impute a reasonable crypt filter config)rV   Úcompat_entriesrü  )r;   rþ  r¶   rº   r-   rp   ÚRC4_40r®   ÚRC4_LONGER_KEYSÚAES_GCMr´   r�   r±   r[   r\   r  rV   rY   )
r]   r€   r  Úlegacy_keylenrV   rû  rã  r
  rü  r_   s
            €rO   r\   zPubKeySecurityHandler.__init__  sv  ø€ ð Õ-Ô;Ò;Ð;Ø(Õ,?Ô,BÒBÐBå”-ðñô ð ð
 Ð&ØÕ0Ô7Ò7Ð7Ý&8ØØ%5Ø-ð'ñ 'ô 'Ð#Ð#ð
 Õ2ÔBÒBÐBÝ&8Ø(Ø%5Ø-ð'ñ 'ô 'Ð#Ð#ð
 Õ2Ô:Ò:Ð:Ý&8Ø-Ð@Pð'ñ 'ô 'Ð#Ð#ð Õ2Ô9Ò9Ð9õ '9ØØ%5Ø-ð'ñ 'ô 'Ð#Ð#õ ”mØGñô ð õ 	‰Œ×ÒØØØØ-Ø)Øð 	ñ 	
ô 	
ð 	
ð 2ˆŒØ 0ˆÔØˆÔÐÐrN   c                 ó*   — t          j        d¦  «        S )Nz/Adobe.PubSec)r,   r·   rw  s    rO   ry  zPubKeySecurityHandler.get_nameX  s   € åÔ! /Ñ2Ô2Ð2rN   c                 ó$   — d„ t           D ¦   «         S )Nc                 ó   — h | ]	}|j         ’Œ
S rM   )r  rá  s     rO   ú	<setcomp>zCPubKeySecurityHandler.support_generic_subfilters.<locals>.<setcomp>^  s   € Ð5Ð5Ð5˜A�”Ð5Ð5Ð5rN   )r¶   rw  s    rO   Úsupport_generic_subfiltersz0PubKeySecurityHandler.support_generic_subfilters\  s   € à5Ð5Õ!4Ð5Ñ5Ô5Ð5rN   rÜ  rU   c                 ó^   — t          | j        ||¦  «        }|€t          j        d¦  «        ‚|S )NzJAn absent CFM or CFM of /None doesn't make sense in a PubSec CF dictionary)r<   rø  r-   r�  )rx  rÜ  rU   Úcfs       rO   Úread_cf_dictionaryz(PubKeySecurityHandler.read_cf_dictionary`  sE   € õ  ØÔ$ f¨oñ
ô 
ˆð ˆ:ÝÔ#ð'ñô ð ð ˆ	rN   Úencrypt_dictc                 ó  •— t          ¦   «                              |¦  «        }|                      |¦  «        }|�$|t          j        k    rt          j        d¦  «        ‚|€$|t          j        k    rt          j        d¦  «        ‚|S )Nz=Crypt filters require /adbe.pkcs7.s5 as the declared handler.z./adbe.pkcs7.s5 handler requires crypt filters.)r[   Úprocess_crypt_filtersÚ_determine_subfilterr¶   rº   r-   r�  )rx  r  r  r  r_   s       €rO   r  z+PubKeySecurityHandler.process_crypt_filtersn  sŽ   ø€ õ ‰gŒg×+Ò+¨LÑ9Ô9ˆØ×,Ò,¨\Ñ:Ô:ˆ	àˆ?˜yÕ,?Ô,BÒBÐBÝÔ#ØOñô ð ð ˆ[˜YÕ*=Ô*@Ò@Ð@ÝÔ#Ø@ñô ð ð ˆ
rN   c           	      ó*  — |                      dd¦  «        }|dz  dk    rt          j        d¦  «        ‚|dz  }t          j        |dd„ ¦  «        }|                     dt          d	¬
¦  «        }t          ||||                     dd„ ¦  «        ¬¦  «        S )NrŠ   rç   r‰   r   z"Key length must be a multiple of 8r‘   c                 ó   — d„ | D ¦   «         S )Nc                 óV   — g | ]&}t           j                             |j        ¦  «        ‘Œ'S rM   rß  rá  s     rO   r<  zSPubKeySecurityHandler.gather_pub_key_metadata.<locals>.<lambda>.<locals>.<listcomp>‰  s+   € ÐMÐMÐMÀA�œ×-Ò-¨aÔ.>Ñ?Ô?ÐMÐMÐMrN   rM   )Úlsts    rO   r÷  z?PubKeySecurityHandler.gather_pub_key_metadata.<locals>.<lambda>‰  s   € ÐMÐMÈÐMÑMÔM€ rN   r’   T©Údefaultú/KDFSaltc                 ó`   — t          | t          j        t          j        f¦  «        r| j        nd S rb   )rf   r,   ÚTextStringObjectr�   rà  )râ  s    rO   r÷  z?PubKeySecurityHandler.gather_pub_key_metadata.<locals>.<lambda>—  s6   € å!Ø�GÔ4µgÔ6NÐOñô ð�AÔ$Ð$ð ð rN   )r  rã  rV   rü  )r´  r-   rp   Úget_and_applyrK   Údict)rx  r  rè  r…   rT   rV   s         rO   Úgather_pub_key_metadataz-PubKeySecurityHandler.gather_pub_key_metadata  sÅ   € à"×&Ò& y°#Ñ6Ô6ˆØ˜!‰O Ò!Ð!Ý”-Ð DÑEÔEÐEØ Ñ!ˆåÔ'ØØØMÐMñ
ô 
ˆ
ð (×5Ò5Ø¥¨dð 6ñ 
ô 
Ðõ Ø Ø%Ø-Ø!×/Ò/Øðð ñ	ô 	ð	
ñ 
ô 
ð 	
rN   c                 óÈ   — 	 t          j        |dt          d|v rt          j        nt          j        ¬¦  «        S # t
          $ r t          j        d|d         z   ¦  «        ‚w xY w)Nú
/SubFilterz/CFr  z8Invalid /SubFilter in public key encryption dictionary: )r-   r$  r¶   rº   r¹   r€  r�  )rx  r  s     rO   r  z*PubKeySecurityHandler._determine_subfilter¡  sŠ   € ð	ÝÔ%ØØÝ#ð  Ð,Ð,õ (Ô*Ð*å,Ô/ð	ñ 	ô 	ð 	øõ ð 	ð 	ð 	ÝÔ#ØJØ˜|Ô,ñ-ñô ð ð	øøøs	   ‚69 ¹(A!c                 óÈ   — t          j        |d         ¦  «        }t          d||                      |¦  «        |                      |¦  «        dœ|                      |¦  «        ¤ŽS )Nú/V)r€   r  rû  rM   )r;   Úfrom_numberrR   r  r  r&  )rx  r  Úvs      rO   Úinstantiate_from_pdf_objectz1PubKeySecurityHandler.instantiate_from_pdf_object´  sr   € õ #Ô.¨|¸DÔ/AÑBÔBˆå$ð 
ØØ%(×%=Ò%=¸lÑ%KÔ%KØ #× 9Ò 9¸,Ñ GÔ Gð
ð 
ð ×)Ò)¨,Ñ7Ô7ð	
ð 
ð 	
rN   c                 ó"  — t          j        ¦   «         }t          j        |                      ¦   «         ¦  «        |d<   | j        j        |d<   | j                             ¦   «         |d<   | j        rt          j	        | j        ¦  «        |d<   | j
        s| j        t          j        k    rt          j        | j        dz  ¦  «        |d<   | j        t          j        k    rt          j        | j        ¦  «        |d<   | j        t"          j        k    r-|                     | j                             ¦   «         ¦  «         nV|                      ¦   «         }t-          |t.          ¦  «        st0          ‚t          j        d„ |j        D ¦   «         ¦  «        |d	<   |S )
Nz/Filterr(  r*  r!  r‰   rŠ   r’   c              3   ób   K  — | ]*}t          j        |                     ¦   «         ¦  «        V — Œ+d S rb   rŒ   rŽ   s     rO   r�   z6PubKeySecurityHandler.as_pdf_object.<locals>.<genexpr>Ù  sI   è è € ð 8ð 8àõ Ô(¨¯ª©¬Ñ5Ô5ð8ð 8ð 8ð 8ð 8ð 8rN   r‘   )r,   ÚDictionaryObjectr·   ry  r  r  r€   r“   Ú	_kdf_saltr�   Ú_compat_entriesr;   r  r”   r…   r–   rV   r¶   rº   r‚   rû  Úget_stream_filterrf   rQ   rg   r•   rT   )r]   r—   Ú
default_cfs      rO   r“   z#PubKeySecurityHandler.as_pdf_objectÁ  s{  € ÝÔ)Ñ+Ô+ˆÝ#Ô.¨t¯}ª}©¬Ñ?Ô?ˆˆyÑØ#œ~Ô3ˆˆ|ÑØ”|×1Ò1Ñ3Ô3ˆˆt‰ØŒ>ð 	JÝ!(Ô!9¸$¼.Ñ!IÔ!IˆF�:ÑàÔ ð	FàŒ|Õ5ÔEÒEÐEå 'Ô 4°T´[À1±_Ñ EÔ EˆF�9ÑØŒ<Õ0Ô@Ò@Ð@Ý)0Ô)>ØÔ%ñ*ô *ˆFÐ%Ñ&ð Œ>Õ0Ô3Ò3Ð3à�MŠM˜$Ô2×@Ò@ÑBÔBÑCÔCÐCÐCð ×/Ò/Ñ1Ô1ˆJÝ˜jÕ*;Ñ<Ô<ð  Ý�Ý$+Ô$7ð 8ð 8à&Ô1ð8ñ 8ô 8ñ %ô %ˆF�=Ñ!ð ˆrN   c                 óš   — | j                              ¦   «         D ]0}t          |t          ¦  «        sŒ|                     |||¬¦  «         Œ1d S )Nrý  )rû  Ústandard_filtersrf   rQ   rv   )r]   rj   rl   rk   r  s        rO   rv   z$PubKeySecurityHandler.add_recipientsß  sd   € ð Ô*×;Ò;Ñ=Ô=ð 	Að 	AˆBÝ˜bÕ"3Ñ4Ô4ð ØØ×Ò˜e¨5¸ÐÑ@Ô@Ð@Ð@ð	Að 	ArN   r{   c                 ón  — t          |t          ¦  «        rQt          j        |¦  «        }t          |t          ¦  «        s%t          j        dt          |¦  «        › d�¦  «        ‚|}n|}t          j	        ¦   «         }| j
                             ¦   «         D ]k}t          |t          ¦  «        sŒ|                     |¦  «        }|j        t          j        k    r|c S |j        }|�t          |t          ¦  «        sJ ‚||z  }Œlt          |t          ¦  «        r|| _        t'          t          j        |¦  «        S )a²  
        Authenticate a user to this security handler.

        :param credential:
            The credential to use (an instance of :class:`.EnvelopeKeyDecrypter`
            in this case).
        :param id1:
            First part of the document ID.
            Public key encryption handlers ignore this key.
        :return:
            An :class:`AuthResult` object indicating the level of access
            obtained.
        zRPubkey authentication credential must be an instance of EnvelopeKeyDecrypter, not r™  )rf   r>   r=   ÚdeserialiserR  r-   r�  ÚtyperB   rš   rû  r6  rQ   r~   Ústatusr5   rz   Úpermission_flagsÚ_credentialr4   ry   )	r]   r{   Úid1Údeser_credentialÚactual_credentialrl   r  r—   Úcf_flagss	            rO   r~   z"PubKeySecurityHandler.authenticateî  sS  € õ( �jÕ"6Ñ7Ô7ð 		+Ý5ÔAÀ*ÑMÔMÐÝÐ.Õ0DÑEÔEð ÝÔ'ðKÝ15Ð6FÑ1GÔ1GðKð Kð Kñô ð ð !1ÐÐà *Ðå!Ô2Ñ4Ô4ˆØÔ*×;Ò;Ñ=Ô=ð 	"ð 	"ˆBÝ˜bÕ"3Ñ4Ô4ð ØØ—_’_Ð%6Ñ7Ô7ˆFØŒ}¥
Ô 1Ò1Ð1Ø���ð Ô.ˆHØÐ#Ý! (Õ,=Ñ>Ô>Ð>Ð>Ð>Ø˜Ñ!�øÝÐ'Õ)?Ñ@Ô@ð 	1Ø0ˆDÔÝ�*œ/¨5Ñ1Ô1Ð1rN   c                 ó>   — | j                              ¦   «         j        S rb   )rû  Úget_for_streamÚ
shared_keyrc   s    rO   Úget_file_encryption_keyz-PubKeySecurityHandler.get_file_encryption_key  s   € àÔ'×6Ò6Ñ8Ô8ÔCÐCrN   )TNNTNrb   )2rH   rI   rJ   r˜   r,   r·   ré  rí  rð  rò  rø  r   r7   rL   rÃ  r;   r�   rB   rš   rE   r   r   r›   rK   r  r¶   r   Úlistrœ   r\   rÄ  ry  r	   r  r0  r6   r  r  r&  r  r-  r“   rv   r   rR  r>   r4   r~   rD  r�   rž   s   @rO   rR   rR   ¨  sô  ø€ € € € € € ðð ð 	ˆÔ˜5Ñ!Ô!Ð#:ØˆÔ˜8Ñ$Ô$Ð&=ØˆÔ˜8Ñ$Ô$Ð&=ØˆÔ˜8Ñ$Ô$Ð&=ØˆÔ˜;Ñ'Ô'Ð)LÐ)LðJÐ˜$˜wÔ1Ð3EÐEÔFð ð ñ ð ð Ø&Ô-ØØØ#EÐ#4Ô#EÑ#GÔ#GØØ,EÐ,EÑ,GÔ,GØðYð Yà�DÔ$Ô%ðYð !ðYð *ðYð ðYð 
!ðYð Yð Yñ „[ðYð@ ØDHØ)-ØØ$(ðA ð A à'ðA ð #6ðA ð &Ð&@ÔAðA ð ! œðA ð ˜5”/ðA ð A ð A ð A ð A ð A ðF ð3˜ð 3ð 3ð 3ñ „[ð3ð ð6¨3¨s¬8ð 6ð 6ð 6ñ „[ð6ð ðØÔ-ðØ@Dðà	ðð ð ñ „[ðð ðØ"Ô3ðà	Ð,Ô	-ðð ð ð ð ñ „[ðð  ð
°7Ô3Kð 
ð 
ð 
ñ „[ð
ðB ð°Ô0Hð ð ð ñ „[ðð$ ð

Ø"Ô3ð

ð 

ð 

ñ „[ð

ðð ð ðB $FÐ#4Ô#EÑ#GÔ#GØ,EÐ,EÑ,GÔ,Gð	Að Aà�DÔ$Ô%ðAð !ðAð *ð	Að Að Að Að$ ð/2ð /2àÐ.Ð0DÐDÔEð/2ð 
ð	/2ð /2ð /2ð /2ðbD¨ð Dð Dð Dð Dð Dð Dð Dð DrN   rR   )NT)T)’ÚabcÚenumÚloggingrÁ  rq   ro  Údataclassesr   Úhashlibr   r   Útypingr   r   r   r	   r
   r   Ú
asn1cryptor   r   r   r   Úasn1crypto.algosr   Úasn1crypto.cmsr   r   Úasn1crypto.keysr   r   r   Úcryptography.hazmat.primitivesr   r   r   Ú,cryptography.hazmat.primitives.asymmetric.ecr   r   r   r   rÿ   Ú1cryptography.hazmat.primitives.asymmetric.paddingr   r   r   r    Ú-cryptography.hazmat.primitives.asymmetric.rsar!   r"   Ú.cryptography.hazmat.primitives.asymmetric.x448r#   r$   Ú0cryptography.hazmat.primitives.asymmetric.x25519r%   r&   Ú"cryptography.hazmat.primitives.kdfr'   Ú*cryptography.hazmat.primitives.kdf.x963kdfr(   Ú,cryptography.hazmat.primitives.serializationr)   Úpyhanko_certvalidator.utilr*   Ú r,   r-   Ú_utilr/   r0   r1   r2   r3   Úapir4   r5   r6   r7   r8   r9   r:   r;   r<   Úcred_serr=   r>   Úfilter_mixinsr?   r@   rA   ÚpermissionsrB   Ú	getLoggerrH   r�  rE   ÚABCrQ   r    r¤   r¦   r·   r¬   ÚDEF_EMBEDDED_FILEr®   r±   r´   ÚuniqueÚEnumr¶   rœ   r¾   r0  rÎ   rÝ   rÌ   ÚHashAlgorithmró   r1  r  r  r›   r7  rK  rs   rg   rP  rR  ÚSequencer\  r`  rÂ  rk  r  rt  ÚregisterrJ  rÎ  rx   r0  rä  ré  rí  rð  rò  rR   rM   rN   rO   ú<module>rh     s
  ðØ 
€
€
€
Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ DØ >Ð >Ð >Ð >Ð >Ð >Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø AÐ AÐ AÐ AÐ AÐ Aà Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð CÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð
 +Ð *Ð *Ð *Ð *Ð *à	ˆÔ	˜8Ñ	$Ô	$€ð €�$ÐÑÔðð ð ð ð ñ ô ñ ÔððKð Kð Kð Kð K˜ S¤Wñ Kô Kð Kð\	ð 	ð 	ð 	ð 	Ð,Ð.Añ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð/Ð1Gñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð,Ð.Añ 	ô 	ð 	ðð
 *�wÔ)Ð*?Ñ@Ô@Ð ðð
 '�GÔ&Ð'9Ñ:Ô:Ð ðð
ð
ð ð ð ðð ð ð ðð ð ð ð „ð.ð .ð .ð .ð .˜$œ)ñ .ô .ñ „ð.ð @DðEð EØ
ðEØ)ðEð Eð Eð EðKØðKà	Ô	 ðKð ðKð Kð Kð Kð"KØðKà	Ô	 ðKð ðKð Kð Kð Kð@Ø	Ô	 ðà
Ô
$ðð ðð ð ð ð&
Øð
à
Ø
ÔÐ2Ð4LÐLôð
ð 
ð 
ð 
ðB7Øð7à	Ô	,ð7ð ð7ð 7ð 7ð 7ðtØ	Ô	,ðà!ðð Ô
$ðð 
ð	ð
 ðð ð ð ð6(
Øð(
à
Ô
ð(
ð &ð(
ð (
ð (
ð (
ð` ðDð DØ�tÔ'Ô(ðDà
ðDð ðDð &ð	Dð 	„_ðDð Dð Dð DðN	ð 	ð 	ð 	ð 	 9ñ 	ô 	ð 	ð
8"ð 8"ð 8"ð 8"ð 8"ñ 8"ô 8"ð 8"ðvDð Dð Dð Dð D�d”mñ Dô Dð Dð	ð 	ð 	ð 	ð 	�t”}ñ 	ô 	ð 	ð �2”:Ð5Ñ6Ô6Ð ðàÔ$ðð Ô-ðð # 5œ/ð	ð
 ðð ð ð ð6@Oð @Oð @Oð @Oð @OÐ!5Ð7Mñ @Oô @Oð @OðF  Ð Ô Ð :Ñ ;Ô ;Ð ;ð?ØÔð?Ø&:ð?àˆe„_ð?ð ?ð ?ð ?ðD<Ø”?ð<Ø/Cð<à
ˆ8�EŒ?˜HÐ%6Ô7Ð7Ô8ð<ð <ð <ð <ð~P¨Ô)Að Pð Pð Pð Pð ð ð ðð ð ðð ð ðð ð ð ÔðxDð xDð xDð xDð xD˜Oñ xDô xDñ ÔðxDð xDð xDrN   