§
    ¢”j�‹  ã                  ó  — U d dl m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m	Z	 d dl
mZ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mZ ddlmZmZmZmZmZmZm Z m!Z!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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZM ejN        dk    rd dl
mOZO nd dlPmOZO ee>e@f         ZQdeRd<   ee3e5f         ZSdeRd<   ee;e<e8e9f         ZTdeRd<   eeQeSeTf         ZUdeRd<   ee>e3e;e8f         ZVdeRd<   ee@e5e<e9f         ZWdeRd<   es eX ejY        dd¦  «        ¦  «        rd dlZm[Z[m\Z\ dZ]n1# e^$ r) ejN        dk    rd d l
m_Z_ nd d lPm_Z_ e_ZQe_ZSe_ZTe_ZUe_ZVe_ZWd!Z]Y nw xY wh d"£Z`d4d%„Za G d&„ d'e¦  «        Zb G d(„ d)eb¦  «        Zc G d*„ d+eb¦  «        Zde]r: G d,„ d-eb¦  «        Ze G d.„ d/eb¦  «        Zf G d0„ d1ee¦  «        Zg G d2„ d3eb¦  «        ZhdS dS )5é    )ÚannotationsN)ÚABCÚabstractmethod)	ÚTYPE_CHECKINGÚAnyÚClassVarÚLiteralÚNoReturnÚUnionÚcastÚget_argsÚoverloadé   ©ÚInvalidKeyError)ÚHashlibHashÚJWKDict)	Úbase64url_decodeÚbase64url_encodeÚder_to_raw_signatureÚforce_bytesÚfrom_base64url_uintÚis_pem_formatÚ
is_ssh_keyÚraw_to_der_signatureÚto_base64url_uint)ÚInvalidSignatureÚUnsupportedAlgorithm)Údefault_backend)Úhashes)Úpadding)
ÚECDSAÚ	SECP256K1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚEllipticCurveÚEllipticCurvePrivateKeyÚEllipticCurvePrivateNumbersÚEllipticCurvePublicKeyÚEllipticCurvePublicNumbers)ÚEd448PrivateKeyÚEd448PublicKey)ÚEd25519PrivateKeyÚEd25519PublicKey)ÚRSAPrivateKeyÚRSAPrivateNumbersÚRSAPublicKeyÚRSAPublicNumbersÚrsa_crt_dmp1Úrsa_crt_dmq1Úrsa_crt_iqmpÚrsa_recover_prime_factors)ÚEncodingÚNoEncryptionÚPrivateFormatÚPublicFormatÚload_pem_private_keyÚload_pem_public_keyÚload_ssh_public_key)é   é
   )Ú	TypeAliasrA   ÚAllowedRSAKeysÚAllowedECKeysÚAllowedOKPKeysÚAllowedKeysÚAllowedPrivateKeysÚAllowedPublicKeysÚSPHINX_BUILDÚ )ÚPrivateKeyTypesÚPublicKeyTypesT)r?   é   )ÚNeverF>   ÚES256ÚES384ÚES512ÚES521ÚEdDSAÚPS256ÚPS384ÚPS512ÚRS256ÚRS384ÚRS512ÚES256KÚreturnúdict[str, Algorithm]c                 óX  — t          ¦   «         t          t          j        ¦  «        t          t          j        ¦  «        t          t          j        ¦  «        dœ} t
          �rI|                      t          t          j        ¦  «        t          t          j        ¦  «        t          t          j        ¦  «        t          t          j        t          ¦  «        t          t          j        t          ¦  «        t          t          j        t          ¦  «        t          t          j        t          ¦  «        t          t          j        t          ¦  «        t          t          j        ¦  «        t          t          j        ¦  «        t          t          j        ¦  «        t          ¦   «         dœ¦  «         | S )zE
    Returns the algorithms that are implemented by the library.
    )ÚnoneÚHS256ÚHS384ÚHS512)rV   rW   rX   rN   rY   rO   rQ   rP   rS   rT   rU   rR   )ÚNoneAlgorithmÚHMACAlgorithmÚSHA256ÚSHA384ÚSHA512Ú
has_cryptoÚupdateÚRSAAlgorithmÚECAlgorithmr$   r#   r%   r&   ÚRSAPSSAlgorithmÚOKPAlgorithm)Údefault_algorithmss    ú]/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/jwt/algorithms.pyÚget_default_algorithmsrn   Œ   s(  € õ
 ‘”Ý�}Ô3Ñ4Ô4Ý�}Ô3Ñ4Ô4Ý�}Ô3Ñ4Ô4ð	0ð 0Ðõ ñ 
Ø×!Ò!å%¥lÔ&9Ñ:Ô:Ý%¥lÔ&9Ñ:Ô:Ý%¥lÔ&9Ñ:Ô:Ý$¥[Ô%7½ÑCÔCÝ%¥kÔ&8½)ÑDÔDÝ$¥[Ô%7½ÑCÔCÝ$¥[Ô%7½ÑCÔCÝ$ÝÔ&­	ñô õ )­Ô)?Ñ@Ô@Ý(­Ô)?Ñ@Ô@Ý(­Ô)?Ñ@Ô@Ý%™œðð ñ	
ô 	
ð 	
ð& Ðó    c                  óH  — e Zd ZU dZdZded<   d$d„Zd%d„Zed&d„¦   «         Z	ed'd„¦   «         Z
ed(d„¦   «         Zeeed)d„¦   «         ¦   «         ¦   «         Zeee	 d*d+d„¦   «         ¦   «         ¦   «         Zeed*d,d„¦   «         ¦   «         Zeed-d!„¦   «         ¦   «         Zd.d#„ZdS )/Ú	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    Nz$tuple[type[AllowedKeys], ...] | NoneÚ_crypto_key_typesÚbytestrÚbytesrZ   c                ó¶  — t          | dd¦  «        }|€t          ‚t          r�t          |t          ¦  «        rzt          |t          j        ¦  «        r`t          j         |¦   «         t          ¦   «         ¬¦  «        }| 
                    |¦  «         t          |                     ¦   «         ¦  «        S t           ||¦  «                             ¦   «         ¦  «        S )z�
        Compute a hash digest using the specified algorithm's hash algorithm.

        If there is no hash algorithm, raises a NotImplementedError.
        Úhash_algN)Úbackend)ÚgetattrÚNotImplementedErrorrf   Ú
isinstanceÚtypeÚ
issubclassr    ÚHashAlgorithmÚHashr   rg   rt   ÚfinalizeÚdigest)Úselfrs   rv   r€   s       rm   Úcompute_hash_digestzAlgorithm.compute_hash_digest¶   sÄ   € õ ˜4 ¨TÑ2Ô2ˆØÐÝ%Ð%õ ð		5å˜8¥TÑ*Ô*ð		5õ ˜8¥VÔ%9Ñ:Ô:ð		5õ
 ”[  ¡¤µ_Ñ5FÔ5FÐGÑGÔGˆFØ�MŠM˜'Ñ"Ô"Ð"Ý˜ŸšÑ*Ô*Ñ+Ô+Ð+å˜˜ 'Ñ*Ô*×1Ò1Ñ3Ô3Ñ4Ô4Ð4ro   Úkeyú PublicKeyTypes | PrivateKeyTypesÚNonec                óì   — t           r| j        €t          d¦  «        ‚t          || j        ¦  «        sAd„ | j        D ¦   «         }|j        j        }| j        j        }t          d|› d|› d|› �¦  «        ‚dS )ac  Check that the key belongs to the right cryptographic family.

        Note that this method only works when ``cryptography`` is installed.

        :param key: Potentially a cryptography key
        :type key: :py:data:`PublicKeyTypes <cryptography.hazmat.primitives.asymmetric.types.PublicKeyTypes>` | :py:data:`PrivateKeyTypes <cryptography.hazmat.primitives.asymmetric.types.PrivateKeyTypes>`
        :raises ValueError: if ``cryptography`` is not installed, or this method is called by a non-cryptography algorithm
        :raises InvalidKeyError: if the key doesn't match the expected key classes
        NzhThis method requires the cryptography library, and should only be used by cryptography-based algorithms.c              3  ó$   K  — | ]}|j         V — Œd S ©N)Ú__name__)Ú.0Úclss     rm   ú	<genexpr>z2Algorithm.check_crypto_key_type.<locals>.<genexpr>Ü   s$   è è € ÐLÐL¨c˜Sœ\ÐLÐLÐLÐLÐLÐLro   zExpected one of z, got: z. Invalid Key type for )rf   rr   Ú
