o
    <‘ði¤ ã                   @   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d€d�d‚dRœZ@g dƒ¢g d„¢ ZAe@d…e5e6e>ƒƒ 7ds¡e5e6e?ƒƒe5e6eAƒƒdtœZBg d†¢ZCg d‡¢ZDddˆd‰dŠd‹dRœZEg dŒ¢g d�¢ ZFeEdŽe5e6eCƒƒ 7ds¡e5e6eDƒƒe5e6eFƒƒdtœZGd�ZHe:ZId+d�d‘œZJd’ZKeJd“eeHƒ 7ds¡e5e6eIƒƒeKdtœZLd”ZMe5e6e:ƒƒejNdìi e;¤Že5e6e9ƒƒ 7ds¡ed•d–iƒejNdìi e@¤Že5e6e>ƒƒ 7ds¡ed•d—iƒeMd–dd˜œd—d…d˜œgd™œ	ZOdšZPd›ZQdœZRG d�dž„ džej0ƒZSg dŸ¢ZTd ZUdd¡dd¢d£d¤d¥d¦d§d}œ	ZVd¨ZWejNdìi eV¤ŽeeUƒe5e6eTƒƒeWd©œZXdªZYd«ZZdd¬dd­d®d¯d°d±d²d}œ	Z[d³Z\ejNdìi e[¤ŽeeZƒeYe\d©œZ]dªZ^d´Z_d+d-d‘œZ`dµZaejNdìi e`¤Žee_ƒ 7ds¡e^ead©œZbd¶Zcd·d¸iZdd¹ZeejNdìi e[¤ŽdºejNdìi e`¤Žd»eecƒeedƒe^eed¼œZfd½Zgd¾Zhd¿dÀdÁœZidÂZjdÃddÄdÅddÆdÇdÈœZkdÉdÊdËdÌidÍdÎœZldÃdÏdÁœZmG dÐdÑ„ dÑej0ƒZnejNdìi e[¤ŽZodÒZpdÓZqG dÔdÕ„ dÕej0ƒZrddÖdÁœZsd×dØdÙdÚœZtdÛZudÜZvG dÝdÞ„ dÞej0ƒZwG dßdà„ dàej0ƒZxG dádâ„ dâej0ƒZydãZzdäZ{dåZ|G dædç„ dçej0ƒZ}G dèdé„ déej0ƒZ~G dêdë„ dëe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-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Qz«83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfsz«3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxkÚ«G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0z«s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgkz«GyM_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_gJSdSgqcN96X52esAQz«2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHfQP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJwsz«1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6Iedis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYKrYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4sz«KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1wY52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6cz«AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBymXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-otsz«lSQi-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_-SIlH7NdWIEJYÚVF_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%dGdH„ Z&dIS )JÚ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 s�w   Y  |  t j¡� d|_W d   ƒ n1 s¦w   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_uric                 C   sR   t  ¡ }d|_|jttd� |  |j¡ tj	dd�}| 
|d ddi¡ | ¡  d S )NTr¾   rè   ©rƒ   r%   ÚPS256)r   rN   Úunsafe_skip_rsa_key_validationÚimport_from_pemrÃ   rÄ   r    rÚ   r	   r  r  r�   )rP   rR   r  rL   rL   rS   Útest_unsafe_rsaø  s   zTestJWK.test_unsafe_rsaN)'Ú__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  r!  rL   rL   rL   rS   rI   ’  sJ    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   r;  r&  r*  r&  éj   éo   ée   r&  r.  r/  r0  r~   r&  r>  éx   r)  r&  r*  é1   é3   é0   rB  é8   r@  é9   rA  rC  rB  r.  r/  r0  r~   r&  éh   r'  r'  r)  r*  é/   rF  r>  r?  r1  ém   r)  r2  r>  é.   éc   r=  rG  rF  r:  r;  é_   ér   r=  r=  r'  r&  r*  r'  rK  éu   r>  r9  ) r'  rm   éß   é´   é—   é™   éà   é%   éO   éú   é`   r9  éØ   é­   é»   éº   é   éÔ   rR  éM   r:  éÖ   é¿   éð   é[   éX   é   ra  r5  é„   é�   r(  r›   ÚHS256r|   )rR   r%   Ú	protectedrƒ   Ú	signature)r%  r&  r1  r2  r3  r&  r*  r&  éR   r5  r6  r7  r8  r&  r9  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_RQyGWSeWjnczT0QU91p1DhOVRuOopznQz«4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH_5IB3jw3bcxGn6QLvnEtfdUdiYrqBdss1l58BQ3KhooKeQTa9AB0Hw_Py5PJdTJNPY8cQn7ouZ2KKDcmnPGBY5t7yLc1QlQ5xHdwW1VhvKn-nXqhJTBgIPgtldC-KDV5z-y2XDwGUcz«uQPEfgmVtjL0Uyyx88GZFF1fOunH3-7cepKmtH4pxhtCoHqpWmT8YAmZxaewHgHAjLYsp1ZSe7zFYHj7C6ul7TjeLQeZD_YwD66t62wDmpe_HlB-TnBA-njbglfIsRLtXlnDzQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdcz«BwKfV3Akq5_MFZDFZCnW-wzl-CCo83WoZvnLQwCTeDv8uzluRSnm71I3QCLdhrqE2e9YkxvuxdBfpT_PI7Yz-FOKnu1R6HsJeDCjn12Sk3vmAktV2zb34MCdy7cpdTh_YVr7tss2u6vneTwrA86rZtu5Mbr1C1XsmvkxHQAdYo0z«h_96-mK1R_7glhsum81dZxjTnYynPbZpHziZjeeHcXYsXaaMwkOlODsWa7I9xXDoRwbKgB719rrmI2oKr6N3Do9U0ajaHF-NKJnwgjMd2w9cjz3_-kyNlxAr2v4IKhGNpmM5iIgOS1VZnOZ68m6_pbLBSp3nssTdlqvd0tIiTHUz«IYd7DHOhrWvxkwPQsRM2tOgrjbcrfvtQJipd-DlcxyVuuM9sQLdgjVk2oy26F0EmpScGLq2MowX7fhd_QJQ3ydy5cY7YIBi87w93IKLEdfnbJtoOPLUW0ITrJReOgo1cq9SbsxYawBgfp_gh6A5603k2-ZQwVK0JKSHuLFkuQ3U)	r   r#   r$   r)   r+   r,   r-   r.   r/   (   r)  rH  é!   é‰   éC   éè   é�   éÑ   é   éµ   rV  é-   r^  r?  éE   éó   éA   é   é®   é   é�   éÿ   é÷   r;  é   rZ  rW  rn  éq   r9  éƒ   r>  rG  éB   r0  éý   é<   é–   éî   éÝ   r;  é¢   éf   é>   éQ   r…  rE  r%  r   é   é‡   r&  én   r›   r‰  éí   é   r;  éù   rr  éå   é‚   rW  éü   éï   rZ  rV  éZ   r(  éŽ   rl  éÆ   rG  éÛ   é=   é¸   rO  r`  é   éÐ   é”   r²   é¾   r‹  éÕ   éÙ   r�  r)  é   rŒ  rd  é²   rx  rU  rœ  éø   é   é   é§   éD   r,  éb   r—  é   r›  é   r�  r�  rH  r0  éç   r=  é$   éò   r`  rA  rX  éæ   éô   r+  r«  ro  é±   r¡  r0  éË   r~   r¡  r\  r†  r�  é   r“  r[  r›   rB  r(  r`  r[  é½   é;   rt  r‚  éÊ   r™  r…  é«   r>  é   rx  r  éä   rd  rz  r§  é7   rq  éÃ   é‹   éŸ   é¯   rƒ  r±  r‘  r­  r¸  é]   é£   éÌ   r€  rH  é°   rF  éž   r*  rt  r]  r¯  r²  rW  é   é‘   r¯  r;  é    rJ  é#   é¹   rl  rC  rT  rº  rc  é�   r:  rc  é)   r‘  r’  ro  éˆ   r(  r�  r8  r·  r[  é   rU  rr  r&  é¥   r¤  éÈ   rª  éz   rË  rq  r—  ru  rI  rn  r2  rz  r²  éê   éV   éÞ   é@   é\   rŸ  ri  r’  rr  rŸ  éÂ   éU   r…  rp  r’  éÁ   r£  r4  rÂ  r)  rM  rÊ  r¼  é*   éF   é•   rk  r™  r´  r‚  éû   éG   )r%  r&  r1  r2  r3  r&  r*  r&  rr  r5  r6  r7  r8  r&  r9  Ú+f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEUÚ+x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0z+jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI) rÈ  rn  ri  r5  r(  rI  r2  r4  r€  rF  r§  rÀ  ra  rž  r[  r²   r¼  rŸ  é(   rª   r*  r�  é|   é~   r˜  rx  éš   r·  rZ  r¿  é¦   r>  ) éÅ   r0  rž  éÓ   éŒ   r€  r)  rŽ  rV  éñ   rq  rº  é   r+  r-  ry   rß  r>  é�   rà  rª  é“   éP   rÞ  rm  é?   r§  éŠ   r}  r¼  r-  rœ  ÚES256)r%  r&  r1  r2  r3  r&  r*  r&  rr  r5  r7  r@  r6  r&  r9  )rç  r1  r(  r2  r=  r1  éd   rf   ÚXAekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGkzXADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2ÚXAY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C)Br›   éÜ   r¢  rx  r¨  r³  rÑ  rn  rl  r‰  éé   rL  rz  r:  rË  éÒ   é   r9  éÀ   r›   r�  rÀ  rh  r`  rq  r_  ry  r5  é   r&  r‘  rØ  rB  rÅ  ræ  é˜   r:  r¯  r7  r2  r¼  r]  r¤  r¨  r†  rP  r�  r<  rÑ  é¤   éö   r4  rm  ré  rm   r6  rx  rM  é…   éÎ   rn  é¬   rè  r‹  éw   rG  )Br   r=  ru  r:  r.  rb  rÆ  r™  ry   r–  rô  rÛ  rÐ  r–  rô  r¡  r�  r~  r€  rr  rz  éÄ   éª   r‡  rÓ  éÇ   éN   r±  rÑ  é©   rŒ  rÜ  é	   rm  rÔ  r“  r}  rB  rø  r‚  r&  rº  r5  r®  rî  r¹  rª   ék   é›   rZ  rw  éI   r=  r¤  r¤  rÀ  r‚  rå  rŽ  rl  rš  é¼   rÎ  r±  rª  r3  Ú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"}z‹eyJhbGciOiJub25lIiwNCiAiY3JpdCI6WyJodHRwOi8vZXhhbXBsZS5jb20vVU5ERUZJTkVEIl0sDQogImh0dHA6Ly9leGFtcGxlLmNvbS9VTkRFRklORUQiOnRydWUNCn0.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d	i |d ¤Ž|d |d | dd ¡¡}| ¡ }t|d ƒ}| |¡ |d d dkr<|  ||d ¡ d S | |d ¡ d S )
Nr%   rR   rf  rƒ   Úallowed_algsrg  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 1FTr0  rƒ   ©Úheader_registryr´   c                 S   r.  ©Nr0  Ú
custom_notr2  r3  rL   rL   rS   Újws_chk2&  r  z,TestJWS.test_customhdr_jws.<locals>.jws_chk2)r   r	   r  r%  r‚   Úcustomhdr_jws_exampler�   r+  )rP   r5  ÚnewhdrÚnewregr  r;  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 )Nr6  FTr%   rƒ   r7  )r   r�   r   r	   r  r%  ©rP   r=  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ƒ   rC  Újws_testÚjws_test_serialization_compactÚ
jws_verifyrL   rL   rS   Ú#test_EdDsa_signing_and_verification5  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ƒ   rH  rI  rJ  rL   rL   rS   Ú'test_secp256k1_signing_and_verificationJ  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ƒ   rH  Ú
curve_namer%   rI  rJ  rL   rL   rS   Ú'test_brainpool_signing_and_verificationU  s&   


êz/TestJWS.test_brainpool_signing_and_verificationc                 C   sŠ   t  ¡ jddd�}tjdd�}| |d tddiƒ¡ |jdd�}|  d	|v ¡ t	| ¡ ƒ}|  
|d
 d¡ t ¡ }| |¡ | |¡ d S )Nr0   re  rn   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_224n  s   
zTestJWS.test_jws_issue_224c                 C   sX   ddi}t  |¡}t ¡ jddd�}tjdd�}|j||d| ¡ id� |  	||¡ d S )	Nr%   re  r0   rn   rz   r  r   ©rf  Úheader)
r«   Údeepcopyr   rN   ro   r	   r  r  r¹   r]   )rP   rX  Úheader_copyrR   r  rL   rL   rS   Útest_jws_issue_281}  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   re  r³   rk   ÚHS384r´   ÚHS512Úkey3ó   secretr  ú{"alg":"HS256"}©rf  )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?  rA  rK  rL  rR  rV  r[  rf  rL   rL   rL   rS   r  Û  s$    r  )?r-  rE  r>  r~   r'  rK  rL  r>  r~   r;  r:  r3  rŠ  r~   r=  r…  r~   r:  rŠ  r'  r>  r2  r2  r:  r3  r>  rŠ  rI  r>  r~   r:  r;  r~   rŠ  r=  r'  r~   r  rŠ  r=  rú  r2  r>  rë  r3  r>  r~   r¥  rL  r'  r~   r:  rG  r1  r3  r:  rŠ  r1  r'  r:  r=  rŠ  rH  Ú.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-4qE3DzgrTjgyQz«1r52Xk46c-LsfB5P442p7atdPUrxQSy4mti_tZI3Mgf2EuFVbUoDBvaRQ-SWxkbkmoEzL7JXroSBjSrK3YIQgYdMgyAEPTPjXv_hI2_1eTSPVZfzL0lffNn03IXqWF5MDFuoUYE0hzb2vhrlN_rKrbfDIwUbTrjjgieRbwC6Cl0Ú«wLb35x7hmQWZsWJmB_vle87ihgZ19S8lBEROLIsZG4ayZVe9Hi9gDVCOBmUDdaDYVTSNx_8Fyw1YYa9XGrGnDew00J28cRUoeBB_jKI1oma0Orv1T9aXIWxKwd4gvxFImOWr3QRL9KEBRzk2RatUBnmDZJTIAfwTs0g68UZHvtcz«ZK-YwE7diUh0qR1tR7w8WHtolDx3MZ_OTowiFvgfeQ3SiresXjm9gZ5KLhMXvo-uz-KUJWDxS5pFQ_M0evdo1dKiRTjVw_x4NyqyXPM5nULPkcpU827rnpZzAJKpdhWAgqrXGKAECQH0Xt4taznjnd_zVpAmZZq60WPMBMfKcuEz«Dq0gfgJ1DdFGXiLvQEZnuKEN0UUmsJBxkjydc3j4ZYdBiMRAy86x0vHCjywcMlYYg4yoC4YZa9hNVcsjqA3FeiL19rk8g6Qn29Tt0cj8qqyFpz9vNDBUfCAiJVeESOjJDZPYHdHY8v1b-o-Z2X5tvLx-TCekf7oxyeKDUqKWjisz«VIMpMYbPf47dT1w_zDUXfPimsSegnMOA1zTaX7aGk_8urY6R8-ZW1FxU7AlWAyLWybqq6t16VFd7hQd0y6flUK4SlOydB61gwanOsXGOAOv82cHq0E3eL4HrtZkUuKvnPrMnsUUFlfUdybVzxyjz9JF_XyaY14ardLSjf4L_FNYa  eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGeipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDbSv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaVmqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je81860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi6UklfCpIMfIjf7iGdXKHzg.48V1_ALb6US04U3b.5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6jiSdiwkIr3ajwQzaBtQD_A.XFBoMYUZodetZdvTiFvSkQ)rR   rf  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-KyvjT1SkHgUWRVGcyly7uvVGRSDwsXypdrNinPA4jlhoNdizK2zF2CWQz«9gY2w6I6S6L0juEKsbeDAwpd9WMfgqFoeA9vEyEUuk4kLwBKcoe1x4HG68ik918hdDSE9vDQSccA3xXHOAFOPJ8R9EeIAbTi1VwBYnbTp87X-xcPWlEPkrdoUKW60tgs1aNd_Nnc9LEVVPMS390zbFxt8TN_biaBgelNgbC95sMz«uKlCKvKv_ZJMVcdIs5vVSU_6cPtYI1ljWytExV_skstvRSNi9r66jdd9-yBhVfuG4shsp2j7rGnIio901RBeHo6TPKWVVykPu1iYhQXw1jIABfw-MVsN-3bQ76WLdt2SDxsHs7q7zPyUyHXmps7ycZ5c72wGkUwNOjYelmkiNS0z«w0kZbV63cVRvVX6yk3C8cMxo2qCM4Y8nsq1lmMSYhG4EcL6FWbX5h9yuvngs4iLEFk6eALoUS4vIWEwcL4txw9LsWH_zKI-hwoReoP77cOdSL4AVcraHawlkpyd2TWjE5evgbhWtOxnZee3cXJBkAi64Ik6jZxbvk-RR3pEhnCsz«o_8V14SezckO6CNLKs_btPdFiO9_kC1DsuUTd2LAfIIVeMZ7jn1Gus_Ff7B7IVx3p5KuBGOVF8L-qifLb6nQnLysgHDh132NDioZkhH7mI7hPG-PYE_odApKdnqECHWw0J-F0JWnUd6D2B_1TvF9mXA2Qx-iGYn8OVV1Bsmp6qUz«eNho5yRBEBxhGBtQRww9QirZsB66TrfFReG_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.9hH0vgRfYgPnAHOd8stkvwÚ3eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0zÄeyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.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  rf  Úunprotectedrè   ri  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ý   z�eyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc.hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg)rB  rƒ   rC  rD  ÚA128GCMc                   @   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S )ÚTestJWEc                 C   s>   t j||td�}| |¡ | ¡ }| ||¡ | ||¡ d S )N©Úalgs)r   r   Újwe_algs_and_rsa1_5r€   r�   r‚   )rP   rè   rf  rR   ri  r$   r   rL   rL   rS   Ú	check_encp  s
   
