o
    &g                    @   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jNdi e;e5e6e97dseddiejNdi e@e5e6e>7dseddieMddddddgd	ZOdZPdZQdZRG dd dej0ZSg dZTdZUdddddddddd}	ZVdZWejNdi eVeeUe5e6eTeWdZXdZYdZZdddddddddd}	Z[dZ\ejNdi e[eeZeYe\dZ]dZ^dZ_d+d-dZ`dZaejNdi e`ee_7dse^eadZbdZcddiZddZeejNdi e[dejNdi e`deeceede^eedZfdZgdZhdddZidZjddddddddȜZkddddiddΜZldddZmG ddф dej0ZnejNdi 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-256+MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4+4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyMenc1)ktycrvxyusekidRSAaV  0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgwAQABRS256z
2011-04-29)r   nealgr   z+cn-I_WNMClehiVp51i_0VpOENW1upEerA8sEam5hn-sz+NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs)keysthumbprintsr&   +870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE)r   r   r   r   dr   r   aV  X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Qz83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfsz3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxkګG4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0zs9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgkzGyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU)r   r#   r$   r)   pqdpdqqir%   r   octA128KWGawgguFyGrWKav7AX4VKUg)r   r%   kzVAyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAowz HMAC key used in JWS A.1 example)r   r3   r   sig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$   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Ed25519+11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo)r   r   r   +kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4k+nWGxne_9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2A)r   r   r)   r   	secp256k1+Ss6na3mcci8Ud4lQrjaB_T40sfKApEcl2RLIWOJdjowz+7l9qIKtKPW6oEiOYBt7r22Sm0mtFJU-yBkkvMvpscd8)r   r   r   r   P-256K+GYhU2vrYGZrjLZn71Xniqm54Mi53xiYtaTLawzaf9dA)r   r   r   r   r)   BP-256+mpkJ29_CYAD0mzQ_MsrbjFMFYtcc9Oxpro37Fa4cLfI+iBfhNHk0cI73agNpjbKW62dvuVxn7kxp1Sm8oDnzHl8BP-384@WZanneaC2Hi3xslA4znJv7otyEdV5dTPzNUvBjBXPMytf4mRY9JaAITdItjvUTAhz@KNLRTNdvUg66aB_TVW4POZkE3q8S0YoQrCzYUrExRDe_BXikkqIama-GYQ3UBOQLBP-512zVaQXpvz7DH9OK5eFNO9dY3BdPY1v0-8Rg9KC322PY1JyBJq3EhT0uR_-tgbL2E_aGP6k56lF1xIOOtQxo8zziGAzVl9XLHHncigOPr5Tvnj_mVzBFv6i7rdBQrLTq3RXZlCC_f_q6L2o79K9IrN_J2wWxAfS8ekuGPGlHZUzK-3D9sAz+KdKRgq0WEM97BQw3jpW_fTOep6fn-Samv4DfDNb-4s4z@B5WeRV0-RztAPAhRbphSAUrsIzy-eSfWGSM5FxOQGlJcq-ECLA_-SIlH7NdWIEJYVF_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-----
+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   &   t d }|D ]
}tjdi | qd S Nr&    )
PublicKeysr   JWKselfkeylistkeyrL   rL   M/root/parts/websockify/install/lib/python3.10/site-packages/jwcrypto/tests.pytest_create_pubKeys     zTestJWK.test_create_pubKeysc                 C   rJ   rK   )PrivateKeysr   rN   rO   rL   rL   rS   test_create_priKeys  rU   zTestJWK.test_create_priKeysc                 C   sr   t d }|D ] }tjdi |}|d |d | }| t|| qtjdi t tjdi t d S )Nr&   signverifyrL   )	SymmetricKeysr   rN   
get_op_keyexportassertEqualr   Useofx5cRSAPrivateKey)rP   rQ   rR   jwkeyr$   rL   rL   rS   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 )Nr0      r   sizer       r   P-521r   curveA192KWMySymmetricKeyr   r%   r   r   encrypt   r"   r   r%   )r   rd   r%   )r   rN   generater]   lenr   r[   key_sizerP   r3   rL   rL   rS   test_generate_keys  s   zTestJWK.test_generate_keysc                 C   sV   t jdi t}| }| dt|v  t jdi t|}| |d |d  d S )Nr)   r   rL   )r   rN   r_   export_publicassertFalser   r]   )rP   r3   jkk2rL   rL   rS   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 )Nr0      rc   test {"alg":"A128KW","enc":"A128GCM"}utf-8A128CBC-HS256rn   r3       z&{"alg":"A256KW","enc":"A128CBC-HS256"})r   rN   ro   r   JWEadd_recipient	serializedeserializer]   payloaddecoderp   r   )rP   rR   r$   r   rL   rL   rS   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   rg   rY   rf   r   r   )r   rh   r   r<   r@   rC   rE   )r   rN   ro   r[   rP   rR   rL   rL   rS   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 )Nr7   r   r   )r   ImplementedOkpCurvesrN   ro   r]   )rP   r   rR   rL   rL   rS   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    rY   r   )r   generate_private_keyr   r   rN   	from_pycar]   
public_keyr[   public_numbersr#   r   	SECP256R1r   assertRaisesInvalidJWKValue)rP   rsa1krsa1krsa2ec1kec1kec2rL   rL   rS   test_import_pyca_keys  s"   zTestJWK.test_import_pyca_keysc                 C   s8   t jjddd}t j| }| | |  d S )Nr0   rb   rc   )r   rN   ro   	from_jsonr\   r]   )rP   r3   r   rL   rL   rS   test_jwk_from_json  s   zTestJWK.test_jwk_from_jsonc           
      C   s  t jd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 }qj| |ttd  d S )N   r   r)   r   r&   rL   )r   rN   r_   JWKSetaddimport_keysetr\   r]   rp   get_keyr   r   rV   
assertTrue
isinstance)
rP   r3   ksks2k1rw   ks3ksmnumitemrL   rL   rS   test_jwkset  s(   

zTestJWK.test_jwksetc                 C   s   t jtt}t jttd d }t }d|d< t jdi |}| ||	d | 
|	d || | ||h|d | dt|d  | t j |	d W d    d S 1 sfw   Y  d S )Nr&   r   r   r   z	not-there   rL   )r   r   r   r   rV   rN   r_   copyr]   r   assertIsNoner   get_keysrp   r   r   )rP   r   r   kwargsrw   rL   rL   rS   test_jwkset_get_keys  s   
"zTestJWK.test_jwkset_get_keysc                 C   s   t  }t }d|d< |t jdi | t }d|d< |t jdi | t  }||  | t	|d d | t	|d t	|d  d S )Nkid_1r   kid_2r&      rL   )
r   r   r_   r   r   rN   r   r\   r]   rp   )rP   r   key1key2r   rL   rL   rS   test_jwkset_issue_208(  s    zTestJWK.test_jwkset_issue_208c                 C   L   t dttd D ]}tjdi td | }| | td |  q	d S Nr   r&   r'   rL   )rangerp   rM   r   rN   r]   
thumbprintrP   ir3   rL   rL   rS   test_thumbprint5     
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 )NrY   passwordrX   r   )r   rN   from_pemRSAPublicPEMr]   export_to_pemr[   RSAPrivatePEMRSAPrivatePasswordr   r   r#   
PublicCertPublicCertThumbprint)rP   pubkrsapubprikrsapripubcrL   rL   rS   test_import_from_pem<  s   

zTestJWK.test_import_from_pemc                 C   4   t jt}| | t | t| t d S N)	r   rN   r   ECPublicPEMr]   r   r   r\   ECPublicJWK)rP   pub_ecrL   rL   rS   test_import_ec_from_pemI     zTestJWK.test_import_ec_from_pemc                 C   r   r   )	r   rN   r   X25519PublicPEMr]   r   r   r\   X25519PublicJWK)rP   
pub_x25519rL   rL   rS   test_import_x25519_from_pemN  r   z#TestJWK.test_import_x25519_from_pemc                 C   s\   t jdi td d }| |j | |j | |j | t	td d |
  d S )Nr&   r   rL   )r   rN   rZ   r   is_symmetricru   
has_publichas_privater]   r   export_symmetricr   rL   rL   rS   test_export_symmetricS  s   zTestJWK.test_export_symmetricc                 C   sP   t jt}| |j | |j | |j |	 }| 
t|d t d S )Nr   )r   rN   r   r   ru   r   r   r   r   rt   r]   r   r   )rP   rR   r   rL   rL   rS   test_export_public[  s   zTestJWK.test_export_publicc                 C   s   t jjttd}| |j | |j | |j	 |
 }t jdi t|}| |j	 | }t jdi t|}| |j	 | |d |d  d S )Nr   r   rL   )r   rN   r   r   r   ru   r   r   r   r   export_privater   rt   r]   )rP   rR   priprikeypubpubkeyrL   rL   rS   test_export_privatec  s   zTestJWK.test_export_privatec                 C   s   t jd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&   r   T)as_dictr   r   +x31vrbZceU2qOPLtrUwPkLa3PNakMn9tOsq_ntFVrJcrL   )r   rN   rZ   r   r]   r   r   rt   r   r   r   r   r   r   r   rV   r\   r   )rP   rR   r3   keysetr   rL   rL   rS   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   rN   r   r   r   r   r   r   publicru   r   r   r   r   r   r]   r   )rP   rR   r   r$   r   r)   rL   rL   rS   test_public  s   
zTestJWK.test_publicc                 C   s@   |  tj tjddd W d    d S 1 sw   Y  d S )Nr0      r   r3   r   r   r   rN   rP   rL   rL   rS   test_invalid_value  s   "zTestJWK.test_invalid_valuec                 C   rJ   rK   )PublicKeys_EdDsar   rN   rO   rL   rL   rS   test_create_pubKeys_eddsa  rU   z!TestJWK.test_create_pubKeys_eddsac                 C   rJ   rK   )PrivateKeys_EdDsar   rN   rO   rL   rL   rS   test_create_priKeys_eddsa  rU   z!TestJWK.test_create_priKeys_eddsac                 C   rJ   rK   )PublicKeys_secp256k1r   rN   rO   rL   rL   rS   test_create_pubKeys_secp256k1  rU   z%TestJWK.test_create_pubKeys_secp256k1c                 C   rJ   rK   )PrivateKeys_secp256k1r   rN   rO   rL   rL   rS   test_create_priKeys_secp256k1  rU   z%TestJWK.test_create_priKeys_secp256k1c                 C   rJ   rK   )PublicKeys_brainpoolr   rN   rO   rL   rL   rS   test_create_pubKeys_brainpool  rU   z%TestJWK.test_create_pubKeys_brainpoolc                 C   rJ   rK   )PrivateKeys_brainpoolr   rN   rO   rL   rL   rS   test_create_priKeys_brainpool  rU   z%TestJWK.test_create_priKeys_brainpoolc                 C   r   r   )r   rp   r   r   rN   r]   r   r   rL   rL   rS   test_thumbprint_eddsa  r   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   rN   r   Ed25519PrivatePEMr   r   r   r	   JWSadd_signaturer   Ed25519PublicPEMru   r   objectsr]   r   )rP   r   r   sr4   r   	jws_tokenrL   rL   rS   test_pem_okp  s   
zTestJWK.test_pem_okpc                 C   s|  t jdi td d }| |d d | |jd | |j|d  | |jd t jdi td d }| |d d | |j|d	  | t	 |j
 W d    n1 s[w   Y  | t	 d
|_W d    n1 ssw   Y  | t j d|d	< W d    n1 sw   Y  | t j d|_W d    n1 sw   Y  d|_d|d< | |j|d k d S )Nr&   r   r   r   r   r   r   r    r#   xyzz!!!3r   unknownrL   )r   rN   rM   r]   r   r   r   r#   r   AttributeErrorr)   r   r$   r
  ru   r   rL   rL   rS   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   r0   r3   dGVzdCBwYXNzd29yZA)r   rN   from_passwordr]   r   rL   rL   rS   test_jwk_from_password  s   zTestJWK.test_jwk_from_passwordc                 C   s   t jjddd}|dd t jdi td d }t jdi td d }ttt}t	|}|
|d td	d
id  |jdd}t	 }|| ||  | |j| d S )Nr   r>   rg   rY   r<   r&   r   r   r%   ES256KTcompactrL   )r   rN   ro   r[   r   bytes	bytearray
A1_payloadr	   r  r  r   r   r   rY   r   r]   r   )rP   rR   pub_kpri_kr   rz   test_serialization_compactrY   rL   rL   rS   test_p256k_alias  s   

zTestJWK.test_p256k_aliasc                 C   s:   t jdi td d }| | dtd d  d S )Nr&   r   z/urn:ietf:params:oauth:jwk-thumbprint:sha-256:{}r'   rL   )r   rN   rM   r]   thumbprint_uriformatrr   rL   rL   rS   test_thumbprint_uri  s   
zTestJWK.test_thumbprint_uriN)&__name__
__module____qualname__rT   rW   ra   rs   rx   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  r  rL   rL   rL   rS   rI     sH    rI   ){   "   t   y   p   r!  :   r!  J   W   T   r!  ,      
   r~   r!  a   l   g   r!  r%  r!  H   S   2   5   6   r!  }   )Fr   r!  i   s   r6  r!  r%  r!  j   o   e   r!  r)  r*  r+  r~   r!  r9  x   r$  r!  r%  1   3   0   r=  8   r;  9   r<  r>  r=  r)  r*  r+  r~   r!  h   r"  r"  r$  r%  /   rA  r9  r:  r,  m   r$  r-  r9  .   c   r8  rB  rA  r5  r6  _   r   r8  r8  r"  r!  r%  r"  rF  u   r9  r4  ) r"  rm                  %   O      `   r4                    rM  M   r5           [   X      r\  r0        r#  r   HS256r|   )rR   r%   	protectedr   	signature)r   r!  r,  r-  r.  r!  r%  r!  R   r0  r1  r2  r3  r!  r4  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$  rC  !      C                  rQ  -   rY  r:  E      A                     r6     rU  rR  ri  q   r4     r9  rB  B   r+     <            r6     f   >   Q   r  r@  r   r         r!  n   r   r        r6     rm        rR        rU  rQ  Z   r#     rg     rB     =      rJ  r[           r      r        r  r$     r  r_     rs  rP  r              D   r'  b   r     r     r  r  rC  r+     r8  $      r[  r<  rS        r&  r  rj     r  r+     r~   r  rW  r  r     r  rV  r   r=  r#  r[  rV     ;   ro  r}     r  r     r9     rs  rz     r_  ru  r  7   rl              r~  r  r  r  r  ]         r{  rC     rA     r%  ro  rX  r  r  rR        r  r6     rE  #      rg  r>  rO  r  r^     r5  r^  )   r  r  rj     r#  r  r3  r  rV     rP  rm  r!     r     r  z   r  rl  r  rp  rD  ri  r-  ru  r     V      @   \   r  rd  r  rm  r     U   r  rk  r     r  r/  r  r$  rH  r  r  *   F      rf  r  r  r}     G   )r   r!  r,  r-  r.  r!  r%  r!  rm  r0  r1  r2  r3  r!  r4  +f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU+x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0z+jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI) r  ri  rd  r0  r#  rD  r-  r/  r{  rA  r  r  r\  r  rV  r   r  r  (   r   r%  r  |   ~   r  rs     r  rU  r     r9  )    r+  r        r{  r$  r  rQ     rl  r     r&  r(  ry   r  r9     r  r     P   r  rh  ?   r     rx  r  r(  r  ES256)r   r!  r,  r-  r.  r!  r%  r!  rm  r0  r2  r;  r1  r!  r4  )r  r,  r#  r-  r8  r,  d   rf   XAekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGkzXADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2XAY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C)Br      r  rs  r  r  r  ri  rg  r     rG  ru  r5  r        r4     r   r  r  rc  r[  rl  rZ  rt  r0     r!  r  r  r=  r  r     r5  r  r2  r-  r  rX  r  r  r  rK  r|  r7  r        r/  rh  r  rm   r1  rs  rH        ri     r  r  w   rB  )Br   r8  rp  r5  r)  r]  r  r  ry   r  r  r  r  r  r  r  r|  ry  r{  rm  ru        r  r     N   r  r     r  r  	   rh  r  r  rx  r=  r  r}  r!  r  r0  r  r  r  r   k      rU  rr  I   r8  r  r  r  r}  r  r  rg  r     r  r  r  r.  ES512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%   )	r   r   
protected1header1r   
protected2header2
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                   @      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d	i |d |d |d |dd }| }t|d }|| |d d dkr<| ||d  d S ||d  d S )
Nr%   rR   ra  r   allowed_algsrb  r   r   rL   )	r	   JWSCorer   rN   getrX   r   rY   r]   )rP   rz   r  r4   decsigrL   rL   rS   
check_sign  s   


