o
    tBhS                     @   s  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 zRd 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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*m+Z+ dZ,W n e-y   dZ,Y nw h dZ.dd Z/G dd dZ0G dd de0Z1G dd de0Z2e,rG dd de0Z3G dd de0Z4G dd de3Z5G dd de0Z6dS dS )    N   InvalidKeyError)base64url_decodebase64url_encodeder_to_raw_signatureforce_bytesfrom_base64url_uintraw_to_der_signatureto_base64url_uint)InvalidSignature)hashes)ecpadding)EllipticCurvePrivateKeyEllipticCurvePublicKey)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                  C   s   t  ttjttjttjd} trG| 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)r+   r,   r-   r#   r.   r$   r&   r%   r(   r)   r*   r'   )NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmRSAPSSAlgorithmEd25519Algorithm)default_algorithms r?   e/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/jwt/algorithms.pyget_default_algorithmsE   s0   rA   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_keyl      zAlgorithm.prepare_keyc                 C   rC   )zn
        Returns a digital signature for the specified message
        using the specified key value.
        rD   rG   msgrH   r?   r?   r@   signs   rJ   zAlgorithm.signc                 C   rC   )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        rD   rG   rL   rH   sigr?   r?   r@   verifyz   rJ   zAlgorithm.verifyc                 C   rC   )z7
        Serializes a given RSA key into a JWK
        rD   key_objr?   r?   r@   to_jwk   rJ   zAlgorithm.to_jwkc                 C   rC   )zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        rD   )jwkr?   r?   r@   from_jwk   rJ   zAlgorithm.from_jwkN)
__name__
__module____qualname____doc__rI   rM   rP   staticmethodrS   rU   r?   r?   r?   r@   rB   g   s    
rB   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r3   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   rF   r?   r?   r@   rI      s
   zNoneAlgorithm.prepare_keyc                 C      dS )N    r?   rK   r?   r?   r@   rM         zNoneAlgorithm.signc                 C   r\   )NFr?   rN   r?   r?   r@   rP      r^   zNoneAlgorithm.verifyN)rV   rW   rX   rY   rI   rM   rP   r?   r?   r?   r@   r3      s
    	r3   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 )r4   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 C   
   || _ d S Nhash_algrG   rb   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                 3   s    | ]}| v V  qd S r`   r?   ).0string_valuerH   r?   r@   	<genexpr>   s    z,HMACAlgorithm.prepare_key.<locals>.<genexpr>zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   anyr   )rG   rH   invalid_stringsr?   ri   r@   rI      s   zHMACAlgorithm.prepare_keyc                 C   s   t tt|  ddS )Noct)kkty)jsondumpsr   r   decoderQ   r?   r?   r@   rS      s
   zHMACAlgorithm.to_jwkc                 C   sh   zt | trt| }n
t | tr| }ntW n ty"   tdw |ddkr.tdt|d S )NKey is not valid JSONro   rm   zNot an HMAC keyrn   )	
isinstancestrrp   loadsdict
ValueErrorr   getr   )rT   objr?   r?   r@   rU      s   

zHMACAlgorithm.from_jwkc                 C   s   t ||| j S r`   )hmacnewrb   digestrK   r?   r?   r@   rM         zHMACAlgorithm.signc                 C   s   t || ||S r`   )r{   compare_digestrM   rN   r?   r?   r@   rP      r~   zHMACAlgorithm.verifyN)rV   rW   rX   rY   hashlibsha256r5   sha384r6   sha512r7   rd   rI   rZ   rS   rU   rM   rP   r?   r?   r?   r@   r4      s    

r4   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 )r:   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 C   r_   r`   ra   rc   r?   r?   r@   rd      re   zRSAAlgorithm.__init__c                 C   s   t |ts
t |tr|S t |ttfr<t|}z|dr"t|}n	t|d d}W |S W |S  t	y;   t
|}Y |S w td)Nrf   passwordExpecting a PEM-formatted key.)rt   r   r   bytesru   r   
startswithr"   r    rx   r!   	TypeErrorrF   r?   r?   r@   rI      s    


