§
    &œ)cˆ\  ã                   óü  — d dl Z d dlZd dlZddl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Zd dlmZ d dlmZ d dlmZmZ d dlmZmZ d d	lmZ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( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 dZ1n# e2$ r dZ1Y nw xY wh d£Z3d„ Z4 G d„ d¦  «        Z5 G d„ de5¦  «        Z6 G d„ de5¦  «        Z7e1r: G d„ de5¦  «        Z8 G d„ de5¦  «        Z9 G d„ de8¦  «        Z: G d„ de5¦  «        Z;dS dS )é    Né   ©ÚInvalidKeyError)	Ú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)Úhashes)ÚecÚpadding)ÚEllipticCurvePrivateKeyÚEllipticCurvePublicKey)Ú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+|                      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)r0   r1   r2   r(   r3   r)   r+   r*   r-   r.   r/   r,   )Ú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_algorithmsrF   K   s  € õ
 ‘”Ý�}Ô3Ñ4Ô4Ý�}Ô3Ñ4Ô4Ý�}Ô3Ñ4Ô4ð	ð Ðõ ñ 
Ø×!Ò!å%¥lÔ&9Ñ:Ô:Ý%¥lÔ&9Ñ:Ô:Ý%¥lÔ&9Ñ:Ô:Ý$¥[Ô%7Ñ8Ô8Ý%¥kÔ&8Ñ9Ô9Ý$¥[Ô%7Ñ8Ô8Ý$¥[Ô%7Ñ8Ô8Ý$ÝÔ&ñô õ )­Ô)?Ñ@Ô@Ý(­Ô)?Ñ@Ô@Ý(­Ô)?Ñ@Ô@Ý%™œðð ñ	
ô 	
ð 	
ð& Ðó    c                   óP   — e Zd ZdZd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	dS )Ú	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    c                 ó   — t           ‚)zš
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        ©ÚNotImplementedError©ÚselfÚkeys     rE   Úprepare_keyzAlgorithm.prepare_keyr   ó
   € õ
 "Ð!rG   c                 ó   — t           ‚)zn
        Returns a digital signature for the specified message
        using the specified key value.
        rK   ©rN   ÚmsgrO   s      rE   ÚsignzAlgorithm.signy   rQ   rG   c                 ó   — t           ‚)zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        rK   ©rN   rT   rO   Úsigs       rE   ÚverifyzAlgorithm.verify€   rQ   rG   c                 ó   — t           ‚)z7
        Serializes a given RSA key into a JWK
        rK   ©Úkey_objs    rE   Úto_jwkzAlgorithm.to_jwk‡   rQ   rG   c                 ó   — t           ‚)zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        rK   )Újwks    rE   Úfrom_jwkzAlgorithm.from_jwkŽ   rQ   rG   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rP   rU   rY   Ústaticmethodr]   r`   © rG   rE   rI   rI   m   s�   € € € € € ðð ð"ð "ð "ð"ð "ð "ð"ð "ð "ð ð"ð "ñ „\ð"ð ð"ð "ñ „\ð"ð "ð "rG   rI   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r9   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c                 ó8   — |dk    rd }|�t          d¦  «        ‚|S )NÚ z*When alg = "none", key value must be None.r   rM   s     rE   rP   zNoneAlgorithm.prepare_keyœ   s)   € Ø�"Š9ˆ9ØˆCàˆ?Ý!Ð"NÑOÔOÐOàˆ
rG   c                 ó   — dS )NrG   rf   rS   s      rE   rU   zNoneAlgorithm.sign¥   s   € ØˆsrG   c                 ó   — dS )NFrf   rW   s       rE   rY   zNoneAlgorithm.verify¨   s   € ØˆurG   N)ra   rb   rc   rd   rP   rU   rY   rf   rG   rE   r9   r9   –   sK   € € € € € ðð ð
ð ð ðð ð ðð ð ð ð rG   r9   c                   ó€   — e Zd ZdZej        Zej        Zej	        Z
d„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ ZdS )	r:   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 ó   — || _         d S ©N©Úhash_alg©rN   rp   s     rE   Ú__init__zHMACAlgorithm.__init__¶   s   € Ø ˆŒˆˆrG   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   rM   s     rE   rP   zHMACAlgorithm.prepare_key¹   sJ   € Ý˜#ÑÔˆå˜ÑÔð 	¥¨C¡¤ð 	Ý!ð9ñô ð ð
 ˆ
rG   c                 óˆ   — t          j        t          t          | ¦  «        ¦  «                             ¦   «         ddœ¦  «        S )NÚoct)ÚkÚkty)ÚjsonÚdumpsr   r	   Údecoder[   s    rE   r]   zHMACAlgorithm.to_jwkÄ   sB   € åŒzå%¥k°'Ñ&:Ô&:Ñ;Ô;×BÒBÑDÔDØðð ñ
ô 
ð 	
rG   c                 óL  — 	 t          | t          ¦  «        rt          j        | ¦  «        }nt          | t          ¦  «        r| }nt
          ‚n# t
          $ r t          d¦  «        ‚w xY w|                     d¦  «        dk    rt          d¦  «        ‚t          |d         ¦  «        S )NúKey is not valid JSONrw   ru   zNot an HMAC keyrv   )	Ú
isinstanceÚstrrx   ÚloadsÚdictÚ
ValueErrorr   Úgetr   )r_   Úobjs     rE   r`   zHMACAlgorithm.from_jwkÍ   sª   € ð	;Ý˜#�sÑ#Ô#ð !Ý”j ‘o”o��Ý˜C¥Ñ&Ô&ð !Ø��å Ð øøÝð 	;ð 	;ð 	;Ý!Ð"9Ñ:Ô:Ð:ð	;øøøð �7Š7�5‰>Œ>˜UÒ"Ð"Ý!Ð"3Ñ4Ô4Ð4å  C¤Ñ)Ô)Ð)ó   ‚A	A ÁA&c                 ó\   — t          j        ||| j        ¦  «                             ¦   «         S rn   )ÚhmacÚnewrp   ÚdigestrS   s      rE   rU   zHMACAlgorithm.signÞ   s$   € ÝŒx˜˜S $¤-Ñ0Ô0×7Ò7Ñ9Ô9Ð9rG   c                 óT   — t          j        ||                      ||¦  «        ¦  «        S rn   )r†   Úcompare_digestrU   rW   s       rE   rY   zHMACAlgorithm.verifyá   s#   € ÝÔ" 3¨¯	ª	°#°sÑ(;Ô(;Ñ<Ô<Ð<rG   N)ra   rb   rc   rd   ÚhashlibÚsha256r;   Úsha384r<   Úsha512r=   rr   rP   re   r]   r`   rU   rY   rf   rG   rE   r:   r:   ¬   s§   € € € € € ðð ð
 Œ^€FØŒ^€FØŒ^€Fð!ð !ð !ð	ð 	ð 	ð ð