zTestJWE.check_encc                 C   ó$   |   td td td td ¡ d S ©Nrè   rf  rR   ri  )rw  ÚE_A1_exrî   rL   rL   rS   r  z  ó   ÿzTestJWE.test_A1c                 C   rx  ry  )rw  ÚE_A2_exrî   rL   rL   rS   r  ~  r{  zTestJWE.test_A2c                 C   rx  ry  )rw  ÚE_A3_exrî   rL   rL   rS   r  ‚  r{  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è   rf  rt  r³   r  r´   r  ri  )r   r   ÚE_A4_exrv  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 )Nrt  r´   ÚA256KW)r   r   rv  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   rf  Tr  N)r   r   rz  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è   rf  ÚXYZrR   )ÚaadÚ	recipientTr  z'{"jku":"https://example.com/keys.jwks"})rn  r‡  )r�   r   rƒ  r   rz  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è   rf  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/  r2  r3  rL   rL   rS   Újwe_chk1¼  r  z,TestJWE.test_customhdr_jwe.<locals>.jwe_chk1r6  FTr0  r7  r´   c                 S   r.  r9  r2  r3  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�  r=  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 )Nr6  FTr%   r7  )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è   rf  Ú	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   rf  ß  s"   

"ÿzTestJWE.test_decrypt_keysetc                 C   sˆ   t jtd dd�}| td td ¡ |  d|j¡ |  d| ¡ ¡ t  td ¡}| td td ¡ |  d|j¡ |  d| ¡ ¡ d S )Nrè   F)Ú	flattenedrR   rf  Ú
recipients)r   r   rz  r€   ÚassertInr  r�   ÚassertNotInr‚  rL   rL   rS   Útest_serialize_not_flattenedò  s   z$TestJWE.test_serialize_not_flattenedN)r"  r#  r$  rw  r  r  r  r  r$  r„  rˆ  rŽ  r’  r“  r™  rf  r¢  rL   rL   rL   rS   rs  o  s    
rs  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 rÊt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 s…w   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   rt  Úperf_counterrë  zMMA ok cek: {}zMMA ko cek: {}zMMA deviation: {}% ({})r²   )r§  Úprintr   r   rv  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}   Újoeé´íˆMT)Ú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                   @   sl   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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 )Nrt  F)r   rR   Úcheck_claimsru  rÄ  rÂ  ©r   rR   ru  rL   )r   rN   ÚE_A2_keyr   ÚJWTÚ	A1_headerÚ	A1_claimsrv  Úmake_encrypted_tokenr�   r‚   ÚA1_tokenr�   Ú
JWTExpired)rP   rR   rU  ÚtokenrL   rL   rS   r  €  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_tokenr|  rv  Ú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   Útestkeyrt  rÄ  rÂ  ©r   rR   ru  rÇ  r   rÈ  rL   )r   rN   rÉ  rœ   r™   r   rV   r«   rË  r   rÊ  rÌ  rv  rÍ  r�   r�   ÚJWTMissingKeyr�   )rP   rR   ræ   rX  rU  rÐ  rL   rL   rS   rf  Ÿ  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×  rt  rÄ  rÂ  rØ  rL   )r   rœ   r™   r   rV   rN   ÚE_A3_keyr�   rÉ  r«   rË  r   rÊ  rÌ  rv  rÍ  r�   r�   rÙ  )rP   ræ   rR   rX  rU  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   rt  ÚijgirØ  r%  rL   )r   rN   rÉ  r"  rÌ  r   rÊ  rË  rv  rÍ  r�   r�   ÚJWTInvalidClaimValue)rP   rR   rÓ  rU  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_claimsru  )rÃ  rÄ  Ústring_claimrØ  rL   )r   rN   rÉ  r   rÊ  rv  rÍ  r�   )rP   rR   rà  Ústring_claimsÚstring_headerrU  rÐ  rL   rL   rS   Útest_claim_paramsú  s   
þ

ÿ
ÿzTestJWT.test_claim_paramsc                 C   s  t  ¡ jd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   re  rn   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ã  rU  rÐ  rL   rL   rS   Útest_claims_typ
  s2   
ÿÿ
ÿÿzTestJWT.test_claims_typc                 C   sÐ   t  ¡ jddd�}t di ¡}|  d|j¡ | |¡ | ¡ }t ¡ }| 	||¡ |  d|j¡ t dd¡}| |¡ | ¡ }t dd¡}|  d|j¡ | |¡ | ¡ }t ¡ }| 	||¡ |  d|j¡ d S )Nr0   re  rn   r`  ú{}r  ú )
r   rN   ro   r   rÊ  r]   rÓ  rè  r�   r‚   )rP   rR   rU  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   )r   rç  rL   )
r   rN   ÚA3_keyr   rÊ  rè  r�   rœ   r�   ro   )rP   rR   rU  rÐ  r¢   rL   rL   rS   Útest_Issue_209F  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%   re  ©rX  rÓ  )rR   r   rÇ  ÚnomatchÚ	failmatch)r   rN   r   rÊ  rè  r�   r�   rÞ  )rP   rÓ  rR   rÐ  ÚsertokrL   rL   rS   Útest_Issue_277T  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 s w   Y  d |_
d|_tj||d� ddg|_tj||d� d|_|  t	¡� tj||d� W d   ƒ n1 sØw   Y  ddg|_|  t	¡� tj||d� W d   ƒ n1 sùw   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 �sŠw   Y  tj|ddg|d� d|_
tj||d� d|_
|  t	¡� tj||d� W d   ƒ n	1 �s¾w   Y  d |_
d|_|  t	¡� tj||d� W d   ƒ n	1 �sáw   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%   re  rò  r  r   rç  )r   rR   Úexpected_type)r   ru  rR   r4   r   rY   rX   r²  rl   r  ÚA256GCMrp  FT)r   rN   r   rÊ  rè  r�   Úvalidater÷  r�   Ú	TypeErrorr   Úkey_opsrÍ  ÚJWT_expect_type)rP   rR   rÓ  rÐ  rõ  ÚenctokrL   rL   rS   Útest_unexpectedj  s¢   


ÿÿÿ
ÿ
ÿÿ


ÿÿÿÿÿ
ÿ

zTestJWT.test_unexpectedc                 C   s  t  ¡ jddd�}d}d}t ||¡}| |¡ | ¡ }| jtjtj||ddid� d	}t ||¡}| |¡ | ¡ }| jtj	tj||ddid� d
}t ||¡}| |¡ | ¡ }| jtj	tj||ddid� d}t ||¡}| |¡ | ¡ }tj||ddid� | jtj	tj||ddid� d}t ||¡}| |¡ | ¡ }tj||ddid� 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dgid� tj||d� d S )Nr0   re  rn   r`  rê  ÚscopeÚreadrÑ  z{"scope": 12345}z{"scope": ""}z{"scope":"read"}Úwritez{"scope":"view read write"}Úviewræ  r%  rz   rç  )r   rN   ro   r   rÊ  rè  r�   r�   ÚJWTMissingClaimrÞ  ÚJWTInvalidClaimFormat)rP   rR   rã  rÓ  rU  rÐ  rL   rL   rS   Útest_claims_scope¼  sh   
ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿzTestJWT.test_claims_scopeN)r"  r#  r$  r  r  rf  rÛ  rß  rä  ré  rí  rï  rö  rþ  r  rL   rL   rL   rS   rÆ  ~  s    + RrÆ  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'S )(Ú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Úmessager  r0   ó@   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArì   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  r  r0   r  rì   r%   r]  r   rW  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_dicts4  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  ro  rp  ©rè   rf  r0   s    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArì   r   s   messagerX  )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è   rf  r‡  r”  )	r   rN   r   r   r   r�   r‚   r]   rƒ   )rP   rR   r   r  rL   rL   rS   Útest_jwe_default_recipientL  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	  rt  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_keyU  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_5b  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+A128KWro  rp  r#  r¿   r”  )r   r   r   rN   r  r€   r�   r‚   r²  r]   rƒ   r$  rL   rL   rS   Útest_pbes2_hs256_aeskwh  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,  ro  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_paramst  sH   ýÿ


ýÿýÿÿz5ConformanceTests.test_pbes2_hs256_aeskw_custom_paramsc                 C   sN  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 ¡ }| |¡ |  tj	¡� | 
|¡ W d   ƒ n1 sLw   Y  tj}dt_|j
|dd� |  tj	¡� | 
|¡ W d   ƒ n1 stw   Y  tj}dt_| 
|¡ |t_|  tj	¡� | 
|¡ W d   ƒ n1 s�w   Y  |t_d S )Nr0   r  rì   z{"u": "Úui „×z	", "uu":"z"}r1   rr  r   ÚDEF)r%   r   rå  Úzipr|   )r‡  rf  Tr  i    i Êš;)Úmax_plaintext)r   rN   r   r   r   r‹  r�   r‚   r�   r�  r²  Údefault_max_compressed_sizeÚdefault_max_plaintext_size)rP   rR   rƒ   rC  r   r  ÚdefcmaxÚdefpmaxrL   rL   rS   Útest_jwe_decompression_max–  sH   ÿÿüþþ
ÿÿ
ÿ
z+ConformanceTests.test_jwe_decompression_maxc                 C   s^   t jdd�}tjdtdƒd�}|  tj¡� |j|dd� W d   ƒ d S 1 s(w   Y  d S )Nr  r  r0   r  rì   re  rþ   )	r	   r  r   rN   r   r�   r   ÚInvalidJWEKeyLengthr  )rP   rX   rR   rL   rL   rS   Ú test_jws_small_hmac_key_rejectedÂ  s
   "ÿz1ConformanceTests.test_jws_small_hmac_key_rejectedc                 C   sx   |   ttdtj¡ dt_tjdd�}tjdtdƒd�}|j	|dd	� | 
¡ }t ¡ }|j||dd	� |  |jd
 ¡ d S )NÚdefault_enforce_hmac_key_lengthFr  r  r0   r  rì   re  rþ   rÿ   )Ú
addCleanupÚsetattrr   rB  r	   r  r   rN   r   r  r�   r‚   r    r  r!  rL   rL   rS   Útest_jws_small_hmac_key_allowedÉ  s   
ÿz0ConformanceTests.test_jws_small_hmac_key_allowedN)r"  r#  r$  r	  r
  r  r  r  r  r  r  r   r"  r%  r&  r(  r+  r-  r6  r?  rA  rE  rL   rL   rL   rS   r  û  s(    
	",r  c                   @   s   e Zd Zdd„ ZdS )ÚJWATestsc              	   C   sn  t jj ¡ D �]-\}}|  |j|¡ |  |jddh¡ |dv r'|  |j	d ¡ n|  
|j	t¡ |  |j	d¡ |jdkr‡|  t j¡� t j |¡ W d   ƒ n1 sQw   Y  |  t j¡� t j |¡ W d   ƒ n1 smw   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|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ý   r8   ÚEd448r   r4   Úkex)r   ÚJWAÚalgorithms_registryÚitemsr]   Únamer   Úalgorithm_usage_locationÚassertIsÚkeysizeÚassertIsInstancer´  ÚassertGreaterEqualÚalgorithm_user�   ÚInvalidJWAAlgorithmÚencryption_algÚkeymgmt_algÚsigning_algÚJWAAlgorithmÚfail)rP   rL  rª  ÚinstrL   rL   rS   Útest_jwa_createÛ  sN   
ÿÿ
ÿÿÿÿÞzJWATests.test_jwa_createN)r"  r#  r$  rZ  rL   rL   rL   rS   rF  Ú  s    rF  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›   ra  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 )	NúeeyJhbGciOiJIUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..A5dxf2s96_n5FLueVuW1Z_vh161FwXZC4YLPff6dmDYr&   r›   ra  rƒ   Tr  rL   )r	   r  r\  r  r   rN   rZ   Úrfc7797_u_headerr�   r]   r   r�   r   Údetach_payloadr^  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 )Nra  r&   r›   )Údetached_payloadrL   )
r	   r  r‚   rY   r   rN   rZ   r\  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›   re  F)r%   Úb64ra  rL   )	r	   r  r\  r�   ÚInvalidJWSObjectr  r   rN   rZ   r)  rL   rL   rS   Útest_misses_crit3	  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›   ra  rL   )r	   r  r\  r  r   rN   rZ   r]  r�   ri  rb  r)  rL   rL   rS   Útest_mismatching_encoding9	  s   
ÿÿ"ÿz.TestUnencodedPayload.test_mismatching_encodingN)r"  r#  r$  r`  rd  rg  rj  rk  rL   rL   rL   rS   r[  	  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 )	Nr0   rb   rc   úMy Integrity protected messager|   r%   re  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_equalityD	  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   rm  r|   z+JWS(payload=My Integrity protected message)r%   re  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  ro  rp  )r   rN   ro   r   r   r‹  r   r]   r€   rn  ro  r�   rp  rL   rL   rS   Útest_jwe_equalityk	  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   rz  r|   r  ro  rp  zJWE(plaintext=b'My Encrypted message', protected={"alg":"A256KW","enc":"A256CBC-HS512"}, unprotected=None, aad=None, algs=None)zJWE.from_json_token("ru  )r   rN   ro   r   r   r‹  r   r]   rv  rw  r€   r�   )rP   rR   rƒ   rÐ  Ústrreprx  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%   re  ÚinfoúI'm a signed tokenrò  r  ro  rp  r   )r   rN   ro   r   rÊ  r]   rè  rn  ro  r�   rù  rÍ  r÷  )rP   rR   rq  rr  rs  Ú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%   re  r~  r  rò  zˆJWT(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]   rv  rw  rè  r�   rÐ  )rP   rR   rÐ  r|  rx  Úser2ÚreprreprL   rL   rS   Útest_jwt_representations¼	  s"   
ÿ


þýz0TestOverloadedOperators.test_jwt_representationsN)	r"  r#  r$  rt  ry  r{  r}  rƒ  r†  rL   rL   rL   rS   rl  B	  s    )rl  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestRfc9864c                 C   óŒ   d}dt jvr|  d¡ t jjddd�}ddi}t |¡}| |d t|ƒd ¡ |j	dd�}t ¡ }| 
||¡ |  |j¡ |  |j|¡ d S )	Nó   My Integrity protected messager8   zEd25519 not supportedr7   r†   r%   Tr  ©r   r‰   ÚskipTestrN   ro   r	   r  r  r   r�   r‚   r    rf  r]   rƒ   ©rP   rƒ   rR   rC  r  Úserialized_jwsÚjws_objrL   rL   rS   Útest_jws_ed25519Ô	  ó   


ÿzTestRfc9864.test_jws_ed25519c                 C   rˆ  )	Nr‰  rG  zEd448 not supportedr7   r†   r%   Tr  rŠ  rŒ  rL   rL   rS   Útest_jws_ed448ã	  r�  zTestRfc9864.test_jws_ed448N)r"  r#  r$  r�  r‘  rL   rL   rL   rS   r‡  Ò	  s    r‡  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_algsrv  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,  r<  r  ÚE_A1_plaintextÚE_A1_protectedÚE_A1_keyÚE_A1_vectorrz  ÚE_A2_plaintextÚE_A2_protectedrÉ  ÚE_A2_vectorr|  ÚE_A3_plaintextÚE_A3_protectedrÚ  ÚE_A3_vectorr}  ÚE_A4_protectedÚE_A4_unprotectedÚE_A4_vectorr~  r€  r‘  rŠ  rŒ  r�  rE  r•  rs  r³  r®  r¯  r£  rË  rÌ  rÎ  rÒ  rÆ  r  rF  r]  rb  r\  r[  rl  r‡  rL   rL   rL   rS   Ú<module>   sP  ûöùÿîúÛø0þýü
ö!Þ) ýÿøüÿÿüüùÿûûøÿüû	ûñÿûùùîÿ û	ü  uÿÿÿ


üÿæÿÿ

üÿüÿýÿ

ü	ÿúÿ
ûÿ

üÿ
üÿ


ÿÿþ÷ÿÿÿ Dÿæÿÿ
ýæÿÿý
ÿýÿù
ÿÿþÿùùþ ÿÿ2þýÿÿ   `): 