a
    |f                    @   s  d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dl	mZ d dl	mZ d d	l	mZ d d
l	mZ d dlm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 ejdg Zdddddddddddddgddgd Zd!ddddd"ddd#dddd$d%d&d'd(d)ddd*giZd!d+d,d-d.d+d/d0d1giZdd2d3d4dd5gd6Zdd7dd8dd9d:d;d<d=d>d?Zd@ZdAZdBZ dCZ!dDZ"dEdFdGdHgdIgd Z#d!dEdFdJdGdKgiZ$d!ddLdMdNdOddPdMdNdOgiZ%d!ddLdMdNdQdRddPdMdNdQdRgiZ&d!ddSdTdUdOddVdWdXdOddYdZd[dOgiZ'd!ddSdTdUd\dRddVdWdXd]dRddYdZd[d^dRgiZ(d_Z)d`Z*daZ+dbZ,dcZ-dddddedfdgZ.dhdidEdjdkZ/G dldm dmej0Z1g dnZ2g doZ3g dpZ4ed! dq dre5e6e27dse5e6e3e5e6e4dtZ8g duZ9e3Z:ddvddwdxdydzd{d|d}	Z;g d~Z<e;de5e6e97dse5e6e:e5e6e<dtZ=g dZ>e:Z?ddddddRZ@g dg d ZAe@de5e6e>7dse5e6e?e5e6eAdtZBg dZCg dZDddddddRZEg dg d ZFeEde5e6eC7dse5e6eDe5e6eFdtZGdZHe:ZId+ddZJdZKeJdeeH7dse5e6eIeKdtZLdZMe5e6e:ejNf i e;e5e6e97dseddiejNf i e@e5e6e>7dseddieMddddddgd	ZOdZPdZQdZRG dd dej0ZSg dZTdZUdddddddddd}	ZVdZWejNf i eVeeUe5e6eTeWdZXdZYdZZdddddddddd}	Z[dZ\ejNf i e[eeZeYe\dZ]dZ^dZ_d+d-dZ`dZaejNf i e`ee_7dse^eadZbdZcddiZddZeejNf i e[dejNf i e`deeceede^eedZfdZgdZhdddZidZjddddddddȜZkddddiddΜZldddZmG ddф dej0ZnejNf i e[ZodZpdZqG ddՄ dej0ZrdddZsddddڜZtdZudZvG ddބ dej0ZwG dd dej0ZxG dd dej0ZydZzdZ{dZ|G dd dej0Z}G dd dej0Z~dS )    )unicode_literalsN)default_backend)ec)rsa)jwa)jwe)jwk)jwsjwt)InvalidJWSERegOperation)JWKeyNotFound)JWSEHeaderParameter)base64url_decodebase64url_encode)json_decodejson_encodeRSA1_5ECP-256Z+MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4Z+4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyMenc1)ktycrvxyusekidRSAaV  0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgwZAQABRS256z
2011-04-29)r   nealgr   z+cn-I_WNMClehiVp51i_0VpOENW1upEerA8sEam5hn-sz+NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs)keysthumbprintsr#   Z+870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE)r   r   r   r   dr   r   aV  X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Qz83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfsz3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxkZG4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0zs9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgkzGyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU)r   r    r!   r%   pqdpdqqir"   r   octA128KWZGawgguFyGrWKav7AX4VKUg)r   r"   kzVAyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAowz HMAC key used in JWS A.1 example)r   r-   r   sigZ1b94caV  vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_pqYW08PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4iJmG0Qu2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDCxTWq4aYWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgzjYQDwHMTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-qo-meMvVfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQa`  MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDVQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1wYmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnHYMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpnfajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPqPvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVkaZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTqgawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA==)r   r   r   r    r!   Zx5czjuliet@capulet.litaV  t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRyO125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0XOC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-QaV  GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfSNkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9UvqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnuToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsurY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2ahecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQz2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHfQP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJwsz1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6Iedis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYKrYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4szKkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1wY52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6czAvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBymXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-otszlSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqqabu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0oYu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8)r   r   r   r    r!   r%   r&   r'   r(   r)   r*   s  -----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,B4B3C8C536E57CBE

B8Lq1K/wcOr4JMspWrX3zCX14WAp3xgHsKAB4XfuCuju/HQZoWXtok1xoi5e2Ovw
ENA99Jvb2yvBdDUfOlp1L1L+By3q+SwcdeNuEKjwGFG6MY2uZaVtLSiAFXf1N8PL
id7FMRGPIxpTtXKMhfAq4luRb0BgKh7+ZvM7LkxkRxF7M1XVQPGhrU0OfxX9VODe
YFH1q47os5JzHRcrRaFx6sn30e79ij2gRjzMVFuAX07n+yw3qeyNQNYdmDNP7iCZ
x//0iN0NboTI81coNlxx7TL4bYwgESt1c2i/TCfLITjKgEny7MKqU1/jTrOJWu85
PiK/ojaD1EMx9xxVgBCioQJVG/Jm9y+XhtGFAJUShzzsabX7KuANKRn3fgUN+yZS
yp8hmD+R5gQHJk/8+zZ6/Imv8W/G+7fPZuSMgWeWtDReCkfzgnyIdjaIp3Pdp5yN
WLLWADI4tHmNUqIzY7T25gVfg0P2tgQNzn3WzHxq4SfZN9Aw57woi8eSRpLBEn+C
JjqwTxtFQ14ynG6GPsBaDcAduchmJPL7e9PuAfFyLJuM8sU8QyB2oir1M/qYFhTC
ClXw2yylYjAy8TFw1L3UZA4hfAflINjYUY8pgAtTAjxeD/9PhiKSoMEX8Q/8Npti
1Db5RpAClIEdB6nPywj6BzC+6El3dSGaCV0sTQ42LD+S3QH8VCwTB2AuKq7zyuD6
wEQopcbIOGHSir875vYLmWLmqR9MCWZtKj/dWfTIQpBsPsI2ssZn/MptNqyEN9TW
GfnWoTuzoziCS5YmEq7Mh98fwP9Krb0abo3fFvu6CY3dhvvoxPaXahyAxBfpKArB
9nOf3gzHGReWNiFUtNZlvueYrC5CnblFzKaKB+81Imjw6RXM3QtuzbZ71zp+reL8
JeiwE/mriwuGbxTJx5gwQX48zA5PJ342CCrl7jMeIos5KXmYkWoU5hEuGM3tK4Lx
VAoGqcd/a4cWHuLWub8fbhFkIDcxFaMF8yQi0r2LOmvMOsv3RVpyfgJ07z5b9X1B
w76CYkjGqgr0EdU40VTPtNhtHq7rrJSzGbapRsFUpvqgnkEwUSdbY6bRknLETmfo
H3dPf2XQwXXPDMZTW54QsmQ9WjundqOFI2YsH6dCX/kmZK0IJVBpikL8SuM/ZJLK
LcYJcrNGetENEKKl6hDwTTIsG1y3gx6y3wPzBkyJ2DtMx9dPoCqYhPHsIGc/td0/
r4Ix9TWVLIl3MKq3z+/Hszd7jOnrkflfmKeA0DgJlqVJsuxP75pbdiKS/hCKRf8D
AFJLvt6JSGBnz9ZZCB4KrjpHK/k+X7p8Y65uc/aX5BLu8vyRqFduhg98GVXJmD7k
0ggXnqqFnies6SpnQ45cjfKSGDx/NjY0AwoGPH8n8CL6ZagU6K1utfHIMrqKkJME
F6KcPHWrQkECojLdMoDInnRirdRb/FcAadWBSPrf+6Nln4ilbBJIi8W/yzeM/WFj
UKKNjk4W26PGnNO6+TO5h1EpocDI4fx6UYIMmFjnyaLdLrSn1/SzuLL6I7pYZ0Um
8qI4aWjP9RiUvGYJirfAUjL5Vp9w4+osf1sGiioe0GH/1WVuHeQ93A==
-----END RSA PRIVATE KEY-----
s   123456s  -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnR4AZ+tgWYql+S3MaTQ6
zeIO1fKzFIoau9Q0zGuv/1oCAewXwxeDSSxw+/Z3GL1NpuuS9CpbR5EQ3d71bD0v
0G+Sf+mShSl0oljG7YqnNSPzKl+EQ3/KE+eEButcwas6KGof2BA4bFNCw/fPbuhk
u/d8sIIEgdzBMiGRMdW33uci3rsdOenMZQA7uWsM/q/pu85YLAVOxq6wlUCzP4FM
Tw/RKzayrPkn3Jfbqcy1aM2HDlFVx24vaN+RRbPSnVoQbo5EQYkUMXE8WmadSyHl
pXGRnWsJSV9AdGyDrbU+6tcFwcIwnW22jb/OJy8swHdqKGkuR1kQ0XqokK1yGKFZ
8wIDAQAB
-----END PUBLIC KEY-----
s  -----BEGIN CERTIFICATE-----
MIIBWzCCAQYCARgwDQYJKoZIhvcNAQEEBQAwODELMAkGA1UEBhMCQVUxDDAKBgNV
BAgTA1FMRDEbMBkGA1UEAxMSU1NMZWF5L3JzYSB0ZXN0IENBMB4XDTk1MDYxOTIz
MzMxMloXDTk1MDcxNzIzMzMxMlowOjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA1FM
RDEdMBsGA1UEAxMUU1NMZWF5L3JzYSB0ZXN0IGNlcnQwXDANBgkqhkiG9w0BAQEF
AANLADBIAkEAqtt6qS5GTxVxGZYWa0/4u+IwHf7p2LNZbcPBp9/OfIcYAXBQn8hO
/Re1uwLKXdCjIoaGs4DLdG88rkzfyK5dPQIDAQABMAwGCCqGSIb3DQIFBQADQQAE
Wc7EcF8po2/ZO6kNCwK/ICH6DobgLekA5lSLr5EvuioZniZp5lFzAw4+YzPQ7XKJ
zl9HYIMxATFyqSiD9jsx
-----END CERTIFICATE-----
z+7KITkGJF74IZ9NKVvHfuJILbuIZny6j-roaNjB1vgiAOKPEd25519Z+11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo)r   r   r   Z+kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4kZ+nWGxne_9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A)r   r   r%   r   	secp256k1Z+Ss6na3mcci8Ud4lQrjaB_T40sfKApEcl2RLIWOJdjowz+7l9qIKtKPW6oEiOYBt7r22Sm0mtFJU-yBkkvMvpscd8)r   r   r   r   P-256KZ+GYhU2vrYGZrjLZn71Xniqm54Mi53xiYtaTLawzaf9dA)r   r   r   r   r%   BP-256Z+mpkJ29_CYAD0mzQ_MsrbjFMFYtcc9Oxpro37Fa4cLfIZ+iBfhNHk0cI73agNpjbKW62dvuVxn7kxp1Sm8oDnzHl8BP-384Z@WZanneaC2Hi3xslA4znJv7otyEdV5dTPzNUvBjBXPMytf4mRY9JaAITdItjvUTAhz@KNLRTNdvUg66aB_TVW4POZkE3q8S0YoQrCzYUrExRDe_BXikkqIama-GYQ3UBOQLBP-512zVaQXpvz7DH9OK5eFNO9dY3BdPY1v0-8Rg9KC322PY1JyBJq3EhT0uR_-tgbL2E_aGP6k56lF1xIOOtQxo8zziGAzVl9XLHHncigOPr5Tvnj_mVzBFv6i7rdBQrLTq3RXZlCC_f_q6L2o79K9IrN_J2wWxAfS8ekuGPGlHZUzK-3D9sAz+KdKRgq0WEM97BQw3jpW_fTOep6fn-Samv4DfDNb-4s4z@B5WeRV0-RztAPAhRbphSAUrsIzy-eSfWGSM5FxOQGlJcq-ECLA_-SIlH7NdWIEJYZVF_LJ9rebAjOtxoMUfngIywYsnJlZNjy3gxNAEvHjSkLm6RUUdLXDwc50EMp0LeTh1ku039D5kldK3S9Xi0yKZAsw   -----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIEh4ImJiiZgSNg9J9I+Z5toHKh6LDO2MCbSYNZTkMXDU
-----END PRIVATE KEY-----
sq   -----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAlsRcb1mVVIUcDjNqZU27N+iPXihH1EQDa/O3utHLtqc=
-----END PUBLIC KEY-----
sw   -----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VuBCIEIBjAbPTtNY6CUuR5FG1+xb1u5nSRokrNaQYEsgu9O+hP
-----END PRIVATE KEY-----
sq   -----BEGIN PUBLIC KEY-----
MCowBQYDK2VuAyEAW+m9ugi1psQFx6dtTl6J/XZ4JFP019S+oq4wyAoWPnQ=
-----END PUBLIC KEY-----
s   -----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhvGzt82WMJxqTuXCZxnvwrx4enQj
6xc+erlhbTq8gTMAJBzNRPbpuj4NOwTCwjohrtY0TAkthwTuixuojpGKmw==
-----END PUBLIC KEY-----
Z+MWhDfZyDWdx6Fpk3N00ZMShuKhDRXw1fN4ZSfqzeAWYz+hvGzt82WMJxqTuXCZxnvwrx4enQj6xc-erlhbTq8gTMz+ACQczUT26bo-DTsEwsI6Ia7WNEwJLYcE7osbqI6Rips)r   r   r   r   r   X25519z+9cgLEZD5VsaV9dUPNehs2pOwxtmH-EWHJY-pC74Wjakz+W-m9ugi1psQFx6dtTl6J_XZ4JFP019S-oq4wyAoWPnQ)r   r   r   r   c                   @   s$  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGS )HTestJWKc                 C   s&   t d }|D ]}tjf i | qd S Nr#   )
PublicKeysr   JWKselfkeylistkey r?   HD:\Projects\storyit_web\backend\venv\Lib\site-packages\jwcrypto/tests.pytest_create_pubKeys  s    zTestJWK.test_create_pubKeysc                 C   s&   t d }|D ]}tjf i | qd S r8   )PrivateKeysr   r:   r;   r?   r?   r@   test_create_priKeys  s    zTestJWK.test_create_priKeysc                 C   sr   t d }|D ]@}tjf i |}|d |d | }| t|| qtjf i t tjf i t d S )Nr#   signverify)	SymmetricKeysr   r:   
get_op_keyexportassertEqualr   Useofx5cRSAPrivateKey)r<   r=   r>   Zjwkeyr!   r?   r?   r@   test_create_symKeys  s    