ð 
ñ „\ð
ð ð*ð *ñ „\ð*ð :ð :ð :ð=ð =ð =ð =ð =rG   r:   c                   ó€   — e Zd ZdZej        Zej        Zej        Zd„ Zd„ Z	e
d„ ¦   «         Ze
d„ ¦   «         Zd„ Zd„ ZdS )	r@   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 ó   — || _         d S rn   ro   rq   s     rE   rr   zRSAAlgorithm.__init__ñ   ó   € Ø$ˆDŒMˆMˆMrG   c                 ód  — t          |t          t          f¦  «        r|S t          |t          t          f¦  «        st          d¦  «        ‚t          |¦  «        }	 |                     d¦  «        rt          |¦  «        }nt          |d ¬¦  «        }n# t          $ r t          |¦  «        }Y nw xY w|S )NúExpecting a PEM-formatted key.s   ssh-rsa©Úpassword)r}   r   r   Úbytesr~   Ú	TypeErrorr	   Ú
startswithr'   r%   r�   r&   rM   s     rE   rP   zRSAAlgorithm.prepare_keyô   s¾   € Ý˜#¥­|Ð<Ñ=Ô=ð Ø�
å˜c¥E­3 <Ñ0Ô0ð BÝÐ @ÑAÔAÐAå˜cÑ"Ô"ˆCð/Ø—>’> *Ñ-Ô-ð CÝ-¨cÑ2Ô2�C�Cå.¨s¸TÐBÑBÔB�CøøÝð /ð /ð /Ý)¨#Ñ.Ô.���ð/øøøàˆJs   Á6B ÂB-Â,B-c                 óö  — d }t          | dd ¦  «        �rM|                      ¦   «         }ddgt          |j        j        ¦  «                             ¦   «         t          |j        j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         t          |j	        ¦  «                             ¦   «         t          |j
        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         dœ
}n…t          | dd ¦  «        re|                      ¦   «         }ddgt          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         dœ}nt          d¦  «        ‚t          j        |¦  «        S )NÚprivate_numbersÚRSArU   )
rw   Úkey_opsÚnÚeÚdÚpÚqÚdpÚdqÚqirY   )rw   rœ   r�   rž   úNot a public or private key)Úgetattrrš   r   Úpublic_numbersr�   rz   rž   rŸ   r    r¡   Údmp1Údmq1Úiqmpr   rx   ry   )r\   rƒ   Únumberss      rE   r]   zRSAAlgorithm.to_jwk  s§  € àˆCå�wÐ 1°4Ñ8Ô8ñ Eà!×1Ò1Ñ3Ô3�ð !Ø &˜xÝ*¨7Ô+AÔ+CÑDÔD×KÒKÑMÔMÝ*¨7Ô+AÔ+CÑDÔD×KÒKÑMÔMÝ*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý+¨G¬LÑ9Ô9×@Ò@ÑBÔBÝ+¨G¬LÑ9Ô9×@Ò@ÑBÔBÝ+¨G¬LÑ9Ô9×@Ò@ÑBÔBðð ��õ ˜ (¨DÑ1Ô1ð Eà!×0Ò0Ñ2Ô2�ð !Ø (˜zÝ*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>Ý*¨7¬9Ñ5Ô5×<Ò<Ñ>Ô>ð	ð ��õ &Ð&CÑDÔDÐDå”:˜c‘?”?Ð"rG   c                 ó<  ‡	— 	 t          | t          ¦  «        rt          j        | ¦  «        Š	nt          | t          ¦  «        r| Š	nt
          ‚n# t
          $ r t          d¦  «        ‚w xY w‰	                     d¦  «        dk    rt          d¦  «        ‚d‰	v �r¦d‰	v �r¡d‰	v �rœd‰	v rt          d	¦  «        ‚g d
¢}ˆ	fd„|D ¦   «         }t          |¦  «        }|rt          |¦  «        st          d¦  «        ‚t          t          ‰	d         ¦  «        t          ‰	d         ¦  «        ¦  «        }|r‰t          t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        t          ‰	d         ¦  «        |¬¦  «        }nst          ‰	d         ¦  «        }t          |j        ||j        ¦  «        \  }}t          |||t!          ||¦  «        t#          ||¦  «        t%          ||¦  «        |¬¦  «        }|                     ¦   «         S d‰	v rNd‰	v rJt          t          ‰	d         ¦  «        t          ‰	d         ¦  «        ¦  «        }|                     ¦   «         S t          d¦  «        ‚)Nr|   rw   r›   zNot an RSA keyrŸ   rž   r�   Úothz5Unsupported RSA private key: > 2 primes not supported)r    r¡   r¢   r£   r¤   c                 ó   •— g | ]}|‰v ‘ŒS rf   rf   )Ú.0Úproprƒ   s     €rE   ú
<listcomp>z)RSAAlgorithm.from_jwk.<locals>.<listcomp>A  s   ø€ ÐCÐCÐC¨t˜t s˜{ÐCÐCÐCrG   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¥   )r}   r~   rx   r   r€   r�   r   r‚   ÚanyÚallr   r
   r   r    r�   rž   r   r   r   Úprivate_keyÚ
