Ë
    ¬â°jÍx  ã                  óê  — 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 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 ej@                  d	k\  rd d
l	m!Z! nd d
l"m!Z! 	 d dl#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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZKmLZL dZMe
r3e=e?z  ZOe2e4z  ZPe:e;z  e7z  e8z  ZQeOePz  eQz  ZRe=e2z  e:z  e7z  ZSe?e4z  e;z  e8z  ZTh d£ZUd&d„ZV G d„ de«      ZW G d„ deW«      ZX G d„ deW«      ZYeMr- G d„ deW«      ZZ G d „ d!eW«      Z[ G d"„ d#eZ«      Z\ G d$„ d%eW«      Z]yy# eN$ r dZMY Œ—w xY w)'é    )ÚannotationsN)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAnyÚClassVarÚ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)é   é   )ÚLiteral)ÚInvalidSignature)Ú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_keyTF>   ÚES256ÚES384ÚES512ÚES521ÚEdDSAÚPS256ÚPS384ÚPS512ÚRS256ÚRS384ÚRS512ÚES256Kc                 ó  — 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        j                  «      t        t        j                  «      t        t        j                  «      t        t        j                  «      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)rG   rH   rI   r?   rJ   r@   rB   rA   rD   rE   rF   rC   )ÚNoneAlgorithmÚHMACAlgorithmÚSHA256ÚSHA384ÚSHA512Ú
has_cryptoÚupdateÚRSAAlgorithmÚECAlgorithmÚRSAPSSAlgorithmÚOKPAlgorithm)Údefault_algorithmss    ú0/usr/lib/python3/dist-packages/jwt/algorithms.pyÚget_default_algorithmsr]   p   sÿ   € ô
 “Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4ñ	Ðö Ø×!Ñ!ä%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü$¤[×%7Ñ%7Ó8Ü%¤k×&8Ñ&8Ó9Ü$¤[×%7Ñ%7Ó8Ü$¤[×%7Ñ%7Ó8Ü$Ü×&Ñ&óô )¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü%›ñô	
ð& Ðó    c                  óÖ   — e Zd Z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y
)Ú	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    c                ó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ÚNotImplementedErrorrU   Ú
isinstanceÚtypeÚ
issubclassr    ÚHashAlgorithmÚHashr   rV   ÚbytesÚfinalizeÚdigest)ÚselfÚbytestrrb   rm   s       r\   Ú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Ð4r^   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© ©rn   Úkeys     r\   Úprepare_keyzAlgorithm.prepare_key­   ó   � r^   c                 ó   — y)zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nrr   ©rn   Úmsgrt   s      r\   ÚsignzAlgorithm.sign´   rv   r^   c                 ó   — y)zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        Nrr   ©rn   ry   rt   Úsigs       r\   ÚverifyzAlgorithm.verify»   rv   r^   c                 ó   — y ©Nrr   ©Úkey_objÚas_dicts     r\   Úto_jwkzAlgorithm.to_jwkÂ   ó   € ð 	r^   c                 ó   — y r€   rr   r�   s     r\   r„   zAlgorithm.to_jwkÈ   r…   r^   c                 ó   — y)z3
        Serializes a given key into a JWK
        Nrr   r�   s     r\   r„   zAlgorithm.to_jwkÎ   rv   r^   c                 ó   — y)zJ
        Deserializes a given key from JWK back into a key object
        Nrr   ©Újwks    r\   Úfrom_jwkzAlgorithm.from_jwkÕ   rv   r^   N)ro   rk   Úreturnrk   )rt   r   rŒ   r   )ry   rk   rt   r   rŒ   rk   )ry   rk   rt   r   r}   rk   rŒ   Úbool)rƒ   úLiteral[True]rŒ   r   ©F)rƒ   úLiteral[False]rŒ   Ústr)rƒ   r�   rŒ   úUnion[JWKDict, str])rŠ   ústr | JWKDictrŒ   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rp   r   ru   rz   r~   r   Ústaticmethodr„   r‹   rr   r^   r\   r`   r`   ’   sÈ   „ ñó5ð, òó ðð òó ðð òó ðð ØØòó ó ó ðð ØØóó ó ó ðð Øóó ó ðð
 Øòó ó ñr^   r`   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)rP   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c                ó.   — |dk(  rd }|�t        d«      ‚|S )NÚ z*When alg = "none", key value must be None.r   rs   s     r\   ru   zNoneAlgorithm.prepare_keyã   s$   € Ø�"Š9ØˆCàˆ?Ü!Ð"NÓOÐOàˆ
r^   c                 ó   — y)Nr^   rr   rx   s      r\   rz   zNoneAlgorithm.signì   s   € Ør^   c                 ó   — y)NFrr   r|   s       r\   r~   zNoneAlgorithm.verifyï   s   € Ør^   c                ó   — t        «       ‚r€   ©re   r�   s     r\   r„   zNoneAlgorithm.to_jwkò   ó   € ä!Ó#Ð#r^   c                ó   — t        «       ‚r€   rŸ   r‰   s    r\   r‹   zNoneAlgorithm.from_jwkö   r    r^   N)rt   z
str | NonerŒ   ÚNone)ry   rk   rt   r¢   rŒ   rk   )ry   rk   rt   r¢   r}   rk   rŒ   r�   r�   )r‚   r   rƒ   r�   rŒ   r	   )rŠ   r“   rŒ   r	   )
r”   r•   r–   r—   ru   rz   r~   r˜   r„   r‹   rr   r^   r\   rP   rP   Ý   s>   „ ñó
óóð ó$ó ð$ð ò$ó ñ$r^   rP   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y)rQ   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]rR   rS   rT   c                ó   — || _         y r€   ©rb   ©rn   rb   s     r\   Ú__init__zHMACAlgorithm.__init__  s	   € Ø ˆ�r^   c                ó^  — t        |«      }t        |«      dk(  rt        d«      ‚t        |«      st	        |«      rt        d«      ‚|j                  «       }|j                  d«      r5	 t        j                  |«      }t        |t        «      rd|v rt        d«      ‚|S # t        $ r d }Y Œ.w xY w)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ÚloadsÚ
ValueErrorrf   Údict)rn   rt   Ú	key_bytesÚstrippedÚjwk_objs        r\   ru   zHMACAlgorithm.prepare_key  s¹   € Ü Ó$ˆ	äˆy‹>˜QÒÜ!Ð"?Ó@Ð@ä˜Ô#¤z°)Ô'<Ü!ð9óð ð ×#Ñ#Ó%ˆØ×Ñ˜tÔ$ðÜŸ*™* YÓ/�ô ˜'¤4Ô(¨U°gÑ-=Ü%ð<óð ð Ðøô ò Ø’ðús   Á(B ÂB,Â+B,c                 ó   — y r€   rr   r�   s     r\   r„   zHMACAlgorithm.to_jwk)  ó   € ð 	r^   c                 ó   — y r€   rr   r�   s     r\   r„   zHMACAlgorithm.to_jwk.  r¶   r^   c                ó~   — t        t        | «      «      j                  «       ddœ}|r|S t        j                  |«      S )NÚoct)Úkrª   )r   r   Údecoder®   Údumps)r‚   rƒ   rŠ   s      r\   r„   zHMACAlgorithm.to_jwk3  s<   € ô "¤+¨gÓ"6Ó7×>Ñ>Ó@Øñ
ˆñ
 ØˆJä—:‘:˜c“?Ð"r^   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«      ‚w xY w)NúKey is not valid JSONrª   r¹   zNot an HMAC keyrº   )	rf   r‘   r®   r¯   r±   r°   r   Úgetr   )rŠ   Úobjs     r\   r‹   zHMACAlgorithm.from_jwk?  s}   € ð	;Ü˜#œsÔ#Ü#Ÿz™z¨#›‘Ü˜C¤Ô&Ø‘ä Ð ð �7‰7�5‹>˜UÒ"Ü!Ð"3Ó4Ð4ä  C¡Ó)Ð)øô ò 	;Ü!Ð"9Ó:Ð:ð	;ús   ‚?A. Á.Bc                ó`   — t        j                  ||| j                  «      j                  «       S r€   )ÚhmacÚnewrb   rm   rx   s      r\   rz   zHMACAlgorithm.signP  s"   € Ü�x‰x˜˜S $§-¡-Ó0×7Ñ7Ó9Ð9r^   c                óN   — t        j                  || j                  ||«      «      S r€   )rÂ   Úcompare_digestrz   r|   s       r\   r~   zHMACAlgorithm.verifyS  s    € Ü×"Ñ" 3¨¯	©	°#°sÓ(;Ó<Ð<r^   N)rb   r   rŒ   r¢   )rt   ústr | bytesrŒ   rk   )r‚   rÆ   rƒ   rŽ   rŒ   r   r�   )r‚   rÆ   rƒ   r�   rŒ   r‘   )r‚   rÆ   rƒ   r�   rŒ   r’   )rŠ   r“   rŒ   rk   )ry   rk   rt   rk   rŒ   rk   )ry   rk   rt   rk   r}   rk   rŒ   r�   )r”   r•   r–   r—   ÚhashlibÚsha256rR   Ú__annotations__Úsha384rS   Úsha512rT   r§   ru   r   r˜   r„   r‹   rz   r~   rr   r^   r\   rQ   rQ   û   s«   … ñð
 %,§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2ó!óðB Øòó ó ðð Øóó ó ðð ó	#ó ð	#ð ò*ó ð*ó :ô=r^   rQ   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y)rW   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        ú$ClassVar[type[hashes.HashAlgorithm]]rR   rS   rT   c                ó   — || _         y r€   r¥   r¦   s     r\   r§   zRSAAlgorithm.__init__c  ó	   € Ø$ˆD�Mr^   c                óf  — t        |t        t        f«      r|S t        |t        t        f«      st        d«      ‚t        |«      }	 |j                  d«      rt        t        t        |«      «      S t        t        t        |d ¬«      «      S # t        $ r t        t        t        |«      «      cY S w xY w)NúExpecting a PEM-formatted key.s   ssh-rsa©Úpassword)rf   r0   r2   rk   r‘   Ú	TypeErrorr   r­   r   r>   r<   r°   r=   )rn   rt   r²   s      r\   ru   zRSAAlgorithm.prepare_keyf  s¢   € Ü˜#¤¬|Ð<Ô=Ø�
ä˜c¤E¬3 <Ô0ÜÐ @ÓAÐAä# CÓ(ˆIðJØ×'Ñ'¨
Ô3Ü¤Ô.AÀ)Ó.LÓMÐMäÜ%Ô';¸IÐPTÔ'Uóð øô ò JÜœLÔ*=¸iÓ*HÓIÒIðJús   Á)B Á0B Â"B0Â/B0c                 ó   — y r€   rr   r�   s     r\   r„   zRSAAlgorithm.to_jwky  ó   € ð r^   c                 ó   — y r€   rr   r�   s     r\   r„   zRSAAlgorithm.to_jwk~  rÖ   r^   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ÚRSArz   )
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       r\   r„   zRSAAlgorithm.to_jwkƒ  sd  € ð *.ˆ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 #“Ð&r^   c                ó4  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      ‚d|v �rSd|v �rNd|v �rId|v rt        d	«      ‚g d
¢}|D �cg c]  }||v ‘Œ }}t        |«      }|rt        |«      st        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«      ‚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ä   )rf   r‘   r®   r¯   r±   r°   r   r¿   ÚanyÚallr3   r   r1   r7   rÜ   rÝ   r4   r5   r6   Úprivate_keyÚ
public_key)rŠ   rÀ   Úother_propsÚpropÚprops_foundÚany_props_foundræ   rê   rÞ   rß   rà   s              r\   r‹   zRSAAlgorithm.from_jwk¬  s0  € ð?Ü˜c¤3Ô'ÜŸ*™* S›/‘CÜ ¤TÔ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ò&Ü%Ð&6Ó7Ð7à�cŠz˜c Sšj¨S°CªZà˜C‘<Ü)ØOóð ò ;�Ø7BÖC¨t˜t sš{ÐC�Ð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øô{ ò ?Ü%Ð&=Ó>Ð>ð?üò Ds   ‚?G= ÂHÇ=Hc                óh   — |j                  |t        j                  «       | j                  «       «      S r€   )rz   r!   ÚPKCS1v15rb   rx   s      r\   rz   zRSAAlgorithm.signô  s$   € Ø—8‘8˜C¤×!1Ñ!1Ó!3°T·]±]³_ÓEÐEr^   c                óŒ   — 	 |j                  ||t        j                  «       | j                  «       «       y# t        $ r Y yw xY w)NTF)r~   r!   rö   rb   r   r|   s       r\   r~   zRSAAlgorithm.verify÷  s=   € ðØ—
‘
˜3 ¤W×%5Ñ%5Ó%7¸¿¹»ÔIØøÜ#ò Ùðús   ‚47 ·	AÁAN©rb   ztype[hashes.HashAlgorithm]rŒ   r¢   )rt   zAllowedRSAKeys | str | bytesrŒ   ÚAllowedRSAKeys)r‚   rù   rƒ   rŽ   rŒ   r   r�   )r‚   rù   rƒ   r�   rŒ   r‘   )r‚   rù   rƒ   r�   rŒ   r’   )rŠ   r“   rŒ   rù   ©ry   rk   rt   r0   rŒ   rk   ©ry   rk   rt   r2   r}   rk   rŒ   r�   )r”   r•   r–   r—   r    rR   rÉ   rS   rT   r§   ru   r   r˜   r„   r‹   rz   r~   rr   r^   r\   rW   rW   Y  sÍ   … ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDó	%ó	Jð& 
Ø	ò	ó 
ó 
ð	ð 
Ø	ó	ó 
ó 
ð	ð 
à5:ð&	'Ø#ð&	'Ø.2ð&	'à ò&	'ó 
ð&	'ðP 
òE	Eó 
ðE	EóN	Fô	r^   rW   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
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)rX   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        rÍ   rR   rS   rT   c                ó   — || _         y r€   r¥   r¦   s     r\   r§   zECAlgorithm.__init__  rÏ   r^   c                óZ  — t        |t        t        f«      r|S t        |t        t        f«      st        d«      ‚t        |«      }	 |j                  d«      rt        |«      }nt        |«      }t        |t        t        f«      st        d«      ‚|S # t        $ r t        |d ¬«      }Y Œ;w xY w)NrÑ   s   ecdsa-sha2-rÒ   zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms)rf   r(   r*   rk   r‘   rÔ   r   r­   r>   r=   r°   r<   r   )rn   rt   r²   Ú
crypto_keys       r\   ru   zECAlgorithm.prepare_key  s³   € Ü˜#Ô 7Ô9OÐPÔQØ�
ä˜c¤E¬3 <Ô0ÜÐ @ÓAÐAä# CÓ(ˆIð
LØ×'Ñ'¨Ô7Ü!4°YÓ!?‘Jä!4°YÓ!?�Jô
 ØÔ4Ô6LÐMôô &Øyóð ð Ðøô ò LÜ1°)ÀdÔK’