ValueErrorrz   Ú	__class__r‰   r   )r�   rƒ   Úvalid_classesÚactual_classÚ
self_classs        rm   Úcheck_crypto_key_typezAlgorithm.check_crypto_key_typeÌ   s¢   € õ ð 	˜TÔ3Ð;ÝØzñô ð õ ˜#˜tÔ5Ñ6Ô6ð 	ØLÐL°TÔ5KÐLÑLÔLˆMØœ=Ô1ˆLØœÔ0ˆJÝ!Øj =ÐjÐj¸ÐjÐjÐ^hÐjÐjñô ð ð		ð 	ro   r   c                ó   — dS )zš
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        N© ©r�   rƒ   s     rm   Úprepare_keyzAlgorithm.prepare_keyã   ó   € € € ro   Úmsgc                ó   — dS )zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nr”   ©r�   r˜   rƒ   s      rm   ÚsignzAlgorithm.signê   r—   ro   ÚsigÚboolc                ó   — dS )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        Nr”   ©r�   r˜   rƒ   rœ   s       rm   ÚverifyzAlgorithm.verifyñ   r—   ro   Úkey_objÚas_dictúLiteral[True]r   c                ó   — d S rˆ   r”   ©r¡   r¢   s     rm   Úto_jwkzAlgorithm.to_jwkø   s   € ð BEÀro   FúLiteral[False]Ústrc                ó   — d S rˆ   r”   r¥   s     rm   r¦   zAlgorithm.to_jwký   s	   € ð
 ˆcro   úJWKDict | strc                ó   — dS )z3
        Serializes a given key into a JWK
        Nr”   r¥   s     rm   r¦   zAlgorithm.to_jwk  r—   ro   Újwkústr | JWKDictc                ó   — dS )zJ
        Deserializes a given key from JWK back into a key object
        Nr”   ©r¬   s    rm   Úfrom_jwkzAlgorithm.from_jwk  r—   ro   ú
str | Nonec                ó   — dS )zŽ
        Return a warning message if the key is below the minimum
        recommended length for this algorithm, or None if adequate.
        Nr”   r•   s     rm   Úcheck_key_lengthzAlgorithm.check_key_length  s	   € ð
 ˆtro   )rs   rt   rZ   rt   )rƒ   r„   rZ   r…   )rƒ   r   rZ   r   )r˜   rt   rƒ   r   rZ   rt   )r˜   rt   rƒ   r   rœ   rt   rZ   r�   )r¡   r   r¢   r£   rZ   r   ©F)r¡   r   r¢   r§   rZ   r¨   )r¡   r   r¢   r�   rZ   rª   )r¬   r­   rZ   r   )rƒ   r   rZ   r±   )r‰   Ú
__module__Ú__qualname__Ú__doc__rr   Ú__annotations__r‚   r’   r   r–   r›   r    r   Ústaticmethodr¦   r°   r³   r”   ro   rm   rq   rq   ®   s“  € € € € € € ðð ð
 ?CÐÐBÐBÐBÑBð5ð 5ð 5ð 5ð,ð ð ð ð. ðð ð ñ „^ðð ðð ð ñ „^ðð ðð ð ñ „^ðð ØØØDÐDÐDñ „^ñ „\ñ „Xð EàØØà05ðð ð ð ñ „^ñ „\ñ „Xðð Øðð ð ð ñ „^ñ „\ðð
 Øðð ð ñ „^ñ „\ðð
ð ð ð ð ð ro   rq   c                  ó\   — e Zd ZdZdd„Zdd	„Zdd„Zeddd„¦   «         Zedd„¦   «         Z	dS )ra   zZ
    Placeholder for use when no signing or verification
    operations are required.
    rƒ   r±   rZ   r…   c                ó8   — |dk    rd }|�t          d¦  «        ‚|S )NrI   z*When alg = "none", key value must be None.r   r•   s     rm   r–   zNoneAlgorithm.prepare_key   s)   € Ø�"Š9ˆ9ØˆCàˆ?Ý!Ð"NÑOÔOÐOàˆ
ro   r˜   rt   c                ó   — dS )Nro   r”   rš   s      rm   r›   zNoneAlgorithm.sign)  s   € Øˆsro   rœ   r�   c                ó   — dS )NFr”   rŸ   s       rm   r    zNoneAlgorithm.verify,  s   € Øˆuro   Fr¡   r   r¢   r
   c                ó   — t          ¦   «         ‚rˆ   ©ry   r¥   s     rm   r¦   zNoneAlgorithm.to_jwk/  ó   € å!Ñ#Ô#Ð#ro   r¬   r­   c                ó   — t          ¦   «         ‚rˆ   r¿   r¯   s    rm   r°   zNoneAlgorithm.from_jwk3  rÀ   ro   N)rƒ   r±   rZ   r…   )r˜   rt   rƒ   r…   rZ   rt   )r˜   rt   rƒ   r…   rœ   rt   rZ   r�   r´   )r¡   r   r¢   r�   rZ   r
   )r¬   r­   rZ   r
   )
r‰   rµ   r¶   r·   r–   r›   r    r¹   r¦   r°   r”   ro   rm   ra   ra     sŸ   € € € € € ðð ð
ð ð ð ðð ð ð ðð ð ð ð ð$ð $ð $ð $ñ „\ð$ð ð$ð $ð $ñ „\ð$ð $ð $ro   ra   c                  ó  — e Zd ZU dZej        Zded<   ej        Z	ded<   ej
        Zded<   d%d
„Zd&d„Zeed'd„¦   «         ¦   «         Zeed(d)d„¦   «         ¦   «         Zed(d*d„¦   «         Zed+d„¦   «         Zd,d„Zd-d!„Zd.d#„Zd$S )/rb   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]rc   rd   re   rv   r   rZ   r…   c                ó   — || _         d S rˆ   ©rv   ©r�   rv   s     rm   Ú__init__zHMACAlgorithm.__init__B  s   € Ø ˆŒˆˆro   rƒ   ústr | bytesrt   c                ó~   — t          |¦  «        }t          |¦  «        st          |¦  «        rt          d¦  «        ‚|S )NzdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   r   r   r   )r�   rƒ   Ú	key_bytess      rm   r–   zHMACAlgorithm.prepare_keyE  sM   € Ý Ñ$Ô$ˆ	å˜Ñ#Ô#ð 	¥z°)Ñ'<Ô'<ð 	Ý!ð9ñô ð ð
 Ðro   r¡   r¢   r£   r   c                ó   — d S rˆ   r”   r¥   s     rm   r¦   zHMACAlgorithm.to_jwkP  s   € àILÈro   Fr§   r¨   c                ó   — d S rˆ   r”   r¥   s     rm   r¦   zHMACAlgorithm.to_jwkT  s   € àNQÈcro   r�   rª   c                ó”   — t          t          | ¦  «        ¦  «                             ¦   «         ddœ}|r|S t          j        |¦  «        S )NÚoct)ÚkÚkty)r   r   ÚdecodeÚjsonÚdumps)r¡   r¢   r¬   s      rm   r¦   zHMACAlgorithm.to_jwkX  sO   € õ "¥+¨gÑ"6Ô"6Ñ7Ô7×>Ò>Ñ@Ô@Øð