zTestJWS.check_signc                 C      |  t d S r   )r  
A1_exampler   rL   rL   rS   test_A1     zTestJWS.test_A1c                 C   r  r   )r  
A2_exampler   rL   rL   rS   test_A2  r  zTestJWS.test_A2c                 C   r  r   )r  
A3_exampler   rL   rL   rS   test_A3  r  zTestJWS.test_A3c                 C   r  r   )r  
A4_exampler   rL   rL   rS   test_A4  r  zTestJWS.test_A4c                 C   s4   |  tj| jt ddgi}|t | | d S )Nr  r  )r   r	   InvalidJWSOperationr  
A5_exampleupdate)rP   a5_bisrL   rL   rS   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 )	Nr   r   r  r  r   r  r  r
  )
r	   r  
A6_exampler  rY   r   r   A6_serializedr]   r
  )rP   r  r4   rL   rL   rS   test_A6  s   zTestJWS.test_A6c                 C   s"   t td }|ttd  d S )Nr   r   )r	   r  r!  r   
A7_examplerP   r  rL   rL   rS   test_A7  s   zTestJWS.test_A7c                 C   sT   t td }| t j |t |d  W d    d S 1 s#w   Y  d S )Nr   )r	   r  r!  r   InvalidJWSSignaturer   
E_negativerY   r%  rL   rL   rS   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    d S 1 sRw   Y  d S )Nc                 S      | j d dkS Ncustom1
custom_valr
  jwobjrL   rL   rS   jws_chk1  r  z,TestJWS.test_customhdr_jws.<locals>.jws_chk1Custom header 1FTr,  r   header_registryr   c                 S   r*  Nr,  