ðLús   Á(B ÂB*Â)B*c                ó€   — |j                  |t        | j                  «       «      «      }t        ||j                  «      S r€   )rz   r"   rb   r   Úcurve)rn   ry   rt   Úder_sigs       r\   rz   zECAlgorithm.sign)  s.   € Ø—h‘h˜s¤E¨$¯-©-«/Ó$:Ó;ˆGä'¨°·±Ó;Ð;r^   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°   rf   r(   rð   r~   r"   rb   r   )rn   ry   rt   r}   r  rð   s         r\   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€   rr   r�   s     r\   r„   zECAlgorithm.to_jwk?  rÖ   r^   c                 ó   — y r€   rr   r�   s     r\   r„   zECAlgorithm.to_jwkD  rÖ   r^   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                  «       t        |j                  «      j                  «       dœ}t        | t        «      r4t        | j                  «       j                   «      j                  «       |d	<   |r|S t#        j$                  |«      S )
Nrä   úP-256úP-384úP-521Ú	secp256k1úInvalid curve: ÚEC)rª   ÚcrvÚxÚyrÞ   )rf   r(   rð   ræ   r*   r   r  r$   r%   r&   r#   r   r  r»   r  rÙ   Úprivate_valuer®   r¼   )r‚   rƒ   ræ   r  rÀ   s        r\   r„   zECAlgorithm.to_jwkI  s9  € ô ˜'Ô#:Ô;Ø!(×!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ð ØÜ& ~×'7Ñ'7Ó8×?Ñ?ÓAÜ& ~×'7Ñ'7Ó8×?Ñ?ÓAñ	#ˆCô ˜'Ô#:Ô;Ü,Ø×+Ñ+Ó-×;Ñ;óç‘&“(ð �C‘ñ Ø�
ä—z‘z #“Ð&r^   c                óh  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      ‚d|vsd|vrt        d«      ‚t        |j                  d«      «      }t        |j                  d«      «      }|j                  d«      }|dk(  r@t        |«      t        |«      cxk(  rd	k(  rn t        d
«      ‚t        «       }nèt        d
«      ‚|dk(  r@t        |«      t        |«      cxk(  rdk(  rn t        d«      ‚t        «       }n£t        d«      ‚|dk(  r@t        |«      t        |«      cxk(  rdk(  rn t        d«      ‚t        «       }n^t        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«      ‚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 {})rf   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           r\   r‹   zECAlgorithm.from_jwkp  s~  € ð?Ü˜c¤3Ô'ÜŸ*™* S›/‘CÜ ¤TÔ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ò%Ü%Ð&AÓBÐBà˜#‰~ ¨C¡Ü%Ð&AÓBÐBä  §¡¨£Ó.ˆAÜ  §¡¨£Ó.ˆAà—G‘G˜E“NˆEð ˜ÒÜ�q“6œS ›VÔ) rÔ)ô *Ð*UÓVÐVô !*£‘Iä)Ð*UÓVÐVØ˜'Ò!Ü�q“6œS ›VÔ) rÔ)ô *Ð*UÓVÐVô !*£‘Iä)Ð*UÓVÐVØ˜'Ò!Ü�q“6œS ›VÔ) rÔ)ô *Ð*UÓVÐVô !*£‘Iä)Ð*UÓVÐVØ˜+Ò%Ü�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ðøôo ò ?Ü%Ð&=Ó>Ð>ð?ús   ‚?J ÊJ1Nrø   )rt   zAllowedECKeys | str | bytesrŒ   ÚAllowedECKeys)ry   rk   rt   r(   rŒ   rk   )ry   rk   rt   z'AllowedECKeys'r}   rk   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    rR   rÉ   rS   rT   r§   ru   rz   r~   r   r˜   r„   r‹   rr   r^   r\   rX   rX   þ  sÈ   … ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDó	%ó	ó<	<ó
	ð" 