ð 
ˆð
 ð 	#ØˆJå”:˜c‘?”?Ð"ro   r¬   r­   c                óN  — 	 t          | t          ¦  «        rt          j        | ¦  «        }nt          | t          ¦  «        r| }nt
          ‚n# t
          $ r t          d¦  «        d ‚w xY w|                     d¦  «        dk    rt          d¦  «        ‚t          |d         ¦  «        S )NúKey is not valid JSONrÏ   rÍ   zNot an HMAC keyrÎ   )	rz   r¨   rÑ   ÚloadsÚdictr�   r   Úgetr   )r¬   Úobjs     rm   r°   zHMACAlgorithm.from_jwkd  s±   € ð	EÝ˜#�sÑ#Ô#ð !Ý#œz¨#™œ��Ý˜C¥Ñ&Ô&ð !Ø��å Ð øøÝð 	Eð 	Eð 	EÝ!Ð"9Ñ:Ô:ÀÐDð	Eøøøð �7Š7�5‰>Œ>˜UÒ"Ð"Ý!Ð"3Ñ4Ô4Ð4å  C¤Ñ)Ô)Ð)ó   ‚A	A ÁA'r±   c                óâ   — |                       ¦   «         j        }t          |¦  «        |k     rBdt          |¦  «        › d|› d|                       ¦   «         j                             ¦   «         › d�S d S )NzThe HMAC key is z> bytes long, which is below the minimum recommended length of z bytes for z. See RFC 7518 Section 3.2.)rv   Údigest_sizeÚlenÚnameÚupper)r�   rƒ   Ú
min_lengths      rm   r³   zHMACAlgorithm.check_key_lengthu  s|   € Ø—]’]‘_”_Ô0ˆ
Ýˆs‰8Œ8�jÒ Ð ð-¥3 s¡8¤8ð -ð -Ø5?ð-ð -à—=’=‘?”?Ô'×-Ò-Ñ/Ô/ð-ð -ð -ðð ˆtro   r˜   c                ó\   — t          j        ||| j        ¦  «                             ¦   «         S rˆ   )ÚhmacÚnewrv   r€   rš   s      rm   r›   zHMACAlgorithm.sign€  s$   € ÝŒx˜˜S $¤-Ñ0Ô0×7Ò7Ñ9Ô9Ð9ro   rœ   c                óT   — t          j        ||                      ||¦  «        ¦  «        S rˆ   )rá   Úcompare_digestr›   rŸ   s       rm   r    zHMACAlgorithm.verifyƒ  s#   € ÝÔ" 3¨¯	ª	°#°sÑ(;Ô(;Ñ<Ô<Ð<ro   N)rv   r   rZ   r…   )rƒ   rÇ   rZ   rt   )r¡   rÇ   r¢   r£   rZ   r   r´   )r¡   rÇ   r¢   r§   rZ   r¨   )r¡   rÇ   r¢   r�   rZ   rª   )r¬   r­   rZ   rt   )rƒ   rt   rZ   r±   )r˜   rt   rƒ   rt   rZ   rt   )r˜   rt   rƒ   rt   rœ   rt   rZ   r�   )r‰   rµ   r¶   r·   ÚhashlibÚsha256rc   r¸   Úsha384rd   Úsha512re   rÆ   r–   r   r¹   r¦   r°   r³   r›   r    r”   ro   rm   rb   rb   8  sG  € € € € € € ðð ð
 %,¤N€FÐ2Ð2Ð2Ñ2Ø$+¤N€FÐ2Ð2Ð2Ñ2Ø$+¤N€FÐ2Ð2Ð2Ñ2ð!ð !ð !ð !ð	ð 	ð 	ð 	ð ØØLÐLÐLñ „\ñ „XàLàØØQÐQÐQÐQñ „\ñ „XàQàð	#ð 	#ð 	#ð 	#ñ „\ð	#ð ð*ð *ð *ñ „\ð*ð 	ð 	ð 	ð 	ð:ð :ð :ð :ð=ð =ð =ð =ð =ð =ro   rb   c                  ól  — e Zd ZU dZej        Zded<   ej        Zded<   ej        Zded<    e	e
ee         df          eeeef         ¦  «        ¦  «        ZdZded	<   d,d„Zd-d„Zd.d„Zeed/d„¦   «         ¦   «         Zeed0d1d„¦   «         ¦   «         Zed0d2d „¦   «         Zed3d#„¦   «         Zd4d'„Zd5d*„Zd+S )6rh   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        ú$ClassVar[type[hashes.HashAlgorithm]]rc   rd   re   .i   zClassVar[int]Ú_MIN_KEY_SIZErv   útype[hashes.HashAlgorithm]rZ   r…   c                ó   — || _         d S rˆ   rÄ   rÅ   s     rm   rÆ   zRSAAlgorithm.__init__™  s   € Ø$ˆDŒMˆMˆMro   rƒ   rB   r±   c                óL   — |j         | j        k     rd|j         › d| j        › d�S d S )NzThe RSA key is z; bits long, which is below the minimum recommended size of z bits. See NIST SP 800-131A.)Úkey_sizerë   r•   s     rm   r³   zRSAAlgorithm.check_key_lengthœ  sF   € ØŒ|˜dÔ0Ò0Ð0ð- c¤lð -ð -Ø7;Ô7Ið-ð -ð -ðð
 �4ro   úAllowedRSAKeys | str | bytesc                ó¼  — t          || j        ¦  «        rt          t          |¦  «        S t          |t          t
          f¦  «        st          d¦  «        ‚t          |¦  «        }	 |                     d¦  «        r9t          |¦  «        }|  
                    |¦  «         t          t          |¦  «        S t          |d ¬¦  «        }|  
                    |¦  «         t          t          |¦  «        S # t          $ rb 	 t          |¦  «        }|  
                    |¦  «         t          t          |¦  «        cY S # t          t           f$ r t#          d¦  «        d ‚w xY ww xY w)NúExpecting a PEM-formatted key.s   ssh-rsa©Úpasswordz(Could not parse the provided public key.)rz   rr   r   rB   rt   r¨   Ú	TypeErrorr   Ú
