<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    tJ`S                 @   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 yd 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-k
r   dZ,Y nX ddddddddddddh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 )*    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RS256RS384RS512ES256ES256KES384ES521ES512PS256PS384PS512EdDSAc              C   s   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.
    )ZnoneZHS256ZHS384Z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)Zdefault_algorithms r9   ?/opt/alt/python37/lib/python3.7/site-packages/jwt/algorithms.pyget_default_algorithmsE   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   s   t dS )z
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        N)NotImplementedError)selfkeyr9   r9   r:   prepare_keyl   s    zAlgorithm.prepare_keyc             C   s   t dS )zn
        Returns a digital signature for the specified message
        using the specified key value.
        N)r=   )r>   msgr?   r9   r9   r:   signs   s    zAlgorithm.signc             C   s   t dS )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        N)r=   )r>   rA   r?   sigr9   r9   r:   verifyz   s    zAlgorithm.verifyc             C   s   t dS )z7
        Serializes a given RSA key into a JWK
        N)r=   )key_objr9   r9   r:   to_jwk   s    zAlgorithm.to_jwkc             C   s   t dS )zb
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        N)r=   )jwkr9   r9   r:   from_jwk   s    zAlgorithm.from_jwkN)
__name__
__module____qualname____doc__r@   rB   rD   staticmethodrF   rH   r9   r9   r9   r:   r<   g   s   r<   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r.   zZ
    Placeholder for use when no signing or verification
    operations are required.
    c             C   s    |dkrd }|d k	rt d|S )N z*When alg = "none", key value must be None.)r   )r>   r?   r9   r9   r:   r@      s
    zNoneAlgorithm.prepare_keyc             C   s   dS )N    r9   )r>   rA   r?   r9   r9   r:   rB      s    zNoneAlgorithm.signc             C   s   dS )NFr9   )r>   rA   r?   rC   r9   r9   r:   rD      s    zNoneAlgorithm.verifyN)rI   rJ   rK   rL   r@   rB   rD   r9   r9   r9   r:   r.      s   	r.   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/   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c             C   s
   || _ d S )N)hash_alg)r>   rP   r9   r9   r:   __init__   s    zHMACAlgorithm.__init__c                s6   t   ddddg}t fdd|D r2td S )Ns   -----BEGIN PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   -----BEGIN RSA PUBLIC KEY-----s   ssh-rsac             3   s   | ]}| kV  qd S )Nr9   ).0Zstring_value)r?   r9   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   )r>   r?   Zinvalid_stringsr9   )r?   r:   r@      s    zHMACAlgorithm.prepare_keyc             C   s   t tt|  ddS )Noct)kkty)jsondumpsr   r   decode)rE   r9   r9   r:   rF      s    zHMACAlgorithm.to_jwkc             C   sn   y.t | trt| }nt | tr(| }ntW n tk
rJ   tdY nX |ddkrbtdt|d S )NzKey is not valid JSONrW   rU   zNot an HMAC keyrV   )	
isinstancestrrX   loadsdict
ValueErrorr   getr   )rG   objr9   r9   r:   rH      s    

zHMACAlgorithm.from_jwkc             C   s   t ||| j S )N)hmacnewrP   Zdigest)r>   rA   r?   r9   r9   r:   rB      s    zHMACAlgorithm.signc             C   s   t || ||S )N)rb   Zcompare_digestrB   )r>   rA   r?   rC   r9   r9   r:   rD      s    zHMACAlgorithm.verifyN)rI   rJ   rK   rL   hashlibZsha256r0   Zsha384r1   Zsha512r2   rQ   r@   rM   rF   rH   rB   rD   r9   r9   r9   r:   r/      s   	r/   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 )r5   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c             C   s
   || _ d S )N)rP   )r>   rP   r9   r9   r:   rQ      s    zRSAAlgorithm.__init__c             C   s~   t |tst |tr|S t |ttfrrt|}y$|drDt|}nt|d d}W qz t	k
rn   t
|}Y qzX ntd|S )Ns   ssh-rsa)passwordzExpecting a PEM-formatted key.)r[   r   r   bytesr\   r   
startswithr!   r   r_   r    	TypeError)r>   r?   r9   r9   r:   r@      s    

zRSAAlgorithm.prepare_keyc             C   s   d }t | dd r|  }ddgt|jj t|jj t|j t|j t|j	 t|j
 t|j t|j d
}nBt | dd r|  }ddgt|j t|j d}ntdt|S )Nprivate_numbersRSArB   )
rW   key_opsnedpqdpdqqirD   )rW   rk   rl   rm   zNot a public or private key)getattrri   r
   public_numbersrl   rZ   rm   rn   ro   rp   dmp1dmq1iqmpr   rX   rY   )rE   ra   numbersr9   r9   r:   rF     s*    zRSAAlgorithm.to_jwkc       	   	      s  y.t | trt|  nt | tr(|  ntW n tk
rJ   tdY nX  ddkrbtdd krd krd krd krtd	d
ddddg} fdd|D }t|}|rt	|stdt
t d t d }|r4tt d t d
 t d t d t d t d |d}nHt d }t|j||j\}}t|||t||t||t|||d}| S d krd krt
t d t d }| S tdd S )NzKey is not valid JSONrW   rj   zNot an RSA keyrn   rm   rl   Zothz5Unsupported RSA private key: > 2 primes not supportedro   rp   rq   rr   rs   c                s   g | ]}| kqS r9   r9   )rR   Zprop)ra   r9   r:   
<listcomp>C  s    z)RSAAlgorithm.from_jwk.<locals>.<listcomp>z@RSA key must include all parameters if any are present besides d)rn   ro   rp   rv   rw   rx   ru   zNot a public or private key)r[   r\   rX   r]   r^   r_   r   r`   rT   allr   r   r   r   rl   rm   r   r   r   private_key
public_key)	rG   Zother_propsZprops_foundZany_props_foundru   ry   rn   ro   rp   r9   )ra   r:   rH   ,  sd    










