Ë
    ÑÕ¯ib‹  ã                  óº  — 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mZmZ d dl	m
Z
mZmZmZmZmZmZmZ ddlmZ ddlmZ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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZGmHZHmIZImJZJmKZK e<e>fZLe1e3fZMe9e:e6e7fZNeLeMz   eNz   ZOe<e1e9e6fZPe>e3e:e7fZQe
s eR ej¦                  dd«      «      rwd dlTZTeTjª                  dk\  rd dl	mVZV nd dlWmVZV d dlXmYZYmZZZ ee<e>f   Z[de\d<   ee1e3f   Z]de\d<   ee9e:e6e7f   Z^de\d<   ee[e]e^f   Z_de\d<   ee<e1e9e6f   Z`de\d<   ee>e3e:e7f   Zade\d<   dZbh d £Zdd0d!„Ze G d"„ d#e«      Zf G d$„ d%ef«      Zg G d&„ d'ef«      Zhebr- G d(„ d)ef«      Zi G d*„ d+ef«      Zj G d,„ d-ei«      Zk G d.„ d/ef«      Zlyy# ec$ r dZbY Œbw xY w)1é    )ÚannotationsN)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAnyÚClassVarÚLiteralÚNoReturnÚUnionÚcastÚ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ÚSPHINX_BUILDÚ )é   é
   )Ú	TypeAlias)ÚPrivateKeyTypesÚPublicKeyTypesrB   ÚAllowedRSAKeysÚAllowedECKeysÚAllowedOKPKeysÚAllowedKeysÚAllowedPrivateKeysÚAllowedPublicKeysTF>   ÚES256ÚES384ÚES512ÚES521ÚEdDSAÚPS256ÚPS384ÚPS512ÚRS256ÚRS384ÚRS512ÚES256Kc                 ó4  — t        «       t        t        j                  «      t        t        j                  «      t        t        j                  «      dœ} t
        �r<| j                  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)rS   rT   rU   rK   rV   rL   rN   rM   rP   rQ   rR   rO   )ÚNoneAlgorithmÚHMACAlgorithmÚSHA256ÚSHA384ÚSHA512Ú
has_cryptoÚupdateÚRSAAlgorithmÚECAlgorithmr#   r"   r$   r%   ÚRSAPSSAlgorithmÚOKPAlgorithm)Údefault_algorithmss    úA/var/www/html/venv/lib/python3.12/site-packages/jwt/algorithms.pyÚget_default_algorithmsri   �   s	  € ô
 “Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4ñ	0Ðö Ø×!Ñ!ä%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü$¤[×%7Ñ%7¼ÓCÜ%¤k×&8Ñ&8¼)ÓDÜ$¤[×%7Ñ%7¼ÓCÜ$¤[×%7Ñ%7¼ÓCÜ$Ü×&Ñ&¬	óô )¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü%›ñô	
ð& Ðó    c                  ó  — 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y)Ú	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    Nz$tuple[type[AllowedKeys], ...] | NoneÚ_crypto_key_typesc                óf  — t        | dd«      }|€t        ‚t        rxt        |t        «      rht        |t        j                  «      rNt        j                   |«       t        «       ¬«      }|j                  |«       t        |j                  «       «      S t         ||«      j                  «       «      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ÚNotImplementedErrorra   Ú
isinstanceÚtypeÚ
issubclassr   ÚHashAlgorithmÚHashr   rb   ÚbytesÚfinalizeÚdigest)ÚselfÚbytestrro   rz   s       rh   Úcompute_hash_digestzAlgorithm.compute_hash_digestÇ   s‰   € ô ˜4 ¨TÓ2ˆØÐÜ%Ð%õ Ü˜8¤TÔ*Ü˜8¤V×%9Ñ%9Ô:ä—[‘[¡£´_Ó5FÔGˆFØ�M‰M˜'Ô"Ü˜Ÿ™Ó*Ó+Ð+ä™ 'Ó*×1Ñ1Ó3Ó4Ð4rj   c                ó  — t         r| j                  €t        d«      ‚t        || j                  «      sSd„ | j                  D «       }|j                  j
                  }| j                  j
                  }t        d|› d|› d|› �«      ‚y)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  ó4   K  — | ]  }|j                   –— Œ y ­w©N)Ú__name__)Ú.0Úclss     rh   Ú	<genexpr>z2Algorithm.check_crypto_key_type.<locals>.<genexpr>í   s   è ø€ ÐLÑ5K¨c˜SŸ\�\Ñ5Kùs   ‚zExpected one of z, got: z. Invalid Key type for )ra   rm   Ú
ValueErrorrs   Ú	__class__r�   r   )r{   ÚkeyÚvalid_classesÚactual_classÚ
self_classs        rh   Úcheck_crypto_key_typezAlgorithm.check_crypto_key_typeÝ   s�   € õ ˜T×3Ñ3Ð;ÜØzóð ô ˜#˜t×5Ñ5Ô6ÙL°T×5KÒ5KÓLˆMØŸ=™=×1Ñ1ˆLØŸ™×0Ñ0ˆJÜ!Ø" = /°¸¸ÐF]Ð^hÐ]iÐjóð ð	 7rj   c                 ó   — y)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     rh   Úprepare_keyzAlgorithm.prepare_keyô   ó   � rj   c                 ó   — y)zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nr�   ©r{   Úmsgr‡   s      rh   ÚsignzAlgorithm.signû   r�   rj   c                 ó   — y)zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        Nr�   ©r{   r“   r‡   Úsigs       rh   ÚverifyzAlgorithm.verify  r�   rj   c                 ó   — y r€   r�   ©Úkey_objÚas_dicts     rh   Úto_jwkzAlgorithm.to_jwk	  s	   € ð BErj   c                 ó   — y r€   r�   rš   s     rh   r�   zAlgorithm.to_jwk  s   € ð
 rj   c                 ó   — y)z3
        Serializes a given key into a JWK
        Nr�   rš   s     rh   r�   zAlgorithm.to_jwk  r�   rj   c                 ó   — y)zJ
        Deserializes a given key from JWK back into a key object
        Nr�   ©Újwks    rh   Úfrom_jwkzAlgorithm.from_jwk  r�   rj   c                 ó   — y)zŽ
        Return a warning message if the key is below the minimum
        recommended length for this algorithm, or None if adequate.
        Nr�   rŽ   s     rh   Úcheck_key_lengthzAlgorithm.check_key_length#  s   € ð
 rj   )r|   rx   Úreturnrx   )r‡   z PublicKeyTypes | PrivateKeyTypesr¦   ÚNone)r‡   r   r¦   r   )r“   rx   r‡   r   r¦   rx   )r“   rx   r‡   r   r—   rx   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__Ú__doc__rm   Ú__annotations__r}   r‹   r   r�   r”   r˜   r   Ústaticmethodr�   r£   r¥   r�   rj   rh   rl   rl   ¿   sù   … ñð
 ?CÐÐ;ÓBó5ó,ð. òó ðð òó ðð òó ðð ØØÚDó ó ó ð EàØØà05ðØðØ-ðà	òó ó ó ðð Øóó ó ðð
 Øòó ó ðô
rj   rl   c                  óN   — e Zd ZdZdd„Zd	d„Zd
d„Zeddd„«       Zedd„«       Z	y)r\   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c                ó.   — |dk(  rd }|�t        d«      ‚|S )Nr?   z*When alg = "none", key value must be None.r   rŽ   s     rh   r�   zNoneAlgorithm.prepare_key1  s$   € Ø�"Š9ØˆCàˆ?Ü!Ð"NÓOÐOàˆ
rj   c                 ó   — y)Nrj   r�   r’   s      rh   r”   zNoneAlgorithm.sign:  s   € Ørj   c                 ó   — y)NFr�   r–   s       rh   r˜   zNoneAlgorithm.verify=  s   € Ørj   c                ó   — t        «       ‚r€   ©rr   rš   s     rh   r�   zNoneAlgorithm.to_jwk@  ó   € ä!Ó#Ð#rj   c                ó   — t        «       ‚r€   rº   r¡   s    rh   r£   zNoneAlgorithm.from_jwkD  r»   rj   N)r‡   r¯   r¦   r§   )r“   rx   r‡   r§   r¦   rx   )r“   rx   r‡   r§   r—   rx   r¦   r¨   rª   )r›   r   rœ   r¨   r¦   r
   )r¢   r®   r¦   r
   )
r�   r°   r±   r²   r�   r”   r˜   r´   r�   r£   r�   rj   rh   r\   r\   +  s>   „ ñó
óóð ó$ó ð$ð ò$ó ñ$rj   r\   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y)r]   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]r^   r_   r`   c                ó   — || _         y r€   ©ro   ©r{   ro   s     rh   Ú__init__zHMACAlgorithm.__init__S  s	   € Ø ˆ�rj   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      rh   r�   zHMACAlgorithm.prepare_keyV  s5   € Ü Ó$ˆ	ä˜Ô#¤z°)Ô'<Ü!ð9óð ð
 Ðrj   c                 ó   — y r€   r�   rš   s     rh   r�   zHMACAlgorithm.to_jwka  s   € àILrj   c                 ó   — y r€   r�   rš   s     rh   r�   zHMACAlgorithm.to_jwke  s   € àNQrj   c                ó~   — t        t        | «      «      j                  «       ddœ}|r|S t        j                  |«      S )NÚoct)ÚkÚkty)r   r   ÚdecodeÚjsonÚdumps)r›   rœ   r¢   s      rh   r�   zHMACAlgorithm.to_jwki  s<   € ô "¤+¨gÓ"6Ó7×>Ñ>Ó@Øñ