startswithr>   r’   r2   r<   r0   r�   r=   r   r   )r�   rƒ   rÉ   Ú
public_keyÚprivate_keys        rm   r–   zRSAAlgorithm.prepare_key¥  su  € Ý˜#˜tÔ5Ñ6Ô6ð 1Ý�N¨CÑ0Ô0Ð0å˜c¥E­3 <Ñ0Ô0ð BÝÐ @ÑAÔAÐAå# CÑ(Ô(ˆIð Ø×'Ò'¨
Ñ3Ô3ð 	<Ý1DÀYÑ1OÔ1O�JØ×.Ò.¨zÑ:Ô:Ð:Ý¥¨jÑ9Ô9Ð9å3GØ!¨Dð4ñ 4ô 4�Kð ×.Ò.¨{Ñ;Ô;Ð;Ý¥¨{Ñ;Ô;Ð;øÝð  ð  ð  ð Ý!4°YÑ!?Ô!?�JØ×.Ò.¨zÑ:Ô:Ð:Ý¥¨jÑ9Ô9Ð9Ð9Ð9øÝ"Õ$8Ð9ð  ð  ð  Ý)ØBñô àð ð øøøð øøøs+   Á&AC/ Â4:C/ Ã/
EÃ:8D5Ä2EÄ5"EÅEr¡   r¢   r£   r   c                ó   — d S rˆ   r”   r¥   s     rm   r¦   zRSAAlgorithm.to_jwkÃ  s   € àPSÐPSro   Fr§   r¨   c                ó   — d S rˆ   r”   r¥   s     rm   r¦   zRSAAlgorithm.to_jwkÇ  s   € àUXÐUXro   r�   rª   c                óú  — d }t          | d¦  «        �rM|                      ¦   «         }ddgt          |j        j        ¦  «                             ¦   «         t          |j        j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         t          |j	        ¦  «                             ¦   «         t          |j
        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         dœ
}n„t          | d¦  «        re|                      ¦   «         }ddgt          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         dœ}nt          d¦  «        ‚|r|S t          j        |¦  «        S )NÚprivate_numbersÚRSAr›   )
rÏ   Úkey_opsÚnÚeÚdÚpÚqÚdpÚdqÚqir    )rÏ   rþ   rÿ   r   úNot a public or private key)Úhasattrrü   r   Úpublic_numbersrÿ   rÐ   r   r  r  r  Údmp1Údmq1Úiqmpr   rÑ   rÒ   )r¡   r¢   rØ   Únumberss       rm   r¦   zRSAAlgorithm.to_jwkË  s°  € à)-ˆCå�wÐ 1Ñ2Ô2ñ Eà!×1Ò1Ñ3Ô3�ð !Ø &˜xÝ*¨7Ô+AÔ+CÑDÔD×KÒKÑMÔMÝ*¨7Ô+AÔ+CÑDÔD×KÒKÑMÔMÝ*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý+¨G¬LÑ9Ô9×@Ò@ÑBÔBÝ+¨G¬LÑ9Ô9×@Ò@ÑBÔBÝ+¨G¬LÑ9Ô9×@Ò@ÑBÔBðð ��õ ˜ (Ñ+Ô+ð Eà!×0Ò0Ñ2Ô2�ð !Ø (˜zÝ*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>ð	ð ��õ &Ð&CÑDÔDÐDàð 'Ø�
å”z #‘”Ð&ro   r¬   r­   c                ó>  ‡	— 	 t          | t          ¦  «        rt          j        | ¦  «        Š	nt          | t          ¦  «        r| Š	nt
          ‚n# t
          $ r t          d¦  «        d ‚w xY w‰	                     d¦  «        dk    rt          d¦  «        d ‚d‰	v �r§d‰	v �r¢d‰	v �r�d‰	v rt          d	¦  «        ‚g d
¢}ˆ	fd„|D ¦   «         }t          |¦  «        }|rt          |¦  «        st          d¦  «        d ‚t          t          ‰	d         ¦  «        t          ‰	d         ¦  «        ¦  «        }|r‰t          t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        |¬¦  «        }nst          ‰	d         ¦  «        }t          |j        ||j        ¦  «        \  }}t          |||t!          ||¦  «        t#          ||¦  «        t%          ||¦  «        |¬¦  «        }|                     ¦   «         S d‰	v rLd‰	v rHt          t          ‰	d         ¦  «        t          ‰	d         ¦  «        ¦  «                             ¦   «         S t          d¦  «        ‚)NrÔ   rÏ   rý   zNot an RSA keyr  r   rÿ   Úothz5Unsupported RSA private key: > 2 primes not supported)r  r  r  r  r  c                ó   •— g | ]}|‰v ‘ŒS r”   r”   )rŠ   ÚproprØ   s     €rm   ú
<listcomp>z)RSAAlgorithm.from_jwk.<locals>.<listcomp>	  s   ø€ ÐCÐCÐC¨t˜t s˜{ÐCÐCÐCro   z@RSA key must include all parameters if any are present besides dr  r  r  r  r  )r  r  r  r
  r  r  r	  r  )rz   r¨   rÑ   rÕ   rÖ   r�   r   r×   ÚanyÚallr3   r   r1   r7   rÿ   r   r4   r5   r6   rø   r÷   )
r¬   Úother_propsÚprops_foundÚany_props_foundr	  r  r  r  r  rØ   s
            @rm   r°   zRSAAlgorithm.from_jwkò  sÔ  ø€ ðIÝ˜c¥3Ñ'Ô'ð %Ýœ* S™/œ/�C�CÝ ¥TÑ*Ô*ð %Ø�C�Cå$Ð$øøÝð Ið Ið IÝ%Ð&=Ñ>Ô>ÀDÐHðIøøøð �wŠw�u‰~Œ~ Ò&Ð&Ý%Ð&6Ñ7Ô7¸TÐAà�cˆz‰z˜c S˜j™j¨S°C¨Z©Zà˜C�<�<Ý)ØOñô ð ð ;Ð:Ð:�ØCÐCÐCÐC°{ÐCÑCÔC�Ý"% kÑ"2Ô"2�à"ð  ­3¨{Ñ+;Ô+;ð  Ý)ØZñô àð õ "2Ý'¨¨C¬Ñ1Ô1Ý'¨¨C¬Ñ1Ô1ñ"ô "�ð
 #ð Ý/Ý-¨c°#¬hÑ7Ô7Ý-¨c°#¬hÑ7Ô7Ý-¨c°#¬hÑ7Ô7Ý0°°T´Ñ;Ô;Ý0°°T´Ñ;Ô;Ý0°°T´Ñ;Ô;Ø'5ðñ ô �G�Gõ ,¨C°¬HÑ5Ô5�AÝ4Ø&Ô(¨!¨^Ô-=ñô ‘D�A�qõ 0ØØØÝ)¨!¨QÑ/Ô/Ý)¨!¨QÑ/Ô/Ý)¨!¨QÑ/Ô/Ø'5ðñ ô �Gð ×*Ò*Ñ,Ô,Ð,Ø˜��  s 
 
å'Ý'¨¨C¬Ñ1Ô1Ý'¨¨C¬Ñ1Ô1ñô ÷ ’*‘,”,ðõ
 &Ð&CÑDÔDÐDs   ƒA	A ÁA(r˜   rt   r0   c                óz   — |                      |t          j        ¦   «         |                      ¦   «         ¦  «        }|S rˆ   )r›   r!   ÚPKCS1v15rv   ©r�   r˜   rƒ   Ú	signatures       rm   r›   zRSAAlgorithm.sign:  s.   € Ø"Ÿxšx¨­WÔ-=Ñ-?Ô-?ÀÇÂÁÄÑQÔQˆIØÐro   r2   rœ   c                ó    — 	 |                      ||t          j        ¦   «         |                      ¦   «         ¦  «         dS # t          $ r Y dS w xY w)NTF)r    r!   r  rv   r   rŸ   s       rm   r    zRSAAlgorithm.verify>  sW   € ðØ—