public_key)
r_   Úother_propsÚprops_foundÚany_props_foundr§   r«   rŸ   r    r¡   rƒ   s
            @rE   r`   zRSAAlgorithm.from_jwk*  sÌ  ø€ ð?Ý˜c¥3Ñ'Ô'ð %Ýœ* S™/œ/�C�CÝ ¥TÑ*Ô*ð %Ø�C�Cå$Ð$øøÝð ?ð ?ð ?Ý%Ð&=Ñ>Ô>Ð>ð?øøøð �wŠw�u‰~Œ~ Ò&Ð&Ý%Ð&6Ñ7Ô7Ð7à�cˆz‰z˜c S˜j™j¨S°C¨Z©Zà˜C�<�<Ý)ØOñô ð ð ;Ð:Ð:�ØCÐCÐCÐC°{ÐCÑCÔC�Ý"% kÑ"2Ô"2�à"ð ­3¨{Ñ+;Ô+;ð Ý)ØZñô ð õ "2Ý'¨¨C¬Ñ1Ô1Ý'¨¨C¬Ñ1Ô1ñ"ô "�ð
 #ð Ý/Ý-¨c°#¬hÑ7Ô7Ý-¨c°#¬hÑ7Ô7Ý-¨c°#¬hÑ7Ô7Ý0°°T´Ñ;Ô;Ý0°°T´Ñ;Ô;Ý0°°T´Ñ;Ô;Ø'5ðñ ô �G�Gõ ,¨C°¬HÑ5Ô5�AÝ4Ø&Ô(¨!¨^Ô-=ñô ‘D�A�qõ 0ØØØÝ)¨!¨QÑ/Ô/Ý)¨!¨QÑ/Ô/Ý)¨!¨QÑ/Ô/Ø'5ðñ ô �Gð ×*Ò*Ñ,Ô,Ð,Ø˜��  s 
 
å*Ý'¨¨C¬Ñ1Ô1Ý'¨¨C¬Ñ1Ô1ñô �ð
 ×)Ò)Ñ+Ô+Ð+å%Ð&CÑDÔDÐDs   ƒA	A ÁA'c                 óv   — |                      |t          j        ¦   «         |                      ¦   «         ¦  «        S rn   )rU   r   ÚPKCS1v15rp   rS   s      rE   rU   zRSAAlgorithm.signt  s)   € Ø—8’8˜C¥Ô!1Ñ!3Ô!3°T·]²]±_´_ÑEÔEÐErG   c                 ó    — 	 |                      ||t          j        ¦   «         |                      ¦   «         ¦  «         dS # t          $ r Y dS w xY w)NTF)rY   r   rº   rp   r   rW   s       rE   rY   zRSAAlgorithm.verifyw  sW   € ðØ—
’
˜3 ¥WÔ%5Ñ%7Ô%7¸¿º¹¼ÑIÔIÐIØ�tøÝ#ð ð ð Ø�u�uðøøøs   ‚;? ¿
AÁAN)ra   rb   rc   rd   r   r;   r<   r=   rr   rP   re   r]   r`   rU   rY   rf   rG   rE   r@   r@   ç   s²   € € € € € ð	ð 	ð
 ”ˆØ”ˆØ”ˆð	%ð 	%ð 	%ð	ð 	ð 	ð$ 