ˆñ
 ØˆJä—:‘:˜c“?Ð"rj   c                ó  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      ‚t        |d   «      S # t
        $ r t        d«      d ‚w xY w)NúKey is not valid JSONrÉ   rÇ   zNot an HMAC keyrÈ   )	rs   r¬   rË   ÚloadsÚdictr…   r   Úgetr   )r¢   Úobjs     rh   r£   zHMACAlgorithm.from_jwku  s‚   € ð	EÜ˜#œsÔ#Ü#Ÿz™z¨#›‘Ü˜C¤Ô&Ø‘ä Ð ð �7‰7�5‹>˜UÒ"Ü!Ð"3Ó4Ð4ä  C¡Ó)Ð)øô ò 	EÜ!Ð"9Ó:ÀÐDð	Eús   ‚?A. Á.Bc                óÊ   — | j                  «       j                  }t        |«      |k  r;dt        |«      › d|› d| j                  «       j                  j	                  «       › d�S y )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.)ro   Údigest_sizeÚlenÚnameÚupper)r{   r‡   Ú
min_lengths      rh   r¥   zHMACAlgorithm.check_key_length†  se   € Ø—]‘]“_×0Ñ0ˆ
Üˆs‹8�jÒ à"¤3 s£8 *ð -5Ø5?°LÀØ—=‘=“?×'Ñ'×-Ñ-Ó/Ð0ð 1,ð-ðð rj   c                ó`   — t        j                  ||| j                  «      j                  «       S r€   )ÚhmacÚnewro   rz   r’   s      rh   r”   zHMACAlgorithm.sign‘  s"   € Ü�x‰x˜˜S $§-¡-Ó0×7Ñ7Ó9Ð9rj   c                óN   — t        j                  || j                  ||«      «      S r€   )rÚ   Úcompare_digestr”   r–   s       rh   r˜   zHMACAlgorithm.verify”  s    € Ü×"Ñ" 3¨¯	©	°#°sÓ(;Ó<Ð<rj   N)ro   r   r¦   r§   )r‡   ústr | bytesr¦   rx   )r›   rÞ   rœ   r©   r¦   r   rª   )r›   rÞ   rœ   r«   r¦   r¬   )r›   rÞ   rœ   r¨   r¦   r­   )r¢   r®   r¦   rx   )r‡   rx   r¦   r¯   )r“   rx   r‡   rx   r¦   rx   )r“   rx   r‡   rx   r—   rx   r¦   r¨   )r�   r°   r±   r²   ÚhashlibÚsha256r^   r³   Úsha384r_   Úsha512r`   rÁ   r�   r   r´   r�   r£   r¥   r”   r˜   r�   rj   rh   r]   r]   I  s£   … ñð
 %,§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2ó!ó	ð ØÚLó ó àLàØÛQó ó àQàó	#ó ð	#ð ò*ó ð*ó 	ó:ô=rj   r]   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<   e	Z