’
˜3 ¥WÔ%5Ñ%7Ô%7¸¿º¹¼ÑIÔIÐIØ�tøÝ#ð ð ð Ø�u�uðøøøs   ‚;? ¿
AÁAN)rv   rì   rZ   r…   )rƒ   rB   rZ   r±   )rƒ   rð   rZ   rB   )r¡   rB   r¢   r£   rZ   r   r´   )r¡   rB   r¢   r§   rZ   r¨   )r¡   rB   r¢   r�   rZ   rª   )r¬   r­   rZ   rB   ©r˜   rt   rƒ   r0   rZ   rt   ©r˜   rt   rƒ   r2   rœ   rt   rZ   r�   )r‰   rµ   r¶   r·   r    rc   r¸   rd   re   r   Útupler{   rE   r   r   r0   r2   rr   rë   rÆ   r³   r–   r   r¹   r¦   r°   r›   r    r”   ro   rm   rh   rh   ‰  sŸ  € € € € € € ð	ð 	ð
 8>´}ˆÐDÐDÐDÑDØ7=´}ˆÐDÐDÐDÑDØ7=´}ˆÐDÐDÐDÑDà ˜DØ�$�{Ô# SÐ(Ô)ØˆH�U˜=¨,Ð6Ô7Ñ8Ô8ñ
ô 
Ðð (,ˆÐ+Ð+Ð+Ñ+ð	%ð 	%ð 	%ð 	%ð	ð 	ð 	ð 	ð	 ð 	 ð 	 ð 	 ð< 
Ø	ØSÐSÐSñ 
Œñ 
ŒàSà	Ø	ØXÐXÐXÐXñ 
Œñ 
ŒàXà	ð$	'ð $	'ð $	'ð $	'ñ 
Œð$	'ðL 
ðE	Eð E	Eð E	Eñ 
ŒðE	EðN	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ro   rh   c                  ób  — e Zd ZU dZej        Zded<   ej        Zded<   ej        Zded<    e	e
ee         df          eeeef         ¦  «        ¦  «        Z	 d)d*d„Zd+d„Zd,d„Zd-d„Zd.d„Zeed/d„¦   «         ¦   «         Zeed0d1d#„¦   «         ¦   «         Zed0d2d%„¦   «         Zed3d(„¦   «         ZdS )4ri   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        rê   rc   rd   re   .Nrv   rì   Úexpected_curveútype[EllipticCurve] | NonerZ   r…   c                ó"   — || _         || _        d S rˆ   )rv   r!  )r�   rv   r!  s      rm   rÆ   zECAlgorithm.__init__T  s   € ð
 %ˆDŒMØ"0ˆDÔÐÐro   rƒ   rC   c                ó    — | j         €dS t          |j        | j         ¦  «        s*t          d|j        j        › d| j         j        › d�¦  «        ‚dS )z9Validate that the key's curve matches the expected curve.NzThe key's curve 'z%' does not match the expected curve 'z' for this algorithm)r!  rz   Úcurver   rÝ   r•   s     rm   Ú_validate_curvezECAlgorithm._validate_curve\  sv   € àÔ"Ð*Ø�å˜cœi¨Ô)<Ñ=Ô=ð Ý%ðM¨¬	¬ð Mð MØ"Ô1Ô6ðMð Mð Mñô ð ðð ro   úAllowedECKeys | str | bytesc                ó¨  — t          || j        ¦  «        r,t          t          |¦  «        }|                      |¦  «         |S t          |t
          t          f¦  «        st          d¦  «        ‚t          |¦  «        }	 | 	                    d¦  «        rt          |¦  «        }nt          |¦  «        }|                      |¦  «         t          t          |¦  «        }|                      |¦  «         |S # t          $ rU t          |d ¬¦  «        }|                      |¦  «         t          t           |¦  «        }|                      |¦  «         |cY S w xY w)Nrò   s   ecdsa-sha2-ró   )rz   rr   r   rC   r&  rt   r¨   rõ   r   rö   r>   r=   r’   r*   r�   r<   r(   )r�   rƒ   Úec_keyrÉ   r÷   Úec_public_keyrø   Úec_private_keys           rm   r–   zECAlgorithm.prepare_keyg  s[  € Ý˜#˜tÔ5Ñ6Ô6ð Ý�m¨SÑ1Ô1�Ø×$Ò$ VÑ,Ô,Ð,Ø�å˜c¥E­3 <Ñ0Ô0ð BÝÐ @ÑAÔAÐAå# CÑ(Ô(ˆIð
&Ø×'Ò'¨Ñ7Ô7ð @Ý1DÀYÑ1OÔ1O�J�Jå!4°YÑ!?Ô!?�Jð ×*Ò*¨:Ñ6Ô6Ð6Ý $Õ%;¸ZÑ HÔ H�Ø×$Ò$ ]Ñ3Ô3Ð3Ø$Ð$øÝð &ð &ð &Ý2°9ÀtÐLÑLÔL�Ø×*Ò*¨;Ñ7Ô7Ð7Ý!%Õ&=¸{Ñ!KÔ!K�Ø×$Ò$ ^Ñ4Ô4Ð4Ø%Ð%Ð%Ð%ð&øøøs   Á=A4C2 Ã2AEÅEr˜   rt   r(   c                ó–   — |                      |t          |                      ¦   «         ¦  «        ¦  «        }t          ||j        ¦  «        S rˆ   )r›   r"   rv   r   r%  )r�   r˜   rƒ   Úder_sigs       rm   r›   zECAlgorithm.sign‡  s7   € Ø—h’h˜s¥E¨$¯-ª-©/¬/Ñ$:Ô$:Ñ;Ô;ˆGå'¨°´Ñ;Ô;Ð;ro   rœ   r�   c                ó<  — 	 t          ||j        ¦  «        }n# t          $ r Y dS w xY w	 t          |t          ¦  «        r|                     ¦   «         n|}|                     ||t          |                      ¦   «         ¦  «        ¦  «         dS # t          $ r Y dS w xY w)NFT)
r   r%  r�   rz   r(   r÷   r    r"   rv   r   )r�   r˜   rƒ   rœ   r-  r÷   s         rm   r    zECAlgorithm.verifyŒ  s¾   € ðÝ.¨s°C´IÑ>Ô>��øÝð ð ð Ø�u�uðøøøð	õ " #Õ'>Ñ?Ô?ð�C—N’NÑ$Ô$Ð$àð ð
 ×!Ò! '¨3µ°d·m²m±o´oÑ0FÔ0FÑGÔGÐGØ�tøÝ#ð ð ð Ø�u�uðøøøs   ‚ ˜
&¥&ªA!B Â
BÂBr¡   r¢   r£   r   c                ó   — d S rˆ   r”   r¥   s     rm   r¦   zECAlgorithm.to_jwk�  s   € àORÈsro   Fr§   r¨   c                ó   — d S rˆ   r”   r¥   s     rm   r¦   zECAlgorithm.to_jwk¡  s   € àTWÐTWro   rª   c                ó¸  — t          | t          ¦  «        r'|                      ¦   «                              ¦   «         }n9t          | t          ¦  «        r|                      ¦   «         }nt          d¦  «        ‚t          | j        t          ¦  «        rd}nnt          | j        t          ¦  «        rd}nQt          | j        t          ¦  «        rd}n4t          | j        t          ¦  «        rd}nt          d| j        › �¦  «        ‚d|t          |j        | j        j        ¬¦  «                             ¦   «         t          |j        | j        j        ¬¦  «                             ¦   «         d	œ}t          | t          ¦  «        rGt          |                      ¦   «         j        | j        j        ¬¦  «                             ¦   «         |d
<   |r|S t%          j        |¦  «        S )Nr  úP-256úP-384úP-521Ú	secp256k1úInvalid curve: ÚEC)Ú
bit_length)rÏ   ÚcrvÚxÚyr  )rz   r(   r÷   r	  r*   r   r%  r$   r%   r&   r#   r   r:  rï   rÐ   r;  rü   Úprivate_valuerÑ   rÒ   )r¡   r¢   r	  r9  rØ   s        rm   r¦   zECAlgorithm.to_jwk¥  sÐ  € å˜'Õ#:Ñ;Ô;ð EØ!(×!3Ò!3Ñ!5Ô!5×!DÒ!DÑ!FÔ!F��Ý˜GÕ%;Ñ<Ô<ð EØ!(×!7Ò!7Ñ!9Ô!9��å%Ð&CÑDÔDÐDå˜'œ-­Ñ3Ô3ð 	IØ��Ý˜GœM­9Ñ5Ô5ð IØ��Ý˜GœM­9Ñ5Ô5ð IØ��Ý˜GœM­9Ñ5Ô5ð IØ!��å%Ð&G¸¼Ð&GÐ&GÑHÔHÐHð ØÝ&Ø"Ô$Ø&œ}Ô5ðñ ô ÷ ’&‘(”(Ý&Ø"Ô$Ø&œ}Ô5ðñ ô ÷ ’&‘(”(ð#ð #ˆCõ ˜'Õ#:Ñ;Ô;ð Ý,Ø×+Ò+Ñ-Ô-Ô;Ø&œ}Ô5ðñ ô ÷ ’&‘(”(ð �C‘ð
 ð 'Ø�
å”z #‘”Ð&ro   r¬   r­   c                ó˜  — 	 t          | t          ¦  «        rt          j        | ¦  «        }nt          | t          ¦  «        r| }nt
          ‚n# t
          $ r t          d¦  «        d ‚w xY w|                     d¦  «        dk    rt          d¦  «        d ‚d|vsd|vrt          d¦  «        d ‚t          |                     d¦  «        ¦  «        }t          |                     d¦  «        ¦  «        }|                     d¦  «        }|dk    rJt          |¦  «        t          |¦  «        cxk    rd	k    rn nt          ¦   «         }�nt          d