zTestJWK.test_create_symKeysc                 C   s   t jjddd t jjddd t jjddd t jjdd	d
d}| |d d
 | tt|dd t jjddd t jjdddd}| |djd d S )Nr+      r   sizer      r   P-521r   curveA192KWZMySymmetricKeyr   r"   r   r   encrypt   r   r   r"   )r   rO   r"   )r   r:   generaterI   lenr   rG   Zkey_sizer<   r-   r?   r?   r@   test_generate_keys  s    zTestJWK.test_generate_keysc                 C   sV   t jf i t}| }| dt|v  t jf i t|}| |d |d  d S )Nr%   r   )r   r:   rK   export_publicassertFalser   rI   )r<   r-   Zjkk2r?   r?   r@   test_export_public_keys  s
    zTestJWK.test_export_public_keysc                 C   s   t jjddd}tdd}|| | }||| | |j	
dd t jjddd}| tt|d	 d
 tdd}|| | }||| | |j	
dd d S )Nr+      rN   test {"alg":"A128KW","enc":"A128GCM"}utf-8A128CBC-HS256rX   r-       z&{"alg":"A256KW","enc":"A128CBC-HS256"})r   r:   rY   r   JWEadd_recipient	serializedeserializerI   payloaddecoderZ   r   )r<   r>   r!   r   r?   r?   r@   test_generate_oct_key  s    

zTestJWK.test_generate_oct_keyc                 C   s   t jjddd}|dd t jjddd}|dd t jjdddd}|dd t jjddd}|dd t jjdd	d}|dd	 t jjdd
d}|dd
 t jjddd}|dd d S )Nr   r   rR   rE   rQ   r   r   )r   rS   r   r1   r3   r4   r5   )r   r:   rY   rG   r<   r>   r?   r?   r@   test_generate_EC_key  s    zTestJWK.test_generate_EC_keyc                 C   s0   t jD ]$}t jjd|d}| |d | qd S )Nr/   rn   r   )r   ImplementedOkpCurvesr:   rY   rI   )r<   r   r>   r?   r?   r@   test_generate_OKP_keys  s    
zTestJWK.test_generate_OKP_keysc                 C   s   t ddt }tj|}| |d d tj| }| |d	 j
|d	 j
 tt t }tj|}| |d d tj| }| |d	 j|d	 j | tjtjji  d S )Ni  i   r   r   rE   r   )r   Zgenerate_private_keyr   r   r:   Z	from_pycarI   
public_keyrG   public_numbersr    r   Z	SECP256R1r   assertRaisesInvalidJWKValue)r<   Zrsa1Zkrsa1Zkrsa2Zec1Zkec1Zkec2r?   r?   r@   test_import_pyca_keys  s"    zTestJWK.test_import_pyca_keysc                 C   s8   t jjddd}t j| }| | |  d S )Nr+   rM   rN   )r   r:   rY   	from_jsonrH   rI   )r<   r-   r   r?   r?   r@   test_jwk_from_json  s    zTestJWK.test_jwk_from_jsonc           
      C   s  t jf i t}t  }|| t  }||  | t|t| | t|d |	td }|	td }| || | |d td  t j
| }| t|t| t j
tt}d}|D ],}	| t|	t j | |	|v  |d7 }q| |ttd  d S )N   r   r%   r   r#   )r   r:   rK   JWKSetaddimport_keysetrH   rI   rZ   get_keyrx   r   rB   
assertTrue
isinstance)
r<   r-   ksks2k1r_   Zks3ksmnumitemr?   r?   r@   test_jwkset  s(    

zTestJWK.test_jwksetc                 C   s   t jtt}t jttd d }t }d|d< t jf i |}| ||	d | 
|	d || | ||h|d | dt|d  | t j |	d W d    n1 s0    Y  d S )Nr#   r   r   r   z	not-there   )r   r{   rx   r   rB   r:   rK   copyrI   r~   ZassertIsNoner|   Zget_keysrZ   ru   rv   )r<   r   r   kwargsr_   r?   r?   r@   test_jwkset_get_keys  s    
zTestJWK.test_jwkset_get_keysc                 C   s   t  }t }d|d< |t jf i | t }d|d< |t jf i | t  }||  | t	|d d | t	|d t	|d  d S )NZkid_1r   Zkid_2r#      )
r   r{   rK   r   r|   r:   r}   rH   rI   rZ   )r<   r   key1key2r   r?   r?   r@   test_jwkset_issue_208(  s    zTestJWK.test_jwkset_issue_208c                 C   sL   t dttd D ]4}tjf i td | }| | td |  qd S Nr   r#   r$   )rangerZ   r9   r   r:   rI   
thumbprintr<   ir-   r?   r?   r@   test_thumbprint5  s    
zTestJWK.test_thumbprintc                 C   s|   t jt}| | t |d}t jjttd}|d}| |	 
 j|
 j t jt}| |d t d S )NrE   passwordrD   r   )r   r:   from_pemRSAPublicPEMrI   export_to_pemrG   RSAPrivatePEMRSAPrivatePasswordrs   rt   r    
PublicCertPublicCertThumbprint)r<   ZpubkZrsapubZprikZrsapripubcr?   r?   r@   test_import_from_pem<  s    

zTestJWK.test_import_from_pemc                 C   s4   t jt}| | t | t| t d S N)	r   r:   r   ECPublicPEMrI   r   r   rH   ECPublicJWK)r<   Zpub_ecr?   r?   r@   test_import_ec_from_pemI  s    zTestJWK.test_import_ec_from_pemc                 C   s4   t jt}| | t | t| t d S r   )	r   r:   r   X25519PublicPEMrI   r   r   rH   X25519PublicJWK)r<   Z
pub_x25519r?   r?   r@   test_import_x25519_from_pemN  s    z#TestJWK.test_import_x25519_from_pemc                 C   s\   t jf i td d }| |j | |j | |j | t	td d |
  d S )Nr#   r   )r   r:   rF   r   is_symmetricr^   
