o
    Y¨Êh4  ã                   @   s|  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 zDd 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*W n e+y}   dZ*Y nw e,g d¢ƒZ-dd„ Z.G dd„ de/ƒZ0G dd„ de0ƒZ1G dd„ de0ƒZ2e*r¼G dd„ de0ƒZ3G dd„ de0ƒZ4G dd„ de3ƒZ5dS dS )é    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                  C   s†   t ƒ ttjƒttjƒttjƒdœ} trA|  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_algorithms© r;   ú@/var/www/html/env/lib/python3.10/site-packages/jwt/algorithms.pyÚget_default_algorithms&   s&   üör=   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zedd	„ ƒZed
d„ ƒZ	dS )Ú	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    c                 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Úkeyr;   r;   r<   Úprepare_keyF   ó   zAlgorithm.prepare_keyc                 C   r?   )zn
        Returns a digital signature for the specified message
        using the specified key value.
        r@   ©rC   ÚmsgrD   r;   r;   r<   ÚsignM   rF   zAlgorithm.signc                 C   r?   )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        r@   ©rC   rH   rD   Úsigr;   r;   r<   ÚverifyT   rF   zAlgorithm.verifyc                 C   r?   )z7
        Serializes a given RSA key into a JWK
        r@   ©Úkey_objr;   r;   r<   Úto_jwk[   rF   zAlgorithm.to_jwkc                 C   r?   )zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        r@   )Újwkr;   r;   r<   Úfrom_jwkb   rF   zAlgorithm.from_jwkN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   rI   rL   ÚstaticmethodrO   rQ   r;   r;   r;   r<   r>   B   s    
r>   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r0   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c                 C   s    |dkrd }|d urt dƒ‚|S )NÚ z*When alg = "none", key value must be None.r   rB   r;   r;   r<   rE   o   s
   zNoneAlgorithm.prepare_keyc                 C   ó   dS )Nó    r;   rG   r;   r;   r<   rI   x   ó   zNoneAlgorithm.signc                 C   rX   )NFr;   rJ   r;   r;   r<   rL   {   rZ   zNoneAlgorithm.verifyN)rR   rS   rT   rU   rE   rI   rL   r;   r;   r;   r<   r0   j   s
    	r0   c                   @   sZ   e Zd ZdZejZejZej	Z
dd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
d„ Zdd„ ZdS )r1   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 C   ó
   || _ d S ©N©Úhash_alg©rC   r^   r;   r;   r<   Ú__init__ˆ   ó   
zHMACAlgorithm.__init__c                    s2   t ˆ ƒ‰ g d¢}t‡ fdd„|D ƒƒrtdƒ‚ˆ S )N)s   -----BEGIN PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   -----BEGIN RSA PUBLIC KEY-----ó   ssh-rsac                    ó   g | ]}|ˆ v ‘qS r;   r;   )Ú.0Ústring_value©rD   r;   r<   Ú
<listcomp>•   ó    z-HMACAlgorithm.prepare_key.<locals>.<listcomp>zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r
   Úanyr   )rC   rD   Úinvalid_stringsr;   rf   r<   rE   ‹   s   ÿzHMACAlgorithm.prepare_keyc                 C   s   t  ttt| ƒƒƒddœ¡S )NÚoct)ÚkÚkty)ÚjsonÚdumpsr   r   r
   rM   r;   r;   r<   rO   œ   s   þzHMACAlgorithm.to_jwkc                 C   s,   t  | ¡}| d¡dkrtdƒ‚t|d ƒS )Nrm   rk   zNot an HMAC keyrl   )rn   ÚloadsÚgetr   r   )rP   Úobjr;   r;   r<   rQ   £   s   
zHMACAlgorithm.from_jwkc                 C   s   t  ||| j¡ ¡ S r\   )ÚhmacÚnewr^   ÚdigestrG   r;   r;   r<   rI   ¬   s   zHMACAlgorithm.signc                 C   s   t ||  ||¡ƒS r\   )r   rI   rJ   r;   r;   r<   rL   ¯   s   zHMACAlgorithm.verifyN)rR   rS   rT   rU   ÚhashlibÚsha256r2   Úsha384r3   Úsha512r4   r`   rE   rV   rO   rQ   rI   rL   r;   r;   r;   r<   r1      s    

r1   c                   @   sZ   e Zd ZdZejZejZejZdd„ Zdd„ Z	e
dd„ ƒZe
dd	„ ƒZd
d„ Zdd„ ZdS )r7   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 C   r[   r\   r]   r_   r;   r;   r<   r`   ¾   ra   zRSAAlgorithm.__init__c                 C   sŒ   t |tƒs
t |tƒr|S t |tƒrBt|ƒ}z| d¡r#t|tƒ d�}nt|d tƒ d�}W |S W |S  t	yA   t
|tƒ d�}Y |S w tdƒ‚)Nrb   ©Úbackend©Úpasswordr{   úExpecting a PEM-formatted key.)Ú
isinstancer   r   r   r
   Ú
startswithr   r   r   Ú
ValueErrorr   Ú	TypeErrorrB   r;   r;   r<   rE   Á   s$   
ÿ

øûûzRSAAlgorithm.prepare_keyc                 C   sÖ   d }t | dd ƒrE|  ¡ }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œ
}n!t | dd ƒrb|  ¡ }ddgtt|jƒƒtt|jƒƒdœ}ntdƒ‚t |¡S )NÚprivate_numbersÚRSArI   )
rm   Úkey_opsÚnÚeÚdÚpÚqÚdpÚdqÚqirL   )rm   r…   r†   r‡   úNot a public or private key)Úgetattrrƒ   r   r   Úpublic_numbersr†   r‡   rˆ   r‰   rŠ   Údmp1Údmq1Úiqmpr   rn   ro   )rN   rr   Únumbersr;   r;   r<   rO   Õ   s.   öü
zRSAAlgorithm.to_jwkc           	   	      s’  zt  | ¡‰ W n ty   tdƒ‚w ˆ  d¡dkrtdƒ‚dˆ v rªdˆ v rªdˆ v rªdˆ v r2td	ƒ‚g d
¢}‡ fdd„|D ƒ}t|ƒ}|rMt|ƒsMtdƒ‚ttˆ d ƒtˆ d ƒƒ}|r€t	tˆ d ƒtˆ d ƒtˆ d ƒtˆ d ƒtˆ d ƒtˆ d ƒ|d�}n$tˆ d ƒ}t
|j||jƒ\}}t	|||t||ƒt||ƒt||ƒ|d�}| tƒ ¡S dˆ v rÅdˆ v rÅttˆ d ƒtˆ d ƒƒ}| tƒ ¡S tdƒ‚)NzKey is not valid JSONrm   r„   zNot an RSA keyrˆ   r‡   r†   Úothz5Unsupported RSA private key: > 2 primes not supported)r‰   rŠ   r‹   rŒ   r�   c                    rc   r;   r;   )rd   Úprop©rr   r;   r<   rg   	  rh   z)RSAAlgorithm.from_jwk.<locals>.<listcomp>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Ž   )rn   rp   r�   r   rq   ri   Úallr   r   r   r   r†   r‡   r   r   r   Úprivate_keyr   Ú
public_key)	rP   Úother_propsÚprops_foundÚany_props_foundr�   r”   rˆ   r‰   rŠ   r;   r—   r<   rQ   ù   s`   ÿÿ





ù

ÿù
ÿzRSAAlgorithm.from_jwkc                 C   s   |  |t ¡ |  ¡ ¡S r\   )rI   r   ÚPKCS1v15r^   rG   r;   r;   r<   rI   8  s   zRSAAlgorithm.signc                 C   s4   z|  ||t ¡ |  ¡ ¡ W dS  ty   Y dS w )NTF)rL   r   rž   r^   r    rJ   r;   r;   r<   rL   ;  s   ÿzRSAAlgorithm.verifyN)rR   rS   rT   rU   r   r2   r3   r4   r`   rE   rV   rO   rQ   rI   rL   r;   r;   r;   r<   r7   µ   s    
#
>r7   c                   @   sB   e Zd ZdZejZejZejZdd„ Zdd„ Z	dd„ Z
dd	„ Zd
S )r8   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 C   r[   r\   r]   r_   r;   r;   r<   r`   K  ra   zECAlgorithm.__init__c                 C   sŒ   t |tƒs
t |tƒr|S t |tƒrBt|ƒ}z| d¡r#t|tƒ d�}n
t|tƒ d�}W |S W |S  t	yA   t
|d tƒ d�}Y |S w tdƒ‚)Ns   ecdsa-sha2-rz   r|   r~   )r   r   r   r   r
   r€   r   r   r   r�   r   r‚   rB   r;   r;   r<   rE   N  s$   
ÿ

÷	úúzECAlgorithm.prepare_keyc                 C   s"   |  |t |  ¡ ¡¡}t||jƒS r\   )rI   r   ÚECDSAr^   r	   Úcurve)rC   rH   rD   Úder_sigr;   r;   r<   rI   f  s   zECAlgorithm.signc                 C   sZ   zt ||jƒ}W n
 ty   Y dS w z| ||t |  ¡ ¡¡ W dS  ty,   Y dS w )NFT)r   r    r�   rL   r   rŸ   r^   r    )rC   rH   rD   rK   r¡   r;   r;   r<   rL   k  s   ÿÿzECAlgorithm.verifyN)rR   rS   rT   rU   r   r2   r3   r4   r`   rE   rI   rL   r;   r;   r;   r<   r8   B  s    r8   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r9   zA
        Performs a signature using RSASSA-PSS with MGF1
        c                 C   s*   |  |tjt |  ¡ ¡| jjd�|  ¡ ¡S )N©ÚmgfÚsalt_length)rI   r   ÚPSSÚMGF1r^   Údigest_sizerG   r;   r;   r<   rI   |  s   þúzRSAPSSAlgorithm.signc              	   C   sH   z|  ||tjt |  ¡ ¡| jjd�|  ¡ ¡ W dS  ty#   Y dS w )Nr¢   TF)rL   r   r¥   r¦   r^   r§   r    rJ   r;   r;   r<   rL   †  s   þù	ÿzRSAPSSAlgorithm.verifyN)rR   rS   rT   rU   rI   rL   r;   r;   r;   r<   r9   w  s    
r9   )6rv   rs   rn   Ú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    r5   ÚImportErrorÚsetÚrequires_cryptographyr=   Úobjectr>   r0   r1   r7   r8   r9   r;   r;   r;   r<   Ú<module>   s<    ((ÿ(4 5 �»