ó
    tÇðiÉv  ã                  óÆ  • S SK J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  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+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  S SK3J4r4J5r5  S SK6J7r7J8r8  S SK9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  S SKBJCrCJDrDJErEJFrFJGrGJHrHJIrI  SrJ\	(       a3  \:\<-  rL\/\1-  rM\7\8-  \4-  \5-  rN\L\M-  \N-  rO\:\/-  \7-  \4-  rP\<\1-  \8-  \5-  rQ1 SkrRS$S jrS " S S\5      rT " S S\T5      rU " S S\T5      rV\J(       a-   " S S\T5      rW " S S\T5      rX " S  S!\W5      rY " S" S#\T5      rZgg! \K a    SrJ N£f = f)%é    )ÚannotationsN)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAnyÚClassVarÚLiteralÚNoReturnÚ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_keyTF>   Ú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)rE   rF   rG   r=   rH   r>   r@   r?   rB   rC   rD   rA   )Ú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[   i   s  € ô
 “Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4ñ	Ð÷ ƒzØ×!Ñ!ä%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü%¤l×&9Ñ&9Ó:Ü$¤[×%7Ñ%7Ó8Ü%¤k×&8Ñ&8Ó9Ü$¤[×%7Ñ%7Ó8Ü$¤[×%7Ñ%7Ó8Ü$Ü×&Ñ&óô )¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü(¬×)?Ñ)?Ó@Ü%›ñô	
ð& Ðó    c                  óò   • \ rS rSrS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rg)Ú	Algorithmé‹   z@
The interface for an algorithm used to sign and verify tokens.
c                ó‚  • [        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ÚNotImplementedErrorrS   Ú
isinstanceÚtypeÚ
issubclassr   ÚHashAlgorithmÚHashr   rT   ÚbytesÚfinalizeÚdigest)ÚselfÚbytestrra   rl   s       rZ   Ú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Ð4r\   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© ©rm   Úkeys     rZ   Úprepare_keyÚAlgorithm.prepare_key¦   ó   � r\   c                ó   • g)zV
Returns a digital signature for the specified message
using the specified key value.
Nrr   ©rm   Úmsgrt   s      rZ   ÚsignÚAlgorithm.sign­   rw   r\   c                ó   • g)zb
Verifies that the specified digital signature is valid
for the specified message and key values.
Nrr   ©rm   rz   rt   Úsigs       rZ   ÚverifyÚAlgorithm.verify´   rw   r\   c                ó   • g ©Nrr   ©Úkey_objÚas_dicts     rZ   Úto_jwkÚAlgorithm.to_jwk»   s   € ð =@r\   c                ó   • g rƒ   rr   r„   s     rZ   r‡   rˆ   À   s	   € ð BEr\   c                ó   • g)z#
Serializes a given key into a JWK
Nrr   r„   s     rZ   r‡   rˆ   Å   rw   r\   c                ó   • g)z:
Deserializes a given key from JWK back into a key object
Nrr   ©Újwks    rZ   Úfrom_jwkÚAlgorithm.from_jwkÌ   rw   r\   rr   N)rn   rj   Úreturnrj   )rt   r   r�   r   )rz   rj   rt   r   r�   rj   )rz   rj   rt   r   r   rj   r�   Úbool)r†   úLiteral[True]r�   r   ©F)r†   úLiteral[False]r�   Ústr)r†   r‘   r�   úJWKDict | str)r�   ústr | JWKDictr�   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ro   r   ru   r{   r€   r   Ústaticmethodr‡   rŽ   Ú__static_attributes__rr   r\   rZ   r^   r^   ‹   sÂ   † ñô5ð, óó ðð óó ðð óó ðð ØØÛ?ó ó ó ð @àØØÝDó ó ó ð EàØõó ó ðð
 Øóó ó ór\   r^   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	)rN   éÔ   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$ )NÚ z*When alg = "none", key value must be None.r   rs   s     rZ   ru   ÚNoneAlgorithm.prepare_keyÚ   s$   € Ø�"‹9ØˆCà‰?Ü!Ð"NÓOÐOàˆ