dZded<   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d„Zdd„Zy)rc   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        ú$ClassVar[type[hashes.HashAlgorithm]]r^   r_   r`   i   zClassVar[int]Ú_MIN_KEY_SIZEc                ó   — || _         y r€   r¿   rÀ   s     rh   rÁ   zRSAAlgorithm.__init__§  s	   € Ø$ˆD�Mrj   c                óp   — |j                   | j                  k  rd|j                   › d| j                  › d�S y )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     rh   r¥   zRSAAlgorithm.check_key_lengthª  sE   € Ø�|‰|˜d×0Ñ0Ò0à% c§l¡l ^ð 47Ø7;×7IÑ7IÐ6Jð K,ð-ðð
 rj   c                ó  — t        || j                  «      r|S t        |t        t        f«      st	        d«      ‚t        |«      }	 |j                  d«      r,t        |«      }| j                  |«       t        t        |«      S t        |d ¬«      }| j                  |«       t        t        |«      S # t        $ rO 	 t        |«      }| j                  |«       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.)rs   rm   rx   r¬   Ú	TypeErrorr   Ú
startswithr=   r‹   r   r1   r;   r/   r…   r<   r   r   )r{   r‡   rÃ   Ú
public_keyÚprivate_keys        rh   r�   zRSAAlgorithm.prepare_key³  s   € Ü˜#˜t×5Ñ5Ô6Ø�
ä˜c¤E¬3 <Ô0ÜÐ @ÓAÐAä# CÓ(ˆIð Ø×'Ñ'¨
Ô3Ü1DÀYÓ1O�JØ×.Ñ.¨zÔ:Ü¤¨jÓ9Ð9ä3GØ!¨Dô4�Kð ×.Ñ.¨{Ô;Ü¤¨{Ó;Ð;øÜò  ð Ü!4°YÓ!?�JØ×.Ñ.¨zÔ:Ü¤¨jÓ9Ò9øÜ"Ô$8Ð9ò  Ü)ØBóàð ð úð ús*   Á<B1 Â-B1 Â1	D	Â;+C)Ã&D	Ã)DÄD	c                 ó   — y r€   r�   rš   s     rh   r�   zRSAAlgorithm.to_jwkÑ  s   € àPSrj   c                 ó   — y r€   r�   rš   s     rh   r�   zRSAAlgorithm.to_jwkÕ  s   € àUXrj   c                ó¬  — d }t        | d«      �r;| j                  «       }ddgt        |j                  j                  «      j                  «       t        |j                  j                  «      j                  «       t        |j                  «      j                  «       t        |j                  «      j                  «       t        |j                  «      j                  «       t        |j                  «      j                  «       t        |j                  «      j                  «       t        |j                  «      j                  «       dœ
}nrt        | d«      r[| j                  «       }ddgt        |j                  «      j                  «       t        |j                  «      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       rh   r�   zRSAAlgorithm.to_jwkÙ  sb  € à)-ˆCä�wÐ 1Õ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 #“Ð&rj   c                ó:  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      d ‚d|v �rTd|v �rOd|v �rJd|v rt        d	«      ‚g d
¢}|D �cg c]  }||v ‘Œ }}t        |«      }|rt        |«      st        d«      d ‚t        t        |d   «      t        |d   «      «      }|rjt        t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      |¬«      }|j'                  «       S t        |d   «      }t        |j                  ||j                  «      \  }	}
t        ||	|
t!        ||	«      t#        ||
«      t%        |	|
«      |¬«      }|j'                  «       S d|v r6d|v r2t        t        |d   «      t        |d   «      «      j)                  «       S t        d«      ‚# t
        $ r t        d«      d ‚w xY wc c}w )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ÿ   )rs   r¬   rË   rÏ   rÐ   r…   r   rÑ   ÚanyÚallr2   r   r0   r6   r÷   rø   r3   r4   r5   rð   rï   )r¢   rÒ   Úother_propsÚpropÚprops_foundÚany_props_foundr  r  rù   rú   rû   s              rh   r£   zRSAAlgorithm.from_jwk   s;  € ð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˜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�qô 0ØØØÜ)¨!¨QÓ/Ü)¨!¨QÓ/Ü)¨!¨QÓ/Ø'5ô�Gð ×*Ñ*Ó,Ð,Ø˜‘  s¡
ä'Ü'¨¨C©Ó1Ü'¨¨C©Ó1ó÷ ‘*“,ðô
 &Ð&CÓDÐDøô{ ò IÜ%Ð&=Ó>ÀDÐHðIüò Ds   ‚?G? ÂHÇ?Hc                ól   — |j                  |t        j                  «       | j                  «       «      }|S r€   )r”   r    ÚPKCS1v15ro   ©r{   r“   r‡   Ú	signatures       rh   r”   zRSAAlgorithm.signH  s)   € Ø"Ÿx™x¨¬W×-=Ñ-=Ó-?ÀÇÁÃÓQˆIØÐrj   c                óŒ   — 	 |j                  ||t        j                  «       | j                  «       «       y# t        $ r Y yw xY w)NTF)r˜   r    r  ro   r   r–   s       rh   r˜   zRSAAlgorithm.verifyL  s=   € ðØ—
‘
˜3 ¤W×%5Ñ%5Ó%7¸¿¹»ÔIØøÜ#ò Ùðús   ‚47 ·	AÁAN)ro   útype[hashes.HashAlgorithm]r¦   r§   )r‡   rE   r¦   r¯   )r‡   zAllowedRSAKeys | str | bytesr¦   rE   )r›   rE   rœ   r©   r¦   r   rª   )r›   rE   rœ   r«   r¦   r¬   )r›   rE   rœ   r¨   r¦   r­   )r¢   r®   r¦   rE   ©r“   rx   r‡   r/   r¦   rx   ©r“   rx   r‡   r1   r—   rx   r¦   r¨   )r�   r°   r±   r²   r   r^   r³   r_   r`   ÚALLOWED_RSA_KEY_TYPESrm   rå   rÁ   r¥   r�   r   r´   r�   r£   r”   r˜   r�   rj   rh   rc   rc   š  s¹   … ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDà1ÐØ'+ˆ�}Ó+ó	%ó	ó	 ð< 
Ø	ÚSó 
ó 
àSà	Ø	ÛXó 
ó 
àXà	ó$	'ó 
ð$	'ðL 
òE	Eó 
ðE	EóN	ô	rj   rc   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<   e	Z
	 d	 	 	 	 	 dd„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y)rd   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        rä   r^   r_   r`   Nc                ó    — || _         || _        y r€   )ro   Úexpected_curve)r{   ro   r  s      rh   rÁ   zECAlgorithm.__init___  s   € ð
 %ˆDŒMØ"0ˆDÕrj   c                óÒ   — | j                   €yt        |j                  | j                   «      s:t        d|j                  j                  › d| j                   j                  › d�«      ‚y)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  rs   Úcurver   rÖ   rŽ   s     rh   Ú_validate_curvezECAlgorithm._validate_curveg  sg   € à×"Ñ"Ð*Øä˜cŸi™i¨×)<Ñ)<Ô=Ü%Ø'¨¯	©	¯©Ð'7ð 8Ø"×1Ñ1×6Ñ6Ð7Ð7KðMóð ð >rj   c                ó  — t        || j                  «      r| j                  |«       |S t        |t        t        f«      st        d«      ‚t        |«      }	 |j                  d«      rt        |«      }nt        |«      }| j                  |«       t        t        |«      }| j                  |«       |S # t        $ rD t        |d ¬«      }| j                  |«       t        t        |«      }| j                  |«       |cY S w xY w)Nrê   s   ecdsa-sha2-rë   )rs   rm   r  rx   r¬   rí   r   rî   r=   r<   r‹   r   r)   r…   r;   r'   )r{   r‡   rÃ   rï   Úec_public_keyrð   Úec_private_keys          rh   r�   zECAlgorithm.prepare_keyr  së   € Ü˜#˜t×5Ñ5Ô6Ø×$Ñ$ SÔ)Ø�
ä˜c¤E¬3 <Ô0ÜÐ @ÓAÐAä# CÓ(ˆIð
&Ø×'Ñ'¨Ô7Ü1DÀYÓ1O‘Jä!4°YÓ!?�Jð ×*Ñ*¨:Ô6Ü $Ô%;¸ZÓ H�Ø×$Ñ$ ]Ô3Ø$Ð$øÜò &Ü2°9ÀtÔL�Ø×*Ñ*¨;Ô7Ü!%Ô&=¸{Ó!K�Ø×$Ñ$ ^Ô4Ø%Ò%ð&ús   ÁAB3 Â3A
D Ã?D c                ó€   — |j                  |t        | j                  «       «      «      }t        ||j                  «      S r€   )r”   r!   ro   r   r  )r{   r“   r‡   Úder_sigs       rh   r”   zECAlgorithm.sign‘  s.   € Ø—h‘h˜s¤E¨$¯-©-«/Ó$:Ó;ˆGä'¨°·±Ó;Ð;rj   c                ó  — 	 t        ||j                  «      }	 t        |t        «      r|j                  «       n|}|j                  ||t        | j                  «       «      «       y# t        $ r Y yw xY w# t        $ r Y yw xY w)NFT)
r   r  r…   rs   r'   rï   r˜   r!   ro   r   )r{   r“   r‡   r—   r!  rï   s         rh   r˜   zECAlgorithm.verify–  s†   € ðÜ.¨s°C·I±IÓ>�ð	ô " #Ô'>Ô?ð —N‘NÔ$àð ð
 ×!Ñ! '¨3´°d·m±m³oÓ0FÔGØøô ò Ùðûô $ò Ùðús#   ‚A& ™AA5 Á&	A2Á1A2Á5	BÂ Bc                 ó   — y r€   r�   rš   s     rh   r�   zECAlgorithm.to_jwk§  s   € àORrj   c                 ó   — y r€   r�   rš   s     rh   r�   zECAlgorithm.to_jwk«  s   € àTWrj   c                ó   — t        | t        «      r| j                  «       j                  «       }n,t        | t        «      r| j                  «       }nt        d«      ‚t        | j                  t        «      rd}not        | j                  t        «      rd}nRt        | j                  t        «      rd}n5t        | j                  t        «      rd}nt        d| j                  › �«      ‚d|t        |j                  | j                  j                  ¬«      j                  «       t        |j                  | j                  j                  ¬«      j                  «       d	œ}t        | t        «      rJt        | j!                  «       j"                  | 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ù   )rs   r'   rï   r  r)   r   r  r#   r$   r%   r"   r   r.  rè   rÊ   r/  rô   Úprivate_valuerË   rÌ   )r›   rœ   r  r-  rÒ   s        rh   r�   zECAlgorithm.to_jwk¯  sf  € ä˜'Ô#:Ô;Ø!(×!3Ñ!3Ó!5×!DÑ!DÓ!F‘Ü˜GÔ%;Ô<Ø!(×!7Ñ!7Ó!9‘ä%Ð&CÓDÐDä˜'Ÿ-™-¬Ô3Ø‘Ü˜GŸM™M¬9Ô5Ø‘Ü˜GŸM™M¬9Ô5Ø‘Ü˜GŸM™M¬9Ô5Ø!‘ä%¨¸¿¹°Ð&GÓHÐHð ØÜ&Ø"×$Ñ$Ø&Ÿ}™}×5Ñ5ô÷ ‘&“(Ü&Ø"×$Ñ$Ø&Ÿ}™}×5Ñ5ô÷ ‘&“(ñ#ˆCô ˜'Ô#:Ô;Ü,Ø×+Ñ+Ó-×;Ñ;Ø&Ÿ}™}×5Ñ5ô÷ ‘&“(ð �C‘ñ
 Ø�
ä—z‘z #“Ð&rj   c                ó8  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      d ‚d|vsd|vrt        d«      d ‚t        |j                  d«      «      }t        |j                  d«      «      }|j                  d«      }|dk(  r7t        |«      t        |«      cxk(  rd	k(  rn nt        «       }n×t        d
«      d ‚|dk(  r7t        |«      t        |«      cxk(  rdk(  rn nt        «       }n›t        d«      d ‚|dk(  r7t        |«      t        |«      cxk(  rdk(  rn nt        «       }n_t        d«      d ‚|dk(  r@t        |«      t        |«      cxk(  rd	k(  rn t        d«      ‚t        «       }nt        d«      ‚t        d|› �«      ‚t        t        j!                  |d¬«      t        j!                  |d¬«      |¬«      }d|vr|j#                  «       S t        |j                  d«      «      }t        |«      t        |«      k7  rt        dt        |«      |«      ‚t%        t        j!                  |d¬«      |«      j'                  «       S # t
        $ r t        d«      d ‚w xY w)NrÎ   rÉ   r+  zNot an Elliptic curve keyr.  r/  r-  r&  é    z)Coords should be 32 bytes for curve P-256r'  é0   z)Coords should be 48 bytes for curve P-384r(  éB   z)Coords should be 66 bytes for curve P-521r)  z-Coords should be 32 bytes for curve secp256k1r*  Úbig)Ú	byteorder)r.  r/  r  rù   z!D should be {} bytes for curve {})rs   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           rh   r£   zECAlgorithm.from_jwkÛ  sr  € ð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Ô)ô *ØGóð ô !*£‘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r€   )ro   r  r  ztype[EllipticCurve] | Noner¦   r§   )r‡   rF   r¦   r§   )r‡   zAllowedECKeys | str | bytesr¦   rF   )r“   rx   r‡   r'   r¦   rx   )r“   rx   r‡   rF   r—   rx   r¦   r¨   )r›   rF   rœ   r©   r¦   r   rª   )r›   rF   rœ   r«   r¦   r¬   )r›   rF   rœ   r¨   r¦   r­   )r¢   r®   r¦   rF   )r�   r°   r±   r²   r   r^   r³   r_   r`   ÚALLOWED_EC_KEY_TYPESrm   rÁ   r  r�   r”   r˜   r   r´   r�   r£   r�   rj   rh   rd   rd   S  sÍ   … ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDà0Ðð
 :>ð	1à0ð	1ð 7ð	1ð ó		1ó		ó	&ó>	<ó
	ð" 
