ó
    öÞ jW‘  ã                  óð  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	  S SK
JrJrJrJrJrJrJrJrJr  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJ r J!r!J"r"   S S	K#J$r$J%r%  S S
K&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8J9r9  S SK:J;r;J<r<  S SK=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  S SKFJGrGJHrHJIrIJJrJJKrKJLrLJMrM  \Rœ                  S:¼  a  S SK
JOrO  OS SKPJOrO  \\>\@4   rQS\RS'   \\3\54   rSS\RS'   \\;\<\8\94   rTS\RS'   \\Q\S\T4   rUS\RS'   \\>\3\;\84   rVS\RS'   \\@\5\<\94   rWS\RS'   \(       d  \X" \R²                  " SS5      5      (       a  S SKZJ[r[J\r\  Sr]1 S"kr`S2S# jra " S$ S%\5      rb " S& S'\b5      rc " S( S)\b5      rd\](       a-   " S* S+\b5      re " S, S-\b5      rf " S. S/\e5      rg " S0 S1\b5      rhgg! \^ a.    \Rœ                  S:¼  a  S S K
J_r_  OS S KPJ_r_  \_rQ\_rS\_rT\_rU\_rV\_rWS!r] N’f = f)3é    )Ú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ÚES256Kc                 ó>  • [        5       [        [        R                  5      [        [        R                  5      [        [        R                  5      S.n [
        (       Ga<  U R                  [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  [        5      [        [        R                  [        5      [        [        R                  [        5      [        [        R                  [        5      [        [        R                  [        5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        5       S.5        U $ )z=
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    ÚH/var/www/html/gaurav/venv/lib/python3.13/site-packages/jwt/algorithms.pyÚget_default_algorithmsrl   Œ   s  € ô
 “Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4ñ	0Ð÷ ƒzØ×!Ñ!ä%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü$¤[×%7Ñ%7¼ÓCÜ%¤k×&8Ñ&8¼)ÓDÜ$¤[×%7Ñ%7¼ÓCÜ$¤[×%7Ñ%7¼ÓCÜ$Ü×&Ñ&¬	óô )¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü%›ñô	
ð& Ðó    c                  ó"  • \ rS rSr% SrSrS\S'   SS jrSS jr\	SS j5       r
\	SS	 j5       r\	SS
 j5       r\\\	SS j5       5       5       r\\\	 S     SS jj5       5       5       r\\	SSS jj5       5       r\\	SS j5       5       rSS jrSrg)Ú	Algorithmé®   z@
The interface for an algorithm used to sign and verify tokens.
Nz$tuple[type[AllowedKeys], ...] | NoneÚ_crypto_key_typesc                ó‚  • [        U SS5      nUc  [        e[        (       a€  [        U[        5      (       ak  [        U[        R                  5      (       aL  [        R                  " U" 5       [        5       S9nUR                  U5        [        UR                  5       5      $ [        U" U5      R                  5       5      $ )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ÚNotImplementedErrorrd   Ú
isinstanceÚtypeÚ
issubclassr    ÚHashAlgorithmÚHashr   re   ÚbytesÚfinalizeÚdigest)ÚselfÚbytestrrs   r~   s       rk   Úcompute_hash_digestÚAlgorithm.compute_hash_digest¶   s‘   € ô ˜4 ¨TÓ2ˆØÑÜ%Ð%÷ ŠJÜ˜8¤T×*Ñ*Ü˜8¤V×%9Ñ%9×:Ñ:ä—[’[¡£´_Ó5FÑGˆFØ�M‰M˜'Ô"Ü˜Ÿ™Ó*Ó+Ð+ä™ 'Ó*×1Ñ1Ó3Ó4Ð4rm   c                ó$  • [         (       a  U R                  c  [        S5      e[        XR                  5      (       dS  S U R                   5       nUR                  R
                  nU R                  R
                  n[        SU SU SU 35      eg)a3  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  ó6   #   • U H  oR                   v •  M     g 7f©N)Ú__name__)Ú.0Úclss     rk   Ú	<genexpr>Ú2Algorithm.check_crypto_key_type.<locals>.<genexpr>Ü   s   é € ÐLÑ5K¨cŸ\ž\Ò5Kùs   ‚zExpected one of z, got: z. Invalid Key type for )rd   rq   Ú
ValueErrorrw   Ú	__class__r†   r   )r   ÚkeyÚvalid_classesÚactual_classÚ
self_classs        rk   Úcheck_crypto_key_typeÚAlgorithm.check_crypto_key_typeÌ   s�   € ÷ Šz˜T×3Ñ3Ñ;ÜØzóð ô ˜#×5Ñ5×6Ñ6ÙL°T×5KÒ5KÓLˆMØŸ=™=×1Ñ1ˆLØŸ™×0Ñ0ˆJÜ!Ø" = /°¸¸ÐF]Ð^hÐ]iÐjóð ð	 7rm   c                ó   • g)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     rk   Úprepare_keyÚAlgorithm.prepare_keyã   ó   � rm   c                ó   • g)zV
Returns a digital signature for the specified message
using the specified key value.
Nr”   ©r   Úmsgr�   s      rk   ÚsignÚAlgorithm.signê   r˜   rm   c                ó   • g)zb
Verifies that the specified digital signature is valid
for the specified message and key values.
Nr”   ©r   r›   r�   Úsigs       rk   ÚverifyÚAlgorithm.verifyñ   r˜   rm   c                ó   • g r…   r”   ©Úkey_objÚas_dicts     rk   Úto_jwkÚAlgorithm.to_jwkø   s	   € ð BErm   c                ó   • g r…   r”   r¤   s     rk   r§   r¨   ý   s   € ð
 rm   c                ó   • g)z#
Serializes a given key into a JWK
Nr”   r¤   s     rk   r§   r¨     r˜   rm   c                ó   • g)z:
Deserializes a given key from JWK back into a key object
Nr”   ©Újwks    rk   Úfrom_jwkÚAlgorithm.from_jwk  r˜   rm   c                ó   • g)zv
Return a warning message if the key is below the minimum
recommended length for this algorithm, or None if adequate.
Nr”   r•   s     rk   Úcheck_key_lengthÚAlgorithm.check_key_length  s   € ð
 rm   r”   )r€   r|   Úreturnr|   )r�   z PublicKeyTypes | PrivateKeyTypesr³   ÚNone)r�   r   r³   r   )r›   r|   r�   r   r³   r|   )r›   r|   r�   r   r    r|   r³   Úbool)r¥   r   r¦   úLiteral[True]r³   r   ©F)r¥   r   r¦   úLiteral[False]r³   Ústr)r¥   r   r¦   rµ   r³   úJWKDict | str)r­   ústr | JWKDictr³   r   )r�   r   r³   ú
str | None)r†   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rq   Ú__annotations__r�   r‘   r   r–   rœ   r¡   r   Ústaticmethodr§   r®   r±   Ú__static_attributes__r”   rm   rk   ro   ro   ®   sù   ‡ ñð
 ?CÐÐ;ÓBô5ô,ð. óó ðð óó ðð óó ðð ØØÛDó ó ó ð EàØØà05ðØðØ-ðà	ôó ó ó ðð Øõó ó ðð
 Øóó ó ð÷
rm   ro   c                  ób   • \ rS rSrSrS
S jrSS jrSS jr\SSS jj5       r	\SS j5       r
Srg	)r_   i  zN
Placeholder for use when no signing or verification
operations are required.
c                ó2   • US:X  a  S nUb  [        S5      eU$ )NrI   z*When alg = "none", key value must be None.r   r•   s     rk   r–   ÚNoneAlgorithm.prepare_key   s$   € Ø�"‹9ØˆCà‰?Ü!Ð"NÓOÐOàˆ
rm   c                ó   • g)Nrm   r”   rš   s      rk   rœ   ÚNoneAlgorithm.sign)  s   € Ørm   c                ó   • g)NFr”   rŸ   s       rk   r¡   ÚNoneAlgorithm.verify,  s   € Ørm   c                ó   • [        5       er…   ©rv   r¤   s     rk   r§   ÚNoneAlgorithm.to_jwk/  ó   € ä!Ó#Ð#rm   c                ó   • [        5       er…   rÌ   r¬   s    rk   r®   ÚNoneAlgorithm.from_jwk3  rÎ   rm   r”   N)r�   r¼   r³   r´   )r›   r|   r�   r´   r³   r|   )r›   r|   r�   r´   r    r|   r³   rµ   r·   )r¥   r   r¦   rµ   r³   r
   )r­   r»   r³   r
   )r†   r½   r¾   r¿   rÀ   r–   rœ   r¡   rÂ   r§   r®   rÃ   r”   rm   rk   r_   r_     s>   † ñô
ôôð õ$ó ð$ð ó$ó ó$rm   r_   c                  ó  • \ rS rSr% Sr\R                  rS\S'   \R                  r
S\S'   \R                  rS\S'   SS jrSS jr\\SS	 j5       5       r\\SSS
 jj5       5       r\SSS jj5       r\SS j5       rSS jrSS jrSS jrSrg)r`   i8  zZ
Performs signing and verification operations using HMAC
and the specified hash function.
zClassVar[HashlibHash]ra   rb   rc   c                ó   • Xl         g r…   ©rs   ©r   rs   s     rk   Ú__init__ÚHMACAlgorithm.__init__B  s   € Ø �rm   c                ó�  • [        U5      n[        U5      S:X  a  [        S5      e[        U5      (       d  [	        U5      (       a  [        S5      eUR                  5       nUR                  S5      (       a=   [        R                  " U5      n[        U[        5      (       a  SU;   a  [        S5      eU$ ! [         a    S n N6f = f)Nr   zHMAC key must not be empty.zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.ó   {Úktyz‡The specified key looks like a JWK and should not be used directly as an HMAC secret. Load it via PyJWK / HMACAlgorithm.from_jwk first.)r   Úlenr   r   r   ÚlstripÚ
startswithÚjsonÚloadsr‹   rw   Údict)r   r�   Ú	key_bytesÚstrippedÚjwk_objs        rk   r–   ÚHMACAlgorithm.prepare_keyE  sÅ   € Ü Ó$ˆ	äˆy‹>˜QÓÜ!Ð"?Ó@Ð@ä˜×#Ñ#¤z°)×'<Ñ'<Ü!ð9óð ð ×#Ñ#Ó%ˆØ×Ñ˜t×$Ñ$ðÜŸ*š* YÓ/�ô ˜'¤4×(Ñ(¨U°gÓ-=Ü%ð<óð ð Ðøô ó Ø’ðús   Á8B6 Â6CÃCc                ó   • g r…   r”   r¤   s     rk   r§   ÚHMACAlgorithm.to_jwkg  s   € àILrm   c                ó   • g r…   r”   r¤   s     rk   r§   rå   k  s   € àNQrm   c                óŠ   • [        [        U 5      5      R                  5       SS.nU(       a  U$ [        R                  " U5      $ )NÚoct)ÚkrÙ   )r   r   ÚdecoderÝ   Údumps)r¥   r¦   r­   s      rk   r§   rå   o  s<   € ô "¤+¨gÓ"6Ó7×>Ñ>Ó@Øñ
ˆö
 ØˆJä—:’:˜c“?Ð"rm   c                ó(  •  [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      e[        US   5      $ ! [
         a    [        S5      S ef = f)NúKey is not valid JSONrÙ   rè   zNot an HMAC keyré   )	rw   r¹   rÝ   rÞ   rß   r‹   r   Úgetr   )r­   Úobjs     rk   r®   ÚHMACAlgorithm.from_jwk{  sˆ   € ð	EÜ˜#œs×#Ñ#Ü#Ÿzšz¨#›‘Ü˜C¤×&Ñ&Ø‘ä Ð ð �7‰7�5‹>˜UÓ"Ü!Ð"3Ó4Ð4ä  C¡Ó)Ð)øô ó 	EÜ!Ð"9Ó:ÀÐDð	Eús   ‚+A: ®A: ÁA: Á:Bc                óÌ   • U R                  5       R                  n[        U5      U:  a;  S[        U5       SU SU R                  5       R                  R	                  5        S3$ g )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.)rs   Údigest_sizerÚ   ÚnameÚupper)r   r�   Ú
min_lengths      rk   r±   ÚHMACAlgorithm.check_key_lengthŒ  se   € Ø—]‘]“_×0Ñ0ˆ
Üˆs‹8�jÓ à"¤3 s£8 *ð -5Ø5?°LÀØ—=‘=“?×'Ñ'×-Ñ-Ó/Ð0ð 1,ð-ðð rm   c                ó`   • [         R                  " X!U R                  5      R                  5       $ r…   )ÚhmacÚnewrs   r~   rš   s      rk   rœ   ÚHMACAlgorithm.sign—  s    € Ü�xŠx˜ $§-¡-Ó0×7Ñ7Ó9Ð9rm   c                óL   • [         R                  " X0R                  X5      5      $ r…   )rø   Úcompare_digestrœ   rŸ   s       rk   r¡   ÚHMACAlgorithm.verifyš  s   € Ü×"Ò" 3¯	©	°#Ó(;Ó<Ð<rm   rÓ   N)rs   r   r³   r´   )r�   ústr | bytesr³   r|   )r¥   rþ   r¦   r¶   r³   r   r·   )r¥   rþ   r¦   r¸   r³   r¹   )r¥   rþ   r¦   rµ   r³   rº   )r­   r»   r³   r|   )r�   r|   r³   r¼   )r›   r|   r�   r|   r³   r|   )r›   r|   r�   r|   r    r|   r³   rµ   )r†   r½   r¾   r¿   rÀ   ÚhashlibÚsha256ra   rÁ   Úsha384rb   Úsha512rc   rÕ   r–   r   rÂ   r§   r®   r±   rœ   r¡   rÃ   r”   rm   rk   r`   r`   8  s¤   ‡ ñð
 %,§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2ô!ô ðD ØÛLó ó àLàØÝQó ó àQàõ	#ó ð	#ð ó*ó ð*ô 	ô:÷=rm   r`   c                  ód  • \ rS rSr% Sr\R                  rS\S'   \R                  rS\S'   \R                  r	S\S'   \
" \\\   S4   \" \\\4   5      5      rSrS	\S
'   SS jrSS jrSS jr\\SS j5       5       r\\SSS jj5       5       r\SSS jj5       r\SS j5       rSS jrSS jrSrg) rf   i   zf
Performs signing and verification operations using
RSASSA-PKCS-v1_5 and the specified hash function.
ú$ClassVar[type[hashes.HashAlgorithm]]ra   rb   rc   .i   zClassVar[int]Ú_MIN_KEY_SIZEc                ó   • Xl         g r…   rÓ   rÔ   s     rk   rÕ   ÚRSAAlgorithm.__init__°  s   € Ø$�Mrm   c                ór   • UR                   U R                  :  a  SUR                    SU R                   S3$ g )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     rk   r±   ÚRSAAlgorithm.check_key_length³  sE   € Ø�|‰|˜d×0Ñ0Ó0à% c§l¡l ^ð 47Ø7;×7IÑ7IÐ6Jð K,ð-ðð
 rm   c                óN  • [        XR                  5      (       a  [        [        U5      $ [        U[        [
        45      (       d  [        S5      e[        U5      n UR                  S5      (       a,  [        U5      nU R                  U5        [        [        U5      $ [        US S9nU R                  U5        [        [        U5      $ ! [         aP     [        U5      nU R                  U5        [        [        U5      s $ ! [        [         4 a    [#        S5      S ef = ff = f)NúExpecting a PEM-formatted key.s   ssh-rsa©Úpasswordz(Could not parse the provided public key.)rw   rq   r   rB   r|   r¹   Ú	TypeErrorr   rÜ   r>   r‘   r2   r<   r0   r‹   r=   r   r   )r   r�   rà   Ú
public_keyÚprivate_keys        rk   r–   ÚRSAAlgorithm.prepare_key¼  s  € Ü˜#×5Ñ5×6Ñ6ô œN¨CÓ0Ð0ä˜c¤E¬3 <×0Ñ0ÜÐ @ÓAÐAä# CÓ(ˆIð Ø×'Ñ'¨
×3Ñ3Ü1DÀYÓ1O�JØ×.Ñ.¨zÔ:Ü¤¨jÓ9Ð9ä3GØ!¨Dñ4�Kð ×.Ñ.¨{Ô;Ü¤¨{Ó;Ð;øÜó  ð Ü!4°YÓ!?�JØ×.Ñ.¨zÔ:Ü¤¨jÓ9Ò9øÜ"Ô$8Ð9ó  Ü)ØBóàð ð úð ús+   ÁAC
 Â*C
 Ã

D$Ã+DÄ D$ÄD Ä D$c                ó   • g r…   r”   r¤   s     rk   r§   ÚRSAAlgorithm.to_jwkÝ  s   € àPSrm   c                ó   • g r…   r”   r¤   s     rk   r§   r  á  s   € àUXrm   c                óÌ  • S n[        U S5      (       Ga;  U R                  5       nSS/[        UR                  R                  5      R                  5       [        UR                  R                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       S.
nOw[        U S5      (       a[  U R                  5       nSS/[        UR                  5      R                  5       [        UR                  5      R                  5       S.nO[        S5      eU(       a  U$ [        R                  " U5      $ )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       rk   r§   r  å  sh  € à)-ˆCä�wÐ 1×2Ò2à!×1Ñ1Ó3�ð !Ø &˜xÜ*¨7×+AÑ+A×+CÑ+CÓD×KÑKÓMÜ*¨7×+AÑ+A×+CÑ+CÓD×KÑKÓMÜ*¨7¯9©9Ó5×<Ñ<Ó>Ü*¨7¯9©9Ó5×<Ñ<Ó>Ü*¨7¯9©9Ó5×<Ñ<Ó>Ü+¨G¯L©LÓ9×@Ñ@ÓBÜ+¨G¯L©LÓ9×@Ñ@ÓBÜ+¨G¯L©LÓ9×@Ñ@ÓBñ‘ô ˜ (×+Ñ+à!×0Ñ0Ó2�ð !Ø (˜zÜ*¨7¯9©9Ó5×<Ñ<Ó>Ü*¨7¯9©9Ó5×<Ñ<Ó>ñ	‘ô &Ð&CÓDÐDæØ�
ä—z’z #“Ð&rm   c                óx  •  [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      S eSU;   Ga`  SU;   GaY  SU;   GaR  SU;   a  [        S	5      e/ S
QnU Vs/ sH  o3U;   PM	     nn[        U5      nU(       a  [        U5      (       d  [        S5      S e[        [        US   5      [        US   5      5      nU(       ag  [        [        US   5      [        US   5      [        US   5      [        US   5      [        US   5      [        US   5      US9nUR'                  5       $ [        US   5      n[        UR                  X†R                  5      u  pš[        UU	U
[!        X‰5      [#        XŠ5      [%        Xš5      US9nUR'                  5       $ SU;   a8  SU;   a2  [        [        US   5      [        US   5      5      R)                  5       $ [        S5      e! [
         a    [        S5      S ef = fs  snf )Nrí   rÙ   r  zNot an RSA keyr  r  r  Úothz5Unsupported RSA private key: > 2 primes not supported)r  r  r  r   r!  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"  )rw   r¹   rÝ   rÞ   rß   r‹   r   rî   ÚanyÚallr3   r   r1   r7   r  r  r4   r5   r6   r  r  )r­   rï   Úother_propsÚpropÚprops_foundÚany_props_foundr$  r(  r  r  r  s              rk   r®   ÚRSAAlgorithm.from_jwk  s8  € ðIÜ˜c¤3×'Ñ'ÜŸ*š* S›/‘CÜ ¤T×*Ñ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ó&Ü%Ð&6Ó7¸TÐAà�cŒz˜c Sœj¨S°C¬Zà˜C“<Ü)ØOóð ò ;�Ù7BÓC±{¨t sœ{±{�ÐCÜ"% kÓ"2�æ"¬3¨{×+;Ñ+;Ü)ØZóàð ô "2Ü'¨¨C©Ó1Ü'¨¨C©Ó1ó"�ö
 #Ü/Ü-¨c°#©hÓ7Ü-¨c°#©hÓ7Ü-¨c°#©hÓ7Ü0°°T±Ó;Ü0°°T±Ó;Ü0°°T±Ó;Ø'5ñ�Gð2 ×*Ñ*Ó,Ð,ô ,¨C°©HÓ5�AÜ4Ø&×(Ñ(¨!×-=Ñ-=ó‘D�Aô 0ØØØÜ)¨!Ó/Ü)¨!Ó/Ü)¨!Ó/Ø'5ñ�Gð ×*Ñ*Ó,Ð,Ø˜“  s£
ä'Ü'¨¨C©Ó1Ü'¨¨C©Ó1ó÷ ‘*“,ðô
 &Ð&CÓDÐDøô{ ó IÜ%Ð&=Ó>ÀDÐHðIüò Ds   ‚+H ®H ÁH ÂH7ÈH4c                ón   • UR                  U[        R                  " 5       U R                  5       5      nU$ r…   )rœ   r!   ÚPKCS1v15rs   ©r   r›   r�   Ú	signatures       rk   rœ   ÚRSAAlgorithm.signT  s)   € Ø"Ÿx™x¨¬W×-=Ò-=Ó-?ÀÇÁÃÓQˆIØÐrm   c                óŽ   •  UR                  X1[        R                  " 5       U R                  5       5        g! [         a     gf = f)NTF)r¡   r!   r3  rs   r   rŸ   s       rk   r¡   ÚRSAAlgorithm.verifyX  s;   € ðØ—
‘
˜3¤W×%5Ò%5Ó%7¸¿¹»ÔIØøÜ#ó Ùðús   ‚47 ·
AÁArÓ   N)rs   útype[hashes.HashAlgorithm]r³   r´   )r�   rB   r³   r¼   )r�   zAllowedRSAKeys | str | bytesr³   rB   )r¥   rB   r¦   r¶   r³   r   r·   )r¥   rB   r¦   r¸   r³   r¹   )r¥   rB   r¦   rµ   r³   rº   )r­   r»   r³   rB   ©r›   r|   r�   r0   r³   r|   ©r›   r|   r�   r2   r    r|   r³   rµ   )r†   r½   r¾   r¿   rÀ   r    ra   rÁ   rb   rc   r   Útuplerx   rE   r   r   r0   r2   rq   r  rÕ   r±   r–   r   rÂ   r§   r®   rœ   r¡   rÃ   r”   rm   rk   rf   rf      så   ‡ ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDá Ø�$�{Ñ# SÐ(Ñ)Ù�U˜=¨,Ð6Ñ7Ó8ó
Ðð (,ˆ�}Ó+ô	%ô	ô	 ðB 
Ø	ÛSó 
ó 
àSà	Ø	ÝXó 
ó 
àXà	õ$	'ó 
ð$	'ðL 
óE	Eó 
ðE	EôN	÷	rm   rf   c                  óf  • \ rS rSr% Sr\R                  rS\S'   \R                  rS\S'   \R                  r	S\S'   \
" \\\   S4   \" \\\4   5      5      r S     SS	 jjrSS
 jrSS jrSS jrSS jr\\SS j5       5       r\\SSS jj5       5       r\SSS jj5       r\SS j5       rSrg)rg   i_  zZ
Performs signing and verification operations using
ECDSA and the specified hash function
r  ra   rb   rc   .Nc                ó   • Xl         X l        g r…   )rs   Úexpected_curve)r   rs   r?  s      rk   rÕ   ÚECAlgorithm.__init__n  s   € ð
 %ŒMØ"0Õrm   c                óÞ   • U R                   c  g[        UR                  U R                   5      (       d:  [        SUR                  R                   SU R                   R                   S35      eg)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?  rw   Úcurver   ró   r•   s     rk   Ú_validate_curveÚECAlgorithm._validate_curvev  sj   € à×"Ñ"Ñ*Øä˜cŸi™i¨×)<Ñ)<×=Ñ=Ü%Ø'¨¯	©	¯©Ð'7ð 8Ø"×1Ñ1×6Ñ6Ð7Ð7KðMóð ð >rm   c                ó>  • [        XR                  5      (       a#  [        [        U5      nU R	                  U5        U$ [        U[
        [        45      (       d  [        S5      e[        U5      n UR                  S5      (       a  [        U5      nO[        U5      nU R                  U5        [        [        U5      nU R	                  U5        U$ ! [         aA    [        US S9nU R                  U5        [        [         U5      nU R	                  U5        Us $ f = f)Nr  s   ecdsa-sha2-r  )rw   rq   r   rC   rC  r|   r¹   r  r   rÜ   r>   r=   r‘   r*   r‹   r<   r(   )r   r�   Úec_keyrà   r  Úec_public_keyr  Úec_private_keys           rk   r–   ÚECAlgorithm.prepare_key�  sþ   € Ü˜#×5Ñ5×6Ñ6äœm¨SÓ1�Ø×$Ñ$ VÔ,Ø�ä˜c¤E¬3 <×0Ñ0ÜÐ @ÓAÐAä# CÓ(ˆIð
&Ø×'Ñ'¨×7Ñ7Ü1DÀYÓ1O‘Jä!4°YÓ!?�Jð ×*Ñ*¨:Ô6Ü $Ô%;¸ZÓ H�Ø×$Ñ$ ]Ô3Ø$Ð$øÜó &Ü2°9ÀtÑL�Ø×*Ñ*¨;Ô7Ü!%Ô&=¸{Ó!K�Ø×$Ñ$ ^Ô4Ø%Ò%ð&ús   Á0A C ÃADÄDc                ó~   • UR                  U[        U R                  5       5      5      n[        X2R                  5      $ r…   )rœ   r"   rs   r   rB  )r   r›   r�   Úder_sigs       rk   rœ   ÚECAlgorithm.sign¢  s,   € Ø—h‘h˜s¤E¨$¯-©-«/Ó$:Ó;ˆGä'¨·±Ó;Ð;rm   c                ó  •  [        X2R                  5      n [        U[        5      (       a  UR                  5       OUnUR                  XA[        U R                  5       5      5        g! [         a     gf = f! [         a     gf = f)NFT)
r   rB  r‹   rw   r(   r  r¡   r"   rs   r   )r   r›   r�   r    rK  r  s         rk   r¡   ÚECAlgorithm.verify§  s…   € ðÜ.¨s·I±IÓ>�ð	ô " #Ô'>×?Ñ?ð —N‘NÔ$àð ð
 ×!Ñ! '´°d·m±m³oÓ0FÔGØøô ó Ùðûô $ó Ùðús#   ‚A) ˜AA9 Á)
A6Á5A6Á9
BÂBc                ó   • g r…   r”   r¤   s     rk   r§   ÚECAlgorithm.to_jwk¸  s   € àORrm   c                ó   • g r…   r”   r¤   s     rk   r§   rP  ¼  s   € àTWrm   c                óà  • [        U [        5      (       a  U R                  5       R                  5       nO1[        U [        5      (       a  U R                  5       nO[        S5      e[        U R                  [        5      (       a  SnO~[        U R                  [        5      (       a  SnO\[        U R                  [        5      (       a  SnO:[        U R                  [        5      (       a  SnO[        SU R                   35      eSU[        UR                  U R                  R                  S9R                  5       [        UR                  U R                  R                  S9R                  5       S	.n[        U [        5      (       aG  [        U R!                  5       R"                  U R                  R                  S9R                  5       US
'   U(       a  U$ [$        R&                  " U5      $ )Nr"  úP-256úP-384úP-521Ú	secp256k1úInvalid curve: ÚEC)Ú
bit_length)rÙ   ÚcrvÚxÚyr  )rw   r(   r  r$  r*   r   rB  r$   r%   r&   r#   r   r[  r	  rê   r\  r  Úprivate_valuerÝ   rë   )r¥   r¦   r$  rZ  rï   s        rk   r§   rP  À  s{  € ä˜'Ô#:×;Ñ;Ø!(×!3Ñ!3Ó!5×!DÑ!DÓ!F‘Ü˜GÔ%;×<Ñ<Ø!(×!7Ñ!7Ó!9‘ä%Ð&CÓDÐDä˜'Ÿ-™-¬×3Ñ3Ø‘Ü˜GŸM™M¬9×5Ñ5Ø‘Ü˜GŸM™M¬9×5Ñ5Ø‘Ü˜GŸM™M¬9×5Ñ5Ø!‘ä%¨¸¿¹°Ð&GÓHÐHð ØÜ&Ø"×$Ñ$Ø&Ÿ}™}×5Ñ5ñ÷ ‘&“(Ü&Ø"×$Ñ$Ø&Ÿ}™}×5Ñ5ñ÷ ‘&“(ñ#ˆCô ˜'Ô#:×;Ñ;Ü,Ø×+Ñ+Ó-×;Ñ;Ø&Ÿ}™}×5Ñ5ñ÷ ‘&“(ð �C‘ö
 Ø�
ä—z’z #“Ð&rm   c                óL  •  [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      S eSU;  d  SU;  a  [        S5      S e[        UR                  S5      5      n[        UR                  S5      5      nUR                  S5      nUS:X  a9  [        U5      [        U5      s=:X  a  S	:X  a  O  O[        5       nOÖ[        S
5      S eUS:X  a9  [        U5      [        U5      s=:X  a  S:X  a  O  O[        5       nO—[        S5      S eUS:X  a9  [        U5      [        U5      s=:X  a  S:X  a  O  O[        5       nOX[        S5      S eUS:X  a8  [        U5      [        U5      s=:X  a  S	:X  a  O  O[        5       nO[        S5      e[        SU 35      e[        [        R!                  USS9[        R!                  USS9US9nSU;  a  UR#                  5       $ [        UR                  S5      5      n[        U5      [        U5      :w  a  [        S[        U5      U5      e[%        [        R!                  USS9U5      R'                  5       $ ! [
         a    [        S5      S ef = f)Nrí   rÙ   rX  zNot an Elliptic curve keyr[  r\  rZ  rS  é    z)Coords should be 32 bytes for curve P-256rT  é0   z)Coords should be 48 bytes for curve P-384rU  éB   z)Coords should be 66 bytes for curve P-521rV  z-Coords should be 32 bytes for curve secp256k1rW  Úbig)Ú	byteorder)r[  r\  rB  r  z!D should be {} bytes for curve {})rw   r¹   rÝ   rÞ   rß   r‹   r   rî   r   rÚ   r$   r%   r&   r#   r+   ÚintÚ
from_bytesr  r)   r  )r­   rï   r[  r\  rB  Ú	curve_objr$  r  s           rk   r®   ÚECAlgorithm.from_jwkì  sd  € ðIÜ˜c¤3×'Ñ'ÜŸ*š* S›/‘CÜ ¤T×*Ñ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ó%Ü%Ð&AÓBÈÐLà˜#‹~ ¨C£Ü%Ð&AÓBÈÐLä  §¡¨£Ó.ˆAÜ  §¡¨£Ó.ˆAà—G‘G˜E“NˆEð ˜ÓÜ�q“6œS ›VÕ) rÖ)Ü )£‘Iä)ØCóàð ð ˜'Ó!Ü�q“6œS ›VÕ) rÖ)Ü )£‘Iä)ØCóàð ð ˜'Ó!Ü�q“6œS ›VÕ) rÖ)Ü )£‘Iä)ØCóàð ð ˜+Ó%Ü�q“6œS ›VÕ) rÖ)Ü )£‘Iä)ØGóð ô &¨¸°wÐ&?Ó@Ð@ä7Ü—.‘. ¨e�.Ð4Ü—.‘. ¨e�.Ð4ØñˆNð ˜#‹~Ø%×0Ñ0Ó2Ð2ä  §¡¨£Ó.ˆAÜ�1‹vœ˜Q›ÓÜ%Ø7¼¸Q»Àóð ô /Ü—‘˜q¨E�Ð2°Nóç‰k‹mðøô{ ó IÜ%Ð&=Ó>ÀDÐHðIús   ‚+J ®J ÁJ ÊJ#)r?  rs   r…   )rs   r9  r?  ztype[EllipticCurve] | Noner³   r´   )r�   rC   r³   r´   )r�   zAllowedECKeys | str | bytesr³   rC   )r›   r|   r�   r(   r³   r|   )r›   r|   r�   rC   r    r|   r³   rµ   )r¥   rC   r¦   r¶   r³   r   r·   )r¥   rC   r¦   r¸   r³   r¹   )r¥   rC   r¦   rµ   r³   rº   )r­   r»   r³   rC   )r†   r½   r¾   r¿   rÀ   r    ra   rÁ   rb   rc   r   r<  rx   rE   r   r   r(   r*   rq   rÕ   rC  r–   rœ   r¡   r   rÂ   r§   r®   rÃ   r”   rm   rk   rg   rg   _  sù   ‡ ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDá Ø�$�{Ñ# SÐ(Ñ)Ù�UÐ2Ð4JÐJÑKÓLó
Ðð :>ð	1à0ð	1ð 7ð	1ð õ		1ô		ô	&ôB	<ô
	ð" 
Ø	ÛRó 
ó 
àRà	Ø	ÝWó 
ó 
àWà	õ)	'ó 
ð)	'ðV 
óG	ó 
óG	rm   rg   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	rh   i6  z1
Performs a signature using RSASSA-PSS with MGF1
c           	     óâ   • UR                  U[        R                  " [        R                  " U R	                  5       5      U R	                  5       R
                  S9U R	                  5       5      nU$ )N©ÚmgfÚsalt_length)rœ   r!   ÚPSSÚMGF1rs   rò   r4  s       rk   rœ   ÚRSAPSSAlgorithm.sign;  sS   € Ø"Ÿx™xØÜ—’ÜŸš T§]¡]£_Ó5Ø $§¡£× ;Ñ ;ñð —‘“ó ˆIð Ðrm   c           
     ó  •  UR                  UU[        R                  " [        R                  " U R	                  5       5      U R	                  5       R
                  S9U R	                  5       5        g! [         a     gf = f)Nrj  TF)r¡   r!   rm  rn  rs   rò   r   rŸ   s       rk   r¡   ÚRSAPSSAlgorithm.verifyF  sh   € ðØ—
‘
ØØÜ—K’KÜ#ŸLšL¨¯©«Ó9Ø$(§M¡M£O×$?Ñ$?ñð —M‘M“Oôð øÜ#ó Ùðús   ‚A/A2 Á2
A?Á>A?r”   Nr:  r;  )r†   r½   r¾   r¿   rÀ   rœ   r¡   rÃ   r”   rm   rk   rh   rh   6  s   † ñ	ô		÷	rm   rh   c            
      ó  • \ rS rSrSr\" \\\   S4   \	" \
\\\\4   5      5      rSS jrSS jr      SS jr        SS jr\\SS j5       5       r\\SSS	 jj5       5       r\SSS
 jj5       r\SS j5       rSrg)ri   iU  zv
Performs signing and verification operations using EdDSA

This class requires ``cryptography>=2.6`` to be installed.
.c                ó   • g r…   r”   )r   Úkwargss     rk   rÕ   ÚOKPAlgorithm.__init__h  s   € Ørm   c                ó¾  • [        U[        [        45      (       d  U R                  U5        U$ [        U[        5      (       a  UR	                  S5      OUn[        U[        5      (       a  UR                  S5      OUnSU;   a  [        U5      nO1SU;   a  [        US S9nO USS S:X  a  [        U5      nO[        S5      eU R                  U5        [        S	U5      $ )
Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEr  r   é   zssh-r"  rD   )rw   r¹   r|   r‘   rê   Úencoder=   r<   r>   r   r   )r   r�   Úkey_strrà   Ú
loaded_keys        rk   r–   ÚOKPAlgorithm.prepare_keyk  sÈ   € Ü˜c¤C¬ <×0Ñ0Ø×*Ñ*¨3Ô/Ø�
ä-7¸¼U×-CÑ-C�c—j‘j Ô)ÈˆGÜ/9¸#¼s×/CÑ/C˜Ÿ
™
 7Ô+ÈˆIð # gÓ-Ü0°Ó;‘
Ø%¨Ó0Ü1°)ÀdÑK‘
Ø˜˜1� Ó'Ü0°Ó;‘
ä%Ð&CÓDÐDð ×&Ñ& zÔ2ÜÐ(¨*Ó5Ð5rm   c                óx   • [        U[        5      (       a  UR                  S5      OUnUR                  U5      nU$ )a  
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
rw  )rw   r¹   ry  rœ   )r   r›   r�   Ú	msg_bytesr5  s        rk   rœ   ÚOKPAlgorithm.sign�  s4   € ô 0:¸#¼s×/CÑ/C˜Ÿ
™
 7Ô+ÈˆIØ"Ÿx™x¨	Ó2ˆIØÐrm   c                óB  •  [        U[        5      (       a  UR                  S5      OUn[        U[        5      (       a  UR                  S5      OUn[        U[        [        45      (       a  UR                  5       OUnUR                  XT5        g! [         a     gf = f)ap  
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.
rw  TF)rw   r¹   ry  r.   r,   r  r¡   r   )r   r›   r�   r    r~  Ú	sig_bytesr  s          rk   r¡   ÚOKPAlgorithm.verify�  s�   € ðÜ3=¸cÄ3×3GÑ3G˜CŸJ™J wÔ/ÈS�	Ü3=¸cÄ3×3GÑ3G˜CŸJ™J wÔ/ÈS�	ô " #Ô(9¼?Ð'K×LÑLð —N‘NÔ$àð ð
 ×!Ñ! )Ô7ØøÜ#ó Ùðús   ‚BB Â
BÂBc                ó   • g r…   r”   ©r�   r¦   s     rk   r§   ÚOKPAlgorithm.to_jwk©  s   € àLOrm   c                ó   • g r…   r”   r„  s     rk   r§   r…  ­  s   € àQTrm   c                ót  • [        U [        [        45      (       aŠ  U R                  [        R
                  [        R
                  S9n[        U [        5      (       a  SOSn[        [        U5      5      R                  5       SUS.nU(       a  U$ [        R                  " U5      $ [        U [        [        45      (       aî  U R                  [        R
                  [        R
                  [!        5       S9nU R#                  5       R                  [        R
                  [        R
                  S9n[        U [        5      (       a  SOSn[        [        U5      5      R                  5       [        [        U5      5      R                  5       SUS.nU(       a  U$ [        R                  " U5      $ [%        S5      e)	N)ÚencodingÚformatÚEd25519ÚEd448ÚOKP)r[  rÙ   rZ  )rˆ  r‰  Úencryption_algorithm)r[  r  rÙ   rZ  r"  )rw   r/   r-   Úpublic_bytesr8   ÚRawr;   r   r   rê   rÝ   rë   r.   r,   Úprivate_bytesr:   r9   r  r   )r�   r¦   r[  rZ  rï   r  s         rk   r§   r…  ±  sh  € ä˜#Ô 0´.ÐA×BÑBØ×$Ñ$Ü%Ÿ\™\Ü'×+Ñ+ð %ð �ô $.¨cÔ3C×#DÑ#D‘iÈ'�ô *¬+°a«.Ó9×@Ñ@ÓBØ Øñ�ö Ø�JäŸ:š: c›?Ð*ä˜#Ô 1´?ÐC×DÑDØ×%Ñ%Ü%Ÿ\™\Ü(×,Ñ,Ü)5«ð &ð �ð —N‘NÓ$×1Ñ1Ü%Ÿ\™\Ü'×+Ñ+ð 2ð �ô
 $.¨cÔ3D×#EÑ#E‘iÈ7�ä)¬+°a«.Ó9×@Ñ@ÓBÜ)¬+°a«.Ó9×@Ñ@ÓBØ Øñ	�ö Ø�JäŸ:š: c›?Ð*ä!Ð"?Ó@Ð@rm   c                óþ  •  [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      eUR                  S5      nUS:w  a  US:w  a  [        SU 35      eS	U;  a  [        S
5      e[        UR                  S	5      5      n SU;  a2  US:X  a  [        R                  " U5      $ [        R                  " U5      $ [        UR                  S5      5      nUS:X  a  [        R                  " U5      $ [        R                  " U5      $ ! [
         a    [        S5      S ef = f! [
         a  n[        S5      UeS nAff = f)Nrí   rÙ   rŒ  zNot an Octet Key PairrZ  rŠ  r‹  rW  r[  zOKP should have "x" parameterr  zInvalid key parameter)rw   r¹   rÝ   rÞ   rß   r‹   r   rî   r   r/   Úfrom_public_bytesr-   r.   Úfrom_private_bytesr,   )r­   rï   rB  r[  r  Úerrs         rk   r®   ÚOKPAlgorithm.from_jwkà  s`  € ðIÜ˜c¤3×'Ñ'ÜŸ*š* S›/‘CÜ ¤T×*Ñ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ó&Ü%Ð&=Ó>Ð>à—G‘G˜E“NˆEØ˜	Ó! e¨wÓ&6Ü%¨¸°wÐ&?Ó@Ð@à˜#‹~Ü%Ð&EÓFÐFÜ  §¡¨£Ó.ˆAð
HØ˜c“>Ø 	Ó)Ü/×AÒAÀ!ÓDÐDÜ)×;Ò;¸AÓ>Ð>Ü$ S§W¡W¨S£\Ó2�Ø˜IÓ%Ü,×?Ò?ÀÓBÐBÜ&×9Ò9¸!Ó<Ð<øô- ó IÜ%Ð&=Ó>ÀDÐHðIûô. ó HÜ%Ð&=Ó>ÀCÐGûðHús@   ‚+E ®E ÁE Ã!E! Ã%E! Ã;5E! Ä1E! ÅEÅ!
E<Å+E7Å7E<r”   N)rt  r   r³   r´   )r�   zAllowedOKPKeys | str | bytesr³   rD   )r›   rþ   r�   z#Ed25519PrivateKey | Ed448PrivateKeyr³   r|   )r›   rþ   r�   rD   r    rþ   r³   rµ   )r�   rD   r¦   r¶   r³   r   r·   )r�   rD   r¦   r¸   r³   r¹   )r�   rD   r¦   rµ   r³   rº   )r­   r»   r³   rD   )r†   r½   r¾   r¿   rÀ   r   r<  rx   rE   r   r   r.   r/   r,   r-   rq   rÕ   r–   rœ   r¡   r   rÂ   r§   r®   rÃ   r”   rm   rk   ri   ri   U  sì   † ñ	ñ !Ø�$�{Ñ# SÐ(Ñ)ÙØØ%Ø$Ø#Ø"ð$ñóó

Ðô	ô	6ð,	Ø"ð	Ø)Lð	àô	ð	Ø"ð	Ø)7ð	Ø>Ið	àô	ð4 
Ø	ÛOó 
ó 
àOà	Ø	ÝTó 
ó 
àTà	õ,	Aó 
ð,	Að\ 
ó 	Hó 
ó 	Hrm   ri   )r³   zdict[str, Algorithm])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   rd   ÚModuleNotFoundErrorrM   Úrequires_cryptographyrl   ro   r_   r`   rf   rg   rh   ri   r”   rm   rk   Ú<module>r­     s3  ðÞ "ã Û Û Û 	Û 
ß #÷
÷ 
õ 
õ (ß '÷
÷ 
õ 
ðVßNÝ<Ý5ÝA÷÷ ÷ ÷÷÷	÷ 	ó 	÷÷ ñ ð ×Ñ˜7Ó"Þ$õ 	0ð !& m°\Ð&AÑ B€N�IÓBØ$Ð%<Ð>TÐ%TÑU€M�9ÓUØ %ØÐ+¨_¸nÐLñ!€N�Ió ð # >°=À.Ð#PÑQ€K�ÓQà$)ØÐ.Ð0AÀ?ÐRñ%Ð˜	ó ð $)ØÐ,Ð.>ÀÐNñ$Ð�yó ö ™˜RŸYšY ~°rÓ:×;Ñ;÷	
ð
 €Jò Ð ô ôDi�ô iôX$�Iô $ô<c=�Iô c=öL ô}�yô }ô~U�iô Uôn˜,ô ô>lH�yõ lHðo øðc	 ó Ø
×Ñ˜7Ó"Þ å+à€NØ€MØ€NØ€KØÐØÐØ‚Jðús   ÁDG Ç1G5Ç4G5