r\   c                ó   • g)Nr\   rr   ry   s      rZ   r{   ÚNoneAlgorithm.signã   s   € Ør\   c                ó   • g)NFrr   r~   s       rZ   r€   ÚNoneAlgorithm.verifyæ   s   € Ør\   c                ó   • [        5       erƒ   ©rd   r„   s     rZ   r‡   ÚNoneAlgorithm.to_jwké   ó   € ä!Ó#Ð#r\   c                ó   • [        5       erƒ   r©   rŒ   s    rZ   rŽ   ÚNoneAlgorithm.from_jwkí   r«   r\   rr   N)rt   z
str | Noner�   ÚNone)rz   rj   rt   r®   r�   rj   )rz   rj   rt   r®   r   rj   r�   r‘   r“   )r…   r   r†   r‘   r�   r
   )r�   r—   r�   r
   )r˜   r™   rš   r›   rœ   ru   r{   r€   r�   r‡   rŽ   rž   rr   r\   rZ   rN   rN   Ô   s>   † ñô
ôôð õ$ó ð$ð ó$ó ó$r\   rN   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rg)rO   éò   zZ
Performs signing and verification operations using HMAC
and the specified hash function.
zClassVar[HashlibHash]rP   rQ   rR   c                ó   • Xl         g rƒ   ©ra   ©rm   ra   s     rZ   Ú__init__ÚHMACAlgorithm.__init__ü   s   € Ø �r\   c                ór   • [        U5      n[        U5      (       d  [        U5      (       a  [        S5      eU$ )NzdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   r   r   r   ©rm   rt   Ú	key_bytess      rZ   ru   ÚHMACAlgorithm.prepare_keyÿ   s;   € Ü Ó$ˆ	ä˜×#Ñ#¤z°)×'<Ñ'<Ü!ð9óð ð
 Ðr\   c                ó   • g rƒ   rr   r„   s     rZ   r‡   ÚHMACAlgorithm.to_jwk
  ó   € ð r\   c                ó   • g rƒ   rr   r„   s     rZ   r‡   r»     s   € ð r\   c                óŠ   • [        [        U 5      5      R                  5       SS.nU(       a  U$ [        R                  " U5      $ )NÚoct)ÚkÚkty)r   r   ÚdecodeÚjsonÚdumps)r…   r†   r�   s      rZ   r‡   r»     s<   € ô "¤+¨gÓ"6Ó7×>Ñ>Ó@Øñ
ˆö
 ØˆJä—:’:˜c“?Ð"r\   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À   )	re   r•   rÃ   ÚloadsÚdictÚ
ValueErrorr   Úgetr   )r�   Úobjs     rZ   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                ó`   • [         R                  " X!U R                  5      R                  5       $ rƒ   )ÚhmacÚnewra   rl   ry   s      rZ   r{   ÚHMACAlgorithm.sign3  s    € Ü�xŠx˜ $§-¡-Ó0×7Ñ7Ó9Ð9r\   c                óL   • [         R                  " X0R                  X5      5      $ rƒ   )rÎ   Úcompare_digestr{   r~   s       rZ   r€   ÚHMACAlgorithm.verify6  s   € Ü×"Ò" 3¯	©	°#Ó(;Ó<Ð<r\   r²   N)ra   r   r�   r®   )rt   ústr | bytesr�   rj   )r…   rÔ   r†   r’   r�   r   r“   )r…   rÔ   r†   r”   r�   r•   )r…   rÔ   r†   r‘   r�   r–   )r�   r—   r�   rj   )rz   rj   rt   rj   r�   rj   )rz   rj   rt   rj   r   rj   r�   r‘   )r˜   r™   rš   r›   rœ   ÚhashlibÚsha256rP   Ú__annotations__Úsha384rQ   Úsha512rR   r´   ru   r   r�   r‡   rŽ   r{   r€   rž   rr   r\   rZ   rO   rO   ò   sÝ   ‡ ñð
 %,§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2ô!ô	ð ØðØðØ'4ðà	óó ó ðð Øà8=ðØðØ'5ðà	ôó ó ðð õ	#ó ð	#ð ó*ó ð*ô :÷=r\   rO   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rg)rU   i<  zf
Performs signing and verification operations using
RSASSA-PKCS-v1_5 and the specified hash function.
ú$ClassVar[type[hashes.HashAlgorithm]]rP   rQ   rR   c                ó   • Xl         g rƒ   r²   r³   s     rZ   r´   ÚRSAAlgorithm.__init__F  ó   € Ø$�Mr\   c                óÂ  • [        U[        [        45      (       a  U$ [        U[        [        45      (       d  [        S5      e[        U5      n UR                  S5      (       a  [        [        [        U5      5      $ [        [        [        US S95      $ ! [         a=     [        [        [        U5      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.)re   r.   r0   rj   r•   Ú	TypeErrorr   Ú
startswithr   r<   r:   rÉ   r;   r   r   r·   s      rZ   ru   ÚRSAAlgorithm.prepare_keyI  sÕ   € Ü˜#¤¬|Ð<×=Ñ=Ø�
ä˜c¤E¬3 <×0Ñ0ÜÐ @ÓAÐAä# CÓ(ˆIð Ø×'Ñ'¨
×3Ñ3Ü¤Ô.AÀ)Ó.LÓMÐMäÜ%Ô';¸IÐPTÑ'Uóð øô ó  ð Ü¤Ô.AÀ)Ó.LÓMÒMøÜ"Ô$8Ð9ó  Ü)ØBóàð ð úð ús*   Á.B Á?B Â
CÂ"B=Â:CÂ=CÃCc                ó   • g rƒ   rr   r„   s     rZ   r‡   ÚRSAAlgorithm.to_jwka  ó   € ð r\   c                ó   • g rƒ   rr   r„   s     rZ   r‡   rç   g  r¼   r\   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       rZ   r‡   rç   m  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 #“Ð&r\   c                óz  •  [        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aa  SU;   GaZ  SU;   GaS  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ö   )re   r•   rÃ   rÇ   rÈ   rÉ   r   rÊ   ÚanyÚallr1   r   r/   r5   rî   rï   r2   r3   r4   Úprivate_keyÚ
public_key)r�   rË   Úother_propsÚpropÚprops_foundÚany_props_foundrø   rü   rð   rñ   rò   s              rZ   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 ÂH8ÈH5c                ój   • UR                  U[        R                  " 5       U R                  5       5      $ rƒ   )r{   r   ÚPKCS1v15ra   ry   s      rZ   r{   ÚRSAAlgorithm.signÜ  s$   € Ø—8‘8˜C¤×!1Ò!1Ó!3°T·]±]³_ÓEÐEr\   c                óŽ   •  UR                  X1[        R                  " 5       U R                  5       5        g! [         a     gf = f)NTF)r€   r   r	  ra   r   r~   s       rZ   r€   ÚRSAAlgorithm.verifyß  s;   € ðØ—
‘
˜3¤W×%5Ò%5Ó%7¸¿¹»ÔIØøÜ#ó Ùðús   ‚47 ·
AÁAr²   N©ra   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  ©rz   rj   rt   r.   r�   rj   ©rz   rj   rt   r0   r   rj   r�   r‘   )r˜   r™   rš   r›   rœ   r   rP   r×   rQ   rR   r´   ru   r   r�   r‡   rŽ   r{   r€   rž   rr   r\   rZ   rU   rU   <  sä   ‡ ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDô	%ô	 ð0 
Ø	ð	Ø#ð	Ø.;ð	àó	ó 
ó 
ð	ð 
Ø	à?Dð	Ø#ð	Ø.<ð	àô	ó 
ó 
ð	ð 
õ$	'ó 
ð$	'ðL 
óE	Eó 
ðE	EôN	F÷	r\   rU   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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)rV   iæ  zZ
Performs signing and verification operations using
ECDSA and the specified hash function
rÛ   rP   rQ   rR   c                ó   • Xl         g rƒ   r²   r³   s     rZ   r´   ÚECAlgorithm.__init__ð  rÞ   r\   c                ó‚  • [        U[        [        45      (       a  U$ [        U[        [        45      (       d  [        S5      e[        U5      n UR                  S5      (       a  [        U5      nO[        U5      n [        U[        [        45      (       d  [        S5      S eU$ ! [         a    [        US S9n N?f = f)Nrà   s   ecdsa-sha2-rá   zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms)re   r&   r(   rj   r•   rã   r   rä   r<   r;   rÉ   r:   r   )rm   rt   r¸   Ú
crypto_keys       rZ   ru   ÚECAlgorithm.prepare_keyó  sÄ   € Ü˜#Ô 7Ô9OÐP×QÑQØ�
ä˜c¤E¬3 <×0Ñ0ÜÐ @ÓAÐAä# CÓ(ˆIð
LØ×'Ñ'¨×7Ñ7Ü!4°YÓ!?‘Jä!4°YÓ!?‘Jô
 ØÔ4Ô6LÐM÷ñ ô &Øyóàðð Ðøô ó LÜ1°)ÀdÑK’
ðLús   Á!B' Á2B' Â'B>Â=B>c                ó~   • UR                  U[        U R                  5       5      5      n[        X2R                  5      $ rƒ   )r{   r    ra   r   Úcurve)rm   rz   rt   Úder_sigs       rZ   r{   ÚECAlgorithm.sign  s,   € Ø—h‘h˜s¤E¨$¯-©-«/Ó$:Ó;ˆGä'¨·±Ó;Ð;r\   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   r  rÉ   re   r&   r  r€   r    ra   r   )rm   rz   rt   r   r  r  s         rZ   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ƒ   rr   r„   s     rZ   r‡   ÚECAlgorithm.to_jwk'  rè   r\   c                ó   • g rƒ   rr   r„   s     rZ   r‡   r  -  r¼   r\   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ð   )re   r&   r  rø   r(   r   r  r"   r#   r$   r!   r   r)  Úkey_sizerÂ   r*  rë   Úprivate_valuerÃ   rÄ   )r…   r†   rø   r(  rË   s        rZ   r‡   r  3  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 #“Ð&r\   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Á   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 {})re   r•   rÃ   rÇ   rÈ   rÉ   r   rÊ   r   Úlenr"   r#   r$   r!   r)   ÚintÚ
from_bytesr  r'   r  )r�   rË   r)  r*  r  Ú	curve_objrø   rð   s           rZ   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²   Nr  )rt   zAllowedECKeys | str | bytesr�   ÚAllowedECKeys)rz   rj   rt   r&   r�   rj   )rz   rj   rt   r8  r   rj   r�   r‘   )r…   r8  r†   r’   r�   r   r“   )r…   r8  r†   r”   r�   r•   )r…   r8  r†   r‘   r�   r–   )r�   r—   r�   r8  )r˜   r™   rš   r›   rœ   r   rP   r×   rQ   rR   r´   ru   r{   r€   r   r�   r‡   rŽ   rž   rr   r\   rZ   rV   rV   æ  sà   ‡ ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDô	%ô	ô<	<ô
	ð" 
Ø	ð	Ø"ð	Ø-:ð	àó	ó 
ó 
ð	ð 
Ø	à>Cð	Ø"ð	Ø-;ð	àô	ó 
ó 
ð	ð 
õ)	'ó 
ð)	'ðV 
óG	ó 
óG	r\   rV   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	rW   i©  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©ÚmgfÚsalt_length)r{   r   ÚPSSÚMGF1ra   Údigest_sizery   s      rZ   r{   ÚRSAPSSAlgorithm.sign®  sN   € Ø—8‘8ØÜ—’ÜŸš T§]¡]£_Ó5Ø $§¡£× ;Ñ ;ñð —‘“óð r\   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)Nr;  TF)r€   r   r>  r?  ra   r@  r   r~   s       rZ   r€   ÚRSAPSSAlgorithm.verify¸  sh   € ðØ—
‘
ØØÜ—K’KÜ#ŸLšL¨¯©«Ó9Ø$(§M¡M£O×$?Ñ$?ñð —M‘M“Oôð øÜ#ó Ùðús   ‚A/A2 Á2
A?Á>A?rr   Nr  r  )r˜   r™   rš   r›   rœ   r{   r€   rž   rr   r\   rZ   rW   rW   ©  s   † ñ	ô	÷	r\   rW   c                  óà   • \ rS rSrS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)rX   iÇ  zv
Performs signing and verification operations using EdDSA

This class requires ``cryptography>=2.6`` to be installed.
c                ó   • g rƒ   rr   )rm   Úkwargss     rZ   r´   ÚOKPAlgorithm.__init__Î  s   € Ør\   c                óª  • [        U[        [        45      (       a‡  [        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O%SU;   a  [        US S9nOUSS S:X  a  [        U5      n[        U[        [        [        [        45      (       d  [        S5      eU$ )	Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATErá   r   é   zssh-zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms)re   rj   r•   rÂ   Úencoder;   r:   r<   r,   r-   r*   r+   r   )rm   rt   Úkey_strr¸   s       rZ   ru   ÚOKPAlgorithm.prepare_keyÑ  sÁ   € Ü˜#¤¤s˜|×,Ñ,Ü1;¸CÄ×1GÑ1G˜#Ÿ*™* WÔ-ÈS�Ü3=¸cÄ3×3GÑ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                ót   • [        U[        5      (       a  UR                  S5      OUnUR                  U5      $ )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
rI  )re   r•   rK  r{   )rm   rz   rt   Ú	msg_bytess       rZ   r{   ÚOKPAlgorithm.signè  s/   € ô 0:¸#¼s×/CÑ/C˜Ÿ
™
 7Ô+ÈˆIØ—8‘8˜IÓ&Ð&r\   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.
rI  TF)re   r•   rK  r,   r*   r  r€   r   )rm   rz   rt   r   rO  Ú	sig_bytesr  s          rZ   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ƒ   rr   ©rt   r†   s     rZ   r‡   ÚOKPAlgorithm.to_jwk  rè   r\   c                ó   • g rƒ   rr   rU  s     rZ   r‡   rV    r¼   r\   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Á   r(  )rY  rZ  Úencryption_algorithm)r)  rð   rÁ   r(  rö   )re   r-   r+   Úpublic_bytesr6   ÚRawr9   r   r   rÂ   rÃ   rÄ   r,   r*   Úprivate_bytesr8   r7   r  r   )rt   r†   r)  r(  rË   rð   s         rZ   r‡   rV    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›?Ð*ä!Ð"?Ó@Ð@r\   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 Pairr(  r[  r\  r%  r)  zOKP should have "x" parameterrð   zInvalid key parameter)re   r•   rÃ   rÇ   rÈ   rÉ   r   rÊ   r   r-   Úfrom_public_bytesr+   r,   Úfrom_private_bytesr*   )r�   rË   r  r)  rð   Úerrs         rZ   rŽ   ÚOKPAlgorithm.from_jwkJ  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<rr   N)rF  r   r�   r®   )rt   zAllowedOKPKeys | str | bytesr�   ÚAllowedOKPKeys)rz   rÔ   rt   z#Ed25519PrivateKey | Ed448PrivateKeyr�   rj   )rz   rÔ   rt   rg  r   rÔ   r�   r‘   )rt   rg  r†   r’   r�   r   r“   )rt   rg  r†   r”   r�   r•   )rt   rg  r†   r‘   r�   r–   )r�   r—   r�   rg  )r˜   r™   rš   r›   rœ   r´   ru   r{   r€   r   r�   r‡   rŽ   rž   rr   r\   rZ   rX   rX   Ç  së   † ñ	ô	ô	ð.	'Ø"ð	'Ø)Lð	'àô	'ð	Ø"ð	Ø)7ð	Ø>Ið	àô	ð4 
Ø	ð	Øð	Ø*7ð	àó	ó 
ó 
ð	ð 
Ø	à;@ð	Øð	Ø*8ð	àô	ó 
ó 
ð	ð 
õ,	Aó 
ð,	Að\ 
ó 	Hó 
ó 	Hr\   rX   )r�   zdict[str, Algorithm])[Ú
__future__r   rÕ   rÎ   rÃ   Úabcr   r   Útypingr   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.   r/   r0   r1   r2   r3   r4   r5   Ú,cryptography.hazmat.primitives.serializationr6   r7   r8   r9   r:   r;   r<   rS   ÚModuleNotFoundErrorr  r8  rg  ÚAllowedKeysÚAllowedPrivateKeysÚAllowedPublicKeysÚrequires_cryptographyr[   r^   rN   rO   rU   rV   rW   rX   rr   r\   rZ   Ú<module>r|     sŒ  ðÝ "ã Û Û ß #ß R× RÑ Rå 'ß '÷
÷ 
õ 
ð/ßNÝ<Ý5ÝA÷÷ ÷ ÷÷÷	÷ 	ó 	÷÷ ñ ð €Jö
 à" \Ñ1€NØ+Ð.DÑD€MàÐ,Ñ,¨Ñ>ÀÑOð ð ! =Ñ0°>ÑA€KàÐ/Ñ/Ð2CÑCÀoÑUð ð 	Ð-Ñ-Ð0@Ñ@À>ÑQð ò
Ð ô ôDF�ô FôR$�Iô $ô<E=�Iô E=öP ôh�yô hôTA�iô AôF˜,ô ô<dH�yõ dHð[ øðk ó Ø‚Jðús   ÁA*E ÅE ÅE 