Ë
    [üàgÉv  ã                  ó®  — d dl m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 	 d d	lm Z m!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZI dZJe	r3e:e<z  ZLe/e1z  ZMe7e8z  e4z  e5z  ZNeLeMz  eNz  ZOe:e/z  e7z  e4z  ZPe<e1z  e8z  e5z  ZQh d£ZRd$d„ZS G d„ de«      ZT G d„ deT«      ZU G d„ deT«      ZVeJr- G d„ deT«      ZW G d„ deT«      ZX G d „ d!eW«      ZY G d"„ d#eT«      ZZyy# eK$ r dZJY Œ—w xY w)%é    )Ú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                 ó  — 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)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    úL/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/jwt/algorithms.pyÚget_default_algorithmsr[   i   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ÚNotImplementedErrorrS   Ú
isinstanceÚtypeÚ
issubclassr   ÚHashAlgorithmÚHashr   rT   ÚbytesÚfinalizeÚdigest)ÚselfÚbytestrr`   rk   s       rZ   Ú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© ©rl   Úkeys     rZ   Úprepare_keyzAlgorithm.prepare_key¦   ó   � r\   c                 ó   — y)zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nrp   ©rl   Úmsgrr   s      rZ   ÚsignzAlgorithm.sign­   rt   r\   c                 ó   — y)zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        Nrp   ©rl   rw   rr   Úsigs       rZ   ÚverifyzAlgorithm.verify´   rt   r\   c                 ó   — y ©Nrp   ©Úkey_objÚas_dicts     rZ   Úto_jwkzAlgorithm.to_jwk»   s   € ð =@r\   c                 ó   — y r~   rp   r   s     rZ   r‚   zAlgorithm.to_jwkÀ   s	   € ð BEr\   c                 ó   — y)z3
        Serializes a given key into a JWK
        Nrp   r   s     rZ   r‚   zAlgorithm.to_jwkÅ   rt   r\   c                 ó   — y)zJ
        Deserializes a given key from JWK back into a key object
        Nrp   ©Újwks    rZ   Úfrom_jwkzAlgorithm.from_jwkÌ   rt   r\   N)rm   ri   Úreturnri   )rr   r   r‰   r   )rw   ri   rr   r   r‰   ri   )rw   ri   rr   r   r{   ri   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__Ú__doc__rn   r   rs   rx   r|   r   Ústaticmethodr‚   rˆ   rp   r\   rZ   r^   r^   ‹   sÂ   „ ñó5ð, òó ðð òó ðð òó ðð ØØÚ?ó ó ó ð @àØØÛDó ó ó ð EàØóó ó ðð
 Øòó ó ñ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)rN   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   rq   s     rZ   rs   zNoneAlgorithm.prepare_keyÚ   s$   € Ø�"Š9ØˆCàˆ?Ü!Ð"NÓOÐOàˆ
r\   c                 ó   — y)Nr\   rp   rv   s      rZ   rx   zNoneAlgorithm.signã   s   € Ør\   c                 ó   — y)NFrp   rz   s       rZ   r|   zNoneAlgorithm.verifyæ   s   € Ør\   c                ó   — t        «       ‚r~   ©rc   r   s     rZ   r‚   zNoneAlgorithm.to_jwké   ó   € ä!Ó#Ð#r\   c                ó   — t        «       ‚r~   rœ   r†   s    rZ   rˆ   zNoneAlgorithm.from_jwkí   r�   r\   N)rr   z
str | Noner‰   ÚNone)rw   ri   rr   rŸ   r‰   ri   )rw   ri   rr   rŸ   r{   ri   r‰   rŠ   rŒ   )r€   r   r�   rŠ   r‰   r
   )r‡   r�   r‰   r
   )
r‘   r’   r“   r”   rs   rx   r|   r•   r‚   rˆ   rp   r\   rZ   rN   rN   Ô   s>   „ ñó
óóð ó$ó ð$ð ò$ó ñ$r\   rN   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)rO   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]rP   rQ   rR   c                ó   — || _         y r~   ©r`   ©rl   r`   s     rZ   Ú__init__zHMACAlgorithm.__init__ü   s	   € Ø ˆ�r\   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   ©rl   rr   Ú	key_bytess      rZ   rs   zHMACAlgorithm.prepare_keyÿ   s5   € Ü Ó$ˆ	ä˜Ô#¤z°)Ô'<Ü!ð9óð ð
 Ðr\   c                 ó   — y r~   rp   r   s     rZ   r‚   zHMACAlgorithm.to_jwk
  ó   € ð r\   c                 ó   — y r~   rp   r   s     rZ   r‚   zHMACAlgorithm.to_jwk  s   € ð r\   c                ó~   — t        t        | «      «      j                  «       ddœ}|r|S t        j                  |«      S )NÚoct)ÚkÚkty)r   r   ÚdecodeÚjsonÚdumps)r€   r�   r‡   s      rZ   r‚   zHMACAlgorithm.to_jwk  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«      d ‚w xY w)NúKey is not valid JSONr®   r¬   zNot an HMAC keyr­   )	rd   rŽ   r°   ÚloadsÚdictÚ
ValueErrorr   Úgetr   )r‡   Úobjs     rZ   rˆ   zHMACAlgorithm.from_jwk"  s‚   € ð	EÜ˜#œsÔ#Ü#Ÿz™z¨#›‘Ü˜C¤Ô&Ø‘ä Ð ð �7‰7�5‹>˜UÒ"Ü!Ð"3Ó4Ð4ä  C¡Ó)Ð)øô ò 	EÜ!Ð"9Ó:ÀÐDð	Eús   ‚?A. Á.Bc                ó`   — t        j                  ||| j                  «      j                  «       S r~   )ÚhmacÚnewr`   rk   rv   s      rZ   rx   zHMACAlgorithm.sign3  s"   € Ü�x‰x˜˜S $§-¡-Ó0×7Ñ7Ó9Ð9r\   c                óN   — t        j                  || j                  ||«      «      S r~   )rº   Úcompare_digestrx   rz   s       rZ   r|   zHMACAlgorithm.verify6  s    € Ü×"Ñ" 3¨¯	©	°#°sÓ(;Ó<Ð<r\   N)r`   r   r‰   rŸ   )rr   ústr | bytesr‰   ri   )r€   r¾   r�   r‹   r‰   r   rŒ   )r€   r¾   r�   r�   r‰   rŽ   )r€   r¾   r�   rŠ   r‰   r�   )r‡   r�   r‰   ri   )rw   ri   rr   ri   r‰   ri   )rw   ri   rr   ri   r{   ri   r‰   rŠ   )r‘   r’   r“   r”   ÚhashlibÚsha256rP   Ú__annotations__Úsha384rQ   Úsha512rR   r¤   rs   r   r•   r‚   rˆ   rx   r|   rp   r\   rZ   rO   rO   ò   sÝ   … ñð
 %,§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2Ø$+§N¡N€FÐ!Ó2ó!ó	ð ØðØðØ'4ðà	òó ó ðð Øà8=ðØðØ'5ðà	òó ó ðð ó	#ó ð	#ð ò*ó ð*ó :ô=r\   rO   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)rU   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        ú$ClassVar[type[hashes.HashAlgorithm]]rP   rQ   rR   c                ó   — || _         y r~   r¢   r£   s     rZ   r¤   zRSAAlgorithm.__init__F  ó	   € Ø$ˆD�Mr\   c                ó¦  — 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 # t        t        f$ r t        d«      d ‚w xY ww xY w)NúExpecting a PEM-formatted key.s   ssh-rsa©Úpasswordz(Could not parse the provided public key.)rd   r.   r0   ri   rŽ   Ú	TypeErrorr   Ú