¦  «        d ‚|dk    rIt          |¦  «        t          |¦  «        cxk    rdk    rn nt          ¦   «         }n¿t          d¦  «        d ‚|dk    rIt          |¦  «        t          |¦  «        cxk    rdk    rn nt          ¦   «         }npt          d¦  «        d ‚|dk    rHt          |¦  «        t          |¦  «        cxk    rd	k    rn nt          ¦   «         }n!t          d¦  «        ‚t          d|› �¦  «        ‚t          t                               |d¬¦  «        t                               |d¬¦  «        |¬¦  «        }d|vr|                     ¦   «         S t          |                     d¦  «        ¦  «        }t          |¦  «        t          |¦  «        k    rt          dt          |¦  «        |¦  «        ‚t%          t                               |d¬¦  «        |¦  «                             ¦   «         S )NrÔ   rÏ   r7  zNot an Elliptic curve keyr:  r;  r9  r2  é    z)Coords should be 32 bytes for curve P-256r3  é0   z)Coords should be 48 bytes for curve P-384r4  éB   z)Coords should be 66 bytes for curve P-521r5  z-Coords should be 32 bytes for curve secp256k1r6  Úbig)Ú	byteorder)r:  r;  r%  r  z!D should be {} bytes for curve {})rz   r¨   rÑ   rÕ   rÖ   r�   r   r×   r   rÜ   r$   r%   r&   r#   r+   ÚintÚ
from_bytesr÷   r)   rø   )r¬   rØ   r:  r;  r%  Ú	curve_objr	  r  s           rm   r°   zECAlgorithm.from_jwkÑ  sg  € ðIÝ˜c¥3Ñ'Ô'ð %Ýœ* S™/œ/�C�CÝ ¥TÑ*Ô*ð %Ø�C�Cå$Ð$øøÝð Ið Ið IÝ%Ð&=Ñ>Ô>ÀDÐHðIøøøð �wŠw�u‰~Œ~ Ò%Ð%Ý%Ð&AÑBÔBÈÐLà˜#ˆ~ˆ~ ¨C  Ý%Ð&AÑBÔBÈÐLå  §¢¨¡¤Ñ.Ô.ˆAÝ  §¢¨¡¤Ñ.Ô.ˆAà—G’G˜E‘N”NˆEð ˜ÒÐÝ�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý )¡¤�I‘Iå)ØCñô àð ð ˜'Ò!Ð!Ý�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý )¡¤�I�Iå)ØCñô àð ð ˜'Ò!Ð!Ý�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý )¡¤�I�Iå)ØCñô àð ð ˜+Ò%Ð%Ý�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý )¡¤�I�Iå)ØGñô ð õ &Ð&?¸Ð&?Ð&?Ñ@Ô@Ð@å7Ý—.’. ¨e�.Ñ4Ô4Ý—.’. ¨e�.Ñ4Ô4Øðñ ô ˆNð ˜#ˆ~ˆ~Ø%×0Ò0Ñ2Ô2Ð2å  §¢¨¡¤Ñ.Ô.ˆAÝ�1‰vŒv�˜Q™œÒÐÝ%Ø7½¸Q¹¼Àñô ð õ /Ý—’˜q¨E�Ñ2Ô2°Nñô çŠk‰mŒmðrÙ   rˆ   )rv   rì   r!  r"  rZ   r…   )rƒ   rC   rZ   r…   )rƒ   r'  rZ   rC   )r˜   rt   rƒ   r(   rZ   rt   )r˜   rt   rƒ   rC   rœ   rt   rZ   r�   )r¡   rC   r¢   r£   rZ   r   r´   )r¡   rC   r¢   r§   rZ   r¨   )r¡   rC   r¢   r�   rZ   rª   )r¬   r­   rZ   rC   )r‰   rµ   r¶   r·   r    rc   r¸   rd   re   r   r  r{   rE   r   r   r(   r*   rr   rÆ   r&  r–   r›   r    r   r¹   r¦   r°   r”   ro   rm   ri   ri   E  s–  € € € € € € ð	ð 	ð
 8>´}ˆÐDÐDÐDÑDØ7=´}ˆÐDÐDÐDÑDØ7=´}ˆÐDÐDÐDÑDà ˜DØ�$�{Ô# SÐ(Ô)ØˆH�UÐ2Ð4JÐJÔKÑLÔLñ
ô 
Ðð :>ð	1ð 	1ð 	1ð 	1ð 	1ð		ð 		ð 		ð 		ð	&ð 	&ð 	&ð 	&ð@	<ð 	<ð 	<ð 	<ð
	ð 	ð 	ð 	ð" 
Ø	ØRÐRÐRñ 
Œñ 
ŒàRà	Ø	ØWÐWÐWÐWñ 
Œñ 
ŒàWà	ð)	'ð )	'ð )	'ð )	'ñ 
Œð)	'ðV 
ðG	ð G	ð G	ñ 
ŒðG	ð G	ð G	ro   ri   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )rj   zA
        Performs a signature using RSASSA-PSS with MGF1
        r˜   rt   rƒ   r0   rZ   c           	     óö   — |                      |t          j        t          j        |                      ¦   «         ¦  «        |                      ¦   «         j        ¬¦  «        |                      ¦   «         ¦  «        }|S )N©ÚmgfÚsalt_length)r›   r!   ÚPSSÚMGF1rv   rÛ   r  s       rm   r›   zRSAPSSAlgorithm.sign   sd   € Ø"ŸxšxØÝ”Ýœ T§]¢]¡_¤_Ñ5Ô5Ø $§¢¡¤Ô ;ðñ ô ð —’‘”ñ ô  ˆIð Ðro   r2   rœ   r�   c           
     ó  — 	 |                      ||t          j        t          j        |                      ¦   «         ¦  «        |                      ¦   «         j        ¬¦  «        |                      ¦   «         ¦  «         dS # t          $ r Y dS w xY w)NrH  TF)r    r!   rK  rL  rv   rÛ   r   rŸ   s       rm   r    zRSAPSSAlgorithm.verify+  s�   € ðØ—