ð!	#ð !	#ñ 
Œð!	#ðF 
ðG	Eð G	Eñ 
ŒðG	EðR	Fð 	Fð 	Fð	ð 	ð 	ð 	ð 	rG   r@   c                   ó€   — e Zd ZdZej        Zej        Zej        Zd„ Zd„ Z	d„ Z
d„ Zed„ ¦   «         Zed„ ¦   «         ZdS )	rA   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 ó   — || _         d S rn   ro   rq   s     rE   rr   zECAlgorithm.__init__ˆ  r‘   rG   c                 óº  — t          |t          t          f¦  «        r|S t          |t          t          f¦  «        st          d¦  «        ‚t          |¦  «        }	 |                     d¦  «        rt          |¦  «        }nt          |¦  «        }n!# t          $ r t          |d ¬¦  «        }Y nw xY wt          |t          t          f¦  «        st          d¦  «        ‚|S )Nr“   s   ecdsa-sha2-r”   zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms)r}   r   r   r–   r~   r—   r	   r˜   r'   r&   r�   r%   r   rM   s     rE   rP   zECAlgorithm.prepare_key‹  sñ   € Ý˜#Õ 7Õ9OÐPÑQÔQð Ø�
å˜c¥E­3 <Ñ0Ô0ð BÝÐ @ÑAÔAÐAå˜cÑ"Ô"ˆCð
?Ø—>’> .Ñ1Ô1ð 3Ý-¨cÑ2Ô2�C�Cå-¨cÑ2Ô2�CøøÝð ?ð ?ð ?Ý*¨3¸Ð>Ñ>Ô>���ð?øøøõ ˜cÕ$;Õ=SÐ#TÑUÔUð Ý%Øyñô ð ð ˆJs   Á4B ÂB-Â,B-c                 ó    — |                      |t          j        |                      ¦   «         ¦  «        ¦  «        }t	          ||j        ¦  «        S rn   )rU   r   ÚECDSArp   r   Úcurve)rN   rT   rO   Úder_sigs       rE   rU   zECAlgorithm.sign§  s9   € Ø—h’h˜s¥B¤H¨T¯]ª]©_¬_Ñ$=Ô$=Ñ>Ô>ˆGå'¨°´Ñ;Ô;Ð;rG   c                 óB  — 	 t          ||j        ¦  «        }n# t          $ r Y dS w xY w	 t          |t          ¦  «        r|                     ¦   «         }|                     ||t          j        |  	                    ¦   «         ¦  «        ¦  «         dS # t          $ r Y dS w xY w)NFT)r   rÁ   r�   r}   r   rµ   rY   r   rÀ   rp   r   )rN   rT   rO   rX   rÂ   s        rE   rY   zECAlgorithm.verify¬  s²   € ðÝ.¨s°C´IÑ>Ô>��øÝð ð ð Ø�u�uðøøøðÝ˜cÕ#:Ñ;Ô;ð +ØŸ.š.Ñ*Ô*�CØ—
’
˜7 C­¬°$·-²-±/´/Ñ)BÔ)BÑCÔCÐCØ�tøÝ#ð ð ð Ø�u�uðøøøs   ‚ ˜
&¥&ªA$B Â
BÂBc                 ó�  — t          | t          ¦  «        r'|                      ¦   «                              ¦   «         }n9t          | t          ¦  «        r|                      ¦   «         }nt          d¦  «        ‚t          | j        t          j        ¦  «        rd}n}t          | j        t          j	        ¦  «        rd}n[t          | j        t          j
        ¦  «        rd}n9t          | j        t          j        ¦  «        rd}nt          d| j        › �¦  «        ‚d|t          |j        ¦  «                             ¦   «         t          |j        ¦  «                             ¦   «         dœ}t          | t          ¦  «        r;t          |                      ¦   «         j        ¦  «                             ¦   «         |d	<   t%          j        |¦  «        S )