Ø	ÚRó 
ó 
àRà	Ø	ÛWó 
ó 
àWà	ó)	'ó 
ð)	'ðV 
òG	ó 
ñG	rj   rd   c                  ó    — e Zd ZdZdd„Zdd„Zy)re   zA
        Performs a signature using RSASSA-PSS with MGF1
        c           	     óä   — |j                  |t        j                  t        j                  | j	                  «       «      | j	                  «       j
                  ¬«      | j	                  «       «      }|S )N©ÚmgfÚsalt_length)r”   r    ÚPSSÚMGF1ro   rÔ   r  s       rh   r”   zRSAPSSAlgorithm.sign*  sS   € Ø"Ÿx™xØÜ—‘ÜŸ™ T§]¡]£_Ó5Ø $§¡£× ;Ñ ;ôð —‘“ó ˆIð Ðrj   c           
     ó  — 	 |j                  ||t        j                  t        j                  | j	                  «       «      | j	                  «       j
                  ¬«      | j	                  «       «       y# t        $ r Y yw xY w)Nr=  TF)r˜   r    r@  rA  ro   rÔ   r   r–   s       rh   r˜   zRSAPSSAlgorithm.verify5  sh   € ðØ—
‘
ØØÜ—K‘KÜ#ŸL™L¨¯©«Ó9Ø$(§M¡M£O×$?Ñ$?ôð —M‘M“Oôð øÜ#ò Ùðús   ‚A0A3 Á3	A?Á>A?Nr  r  )r�   r°   r±   r²   r”   r˜   r�   rj   rh   re   re   %  s   „ ñ	ó		ô	rj   re   c                  ó°   — e Zd ZdZe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y
)rf   zŽ
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        c                 ó   — y r€   r�   )r{   Úkwargss     rh   rÁ   zOKPAlgorithm.__init__M  s   € Ørj   c                óœ  — t        |t        t        f«      s| j                  |«       |S t        |t        «      r|j	                  d«      n|}t        |t        «      r|j                  d«      n|}d|v rt        |«      }n1d|v rt        |d ¬«      }n|dd dk(  rt        |«      }nt        d«      ‚| j                  |«       t        d	|«      S )
Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATErë   r   é   zssh-rÿ   rG   )rs   r¬   rx   r‹   rÊ   Úencoder<   r;   r=   r   r   )r{   r‡   Úkey_strrÃ   Ú
loaded_keys        rh   r�   zOKPAlgorithm.prepare_keyP  s¿   € Ü˜c¤C¬ <Ô0Ø×*Ñ*¨3Ô/Ø�
ä-7¸¼UÔ-C�c—j‘j Ô)ÈˆGÜ/9¸#¼sÔ/C˜Ÿ
™
 7Ô+ÈˆIð # gÑ-Ü0°Ó;‘