’
ØØÝ”KÝ#œL¨¯ª©¬Ñ9Ô9Ø$(§M¢M¡O¤OÔ$?ðñ ô ð —M’M‘O”Oñô ð ð �tøÝ#ð ð ð Ø�u�uðøøøs   ‚A9A= Á=
BÂ
BNr  r  )r‰   rµ   r¶   r·   r›   r    r”   ro   rm   rj   rj     sF   € € € € € ð	ð 	ð		ð 		ð 		ð 		ð	ð 	ð 	ð 	ð 	ð 	ro   rj   c            
      ó  — e Zd ZdZ eeee         df          ee	e
eeef         ¦  «        ¦  «        Zd"d„Zd#d„Zd$d„Zd%d„Zeed&d„¦   «         ¦   «         Zeed'd(d„¦   «         ¦   «         Zed'd)d„¦   «         Zed*d „¦   «         Zd!S )+rk   zŽ
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        .Úkwargsr   rZ   r…   c                ó   — d S rˆ   r”   )r�   rO  s     rm   rÆ   zOKPAlgorithm.__init__M  s   € ØˆDro   rƒ   úAllowedOKPKeys | str | bytesrD   c                ó  — t          |t          t          f¦  «        s|                      |¦  «         |S t          |t          ¦  «        r|                     d¦  «        n|}t          |t          ¦  «        r|                     d¦  «        n|}d|v rt          |¦  «        }nCd|v rt          |d ¬¦  «        }n-|dd…         dk    rt          |¦  «        }nt          d¦  «        ‚|                      |¦  «         t          d	|¦  «        S )
Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEró   r   é   zssh-r  rD   )rz   r¨   rt   r’   rÐ   Úencoder=   r<   r>   r   r   )r�   rƒ   Úkey_strrÉ   Ú
loaded_keys        rm   r–   zOKPAlgorithm.prepare_keyP  s  € Ý˜c¥C­ <Ñ0Ô0ð Ø×*Ò*¨3Ñ/Ô/Ð/Ø�
å-7¸½UÑ-CÔ-CÐL�c—j’j Ñ)Ô)Ð)ÈˆGÝ/9¸#½sÑ/CÔ/CÐL˜Ÿ
š
 7Ñ+Ô+Ð+ÈˆIð # gÐ-Ð-Ý0°Ñ;Ô;�
�
Ø%¨Ð0Ð0Ý1°)ÀdÐKÑKÔK�
�
Ø˜˜1˜” Ò'Ð'Ý0°Ñ;Ô;�
�
å%Ð&CÑDÔDÐDð ×&Ò& zÑ2Ô2Ð2ÝÐ(¨*Ñ5Ô5Ð5ro   r˜   rÇ   ú#Ed25519PrivateKey | Ed448PrivateKeyrt   c                óˆ   — t          |t          ¦  «        r|                     d¦  «        n|}|                     |¦  «        }|S )aS  
            Sign a message ``msg`` using the EdDSA private key ``key``
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey}Ed448PrivateKey key: A :class:`.Ed25519PrivateKey`
                or :class:`.Ed448PrivateKey` isinstance
            :return bytes signature: The signature, as bytes
            rS  )rz   r¨   rU  r›   )r�   r˜   rƒ   Ú	msg_bytesr  s        rm   r›   zOKPAlgorithm.signf  s@   € õ 0:¸#½sÑ/CÔ/CÐL˜Ÿ
š
 7Ñ+Ô+Ð+ÈˆIØ"Ÿxšx¨	Ñ2Ô2ˆIØÐro   rœ   r�   c                ój  — 	 t          |t          ¦  «        r|                     d¦  «        n|}t          |t          ¦  «        r|                     d¦  «        n|}t          |t          t          f¦  «        r|                     ¦   «         n|}|                     ||¦  «         dS # t          $ r Y dS w xY w)aÄ  
            Verify a given ``msg`` against a signature ``sig`` using the EdDSA key ``key``

            :param str|bytes sig: EdDSA signature to check ``msg`` against
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey|Ed25519PublicKey|Ed448PrivateKey|Ed448PublicKey key:
                A private or public EdDSA key instance
            :return bool verified: True if signature is valid, False if not.
            rS  TF)rz   r¨   rU  r.   r,   r÷   r    r   )r�   r˜   rƒ   rœ   rZ  Ú	sig_bytesr÷   s          rm   r    zOKPAlgorithm.verifyt  sÁ   € ðÝ3=¸cÅ3Ñ3GÔ3GÐP˜CŸJšJ wÑ/Ô/Ð/ÈS�	Ý3=¸cÅ3Ñ3GÔ3GÐP˜CŸJšJ wÑ/Ô/Ð/ÈS�	õ " #Õ(9½?Ð'KÑLÔLð�C—N’NÑ$Ô$Ð$àð ð
 ×!Ò! )¨YÑ7Ô7Ð7Ø�tøÝ#ð ð ð Ø�u�uðøøøs   ‚B B$ Â$
B2Â1B2r¢   r£   r   c                ó   — d S rˆ   r”   ©rƒ   r¢   s     rm   r¦   zOKPAlgorithm.to_jwkŽ  s   € àLOÈCro   Fr§   r¨   c                ó   — d S rˆ   r”   r^  s     rm   r¦   zOKPAlgorithm.to_jwk’  s   € àQTÐQTro   rª   c                ó¸  — t          | t          t          f¦  «        rŽ|                      t          j        t          j        ¬¦  «        }t          | t          ¦  «        rdnd}t          t          |¦  «        ¦  «         	                    ¦   «         d|dœ}|r|S t          j        |¦  «        S t          | t          t          f¦  «        �r|                      t          j        t          j        t!          ¦   «         ¬¦  «        }|                      ¦   «                              t          j        t          j        ¬¦  «        }t          | t          ¦  «        rdnd}t          t          |¦  «        ¦  «         	                    ¦   «         t          t          |¦  «        ¦  «         	                    ¦   «         d|dœ}|r|S t          j        |¦  «        S t%          d¦  «        ‚)	N)ÚencodingÚformatÚEd25519ÚEd448ÚOKP)r:  rÏ   r9  )ra  rb  Úencryption_algorithm)r:  r  rÏ   r9  r  )rz   r/   r-   Úpublic_bytesr8   ÚRawr;   r   r   rÐ   rÑ   rÒ   r.   r,   Úprivate_bytesr:   r9   r÷   r   )rƒ   r¢   r:  r9  rØ   r  s         rm   r¦   zOKPAlgorithm.to_jwk–  s°  € å˜#Õ 0µ.ÐAÑBÔBð +Ø×$Ò$Ý%œ\Ý'Ô+ð %ñ ô �õ $.¨cÕ3CÑ#DÔ#DÐQ�i�iÈ'�õ *­+°a©.¬.Ñ9Ô9×@Ò@ÑBÔBØ Øðð �ð ð +Ø�Jåœ: c™?œ?Ð*å˜#Õ 1µ?ÐCÑDÔDñ +Ø×%Ò%Ý%œ\Ý(Ô,Ý)5©¬ð &ñ ô �ð —N’NÑ$Ô$×1Ò1Ý%œ\Ý'Ô+ð 2ñ ô �õ
 $.¨cÕ3DÑ#EÔ#EÐR�i�iÈ7�å)­+°a©.¬.Ñ9Ô9×@Ò@ÑBÔBÝ)­+°a©.¬.Ñ9Ô9×@Ò@ÑBÔBØ Øð	ð �ð ð +Ø�Jåœ: c™?œ?Ð*å!Ð"?Ñ@Ô@Ð@ro   r¬   r­   c                ó>  — 	 t          | t          ¦  «        rt          j        | ¦  «        }nt          | t          ¦  «        r| }nt
          ‚n# t
          $ r t          d¦  «        d ‚w xY w|                     d¦  «        dk    rt          d¦  «        ‚|                     d¦  «        }|dk    r|dk    rt          d|› �¦  «        ‚d	|vrt          d