Nr¥   úP-256úP-384úP-521Ú	secp256k1úInvalid curve: ÚEC)rw   ÚcrvÚxÚyrŸ   )r}   r   rµ   r§   r   r   rÁ   r   Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1Ú	SECP256K1r   rÌ   rz   rÍ   rš   Úprivate_valuerx   ry   )r\   r§   rË   rƒ   s       rE   r]   zECAlgorithm.to_jwkº  sœ  € õ ˜'Õ#:Ñ;Ô;ð EØ!(×!3Ò!3Ñ!5Ô!5×!DÒ!DÑ!FÔ!F��Ý˜GÕ%;Ñ<Ô<ð EØ!(×!7Ò!7Ñ!9Ô!9��å%Ð&CÑDÔDÐDå˜'œ-­¬Ñ6Ô6ð 	IØ��Ý˜GœM­2¬<Ñ8Ô8ð IØ��Ý˜GœM­2¬<Ñ8Ô8ð IØ��Ý˜GœM­2¬<Ñ8Ô8ð IØ!��å%Ð&G¸¼Ð&GÐ&GÑHÔHÐHð ØÝ& ~Ô'7Ñ8Ô8×?Ò?ÑAÔAÝ& ~Ô'7Ñ8Ô8×?Ò?ÑAÔAð	ð ˆCõ ˜'Õ#:Ñ;Ô;ð Ý,Ø×+Ò+Ñ-Ô-Ô;ñô ç’&‘(”(ð �C‘õ ”:˜c‘?”?Ð"rG   c                 óÈ  — 	 t          | t          ¦  «        rt          j        | ¦  «        }nt          | t          ¦  «        r| }nt
          ‚n# t
          $ r t          d¦  «        ‚w xY w|                     d¦  «        dk    rt          d¦  «        ‚d|vsd|vrt          d¦  «        ‚t          |                     d¦  «        ¦  «        }t          |                     d¦  «        ¦  «        }|                     d¦  «        }|dk    rNt          |¦  «        t          |¦  «        cxk    rd	k    rn nt          j        ¦   «         }�nt          d