startswithr   r<   r:   r¶   r;   r   r   r¦   s      rZ   rs   zRSAAlgorithm.prepare_keyI  sÌ   € Ü˜#¤¬|Ð<Ô=Ø�
ä˜c¤E¬3 <Ô0ÜÐ @ÓAÐAä# CÓ(ˆIð Ø×'Ñ'¨
Ô3Ü¤Ô.AÀ)Ó.LÓMÐMäÜ%Ô';¸IÐPTÔ'Uóð øô ò  ð Ü¤Ô.AÀ)Ó.LÓMÒMøÜ"Ô$8Ð9ò  Ü)ØBóàð ð úð ús*   Á)B Á0B Â	CÂB0Â-CÂ0CÃCc                 ó   — y r~   rp   r   s     rZ   r‚   zRSAAlgorithm.to_jwka  ó   € ð r\   c                 ó   — y r~   rp   r   s     rZ   r‚   zRSAAlgorithm.to_jwkg  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ÚRSArx   )
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‚   zRSAAlgorithm.to_jwkm  sb  € à)-ˆCä�wÐ 1Õ2à!×1Ñ1Ó3�ð !Ø &˜xÜ*¨7×+AÑ+A×+CÑ+CÓD×KÑKÓMÜ*¨7×+AÑ+A×+CÑ+CÓD×KÑKÓMÜ*¨7¯9©9Ó5×<Ñ<Ó>Ü*¨7¯9©9Ó5×<Ñ<Ó>Ü*¨7¯9©9Ó5×<Ñ<Ó>Ü+¨G¯L©LÓ9×@Ñ@ÓBÜ+¨G¯L©LÓ9×@Ñ@ÓBÜ+¨G¯L©LÓ9×@Ñ@ÓBñ‘ô ˜ (Ô+à!×0Ñ0Ó2�ð !Ø (˜zÜ*¨7¯9©9Ó5×<Ñ<Ó>Ü*¨7¯9©9Ó5×<Ñ<Ó>ñ	‘ô &Ð&CÓDÐDáØ�
ä—z‘z #“Ð&r\   c                ó:  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      d ‚d|v �rTd|v �rOd|v �rJd|v rt        d	«      ‚g d
¢}|D �cg c]  }||v ‘Œ }}t        |«      }|rt        |«      st        d«      d ‚t        t        |d   «      t        |d   «      «      }|rjt        t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      t        |d   «      |¬«      }|j'                  «       S t        |d   «      }t        |j                  ||j                  «      \  }	}
t        ||	|
t!        ||	«      t#        ||
«      t%        |	|
«      |¬«      }|j'                  «       S d|v r6d|v r2t        t        |d   «      t        |d   «      «      j)                  «       S t        d«      ‚# t
        $ r t        d«      d ‚w xY wc c}w )Nr³   r®   rÓ   zNot an RSA keyr×   rÖ   rÕ   Úothz5Unsupported RSA private key: > 2 primes not supported)rØ   rÙ   rÚ   rÛ   rÜ   z@RSA key must include all parameters if any are present besides drØ   rÙ   rÚ   rÛ   rÜ   )r×   rØ   rÙ   rà   rá   râ   rß   rÝ   )rd   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ˆ   zRSAAlgorithm.from_jwk”  s:  € ðIÜ˜c¤3Ô'ÜŸ*™* S›/‘CÜ ¤TÔ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ò&Ü%Ð&6Ó7¸TÐAà�cŠz˜c Sšj¨S°CªZà˜C‘<Ü)ØOóð ò ;�Ø7BÖC¨t˜t sš{ÐC�ÐCÜ"% kÓ"2�á"¬3¨{Ô+;Ü)ØZóàð ô "2Ü'¨¨C©Ó1Ü'¨¨C©Ó1ó"�ñ
 #Ü/Ü-¨c°#©hÓ7Ü-¨c°#©hÓ7Ü-¨c°#©hÓ7Ü0°°T±Ó;Ü0°°T±Ó;Ü0°°T±Ó;Ø'5ô�Gð2 ×*Ñ*Ó,Ð,ô ,¨C°©HÓ5�AÜ4Ø&×(Ñ(¨!¨^×-=Ñ-=ó‘D�A�qô 0ØØØÜ)¨!¨QÓ/Ü)¨!¨QÓ/Ü)¨!¨QÓ/Ø'5ô�Gð ×*Ñ*Ó,Ð,Ø˜‘  s¡