¦  «        ‚t          |                     d	¦  «        ¦  «        }	 d|vr.|dk    rt          j
        |¦  «        S t          j
        |¦  «        S t          |                     d¦  «        ¦  «        }|dk    rt          j        |¦  «        S t          j        |¦  «        S # t
          $ r}t          d¦  «        |‚d }~ww xY w)NrÔ   rÏ   re  zNot an Octet Key Pairr9  rc  rd  r6  r:  zOKP should have "x" parameterr  zInvalid key parameter)rz   r¨   rÑ   rÕ   rÖ   r�   r   r×   r   r/   Úfrom_public_bytesr-   r.   Úfrom_private_bytesr,   )r¬   rØ   r%  r:  r  Úerrs         rm   r°   zOKPAlgorithm.from_jwkÅ  s½  € ðIÝ˜c¥3Ñ'Ô'ð %Ýœ* S™/œ/�C�CÝ ¥TÑ*Ô*ð %Ø�C�Cå$Ð$øøÝð Ið Ið IÝ%Ð&=Ñ>Ô>ÀDÐHðIøøøð �wŠw�u‰~Œ~ Ò&Ð&Ý%Ð&=Ñ>Ô>Ð>à—G’G˜E‘N”NˆEØ˜	Ò!Ð! e¨wÒ&6Ð&6Ý%Ð&?¸Ð&?Ð&?Ñ@Ô@Ð@à˜#ˆ~ˆ~Ý%Ð&EÑFÔFÐFÝ  §¢¨¡¤Ñ.Ô.ˆAð
HØ˜c�>�>Ø 	Ò)Ð)Ý/ÔAÀ!ÑDÔDÐDÝ)Ô;¸AÑ>Ô>Ð>Ý$ S§W¢W¨S¡\¤\Ñ2Ô2�Ø˜IÒ%Ð%Ý,Ô?ÀÑBÔBÐBÝ&Ô9¸!Ñ<Ô<Ð<øÝð Hð Hð HÝ%Ð&=Ñ>Ô>ÀCÐGøøøøðHøøøs6   ‚A	A ÁA'Ã;E= ÄE= Ä-;E= Å)E= Å=
FÆFÆFN)rO  r   rZ   r…   )rƒ   rQ  rZ   rD   )r˜   rÇ   rƒ   rX  rZ   rt   )r˜   rÇ   rƒ   rD   rœ   rÇ   rZ   r�   )rƒ   rD   r¢   r£   rZ   r   r´   )rƒ   rD   r¢   r§   rZ   r¨   )rƒ   rD   r¢   r�   rZ   rª   )r¬   r­   rZ   rD   )r‰   rµ   r¶   r·   r   r  r{   rE   r   r   r.   r/   r,   r-   rr   rÆ   r–   r›   r    r   r¹   r¦   r°   r”   ro   rm   rk   rk   :  sP  € € € € € ð	ð 	ð !˜DØ�$�{Ô# SÐ(Ô)ØˆHØØ%Ø$Ø#Ø"ð$ôñô ñ

ô 

Ðð	ð 	ð 	ð 	ð	6ð 	6ð 	6ð 	6ð,	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð4 
Ø	ØOÐOÐOñ 
Œñ 
ŒàOà	Ø	ØTÐTÐTÐTñ 
Œñ 
ŒàTà	ð,	Að ,	Að ,	Að ,	Añ 
Œð,	Að\ 
ð 	Hð  	Hð  	Hñ 
Œð 	Hð  	Hð  	Hro   rk   )rZ   r[   )iÚ
__future__r   rå   rá   rÑ   ÚosÚsysÚabcr   r   Útypingr   r   r   r	   r
   r   r   r   r   Ú
exceptionsr   Útypesr   r   Úutilsr   r   r   r   r   r   r   r   r   Úcryptography.exceptionsr   r   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr    Ú)cryptography.hazmat.primitives.asymmetricr!   Ú,cryptography.hazmat.primitives.asymmetric.ecr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Ú/cryptography.hazmat.primitives.asymmetric.ed448r,   r-   Ú1cryptography.hazmat.primitives.asymmetric.ed25519r.   r/   Ú-cryptography.hazmat.primitives.asymmetric.rsar0   r1   r2   r3   r4   r5   r6   r7   Ú,cryptography.hazmat.primitives.serializationr8   r9   r:   r;   r<   r=   r>   Úversion_inforA   Útyping_extensionsrB   r¸   rC   rD   rE   rF   rG   r�   ÚgetenvÚ/cryptography.hazmat.primitives.asymmetric.typesrJ   rK   rf   ÚModuleNotFoundErrorrM   Úrequires_cryptographyrn   rq   ra   rb   rh   ri   rj   rk   r”   ro   rm   ú<module>r…     s×  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðVØNÐNÐNÐNÐNÐNÐNÐNØ<Ð<Ð<Ð<Ð<Ð<Ø5Ð5Ð5Ð5Ð5Ð5ØAÐAÐAÐAÐAÐAðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ô˜7Ò"Ð"Ø$Ð$Ð$Ð$Ð$Ð$Ð$ð 	0Ð/Ð/Ð/Ð/Ð/ð !& m°\Ð&AÔ B€NÐBÐBÐBÑBØ$Ð%<Ð>TÐ%TÔU€MÐUÐUÐUÑUØ %ØÐ+¨_¸nÐLô!€Nð ð ð ñ ð # >°=À.Ð#PÔQ€KÐQÐQÐQÑQà$)ØÐ.Ð0AÀ?ÐRô%Ðð ð ð ñ ð $)ØÐ,Ð.>ÀÐNô$Ðð ð ð ñ ð ð 
˜˜˜Y˜RœY ~°rÑ:Ô:Ñ;Ô;ð 
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 €J€JøØð ð ð Ø
Ô˜7Ò"Ð"Ø Ð Ð Ð Ð Ð Ð à+Ð+Ð+Ð+Ð+Ð+à€NØ€MØ€NØ€KØÐØÐØ€J€J€Jðøøøðð ð Ð ð ð ð ð ðDið ið ið ið i�ñ iô ið iðX$ð $ð $ð $ð $�Iñ $ô $ð $ð<L=ð L=ð L=ð L=ð L=�Iñ L=ô L=ð L=ð^ ð _	Hðzð zð zð zð z�yñ zô zð zðxTð Tð Tð Tð T�iñ Tô Tð Tðlð ð ð ð ˜,ñ ô ð ð>lHð lHð lHð lHð lH�yñ lHô lHð lHð lHð lHðg_	Hð _	Hs   ÁDE' Å'+FÆF