zRSAAlgorithm.from_jwkc             C   s   | |t |  S )N)rB   r   PKCS1v15rP   )r>   rA   r?   r9   r9   r:   rB   v  s    zRSAAlgorithm.signc             C   s6   y| ||t |   dS  tk
r0   dS X d S )NTF)rD   r   r~   rP   r   )r>   rA   r?   rC   r9   r9   r:   rD   y  s
    zRSAAlgorithm.verifyN)rI   rJ   rK   rL   r   r0   r1   r2   rQ   r@   rM   rF   rH   rB   rD   r9   r9   r9   r:   r5      s   $Jr5   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 )r6   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c             C   s
   || _ d S )N)rP   )r>   rP   r9   r9   r:   rQ     s    zECAlgorithm.__init__c             C   s~   t |tst |tr|S t |ttfrrt|}y |drDt|}nt|}W qz t	k
rn   t
|d d}Y qzX ntd|S )Ns   ecdsa-sha2-)re   zExpecting a PEM-formatted key.)r[   r   r   rf   r\   r   rg   r!   r    r_   r   rh   )r>   r?   r9   r9   r:   r@     s    

zECAlgorithm.prepare_keyc             C   s"   | |t|  }t||jS )N)rB   r   ECDSArP   r   curve)r>   rA   r?   der_sigr9   r9   r:   rB     s    zECAlgorithm.signc             C   sn   yt ||j}W n tk
r$   dS X y.t|tr:| }|||t| 	  dS  t
k
rh   dS X d S )NFT)r	   r   r_   r[   r   r}   rD   r   r   rP   r   )r>   rA   r?   rC   r   r9   r9   r:   rD     s    
zECAlgorithm.verifyc             C   s0  y.t | trt| }nt | tr(| }ntW n tk
rJ   tdY nX |ddkrbtdd|ksrd|krztdt|d}t|d}|d}|dkrt	|t	|  krd	krn n
t
 }ntd
n|dkrt	|t	|  krdkrn n
t
 }ntdn|dkr`t	|t	|  krHdkrVn n
t
 }ntdnP|dkrt	|t	|  krd	krn n
t
 }ntdntd| t
jtj|ddtj|dd|d}d|kr| S t|d}t	|t	|krtdt	||t
tj|dd| S )NzKey is not valid JSONrW   Z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-521Z	secp256k1z-Coords should be 32 bytes for curve secp256k1zInvalid curve: Zbig)	byteorder)r   r   r   rn   z!D should be {} bytes for curve {})r[   r\   rX   r]   r^   r_   r   r`   r   lenr   Z	SECP256R1Z	SECP384R1Z	SECP521R1Z	SECP256K1ZEllipticCurvePublicNumbersint
from_bytesr}   ZEllipticCurvePrivateNumbersr|   )rG   ra   r   r   r   Z	curve_objru   rn   r9   r9   r:   rH     sZ    


 