zRSAAlgorithm.prepare_keyc                 C   s   d }t | dd rE|  }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 rb|  }ddgt|j t|j d}ntdt|S )Nprivate_numbersRSArM   )
ro   key_opsnedpqdpdqqirP   )ro   r   r   r   Not a public or private key)getattrr   r   public_numbersr   rr   r   r   r   r   dmp1dmq1iqmpr   rp   rq   )rR   rz   numbersr?   r?   r@   rS     s.   
zRSAAlgorithm.to_jwkc           	   	      s  zt | trt|  n
t | tr|  ntW n ty"   tdw  ddkr.tdd v rd v rd v rd v rBtd	g d
} fdd|D }t|}|r]t	|s]tdt
t d t d }|rtt d t d t d t d t d t d |d}| S t d }t|j||j\}}t|||t||t||t|||d}| S d v rd v rt
t d t d }| S td)Nrs   ro   r   zNot an RSA keyr   r   r   othz5Unsupported RSA private key: > 2 primes not supported)r   r   r   r   r   c                    s   g | ]}| v qS r?   r?   )rg   proprz   r?   r@   
<listcomp>C  s    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   )rt   ru   rp   rv   rw   rx   r   ry   rk   allr   r	   r   r   r   r   r   r   r   private_key
public_key)	rT   other_propsprops_foundany_props_foundr   r   r   r   r   r?   r   r@   rU   ,  sx   













zRSAAlgorithm.from_jwkc                 C   s   | |t |  S r`   )rM   r   PKCS1v15rb   rK   r?   r?   r@   rM   v  s   zRSAAlgorithm.signc                 C   s4   z| ||t |   W dS  ty   Y dS w )NTF)rP   r   r   rb   r   rN   r?   r?   r@   rP   y  s   zRSAAlgorithm.verifyN)rV   rW   rX   rY   r   r5   r6   r7   rd   rI   rZ   rS   rU   rM   rP   r?   r?   r?   r@   r:      s    
#
Ir:   c                   @   sN   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ed
d ZdS )r;   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 C   r_   r`   ra   rc   r?   r?   r@   rd     re   zECAlgorithm.__init__c                 C   s   t |ts
t |tr|S t |ttfr<t|}z|dr"t|}nt|}W |S W |S  t	y;   t
|d d}Y |S w td)Ns   ecdsa-sha2-r   r   )rt   r   r   r   ru   r   r   r"   r!   rx   r    r   rF   r?   r?   r@   rI     s$   


	zECAlgorithm.prepare_keyc                 C   s"   | |t|  }t||jS r`   )rM   r   ECDSArb   r   curve)rG   rL   rH   der_sigr?   r?   r@   rM     s   zECAlgorithm.signc                 C   sl   zt ||j}W n
 ty   Y dS w zt|tr| }|||t| 	  W dS  t
y5   Y dS w )NFT)r
   r   rx   rt   r   r   rP   r   r   rb   r   )rG   rL   rH   rO   r   r?   r?   r@   rP     s   
zECAlgorithm.verifyc                 C   s&  zt | trt| }n
t | tr| }ntW n ty"   tdw |ddkr.tdd|vs6d|vr:tdt|d}t|d}|d}|dkrmt	|t	|  kr_d	krin td
t
 }nktd
|dkrt	|t	|  krdkrn tdt
 }nKtd|dkrt	|t	|  krdkrn tdt
 }n+td|dkrt	|t	|  krd	krn tdt
 }ntdtd| t
jtj|ddtj|dd|d}d|vr| S t|d}t	|t	|krtdt	||t
tj|dd| S )Nrs   ro   ECzNot an Elliptic curve keyxycrvzP-256    z)Coords should be 32 bytes for curve P-256zP-3840   z)Coords should be 48 bytes for curve P-384zP-521B   z)Coords should be 66 bytes for curve P-521	secp256k1z-Coords should be 32 bytes for curve secp256k1Invalid curve: big)	byteorder)r   r   r   r   z!D should be {} bytes for curve {})rt   ru   rp   rv   rw   rx   r   ry   r   lenr   	SECP256R1	SECP384R1	SECP521R1	SECP256K1EllipticCurvePublicNumbersint
from_bytesr   EllipticCurvePrivateNumbersr   )rT   rz   r   r   r   	curve_objr   r   r?   r?   r@   rU     sv   







zECAlgorithm.from_jwkN)rV   rW   rX   rY   r   r5   r6   r7   rd   rI   rM   rP   rZ   rU   r?   r?   r?   r@   r;     s    r;   c                   @   s    e Zd ZdZdd Zdd ZdS )r<   zA
        Performs a signature using RSASSA-PSS with MGF1
        c                 C   s*   | |tjt|  | jjd|  S )Nmgfsalt_length)rM   r   PSSMGF1rb   digest_sizerK   r?   r?   r@   rM      s   zRSAPSSAlgorithm.signc              	   C   sH   z| ||tjt|  | jjd|   W dS  ty#   Y dS w )Nr   TF)rP   r   r   r   rb   r   r   rN   r?   r?   r@   rP   
  s   	zRSAPSSAlgorithm.verifyN)rV   rW   rX   rY   rM   rP   r?   r?   r?   r@   r<     s    
r<   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zed
d Z	edd Z
dS )r=   z
        Performs signing and verification operations using Ed25519

        This class requires ``cryptography>=2.6`` to be installed.
        c                 K   s   d S r`   r?   )rG   kwargsr?   r?   r@   rd      r^   zEd25519Algorithm.__init__c                 C   s   t |ttfr	|S t |ttfr=t |tr|d}|d}d|v r't|S d|v r1t|d dS |dd dkr=t	|S t
d)	Nutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEr   r      zssh-z)Expecting a PEM-formatted or OpenSSH key.)rt   r   r   r   ru   encoderr   r!   r    r"   r   )rG   rH   str_keyr?   r?   r@   rI   #  s   


zEd25519Algorithm.prepare_keyc                 C   s$   t |turt|dn|}||S )a  
            Sign a message ``msg`` using the Ed25519 private key ``key``
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey key: A :class:`.Ed25519PrivateKey` instance
            :return bytes signature: The signature, as bytes
            r   )typer   rM   rK   r?   r?   r@   rM   6  s   
zEd25519Algorithm.signc                 C   sr   z,t |turt|dn|}t |turt|dn|}t|tr$| }||| W dS  tjjy8   Y dS w )a  
            Verify a given ``msg`` against a signature ``sig`` using the Ed25519 key ``key``

            :param str|bytes sig: Ed25519 signature to check ``msg`` against
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey|Ed25519PublicKey key: A private or public Ed25519 key instance
            :return bool verified: True if signature is valid, False if not.
            r   TF)	r   r   rt   r   r   rP   cryptography
exceptionsr   rN   r?   r?   r@   rP   @  s   	
zEd25519Algorithm.verifyc                 C   s   t | tr| jtjtjd}ttt	|
 dddS t | trN| jtjtjt d}|  jtjtjd}ttt	|
 tt	|
 dddS td)N)encodingformatOKPEd25519)r   ro   r   )r   r   encryption_algorithm)r   r   ro   r   r   )rt   r   public_bytesr   Rawr   rp   rq   r   r   rr   r   private_bytesr   r   r   r   )rH   r   r   r?   r?   r@   rS   T  s:   

	zEd25519Algorithm.to_jwkc              
   C   s   zt | trt| }n
t | tr| }ntW n ty"   tdw |ddkr.td|d}|dkr>td| d|vrFtd	t|d}zd
|vrXt	
|W S t|d
}t|W S  tyu } ztd|d }~ww )Nrs   ro   r   zNot an Octet Key Pairr   r   r   r   zOKP should have "x" parameterr   zInvalid key parameter)rt   ru   rp   rv   rw   rx   r   ry   r   r   from_public_bytesr   from_private_bytes)rT   rz   r   r   r   errr?   r?   r@   rU   {  s6   



zEd25519Algorithm.from_jwkN)rV   rW   rX   rY   rd   rI   rM   rP   rZ   rS   rU   r?   r?   r?   r@   r=     s    

&r=   )7r   r{   rp   r   r   utilsr   r   r   r   r	   r
   r   cryptography.exceptionsr   r   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   ,cryptography.hazmat.primitives.asymmetric.ecr   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"   r8   ModuleNotFoundErrorrequires_cryptographyrA   rB   r3   r4   r:   r;   r<   r=   r?   r?   r?   r@   <module>   s@    $
($

")@ {  