
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    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 z¤d 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,�r G 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© r:   ú?/opt/alt/python38/lib/python3.8/site-packages/jwt/algorithms.pyÚget_default_algorithmsE   s0    üÿòÿ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Úkeyr:   r:   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.
        Nr>   ©rA   ÚmsgrB   r:   r:   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.
        Nr>   ©rA   rE   rB   Úsigr:   r:   r;   Úverifyz   s    zAlgorithm.verifyc                 C   s   t ‚dS )z7
        Serializes a given RSA key into a JWK
        Nr>   ©Úkey_objr:   r:   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
        Nr>   )Újwkr:   r:   r;   Úfrom_jwkˆ   s    zAlgorithm.from_jwkN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   rF   rI   ÚstaticmethodrL   rN   r:   r:   r:   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:   r:   r;   rC   –   s
    zNoneAlgorithm.prepare_keyc                 C   s   dS )Nó    r:   rD   r:   r:   r;   rF   Ÿ   s    zNoneAlgorithm.signc                 C   s   dS )NFr:   rG   r:   r:   r;   rI   ¢   s    zNoneAlgorithm.verifyN)rO   rP   rQ   rR   rC   rF   rI   r:   r:   r:   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 )r0   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 C   s
   || _ d S ©N©Úhash_alg©rA   rX   r:   r:   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-----ó   ssh-rsac                 3   s   | ]}|ˆ kV  qd S rV   r:   )Ú.0Zstring_value©rB   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   )rA   rB   Zinvalid_stringsr:   r]   r;   rC   ³   s    üÿzHMACAlgorithm.prepare_keyc                 C   s   t  tt| ƒƒ ¡ ddœ¡S )NÚoct)ÚkÚkty)ÚjsonÚdumpsr   r   ÚdecoderJ   r:   r:   r;   rL   Å   s
    þÿzHMACAlgorithm.to_jwkc                 C   sn   z.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 )NúKey is not valid JSONrb   r`   zNot an HMAC keyra   )	Ú
isinstanceÚstrrc   ÚloadsÚdictÚ
ValueErrorr   Úgetr   )rM   Úobjr:   r:   r;   rN   Î   s    

zHMACAlgorithm.from_jwkc                 C   s   t  ||| j¡ ¡ S rV   )ÚhmacÚnewrX   ZdigestrD   r:   r:   r;   rF   ß   s    zHMACAlgorithm.signc                 C   s   t  ||  ||¡¡S rV   )rn   Zcompare_digestrF   rG   r:   r:   r;   rI   â   s    zHMACAlgorithm.verifyN)rO   rP   rQ   rR   ÚhashlibZsha256r1   Zsha384r2   Zsha512r3   rZ   rC   rS   rL   rN   rF   rI   r:   r:   r:   r;   r0   ¦   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 )r6   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        c                 C   s
   || _ d S rV   rW   rY   r:   r:   r;   rZ   ò   s    zRSAAlgorithm.__init__c                 C   s~   t |tƒst |tƒr|S t |ttfƒrrt|ƒ}z$| d¡rDt|ƒ}nt|d d�}W qz t	k
rn   t
|ƒ}Y qzX ntdƒ‚|S )Nr[   ©ZpasswordúExpecting a PEM-formatted key.)rg   r   r   Úbytesrh   r   Ú
startswithr"   r    rk   r!   Ú	TypeErrorr@   r:   r:   r;   rC   õ   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ÚRSArF   )
rb   Úkey_opsÚnÚeÚdÚpÚqÚdpÚdqÚqirI   )rb   rx   ry   rz   úNot a public or private key)Úgetattrrv   r   Úpublic_numbersry   re   rz   r{   r|   r}   Údmp1Údmq1Úiqmpr   rc   rd   )rK   rm   Únumbersr:   r:   r;   rL     s.    öüzRSAAlgorithm.to_jwkc           	   	      sÆ  z.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�r„dˆ k�r„dˆ k�r„dˆ kr�td	ƒ‚d
ddddg}‡ fdd„|D ƒ}t|ƒ}|rÌt	|ƒsÌt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�rºdˆ k�rºt
tˆ d ƒtˆ d ƒƒ}| ¡ S tdƒ‚d S )Nrf   rb   rw   zNot an RSA keyr{   rz   ry   Zothz5Unsupported RSA private key: > 2 primes not supportedr|   r}   r~   r   r€   c                    s   g | ]}|ˆ k‘qS r:   r:   )r\   Zprop©rm   r:   r;   Ú
<listcomp>C  s     z)RSAAlgorithm.from_jwk.<locals>.<listcomp>z@RSA key must include all parameters if any are present besides d)r{   r|   r}   r„   r…   r†   rƒ   r�   )rg   rh   rc   ri   rj   rk   r   rl   r_   Úallr   r	   r   r   ry   rz   r   r   r   Úprivate_keyÚ
public_key)	rM   Zother_propsZprops_foundZany_props_foundrƒ   r‡   r{   r|   r}   r:   rˆ   r;   rN   ,  sv    

ÿÿ

þ





ù
  ÿù


þzRSAAlgorithm.from_jwkc                 C   s   |  |t ¡ |  ¡ ¡S rV   )rF   r   ÚPKCS1v15rX   rD   r:   r:   r;   rF   v  s    zRSAAlgorithm.signc                 C   s:   z|  ||t ¡ |  ¡ ¡ W dS  tk
r4   Y dS X d S )NTF)rI   r   r�   rX   r   rG   r:   r:   r;   rI   y  s
    zRSAAlgorithm.verifyN)rO   rP   rQ   rR   r   r1   r2   r3   rZ   rC   rS   rL   rN   rF   rI   r:   r:   r:   r;   r6   è   s   
#
Ir6   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 )r7   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        c                 C   s
   || _ d S rV   rW   rY   r:   r:   r;   rZ   Š  s    zECAlgorithm.__init__c                 C   s~   t |tƒst |tƒr|S t |ttfƒrrt|ƒ}z | d¡rDt|ƒ}nt|ƒ}W qz t	k
rn   t
|d d�}Y qzX ntdƒ‚|S )Ns   ecdsa-sha2-rq   rr   )rg   r   r   rs   rh   r   rt   r"   r!   rk   r    ru   r@   r:   r:   r;   rC   �  s     ÿ

zECAlgorithm.prepare_keyc                 C   s"   |  |t |  ¡ ¡¡}t||jƒS rV   )rF   r   ÚECDSArX   r   Úcurve)rA   rE   rB   Úder_sigr:   r:   r;   rF   ¦  s    zECAlgorithm.signc                 C   st   zt ||jƒ}W n tk
r&   Y dS X z0t|tƒr<| ¡ }| ||t |  	¡ ¡¡ W dS  t
k
rn   Y dS X d S )NFT)r
   r�   rk   rg   r   rŒ   rI   r   rŽ   rX   r   )rA   rE   rB   rH   r�   r:   r:   r;   rI   «  s    
zECAlgorithm.verifyc                 C   s0  z.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rÜt	|ƒt	|ƒ  krÄd	krÒn 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�r¢t	|ƒt	|ƒ  k�rŠd	k�r˜n 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 )Nrf   rb   ZECzNot an Elliptic curve keyÚxÚyÚcrvzP-256é    z)Coords should be 32 bytes for curve P-256zP-384é0   z)Coords should be 48 bytes for curve P-384zP-521éB   z)Coords should be 66 bytes for curve P-521Z	secp256k1z-Coords should be 32 bytes for curve secp256k1úInvalid curve: Zbig)Ú	byteorder)r‘   r’   r�   r{   z!D should be {} bytes for curve {})rg   rh   rc   ri   rj   rk   r   rl   r   Úlenr   Z	SECP256R1Z	SECP384R1Z	SECP521R1Z	SECP256K1ZEllipticCurvePublicNumbersÚintÚ
from_bytesrŒ   ZEllipticCurvePrivateNumbersr‹   )rM   rm   r‘   r’   r�   Z	curve_objrƒ   r{   r:   r:   r;   rN   ¹  sh    


 


$


$


$
ÿý
  ÿ ÿzECAlgorithm.from_jwkN)rO   rP   rQ   rR   r   r1   r2   r3   rZ   rC   rF   rI   rS   rN   r:   r:   r:   r;   r7   €  s   r7   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r8   zA
        Performs a signature using RSASSA-PSS with MGF1
        c                 C   s*   |  |tjt |  ¡ ¡| jjd�|  ¡ ¡S )N©ZmgfZsalt_length)rF   r   ÚPSSÚMGF1rX   Údigest_sizerD   r:   r:   r;   rF      s    þúzRSAPSSAlgorithm.signc              	   C   sN   z2|  ||tjt |  ¡ ¡| jjd�|  ¡ ¡ W dS  tk
rH   Y dS X d S )Nrœ   TF)rI   r   r�   rž   rX   rŸ   r   rG   r:   r:   r;   rI   
  s    þù	zRSAPSSAlgorithm.verifyN)rO   rP   rQ   rR   rF   rI   r:   r:   r:   r;   r8   û  s   
r8   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 )r9   z�
        Performs signing and verification operations using Ed25519

        This class requires ``cryptography>=2.6`` to be installed.
        c                 K   s   d S rV   r:   )rA   Úkwargsr:   r:   r;   rZ      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 )	Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATErq   r   é   zssh-z)Expecting a PEM-formatted or OpenSSH key.)rg   r   r   rs   rh   Úencodere   r!   r    r"   ru   )rA   rB   Zstr_keyr:   r:   r;   rC   #  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
            r¡   )Útypers   rF   rD   r:   r:   r;   rF   6  s    zEd25519Algorithm.signc                 C   sx   zXt |ƒtk	rt|dƒn|}t |ƒtk	r2t|dƒn|}t|tƒrH| ¡ }| ||¡ W dS  tjjk
rr   Y 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.
            r¡   TFN)	r¤   rs   rg   r   rŒ   rI   ÚcryptographyÚ
exceptionsr   rG   r:   r:   r;   rI   @  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‘   rb   r“   )r§   r¨   Zencryption_algorithm)r‘   r{   rb   r“   r�   )rg   r   Zpublic_bytesr   ZRawr   rc   rd   r   r   re   r   Zprivate_bytesr   r   rŒ   r   )rB   r‘   r{   r:   r:   r;   rL   T  s:    
þýÿ
ýþüÿ	zEd25519Algorithm.to_jwkc              
   C   s   z.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r‚td|› �ƒ‚d|kr’td	ƒ‚t| d¡ƒ}z.d
|kr¶t	 
|¡W S t| d
¡ƒ}t |¡W S  tk
rú } ztdƒ|‚W 5 d }~X Y nX d S )Nrf   rb   r©   zNot an Octet Key Pairr“   rª   r—   r‘   zOKP should have "x" parameterr{   zInvalid key parameter)rg   rh   rc   ri   rj   rk   r   rl   r   r   Zfrom_public_bytesr   Zfrom_private_bytes)rM   rm   r�   r‘   r{   Úerrr:   r:   r;   rN   {  s.    


zEd25519Algorithm.from_jwkN)rO   rP   rQ   rR   rZ   rC   rF   rI   rS   rL   rN   r:   r:   r:   r;   r9     s   

&r9   )7rp   rn   rc   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"   r4   ÚModuleNotFoundErrorZrequires_cryptographyr<   r=   r/   r0   r6   r7   r8   r9   r:   r:   r:   r;   Ú<module>   sN   $
(
$

ô")@ {