$


$


$

zECAlgorithm.from_jwkN)rI   rJ   rK   rL   r   r0   r1   r2   rQ   r@   rB   rD   rM   rH   r9   r9   r9   r:   r6     s   r6   c               @   s    e Zd ZdZdd Zdd ZdS )r7   zA
        Performs a signature using RSASSA-PSS with MGF1
        c             C   s*   | |tjt|  | jjd|  S )N)mgfsalt_length)rB   r   PSSMGF1rP   digest_size)r>   rA   r?   r9   r9   r:   rB      s    
zRSAPSSAlgorithm.signc          	   C   sJ   y0| ||tjt|  | jjd|   dS  tk
rD   dS X d S )N)r   r   TF)rD   r   r   r   rP   r   r   )r>   rA   r?   rC   r9   r9   r:   rD   
  s    

zRSAPSSAlgorithm.verifyN)rI   rJ   rK   rL   rB   rD   r9   r9   r9   r:   r7     s   
r7   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 )r8   z
        Performs signing and verification operations using Ed25519

        This class requires ``cryptography>=2.6`` to be installed.
        c             K   s   d S )Nr9   )r>   kwargsr9   r9   r:   rQ      s    zEd25519Algorithm.__init__c             C   s   t |ttfr|S t |ttfrzt |tr4|d}|d}d|krNt|S d|krbt|d dS |dd dkrzt	|S t
dd S )	Nzutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATE)re   r      zssh-z)Expecting a PEM-formatted or OpenSSH key.)r[   r   r   rf   r\   encoderZ   r    r   r!   rh   )r>   r?   Zstr_keyr9   r9   r:   r@   #  s    


zEd25519Algorithm.prepare_keyc             C   s$   t |tk	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
            zutf-8)typerf   rB   )r>   rA   r?   r9   r9   r:   rB   6  s    zEd25519Algorithm.signc             C   st   yVt |tk	rt|dn|}t |tk	r2t|dn|}t|trH| }||| dS  tjjk
rn   dS X dS )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.
            zutf-8TFN)	r   rf   r[   r   r}   rD   cryptography
exceptionsr   )r>   rA   r?   rC   r9   r9   r:   rD   @  s    	
zEd25519Algorithm.verifyc             C   s   t | tr:| jtjtjd}ttt	|
 dddS t | tr| jtjtjt d}|  jtjtjd}ttt	|
 tt	|
 dddS tdd S )N)encodingformatOKPEd25519)r   rW   r   )r   r   Zencryption_algorithm)r   rn   rW   r   zNot a public or private key)r[   r   Zpublic_bytesr   ZRawr   rX   rY   r   r   rZ   r   Zprivate_bytesr   r   r}   r   )r?   r   rn   r9   r9   r:   rF   T  s,    






zEd25519Algorithm.to_jwkc          
   C   s   y.t | trt| }nt | tr(| }ntW n tk
rJ   tdY nX |ddkrbtd|d}|dkrtd| d|krtd	t|d}y*d
|krt	
|S t|d
}t|S  tk
r } ztd|W d d }~X Y nX d S )NzKey is not valid JSONrW   r   zNot an Octet Key Pairr   r   zInvalid curve: r   zOKP should have "x" parameterrn   zInvalid key parameter)r[   r\   rX   r]   r^   r_   r   r`   r   r   Zfrom_public_bytesr   Zfrom_private_bytes)rG   ra   r   r   rn   errr9   r9   r:   rH   {  s.    




zEd25519Algorithm.from_jwkN)rI   rJ   rK   rL   rQ   r@   rB   rD   rM   rF   rH   r9   r9   r9   r:   r8     s   
'r8   )7rd   rb   rX   r   r   Zutilsr   r   r   r   r   r	   r
   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   r   Z1cryptography.hazmat.primitives.asymmetric.ed25519r   r   Z-cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r   Z,cryptography.hazmat.primitives.serializationr   r   r   r   r   r    r!   r3   ModuleNotFoundErrorZrequires_cryptographyr;   r<   r.   r/   r5   r6   r7   r8   r9   r9   r9   r:   <module>   sL   $
(
$

")@ {