custom_notr.  r/  rL   rL   rS   jws_chk2  r  z,TestJWS.test_customhdr_jws.<locals>.jws_chk2)r   r	   r  r!  r   customhdr_jws_exampler   r'  )rP   r1  newhdrnewregr  r7  rL   rL   rS   test_customhdr_jws  s   "zTestJWS.test_customhdr_jwsc                 C   sX   t dddd }d|i}| t tjtd |d W d    d S 1 s%w   Y  d S )Nr2  FTr%   r   r3  )r   r   r   r	   r  r!  rP   r9  r:  rL   rL   rS   test_customhdr_jws_exists%  s
   "z!TestJWS.test_customhdr_jws_existsc           	      C   s   g }dt jv r
tg}|D ]K}t j|d }|d }|d }t|}||d t|d  |j	dd}| 
||d  t }|| ||  | 
|jd|d  qd S )	Nr8   key_jsonr   protected_headerTr  jws_serialization_compactr|   )r   r   	E_Ed25519rN   r   r	   r  r  r   r   r]   r   rY   r   r   r   )	rP   examplescurve_examplerR   r   r?  jws_testjws_test_serialization_compact
jws_verifyrL   rL   rS   #test_EdDsa_signing_and_verification+  s.   



z+TestJWS.test_EdDsa_signing_and_verificationc                 C   s   t jd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  rL   )r   rN   r   r  r  r  r	   r  r  r   r   r   rY   r   r]   r   )rP   rR   r   rD  rE  rF  rL   rL   rS   'test_secp256k1_signing_and_verification@  s   