ä'Ü'¨¨C©Ó1Ü'¨¨C©Ó1ó÷ ‘*“,ðô
 &Ð&CÓDÐDøô{ ò IÜ%Ð&=Ó>ÀDÐHðIüò Ds   ‚?G? ÂHÇ?Hc                óh   — |j                  |t        j                  «       | j                  «       «      S r~   )rx   r   ÚPKCS1v15r`   rv   s      rZ   rx   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ï   r`   r   rz   s       rZ   r|   zRSAAlgorithm.verifyß  s=   € ðØ—
‘
˜3 ¤W×%5Ñ%5Ó%7¸¿¹»ÔIØøÜ#ò Ùðús   ‚47 ·	AÁAN©r`   ztype[hashes.HashAlgorithm]r‰   rŸ   )rr   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ò   ©rw   ri   rr   r.   r‰   ri   ©rw   ri   rr   r0   r{   ri   r‰   rŠ   )r‘   r’   r“   r”   r   rP   rÁ   rQ   rR   r¤   rs   r   r•   r‚   rˆ   rx   r|   rp   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                  ó  — 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)rV   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        rÅ   rP   rQ   rR   c                ó   — || _         y r~   r¢   r£   s     rZ   r¤   zECAlgorithm.__init__ð  rÇ   r\   c                ó\  — 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«      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)rd   r&   r(   ri   rŽ   rÌ   r   rÍ   r<   r;   r¶   r:   r   )rl   rr   r§   Ú
crypto_keys       rZ   rs   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~   )rx   r    r`   r   Úcurve)rl   rw   rr   Úder_sigs       rZ   rx   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¶   rd   r&   ré   r|   r    r`   r   )rl   rw   rr   r{   rû   ré   s         rZ   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~   rp   r   s     rZ   r‚   zECAlgorithm.to_jwk'  rÏ   r\   c                 ó   — y r~   rp   r   s     rZ   r‚   zECAlgorithm.to_jwk-  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                  j                  ¬«      j                  «       t        |j                  | j                  j                  ¬«      j                  «       d	œ}t        | t        «      rJt        | j!                  «       j"                  | j                  j                  ¬«      j                  «       |d
<   |r|S t%        j&                  |«      S )NrÝ   úP-256úP-384úP-521Ú	secp256k1úInvalid curve: ÚEC)Ú
bit_length)r®   ÚcrvÚxÚyr×   )rd   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‚   zECAlgorithm.to_jwk3  sf  € ä˜'Ô#:Ô;Ø!(×!3Ñ!3Ó!5×!DÑ!DÓ!F‘Ü˜GÔ%;Ô<Ø!(×!7Ñ!7Ó!9‘ä%Ð&CÓDÐDä˜'Ÿ-™-¬Ô3Ø‘Ü˜GŸM™M¬9Ô5Ø‘Ü˜GŸM™M¬9Ô5Ø‘Ü˜GŸM™M¬9Ô5Ø!‘ä%¨¸¿¹°Ð&GÓHÐHð ØÜ&Ø"×$Ñ$Ø&Ÿ}™}×5Ñ5ô÷ ‘&“(Ü&Ø"×$Ñ$Ø&Ÿ}™}×5Ñ5ô÷ ‘&“(ñ#ˆCô ˜'Ô#:Ô;Ü,Ø×+Ñ+Ó-×;Ñ;Ø&Ÿ}™}×5Ñ5ô÷ ‘&“(ð �C‘ñ
 Ø�
ä—z‘z #“Ð&r\   c                ó8  — 	 t        | t        «      rt        j                  | «      }nt        | t        «      r| }nt
        ‚|j                  d«      dk7  rt        d«      d ‚d|vsd|vrt        d«      d ‚t        |j                  d«      «      }t        |j                  d«      «      }|j                  d«      }|dk(  r7t        |«      t        |«      cxk(  rd	k(  rn nt        «       }n×t        d
«      d ‚|dk(  r7t        |«      t        |«      cxk(  rdk(  rn nt        «       }n›t        d«      d ‚|dk(  r7t        |«      t        |«      cxk(  rdk(  rn nt        «       }n_t        d«      d ‚|dk(  r@t        |«      t        |«      cxk(  rd	k(  rn t        d«      ‚t        «       }nt        d«      ‚t        d|› �«      ‚t        t        j!                  |d¬«      t        j!                  |d¬«      |¬«      }d|vr|j#                  «       S t        |j                  d«      «      }t        |«      t        |«      k7  rt        dt        |«      |«      ‚t%        t        j!                  |d¬«      |«      j'                  «       S # t
        $ r t        d«      d ‚w xY w)Nr³   r®   r  zNot an Elliptic curve keyr  r	  r  r   é    z)Coords should be 32 bytes for curve P-256r  é0   z)Coords should be 48 bytes for curve P-384r  éB   z)Coords should be 66 bytes for curve P-521r  z-Coords should be 32 bytes for curve secp256k1r  Úbig)Ú	byteorder)r  r	  rú   r×   z!D should be {} bytes for curve {})rd   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ˆ   zECAlgorithm.from_jwk_  sr  € ðIÜ˜c¤3Ô'ÜŸ*™* S›/‘CÜ ¤TÔ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ò%Ü%Ð&AÓBÈÐLà˜#‰~ ¨C¡Ü%Ð&AÓBÈÐLä  §¡¨£Ó.ˆAÜ  §¡¨£Ó.ˆAà—G‘G˜E“NˆEð ˜ÒÜ�q“6œS ›VÔ) rÕ)Ü )£‘Iä)ØCóàð ð ˜'Ò!Ü�q“6œS ›VÔ) rÕ)Ü )£‘Iä)ØCóàð ð ˜'Ò!Ü�q“6œS ›VÔ) rÕ)Ü )£‘Iä)ØCóàð ð ˜+Ò%Ü�q“6œS ›VÔ) rÔ)ô *ØGóð ô !*£‘Iä)ØGóð ô &¨¸°wÐ&?Ó@Ð@ä7Ü—.‘. ¨e�.Ó4Ü—.‘. ¨e�.Ó4ØôˆNð ˜#‰~Ø%×0Ñ0Ó2Ð2ä  §¡¨£Ó.ˆAÜ�1‹vœ˜Q›ÒÜ%Ø7¼¸Q»Àóð ô /Ü—‘˜q¨E�Ó2°Nóç‰k‹mðøô{ ò IÜ%Ð&=Ó>ÀDÐHðIús   ‚?J ÊJNrñ   )rr   zAllowedECKeys | str | bytesr‰   ÚAllowedECKeys)rw   ri   rr   r&   r‰   ri   )rw   ri   rr   r  r{   ri   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   rP   rÁ   rQ   rR   r¤   rs   rx   r|   r   r•   r‚   rˆ   rp   r\   rZ   rV   rV   æ  sà   … ñ	ð
 8>·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDØ7=·}±}ˆÐ4ÓDó	%ó	ó<	<ó
	ð" 
Ø	ð	Ø"ð	Ø-:ð	àò	ó 
ó 
ð	ð 
Ø	à>Cð	Ø"ð	Ø-;ð	àò	ó 
ó 
ð	ð 
ó)	'ó 
ð)	'ðV 
òG	ó 
ñG	r\   rV   c                  ó    — e Zd ZdZdd„Zdd„Zy)rW   zA
        Performs a signature using RSASSA-PSS with MGF1
        c           	     óà   — |j                  |t        j                  t        j                  | j	                  «       «      | j	                  «       j
                  ¬«      | j	                  «       «      S )N©ÚmgfÚsalt_length)rx   r   ÚPSSÚMGF1r`   Údigest_sizerv   s      rZ   rx   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  r`   r  r   rz   s       rZ   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”   rx   r|   rp   r\   rZ   rW   rW   ©  s   „ ñ	ó	ô	r\   rW   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
)rX   zŽ
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        c                 ó   — y r~   rp   )rl   Úkwargss     rZ   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)rd   ri   rŽ   r¯   Úencoder;   r:   r<   r,   r-   r*   r+   r   )rl   rr   Úkey_strr§   s       rZ   rs   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$  )rd   rŽ   r&  rx   )rl   rw   rr   Ú	msg_bytess       rZ   rx   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)rd   rŽ   r&  r,   r*   ré   r|   r   )rl   rw   rr   r{   r)  Ú	sig_bytesré   s          rZ   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~   rp   ©rr   r�   s     rZ   r‚   zOKPAlgorithm.to_jwk  rÏ   r\   c                 ó   — y r~   rp   r-  s     rZ   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  )r0  r1  Úencryption_algorithm)r  r×   r®   r  rÝ   )rd   r-   r+   Úpublic_bytesr6   ÚRawr9   r   r   r¯   r°   r±   r,   r*   Úprivate_bytesr8   r7   ré   r   )rr   r�   r  r  r¸   r×   s         rZ   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«      d ‚w xY w# t
        $ r}t        d«      |‚d }~ww xY w)Nr³   r®   r4  zNot an Octet Key Pairr  r2  r3  r  r  zOKP should have "x" parameterr×   zInvalid key parameter)rd   rŽ   r°   r´   rµ   r¶   r   r·   r   r-   Úfrom_public_bytesr+   r,   Úfrom_private_bytesr*   )r‡   r¸   rú   r  r×   Úerrs         rZ   rˆ   zOKPAlgorithm.from_jwkJ  sZ  € ðIÜ˜c¤3Ô'ÜŸ*™* S›/‘CÜ ¤TÔ*Ø‘Cä$Ð$ð �w‰w�u‹~ Ò&Ü%Ð&=Ó>Ð>à—G‘G˜E“NˆEØ˜	Ò! e¨wÒ&6Ü%¨¸°wÐ&?Ó@Ð@à˜#‰~Ü%Ð&EÓFÐFÜ  §¡¨£Ó.ˆAð