Ø%¨Ñ0Ü1°)ÀdÔK‘
Ø˜˜1� Ò'Ü0°Ó;‘
ä%Ð&CÓDÐDð ×&Ñ& zÔ2ÜÐ(¨*Ó5Ð5rj   c                ón   — t        |t        «      r|j                  d«      n|}|j                  |«      }|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
            rG  )rs   r¬   rI  r”   )r{   r“   r‡   Ú	msg_bytesr  s        rh   r”   zOKPAlgorithm.signf  s1   € ô 0:¸#¼sÔ/C˜Ÿ
™
 7Ô+ÈˆIØ"Ÿx™x¨	Ó2ˆIØÐrj   c                ó$  — 	 t        |t        «      r|j                  d«      n|}t        |t        «      r|j                  d«      n|}t        |t        t        f«      r|j                  «       n|}|j                  ||«       y# t        $ r Y y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.
            rG  TF)rs   r¬   rI  r-   r+   rï   r˜   r   )r{   r“   r‡   r—   rM  Ú	sig_bytesrï   s          rh   r˜   zOKPAlgorithm.verifyt  s†   € ðÜ3=¸cÄ3Ô3G˜CŸJ™J wÔ/ÈS�	Ü3=¸cÄ3Ô3G˜CŸJ™J wÔ/ÈS�	ô " #Ô(9¼?Ð'KÔLð —N‘NÔ$àð ð
 ×!Ñ! )¨YÔ7ØøÜ#ò Ùðús   ‚B B Â	BÂBc                 ó   — y r€   r�   ©r‡   rœ   s     rh   r�   zOKPAlgorithm.to_jwkŽ  s   € àLOrj   c                 ó   — y r€   r�   rQ  s     rh   r�   zOKPAlgorithm.to_jwk’  s   € àQTrj   c                óF  — t        | t        t        f«      r‚| j                  t        j
                  t        j
                  ¬«      }t        | t        «      rdnd}t        t        |«      «      j                  «       d|dœ}|r|S t        j                  |«      S t        | t        t        f«      ré| j                  t        j
                  t        j
                  t!        «       ¬«      }| j#                  «       j                  t        j
                  t        j
                  ¬«      }t        | t        «      rdnd}t        t        |«      «      j                  «       t        t        |«      «      j                  «       d|dœ}|r|S t        j                  |«      S t%        d«      ‚)	N)ÚencodingÚformatÚEd25519ÚEd448ÚOKP)r.  rÉ   r-  )rT  rU  Úencryption_algorithm)r.  rù   rÉ   r-  rÿ   )rs   r.   r,   Úpublic_bytesr7   ÚRawr:   r   r   rÊ   rË   rÌ   r-   r+   Úprivate_bytesr9   r8   rï   r   )r‡   rœ   r.  r-  rÒ   rù   s         rh   r�   zOKPAlgorithm.to_jwk–  s\  € ä˜#Ô 0´.ÐAÔBØ×$Ñ$Ü%Ÿ\™\Ü'×+Ñ+ð %ó �ô $.¨cÔ3CÔ#D‘iÈ'�ô *¬+°a«.Ó9×@Ñ@ÓBØ Øñ�ñ Ø�JäŸ:™: c›?Ð*ä˜#Ô 1´?ÐCÔDØ×%Ñ%Ü%Ÿ\™\Ü(×,Ñ,Ü)5«ð &ó �ð —N‘NÓ$×1Ñ1Ü%Ÿ\™\Ü'×+Ñ+ð 2ó �ô
 $.¨cÔ3DÔ#E‘iÈ7�ä)¬+°a«.Ó9×@Ñ@ÓBÜ)¬+°a«.Ó9×@Ñ@ÓBØ Øñ	�ñ Ø�JäŸ:™: c›?Ð*ä!Ð"?Ó@Ð@rj   c                óÊ  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      ‚|j                  d«      }|dk7  r|dk7  rt        d|› �«      ‚d	|vrt        d