Ø	ò	ó 
ó 
ð	ð 
Ø	ó	ó 
ó 
ð	ð 
à49ð$	'Ø"ð$	'Ø-1ð$	'à ò$	'ó 
ð$	'ðL 
òA	ó 
ñA	r^   rX   c                  ó    — e Zd ZdZdd„Zdd„Zy)rY   zA
        Performs a signature using RSASSA-PSS with MGF1
        c           	     óà   — |j                  |t        j                  t        j                  | j	                  «       «      | j	                  «       j
                  ¬«      | j	                  «       «      S )N©ÚmgfÚsalt_length)rz   r!   ÚPSSÚMGF1rb   Údigest_sizerx   s      r\   rz   zRSAPSSAlgorithm.sign¹  sN   € Ø—8‘8ØÜ—‘ÜŸ™ T§]¡]£_Ó5Ø $§¡£× ;Ñ ;ôð —‘“óð r^   c           
     ó  — 	 |j                  ||t        j                  t        j                  | j	                  «       «      | j	                  «       j
                  ¬«      | j	                  «       «       y# t        $ r Y yw xY w)Nr  TF)r~   r!   r   r!  rb   r"  r   r|   s       r\   r~   zRSAPSSAlgorithm.verifyÃ  sh   € ðØ—
‘
ØØÜ—K‘KÜ#ŸL™L¨¯©«Ó9Ø$(§M¡M£O×$?Ñ$?ôð —M‘M“Oôð øÜ#ò Ùðús   ‚A0A3 Á3	A?Á>A?Nrú   rû   )r”   r•   r–   r—   rz   r~   rr   r^   r\   rY   rY   ´  s   „ ñ	ó	ô	r^   rY   c                  ó¬   — e Zd Z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
)rZ   zŽ
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        c                 ó   — y r€   rr   )rn   Úkwargss     r\   r§   zOKPAlgorithm.__init__Ù  s   € Ør^   c                ó~  — t        |t        t        f«      r{t        |t        «      r|j                  d«      n|}t        |t        «      r|j	                  d«      n|}d|v rt        |«      }n%d|v rt        |d ¬«      }n|dd dk(  rt        |«      }t        |t        t        t        t        f«      st        d«      ‚|S )	Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATErÒ   r   é   zssh-zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms)rf   rk   r‘   r»   Úencoder=   r<   r>   r.   r/   r,   r-   r   )rn   rt   Úkey_strr²   s       r\   ru   zOKPAlgorithm.prepare_keyÜ  s³   € Ü˜#¤¤s˜|Ô,Ü1;¸CÄÔ1G˜#Ÿ*™* WÔ-ÈS�Ü3=¸cÄ3Ô3G˜CŸJ™J wÔ/ÈS�	à&¨'Ñ1Ü-¨iÓ8‘CØ)¨WÑ4Ü.¨yÀ4ÔH‘CØ˜Q˜q�\ VÒ+Ü-¨iÓ8�Cô ØÜ"Ô$4´oÄ~ÐVôô &Øyóð ð ˆJr^   c                ój   — 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
            r(  )rf   r‘   r*  rz   )rn   ry   rt   Ú	msg_bytess       r\   rz   zOKPAlgorithm.signó  s,   € ô 0:¸#¼sÔ/C˜Ÿ
™
 7Ô+ÈˆIØ—8‘8˜IÓ&Ð&r^   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.
            r(  TF)rf   r‘   r*  r.   r,   rð   r~   r   )rn   ry   rt   r}   r-  Ú	sig_bytesrð   s          r\   r~   zOKPAlgorithm.verify   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€   rr   ©rt   rƒ   s     r\   r„   zOKPAlgorithm.to_jwk  rÖ   r^   c                 ó   — y r€   rr   r1  s     r\   r„   zOKPAlgorithm.to_jwk  rÖ   r^   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  )r4  r5  Úencryption_algorithm)r  rÞ   rª   r  rä   )rf   r/   r-   Úpublic_bytesr8   ÚRawr;   r   r   r»   r®   r¼   r.   r,   Úprivate_bytesr:   r9   rð   r   )rt   rƒ   r  r  rÀ   rÞ   s         r\   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›?Ð*ä!Ð"?Ó@Ð@r^   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«      ‚w xY w# t
        $ r}t        d«      |‚d }~ww xY w)Nr¾   rª   r8  zNot an Octet Key Pairr  r6  r7  r  r  zOKP should have "x" parameterrÞ   zInvalid key parameter)rf   r‘   r®   r¯   r±   r°   r   r¿   r   r/   Úfrom_public_bytesr-   r.   Úfrom_private_bytesr,   )rŠ   rÀ   r  r  rÞ   Úerrs         r\   r‹   zOKPAlgorithm.from_jwkS  sU  € ð?Ü˜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¸!Ó<Ð<øô- ò ?Ü%Ð&=Ó>Ð>ð?ûô. ò HÜ%Ð&=Ó>ÀCÐGûðHús5   ‚?D/ Â3E ÃE Ã&3E ÄE Ä/EÅ	E!ÅEÅE!N)r&  r   rŒ   r¢   )rt   zAllowedOKPKeys | str | bytesrŒ   ÚAllowedOKPKeys)ry   rÆ   rt   z#Ed25519PrivateKey | Ed448PrivateKeyrŒ   rk   )ry   rÆ   rt   rA  r}   rÆ   rŒ   r�   )rt   rA  rƒ   rŽ   rŒ   r   r�   )rt   rA  rƒ   r�   rŒ   r‘   )rt   rA  rƒ   r�   rŒ   r’   )rŠ   r“   rŒ   rA  )r”   r•   r–   r—   r§   ru   rz   r~   r   r˜   r„   r‹   rr   r^   r\   rZ   rZ   Ò  s¸   „ ñ	ó	ó	ð.	'Ø"ð	'Ø)Lð	'àó	'ð	Ø"ð	Ø)7ð	Ø>Ið	àó	ð4 
Ø	ò	ó 
ó 
ð	ð 
Ø	ó	ó 
ó 
ð	ð 
ó,	Aó 
ð,	Að\ 
ò 	Hó 
ñ 	Hr^   rZ   )rŒ   zdict[str, Algorithm])^Ú
__future__r   rÇ   rÂ   r®   ÚsysÚabcr   r   Útypingr   r   r   r	   r
   r   r   Ú
exceptionsr   Útypesr   r   Úutilsr   r   r   r   r   r   r   r   r   Úversion_infor   Útyping_extensionsÚcryptography.exceptionsr   Ú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>   rU   ÚModuleNotFoundErrorrù   r  rA  ÚAllowedKeysÚAllowedPrivateKeysÚAllowedPublicKeysÚrequires_cryptographyr]   r`   rP   rQ   rW   rX   rY   rZ   rr   r^   r\   ú<module>rY     s¥  ðÝ "ã Û Û Û 
ß #ß P× PÑ På 'ß '÷
÷ 
õ 
ð ×Ñ�vÒÞå)ð/Ý8Ý<Ý5ÝA÷÷ ÷ ÷÷÷	÷ 	ó 	÷÷ ñ ð €Jñ
 à" \Ñ1€NØ+Ð.DÑD€MàÐ,Ñ,¨Ñ>ÀÑOð ð ! =Ñ0°>ÑA€KàÐ/Ñ/Ð2CÑCÀoÑUð ð 	Ð-Ñ-Ð0@Ñ@À>ÑQð ò
Ð ó ôDH�ô HôV$�Iô $ô<Y=�Iô Y=ñx ôc�yô côJt�iô tôl˜,ô ô<bH�yõ bHðw øðW ò Ø‚Jðús   Á2A(E( Å(E2Å1E2