HØ˜c‘>Ø 	Ò)Ü/×AÑAÀ!ÓDÐDÜ)×;Ñ;¸AÓ>Ð>Ü$ S§W¡W¨S£\Ó2�Ø˜IÒ%Ü,×?Ñ?ÀÓBÐBÜ&×9Ñ9¸!Ó<Ð<øô- ò IÜ%Ð&=Ó>ÀDÐHðIûô. ò HÜ%Ð&=Ó>ÀCÐGûðHús5   ‚?D/ Â3E ÃE Ã&3E ÄE Ä/EÅ	E"ÅEÅE"N)r"  r   r‰   rŸ   )rr   zAllowedOKPKeys | str | bytesr‰   ÚAllowedOKPKeys)rw   r¾   rr   z#Ed25519PrivateKey | Ed448PrivateKeyr‰   ri   )rw   r¾   rr   r=  r{   r¾   r‰   rŠ   )rr   r=  r�   r‹   r‰   r   rŒ   )rr   r=  r�   r�   r‰   rŽ   )rr   r=  r�   rŠ   r‰   r�   )r‡   r�   r‰   r=  )r‘   r’   r“   r”   r¤   rs   rx   r|   r   r•   r‚   rˆ   rp   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ò   r  r=  ÚAllowedKeysÚAllowedPrivateKeysÚAllowedPublicKeysÚrequires_cryptographyr[   r^   rN   rO   rU   rV   rW   rX   rp   r\   rZ   ú<module>rR     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