z/TestJWS.test_secp256k1_signing_and_verificationc           	      C   s   t d D ][}tjdi |}ttt}t|}|d}|dkr%d}n	|dkr,d}nd}|g|_	|
|d td|id  |jd	d
}t }|g|_	|| ||  | |j| qd S )Nr&   r   r@   BP256R1rC   BP384R1BP512R1r%   Tr  rL   )r   r   rN   r  r  r  r	   r  r  r  r  r   r   r   rY   r   r]   r   )	rP   key_datarR   r   rD  
curve_namer%   rE  rF  rL   rL   rS   '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 )Nr0   r   r  r   r%   r`  Tr  z..r   )r   rN   ro   r	   r  r  r   r   r   r   r]   r   rY   )rP   rR   r  o1o2trL   rL   rS   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`  r0   rO  rz   rP  r   ra  header)
r   deepcopyr   rN   ro   r	   r  r  r   r]   )rP   rV  header_copyrR   r  rL   rL   rS   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    d S 1 ssw   Y  d S )Nr0   r`  r   rk   HS384r   HS512key3   secretrP  {"alg":"HS256"}ra  )r   r   rN   ro   r   r	   r  r  r   r   r]   r   r   r   )	rP   r   r   r   r\  s1s2s3s4rL   rL   rS   test_decrypt_keyset  s"   

"zTestJWS.test_decrypt_keysetN)r  r  r  r  r  r  r  r  r   r#  r&  r)  r;  r=  rG  rH  rN  rT  rY  rd  rL   rL   rL   rS   r    s$    r  )?r(  r@  r9  r~   r"  rF  rG  r9  r~   r6  r5  r.  r  r~   r8  r  r~   r5  r  r"  r9  r-  r-  r5  r.  r9  r  rD  r9  r~   r5  r6  r~   r  r8  r"  r~   r  r  r8  r  r-  r9  r  r.  r9  r~   r  rG  r"  r~   r5  rB  r,  r.  r5  r  r,  r"  r5  r8  r  rC  .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_rKrbfDIwUbTrjjgieRbwC6Cl0ګwLb35x7hmQWZsWJmB_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)rR   ra  r   vectorzLive long and prosper.3eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0aV  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.9hH0vgRfYgPnAHOd8stkvw3eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0zeyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ.AxY8DCtDaGlsbGljb3RoZQ.KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY.U0m_YmjN04DJvceFICbCVQeyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0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  ra  unprotectedr   rg  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+A128KW+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>  r   r?  r@  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   r   jwe_algs_and_rsa1_5r   r   r   )rP   r   ra  rR   rg  r$   r   rL   rL   rS   	check_encf  s
   
zTestJWE.check_encc                 C   $   |  td td td td  d S Nr   ra  rR   rg  )ru  E_A1_exr   rL   rL   rS   r  p     zTestJWE.test_A1c                 C   rv  rw  )ru  E_A2_exr   rL   rL   rS   r  t  ry  zTestJWE.test_A2c                 C   rv  rw  )ru  E_A3_exr   rL   rL   rS   r  x  ry  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   ra  rr  r   r  r   r  rg  )r   r   E_A4_exrt  r   r   r   )rP   r$   r   rL   rL   rS   r  |  s   zTestJWE.test_A4c                 C   sl   t jtd}|ttd  | t j t jdgd}|ttd  W d    d S 1 s/w   Y  d S )Nrr  r   A256KW)r   r   rt  r   E_A5_exr|  r   InvalidJWEDatarP   r$   rL   rL   rS   r     s   "zTestJWE.test_A5c                 C   s`   t td }|td td  | t j |jdd W d   dS 1 s)w   Y  dS )z2Compact representation requires a protected headerr   rR   ra  Tr  N)r   r   rx  r   r   InvalidJWEOperationr   r  rL   rL   rS   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 s&w   Y  |  tj tjtd td dtd d	}|jdd W d    d S 1 sRw   Y  d S )
Nr   ra  XYZrR   )aad	recipientTr  z'{"jku":"https://example.com/keys.jwks"})rl  r  )r   r   r  r   rx  r   r  rL   rL   rS   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di t d S )Nplainr   rf   r   r|   rL   )r   !Issue_136_Protected_Header_no_epkr   rN   ro   r   r   r   r   r   r]   r   encodeIssue_136_Contributed_JWEIssue_136_Contributed_Key)rP   r   ra  rR   r$   r   rL   rL   rS   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    d S 1 sLw   Y  d S )Nc                 S   r*  r+  r.  r/  rL   rL   rS   jwe_chk1  r  z,TestJWE.test_customhdr_jwe.<locals>.jwe_chk1r2  FTr,  r3  r   c                 S   r*  r5  r.  r/  rL   rL   rS   jwe_chk2  r  z,TestJWE.test_customhdr_jwe.<locals>.jwe_chk2)r   r   r   r   customhdr_jwe_exr|  r   r  )rP   r  r9  r:  r$   r  rL   rL   rS   test_customhdr_jwe  s   "zTestJWE.test_customhdr_jwec                 C   sR   t dddd }d|i}| t tj|d W d    d S 1 s"w   Y  d S )Nr2  FTr%   r3  )r   r   r   r   r   r<  rL   rL   rS   test_customhdr_jwe_exists  s
   "z!TestJWE.test_customhdr_jwe_existsc                 C   sn   d}t t}dtjv r5tjjddd}t||}|| |	 }t }|
