Ë
    o Uf4  ã                   ó¤  — d dl Z d dlZd dlZddlmZm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 	 d dlmZ d dlmZ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" d d
l#m$Z$m%Z% d dl&m'Z' d dl(m)Z) dZ* e,g d¢«      Z-d„ Z. G d„ de/«      Z0 G d„ de0«      Z1 G d„ de0«      Z2e*r" G d„ de0«      Z3 G d„ de0«      Z4 G d„ de3«      Z5yy# e+$ r dZ*Y Œ\w xY w)é    Né   )Úconstant_time_compareÚstring_types©ÚInvalidKeyError)Úbase64url_decodeÚbase64url_encodeÚder_to_raw_signatureÚforce_bytesÚforce_unicodeÚfrom_base64url_uintÚraw_to_der_signatureÚto_base64url_uint)Úhashes)Úload_pem_private_keyÚload_pem_public_keyÚload_ssh_public_key)ÚRSAPrivateKeyÚRSAPublicKeyÚRSAPrivateNumbersÚRSAPublicNumbersÚrsa_recover_prime_factorsÚrsa_crt_dmp1Úrsa_crt_dmq1Úrsa_crt_iqmp)ÚEllipticCurvePrivateKeyÚEllipticCurvePublicKey)ÚecÚpadding)Údefault_backend)ÚInvalidSignatureTF©
ÚRS256ÚRS384ÚRS512ÚES256ÚES384ÚES521ÚES512ÚPS256ÚPS384ÚPS512c                  óÀ  — 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                  «      dœ
«       | S )zE
    Returns the algorithms that are implemented by the library.
    )ÚnoneÚHS256ÚHS384ÚHS512r"   )
ÚNoneAlgorithmÚHMACAlgorithmÚSHA256ÚSHA384ÚSHA512Ú
has_cryptoÚupdateÚRSAAlgorithmÚECAlgorithmÚRSAPSSAlgorithm)Údefault_algorithmss    úMC:\Users\user\Documents\project_loop\venv\Lib\site-packages\jwt/algorithms.pyÚget_default_algorithmsr>   &   sç   € ô
 “Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4Üœ}×3Ñ3Ó4ñ	Ðö Ø×!Ñ!Ü!¤,×"5Ñ"5Ó6Ü!¤,×"5Ñ"5Ó6Ü!¤,×"5Ñ"5Ó6Ü ¤×!3Ñ!3Ó4Ü ¤×!3Ñ!3Ó4Ü ¤×!3Ñ!3Ó4Ü ¤×!3Ñ!3Ó4Ü$¤_×%;Ñ%;Ó<Ü$¤_×%;Ñ%;Ó<Ü$¤_×%;Ñ%;Ó<ñ#
ô 	ð Ðó    c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zed„ «       Zed„ «       Z	y)Ú	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     r=   Úprepare_keyzAlgorithm.prepare_keyF   ó
   € ô
 "Ð!r?   c                 ó   — t         ‚)zn
        Returns a digital signature for the specified message
        using the specified key value.
        rC   ©rF   ÚmsgrG   s      r=   ÚsignzAlgorithm.signM   rI   r?   c                 ó   — t         ‚)zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        rC   ©rF   rL   rG   Úsigs       r=   ÚverifyzAlgorithm.verifyT   rI   r?   c                 ó   — t         ‚)z7
        Serializes a given RSA key into a JWK
        rC   ©Úkey_objs    r=   Úto_jwkzAlgorithm.to_jwk[   rI   r?   c                 ó   — t         ‚)zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        rC   )Újwks    r=   Úfrom_jwkzAlgorithm.from_jwkb   rI   r?   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rH   rM   rQ   ÚstaticmethodrU   rX   © r?   r=   rA   rA   B   s>   „ ñò"ò"ò"ð ñ"ó ð"ð ñ"ó ñ"r?   rA   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r2   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   rE   s     r=   rH   zNoneAlgorithm.prepare_keyo   s$   € Ø�"Š9ØˆCàˆ?Ü!Ð"NÓOÐOàˆ