«      ‚t        |j                  d	«      «      }	 d|vr/|dk(  rt        j                  |«      S t        j                  |«      S t        |j                  d«      «      }|dk(  rt        j                  |«      S t        j                  |«      S # t
        $ r t        d«      d ‚w xY w# t
        $ r}t        d«      |‚d }~ww xY w)NrÎ   rÉ   rX  zNot an Octet Key Pairr-  rV  rW  r*  r.  zOKP should have "x" parameterrù   zInvalid key parameter)rs   r¬   rË   rÏ   rÐ   r…   r   rÑ   r   r.   Úfrom_public_bytesr,   r-   Úfrom_private_bytesr+   )r¢   rÒ   r  r.  rù   Úerrs         rh   r£   zOKPAlgorithm.from_jwkÅ  sZ  € ð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ús5   ‚?D/ Â3E ÃE Ã&3E ÄE Ä/EÅ	E"ÅEÅE"N)rE  r   r¦   r§   )r‡   zAllowedOKPKeys | str | bytesr¦   rG   )r“   rÞ   r‡   z#Ed25519PrivateKey | Ed448PrivateKeyr¦   rx   )r“   rÞ   r‡   rG   r—   rÞ   r¦   r¨   )r‡   rG   rœ   r©   r¦   r   rª   )r‡   rG   rœ   r«   r¦   r¬   )r‡   rG   rœ   r¨   r¦   r­   )r¢   r®   r¦   rG   )r�   r°   r±   r²   ÚALLOWED_OKP_KEY_TYPESrm   rÁ   r�   r”   r˜   r   r´   r�   r£   r�   rj   rh   rf   rf   D  s´   „ ñ	ð 2Ðó	ó	6ð,	Ø"ð	Ø)Lð	àó	ð	Ø"ð	Ø)7ð	Ø>Ið	àó	ð4 
Ø	ÚOó 
ó 
àOà	Ø	ÛTó 
ó 
àTà	ó,	Aó 
ð,	Að\ 
ò 	Hó 
ñ 	Hrj   rf   )r¦   zdict[str, Algorithm])mÚ
__future__r   rß   rÚ   rË   ÚosÚabcr   r   Útypingr   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.rsar/   r0   r1   r2   r3   r4   r5   r6   Ú,cryptography.hazmat.primitives.serializationr7   r8   r9   r:   r;   r<   r=   r  r:  ra  ÚALLOWED_KEY_TYPESÚALLOWED_PRIVATE_KEY_TYPESÚALLOWED_PUBLIC_KEY_TYPESr¨   ÚgetenvÚsysÚversion_inforB   Útyping_extensionsÚ/cryptography.hazmat.primitives.asymmetric.typesrC   rD   rE   r³   rF   rG   rH   rI   rJ   ra   ÚModuleNotFoundErrorÚrequires_cryptographyri   rl   r\   r]   rc   rd   re   rf   r�   rj   rh   Ú<module>r|     sq  ðÞ "ã Û Û Û 	ß #÷	÷ 	ó 	õ (ß '÷
÷ 
õ 
ðißNÝ<Ý5ÝA÷÷ ÷ ÷÷÷	÷ 	ó 	÷÷ ñ ð +¨LÐ9ÐØ3Ð5KÐLÐàØØØð	Ðð 	Ð 4Ñ4Ð7LÑLð ð 	ØØØð	!Ðð 	ØØØð	 Ðñ ™˜Y˜RŸY™Y ~°rÓ:Ô;Ûà×Ñ˜wÒ&Þ(õ 4÷	
ð %*¨-¸Ð*EÑ$Fˆ˜	ÓFØ#(Ø#Ð%;Ð;ñ$
ˆ�yó 	
ð %*ØÐ/°À.ÐPñ%
ˆ˜	ó 	
ð "' ~°}ÀnÐ'TÑ!Uˆ�YÓUà(-ØÐ2Ð4EÀÐVñ)
Ð˜Ió 	
ð (-ØÐ0Ð2BÀNÐRñ(
Ð˜9ó 	
ð €Jò
Ð ó ôDi�ô iôX$�Iô $ô<L=�Iô L=ñ^ ôw�yô wôrP�iô Pôd˜,ô ô>bH�yõ bHðY øð_ ò Ø‚Jðús   ÁDG ÇGÇG