|| | |j| d S d S )N   plainrH   r7   r   )r   X25519_Protected_Header_no_epkr   r   rN   ro   r   r   r   r   r   r]   r   )rP   r   ra  	x25519keye1r   e2rL   rL   rS   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    d S 1 sqw   Y  d S )Nr0   r1   r   rk   ri   r   r}  r\  r]  r   r{    {"alg":"A256KW","enc":"A256GCM"})r   r   rN   ro   r   r   r   r   r   r   r]   r   r   r   )	rP   r   r   r   r\  r  r  e3e4rL   rL   rS   rd    s"   

"zTestJWE.test_decrypt_keysetN)r  r  r  ru  r  r  r  r  r   r  r  r  r  r  r  rd  rL   rL   rL   rS   rq  e  s    
rq  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   JWCRYPTO_TESTS_ENABLE_MMAFi  r  )osenvironr  	enableMMA
iterationssub_iterations)clsr  rL   rL   rS   
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 ]f}| }t
| jD ]}| tj |t W d    n1 sSw   Y  q;| }	||	| | j 7 }| }t
| jD ]}| tj |t W d    n1 sw   Y  qm| }	||	| | j 7 }q1|| j }|| j }|| | d }
td| td| tdt|
|
 | |
d	 d S d S )
NzTesting MMA timing attacksr   rr  perf_counterr  zMMA ok cek: {}zMMA ko cek: {}zMMA deviation: {}% ({})r   )r  printr   r   rt  r   MMA_vector_ok_cekMMA_vector_ko_cektimegetattrr   r  r  r   r  decryptMMA_vector_keyr  int
assertLess)rP   ok_cekok_eko_cekko_er  counter_startstop	deviationrL   rL   rS   test_MMA  sF   