has_publichas_privaterI   r   export_symmetricro   r?   r?   r@   test_export_symmetricS  s    zTestJWK.test_export_symmetricc                 C   sP   t jt}| |j | |j | |j |	 }| 
t|d t d S )Nr   )r   r:   r   r   r^   r   r   r   r   r]   rI   r   r   )r<   r>   r   r?   r?   r@   test_export_public[  s    zTestJWK.test_export_publicc                 C   s   t jjttd}| |j | |j | |j	 |
 }t jf i t|}| |j	 | }t jf i t|}| |j	 | |d |d  d S )Nr   r   )r   r:   r   r   r   r^   r   r   r   r   export_privater   r]   rI   )r<   r>   priprikeyZpubpubkeyr?   r?   r@   test_export_privatec  s    zTestJWK.test_export_privatec                 C   s   t jf i td d }|jdd}| |d td d d  t jt}|jdd}| |d t t jjt	t
d}|jdd}| |d d t jtt}|jdd}| d|v  d S )Nr#   rz   T)as_dictr   r   Z+x31vrbZceU2qOPLtrUwPkLa3PNakMn9tOsq_ntFVrJc)r   r:   rF   r   rI   r   r   r]   r   r   r   r   r{   rx   r   rB   rH   r   )r<   r>   r-   keysetr   r?   r?   r@   test_export_as_dictp  s    
zTestJWK.test_export_as_dictc                 C   s   t jjttd}| |j | |j | }| |j | 	|j t
dd}|| | }t
 }||| | |jd d S )Nr   	plaintextz"{"alg":"RSA-OAEP","enc":"A256GCM"}s	   plaintext)r   r:   r   r   r   r   r   r   publicr^   r   rg   rh   ri   rj   rI   rk   )r<   r>   r   r!   r   r%   r?   r?   r@   test_public  s    
zTestJWK.test_publicc                 C   s>   |  tj tjddd W d    n1 s00    Y  d S )Nr+      r   r-   ru   r   rv   r:   r<   r?   r?   r@   test_invalid_value  s    zTestJWK.test_invalid_valuec                 C   s&   t d }|D ]}tjf i | qd S r8   )PublicKeys_EdDsar   r:   r;   r?   r?   r@   test_create_pubKeys_eddsa  s    z!TestJWK.test_create_pubKeys_eddsac                 C   s&   t d }|D ]}tjf i | qd S r8   )PrivateKeys_EdDsar   r:   r;   r?   r?   r@   test_create_priKeys_eddsa  s    z!TestJWK.test_create_priKeys_eddsac                 C   s&   t d }|D ]}tjf i | qd S r8   )PublicKeys_secp256k1r   r:   r;   r?   r?   r@   test_create_pubKeys_secp256k1  s    z%TestJWK.test_create_pubKeys_secp256k1c                 C   s&   t d }|D ]}tjf i | qd S r8   )PrivateKeys_secp256k1r   r:   r;   r?   r?   r@   test_create_priKeys_secp256k1  s    z%TestJWK.test_create_priKeys_secp256k1c                 C   s&   t d }|D ]}tjf i | qd S r8   )PublicKeys_brainpoolr   r:   r;   r?   r?   r@   test_create_pubKeys_brainpool  s    z%TestJWK.test_create_pubKeys_brainpoolc                 C   s&   t d }|D ]}tjf i | qd S r8   )PrivateKeys_brainpoolr   r:   r;   r?   r?   r@   test_create_priKeys_brainpool  s    z%TestJWK.test_create_priKeys_brainpoolc                 C   sL   t dttd D ]4}tjf i td | }| | td |  qd S r   )r   rZ   r   r   r:   rI   r   r   r?   r?   r@   test_thumbprint_eddsa  s    
zTestJWK.test_thumbprint_eddsac                 C   s   d}t jt}| |j | |j t|}|	|d ddid  |
 }t jt}| |j | |j t }|j||dd | |jd  | |j| d S )Ns   Imported private Ed25519r"   EdDSAr"   valid)r   r:   r   Ed25519PrivatePEMr   r   r   r	   JWSadd_signatureri   Ed25519PublicPEMr^   rj   objectsrI   rk   )r<   rk   r   sr.   r   Z	jws_tokenr?   r?   r@   test_pem_okp  s    
zTestJWK.test_pem_okpc                 C   s  t jf i td d }| |d d | |jd | |j|d  | |jd t jf i td d }| |d d | |j|d	  | t	 |j
 W d    n1 s0    Y  | t	 d
|_W d    n1 s0    Y  | t j d|d	< W d    n1 s0    Y  | t j d|_W d    n1 sP0    Y  d|_d|d< | |j|d k d S )Nr#   r   r   r   r   r   rz   r   r    Zxyzz!!!3r   unknown)r   r:   r9   rI   r   r   r   r    ru   AttributeErrorr%   rv   r!   r   r^   ro   r?   r?   r@   test_jwk_as_dict  s&    $$(&zTestJWK.test_jwk_as_dictc                 C   s0   t jd}| |d d | |d d d S )Nztest passwordr   r+   r-   ZdGVzdCBwYXNzd29yZA)r   r:   from_passwordrI   ro   r?   r?   r@   test_jwk_from_password  s    zTestJWK.test_jwk_from_passwordc                 C   s   t jjddd}|dd t jf i td d }t jf i td d }ttt}t	|}|
|d td	d
id  |jdd}t	 }|| ||  | |j| d S )Nr   r2   rR   rE   r1   r#   r   rz   r"   ES256KTcompact)r   r:   rY   rG   r   bytes	bytearray
A1_payloadr	   r   r   r   ri   rj   rE   r   rI   rk   )r<   r>   Zpub_kZpri_krk   rb   Ztest_serialization_compactrE   r?   r?   r@   test_p256k_alias  s    

zTestJWK.test_p256k_aliasc                 C   s:   t jf i td d }| | dtd d  d S )Nr#   rz   z/urn:ietf:params:oauth:jwk-thumbprint:sha-256:{}r$   )r   r:   r9   rI   Zthumbprint_uriformatr[   r?   r?   r@   test_thumbprint_uri  s    
zTestJWK.test_thumbprint_uriN)&__name__
__module____qualname__rA   rC   rL   r\   r`   rm   rp   rr   rw   ry   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@   r7     sF   r7   ){   "   t   y   p   r   :   r   J   W   T   r   ,      
   rf   r   a   l   g   r   r   r   H   S   2   5   6   r   }   )Fr   r   i   s   r   r   r   r   j   o   e   r   r   r   r   rf   r   r   x   r   r   r   1   3   0   r  8   r  9   r  r  r  r   r   r   rf   r   h   r   r   r   r   /   r  r   r  r   m   r   r   r   .   c   r   r	  r  r   r   _   r   r   r   r   r   r   r   r  u   r   r   ) r   rW                  %   O      `   r                     r  M   r            [   X      r#  r         r   rz   HS256rd   )r>   r"   	protectedrk   	signature)r   r   r   r   r   r   r   r   R   r   r   r   r   r   r   aV  ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQaV  Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97IjlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYTCBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLhBOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQz4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH_5IB3jw3bcxGn6QLvnEtfdUdiYrqBdss1l58BQ3KhooKeQTa9AB0Hw_Py5PJdTJNPY8cQn7ouZ2KKDcmnPGBY5t7yLc1QlQ5xHdwW1VhvKn-nXqhJTBgIPgtldC-KDV5z-y2XDwGUczuQPEfgmVtjL0Uyyx88GZFF1fOunH3-7cepKmtH4pxhtCoHqpWmT8YAmZxaewHgHAjLYsp1ZSe7zFYHj7C6ul7TjeLQeZD_YwD66t62wDmpe_HlB-TnBA-njbglfIsRLtXlnDzQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdczBwKfV3Akq5_MFZDFZCnW-wzl-CCo83WoZvnLQwCTeDv8uzluRSnm71I3QCLdhrqE2e9YkxvuxdBfpT_PI7Yz-FOKnu1R6HsJeDCjn12Sk3vmAktV2zb34MCdy7cpdTh_YVr7tss2u6vneTwrA86rZtu5Mbr1C1XsmvkxHQAdYo0zh_96-mK1R_7glhsum81dZxjTnYynPbZpHziZjeeHcXYsXaaMwkOlODsWa7I9xXDoRwbKgB719rrmI2oKr6N3Do9U0ajaHF-NKJnwgjMd2w9cjz3_-kyNlxAr2v4IKhGNpmM5iIgOS1VZnOZ68m6_pbLBSp3nssTdlqvd0tIiTHUzIYd7DHOhrWvxkwPQsRM2tOgrjbcrfvtQJipd-DlcxyVuuM9sQLdgjVk2oy26F0EmpScGLq2MowX7fhd_QJQ3ydy5cY7YIBi87w93IKLEdfnbJtoOPLUW0ITrJReOgo1cq9SbsxYawBgfp_gh6A5603k2-ZQwVK0JKSHuLFkuQ3U)	r   r    r!   r%   r&   r'   r(   r)   r*   (   r   r
  !      C                  r  -   r   r  E      A                     r      r  r  r0  q   r      r   r	  B   r      <            r      f   >   Q   rG  r  r   r         r   n   rz   rK        r      r4        r        r  r  Z   r      r.     r	     =      r  r"           r      rM        r_  r      rN  r&     r:  r  r^              D   r   b   rY     r]     rO  r_  r
  r      r   $      r"  r  r        r   rm  r1     rc  r      rf   rc  r  rH  rO     rU  r  rz   r  r   r"  r     ;   r6  rD     r[  rG     r      r:  rA     r&  r<  ri  7   r3              rE  rs  rS  ro  rz  ]         rB  r
     r     r   r6  r  rq  rt  r        rq  r      r  #      r.  r  r  r|  r%     r   r%  )   rS  rT  r1     r   rQ  r   ry  r     r  r4  r      rf     rl  z   r  r3  rY  r7  r  r0  r   r<  rt     V      @   \   ra  r+  rT  r4  ra     U   rG  r2  rT     re  r   r  r   r  r  r~  *   F      r-  r[  rv  rD     G   )r   r   r   r   r   r   r   r   r4  r   r   r   r   r   r   Z+f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEUZ+x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0z+jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI) r  r0  r+  r   r   r  r   r   rB  r  ri  r  r#  r`  r  r   r~  ra  (   r   r   rO  |   ~   rZ  r:     ry  r  r     r   )    r   r`        rB  r   rP  r     r3  r|     r   r   ra   r  r      r  rl     P   r  r/  ?   ri     r?  r~  r   r^  ZES256)r   r   r   r   r   r   r   r   r4  r   r   r  r   r   r   )r  r   r   r   r   r   d   rQ   ZXAekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGkzXADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2ZXAY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C)Brz      rd  r:  rj  ru  r  r0  r.  rK     r  r<  r   r        r      rz   r_  r  r*  r"  r3  r!  r;  r      r   rS  r  r  r  r     r   rq  r   r   r~  r  rf  rj  rH  r  rC  r   r        r   r/  r  rW   r   r:  r        r0     r  rM  w   r	  )Br   r   r7  r   r   r$  r  r[  ra   rX  r  r  r  rX  r  rc  rC  r@  rB  r4  r<        rI  r     N   rs  r     rN  r  	   r/  r  rU  r?  r  r  rD  r   r|  r   rp  r  r{  r   k      r  r9  I   r   rf  rf  r  rD  r  rP  r.  r\     r  rs  rl  r   ZES512ZeyJhbGciOiJub25lIn0 r       nonea  {"payload":"eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","signatures":[{"protected":"eyJhbGciOiJSUzI1NiJ9","header":{"kid":"2010-12-29"},"signature":"cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw"},{"protected":"eyJhbGciOiJFUzI1NiJ9","header":{"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature":"DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}]}r   z
2010-12-29z$e9bc097a-ce51-4036-9562-d2ade882db0d)r   r"   )	rk   r   
protected1header1r   
protected2header2Z
serializedjose_headera,  {"payload":"eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","protected":"eyJhbGciOiJFUzI1NiJ9","header":{"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d"},"signature":"DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}zeyJhbGciOiJub25lIiwNCiAiY3JpdCI6WyJodHRwOi8vZXhhbXBsZS5jb20vVU5ERUZJTkVEIl0sDQogImh0dHA6Ly9leGFtcGxlLmNvbS9VTkRFRklORUQiOnRydWUNCn0.RkFJTA.aD  {"payload":"eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ","protected":"eyJhbGciOiJFUzI1NiJ9","header":{"kid":"e9bc097a-ce51-4036-9562-d2ade882db0d", "custom1":"custom_val"},"signature":"DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"}c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestJWSc              
   C   s   t |d tjf i |d |d |d |dd }| }t|d }|| |d d dkrv| ||d  n||d  d S )	Nr"   r>   r(  rk   allowed_algsr)  r   r   )	r	   ZJWSCorer   r:   getrD   r   rE   rI   )r<   rb   r   r.   Zdecsigr?   r?   r@   
