HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/jwcrypto/__pycache__/jwa.cpython-36.pyc
3

��Nf�}�@s�ddlZddlZddlZddlmZmZddlmZddlm	Z	ddl
mZmZm
Z
ddlmZddlmZddlmZdd	lmZmZmZdd
lmZddlmZddlmZddlZdd
lmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$m%Z%ddlm&Z&ddl'm(Z(dZ)ej*ej+�Gdd�de,��Z-dd�Z.dd�Z/dd�Z0dd�Z1d d!�Z2Gd"d#�d#e,�Z3Gd$d%�d%e3�Z4Gd&d'�d'e3�Z5Gd(d)�d)e3�Z6Gd*d+�d+e3�Z7Gd,d-�d-e4e-�Z8Gd.d/�d/e4e-�Z9Gd0d1�d1e4e-�Z:Gd2d3�d3e5e-�Z;Gd4d5�d5e5e-�Z<Gd6d7�d7e5e-�Z=Gd8d9�d9e6e-�Z>Gd:d;�d;e6e-�Z?Gd<d=�d=e6e-�Z@Gd>d?�d?e5e-�ZAGd@dA�dAe5e-�ZBGdBdC�dCe5e-�ZCGdDdE�dEe7e-�ZDGdFdG�dGe,�ZEGdHdI�dIeE�ZFGdJdK�dKeFe-�ZGGdLdM�dMeFe-�ZHGdNdO�dOeFe-�ZIGdPdQ�dQeE�ZJGdRdS�dSeJe-�ZKGdTdU�dUeJe-�ZLGdVdW�dWeJe-�ZMGdXdY�dYeE�ZNGdZd[�d[eNe-�ZOGd\d]�d]eNe-�ZPGd^d_�d_eNe-�ZQGd`da�daeE�ZRGdbdc�dceRe-�ZSGddde�deeRe-�ZTGdfdg�dgeRe-�ZUGdhdi�dieEe-�ZVGdjdk�dkeEe-�ZWGdldm�dmeW�ZXGdndo�doeW�ZYGdpdq�dqeW�ZZGdrds�dse,�Z[Gdtdu�due[�Z\Gdvdw�dwe\e-�Z]Gdxdy�dye\e-�Z^Gdzd{�d{e\e-�Z_Gd|d}�d}e[�Z`Gd~d�de`e-�ZaGd�d��d�e`e-�ZbGd�d��d�e`e-�ZcGd�d��d�e,�ZddS)��N)�hexlify�	unhexlify)�InvalidSignature)�default_backend)�
constant_time�hashes�hmac)�ec)�padding)�utils)�Cipher�
algorithms�modes)�
ConcatKDFHash)�
PBKDF2HMAC)�PKCS7)�InvalidCEKeyLength)�InvalidJWAAlgorithm)�InvalidJWEKeyLength)�InvalidJWEKeyType)�InvalidJWEOperation)�base64url_decode�base64url_encode)�json_decode)�JWKi@c@sReZdZejdd��Zejdd��Zejdd��Zejdd��Zejd	d
��Z	dS)�JWAAlgorithmcCsdS)zThe algorithm NameN�)�selfrr�/usr/lib/python3.6/jwa.py�name&szJWAAlgorithm.namecCsdS)zA short descriptionNr)rrrr�description+szJWAAlgorithm.descriptioncCsdS)z'The actual/recommended/minimum key sizeNr)rrrr�keysize0szJWAAlgorithm.keysizecCsdS)zOne of 'alg', 'enc' or 'JWK'Nr)rrrr�algorithm_usage_location5sz%JWAAlgorithm.algorithm_usage_locationcCsdS)zOne of 'sig', 'kex', 'enc'Nr)rrrr�
algorithm_use:szJWAAlgorithm.algorithm_useN)
�__name__�
__module__�__qualname__�abc�abstractpropertyrr r!r"r#rrrrr#s
rcCst|�dS)N�)�len)�xrrr�_bitsize@sr,cCs|dS)Nr)r)r+rrr�_inbytesDsr-cCs"|ddkrtd��tjt|��S)Nr)rzlenght must be a multiple of 8)�
ValueError�os�urandomr-)r+rrr�_randombitsHsr1cCs2dj|�}|ddd}t|j|d�d|��S)Nz{:x}�r)��0)�formatr�rjust)�n�bits�eZilenrrr�_encode_intOs
r:cCstt|�d�S)N�)�intr)r7rrr�_decode_intUsr=c@seZdZdd�Zdd�ZdS)�_RawJWScCst�dS)N)�NotImplementedError)r�key�payloadrrr�sign[sz_RawJWS.signcCst�dS)N)r?)rr@rA�	signaturerrr�verify^sz_RawJWS.verifyN)r$r%r&rBrDrrrrr>Ysr>c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_RawHMACcCst�|_||_dS)N)r�backend�hashfn)rrGrrr�__init__dsz_RawHMAC.__init__cCs"tj||j|jd�}|j|�|S)N)rF)r�HMACrGrF�update)rr@rA�hrrr�_hmac_setuphs
z_RawHMAC._hmac_setupcCs"t|jd��}|j||�}|j�S)NrB)r�
get_op_keyrL�finalize)rr@rA�skeyrKrrrrBmsz
_RawHMAC.signcCs(t|jd��}|j||�}|j|�dS)NrD)rrMrLrD)rr@rArCZvkeyrKrrrrDrsz_RawHMAC.verifyN)r$r%r&rHrLrBrDrrrrrEbsrEc@s$eZdZdd�Zdd�Zdd�ZdS)�_RawRSAcCs||_||_dS)N)�padfnrG)rrQrGrrrrHysz_RawRSA.__init__cCs|jd�}|j||j|j�S)NrB)rMrBrQrG)rr@rArOrrrrB}s
z_RawRSA.signcCs"|jd�}|j|||j|j�dS)NrD)rMrDrQrG)rr@rArC�pkeyrrrrD�s
z_RawRSA.verifyN)r$r%r&rHrBrDrrrrrPxsrPc@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�_RawECcCs||_||_dS)N)�_curverG)r�curverGrrrrH�sz_RawEC.__init__cCs|jS)N)rT)rrrrrU�sz_RawEC.curvecCsR|jd|j�}|j|tj|j��}tj|�\}}|j|j�j	}t
||�t
||�S)NrB)rMrTrBr	�ECDSArG�ec_utilsZdecode_dss_signatureZ	get_curveZkey_sizer:)rr@rArOrC�r�s�sizerrrrB�s
z_RawEC.signcCsp|jd|j�}|dt|�d�}|t|�dd�}tjtt|�d�tt|�d��}|j||tj	|j
��dS)NrDr3r;)rMrTr*rWZencode_dss_signaturer<rrDr	rVrG)rr@rArCrRrXrYZ
enc_signaturerrrrD�sz
_RawEC.verifyN)r$r%r&rH�propertyrUrBrDrrrrrS�srSc@seZdZdd�Zdd�ZdS)�_RawNonecCsdS)N�r)rr@rArrrrB�sz
_RawNone.signcCstd��dS)Nz'The "none" signature cannot be verified)r)rr@rArCrrrrD�sz_RawNone.verifyN)r$r%r&rBrDrrrrr\�sr\cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_HS256�HS256zHMAC using SHA-256��alg�sigcstt|�jtj��dS)N)�superr^rHr�SHA256)r)�	__class__rrrH�sz_HS256.__init__)
r$r%r&rr r!r"r#rH�
__classcell__rr)rerr^�sr^cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_HS384�HS384zHMAC using SHA-384i�rarbcstt|�jtj��dS)N)rcrgrHr�SHA384)r)rerrrH�sz_HS384.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrg�srgcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_HS512�HS512zHMAC using SHA-512irarbcstt|�jtj��dS)N)rcrjrHr�SHA512)r)rerrrH�sz_HS512.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrj�srjcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_RS256�RS256zRSASSA-PKCS1-v1_5 using SHA-256irarbcstt|�jtj�tj��dS)N)rcrmrHr
�PKCS1v15rrd)r)rerrrH�sz_RS256.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrm�srmcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_RS384�RS384zRSASSA-PKCS1-v1_5 using SHA-384irarbcstt|�jtj�tj��dS)N)rcrprHr
rorri)r)rerrrH�sz_RS384.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrp�srpcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_RS512�RS512zRSASSA-PKCS1-v1_5 using SHA-512irarbcstt|�jtj�tj��dS)N)rcrrrHr
rorrl)r)rerrrH�sz_RS512.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrr�srrcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_ES256�ES256zECDSA using P-256 and SHA-256r`rarbcstt|�jdtj��dS)NzP-256)rcrtrHrrd)r)rerrrH�sz_ES256.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrt�srtcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_ES384�ES384zECDSA using P-384 and SHA-384i�rarbcstt|�jdtj��dS)NzP-384)rcrvrHrri)r)rerrrHsz_ES384.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrv�srvcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_ES512�ES512zECDSA using P-521 and SHA-512irarbcstt|�jdtj��dS)NzP-521)rcrxrHrrl)r)rerrrHsz_ES512.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrxsrxcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_PS256�PS256z.RSASSA-PSS using SHA-256 and MGF1 with SHA-256irarbcs4tjtjtj��tjj�}tt|�j|tj��dS)N)	r
�PSS�MGF1rrd�digest_sizercrzrH)rrQ)rerrrHs
z_PS256.__init__)
r$r%r&rr r!r"r#rHrfrr)rerrzsrzcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_PS384�PS384z.RSASSA-PSS using SHA-384 and MGF1 with SHA-384irarbcs4tjtjtj��tjj�}tt|�j|tj��dS)N)	r
r|r}rrir~rcrrH)rrQ)rerrrH*s
z_PS384.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr"srcs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_PS512�PS512z.RSASSA-PSS using SHA-512 and MGF1 with SHA-512irarbcs4tjtjtj��tjj�}tt|�j|tj��dS)N)	r
r|r}rrlr~rcr�rH)rrQ)rerrrH8s
z_PS512.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr�0sr�c@s eZdZdZdZdZdZdZdS)�_None�nonez%No digital signature or MAC performedrrarbN)r$r%r&rr r!r"r#rrrrr�>s
r�c@seZdZdd�Zdd�ZdS)�_RawKeyMgmtcCst�dS)N)r?)rr@�bitsize�cek�headersrrr�wrapIsz_RawKeyMgmt.wrapcCst�dS)N)r?)rr@r��ekr�rrr�unwrapLsz_RawKeyMgmt.unwrapN)r$r%r&r�r�rrrrr�Gsr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_RSAcCs
||_dS)N)rQ)rrQrrrrHRsz
_RSA.__init__cCs,t|t�std��|jdkr(td|j��dS)Nzkey is not a JWK objectZRSA)�
isinstancerr.�key_typer)rr@rrr�
_check_keyUs

z_RSA._check_keycCs8|j|�|st|�}|jd�}|j||j�}||d�S)N�wrapKey)r�r�)r�r1rM�encryptrQ)rr@r�r�r��rkr�rrrr�\s

z	_RSA.wrapcCs@|j|�|jd�}|j||j�}t|�|kr<t|t|���|S)N�decrypt)r�rMr�rQr,r)rr@r�r�r�r�r�rrrr�ds

z_RSA.unwrapN)r$r%r&rHr�r�r�rrrrr�Psr�cs<eZdZdZdZdZdZdZ�fdd�Z�fdd	�Z	�Z
S)
�_Rsa15�RSA1_5zRSAES-PKCS1-v1_5ira�kexcstt|�jtj��dS)N)rcr�rHr
ro)r)rerrrHusz_Rsa15.__init__csN|j|�t|�}y"tt|�j||||�}td��Wntk
rH|SXdS)NZDummy)r�r1rcr�r��	Exception)rr@r�r�r�r�)rerrr�xs
z
_Rsa15.unwrap)r$r%r&rr r!r"r#rHr�rfrr)rerr�msr�cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_RsaOaepzRSA-OAEPz#RSAES OAEP using default parametersirar�cs,tt|�jtjtjtj��tj�d��dS)N)rcr�rHr
�OAEPr}rZSHA1)r)rerrrH�s
z_RsaOaep.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr��sr�cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�_RsaOaep256zRSA-OAEP-256z.RSAES OAEP using SHA-256 and MGF1 with SHA-256irar�cs,tt|�jtjtjtj��tj�d��dS)N)rcr�rHr
r�r}rrd)r)rerrrH�s
z_RsaOaep256.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr��sr�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�ZdS)
�_AesKwNcCst�|_dS)N)rrF)rrrrrH�sz_AesKw.__init__cCsXt|t�std��|jdkr(td|j��t|j|��}t|�|jkrTt	|jt|���|S)Nzkey is not a JWK object�oct)
r�rr.r�rrrMr,r!r)rr@�opr�rrr�_get_key�s

z_AesKw._get_keycs|j|d�}�st|��d}t|�}�fdd�tdt��d�D�}t|�}	x�tdd�D]�}
x�td|	�D]r}ttj|�tj	�|j
d�j�}|j|||�|j
�}
tt|
dd��|	|
|d	Ad
�}|
dd�||<qfWqVW|}xtd|	�D]}|||7}q�W�|d�S)
Nr��a6a6a6a6a6a6a6a6csg|]}�||d��qS)r)r)�.0�i)r�rr�
<listcomp>�sz_AesKw.wrap.<locals>.<listcomp>rr)�)rF��@)r�r�i����)r�r1r�ranger*rr
�AESr�ECBrF�	encryptorrJrNr:r=)rr@r�r�r�r��iv�arXr7�jr�r9�br�r)r�rr��s$&z_AesKw.wrapcs*|j|d�}d}t|�}�fdd�tdt��d�D�}|jd�}	t|�}
x�tdd
d�D]�}x�t|
ddd�D]z}t|	�}
t|
|
||dAd	�||}ttj	|�t
j�|jd
�j
�}|j|�|j�}|dd�}	|dd�||<qlWqVW|	|k�rtd��dj|�}t|�|k�r&t|t|���|S)Nr�r�csg|]}�||d��qS)r)r)r�r�)r�rrr��sz!_AesKw.unwrap.<locals>.<listcomp>rr)�r�r�)rFzDecryption Failed����r�r�r�i����)r�rr�r*�popr=r:rr
r�rr�rF�	decryptorrJrN�RuntimeError�joinr,r)rr@r�r�r�r�r�ZaivrXr�r7r�r�ZdaZatr�dr�r�r)r�rr��s*
"

z
_AesKw.unwrap)r$r%r&r!rHr�r�r�rrrrr��s

r�c@s eZdZdZdZdZdZdZdS)�_A128KW�A128KWzAES Key Wrap using 128-bit key�rar�N)r$r%r&rr r!r"r#rrrrr��s
r�c@s eZdZdZdZdZdZdZdS)�_A192KW�A192KWzAES Key Wrap using 192-bit key�rar�N)r$r%r&rr r!r"r#rrrrr��s
r�c@s eZdZdZdZdZdZdZdS)�_A256KW�A256KWzAES Key Wrap using 256-bit keyr`rar�N)r$r%r&rr r!r"r#rrrrr��s
r�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�ZdS)
�	_AesGcmKwNcCst�|_dS)N)rrF)rrrrrHsz_AesGcmKw.__init__cCsXt|t�std��|jdkr(td|j��t|j|��}t|�|jkrTt	|jt|���|S)Nzkey is not a JWK objectr�)
r�rr.r�rrrMr,r!r)rr@r�r�rrrr�s

z_AesGcmKw._get_keycCsv|j|d�}|st|�}td�}ttj|�tj|�|jd�}|j�}|j	|�|j
�}	|j}
||	t|�t|
�d�d�S)Nr��`)rF)r��tag)r�r��header)
r�r1rr
r�r�GCMrFr�rJrNr�r)rr@r�r�r�r�r��cipherr�r�r�rrrr�s
z_AesGcmKw.wrapcCs�|j|d�}d|krtd��t|d�}d|kr8td��t|d�}ttj|�tj||�|jd�}|j	�}	|	j
|�|	j�}
t|
�|kr�t
|t|
���|
S)Nr�r�z&Invalid Header, missing "iv" parameterr�z'Invalid Header, missing "tag" parameter)rF)r�r.rrr
r�rr�rFr�rJrNr,r)rr@r�r�r�r�r�r�r�r�r�rrrr�(s
z_AesGcmKw.unwrap)r$r%r&r!rHr�r�r�rrrrr�s

r�c@s eZdZdZdZdZdZdZdS)�
_A128GcmKw�	A128GCMKWz+Key wrapping with AES GCM using 128-bit keyr�rar�N)r$r%r&rr r!r"r#rrrrr�;s
r�c@s eZdZdZdZdZdZdZdS)�
_A192GcmKw�	A192GCMKWz+Key wrapping with AES GCM using 192-bit keyr�rar�N)r$r%r&rr r!r"r#rrrrr�Ds
r�c@s eZdZdZdZdZdZdZdS)�
_A256GcmKw�	A256GCMKWz+Key wrapping with AES GCM using 256-bit keyr`rar�N)r$r%r&rr r!r"r#rrrrr�Ms
r�c@s8eZdZdZdZdZdd�Zdd�Zdd�Zdd	�Z	dS)
�
_Pbes2HsAesKwNcCst�|_tttd�|_dS)N)r�r�r`)rrFr�r�r��aeskwmap)rrrrrH\sz_Pbes2HsAesKw.__init__c
Cs�|tkrtd��t|t�r |}n
|jd�}t|jjd��d|}|jdkrVtj�}n0|jdkrjtj	�}n|jdkr~tj
�}ntd��t|t|j
�|||jd�}|j|�}	t|	�|j
kr�t|j
t|	���td	d
t|	�d�S)NzInvalid p2c value, too large�utf8�r`i�izUnknown Hash Size)�	algorithm�length�saltZ
iterationsrFr��enc)�kty�use�k)�default_max_pbkdf2_iterationsr.r��bytes�encoder�hashsizerrdrirlrr-r!rF�deriver,rr*rr)
rrar@�p2s�p2cZplainr�ZhashalgZkdfr�rrrr�`s&








z_Pbes2HsAesKw._get_keyc
CsTtd�}d}|j|d|||�}|j|j�}|j||||�}	t|�|d�|	d<|	S)Nr�i ra)r�r�r�)r1r�r�r!r�r)
rr@r�r�r�r�r��kek�aeskw�retrrrr�zsz_Pbes2HsAesKw.wrapc	Csfd|krtd��d|kr td��t|d�}|d}|j|d|||�}|j|j�}|j||||�S)Nr�z'Invalid Header, missing "p2s" parameterr�z'Invalid Header, missing "p2c" parameterra)r.rr�r�r!r�)	rr@r�r�r�r�r�r�r�rrrr��sz_Pbes2HsAesKw.unwrap)
r$r%r&rr!r�rHr�r�r�rrrrr�Vs
r�c@s$eZdZdZdZdZdZdZdZdS)�_Pbes2Hs256A128KwzPBES2-HS256+A128KWz-PBES2 with HMAC SHA-256 and "A128KW" wrappingr�rar�r`N)	r$r%r&rr r!r"r#r�rrrrr��sr�c@s$eZdZdZdZdZdZdZdZdS)�_Pbes2Hs384A192KwzPBES2-HS384+A192KWz-PBES2 with HMAC SHA-384 and "A192KW" wrappingr�rar�i�N)	r$r%r&rr r!r"r#r�rrrrr��sr�c@s$eZdZdZdZdZdZdZdZdS)�_Pbes2Hs512A256KwzPBES2-HS512+A256KWz-PBES2 with HMAC SHA-512 and "A256KW" wrappingr`rar�iN)	r$r%r&rr r!r"r#r�rrrrr��sr�c@s8eZdZdZdZdZdZdZdd�Zdd	�Z	d
d�Z
dS)
�_Direct�dirz$Direct use of a shared symmetric keyr�rar�cCs,t|t�std��|jdkr(td|j��dS)Nzkey is not a JWK objectr�)r�rr.r�r)rr@rrrr��s

z_Direct._check_keycCsF|j|�|r|dfSt|jd��}t|�|kr>t|t|���d|iS)Nr�r�)r�rrMr,r)rr@r�r�r�r�rrrr��s
z_Direct.wrapcCsF|j|�|dkrtd��t|jd��}t|�|krBt|t|���|S)Nr�zInvalid Encryption Key.r�)r�r.rrMr,r)rr@r�r�r�r�rrrr��s
z_Direct.unwrapN)r$r%r&rr r!r"r#r�r�r�rrrrr��s	r�c@sHeZdZdZdZdZdZdZdd�Zdd	�Z	d
d�Z
dd
�Zdd�ZdS)�_EcdhEszECDH-ESzECDH-ES using Concat KDFrar�NcCst�|_tttd�|_dS)N)r�r�r`)rrFr�r�r�r�)rrrrrH�sz_EcdhEs.__init__cCs,t|t�std��|jdkr(td|j��dS)Nzkey is not a JWK objectZEC)r�rr.r�r)rr@rrrr��s

z_EcdhEs._check_keycCs�tjdt|��}|t|jd��7}d|kr6t|d�nd}|tjdt|��7}||7}d|krjt|d�nd}|tjdt|��7}||7}|tjd|�7}|jtj�|�}	t	t
j�t|�||j
d�}
|
j|	�S)Nz>Ir��apur��apv)r�r��	otherinforF)�struct�packr*r�r�rZexchanger	ZECDHrrrdr-rFr�)rZprivkeyZpubkeyrar�r�r�r�r�Z
shared_keyZckdfrrr�_derive�s
z_EcdhEs._derivecCs�|j|�|jdkr.|dk	r$td��|d}n|j}|d}tj|j|jd�}|j|jd�|jd�|||�}|jdkr�d|i}n.|j	|�}	tddt
|�d	�}
|	j|
|||�}d
t|j
��i|d<|S)Nz"ECDH-ES cannot use an existing CEKr�ra)r�Zcrv�	unwrapKeyr�r�r�)r�r�r��epkr�)r�r!rrZgenerater�Z	key_curver�rMr�rr�rZ
export_public)rr@r�r�r�rar��dkr�r�r�rrrr��s$





z_EcdhEs.wrapcCs�d|krtd��|j|�|jdkr.|d}n|j}|d}tf|d�}|j|jd�|jd�|||�}|jdkrv|S|j|�}tddt|�d�}	|j|	|||�}
|
SdS)	Nr�z'Invalid Header, missing "epk" parameterr�rar�r�r�)r�r�r�)	r.r�r!rr�rMr�rr�)rr@r�r�r�rar�r�r�r�r�rrrr�s"




z_EcdhEs.unwrap)
r$r%r&rr r"r#r!rHr�r�r�r�rrrrr��sr�c@s eZdZdZdZdZdZdZdS)�_EcdhEsAes128KwzECDH-ES+A128KWz.ECDH-ES using Concat KDF and "A128KW" wrappingr�rar�N)r$r%r&rr r!r"r#rrrrr�/s
r�c@s eZdZdZdZdZdZdZdS)�_EcdhEsAes192KwzECDH-ES+A192KWz.ECDH-ES using Concat KDF and "A192KW" wrappingr�rar�N)r$r%r&rr r!r"r#rrrrr�8s
r�c@s eZdZdZdZdZdZdZdS)�_EcdhEsAes256KwzECDH-ES+A256KWz.ECDH-ES using Concat KDF and "A256KW" wrappingr`rar�N)r$r%r&rr r!r"r#rrrrr�As
r�c@seZdZdd�Zdd�ZdS)�_RawJWEcCst�dS)N)r?)rr�r��mrrrr�Lsz_RawJWE.encryptcCst�dS)N)r?)rr�r�r�r9�trrrr�Osz_RawJWE.decryptN)r$r%r&r�r�rrrrr�Jsr�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�ZdS)
�_AesCbcHmacSha2NcCs(t�|_||_tjj|_|jd|_dS)Nr3)	rrFrGr
r�Z
block_size�	blocksizer!�
wrap_key_size)rrGrrrrHWs
z_AesCbcHmacSha2.__init__cCsdtt|�d�}tj||j|jd�}|j|�|j|�|j|�|j|�|j�}|dt|j	��S)Nr�)rF)
r:r,rrIrGrFrJrNr-r!)rr�r�r�r9ZalrKr�rrr�_mac]s



z_AesCbcHmacSha2._macc
Cs�|dt|j��}|t|j�d�}t|j�}ttj|�tj|�|j	d�}|j
�}t|j�j�}	|	j
|�|	j�}
|j
|
�|j�}|j||||�}|||fS)a Encrypt according to the selected encryption and hashing
        functions.

        :param k: Encryption key (optional)
        :param a: Additional Authentication Data
        :param m: Plaintext

        Returns a dictionary with the computed data.
        N)rF)r-r!r1r�rr
r�r�CBCrFr�r�padderrJrNr�)
rr�r�r��hkeyZekeyr�r�r�r�Zpadded_datar9r�rrrr�hs


z_AesCbcHmacSha2.encryptcCs�|dt|j��}|t|j�d�}tj||j||||��sDtd��ttj|�t	j
|�|jd�}|j�}	|	j
|�|	j�}
t|j�j�}|j
|
�|j�S)aJ Decrypt according to the selected encryption and hashing
        functions.
        :param k: Encryption key (optional)
        :param a: Additional Authenticated Data
        :param iv: Initialization Vector
        :param e: Ciphertext
        :param t: Authentication Tag

        Returns plaintext or raises an error
        NzFailed to verify MAC)rF)r-r!rZbytes_eqr�rrr
r�rr�rFr�rJrNrr��unpadder)rr�r�r�r9r�r�Zdkeyr�r�r�r�rrrr��s
z_AesCbcHmacSha2.decrypt)r$r%r&r!rHr�r�r�rrrrr�Ss
r�cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�
_A128CbcHs256z
A128CBC-HS256z&AES_128_CBC_HMAC_SHA_256 authenticatedr�r�cstt|�jtj��dS)N)rcr�rHrrd)r)rerrrH�sz_A128CbcHs256.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr��sr�cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�
_A192CbcHs384z
A192CBC-HS384z&AES_192_CBC_HMAC_SHA_384 authenticatedr�r�cstt|�jtj��dS)N)rcr�rHrri)r)rerrrH�sz_A192CbcHs384.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr��sr�cs0eZdZdZdZdZdZdZ�fdd�Z�Z	S)�
_A256CbcHs512z
A256CBC-HS512z&AES_256_CBC_HMAC_SHA_512 authenticatedr`r�cstt|�jtj��dS)N)rcr�rHrrl)r)rerrrH�sz_A256CbcHs512.__init__)
r$r%r&rr r!r"r#rHrfrr)rerr��sr�c@s(eZdZdZdd�Zdd�Zdd�ZdS)�_AesGcmNcCst�|_|j|_dS)N)rrFr!r�)rrrrrH�sz_AesGcm.__init__cCsTtd�}ttj|�tj|�|jd�}|j�}|j|�|j	|�|j
�}|||jfS)a Encrypt accoriding to the selected encryption and hashing
        functions.

        :param k: Encryption key (optional)
        :param a: Additional Authentication Data
        :param m: Plaintext

        Returns a dictionary with the computed data.
        r�)rF)r1rr
r�rr�rFr��authenticate_additional_datarJrNr�)rr�r�r�r�r�r�r9rrrr��s


z_AesGcm.encryptcCsBttj|�tj||�|jd�}|j�}|j|�|j|�|j	�S)aK Decrypt accoriding to the selected encryption and hashing
        functions.
        :param k: Encryption key (optional)
        :param a: Additional Authenticated Data
        :param iv: Initialization Vector
        :param e: Ciphertext
        :param t: Authentication Tag

        Returns plaintext or raises an error
        )rF)
rr
r�rr�rFr�rrJrN)rr�r�r�r9r�r�r�rrrr��s


z_AesGcm.decrypt)r$r%r&r!rHr�r�rrrrr��sr�c@s eZdZdZdZdZdZdZdS)�_A128Gcm�A128GCMzAES GCM using 128-bit keyr�r�N)r$r%r&rr r!r"r#rrrrr�s
rc@s eZdZdZdZdZdZdZdS)�_A192Gcm�A192GCMzAES GCM using 192-bit keyr�r�N)r$r%r&rr r!r"r#rrrrr�s
rc@s eZdZdZdZdZdZdZdS)�_A256Gcm�A256GCMzAES GCM using 256-bit keyr`r�N)r$r%r&rr r!r"r#rrrrrs
rc%@s�eZdZdZeeeeee	e
eee
eeeeeeeeeeeeeeeeeee e!e"e#e$e%e&e'd�$Z(e)ddd��Z*e)dd��Z+e)dd	��Z,e)d
d��Z-dS)
�JWAzSJWA Signing Algorithms.

    This class provides access to all JWA algorithms.
    )$r_rhrkrnrqrsrurwryr{r�r�r�r�zRSA-OAEPzRSA-OAEP-256r�r�r�r�zECDH-ESzECDH-ES+A128KWzECDH-ES+A192KWzECDH-ES+A256KWr�r�r�zPBES2-HS256+A128KWzPBES2-HS384+A192KWzPBES2-HS512+A256KWz
A128CBC-HS256z
A192CBC-HS384z
A256CBC-HS512rrrNcCs&|j|}|dk	r |j|kr t�|�S)N)�algorithms_registryr#�KeyError)�clsrr�rarrr�instantiate_alg8s
zJWA.instantiate_algcCs4y|j|dd�Stk
r.td|��YnXdS)Nrb)r�z(%s is not a valid Signign algorithm name)rr	r)r
rrrr�signing_alg?s
zJWA.signing_algcCs4y|j|dd�Stk
r.td|��YnXdS)Nr�)r�z/%s is not a valid Key Management algorithm name)rr	r)r
rrrr�keymgmt_algGs
zJWA.keymgmt_algcCs4y|j|dd�Stk
r.td|��YnXdS)Nr�)r�z+%s is not a valid Encryption algorithm name)rr	r)r
rrrr�encryption_algOs
zJWA.encryption_alg)N).r$r%r&�__doc__r^rgrjrmrprrrtrvrxrzrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr�classmethodrrr
rrrrrrsTr)er'r/r�ZbinasciirrZcryptography.exceptionsrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrrZ)cryptography.hazmat.primitives.asymmetricr	r
rrWZ&cryptography.hazmat.primitives.ciphersrr
rZ,cryptography.hazmat.primitives.kdf.concatkdfrZ)cryptography.hazmat.primitives.kdf.pbkdf2rZ&cryptography.hazmat.primitives.paddingrZsixZjwcrypto.commonrrrrrrrrZjwcrypto.jwkrr�Z
add_metaclass�ABCMeta�objectrr,r-r1r:r=r>rErPrSr\r^rgrjrmrprrrtrvrxrzrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr�<module>s�				F			4			;


!_				K.