zTestMMA.test_MMAN)r  r  r  classmethodr  r  rL   rL   rL   rS   r  
  s    
r  r}   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d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 )Nrr  F)r   rR   check_claimsrs  r  r  r   rR   rs  rL   )r   rN   E_A2_keyr   JWT	A1_header	A1_claimsrt  make_encrypted_tokenr   r   A1_tokenr   
JWTExpired)rP   rR   rS  tokenrL   rL   rS   r  j  s    



zTestJWT.test_A1c                 C   s   t jd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    d S 1 sDw   Y  d S )NrR   r  Fr   rR   r  )ri   zA192CBC-HS384r   rL   )r   rN   r  r   r  A2_tokenrz  rt  claimsr]   r  r   r   r   r  )rP   sigkeytoutertinnerrL   rL   rS   r  |  s   "zTestJWT.test_A2c                 C   s`  t jd	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   testkeyrr  r  r  r   rR   rs  r  r   r  rL   )r   rN   r  r   r   r   rV   r   r  r   r  r  rt  r  r   r   JWTMissingKeyr   )rP   rR   r   rV  rS  r  rL   rL   rS   rd    sH   










zTestJWT.test_decrypt_keysetc                 C   s   t jtt}t jdddit}|| t jd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 sWw   Y  || tj||tddid d S )Nr   r  rr  r  r  r  rL   )r   r   r   r   rV   rN   E_A3_keyr   r  r   r  r   r  r  rt  r  r   r   r  )rP   r   rR   rV  rS  r  rL   rL   rS   test_decrypt_keyset_dup_kid  s$   






z#TestJWT.test_decrypt_keyset_dup_kidc                 C   s   t jd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	testclaimrz   rr  ijgir  r   rL   )r   rN   r  r  r  r   r  r  rt  r  r   r   JWTInvalidClaimValue)rP   rR   r  rS  r  rL   rL   rS   test_invalid_claim_type  s"   



zTestJWT.test_invalid_claim_typec                 C   sd   t jdi t}dd d}d}d}tj|||td}|| | }tj||tdd ddd d S )	Nrz   )r  r  z{"string_claim":"test"}z&{"alg":"RSA1_5","enc":"A128CBC-HS256"})default_claimsrs  )r  r  string_claimr  rL   )r   rN   r  r   r  rt  r  r   )rP   rR   r  string_claimsstring_headerrS  r  rL   rL   rS   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 )Nr0   rO  z{"typ":"application/test"}r^  typrz   r  wrongzapplication/testzapplication/wrongz{"typ":"diffmime/test"}r   rR   )	r   rN   ro   r   r  make_signed_tokenr   r   r  )rP   rR   r  r  rS  r  rL   rL   rS   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 )Nr0   rO  r^  z{}r   )
r   rN   ro   r   r  r]   r  r  r   r   )rP   rR   rS  r  _jwtrL   rL   rS   test_empty_claims  s$   


zTestJWT.test_empty_claimsc                 C   sh   t jdi t}tdi }|| | }t  }|t  j	dd || tj||d d S )Nz{"alg":"ES256"}r0   rO  r  rL   )
r   rN   A3_keyr   r  r  r   r   r   ro   )rP   rR   rS  r  r   rL   rL   rS   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 )Naudzwww.example.comzwww.test.netr0   rb   ro   rd   r%   r`  rV  r  )rR   r   r  nomatch	failmatch)r   rN   r   r  r  r   r   r  )rP   r  rR   r  sertokrL   rL   rS   test_Issue_277>  s4   




zTestJWT.test_Issue_277c                 C   sF  t jddd}ddi}tjddi|d}|| | }|| d	|_|| d
|_| t	 || W d    n1 sBw   Y  tj||d tj||d	d | t	 tj||d
d W d    n1 snw   Y  tj|dg|d d|_
tj||d d|_
| t	 tj||d W d    n1 sw   Y  d |_
d|_tj||d ddg|_tj||d d|_| t	 tj||d W d    n1 sw   Y  ddg|_| t	 tj||d W d    n1 sw   Y  d |_tjddd|d}|| | }dt_tj||d dt_|| d
|_|| d	|_| t	 || W d    n	1 sGw   Y  tj||d
d | t	 tj||d W d    n	1 slw   Y  | t	 tj||d	d W d    n	1 sw   Y  tj|ddg|d d|_
tj||d d|_
| t	 tj||d W d    n	1 sw   Y  d |_
d|_| t	 tj||d W d    n	1 sw   Y  ddg|_| t	 tj||d W d    n	1 sw   Y  d|_tj||d ddg|_tj||d d |_d S )Nr0   rb   r  r  rz   r%   r`  r  r  r   r  )r   rR   expected_type)r   rs  rR   r4   r   rY   rX   r  rl   r}  A256GCMrn  FT)r   rN   r   r  r  r   validater  r   	TypeErrorr   key_opsr  JWT_expect_type)rP   rR   r  r  r  enctokrL   rL   rS   test_unexpectedT  s   










zTestJWT.test_unexpectedN)r  r  r  r  r  rd  r  r  r  r  r  r  r  r  rL   rL   rL   rS   r  h  s    + r  c                   @   r  )$ConformanceTestsc                 C   s&   t jdddd}| d|d d S )Nr0   secretmystery)r   r3   r
  r
  )r   rN   r]   r  r   rL   rL   rS   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    r   rX   r   )r   r#   r  r   )r   r#   r  r   r   rL   rL   rS   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  r  r0      AAAAAAAAAAAAAAAAr   r{   )r   r   r   r   rN   r   rP   r   rL   rL   rS   test_jwe_no_protected_header  s   z-ConformanceTests.test_jwe_no_protected_headerc                 C   2   t jdd}| t j|jtjdtddd d S )Nr  r  r0   r  r   z{"enc":"A128GCM"}r   r   r   r  r   r   rN   r   r  rL   rL   rS   test_jwe_no_alg_in_jose_headers  
   z0ConformanceTests.test_jwe_no_alg_in_jose_headersc                 C   r  )Nr  r  r0   r  r   z{"alg":"A128KW"}r   r  rL   rL   rS   test_jwe_no_enc_in_jose_headers  r  z0ConformanceTests.test_jwe_no_enc_in_jose_headersc                 C   :   t jdd}tjdtdd}||d ||d d S )Nr  r  r0   r  r   z&{"alg":"A128KW","enc":"A128CBC-HS256"}r{   r   r   r   rN   r   r   )rP   r   key128rL   rL   rS   test_aes_128     zConformanceTests.test_aes_128c                 C   r  )Nr  r  r0   s   BBBBBBBBBBBBBBBBBBBBBBBBr   z&{"alg":"A192KW","enc":"A192CBC-HS384"}z {"alg":"A192KW","enc":"A192GCM"}r  )rP   r   key192rL   rL   rS   test_aes_192  r  zConformanceTests.test_aes_192c                 C   r  )Nr  r  r0   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr   z&{"alg":"A256KW","enc":"A256CBC-HS512"}r  r  )rP   r   key256rL   rL   rS   test_aes_256  r  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messagerP  r0   r  r   r[  r   r   )
r	   r  r  r   rN   r   r   r   r   r  )rP   rX   ocheckrL   rL   rS   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  rP  r0   r  r   r%   r[  r   rU  r   r   )r	   r  r   rN   r   r  r   r   r   r   r  r]   r
  )rP   rX   rR   r  r  rL   rL   rS   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}  rm  rn  r   ra  r0   s    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr   r   s   messagerV  )r   r   r   rN   r   r   r   r   r   r  r]   r   r   r  rP   r   rR   r  r  rL   rL   rS   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 )Nr0   r  r   r  r{   )r   ra  r  r  )	r   rN   r   r   r   r   r   r]   r   )rP   rR   r   r  rL   rL   rS   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    d S 1 sCw   Y  d S )NzTeyJhbGciOiJub25lIn0.eyJpc3MiOiJqb2UiLCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0.r  rr  r0   r   r  r  r  T)r  r  r
   )
r   r  r   rN   r   r]   r   r  r   KeyError)rP   r$   r  r3   rL   rL   rS   test_none_key  s   "zConformanceTests.test_none_keyc                 C   sL   t d}| t jd |jtdd W d    d S 1 sw   Y  d S )Nrz   zAlgorithm not allowedr   r   )r	   r  assertRaisesRegexr  r  A2_keyr%  rL   rL   rS   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+A128KWrm  rn  r  r   r  )r   r   r   rN   r  r   r   r   r  r]   r   r  rL   rL   rS   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 sww   Y  t jd7  _|| d S )Nr  r  rm  re   AAAAAAAAAAAAAAAA)r%   r   p2cp2sr  r   r  AAAAAAAr   z	too larger   )r   r   r   r   rN   r  r   r   r   r  r]   r   r   
ValueErrorr   default_max_pbkdf2_iterationsr  )rP   r   rR   r  r  maxiterp2cencrL   rL   rS   $test_pbes2_hs256_aeskw_custom_params   sH   


z5ConformanceTests.test_pbes2_hs256_aeskw_custom_paramsc                 C   s   t jdtdd}ddd  d dd  d }d	d
ddd}tj|d||djdd}| tj t }|	| |
| W d    n1 sLw   Y  tj}dt_t }|	| |
| |t_d S )Nr0   r  r   z{"u": "ui z	", "uu":"z"}r1   rp  r   DEF)r%   r   r  zipr|   )r  ra  Tr  i ʚ;)r   rN   r   r   r   r  r   r   r  r   r  default_max_compressed_size)rP   rR   r   r?  r   r  defmaxrL   rL   rS   test_jwe_decompression_maxB  s8   



z+ConformanceTests.test_jwe_decompression_maxN)r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r%  r+  rL   rL   rL   rS   r    s$    
	"r  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r'| |j	d  n|dkr3| |j	d  n| 
|j	t | |j	d |jdkr| t j t j| W d    n1 s]w   Y  | t j t j| W d    n1 syw   Y  t j|}| 
|t j | |j| q|jdkr| t j t j| W d    n1 sw   Y  | t j t j| W d    n1 sw   Y  t j|}| 
|t j | |j| q|jdkr:| t j t j| W d    n	1 sw   Y  | t j t j| W d    n	1 s w   Y  t j|}| 
|t j | |j| q| ||f qd S )Nr%   r   zECDH-ESr   r   r4   kex)r   JWAalgorithms_registryitemsr]   nameassertInalgorithm_usage_locationassertIskeysizeassertIsInstancer  assertGreaterEqualalgorithm_user   InvalidJWAAlgorithmencryption_algkeymgmt_algsigning_algJWAAlgorithmfail)rP   r1  r  instrL   rL   rS   test_jwa_create^  sR   