¦  «        ‚|dk    rMt          |¦  «        t          |¦  «        cxk    rdk    rn nt          j        ¦   «         }nÇt          d¦  «        ‚|dk    rMt          |¦  «        t          |¦  «        cxk    rdk    rn nt          j        ¦   «         }ntt          d¦  «        ‚|dk    rMt          |¦  «        t          |¦  «        cxk    rd	k    rn nt          j        ¦   «         }n!t          d¦  «        ‚t          d|› �¦  «        ‚t          j        t                                |d¬¦  «        t                                |d¬¦  «        |¬¦  «        }d|vr|                     ¦   «         S t          |                     d¦  «        ¦  «        }t          |¦  «        t          |¦  «        k    rt          dt          |¦  «        |¦  «        ‚t          j        t                                |d¬¦  «        |¦  «                             ¦   «         S )Nr|   rw   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 {})r}   r~   rx   r   r€   r�   r   r‚   r   Úlenr   rÎ   rÏ   rÐ   rÑ   ÚEllipticCurvePublicNumbersÚintÚ
from_bytesrµ   ÚEllipticCurvePrivateNumbersr´   )r_   rƒ   rÌ   rÍ   rÁ   Ú	curve_objr§   rŸ   s           rE   r`   zECAlgorithm.from_jwkÝ  sG  € ð?Ý˜c¥3Ñ'Ô'ð %Ýœ* S™/œ/�C�CÝ ¥TÑ*Ô*ð %Ø�C�Cå$Ð$øøÝð ?ð ?ð ?Ý%Ð&=Ñ>Ô>Ð>ð?øøøð �wŠw�u‰~Œ~ Ò%Ð%Ý%Ð&AÑBÔBÐBà˜#ˆ~ˆ~ ¨C  Ý%Ð&AÑBÔBÐBå  §¢¨¡¤Ñ.Ô.ˆAÝ  §¢¨¡¤Ñ.Ô.ˆAà—G’G˜E‘N”NˆEØ˜ÒÐÝ�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý "¤¡¤�I‘Iå)Ð*UÑVÔVÐVØ˜'Ò!Ð!Ý�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý "¤¡¤�I�Iå)Ð*UÑVÔVÐVØ˜'Ò!Ð!Ý�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý "¤¡¤�I�Iå)Ð*UÑVÔVÐVØ˜+Ò%Ð%Ý�q‘6”6�S ™VœVÐ)Ð)Ò)Ð) rÒ)Ð)Ð)Ð)Ð)Ý "¤¡¤�I�Iå)ØGñô ð õ &Ð&?¸Ð&?Ð&?Ñ@Ô@Ð@åÔ:Ý—.’. ¨e�.Ñ4Ô4Ý—.’. ¨e�.Ñ4Ô4Øðñ ô ˆNð ˜#ˆ~ˆ~Ø%×0Ò0Ñ2Ô2Ð2å  §¢¨¡¤Ñ.Ô.ˆAÝ�1‰vŒv�˜Q™œÒÐÝ%Ø7½¸Q¹¼Àñô ð õ Ô1Ý—’˜q¨E�Ñ2Ô2°Nñô çŠk‰mŒmðr„   N)ra   rb   rc   rd   r   r;   r<   r=   rr   rP   rU   rY   re   r]   r`   rf   rG   rE   rA   rA   ~  s¨   € € € € € ð	ð 	ð
 ”ˆØ”ˆØ”ˆð	%ð 	%ð 	%ð	ð 	ð 	ð8	<ð 	<ð 	<ð
	ð 	ð 	ð 
ð 	#ð  	#ñ 
Œð 	#ðD 
ð?	ð ?	ñ 
Œð?	ð ?	ð ?	rG   rA   c                   ó   — e Zd ZdZd„ Zd„ ZdS )rB   zA
        Performs a signature using RSASSA-PSS with MGF1
        c           	      óØ   — |                      |t          j        t          j        |                      ¦   «         ¦  «        | j        j        ¬¦  «        |                      ¦   «         ¦  «        S )N©ÚmgfÚsalt_length)rU   r   ÚPSSÚMGF1rp   Údigest_sizerS   s      rE   rU   zRSAPSSAlgorithm.sign$  sY   € Ø—8’8ØÝ”Ýœ T§]¢]¡_¤_Ñ5Ô5Ø $¤Ô 9ðñ ô ð —’‘”ñô ð rG   c           
      ó  — 	 |                      ||t          j        t          j        |                      ¦   «         ¦  «        | j        j        ¬¦  «        |                      ¦   «         ¦  «         dS # t          $ r Y dS w xY w)Nrá   TF)rY   r   rä   rå   rp   ræ   r   rW   s       rE   rY   zRSAPSSAlgorithm.verify.  sŠ   € ðØ—
’
ØØÝ”KÝ#œL¨¯ª©¬Ñ9Ô9Ø$(¤MÔ$=ðñ ô ð —M’M‘O”Oñô ð ð �tøÝ#ð ð ð Ø�u�uðøøøs   ‚A,A0 Á0
A>Á=A>N)ra   rb   rc   rd   rU   rY   rf   rG   rE   rB   rB     s<   € € € € € ð	ð 	ð	ð 	ð 	ð	ð 	ð 	ð 	ð 	rG   rB   c                   óV   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )	rC   zŽ
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        c                 ó   — d S rn   rf   )rN   Úkwargss     rE   rr   zOKPAlgorithm.__init__D  s   € ØˆDrG   c                 ó¸  — t          |t          t          f¦  «        r†t          |t          ¦  «        r|                     d¦  «        }|                     d¦  «        }d|v rt          |¦  «        }n3d|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)r}   r–   r~   Úencoderz   r&   r%   r'   r   r   r   r   r   )rN   rO   Ústr_keys      rE   rP   zOKPAlgorithm.prepare_keyG  sç   € Ý˜#¥¥s˜|Ñ,Ô,ð 
3Ý˜c¥3Ñ'Ô'ð .ØŸ*š* WÑ-Ô-�CØŸ*š* WÑ-Ô-�à&¨'Ð1Ð1Ý-¨cÑ2Ô2�C�CØ)¨WÐ4Ð4Ý.¨s¸TÐBÑBÔB�C�CØ˜Q˜q˜S”\ VÒ+Ð+Ý-¨cÑ2Ô2�Cõ ØÝ"Õ$4µoÅ~ÐVñô ð õ &Øyñô ð ð ˆJrG   c                 ó|   — t          |¦  «        t          urt          |d¦  «        n|}|                     |¦  «        S )aS  
            Sign a message ``msg`` using the EdDSA private key ``key``
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey}Ed448PrivateKey key: A :class:`.Ed25519PrivateKey`
                or :class:`.Ed448PrivateKey` isinstance
            :return bytes signature: The signature, as bytes
            rì   )Útyper–   rU   rS   s      rE   rU   zOKPAlgorithm.sign_  s8   € õ *.¨c©¬½%Ð)?Ð)?•%˜˜WÑ%Ô%Ð%ÀSˆCØ—8’8˜C‘=”=Ð rG   c                 ój  — 	 t          |¦  «        t          urt          |d¦  «        n|}t          |¦  «        t          urt          |d¦  «        n|}t          |t          t          f¦  «        r|                     ¦   «         }|                     ||¦  «         dS # t          j        j	        $ r Y dS w xY w)aÄ  
            Verify a given ``msg`` against a signature ``sig`` using the EdDSA key ``key``

            :param str|bytes sig: EdDSA signature to check ``msg`` against
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey|Ed25519PublicKey|Ed448PrivateKey|Ed448PublicKey key:
                A private or public EdDSA key instance
            :return bool verified: True if signature is valid, False if not.
            rì   TF)
rñ   r–   r}   r   r   rµ   rY   ÚcryptographyÚ
exceptionsr   rW   s       rE   rY   zOKPAlgorithm.verifyj  s·   € ð	Ý-1°#©Y¬Y½eÐ-CÐ-C•e˜C Ñ)Ô)Ð)È�Ý-1°#©Y¬Y½eÐ-CÐ-C•e˜C Ñ)Ô)Ð)È�å˜cÕ$5µÐ#GÑHÔHð +ØŸ.š.Ñ*Ô*�CØ—
’
˜3 Ñ$Ô$Ð$Ø�tøÝÔ*Ô;ð ð ð Ø�u�uðøøøs   ‚BB ÂB2Â1B2c                 óž  — t          | t          t          f¦  «        rˆ|                      t          j        t          j        ¬¦  «        }t          | t          ¦  «        rdnd}t          j        t          t          |¦  «        ¦  «                             ¦   «         d|dœ¦  «        S t          | t          t          f¦  «        rÿ|                      t          j        t          j        t!          ¦   «         ¬¦  «        }|                      ¦   «                              t          j        t          j        ¬¦  «        }t          | t          ¦  «        rdnd}t          j        t          t          |¦  «        ¦  «                             ¦   «         t          t          |¦  «        ¦  «                             ¦   «         d|dœ¦  «        S t%          d¦  «        ‚)	N)ÚencodingÚformatÚEd25519ÚEd448ÚOKP)rÌ   rw   rË   )rö   r÷   Úencryption_algorithm)rÌ   rŸ   rw   rË   r¥   )r}   r   r   Úpublic_bytesr!   ÚRawr$   rx   ry   r   r	   rz   r   r   Úprivate_bytesr#   r"   rµ   r   )rO   rÌ   rË   rŸ   s       rE   r]   zOKPAlgorithm.to_jwk  sœ  € å˜#Õ 0µ.ÐAÑBÔBð Ø×$Ò$Ý%œ\Ý'Ô+ð %ñ ô �õ $.¨cÕ3CÑ#DÔ#DÐQ�i�iÈ'�Ý”zå-­k¸!©n¬nÑ=Ô=×DÒDÑFÔFØ$Ø"ðð ñô ð õ ˜#Õ 1µ?ÐCÑDÔDð Ø×%Ò%Ý%œ\Ý(Ô,Ý)5©¬ð &ñ ô �ð —N’NÑ$Ô$×1Ò1Ý%œ\Ý'Ô+ð 2ñ ô �õ
 $.¨cÕ3DÑ#EÔ#EÐR�i�iÈ7�Ý”zå-­k¸!©n¬nÑ=Ô=×DÒDÑFÔFÝ-­k¸!©n¬nÑ=Ô=×DÒDÑFÔFØ$Ø"ð	ð ñô ð õ "Ð"?Ñ@Ô@Ð@rG   c                 ó<  — 	 t          | t          ¦  «        rt          j        | ¦  «        }nt          | t          ¦  «        r| }nt
          ‚n# t
          $ r t          d¦  «        ‚w xY w|                     d¦  «        dk    rt          d¦  «        ‚|                     d¦  «        }|dk    r|dk    rt          d|› �¦  «        ‚d	|vrt          d
¦  «        ‚t          |                     d	¦  «        ¦  «        }	 d|vr.|dk    rt          j
        |¦  «        S t          j
        |¦  «        S t          |                     d¦  «        ¦  «        }|dk    rt          j        |¦  «        S t          j        |¦  «        S # t
          $ r}t          d¦  «        |‚d }~ww xY w)Nr|   rw   rú   zNot an Octet Key PairrË   rø   rù   rÉ   rÌ   zOKP should have "x" parameterrŸ   zInvalid key parameter)r}   r~   rx   r   r€   r�   r   r‚   r   r   Úfrom_public_bytesr   r   Úfrom_private_bytesr   )r_   rƒ   rÁ   rÌ   rŸ   Úerrs         rE   r`   zOKPAlgorithm.from_jwk§  s¶  € ð?Ý˜c¥3Ñ'Ô'ð %Ýœ* S™/œ/�C�CÝ ¥TÑ*Ô*ð %Ø�C�Cå$Ð$øøÝð ?ð ?ð ?Ý%Ð&=Ñ>Ô>Ð>ð?øøøð �wŠw�u‰~Œ~ Ò&Ð&Ý%Ð&=Ñ>Ô>Ð>à—G’G˜E‘N”NˆEØ˜	Ò!Ð! e¨wÒ&6Ð&6Ý%Ð&?¸Ð&?Ð&?Ñ@Ô@Ð@à˜#ˆ~ˆ~Ý%Ð&EÑFÔFÐFÝ  §¢¨¡¤Ñ.Ô.ˆAð
HØ˜c�>�>Ø 	Ò)Ð)Ý/ÔAÀ!ÑDÔDÐDÝ)Ô;¸AÑ>Ô>Ð>Ý$ S§W¢W¨S¡\¤\Ñ2Ô2�Ø˜IÒ%Ð%Ý,Ô?ÀÑBÔBÐBÝ&Ô9¸!Ñ<Ô<Ð<øÝð Hð Hð HÝ%Ð&=Ñ>Ô>ÀCÐGøøøøðHøøøs6   ‚A	A ÁA&Ã:E< ÄE< Ä,;E< Å(E< Å<
FÆFÆFN)ra   rb   rc   rd   rr   rP   rU   rY   re   r]   r`   rf   rG   rE   rC   rC   =  s™   € € € € € ð	ð 	ð	ð 	ð 	ð	ð 	ð 	ð0		!ð 		!ð 		!ð	ð 	ð 	ð* 
ð%	Að %	Añ 
Œð%	AðN 
ð 	Hð  	Hñ 
Œð 	Hð  	Hð  	HrG   rC   )<r‹   r†   rx   rô   r   Úutilsr   r   r   r	   r
   r   r   r   r   Úcryptography.exceptionsró   r   Úcryptography.hazmat.primitivesr   Ú)cryptography.hazmat.primitives.asymmetricr   r   Ú,cryptography.hazmat.primitives.asymmetric.ecr   r   Ú/cryptography.hazmat.primitives.asymmetric.ed448r   r   Ú1cryptography.hazmat.primitives.asymmetric.ed25519r   r   Ú-cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r    Ú,cryptography.hazmat.primitives.serializationr!   r"   r#   r$   r%   r&   r'   r>   ÚModuleNotFoundErrorÚrequires_cryptographyrF   rI   r9   r:   r@   rA   rB   rC   rf   rG   rE   ú<module>r     sã  ðØ €€€Ø €€€Ø €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð'Ø"Ð"Ð"Ð"Ø8Ð8Ð8Ð8Ð8Ð8Ø5Ð5Ð5Ð5Ð5Ð5ØEÐEÐEÐEÐEÐEÐEÐEðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €J€JøØð ð ð Ø€J€J€Jðøøøðð ð Ð ð ð ð ðD&"ð &"ð &"ð &"ð &"ñ &"ô &"ð &"ðRð ð ð ð �Iñ ô ð ð,6=ð 6=ð 6=ð 6=ð 6=�Iñ 6=ô 6=ð 6=ðr ð cHðUð Uð Uð Uð U�yñ Uô Uð Uðn_ð _ð _ð _ð _�iñ _ô _ð _ðBð ð ð ð ˜,ñ ô ð ð<KHð KHð KHð KHð KH�yñ KHô KHð KHð KHð KHðq
cHð cHs   ªAB ÂBÂB