r?   c                  ó   — y)Nr?   r^   rK   s      r=   rM   zNoneAlgorithm.signx   s   € Ør?   c                  ó   — y)NFr^   rO   s       r=   rQ   zNoneAlgorithm.verify{   s   € Ør?   N)rY   rZ   r[   r\   rH   rM   rQ   r^   r?   r=   r2   r2   j   s   „ ñòòór?   r2   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y)	r3   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 ó   — || _         y ©N©Úhash_alg©rF   rh   s     r=   Ú__init__zHMACAlgorithm.__init__ˆ   s	   € Ø ˆ�r?   c                 óz   — t        |«      }g d¢}t        |D �cg c]  }||v ‘Œ c}«      rt        d«      ‚|S c c}w )N)s   -----BEGIN PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   -----BEGIN RSA PUBLIC KEY-----ó   ssh-rsazdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   Úanyr   )rF   rG   Úinvalid_stringsÚstring_values       r=   rH   zHMACAlgorithm.prepare_key‹   sL   € Ü˜#Óˆò
ˆô ¸ÖH¨� Ò#ÒHÔIÜ!ð9ó:ð :ð ˆ
ùò Is   ™8c           	      óh   — t        j                  t        t        t	        | «      «      «      ddœ«      S )NÚoct)ÚkÚkty)ÚjsonÚdumpsr   r	   r   rS   s    r=   rU   zHMACAlgorithm.to_jwkœ   s.   € ä�z‰zÜÔ/´¸GÓ0DÓEÓFØñ
ó ð 	r?   c                 ó†   — t        j                  | «      }|j                  d«      dk7  rt        d«      ‚t	        |d   «      S )Nrs   rq   zNot an HMAC keyrr   )rt   ÚloadsÚgetr   r   )rW   Úobjs     r=   rX   zHMACAlgorithm.from_jwk£   s:   € ä�j‰j˜‹oˆà�7‰7�5‹>˜UÒ"Ü!Ð"3Ó4Ð4ä  C¡Ó)Ð)r?   c                 ó`   — t        j                  ||| j                  «      j                  «       S rf   )ÚhmacÚnewrh   ÚdigestrK   s      r=   rM   zHMACAlgorithm.sign¬   s"   € Ü�x‰x˜˜S $§-¡-Ó0×7Ñ7Ó9Ð9r?   c                 ó:   — t        || j                  ||«      «      S rf   )r   rM   rO   s       r=   rQ   zHMACAlgorithm.verify¯   s   € Ü$ S¨$¯)©)°C¸Ó*=Ó>Ð>r?   N)rY   rZ   r[   r\   ÚhashlibÚsha256r4   Úsha384r5   Úsha512r6   rj   rH   r]   rU   rX   rM   rQ   r^   r?   r=   r3   r3      s`   „ ñð �^‰^€FØ�^‰^€FØ�^‰^€Fò!òð" ñó ðð ñ*ó ð*ò:ó?r?   r3   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y)	r9   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 ó   — || _         y rf   rg   ri   s     r=   rj   zRSAAlgorithm.__init__¾   ó	   € Ø$ˆD�Mr?   c                 ó\  — t        |t        «      st        |t        «      r|S t        |t        «      rKt	        |«      }	 |j                  d«      rt        |t        «       ¬«      }nt        |d t        «       ¬«      }|S t        d«      ‚# t        $ r t        |t        «       ¬«      }Y |S w xY w)Nrl   ©Úbackend©Úpasswordrˆ   úExpecting a PEM-formatted key.)Ú
isinstancer   r   r   r   Ú
startswithr   r    r   Ú
ValueErrorr   Ú	TypeErrorrE   s     r=   rH   zRSAAlgorithm.prepare_keyÁ   sŸ   € Ü˜#œ}Ô-Ü˜#œ|Ô,Ø�
ä˜#œ|Ô,Ü! #Ó&�ðNØ—~‘~ jÔ1Ü1°#¼Ó?PÔQ™ä2°3ÀÌÓO`Ôa˜ð ˆJô  Ð @ÓAÐAøô "ò NÜ-¨c¼?Ó;LÔM‘Cð ˆJðNús   ¿=B	 Â	B+Â*B+c                 óD  — d }t        | dd «      �r| j                  «       }ddgt        t        |j                  j
                  «      «      t        t        |j                  j                  «      «      t        t        |j                  «      «      t        t        |j                  «      «      t        t        |j                  «      «      t        t        |j                  «      «      t        t        |j                  «      «      t        t        |j                  «      «      dœ
}nit        | dd «      rQ| j	                  «       }ddgt        t        |j
                  «      «      t        t        |j                  «      «      dœ}nt        d«      ‚t        j                  |«      S )NÚprivate_numbersÚRSArM   )
rs   Úkey_opsÚnÚeÚdÚpÚqÚdpÚdqÚqirQ   )rs   r“   r”   r•   úNot a public or private key)Úgetattrr‘   r   r   Úpublic_numbersr”   r•   r–   r—   r˜   Údmp1Údmq1Úiqmpr   rt   ru   )rT   ry   Únumberss      r=   rU   zRSAAlgorithm.to_jwkÕ   s@  € àˆCä�wÐ 1°4Õ8à!×1Ñ1Ó3�ð !Ø &˜xÜ&Ô'8¸×9OÑ9O×9QÑ9QÓ'RÓSÜ&Ô'8¸×9OÑ9O×9QÑ9QÓ'RÓSÜ&Ô'8¸¿¹Ó'CÓDÜ&Ô'8¸¿¹Ó'CÓDÜ&Ô'8¸¿¹Ó'CÓDÜ'Ô(9¸'¿,¹,Ó(GÓHÜ'Ô(9¸'¿,¹,Ó(GÓHÜ'Ô(9¸'¿,¹,Ó(GÓHñ‘ô ˜ (¨DÔ1à!×0Ñ0Ó2�ð !Ø (˜zÜ&Ô'8¸¿¹Ó'CÓDÜ&Ô'8¸¿¹Ó'CÓDñ	‘ô &Ð&CÓDÐDä—:‘:˜c“?Ð"r?   c                 óê  — 	 t        j                  | «      }|j	                  d«      dk7  rt        d«      ‚d|v �rMd|v �rHd|v �rCd|v rt        d	«      ‚g d
¢}|D �cg c]  }||v ‘Œ }}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   «      |¬«      }nbt        |d   «      }t        |j                  ||j                  «      \  }	}
t        ||	|
t        ||	«      t        ||
«      t        |	|
«      |¬«      }|j!                  t#        «       «      S d|v rAd|v r=t        t        |d   «      t        |d   «      «      }|j%                  t#        «       «      S t        d«      ‚# t        $ r t        d«      ‚w xY wc c}w )NzKey is not valid JSONrs   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œ   )rt   rw   rŽ   r   rx   rm   Úallr   r   r   r   r”   r•   r   r   r   Úprivate_keyr    Ú
public_key)rW   ry   Úother_propsÚpropÚprops_foundÚany_props_foundrž   r¢   r–   r—   r˜   s              r=   rX   zRSAAlgorithm.from_jwkù   s  € ð?Ü—j‘j “o�ð �w‰w�u‹~ Ò&Ü%Ð&6Ó7Ð7à�cŠz˜c Sšj¨S°CªZà˜C‘<Ü)Ð*aÓbÐbâ:�Ø7BÖC¨t˜t sš{ÐC�ÐCÜ"% kÓ"2�á"¬3¨{Ô+;Ü)Ð*lÓmÐmä!1Ü'¨¨C©Ó1Ô3FÀsÈ3ÁxÓ3Pó"�ñ #Ü/Ü-¨c°#©hÓ7Ü-¨c°#©hÓ7Ü-¨c°#©hÓ7Ü0°°T±Ó;Ü0°°T±Ó;Ü0°°T±Ó;Ø'5ô‘Gô ,¨C°©HÓ5�AÜ4Ø&×(Ñ(¨!¨^×-=Ñ-=ó‘D�A�qô 0ØØØÜ)¨!¨QÓ/Ü)¨!¨QÓ/Ü)¨!¨QÓ/Ø'5ô�Gð ×*Ñ*¬?Ó+<Ó=Ð=Ø˜‘  s¡
ä*Ü'¨¨C©Ó1Ô3FÀsÈ3ÁxÓ3Pó�ð ×)Ñ)¬/Ó*;Ó<Ð<ä%Ð&CÓDÐDøôs ò ?Ü%Ð&=Ó>Ð>ð?üò Ds   ‚G ÁG0ÇG-c                 óh   — |j                  |t        j                  «       | j                  «       «      S rf   )rM   r   ÚPKCS1v15rh   rK   s      r=   rM   zRSAAlgorithm.sign8  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)rQ   r   r­   rh   r!   rO   s       r=   rQ   zRSAAlgorithm.verify;  s=   € ðØ—
‘
˜3 ¤W×%5Ñ%5Ó%7¸¿¹»ÔIØøÜ#ò Ùðús   ‚47 ·	AÁAN)rY   rZ   r[   r\   r   r4   r5   r6   rj   rH   r]   rU   rX   rM   rQ   r^   r?   r=   r9   r9   µ   se   „ ñ	ð —‘ˆØ—‘ˆØ—‘ˆò	%ò	ð( 
ñ!	#ó 
ð!	#ðF 
ñ<	Eó 
ð<	Eò|	Fó	r?   r9   c                   óp   — e Zd ZdZej
                  Zej                  Zej                  Zd„ Zd„ Z	d„ Z
d„ Zy)r:   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 ó   — || _         y rf   rg   ri   s     r=   rj   zECAlgorithm.__init__K  r…   r?   c                 ó\  — t        |t        «      st        |t        «      r|S t        |t        «      rJt	        |«      }	 |j                  d«      rt        |t        «       ¬«      }nt        |t        «       ¬«      }|S t        d«      ‚# t        $ r t        |d t        «       ¬«      }Y |S w xY w)Ns   ecdsa-sha2-r‡   r‰   r‹   )rŒ   r   r   r   r   r�   r   r    r   rŽ   r   r�   rE   s     r=   rH   zECAlgorithm.prepare_keyN  s¡   € Ü˜#Ô6Ô7Ü˜#Ô5Ô6Ø�
ä˜#œ|Ô,Ü! #Ó&�ð
^Ø—~‘~ nÔ5Ü1°#¼Ó?PÔQ™ä1°#¼Ó?PÔQ˜ð ˆJô  Ð @ÓAÐAøô	 "ò ^Ü.¨s¸TÌ?ÓK\Ô]‘Cð
 ˆJð^ús   ¿<B ÂB+Â*B+c                 ó”   — |j                  |t        j                  | j                  «       «      «      }t	        ||j
                  «      S rf   )rM   r   ÚECDSArh   r
   Úcurve)rF   rL   rG   Úder_sigs       r=   rM   zECAlgorithm.signf  s2   € Ø—h‘h˜s¤B§H¡H¨T¯]©]«_Ó$=Ó>ˆGä'¨°·±Ó;Ð;r?   c                 óØ   — 	 t        ||j                  «      }	 |j                  ||t	        j
                  | j                  «       «      «       y# t        $ r Y yw xY w# t        $ r Y yw xY w)NFT)r   r´   rŽ   rQ   r   r³   rh   r!   )rF   rL   rG   rP   rµ   s        r=   rQ   zECAlgorithm.verifyk  se   € ðÜ.¨s°C·I±IÓ>�ðØ—
‘
˜7 C¬¯©°$·-±-³/Ó)BÔCØøô ò Ùðûô $ò Ùðús"   ‚A ™4A Á	AÁAÁ	A)Á(A)N)rY   rZ   r[   r\   r   r4   r5   r6   rj   rH   rM   rQ   r^   r?   r=   r:   r:   B  s8   „ ñ	ð —‘ˆØ—‘ˆØ—‘ˆò	%ò	ò0	<ó

	r?   r:   c                   ó   — e Zd ZdZd„ Zd„ Zy)r;   zA
        Performs a signature using RSASSA-PSS with MGF1
        c           	      óØ   — |j                  |t        j                  t        j                  | j	                  «       «      | j                  j
                  ¬«      | j	                  «       «      S )N©ÚmgfÚsalt_length)rM   r   ÚPSSÚMGF1rh   Údigest_sizerK   s      r=   rM   zRSAPSSAlgorithm.sign|  sL   € Ø—8‘8ØÜ—‘ÜŸ™ T§]¡]£_Ó5Ø $§¡× 9Ñ 9ôð —‘“óð r?   c           
      óü   — 	 |j                  ||t        j                  t        j                  | j	                  «       «      | j                  j
                  ¬«      | j	                  «       «       y# t        $ r Y yw xY w)Nr¹   TF)rQ   r   r¼   r½   rh   r¾   r!   rO   s       r=   rQ   zRSAPSSAlgorithm.verify†  sf   € ðØ—
‘
ØØÜ—K‘KÜ#ŸL™L¨¯©«Ó9Ø$(§M¡M×$=Ñ$=ôð —M‘M“Oôð øÜ#ò Ùðús   ‚A,A/ Á/	A;Á:A;N)rY   rZ   r[   r\   rM   rQ   r^   r?   r=   r;   r;   w  s   „ ñ	ò	ó	r?   r;   )6r   r{   rt   Úcompatr   r   Ú
exceptionsr   Úutilsr   r	   r
   r   r   r   r   r   Úcryptography.hazmat.primitivesr   Ú,cryptography.hazmat.primitives.serializationr   r   r   Ú-cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r   Ú,cryptography.hazmat.primitives.asymmetric.ecr   r   Ú)cryptography.hazmat.primitives.asymmetricr   r   Úcryptography.hazmat.backendsr    Úcryptography.exceptionsr!   r7   ÚImportErrorÚsetÚrequires_cryptographyr>   ÚobjectrA   r2   r3   r9   r:   r;   r^   r?   r=   ú<module>rÎ      så   ðÛ Û Û ÷ 8Ý '÷÷ ó ðÝ5÷ñ ÷÷ ó ÷÷ FÝ<Ý8à€Jñ ò Jó KÐ òô8%"�ô %"ôP�Iô ô*1?�Iô 1?ñh ôK�yô KôZ3�iô 3ôj˜,õ ðI øði ò Ø‚Jðús   °AC ÃCÃC