zJWATests.test_jwa_createN)r  r  r  r@  rL   rL   rL   rS   r,  ]  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di td d td |jdd}| 	|| d S )NzGeyJhbGciOiJIUzI1NiJ9.JC4wMg.5mvfOroL-g7HyqJoozehmsaqmvTYGEq5jTI1gVvoEoQr&   r   r_  Tr  rL   )
r	   r  rfc7797_payloadr  r   rN   rZ   rfc7797_e_headerr   r]   rP   resultr  r4   rL   rL   rS   test_regular  s   
z!TestUnencodedPayload.test_regularc                 C   s   d}t t}|jtjdi td d td | }| 	t
|d t | t j |jdd}W d    n1 s=w   Y  |  |jdd}| 	|| d S )	NeeyJhbGciOiJIUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..A5dxf2s96_n5FLueVuW1Z_vh161FwXZC4YLPff6dmDYr&   r   r_  r   Tr  rL   )r	   r  rB  r  r   rN   rZ   rfc7797_u_headerr   r]   r   r   r  detach_payloadrD  rL   rL   rS   test_compat_unencoded  s   
z*TestUnencodedPayload.test_compat_unencodedc                 C   sH   d}t  }|| |jtjdi td d td | |j	 d S )NrG  r&   r   )detached_payloadrL   )
r	   r  r   rY   r   rN   rZ   rB  r   is_valid)rP   r  r  rL   rL   rS   "test_detached_payload_verification  s   
z7TestUnencodedPayload.test_detached_payload_verificationc                 C   sd   t t}| t j |jtjdi td d dddd W d    d S 1 s+w   Y  d S )Nr&   r   r`  F)r%   b64r_  rL   )	r	   r  rB  r   InvalidJWSObjectr  r   rN   rZ   r%  rL   rL   rS   test_misses_crit  s   
"z%TestUnencodedPayload.test_misses_critc                 C   s   t t}|jtjdi td d td | t j	 |jtjdi td d t
d W d    d S 1 s9w   Y  d S )Nr&   r   r_  r   rL   )r	   r  rB  r  r   rN   rZ   rC  r   rO  rH  r%  rL   rL   rS   test_mismatching_encoding  s   
"z.TestUnencodedPayload.test_mismatching_encodingN)r  r  r  rF  rJ  rM  rP  rQ  rL   rL   rL   rS   rA    s    rA  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 )	Nr0   rb   rc   My Integrity protected messager|   r%   r`  r   )r   rN   ro   r	   r  r  r]   r  r   r   assertNotEqualfrom_jose_tokenr   rY   rP   rR   r   signer_asigner_bsigner_crL   rL   rS   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 )Nr0   rb   rc   rS  r|   z+JWS(payload=My Integrity protected message)r%   r`  r   zJWS.from_json_token(""))r   rN   ro   r	   r  r  r]   strreprr  r   r   r   )rP   rR   r   r  serrL   rL   rS   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 )	Nr0   rb   rc   My Encrypted messager|   r}  rm  rn  )r   rN   ro   r   r   r  r   r]   r   rT  rU  r   rV  rL   rL   rS   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 )Nr0   rb   rc   r`  r|   r}  rm  rn  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   rN   ro   r   r   r  r   r]   r\  r]  r   r   )rP   rR   r   r  strrepr^  rL   rL   rS   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 )Nr0   rb   rc   r%   r`  infoI'm a signed tokenr  r}  rm  rn  r   )r   rN   ro   r   r  r]   r  rT  rU  r   r  r  r  )rP   rR   rW  rX  rY  eaebectrL   rL   rS   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 )Nr0   rb   rc   r%   r`  rd  re  r  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   rN   ro   r   r  r]   r\  r]  r  r   r  )rP   rR   r  rb  r^  ser2reprreprL   rL   rS   test_jwt_representationsA	  s"   



z0TestOverloadedOperators.test_jwt_representationsN)	r  r  r  rZ  r_  ra  rc  ri  rl  rL   rL   rL   rS   rR    s    )rR  rL   )
__future__r   r   unittestcryptography.hazmat.backendsr   )cryptography.hazmat.primitives.asymmetricr   r   jwcryptor   r   r   r	   r   jwcrypto.commonr   r   r   r   r   r   r   default_allowed_algsrt  rM   rV   rZ   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r  X25519PrivatePEMr   r   r   r   TestCaserI   A1_protectedr  A1_signaturer  r  r   r  A2_protected
A2_payloadr  A2_signaturer  A3_protected
A3_payloadr  A3_signaturer  A4_protected
A4_payloadA4_keyA4_signaturer  A5_protected
A5_payloadA5_keyA5_signaturer  r"  rN   r!  r$  r(  r8  r  E_A1_plaintextE_A1_protectedE_A1_keyE_A1_vectorrx  E_A2_plaintextE_A2_protectedr  E_A2_vectorrz  E_A3_plaintextE_A3_protectedr  E_A3_vectorr{  E_A4_protectedE_A4_unprotectedE_A4_vectorr|  r~  r  r  r  r  rA  r  rq  r  r  r  r  r  r  r  r  r  r  r,  rC  rH  rB  rA  rR  rL   rL   rL   rS   <module>   sL  0
!) 	 	  k






	






 D


 2  A 7+: