U
    ÑßŽi›t  ã                   @  sŠ  d dl mZ d dlZd dlZd dl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 ddl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mZ zØd d	lm Z m!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZI dZJW n eKk
�r’   dZJY nX e	�ræe:e<B ZLe/e1B ZMe7e8B e4B e5B ZNeLeMB eNB ZOe:e/B e7B e4B ZPe<e1B e8B e5B ZQddddddddddddhZRd d!œd"d#„ZSG d$d%„ d%eƒZTG d&d'„ d'eTƒZUG d(d)„ d)eTƒZVeJ�r†G d*d+„ d+eTƒZWG d,d-„ d-eTƒZXG d.d/„ d/eWƒZYG d0d1„ d1eTƒZZdS )2é    )ÚannotationsN)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAnyÚClassVarÚLiteralÚNoReturnÚcastÚoverloadé   ©ÚInvalidKeyError)ÚHashlibHashÚJWKDict)	Úbase64url_decodeÚbase64url_encodeÚder_to_raw_signatureÚforce_bytesÚfrom_base64url_uintÚis_pem_formatÚ
is_ssh_keyÚraw_to_der_signatureÚto_base64url_uint)ÚInvalidSignatureÚUnsupportedAlgorithm)Údefault_backend)Úhashes)Úpadding)
ÚECDSAÚ	SECP256K1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚEllipticCurveÚEllipticCurvePrivateKeyÚEllipticCurvePrivateNumbersÚEllipticCurvePublicKeyÚEllipticCurvePublicNumbers)ÚEd448PrivateKeyÚEd448PublicKey)Ú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ÚEdDSAzdict[str, Algorithm])Úreturnc                  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.
    )ÚnoneÚHS256ÚHS384ÚHS512)r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   )ÚNoneAlgorithmÚHMACAlgorithmÚSHA256ÚSHA384ÚSHA512Ú
has_cryptoÚupdateÚRSAAlgorithmÚECAlgorithmÚRSAPSSAlgorithmÚOKPAlgorithm)Zdefault_algorithms© rX   úL/var/www/html/IITS/school/venv/lib/python3.8/site-packages/jwt/algorithms.pyÚget_default_algorithmsi   s0    üÿòÿrZ   c                   @  sÎ   e Zd ZdZdddœdd„Zedddœdd	„ƒZedddd
œdd„ƒZedddddœdd„ƒZe	e
edddœdd„ƒƒƒZe	e
ed!dddœdd„ƒƒƒZe
ed"dddœdd„ƒƒZe
edddœdd„ƒƒZd S )#Ú	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    Úbytes)ÚbytestrrH   c                 C  sn   t | ddƒ}|dkrt‚trZt|tƒrZt|tjƒrZtj|ƒ t	ƒ d�}| 
|¡ t| ¡ ƒS t||ƒ ¡ ƒS dS )z�
        Compute a hash digest using the specified algorithm's hash algorithm.

        If there is no hash algorithm, raises a NotImplementedError.
        Úhash_algN)Úbackend)ÚgetattrÚNotImplementedErrorrR   Ú
isinstanceÚtypeÚ
issubclassr   ZHashAlgorithmZHashr   rS   r\   ÚfinalizeÚdigest)Úselfr]   r^   rf   rX   rX   rY   Úcompute_hash_digest�   s    ÿþ
ý
zAlgorithm.compute_hash_digestr   ©ÚkeyrH   c                 C  s   dS )zš
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        NrX   ©rg   rj   rX   rX   rY   Úprepare_key¦   s    zAlgorithm.prepare_key©Úmsgrj   rH   c                 C  s   dS )zn
        Returns a digital signature for the specified message
        using the specified key value.
        NrX   ©rg   rn   rj   rX   rX   rY   Úsign­   s    zAlgorithm.signÚbool©rn   rj   ÚsigrH   c                 C  s   dS )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        NrX   ©rg   rn   rj   rs   rX   rX   rY   Úverify´   s    zAlgorithm.verifyúLiteral[True]r   )Úas_dictrH   c                 C  s   d S ©NrX   ©Úkey_objrw   rX   rX   rY   Úto_jwk»   s    zAlgorithm.to_jwkFúLiteral[False]Ústrc                 C  s   d S rx   rX   ry   rX   rX   rY   r{   À   s    úJWKDict | strc                 C  s   dS )z3
        Serializes a given key into a JWK
        NrX   ry   rX   rX   rY   r{   Å   s    ústr | JWKDict©ÚjwkrH   c                 C  s   dS )zJ
        Deserializes a given key from JWK back into a key object
        NrX   ©r�   rX   rX   rY   Úfrom_jwkÌ   s    zAlgorithm.from_jwkN)F)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rh   r   rl   rp   ru   r   Ústaticmethodr{   rƒ   rX   rX   rX   rY   r[   ‹   s,   r[   c                   @  sr   e Zd ZdZdddœdd„Zddddœd	d
„Zdddddœdd„Zedddddœdd„ƒZedddœdd„ƒZ	dS )rM   zZ
    Placeholder for use when no signing or verification
    operations are required.
    z
str | NoneÚNoneri   c                 C  s    |dkrd }|d k	rt dƒ‚|S )NÚ z*When alg = "none", key value must be None.r   rk   rX   rX   rY   rl   Ú   s
    zNoneAlgorithm.prepare_keyr\   rm   c                 C  s   dS )Nó    rX   ro   rX   rX   rY   rp   ã   s    zNoneAlgorithm.signrq   rr   c                 C  s   dS )NFrX   rt   rX   rX   rY   ru   æ   s    zNoneAlgorithm.verifyFr   r	   ©rz   rw   rH   c                 C  s
   t ƒ ‚d S rx   ©ra   ry   rX   rX   rY   r{   é   s    zNoneAlgorithm.to_jwkr   r€   c                 C  s
   t ƒ ‚d S rx   r�   r‚   rX   rX   rY   rƒ   í   s    zNoneAlgorithm.from_jwkN)F)
r„   r…   r†   r‡   rl   rp   ru   rˆ   r{   rƒ   rX   rX   rX   rY   rM   Ô   s   	rM   c                   @  sä   e Zd ZU dZejZded< ejZ	ded< ej
Zded< dddœd	d
„Zdddœdd„Zeeddddœdd„ƒƒZeed'ddddœdd„ƒƒZed(ddddœdd„ƒZedddœdd„ƒZdddd œd!d"„Zddddd#œd$d%„Zd&S ))rN   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]rO   rP   rQ   r   r‰   ©r^   rH   c                 C  s
   || _ d S rx   ©r^   ©rg   r^   rX   rX   rY   Ú__init__ü   s    zHMACAlgorithm.__init__ústr | bytesr\   ri   c                 C  s$   t |ƒ}t|ƒst|ƒr tdƒ‚|S )NzdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   r   r   r   ©rg   rj   Ú	key_bytesrX   rX   rY   rl   ÿ   s    ÿzHMACAlgorithm.prepare_keyrv   r   rŒ   c                 C  s   d S rx   rX   ry   rX   rX   rY   r{   
  s    zHMACAlgorithm.to_jwkFr|   r}   c                 C  s   d S rx   rX   ry   rX   rX   rY   r{     s    rq   r~   c                 C  s,   t t| ƒƒ ¡ ddœ}|r|S t |¡S d S )NÚoct)ÚkÚkty)r   r   ÚdecodeÚjsonÚdumps)rz   rw   r�   rX   rX   rY   r{     s    þr   r€   c                 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 JSONr—   r•   zNot an HMAC keyr–   )	rb   r}   r™   ÚloadsÚdictÚ
ValueErrorr   Úgetr   )r�   ÚobjrX   rX   rY   rƒ   "  s    

zHMACAlgorithm.from_jwkrm   c                 C  s   t  ||| j¡ ¡ S rx   )ÚhmacÚnewr^   rf   ro   rX   rX   rY   rp   3  s    zHMACAlgorithm.signrr   c                 C  s   t  ||  ||¡¡S rx   )r¡   Úcompare_digestrp   rt   rX   rX   rY   ru   6  s    zHMACAlgorithm.verifyN)F)F)r„   r…   r†   r‡   ÚhashlibÚsha256rO   Ú__annotations__Úsha384rP   Úsha512rQ   r‘   rl   r   rˆ   r{   rƒ   rp   ru   rX   rX   rX   rY   rN   ò   s&   
 ÿrN   c                   @  sä   e Zd ZU dZejZded< ejZded< ejZded< dddœd	d
„Z	dddœdd„Z
eeddddœdd„ƒƒZeed*ddddœdd„ƒƒZed+ddddœdd„ƒZedddœdd„ƒZd d!d d"œd#d$„Zd d%d dd&œd'd(„Zd)S ),rT   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        ú$ClassVar[type[hashes.HashAlgorithm]]rO   rP   rQ   útype[hashes.HashAlgorithm]r‰   rŽ   c                 C  s
   || _ d S rx   r�   r�   rX   rX   rY   r‘   F  s    zRSAAlgorithm.__init__zAllowedRSAKeys | str | bytesÚAllowedRSAKeysri   c                 C  s²   t |ttfƒr|S t |ttfƒs(tdƒ‚t|ƒ}z2| d¡rLttt	|ƒƒW S ttt
|d d�ƒW S W nJ tk
r¬   zttt|ƒƒW  Y S  ttfk
r¦   tdƒ‚Y nX Y nX d S )NúExpecting a PEM-formatted key.s   ssh-rsa©Úpasswordz(Could not parse the provided public key.)rb   r-   r/   r\   r}   Ú	TypeErrorr   Ú
startswithr
   r;   r9   rž   r:   r   r   r“   rX   rX   rY   rl   I  s"    
 
ÿ
zRSAAlgorithm.prepare_keyrv   r   rŒ   c                 C  s   d S rx   rX   ry   rX   rX   rY   r{   _  s    zRSAAlgorithm.to_jwkFr|   r}   c                 C  s   d S rx   rX   ry   rX   rX   rY   r{   e  s    rq   r~   c                 C  sÞ   d }t | dƒrˆ|  ¡ }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ƒrÀ|  ¡ }ddgt|jƒ ¡ t|jƒ ¡ dœ}ntdƒ‚|rÐ|S t |¡S d S )NÚprivate_numbersÚRSArp   )
r—   Úkey_opsÚnÚeÚdÚpÚqÚdpÚdqÚqiru   )r—   r³   r´   rµ   úNot a public or private key)Úhasattrr±   r   Úpublic_numbersr´   r˜   rµ   r¶   r·   r¸   Údmp1Údmq1Úiqmpr   r™   rš   )rz   rw   r    ÚnumbersrX   rX   rY   r{   k  s2    
ö
ür   r€   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ˆ 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 )Nr›   r—   r²   zNot an RSA keyr¶   rµ   r´   Zothz5Unsupported RSA private key: > 2 primes not supportedr·   r¸   r¹   rº   r»   c                   s   g | ]}|ˆ k‘qS rX   rX   )Ú.0Úprop©r    rX   rY   Ú
<listcomp>©  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¼   )rb   r}   r™   rœ   r�   rž   r   rŸ   ÚanyÚallr0   r   r.   r4   r´   rµ   r1   r2   r3   Úprivate_keyÚ
public_key)	r�   Zother_propsZprops_foundZany_props_foundr¾   rÂ   r¶   r·   r¸   rX   rÅ   rY   rƒ   ’  st    

ÿÿ

þ





ù
  ÿù


þzRSAAlgorithm.from_jwkr\   r-   rm   c                 C  s   |  |t ¡ |  ¡ ¡S rx   )rp   r   ÚPKCS1v15r^   ro   rX   rX   rY   rp   Ú  s    zRSAAlgorithm.signr/   rr   c                 C  s:   z|  ||t ¡ |  ¡ ¡ W dS  tk
r4   Y dS X d S )NTF)ru   r   rË   r^   r   rt   rX   rX   rY   ru   Ý  s
    zRSAAlgorithm.verifyN)F)F)r„   r…   r†   r‡   r   rO   r¦   rP   rQ   r‘   rl   r   rˆ   r{   rƒ   rp   ru   rX   rX   rX   rY   rT   <  s&   
 ÿ&GrT   c                   @  sä   e Zd ZU dZejZded< ejZded< ejZded< dddœd	d
„Z	dddœdd„Z
ddddœdd„Zdddddœdd„Zeeddddœdd„ƒƒZeed)ddd dœd!d„ƒƒZed*ddd"dœd#d„ƒZed$dd%œd&d'„ƒZd(S )+rU   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        r©   rO   rP   rQ   rª   r‰   rŽ   c                 C  s
   || _ d S rx   r�   r�   rX   rX   rY   r‘   î  s    zECAlgorithm.__init__zAllowedECKeys | str | bytesÚAllowedECKeysri   c                 C  sŒ   t |ttfƒr|S t |ttfƒs(tdƒ‚t|ƒ}z | d¡rFt|ƒ}nt	|ƒ}W n  t
k
rp   t|d d�}Y nX t |ttfƒsˆtdƒ‚|S )Nr¬   s   ecdsa-sha2-r­   zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms)rb   r%   r'   r\   r}   r¯   r   r°   r;   r:   rž   r9   r   )rg   rj   r”   Z
crypto_keyrX   rX   rY   rl   ñ  s&    

 ÿÿzECAlgorithm.prepare_keyr\   r%   rm   c                 C  s    |  |t|  ¡ ƒ¡}t||jƒS rx   )rp   r   r^   r   Úcurve)rg   rn   rj   Úder_sigrX   rX   rY   rp     s    zECAlgorithm.signrq   rr   c                 C  sv   zt ||jƒ}W n tk
r&   Y dS X z2t|tƒr<| ¡ n|}| ||t|  ¡ ƒ¡ W dS  t	k
rp   Y dS X d S )NFT)
r   rÍ   rž   rb   r%   rÊ   ru   r   r^   r   )rg   rn   rj   rs   rÎ   rÊ   rX   rX   rY   ru     s    ÿ
ýzECAlgorithm.verifyrv   r   rŒ   c                 C  s   d S rx   rX   ry   rX   rX   rY   r{   %  s    zECAlgorithm.to_jwkFr|   r}   c                 C  s   d S rx   rX   ry   rX   rX   rY   r{   +  s    r~   c                 C  sä   t | tƒr|  ¡  ¡ }nt | tƒr,|  ¡ }ntdƒ‚t | jtƒrFd}nFt | jtƒrXd}n4t | jt	ƒrjd}n"t | jt
ƒr|d}ntd| j› �ƒ‚d|t|jƒ ¡ t|jƒ ¡ dœ}t | tƒrÎt|  ¡ jƒ ¡ |d	< |rÖ|S t |¡S d S )
Nr¼   úP-256úP-384úP-521Ú	secp256k1úInvalid curve: ÚEC)r—   ÚcrvÚxÚyr¶   )rb   r%   rÊ   r¾   r'   r   rÍ   r!   r"   r#   r    r   rÖ   r˜   r×   r±   Zprivate_valuer™   rš   )rz   rw   r¾   rÕ   r    rX   rX   rY   r{   1  s4    


ü
ÿr   r€   c                 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|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�rZt	|ƒt	|ƒ  k�rDdk�rPn ntƒ }ntdƒ‚nN|dk�ršt	|ƒt	|ƒ  k�r„d	k�r�n ntƒ }ntdƒ‚ntd|› �ƒ‚t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 )Nr›   r—   rÔ   zNot an Elliptic curve keyrÖ   r×   rÕ   rÏ   é    z)Coords should be 32 bytes for curve P-256rÐ   é0   z)Coords should be 48 bytes for curve P-384rÑ   éB   z)Coords should be 66 bytes for curve P-521rÒ   z-Coords should be 32 bytes for curve secp256k1rÓ   Úbig)Ú	byteorder)rÖ   r×   rÍ   r¶   z!D should be {} bytes for curve {})rb   r}   r™   rœ   r�   rž   r   rŸ   r   Úlenr!   r"   r#   r    r(   ÚintÚ
from_bytesrÊ   r&   rÉ   )r�   r    rÖ   r×   rÍ   Z	curve_objr¾   r¶   rX   rX   rY   rƒ   V  sh    


 

$

$

$ÿý
  ÿ ÿzECAlgorithm.from_jwkN)F)F)r„   r…   r†   r‡   r   rO   r¦   rP   rQ   r‘   rl   rp   ru   r   rˆ   r{   rƒ   rX   rX   rX   rY   rU   ä  s&   
 ÿ$rU   c                   @  s6   e Zd ZdZddddœdd„Zddddd	œd
d„ZdS )rV   zA
        Performs a signature using RSASSA-PSS with MGF1
        r\   r-   rm   c                 C  s,   |  |tjt |  ¡ ¡|  ¡ jd�|  ¡ ¡S )N©ZmgfZsalt_length)rp   r   ÚPSSÚMGF1r^   Údigest_sizero   rX   rX   rY   rp   Ÿ  s    þúzRSAPSSAlgorithm.signr/   rq   rr   c              	   C  sP   z4|  ||tjt |  ¡ ¡|  ¡ jd�|  ¡ ¡ W dS  tk
rJ   Y dS X d S )Nrà   TF)ru   r   rá   râ   r^   rã   r   rt   rX   rX   rY   ru   ©  s    þù	zRSAPSSAlgorithm.verifyN)r„   r…   r†   r‡   rp   ru   rX   rX   rX   rY   rV   š  s   
rV   c                   @  s¸   e Zd ZdZdddœdd„Zddd	œd
d„Zddddœdd„Zdddddœdd„Zee	ddddœdd„ƒƒZ
ee	d&ddddœdd„ƒƒZ
e	d'ddddœd d„ƒZ
e	d!dd"œd#d$„ƒZd%S )(rW   zŽ
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        r   r‰   )ÚkwargsrH   c                 K  s   d S rx   rX   )rg   rä   rX   rX   rY   r‘   ¿  s    zOKPAlgorithm.__init__zAllowedOKPKeys | str | bytesÚAllowedOKPKeysri   c                 C  sœ   t |ttfƒr~t |tƒr"| d¡n|}t |tƒr:| d¡n|}d|krPt|ƒ}n.d|krft|d d�}n|dd… dkr~t|ƒ}t |tt	t
tfƒs˜tdƒ‚|S )	Núutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEr­   r   é   zssh-zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms)rb   r\   r}   r˜   Úencoder:   r9   r;   r+   r,   r)   r*   r   )rg   rj   Zkey_strr”   rX   rX   rY   rl   Â  s"    

þÿzOKPAlgorithm.prepare_keyr’   z#Ed25519PrivateKey | Ed448PrivateKeyr\   rm   c                 C  s"   t |tƒr| d¡n|}| |¡S )aS  
            Sign a message ``msg`` using the EdDSA private key ``key``
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey}Ed448PrivateKey key: A :class:`.Ed25519PrivateKey`
                or :class:`.Ed448PrivateKey` isinstance
            :return bytes signature: The signature, as bytes
            ræ   )rb   r}   rè   rp   )rg   rn   rj   Ú	msg_bytesrX   rX   rY   rp   Ù  s    
zOKPAlgorithm.signrq   rr   c                 C  sx   z\t |tƒr| d¡n|}t |tƒr.| d¡n|}t |ttfƒrH| ¡ n|}| ||¡ W dS  tk
rr   Y dS X dS )aÄ  
            Verify a given ``msg`` against a signature ``sig`` using the EdDSA key ``key``

            :param str|bytes sig: EdDSA signature to check ``msg`` against
            :param str|bytes msg: Message to sign
            :param Ed25519PrivateKey|Ed25519PublicKey|Ed448PrivateKey|Ed448PublicKey key:
                A private or public EdDSA key instance
            :return bool verified: True if signature is valid, False if not.
            ræ   TFN)rb   r}   rè   r+   r)   rÊ   ru   r   )rg   rn   rj   rs   ré   Z	sig_bytesrÊ   rX   rX   rY   ru   æ  s    ÿ
ýzOKPAlgorithm.verifyrv   r   )rj   rw   rH   c                 C  s   d S rx   rX   ©rj   rw   rX   rX   rY   r{      s    zOKPAlgorithm.to_jwkFr|   r}   c                 C  s   d S rx   rX   rê   rX   rX   rY   r{     s    r~   c                 C  sì   t | ttfƒr\| jtjtjd�}t | tƒr.dnd}tt|ƒƒ 	¡ d|dœ}|rR|S t
 |¡S t | ttfƒrà| jtjtjtƒ d�}|  ¡ jtjtjd�}t | tƒr¤dnd}tt|ƒƒ 	¡ tt|ƒƒ 	¡ d|dœ}|rÖ|S t
 |¡S tdƒ‚d S )	N)ÚencodingÚformatÚEd25519ÚEd448ÚOKP)rÖ   r—   rÕ   )rë   rì   Zencryption_algorithm)rÖ   r¶   r—   rÕ   r¼   )rb   r,   r*   Zpublic_bytesr5   ZRawr8   r   r   r˜   r™   rš   r+   r)   Zprivate_bytesr7   r6   rÊ   r   )rj   rw   rÖ   rÕ   r    r¶   rX   rX   rY   r{     sB    þý
ýþü
r   r€   c              
   C  s2  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Š|dkrŠtd|› �ƒ‚d	|krštd
ƒ‚t| d	¡ƒ}zVd|krÒ|dkrÆt	 
|¡W S t 
|¡W S t| d¡ƒ}|dkrôt |¡W S t |¡W S  tk
�r, } ztdƒ|‚W 5 d }~X Y nX d S )Nr›   r—   rï   zNot an Octet Key PairrÕ   rí   rî   rÓ   rÖ   zOKP should have "x" parameterr¶   zInvalid key parameter)rb   r}   r™   rœ   r�   rž   r   rŸ   r   r,   Zfrom_public_bytesr*   r+   Zfrom_private_bytesr)   )r�   r    rÍ   rÖ   r¶   ÚerrrX   rX   rY   rƒ   ;  s6    


zOKPAlgorithm.from_jwkN)F)F)r„   r…   r†   r‡   r‘   rl   rp   ru   r   rˆ   r{   rƒ   rX   rX   rX   rY   rW   ¸  s     ÿ.rW   )[Ú
__future__r   r¤   r¡   r™   Úabcr   r   Útypingr   r   r   r   r	   r
   r   Ú
exceptionsr   Útypesr   r   Úutilsr   r   r   r   r   r   r   r   r   Zcryptography.exceptionsr   r   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr   Z,cryptography.hazmat.primitives.asymmetric.ecr   r    r!   r"   r#   r$   r%   r&   r'   r(   Z/cryptography.hazmat.primitives.asymmetric.ed448r)   r*   Z1cryptography.hazmat.primitives.asymmetric.ed25519r+   r,   Z-cryptography.hazmat.primitives.asymmetric.rsar-   r.   r/   r0   r1   r2   r3   r4   Z,cryptography.hazmat.primitives.serializationr5   r6   r7   r8   r9   r:   r;   rR   ÚModuleNotFoundErrorr«   rÌ   rå   ZAllowedKeysZAllowedPrivateKeysZAllowedPublicKeysÚrequires_cryptographyrZ   r[   rM   rN   rT   rU   rV   rW   rX   rX   rX   rY   Ú<module>   sn   $,0(
$

ÿÿÿô"IH ) 7