check_sign  s    


zTestJWS.check_signc                 C   s   |  t d S r   )r  
A1_exampler   r?   r?   r@   test_A1  s    zTestJWS.test_A1c                 C   s   |  t d S r   )r  
A2_exampler   r?   r?   r@   test_A2  s    zTestJWS.test_A2c                 C   s   |  t d S r   )r  
A3_exampler   r?   r?   r@   test_A3  s    zTestJWS.test_A3c                 C   s   |  t d S r   )r  
A4_exampler   r?   r?   r@   test_A4  s    zTestJWS.test_A4c                 C   s4   |  tj| jt ddgi}|t | | d S )Nr  r  )ru   r	   InvalidJWSOperationr  
A5_exampleupdate)r<   Za5_bisr?   r?   r@   test_A5  s    

zTestJWS.test_A5c                 C   s   t td }|td d td td  |td d td td  |td  |td  | }||td  |ttd  | td |j	 d S )	Nrk   r   r  r  r   r  r  r  )
r	   r   
A6_exampler   rE   ri   rj   A6_serializedrI   r  )r<   r   r.   r?   r?   r@   test_A6  s    zTestJWS.test_A6c                 C   s"   t td }|ttd  d S )Nrk   r   )r	   r   r  rj   
A7_exampler<   r   r?   r?   r@   test_A7  s    zTestJWS.test_A7c                 C   sR   t td }| t j$ |t |d  W d    n1 sD0    Y  d S )Nrk   )r	   r   r  ru   InvalidJWSSignaturerj   
E_negativerE   r  r?   r?   r@   test_E  s    
zTestJWS.test_Ec                 C   s   dd }t ddd|}d|i}tjtd |d}|ttd	  d
d }t ddd|}d|i}tjtd |d}| tj  |ttd	  W d    n1 s0    Y  d S )Nc                 S   s   | j d dkS Ncustom1Z
custom_valr  Zjwobjr?   r?   r@   jws_chk1  s    z,TestJWS.test_customhdr_jws.<locals>.jws_chk1Custom header 1FTr  rk   Zheader_registryr   c                 S   s   | j d dkS Nr  Z
custom_notr  r  r?   r?   r@   jws_chk2  s    z,TestJWS.test_customhdr_jws.<locals>.jws_chk2)r   r	   r   r  rj   customhdr_jws_exampleru   r  )r<   r  newhdrnewregr   r  r?   r?   r@   test_customhdr_jws  s    zTestJWS.test_customhdr_jwsc                 C   sV   t dddd }d|i}| t" tjtd |d W d    n1 sH0    Y  d S )Nr  FTr"   rk   r  )r   ru   r   r	   r   r  r<   r  r  r?   r?   r@   test_customhdr_jws_exists%  s    z!TestJWS.test_customhdr_jws_existsc           	      C   s   g }dt jv rtg}|D ]}t j|d }|d }|d }t|}||d t|d  |j	dd}| 
||d  t }|| ||  | 
|jd|d  qd S )	Nr0   key_jsonrk   protected_headerTr   jws_serialization_compactrd   )r   rq   	E_Ed25519r:   rx   r	   r   r   r   ri   rI   rj   rE   r   rk   rl   )	r<   ZexamplesZcurve_exampler>   rk   r  jws_testjws_test_serialization_compact
jws_verifyr?   r?   r@   #test_EdDsa_signing_and_verification+  s,    



z+TestJWS.test_EdDsa_signing_and_verificationc                 C   s   t jf i td d }ttt}t|}||d t	ddid  |j
dd}t }|| ||  | |j| d S )Nr#   r   r"   r   Tr   )r   r:   r   r   r   r   r	   r   r   r   ri   rj   rE   r   rI   rk   )r<   r>   rk   r  r  r  r?   r?   r@   'test_secp256k1_signing_and_verification@  s    

z/TestJWS.test_secp256k1_signing_and_verificationc           	      C   s   t d D ]}tjf i |}ttt}t|}|d}|dkrJd}n|dkrXd}nd}|g|_	|
|d td|id  |jd	d
}t }|g|_	|| ||  | |j| qd S )Nr#   r   r3   ZBP256R1r4   ZBP384R1ZBP512R1r"   Tr   )r   r   r:   r   r   r   r	   r   r  r  r   r   ri   rj   rE   r   rI   rk   )	r<   Zkey_datar>   rk   r  Z
curve_namer"   r  r  r?   r?   r@   'test_brainpool_signing_and_verificationK  s$    


z/TestJWS.test_brainpool_signing_and_verificationc                 C   s   t  jdd}tjdd}||d tddi |jdd}| d	|v  t	| }| 
|d
 d t }|| || d S )Nr+   r   r  rk   r"   r'  Tr   z..rk   )r   r:   rY   r	   r   r   r   ri   r   r   rI   rj   rE   )r<   r>   r   Zo1o2tr?   r?   r@   test_jws_issue_224d  s    
zTestJWS.test_jws_issue_224c                 C   sV   ddi}t |}t jdd}tjdd}|j||d| id | 	|| d S )	Nr"   r'  r+   r  rb   r  r   r(  header)
r   deepcopyr   r:   rY   r	   r   r   r   rI   )r<   r  Zheader_copyr>   r   r?   r?   r@   test_jws_issue_281s  s    

zTestJWS.test_jws_issue_281c           	      C   s   t  }t jjdddd}t jjdddd}t jjdddd}|| || tjd	d
}|j|dd t }||	 | | 
|jd	 tjd	d
}|j|dd t }| t  ||	 | W d    n1 s0    Y  d S )Nr+   r'  r   rU   ZHS384r   HS512key3   secretr  {"alg":"HS256"}r(  )r   r{   r:   rY   r|   r	   r   r   rj   ri   rI   rk   ru   r   )	r<   r   r   r   r  s1s2Zs3Zs4r?   r?   r@   test_decrypt_keyset  s     

zTestJWS.test_decrypt_keysetN)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    s"   r  )?r   r  r   rf   r   r  r  r   rf   r   r   r   rL  rf   r   rG  rf   r   rL  r   r   r   r   r   r   r   rL  r  r   rf   r   r   rf   rL  r   r   rf   r  rL  r   r  r   r   r  r   r   rf   rg  r  r   rf   r   r	  r   r   r   rL  r   r   r   r   rL  r
  Z.eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQaV  oahUIoWw0K0usKNuOR6H4wkf4oBUXHTxRvgb48E-BVvxkeDNjbC4he8rUWcJoZmds2h7M70imEVhRU5djINXtqllXI4DFqcI1DgjT9LewND8MW2Krf3Spsk_ZkoFnilakGygTwpZ3uesH-PFABNIUYpOiN15dsQRkgr0vEhxN92i2asbOenSZeyaxziK72UwxrrKoExv6kc5twXTq4h-QChLOln0_mtUZwfsRaMStPs6mS6XrgxnxbWhojf663tuEQueGC-FCMfra36C9knDFGzKsNa7LZK2djYgyD3JR_MB_4NUJW_TqOQtwHYbxevoJArm-L5StowjzGy-_bq6GwaV  kLdtIj6GbDks_ApCSTYQtelcNttlKiOyPzMrXHeI-yk1F7-kpDxY4-WY5NWV5KntaEeXS1j82E375xxhWMHXyvjYecPT9fpwR_M9gV8n9Hrh2anTpTD93Dt62ypW3yDsJzBnTnrYu1iwWRgBKrEYY46qAZIrA2xAwnm2X7uGR1hghkqDp0Vqj3kbSCz1XyfCs6_LehBwtxHIyh8Ripy40p24moOAbgxVw3rxT_vlt3UVe4WO3JkJOzlpUf-KTVI2Ptgm-dARxTEtE-id-4OJr0h-K-VFs3VSndVTIznSxfyrj8ILL6MG_Uv8YAu7VILSB3lOW085-4qE3DzgrTjgyQz1r52Xk46c-LsfB5P442p7atdPUrxQSy4mti_tZI3Mgf2EuFVbUoDBvaRQ-SWxkbkmoEzL7JXroSBjSrK3YIQgYdMgyAEPTPjXv_hI2_1eTSPVZfzL0lffNn03IXqWF5MDFuoUYE0hzb2vhrlN_rKrbfDIwUbTrjjgieRbwC6Cl0ZwLb35x7hmQWZsWJmB_vle87ihgZ19S8lBEROLIsZG4ayZVe9Hi9gDVCOBmUDdaDYVTSNx_8Fyw1YYa9XGrGnDew00J28cRUoeBB_jKI1oma0Orv1T9aXIWxKwd4gvxFImOWr3QRL9KEBRzk2RatUBnmDZJTIAfwTs0g68UZHvtczZK-YwE7diUh0qR1tR7w8WHtolDx3MZ_OTowiFvgfeQ3SiresXjm9gZ5KLhMXvo-uz-KUJWDxS5pFQ_M0evdo1dKiRTjVw_x4NyqyXPM5nULPkcpU827rnpZzAJKpdhWAgqrXGKAECQH0Xt4taznjnd_zVpAmZZq60WPMBMfKcuEzDq0gfgJ1DdFGXiLvQEZnuKEN0UUmsJBxkjydc3j4ZYdBiMRAy86x0vHCjywcMlYYg4yoC4YZa9hNVcsjqA3FeiL19rk8g6Qn29Tt0cj8qqyFpz9vNDBUfCAiJVeESOjJDZPYHdHY8v1b-o-Z2X5tvLx-TCekf7oxyeKDUqKWjiszVIMpMYbPf47dT1w_zDUXfPimsSegnMOA1zTaX7aGk_8urY6R8-ZW1FxU7AlWAyLWybqq6t16VFd7hQd0y6flUK4SlOydB61gwanOsXGOAOv82cHq0E3eL4HrtZkUuKvnPrMnsUUFlfUdybVzxyjz9JF_XyaY14ardLSjf4L_FNYa  eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGeipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDbSv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaVmqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je81860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi6UklfCpIMfIjf7iGdXKHzg.48V1_ALb6US04U3b.5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6jiSdiwkIr3ajwQzaBtQD_A.XFBoMYUZodetZdvTiFvSkQ)r>   r(  r   vectorzLive long and prosper.Z3eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0aV  sXchDaQebHnPiGvyDOAT4saGEUetSyo9MKLOoWFsueri23bOdgWp4Dy1WlUzewbgBHod5pcM9H95GQRV3JDXboIRROSBigeC5yjU1hGzHHyXss8UDprecbAYxknTcQkhslANGRUZmdTOQ5qTRsLAt6BTYuyvVRdhS8exSZEy_c4gs_7svlJJQ4H9_NxsiIoLwAEk7-Q3UXERGYw_75IDrGA84-lA_-Ct4eTlXHBIY2EaV7t7LjJaynVJCpkv4LKjTTAumiGUIuQhrNhZLuF_RJLqHpM2kgWFLU7-VTdL1VbC2tejvcI2BlMkEpk1BzBZI0KQB0GaDWFLN-aEAw3vRwaV  VFCWOqXr8nvZNyaaJLXdnNPXZKRaWCjkU5Q2egQQpTBMwhprMzWzpR8Sxq1OPThh_J6MUD8Z35wky9b8eEO0pwNS8xlh1lOFRRBoNqDIKVOku0aZb-rynq8cxjDTLZQ6Fz7jSjR1Klop-YKaUHc9GsEofQqYruPhzSA-QgajZGPbE_0ZaVDJHfyd7UUBUKunFMScbflYAAOYJqVIVwaYR5zWEEceUjNnTNo_CVSj-VvXLO5VZfCUAVLgW4dpf1SrtZjSt34YLsRarSb127reG_DUwg9Ch-KyvjT1SkHgUWRVGcyly7uvVGRSDwsXypdrNinPA4jlhoNdizK2zF2CWQz9gY2w6I6S6L0juEKsbeDAwpd9WMfgqFoeA9vEyEUuk4kLwBKcoe1x4HG68ik918hdDSE9vDQSccA3xXHOAFOPJ8R9EeIAbTi1VwBYnbTp87X-xcPWlEPkrdoUKW60tgs1aNd_Nnc9LEVVPMS390zbFxt8TN_biaBgelNgbC95sMzuKlCKvKv_ZJMVcdIs5vVSU_6cPtYI1ljWytExV_skstvRSNi9r66jdd9-yBhVfuG4shsp2j7rGnIio901RBeHo6TPKWVVykPu1iYhQXw1jIABfw-MVsN-3bQ76WLdt2SDxsHs7q7zPyUyHXmps7ycZ5c72wGkUwNOjYelmkiNS0zw0kZbV63cVRvVX6yk3C8cMxo2qCM4Y8nsq1lmMSYhG4EcL6FWbX5h9yuvngs4iLEFk6eALoUS4vIWEwcL4txw9LsWH_zKI-hwoReoP77cOdSL4AVcraHawlkpyd2TWjE5evgbhWtOxnZee3cXJBkAi64Ik6jZxbvk-RR3pEhnCszo_8V14SezckO6CNLKs_btPdFiO9_kC1DsuUTd2LAfIIVeMZ7jn1Gus_Ff7B7IVx3p5KuBGOVF8L-qifLb6nQnLysgHDh132NDioZkhH7mI7hPG-PYE_odApKdnqECHWw0J-F0JWnUd6D2B_1TvF9mXA2Qx-iGYn8OVV1Bsmp6qUzeNho5yRBEBxhGBtQRww9QirZsB66TrfFReG_CcteI1aCneT0ELGhYlRlCtUkTRclIfuEPmNsNDPbLoLqqCVznFbvdB7x-Tl-m0l_eFTj2KiqwGqE9PZB9nNTwMVvH3VRRSLWACvPnSiwP8N5Usy-WRXS-V7TbpxIhvepTfE0NNoa  eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A.AxY8DCtDaGlsbGljb3RoZQ.KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY.9hH0vgRfYgPnAHOd8stkvwZ3eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0zeyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ.AxY8DCtDaGlsbGljb3RoZQ.KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY.U0m_YmjN04DJvceFICbCVQZeyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0Zjkuz$https://server.example.com/keys.jwksa  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"recipients":[{"header":{"alg":"RSA1_5","kid":"2011-04-29"},"encrypted_key":"UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"},{"header":{"alg":"A128KW","kid":"7"},"encrypted_key":"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ"}],"iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}z#{"alg":"RSA1_5","kid":"2011-04-29"}z{"alg":"A128KW","kid":"7"})r   r  r   r  r(  unprotectedr   r  aQ  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"header":{"alg":"A128KW","kid":"7"},"encrypted_key":"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ","iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}ai  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"header":{"alg":"A128KW","kid":"7", "custom1":"custom_val"},"encrypted_key":"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ","iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}zECDH-ES+A256KWA256CBC-HS512r"   r   a  eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiJrZXkxIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoicDNpU241cEFSNUpYUE5aVF9SSEw2MTJMUGliWEI2WDhvTE9EOXFrN2NhTSIsInkiOiI1Y04yQ2FqeXM3SVlDSXFEby1QUHF2bVQ1RzFvMEEtU0JicEQ5NFBOb3NNIn19.wG51hYE_Vma8tvFKVyeZs4lsHhXiarEw3-59eWHPmhRflDAKrMvnBw1urezo_BzZyPJ76m42ORQPbhEu5NvbJk3vgdgcp03j.lRttW8r6P6zM0uYDQt0EjQ.qnOnz7biCbqdLEdUH3acMamFm-cBRCSTFb83tNPrgDU.vZnwYpYjzrTaYritwMzaguaAMsq9rQOWe8NUHICv2hgzECDH-ES+A128KWZ+F2PnliYin65AoIUxL1CwwzBPNeL2TyZPAKtkXOP50l8r   z+FPrb_xwxe8SBP3kO-e-WsofFp7n5-yc_tGgfAvqAP8gz+lM3HuyKMYUVsYdGqiWlkwTZbGO3Fh-hyadq8lfkTgBc)r"   r   r%   r   r   r   r   z{"kty": "OKP","crv": "Ed25519", "d": "nWGxne_9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A", "x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"}zExample of Ed25519 signingr"   r   zeyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc.hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg)r  rk   r  r  ZA128GCMc                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestJWEc                 C   s>   t j||td}|| | }||| ||| d S )Nalgs)r   rg   jwe_algs_and_rsa1_5rh   ri   rj   )r<   r   r(  r>   r  r!   r   r?   r?   r@   	check_encf  s
    
zTestJWE.check_encc                 C   s$   |  td td td td  d S Nr   r(  r>   r  )r  E_A1_exr   r?   r?   r@   r  p  s    zTestJWE.test_A1c                 C   s$   |  td td td td  d S r  )r  E_A2_exr   r?   r?   r@   r  t  s    zTestJWE.test_A2c                 C   s$   |  td td td td  d S r  )r  E_A3_exr   r?   r?   r@   r  x  s    zTestJWE.test_A3c                 C   s   t jtd td td}|td td  |td td  | }||td  ||td  |td td  |td td  d S )	Nr   r(  r  r   r  r   r  r  )r   rg   E_A4_exr  rh   ri   rj   )r<   r!   r   r?   r?   r@   r  |  s    zTestJWE.test_A4c                 C   sj   t jtd}|ttd  | t j. t jdgd}|ttd  W d    n1 s\0    Y  d S )Nr  r   A256KW)r   rg   r  rj   E_A5_exr  ru   InvalidJWEDatar<   r!   r?   r?   r@   r    s
    zTestJWE.test_A5c                 C   s^   t td }|td td  | t j |jdd W d   n1 sP0    Y  dS )z2Compact representation requires a protected headerr   r>   r(  Tr   N)r   rg   r  rh   ru   InvalidJWEOperationri   r  r?   r?   r@   test_compact_protected_header  s    z%TestJWE.test_compact_protected_headerc                 C   s   |  tj: tjtd td dtd d}|jdd W d    n1 sL0    Y  |  tj: tjtd td dtd d	}|jdd W d    n1 s0    Y  d S )
Nr   r(  ZXYZr>   )Zaad	recipientTr   z'{"jku":"https://example.com/keys.jwks"})r  r!  )ru   r   r  rg   r  ri   r  r?   r?   r@   test_compact_invalid_header  s    *z#TestJWE.test_compact_invalid_headerc                 C   s~   d}t t}tjjddd}t||}|| | }|	|| | 
|j|d t }|	ttjf i t d S )Nplainr   rQ   rn   rd   )r   !Issue_136_Protected_Header_no_epkr   r:   rY   r   rg   rh   ri   rj   rI   rk   encodeIssue_136_Contributed_JWEIssue_136_Contributed_Key)r<   r   r(  r>   r!   r   r?   r?   r@   test_JWE_Issue_136  s    
zTestJWE.test_JWE_Issue_136c                 C   s   dd }t ddd|}d|i}tj|d}|ttd  d	d
 }t ddd|}d|i}tj|d}| tj  |ttd  W d    n1 s0    Y  d S )Nc                 S   s   | j d dkS r  r  r  r?   r?   r@   jwe_chk1  s    z,TestJWE.test_customhdr_jwe.<locals>.jwe_chk1r  FTr  r  r   c                 S   s   | j d dkS r  r  r  r?   r?   r@   jwe_chk2  s    z,TestJWE.test_customhdr_jwe.<locals>.jwe_chk2)r   r   rg   rj   customhdr_jwe_exr  ru   r  )r<   r)  r  r  r!   r*  r?   r?   r@   test_customhdr_jwe  s    zTestJWE.test_customhdr_jwec                 C   sP   t dddd }d|i}| t tj|d W d    n1 sB0    Y  d S )Nr  FTr"   r  )r   ru   r   r   rg   r  r?   r?   r@   test_customhdr_jwe_exists  s    z!TestJWE.test_customhdr_jwe_existsc                 C   sj   d}t t}dtjv rftjjddd}t||}|| |	 }t }|
|| | |j| d S )N   plainr6   r/   rn   )r   X25519_Protected_Header_no_epkr   rq   r:   rY   r   rg   rh   ri   rj   rI   rk   )r<   r   r(  Z	x25519keye1r   e2r?   r?   r@   test_X25519_ECDH  s    

zTestJWE.test_X25519_ECDHc           	      C   s   t  }t jjdddd}t jjdddd}t jjdddd}|| || tjd	d
}||d t }||	 | | 
|jd	 tjd	d
}||d t }| t  ||	 | W d    n1 s0    Y  d S )Nr+   r,   r   rU   rT   r   r  r  r  r   rc    {"alg":"A256KW","enc":"A256GCM"})r   r{   r:   rY   r|   r   rg   rh   rj   ri   rI   rk   ru   r   )	r<   r   r   r   r  r0  r1  Ze3Ze4r?   r?   r@   r    s     

zTestJWE.test_decrypt_keysetN)r   r   r   r  r  r  r  r  r  r   r"  r(  r,  r-  r2  r  r?   r?   r?   r@   r  e  s   
r  a  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"recipients":[{"header":{"alg":"RSA1_5","kid":"2011-04-29"},"encrypted_key":"UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"}],"iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"PURPOSEFULLYBROKENYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}a  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"recipients":[{"header":{"alg":"RSA1_5","kid":"2011-04-29"},"encrypted_key":"UGhIOguC7IuEvf_NPVaYsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"}],"iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"PURPOSEFULLYBROKENYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}c                   @   s    e Zd Zedd Zdd ZdS )TestMMAc                 C   s(   dd l }|jdd| _d| _d| _d S )Nr   ZJWCRYPTO_TESTS_ENABLE_MMAFi  r  )osenvironr  	enableMMA
iterationssub_iterations)clsr6  r?   r?   r@   
setUpClass  s    zTestMMA.setUpClassc              
   C   s  | j rtd d}tjtd}|t d}tjtd}|t dd l}t	|d|j}t
| jD ]}| }t
| jD ]:}| tj |t W d    qx1 s0    Y  qx| }	||	| | j 7 }| }t
| jD ]<}| tj |t W d    q1 s0    Y  q| }	||	| | j 7 }qd|| j }|| j }|| | d }
td| td| tdt|
|
 | |
d	 d S )
NzTesting MMA timing attacksr   r  perf_counterr  zMMA ok cek: {}zMMA ko cek: {}zMMA deviation: {}% ({})r   )r8  printr   rg   r  rj   MMA_vector_ok_cekMMA_vector_ko_cektimegetattrr   r9  r:  ru   r  decryptMMA_vector_keyr   intZ
assertLess)r<   Zok_cekZok_eZko_cekZko_erA  counter_startstopZ	deviationr?   r?   r@   test_MMA  s<    

*,

zTestMMA.test_MMAN)r   r   r   classmethodr<  rJ  r?   r?   r?   r@   r5  
  s   
r5  re   joeMT)issexphttp://example.com/is_roota$  eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.QR1Owv2ug2WyPBnbQrRARTeEk9kDO2w8qDcjiHnSJflSdv1iNqhWXaKH4MqAkQtMoNfABIPJaZm0HaA415sv3aeuBWnD8J-Ui7Ah6cWafs3ZwwFKDFUUsWHSK-IPKxLGTkND09XyjORj_CHAgOPJ-Sd8ONQRnJvWn_hXV1BNMHzUjPyYwEsRhDhzjAD26imasOTsgruobpYGoQcXUwFDn7moXPRfDE8-NoQX7N7ZYMmpUDkR-Cx9obNGwJQ3nM52YCitxoQVPzjbl7WBuB7AohdBoZOdZ24WlN1lVIeh8v1K4krB8xgKvRU8kgFrEn_a1rZgN5TiysnmzTROF869lQ.AxY8DCtDaGlsbGljb3RoZQ.MKOle7UQrG6nSxTLX6Mqwt0orbHvAKeWnDYvpIAeZ72deHxz3roJDXQyhxx0wKaMHDjUEOKIwrtkHthpqEanSBNYHZgmNOV7sln1Eu9g3J8.fiK51VwhsxJ-siBMR-YFiAa4  eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiY3R5IjoiSldUIn0.g_hEwksO1Ax8Qn7HoN-BVeBoa8FXe0kpyk_XdcSmxvcM5_P296JXXtoHISr_DD_MqewaQSH4dZOQHoUgKLeFly-9RI11TG-_Ge1bZFazBPwKC5lJ6OLANLMd0QSL4fYEb9ERe-epKYE3xb2jfY1AltHqBO-PM6j23Guj2yDKnFv6WO72tteVzm_2n17SBFvhDuR9a2nHTE67pe0XGBUS_TK7ecA-iVq5COeVdJR4U4VZGGlxRGPLRHvolVLEHx6DYyLpw30Ay9R6d68YCLi9FYTq3hIXPK_-dmPlOUlKvPr1GgJzRoeC9G5qCvdcHWsqJGTO_z3Wfo5zsqwkxruxwA.UmVkbW9uZCBXQSA5ODA1Mg.VwHERHPvCNcHHpTjkoigx3_ExK0Qc71RMEParpatm0X_qpg-w8kozSjfNIPPXiTBBLXR65CIPkFqz4l1Ae9w_uowKiwyi9acgVztAi-pSL8GQSXnaamh9kX1mdh3M_TT-FZGQFQsFhu0Z72gJKGdfGE-OE7hS1zuBD5oEUfk0Dmb0VzWEzpxxiSSBbBAzP10l56pPfAtrjEYw-7ygeMkwBl6Z_mLS6w6xUgKlvW6ULmkV-uLC4FUiyKECK4e3WZYKw1bpgIqGYsw2v_grHjszJZ-_I5uM-9RA8ycX9KqPRp9gc6pXmoU_-27ATs9XCvrZXUtK2902AUzqpeEUJYjWWxSNsS-r1TJ1I-FMJ4XyAiGrfmo9hQPcNBYxPz3GQb28Y5CLSQfNgKSGt0A4isp1hBUXBHAndgtcslt7ZoQJaKe_nNJgNliWtWpJ_ebuOpEl8jdhehdccnRMIwAmU1n7SPkmhIl1HlSOpvcvDfhUN5wuqU955vOBvfkBOh5A11UzBuo2WlgZ6hYi9-e3w29bR0C2-pp3jbqxEDw3iWaf2dc5b-LnR0FEYXvI_tYk5rd_J9N0mg0tQ6RbpxNEMNoA9QWk5lgdPvbh9BaO195abQ.AVO9iT5AV4CzvDJCdhSFlQc                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestJWTc                 C   s   t jf i t}tjtttd}|| |	 }|
| tjt|dtd}tjt|dditd}| jtjtjt|td d S )Nr  F)r   r>   check_claimsr  rO  rM  r   r>   r  )r   r:   E_A2_keyr   JWT	A1_header	A1_claimsr  make_encrypted_tokenri   rj   A1_tokenru   Z
JWTExpired)r<   r>   r  tokenr?   r?   r@   r  j  s     


zTestJWT.test_A1c                 C   s   t jf i td }tjttd td}tj|j|dd}| 	t
t|j | tj( tjttd g dd W d    n1 s0    Y  d S )Nr>   rS  Fr   r>   rR  )rT   zA192CBC-HS384r   )r   r:   r  r   rU  A2_tokenr  r  claimsrI   rW  r   ru   r   r  )r<   ZsigkeyZtouterZtinnerr?   r?   r@   r  |  s    zTestJWT.test_A2c                 C   s`  t jf ddit}t jtt}tt}d|d< t	j
|ttd}|| | }| jt	jt	j
||tddid || t	j
||tddid tt}d|d< t	j
|ttd}|| | }| jt	jt	j
||td t jtt}tt}t	j
|ttd}|| | }| jt	jt	j
||tddid || t	j
||tddid d S )	Nr   testkeyr  rO  rM  r   r>   r  rR  r   rS  )r   r:   rT  r{   rx   r   rB   r   rV  r   rU  rW  r  rX  ri   ru   JWTMissingKeyr|   )r<   r>   r   r  r  rZ  r?   r?   r@   r    sH    









zTestJWT.test_decrypt_keysetc                 C   s   t jtt}t jf ddit}|| t jf ddit}t		t
}d|d< tj|ttd}|| | }| tj& tj||tddid W d    n1 s0    Y  || tj||tddid d S )Nr   r^  r  rO  rM  r_  )r   r{   rx   r   rB   r:   E_A3_keyr|   rT  r   rV  r   rU  rW  r  rX  ri   ru   r`  )r<   r   r>   r  r  rZ  r?   r?   r@   test_decrypt_keyset_dup_kid  s"    



$

z#TestJWT.test_decrypt_keyset_dup_kidc                 C   s   t jf i t}ddi}|t tjt|td}|	| |
 }| jtjtj||tddid | jtjtj||tddid tj||tddid d S )N	testclaimrb   r  Zijgir_  r   )r   r:   rT  r  rW  r   rU  rV  r  rX  ri   ru   JWTInvalidClaimValue)r<   r>   r]  r  rZ  r?   r?   r@   test_invalid_claim_type  s"    


zTestJWT.test_invalid_claim_typec                 C   sd   t jf i t}dd d}d}d}tj|||td}|| | }tj||tdd ddd d S )Nrb   )rN  rO  z{"string_claim":"test"}z&{"alg":"RSA1_5","enc":"A128CBC-HS256"})default_claimsr  )rN  rO  Zstring_claimr_  )r   r:   rT  r   rU  r  rX  ri   )r<   r>   rf  Zstring_claimsstring_headerr  rZ  r?   r?   r@   test_claim_params  s    


zTestJWT.test_claim_paramsc                 C   s  t  jdd}d}d}t||}|| | }tj||ddid | jtjtj||ddid tj||dd	id | jtjtj||dd
id d}t||}|| | }| jtjtj||dd	id | jtjtj||ddid tj||d d S )Nr+   r  z{"typ":"application/test"}r  typrb   r[  Zwrongzapplication/testzapplication/wrongz{"typ":"diffmime/test"}r   r>   )	r   r:   rY   r   rU  make_signed_tokenri   ru   rd  )r<   r>   r]  rg  r  rZ  r?   r?   r@   test_claims_typ  s2    

zTestJWT.test_claims_typc                 C   s   t  jdd}tdi }| d|j || | }t }|	|| | d|j tdd}|| | }tdd}| d|j || | }t }|	|| | d|j d S )Nr+   r  r  z{}r   )
r   r:   rY   r   rU  rI   r]  rk  ri   rj   )r<   r>   r  rZ  Z_jwtr?   r?   r@   test_empty_claims  s$    


zTestJWT.test_empty_claimsc                 C   sh   t jf i t}tdi }|| | }t  }|t  j	dd || tj||d d S )Nz{"alg":"ES256"}r+   r  rj  )
r   r:   A3_keyr   rU  rk  ri   r{   r|   rY   )r<   r>   r  rZ  r   r?   r?   r@   test_Issue_2090  s    

zTestJWT.test_Issue_209c                 C   s   dddgi}t jddd}tjddi|d	}|| | }tj||ddid
 tj||ddid
 tj||ddgid
 tj||ddgid
 tj||dddgid
 tj||dddgid
 | jtjtj||ddid
 | jtjtj||ddgid
 | jtjtj||dddgid
 d S )NZaudzwww.example.comzwww.test.netr+   rM   rY   rO   r"   r'  r  r]  )r>   r   rR  ZnomatchZ	failmatch)r   r:   r   rU  rk  ri   ru   rd  )r<   r]  r>   rZ  sertokr?   r?   r@   test_Issue_277>  s4    



zTestJWT.test_Issue_277c                 C   sL  t jddd}ddi}tjddi|d}|| | }|| d	|_|| d
|_| t	 || W d    n1 s0    Y  tj||d tj||d	d | t	  tj||d
d W d    n1 s0    Y  tj|dg|d d|_
tj||d d|_
| t	 tj||d W d    n1 sB0    Y  d |_
d|_tj||d ddg|_tj||d d|_| t	 tj||d W d    n1 s0    Y  ddg|_| t	 tj||d W d    n1 s0    Y  d |_tjddd|d}|| | }dt_tj||d dt_|| d
|_|| d	|_| t	 || W d    n1 s0    Y  tj||d
d | t	 tj||d W d    n1 s0    Y  | t	  tj||d	d W d    n1 s0    Y  tj|ddg|d d|_
tj||d d|_
| t	 tj||d W d    n1 s0    Y  d |_
d|_| t	 tj||d W d    n1 s0    Y  ddg|_| t	 tj||d W d    n1 s0    Y  d|_tj||d ddg|_tj||d d |_d S )Nr+   rM   rq  rc  rb   r"   r'  rr  r   rg   rj  )r   r>   expected_type)r   r  r>   r.   r   rE   rD   rC  rV   r  ZA256GCMr  FT)r   r:   r   rU  rk  ri   validateru  ru   	TypeErrorr   key_opsrX  ZJWT_expect_type)r<   r>   r]  rZ  rs  Zenctokr?   r?   r@   test_unexpectedT  s    


(..
.
.


*.0..
.
zTestJWT.test_unexpectedN)r   r   r   r  r  r  rb  re  rh  rl  rn  rp  rt  ry  r?   r?   r?   r@   rQ  h  s   + rQ  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"ConformanceTestsc                 C   s&   t jdddd}| d|d d S )Nr+   secretZmystery)r   r-   r   r   )r   r:   rI   r  ro   r?   r?   r@   test_unknown_key_params  s    z(ConformanceTests.test_unknown_key_paramsc                 C   s<   | j tjtjdddgdd | j tjtjddddgd d S )Nr   rz   rD   r   )r   r    rx  r   )r   r    rx  r   r   r?   r?   r@   test_key_ops_values  s    

z$ConformanceTests.test_key_ops_valuesc                 C   s*   t jdd}|tjdtddd d S )Nr#  r3  r+      AAAAAAAAAAAAAAAAr   rc   )r   rg   rh   r   r:   r   r<   r   r?   r?   r@   test_jwe_no_protected_header  s    z-ConformanceTests.test_jwe_no_protected_headerc                 C   s2   t jdd}| t j|jtjdtddd d S )Nr#  r3  r+   r~  r   z{"enc":"A128GCM"}r   rg   ru   r  rh   r   r:   r   r  r?   r?   r@   test_jwe_no_alg_in_jose_headers  s
    z0ConformanceTests.test_jwe_no_alg_in_jose_headersc                 C   s2   t jdd}| t j|jtjdtddd d S )Nr#  r3  r+   r~  r   z{"alg":"A128KW"}r  r  r?   r?   r@   test_jwe_no_enc_in_jose_headers  s
    z0ConformanceTests.test_jwe_no_enc_in_jose_headersc                 C   s:   t jdd}tjdtdd}||d ||d d S )Nr#  r3  r+   r~  r   z&{"alg":"A128KW","enc":"A128CBC-HS256"}rc   r   rg   r   r:   r   rh   )r<   r   Zkey128r?   r?   r@   test_aes_128  s    zConformanceTests.test_aes_128c                 C   s:   t jdd}tjdtdd}||d ||d d S )Nr#  r3  r+   s   BBBBBBBBBBBBBBBBBBBBBBBBr   z&{"alg":"A192KW","enc":"A192CBC-HS384"}z {"alg":"A192KW","enc":"A192GCM"}r  )r<   r   Zkey192r?   r?   r@   test_aes_192  s    zConformanceTests.test_aes_192c                 C   s:   t jdd}tjdtdd}||d ||d d S )Nr#  r3  r+   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr   z&{"alg":"A256KW","enc":"A256CBC-HS512"}r4  r  )r<   r   Zkey256r?   r?   r@   test_aes_256  s    zConformanceTests.test_aes_256c                 C   sj   t jdd}|jtjdtdddd | }t  }|j|tjdtdddd | |j	d  d S )	Nmessager  r+   r~  r   r  r   r   )
r	   r   r   r   r:   r   ri   rj   r   r   )r<   rD   ocheckr?   r?   r@   test_jws_loopback  s    z"ConformanceTests.test_jws_loopbackc                 C   s   t jdd}tjdtdd}|j|ddid| id	 | }t  }|j||dd
 | 	|j
d  | |jd |  d S )Nr  r  r+   r~  r   r"   r  r   r  r   r   )r	   r   r   r:   r   r   r   ri   rj   r   r   rI   r  )r<   rD   r>   r  r  r?   r?   r@   test_jws_headers_as_dicts  s    
z*ConformanceTests.test_jws_headers_as_dictsc                 C   s   t jddddd}tjdtdd}||d	| i | }t  }|| |	| | 
|jd
 | 
t|jd d	 |  d S )Nr  r  r  r  r   r(  r+   s    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr   r   s   messager  )r   rg   r   r:   r   rh   r   ri   rj   rC  rI   rk   r   r   r<   r   r>   r  r  r?   r?   r@   test_jwe_headers_as_dicts  s    

z*ConformanceTests.test_jwe_headers_as_dictsc                 C   sL   t jdtdd}tjdd|d }t }||| | d|j d S )Nr+   r~  r   r#  rc   )r   r(  r!  r.  )	r   r:   r   r   rg   ri   rj   rI   rk   )r<   r>   r   r  r?   r?   r@   test_jwe_default_recipient  s    
z+ConformanceTests.test_jwe_default_recipientc                 C   s   d}t jdgd}tjddd}|j||d | t|jdd	d
 | t	. t  }|j|d t|j W d    n1 s0    Y  d S )NzTeyJhbGciOiJub25lIn0.eyJpc3MiOiJqb2UiLCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0.r  r  r+   r   rq  rj  rL  T)rN  rP  r
   )
r   rU  r   r:   rj   rI   r   r]  ru   KeyError)r<   r!   rZ  r-   r?   r?   r@   test_none_key  s    zConformanceTests.test_none_keyc                 C   sJ   t d}| t jd |jtdd W d    n1 s<0    Y  d S )Nrb   zAlgorithm not allowedr   r   )r	   r   assertRaisesRegexr  r   A2_keyr  r?   r?   r@   test_no_default_rsa_1_5  s
    
z(ConformanceTests.test_no_default_rsa_1_5c                 C   s`   t jddddd}tjd}|| | }t  }|| || | 	|j
d d S )Nr#  PBES2-HS256+A128KWr  r  r  r   r.  )r   rg   r   r:   r   rh   ri   rj   rC  rI   rk   r  r?   r?   r@   test_pbes2_hs256_aeskw  s    


z'ConformanceTests.test_pbes2_hs256_aeskwc                 C   s  t jddddtddd}tjd}|| | }t  }|| |	| | 
|jd	 t jddddtd
dd}tjd}| t|j| tj}t jddd|d tddd}| td || W d    n1 s0    Y  t jd7  _|| d S )Nr#  r  r  rP   ZAAAAAAAAAAAAAAAA)r"   r   Zp2cZp2sr  r   r.  ZAAAAAAArz   z	too larger   )r   rg   r   r   r:   r   rh   ri   rj   rC  rI   rk   ru   
ValueErrorr   Zdefault_max_pbkdf2_iterationsr  )r<   r   r>   r  r  maxiterZp2cencr?   r?   r@   $test_pbes2_hs256_aeskw_custom_params   sF    


(z5ConformanceTests.test_pbes2_hs256_aeskw_custom_paramsN)r   r   r   r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?   r?   r?   r@   rz    s    
	rz  c                   @   s   e Zd Zdd ZdS )JWATestsc              	   C   s  t jj D ]|\}}| |j| | |jddh |dkrN| |j	d  n4|dkrf| |j	d  n| 
|j	t | |j	d |jdkr(| t j t j| W d    n1 s0    Y  | t j t j| W d    n1 s0    Y  t j|}| 
|t j | |j| q|jdkr| t j t j| W d    n1 sd0    Y  | t j t j| W d    n1 s0    Y  t j|}| 
|t j | |j| q|jdkr|| t j t j| W d    n1 s0    Y  | t j t j| W d    n1 sH0    Y  t j|}| 
|t j | |j| q| ||f qd S )Nr"   r   zECDH-ESr   r   r.   Zkex)r   ZJWAZalgorithms_registryitemsrI   nameZassertInZalgorithm_usage_locationZassertIsZkeysizeZassertIsInstancerE  ZassertGreaterEqualZalgorithm_useru   ZInvalidJWAAlgorithmZencryption_algZkeymgmt_algZsigning_algZJWAAlgorithmZfail)r<   r  r;  instr?   r?   r@   test_jwa_createD  sD    **,,,,zJWATests.test_jwa_createN)r   r   r   r  r?   r?   r?   r@   r  C  s   r  r  z*{"alg":"HS256","b64":false,"crit":["b64"]}z$.02c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestUnencodedPayloadc                 C   sL   d}t t}|jtjf i td d td |jdd}| 	|| d S )NzGeyJhbGciOiJIUzI1NiJ9.JC4wMg.5mvfOroL-g7HyqJoozehmsaqmvTYGEq5jTI1gVvoEoQr#   rz   r	  Tr   )
r	   r   rfc7797_payloadr   r   r:   rF   rfc7797_e_headerri   rI   r<   resultr   r.   r?   r?   r@   test_regularu  s    
z!TestUnencodedPayload.test_regularc                 C   s   d}t t}|jtjf i td d td | }| 	t
|d t | t j |jdd}W d    n1 sz0    Y  |  |jdd}| 	|| d S )NeeyJhbGciOiJIUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..A5dxf2s96_n5FLueVuW1Z_vh161FwXZC4YLPff6dmDYr#   rz   r	  rk   Tr   )r	   r   r  r   r   r:   rF   rfc7797_u_headerri   rI   r   ru   r  Zdetach_payloadr  r?   r?   r@   test_compat_unencoded  s    
*z*TestUnencodedPayload.test_compat_unencodedc                 C   sH   d}t  }|| |jtjf i td d td | |j	 d S )Nr  r#   rz   )Zdetached_payload)
r	   r   rj   rE   r   r:   rF   r  r   Zis_valid)r<   rZ  r   r?   r?   r@   "test_detached_payload_verification  s    
z7TestUnencodedPayload.test_detached_payload_verificationc                 C   sb   t t}| t j8 |jtjf i td d dddd W d    n1 sT0    Y  d S )Nr#   rz   r'  F)r"   Zb64r	  )	r	   r   r  ru   InvalidJWSObjectr   r   r:   rF   r  r?   r?   r@   test_misses_crit  s
    
z%TestUnencodedPayload.test_misses_critc                 C   s~   t t}|jtjf i td d td | t j	2 |jtjf i td d t
d W d    n1 sp0    Y  d S )Nr#   r   r	  rz   )r	   r   r  r   r   r:   rF   r  ru   r  r  r  r?   r?   r@   test_mismatching_encoding  s    
z.TestUnencodedPayload.test_mismatching_encodingN)r   r   r   r  r  r  r  r  r?   r?   r?   r@   r  s  s
   r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestOverloadedOperatorsc              	   C   s   t jjddd}d}t|d}t|d}| || ||d tdditd|	 i | 
|| ||d tdditd|	 i | || tj| }| 
|| || | || d S )	Nr+   rM   rN   My Integrity protected messagerd   r"   r'  r   )r   r:   rY   r	   r   r%  rI   r   r   r   assertNotEqualfrom_jose_tokenri   rE   r<   r>   rk   signer_asigner_bsigner_cr?   r?   r@   test_jws_equality  s&    


z)TestOverloadedOperators.test_jws_equalityc              	   C   s   t jjddd}d}t|d}| t|d | t|d |	|d t
ddit
d	| i | }| t|| | t|d
| d d S )Nr+   rM   rN   r  rd   z+JWS(payload=My Integrity protected message)r"   r'  r   zJWS.from_json_token(""))r   r:   rY   r	   r   r%  rI   strreprr   r   r   ri   )r<   r>   rk   rZ  serr?   r?   r@   test_jws_representations  s     


z0TestOverloadedOperators.test_jws_representationsc                 C   s   t jjddd}d}t|dtddd}t|dtddd}| || || | 	|| || | 	|| tj
| }| || d S )	Nr+   rM   rN   My Encrypted messagerd   r  r  r  )r   r:   rY   r   rg   r%  r   rI   rh   r  r  ri   r  r?   r?   r@   test_jwe_equality  s&    

z)TestOverloadedOperators.test_jwe_equalityc                 C   s   t jjddd}d}t|dtddd}d	}| t|| | t	|| |
| | }| t|| | t	|d
| d d S )Nr+   rM   rN   r  rd   r  r  r  zJWE(plaintext=b'My Encrypted message', protected={"alg":"A256KW","enc":"A256CBC-HS512"}, unprotected=None, aad=None, algs=None)zJWE.from_json_token("r  )r   r:   rY   r   rg   r%  r   rI   r  r  rh   ri   )r<   r>   rk   rZ  strrepr  r?   r?   r@   test_jwe_representations  s    
z0TestOverloadedOperators.test_jwe_representationsc                 C   sJ  t jjddd}tjddiddid}tjddiddid}| || || | || || | || tj|	 }| || |
| | || tjd	d
d|	 d}tjd	d
d|	 d}| || || | || || | || tj|	 }| || d|_|
| | || d S )Nr+   rM   rN   r"   r'  infoI'm a signed tokenrr  r  r  r  rg   )r   r:   rY   r   rU  rI   rk  r  r  ri   rv  rX  ru  )r<   r>   r  r  r  ZeaZebZectr?   r?   r@   test_jwt_equality  s@    







z)TestOverloadedOperators.test_jwt_equalityc                 C   s   t jjddd}tjddiddid}d	}| t|| | t|| || |	 }| t|| |j
	 }d
d| d d }| t|| d S )Nr+   rM   rN   r"   r'  r  r  rr  zJWT(header={"alg":"HS256"}, claims={"info":"I'm a signed token"}, jwt=None, key=None, algs=None, default_claims=None, check_claims=None)zBJWT(header={"alg":"HS256"}, claims={"info":"I'm a signed token"}, zjwt=JWS.from_json_token("z"), key=None, z2algs=None, default_claims=None, check_claims=None))r   r:   rY   r   rU  rI   r  r  rk  ri   rZ  )r<   r>   rZ  r  r  Zser2Zreprrepr?   r?   r@   test_jwt_representations'	  s"    



z0TestOverloadedOperators.test_jwt_representationsN)	r   r   r   r  r  r  r  r  r  r?   r?   r?   r@   r    s   )r  )
__future__r   r   ZunittestZcryptography.hazmat.backendsr   Z)cryptography.hazmat.primitives.asymmetricr   r   Zjwcryptor   r   r   r	   r   Zjwcrypto.commonr   r   r   r   r   r   r   Zdefault_allowed_algsr  r9   rB   rF   rJ   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   ZX25519PrivatePEMr   r   r   r   ZTestCaser7   ZA1_protectedr   ZA1_signaturer   r   rl   r  ZA2_protectedZ
A2_payloadr  ZA2_signaturer  ZA3_protectedZ
A3_payloadro  ZA3_signaturer  ZA4_protectedZ
A4_payloadZA4_keyZA4_signaturer  ZA5_protectedZ
A5_payloadZA5_keyZA5_signaturer  r  r:   r  r  r  r  r  ZE_A1_plaintextZE_A1_protectedZE_A1_keyZE_A1_vectorr  ZE_A2_plaintextZE_A2_protectedrT  ZE_A2_vectorr  ZE_A3_plaintextZE_A3_protectedra  ZE_A3_vectorr  ZE_A4_protectedZE_A4_unprotectedZE_A4_vectorr  r  r+  r$  r&  r'  r  r/  r  rD  r?  r@  r5  rV  rW  rY  r\  rQ  rz  r  r  r  r  r  r  r?   r?   r?   r@   <module>   sJ  0
!) 	 	  k






	






 D


 2  A +: