
    wg\j6                    
   S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SK	Jr  S SK	Jr  S S	K	Jr  S S
K	Jr  S SKJr  S SKJr  S SKJr  S SKJrJr  S SKJrJr  \R.                  S/-   rSSSSSSS.SSSSSS./SS/S .rS!SSSSS"SSS#.SSSS$S%S&S'S(S)SSS*./0rS!S+S,S-S..S+S/S0S1./0rSS2S3S4SS5/S6.rSS7SS8SS9S:S;S<S=S>S?.rS@rSArSBr SCr!SDr"SESFSGSH./SI/S .r#S!SESFSJSGSK./0r$S!SSLSMSNSO.SSPSMSNSO./0r%S!SSLSMSNSQSR.SSPSMSNSQSR./0r&S!SSSSTSUSO.SSVSWSXSO.SSYSZS[SO./0r'S!SSSSTSUS\SR.SSVSWSXS]SR.SSYSZS[S^SR./0r(S_r)S`r*Sar+Sbr,Scr-SSdSSeSfSg.r.ShSiSESjSk.r/ " Sl Sm\R`                  5      r1/ SnQr2/ SoQr3/ SpQr4\S!   Sq   Sr\5" \6" \25      5      Ro                  Ss5      \5" \6" \35      5      \5" \6" \45      5      St.r8/ SuQr9\3r:SSvSSwSxSySzS{S|S}.	r;/ S~Qr<\;S\5" \6" \95      5      Ro                  Ss5      \5" \6" \:5      5      \5" \6" \<5      5      St.r=/ SQr>\:r?SSSSSSR.r@/ SQ/ SQ-   rA\@S\5" \6" \>5      5      Ro                  Ss5      \5" \6" \?5      5      \5" \6" \A5      5      St.rB/ SQrC/ SQrDSSSSSSR.rE/ SQ/ SQ-   rF\ES\5" \6" \C5      5      Ro                  Ss5      \5" \6" \D5      5      \5" \6" \F5      5      St.rGSrH\:rIS+SS.rJSrK\JS\" \H5      Ro                  Ss5      \5" \6" \I5      5      \KSt.rLSrM\5" \6" \:5      5      \R                  " S0 \;D6\5" \6" \95      5      Ro                  Ss5      \" SS05      \R                  " S0 \@D6\5" \6" \>5      5      Ro                  Ss5      \" SS05      \MSSS.SSS./S.	rOSrPSrQSrR " S S\R`                  5      rS/ SQrTSrUSSSSSSSSSS}.	rVSrW\R                  " S0 \VD6\" \U5      \5" \6" \T5      5      \WS.rXSrYSrZSSSSSSSSSS}.	r[Sr\\R                  " S0 \[D6\" \Z5      \Y\\S.r]Sr^Sr_S+S-S.r`Sra\R                  " S0 \`D6\" \_5      Ro                  Ss5      \^\aS.rbSrcSS0rdSre\R                  " S0 \[D6S\R                  " S0 \`D6S\" \c5      \" \d5      \^\eS.rfSrgSrhSSS.riSrjSSSSSSSS.rkSSSS0SS.rlSSS.rm " S S\R`                  5      rn\R                  " S0 \[D6roSrpSrq " S S\R`                  5      rrSSS.rsSSSS.rtSruSrv " S S\R`                  5      rw " S S\R`                  5      rx " S S\R`                  5      rySrzSr{Sr| " S S\R`                  5      r} " S S\R`                  5      r~ " S S\R`                  5      rg)    )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   r4   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/   r0   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                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S'r)g())TestJWKi  c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g Nr'    )
PublicKeysr	   JWKselfkeylistkeys      I/home/edenadmin/noVNC/venv/lib/python3.13/site-packages/jwcrypto/tests.pytest_create_pubKeysTestJWK.test_create_pubKeys  s#    V$CGGNcN     c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PrivateKeysr	   rP   rQ   s      rU   test_create_priKeysTestJWK.test_create_priKeys  s#    f%CGGNcN rX   c                 V   [         S   nU Hf  n[        R                  " S0 UD6nUR                  S5        UR                  S5        UR	                  5       nU R                  [        U5      U5        Mh     [        R                  " S0 [        D6  [        R                  " S0 [        D6  g )Nr'   signverifyrN   )	SymmetricKeysr	   rP   
get_op_keyexportassertEqualr   Useofx5cRSAPrivateKey)rR   rS   rT   jwkeyr%   s        rU   test_create_symKeysTestJWK.test_create_symKeys  s    'CGGNcNEV$X&A[^S1  	( - rX   c           	      V   [         R                  R                  SSS9  [         R                  R                  SSS9  [         R                  R                  SSS9  [         R                  R                  SS	S
S9nU R                  US   S
5        U R                  [	        [        UR                  S5      5      5      S5        [         R                  R                  SSS9  [         R                  R                  SSSS9nU R                  UR                  S5      R                  S5        g )Nr1      r   sizer!      r   P-521r   curveA192KWMySymmetricKeyr   r&   r    r    encrypt   r#   r   r&   )r   rl   r&   )r	   rP   generaterc   lenr   ra   key_sizerR   r4   s     rU   test_generate_keysTestJWK.test_generate_keys  s    U-U.T1GGH:JK5#34-all9.EFGLU0GGTw?i0994@rX   c                     [         R                  " S0 [        D6nUR                  5       nU R	                  S[        U5      ;   5        [         R                  " S0 [        U5      D6nU R                  US   US   5        g )Nr*   r    rN   )r	   rP   re   export_publicassertFalser   rc   )rR   r4   jkk2s       rU   test_export_public_keysTestJWK.test_export_public_keys  sc    GG$m$__B/0WW'{2'52e9-rX   c                    [         R                  R                  SSS9n[        R                  " SS5      nUR                  U5        UR                  5       nUR                  X15        U R                  UR                  R                  S5      S5        [         R                  R                  SSS9nU R                  [        [        US	   5      5      S
5        [        R                  " SS5      nUR                  U5        UR                  5       nUR                  X15        U R                  UR                  R                  S5      S5        g )Nr1      rk   test {"alg":"A128KW","enc":"A128GCM"}utf-8A128CBC-HS256rv   r4       z&{"alg":"A256KW","enc":"A128CBC-HS256"})r	   rP   rw   r   JWEadd_recipient	serializedeserializerc   payloaddecoderx   r   )rR   rT   r%   r   s       rU   test_generate_oct_keyTestJWK.test_generate_oct_key  s    gg5s3GGF>?	kkm	c))'2F; gg5o>-c#h78"=GGFDE	kkm	c))'2F;rX   c                    [         R                  R                  SSS9nUR                  SS5        [         R                  R                  SSS9nUR                  SS5        [         R                  R                  SSSS9nUR                  SS5        [         R                  R                  SSS9nUR                  SS5        [         R                  R                  SS	S9nUR                  SS	5        [         R                  R                  SS
S9nUR                  SS
5        [         R                  R                  SSS9nUR                  SS5        g )Nr   r   ro   r_   rn   r   r   )r   rp   r   r=   rA   rD   rF   )r	   rP   rw   ra   rR   rT   s     rU   test_generate_EC_keyTestJWK.test_generate_EC_key  s   gg4w7x)gg4W5x)gg4wGDx)gg4{;x-gg4X6x*gg4X6x*gg4X6x*rX   c                     [         R                   H6  n[         R                  R                  SUS9nU R	                  US   U5        M8     g )Nr8   r   r   )r	   ImplementedOkpCurvesrP   rw   rc   )rR   r   rT   s      rU   test_generate_OKP_keysTestJWK.test_generate_OKP_keys  s?    ++C''""u#"6CSZ- ,rX   c                    [         R                  " SS[        5       5      n[        R                  R                  U5      nU R                  US   S5        [        R                  R                  UR                  5       5      nU R                  UR                  S5      R                  5       R                  UR                  S5      R                  5       R                  5        [        R                  " [        R                  " 5       [        5       5      n[        R                  R                  U5      nU R                  US   S5        [        R                  R                  UR                  5       5      nU R                  UR                  S5      R                  5       R                  UR                  S5      R                  5       R                  5        U R                  [        R                  [        R                  R
                  0 5        g )Ni  i   r   r!   r_   r   )r   generate_private_keyr   r	   rP   	from_pycarc   
public_keyra   public_numbersr$   r   	SECP256R1r   assertRaisesInvalidJWKValue)rR   rsa1krsa1krsa2ec1kec1kec2s          rU   test_import_pyca_keysTestJWK.test_import_pyca_keys  sk   ''t_5FG!!$'uu-!!$//"34))(3BBDFF))(3BBDFF	H%%bllno6GHww  %ed+ww  !122AACEE2AACEE	G#--''++R	1rX   c                     [         R                  R                  SSS9n[         R                  R                  UR	                  5       5      nU R                  UR	                  5       UR	                  5       5        g )Nr1   rj   rk   )r	   rP   rw   	from_jsonrb   rc   )rR   r4   r   s      rU   test_jwk_from_jsonTestJWK.test_jwk_from_json  sQ    GGS1GGahhj)QXXZ0rX   c                    [         R                  " S0 [        D6n[         R                  " 5       nUR	                  U5        [         R                  " 5       nUR                  UR                  5       5        U R                  [        U5      [        U5      5        U R                  [        U5      S5        UR                  [        S   5      nUR                  [        S   5      nU R                  XE5        U R                  US   [        S   5        [         R                  R                  UR                  5       5      nU R                  [        U5      [        U5      5        [         R                  R                  [        [        5      5      nSnU HD  n	U R                  [        U	[         R                  5      5        U R                  X;   5        US-  nMF     U R                  U[        [        S   5      5        g )N   r    r*   r   r'   rN   )r	   rP   re   JWKSetaddimport_keysetrb   rc   rx   get_keyr   r   rZ   
assertTrue
isinstance)
rR   r4   ksks2k1r   ks3ksmnumitems
             rU   test_jwksetTestJWK.test_jwkset  sg   GG$m$ZZ\
q	jjl"))+&R#c(+R!$ZZe,-[[u-. C-"45jj""299;/R#c(+ jj"";{#;<DOOJtSWW56OODK(1HC  	c+f"567rX   c                    [         R                  R                  [        [        5      5      n[         R
                  R                  [        [        S   S   5      5      n[        R                  5       nSUS'   [         R
                  " S0 UD6nU R                  X!R                  S5      5        U R                  UR                  S5      5        UR                  U5        U R                  X$1UR                  S5      5        U R                  S[        US   5      5        U R                  [         R                  5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr'   r   r   r    z	not-there   rN   )r	   r   r   r   rZ   rP   re   copyrc   r   assertIsNoner   get_keysrx   r   r   )rR   r   r   kwargsr   s        rU   test_jwkset_get_keysTestJWK.test_jwkset_get_keys  s   jj"";{#;<WW{;v+>q+ABC##%uWWv[[-.#++k23"3<<#45CF,- s223KK 433s   >E
E'c                    [         R                  " 5       n[        R                  5       nSUS'   UR	                  [         R
                  " S0 UD65        [        R                  5       nSUS'   UR	                  [         R
                  " S0 UD65        [         R                  " 5       nUR                  UR                  5       5        U R                  [        US   5      S5        U R                  [        US   5      [        US   5      5        g )Nkid_1r    kid_2r'      rN   )
r	   r   re   r   r   rP   r   rb   rc   rx   )rR   r   key1key2r   s        rU   test_jwkset_issue_208TestJWK.test_jwkset_issue_208(  s    ZZ\!!#U
sww!!#U
swwjjl"))+&RZ!,RZ#c&k*:;rX   c                     [         R                  " 5       n/ SQnU H<  nU R                  [         R                  5         UR	                  U5        S S S 5        M>     g ! , (       d  f       MP  = f)N) nullz[]{}z{"keys": 1}z{"keys": [1]}z{"keys": [{"kty": "invalid"}]})r	   r   r   r   r   )rR   r   invalid_inputsinps       rU   test_import_keyset_invalid"TestJWK.test_import_keyset_invalid5  sQ    ZZ\
 "C""3#6#67  % 87 "77s   A
A,	c                     [        S[        [        S   5      5       HM  n[        R                  " S0 [        S   U   D6nU R                  UR                  5       [        S   U   5        MO     g Nr   r'   r(   rN   )rangerx   rO   r	   rP   rc   
thumbprintrR   ir4   s      rU   test_thumbprintTestJWK.test_thumbprintD  s\    q#j012A0*V,Q/0A=)!,. 3rX   c                 :   [         R                  R                  [        5      nU R	                  UR                  5       [        5        UR                  S5      n[         R                  R                  [        [        S9nUR                  S5      nU R	                  UR                  5       R                  5       R                  UR                  5       R                  5        [         R                  R                  [        5      nU R	                  US   [        5        g )Nr_   passwordr^   r    )r	   rP   from_pemRSAPublicPEMrc   export_to_pemra   RSAPrivatePEMRSAPrivatePasswordr   r   r$   
PublicCertPublicCertThumbprint)rR   pubkrsapubprikrsapripubcs         rU   test_import_from_pemTestJWK.test_import_from_pemK  s    ww-++-|<*ww8JK(**,;;=??..022	4 ww
+e&:;rX   c                     [         R                  R                  [        5      nU R	                  UR                  5       [        5        U R	                  [        UR                  5       5      [        5        g N)	r	   rP   r   ECPublicPEMrc   r   r   rb   ECPublicJWK)rR   pub_ecs     rU   test_import_ec_from_pemTestJWK.test_import_ec_from_pemX  sJ    !!+.--/=V]]_5{CrX   c                     [         R                  R                  [        5      nU R	                  UR                  5       [        5        U R	                  [        UR                  5       5      [        5        g r   )	r	   rP   r   X25519PublicPEMrc   r   r   rb   X25519PublicJWK)rR   
pub_x25519s     rU   test_import_x25519_from_pem#TestJWK.test_import_x25519_from_pem]  sM    WW%%o6
113_EZ%6%6%89?KrX   c                 L   [         R                  " S0 [        S   S   D6nU R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  [        [        S   S   5      UR                  5       5        g )Nr'   r   rN   )r	   rP   r`   r   is_symmetricr   
has_publichas_privaterc   r   export_symmetricr   s     rU   test_export_symmetricTestJWK.test_export_symmetricb  s~    gg1f-a01(()()]6%:1%=>--/	1rX   c                 P   [         R                  R                  [        5      nU R	                  UR
                  5        U R                  UR                  5        U R	                  UR                  5        UR                  5       nU R                  [        U5      S   [        5        g )Nr    )r	   rP   r   r   r   r   r   r  r  r~   rc   r   r   )rR   rT   r   s      rU   test_export_publicTestJWK.test_export_publicj  su    ggz*))*')  "T*513GHrX   c                 J   [         R                  R                  [        [        S9nU R                  UR                  5        U R                  UR                  5        U R                  UR                  5        UR                  5       n[         R                  " S0 [        U5      D6nU R                  UR                  5        UR                  5       n[         R                  " S0 [        U5      D6nU R                  UR                  5        U R                  US   US   5        g )Nr   r    rN   )r	   rP   r   r   r   r   r   r   r  r  export_privater   r~   rc   )rR   rT   priprikeypubpubkeys         rU   test_export_privateTestJWK.test_export_privater  s    gg}7IJ))*'(  ",;s+,**+!,;s+,++,u6rX   c                 n   [         R                  " S0 [        S   S   D6nUR                  SS9nU R	                  US   [        S   S   S   5        [         R                  R                  [        5      nUR                  SS9nU R	                  US   [        5        [         R                  R                  [        [        S9nUR                  SS9nU R	                  US   S5        [         R                  R                  [        [        5      5      nUR!                  SS9nU R#                  SU;   5        g )	Nr'   r   T)as_dictr    r   +x31vrbZceU2qOPLtrUwPkLa3PNakMn9tOsq_ntFVrJcrN   )r	   rP   r`   r  rc   r   r   r~   r   r   r   r
  r   r   r   rZ   rb   r   )rR   rT   r4   keysetr   s        rU   test_export_as_dictTestJWK.test_export_as_dict  s   gg1f-a01   .5=#8#;E#BCggz*d+5#78gg}7IJt,5F	H%%k+&>?]]4]("%rX   c                 <   [         R                  R                  [        [        S9nU R                  UR                  5        U R                  UR                  5        UR                  5       nU R                  UR                  5        U R                  UR                  5        [        R                  " SS5      nUR                  U5        UR                  5       n[        R                  " 5       nUR                  XA5        U R                  UR                   S5        g )Nr   	plaintextz"{"alg":"RSA-OAEP","enc":"A256GCM"}s	   plaintext)r	   rP   r   r   r   r   r  r  publicr   r   r   r   r   r   rc   r   )rR   rT   r  r%   r   r*   s         rU   test_publicTestJWK.test_public  s    gg}7IJ'())*++,GGK!EF	kkmGGI	cL1rX   c                     U R                  [        R                  5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)Nr1      r   r4   r   r	   r   rP   rR   s    rU   test_invalid_valueTestJWK.test_invalid_value  s0    s223GG) 433s	   ?
Ac                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PublicKeys_EdDsar	   rP   rQ   s      rU   test_create_pubKeys_eddsa!TestJWK.test_create_pubKeys_eddsa  s#    "6*CGGNcN rX   c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PrivateKeys_EdDsar	   rP   rQ   s      rU   test_create_priKeys_eddsa!TestJWK.test_create_priKeys_eddsa  s#    #F+CGGNcN rX   c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PublicKeys_secp256k1r	   rP   rQ   s      rU   test_create_pubKeys_secp256k1%TestJWK.test_create_pubKeys_secp256k1  #    &v.CGGNcN rX   c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PrivateKeys_secp256k1r	   rP   rQ   s      rU   test_create_priKeys_secp256k1%TestJWK.test_create_priKeys_secp256k1  #    '/CGGNcN rX   c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PublicKeys_brainpoolr	   rP   rQ   s      rU   test_create_pubKeys_brainpool%TestJWK.test_create_pubKeys_brainpool  r/  rX   c                 T    [         S   nU H  n[        R                  " S0 UD6  M     g rM   )PrivateKeys_brainpoolr	   rP   rQ   s      rU   test_create_priKeys_brainpool%TestJWK.test_create_priKeys_brainpool  r4  rX   c                     [        S[        [        S   5      5       HM  n[        R                  " S0 [        S   U   D6nU R                  UR                  5       [        S   U   5        MO     g r   )r   rx   r$  r	   rP   rc   r   r   s      rU   test_thumbprint_eddsaTestJWK.test_thumbprint_eddsa  s^    q#.v678A6*62156A /24 9rX   c                    Sn[         R                  R                  [        5      nU R	                  UR
                  5        U R	                  UR                  5        [        R                  " U5      nUR                  US SS0S 5        UR                  5       n[         R                  R                  [        5      nU R	                  UR                  5        U R                  UR
                  5        [        R                  " 5       nUR                  XESS9  U R	                  UR                  S   5        U R                  UR                   U5        g )Ns   Imported private Ed25519r&   EdDSAr&   valid)r	   rP   r   Ed25519PrivatePEMr   r  r  r
   JWSadd_signaturer   Ed25519PublicPEMr   r   objectsrc   r   )rR   r   r  sr5   r  	jws_tokens          rU   test_pem_okpTestJWK.test_pem_okp  s    -!!"34**+))*GGG	ug&6=kkm!!"23))*++,GGI	cw7	))'23**G4rX   c                    [         R                  " S0 [        S   S   D6nU R                  US   S5        U R                  UR                  S5        U R                  UR
                  US   5        U R                  UR                  S5        [         R                  " S0 [        S   S   D6nU R                  US   S5        U R                  UR                  US	   5        U R                  [        5         UR                    S S S 5        U R                  [        5         S
Ul        S S S 5        U R                  [         R                  5         SUS	'   S S S 5        U R                  [         R                  5         SUl        S S S 5        SUl        SUS'   U R                  UR                  US   :H  5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       No= f)Nr'   r   r   r   r   r   r   r!   r$   xyzz!!!3r   unknownrN   )r	   rP   rO   rc   r   r   r    r$   r   AttributeErrorr*   r   r%   rP  r   r   s     rU   test_jwk_as_dictTestJWK.test_jwk_as_dict  s{   gg.
6*1-.UT*$'C)#&gg.
6*1-.UU+C)~.EE / ~.CE /s223CH 4s223CE 4II67 /. /.3333s0   6F: GG<G-:
G
G
G*-
G;c                     [         R                  R                  S5      nU R                  US   S5        U R                  US   S5        g )Nztest passwordr   r1   r4   dGVzdCBwYXNzd29yZA)r	   rP   from_passwordrc   r   s     rU   test_jwk_from_passwordTestJWK.test_jwk_from_password  s?    gg##O4UU+S#78rX   c                 ^   [         R                  R                  SSS9nUR                  SS5        [         R                  " S0 [        S   S   D6n[         R                  " S0 [        S   S   D6n[        [        [        5      5      n[        R                  " U5      nUR                  US [        S	S
05      S 5        UR                  SS9n[        R                  " 5       nUR                  U5        UR                  UR                  5       5        U R!                  UR"                  U5        g )Nr   r?   ro   r_   r=   r'   r   r   r&   ES256KTcompactrN   )r	   rP   rw   ra   r1  bytes	bytearray
A1_payloadr
   rE  rF  r   r   r   r_   r  rc   r   )rR   rT   pub_kpri_kr   r   test_serialization_compactr_   s           rU   test_p256k_aliasTestJWK.test_p256k_alias  s    gg4x8x-;/7:;;/7:;	*-.www5$UH4E(FM%)^^D^%A"56elln%1rX   c                     [         R                  " S0 [        S   S   D6nU R                  UR	                  5       SR                  [        S   S   5      5        g )Nr'   r   z/urn:ietf:params:oauth:jwk-thumbprint:sha-256:{}r(   rN   )r	   rP   rO   rc   thumbprint_uriformatrz   s     rU   test_thumbprint_uriTestJWK.test_thumbprint_uri   sR    GG,j(+,=DD=)!,.	/rX   c                    [         R                  " 5       nSUl        UR                  [        [
        S9  U R                  UR                  5        [        R                  " SS9nUR                  US SS05        UR                  5         g )NTr   r  r   r&   PS256)r	   rP   unsafe_skip_rsa_key_validationimport_from_pemr   r   r   r  r
   rE  rF  r   )rR   rT   rI  s      rU   test_unsafe_rsaTestJWK.test_unsafe_rsa  se    ggi-1*M4FG(GGK(	TE7#34	rX   rN   N)*__name__
__module____qualname____firstlineno__rV   r[   rg   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  r%  r)  r-  r2  r7  r;  r>  rK  rR  rW  rc  rh  ro  __static_attributes__rN   rX   rU   rK   rK     s    


!	A.<"+..
1 1
82$<&.<D
L
1I7&2*





45 8,9
2/rX   rK   ){   "   t   y   p   rw  :   rw  J   W   T   rw  ,      
   r   rw  a   l   g   rw  r{  rw  H   S   2   5   6   rw  }   )Frv  rw  i   s   r  rw  r{  rw  j   o   e   rw  r  r  r  r   rw  r  x   rz  rw  r{  1   3   0   r  8   r  9   r  r  r  r  r  r  r   rw  h   rx  rx  rz  r{  /   r  r  r  r  m   rz  r  r  .   c   r  r  r  r  r  _   r   r  r  rx  rw  r{  rx  r  u   r  r  ) rx  ru                  %   O      `   r                    r  M   r           [   X      r  r        ry  r   HS256r   )rT   r&   	protectedr   	signature)rv  rw  r  r  r  rw  r{  rw  R   r  r  r  r  rw  r  aV  ofgWCuLjybRlzo0tZWJjNiuSfb4p4fAkd_wWJcyQoTbji9k0l8W26mPddxHmfHQp-Vaw-4qPCJrcS2mJPMEzP1Pt0Bm4d4QlL-yRT-SFd2lZS-pCgNMsD1W_YpRPEwOWvG6b32690r2jZ47soMZo9wGzjb_7OMg0LOL-bSf63kpaSHSXndS5z5rexMdbBYUsLA9e-KXBdQOS-UTo7WTBEMa2R2CapHg665xsmtdVMTBQY4uDZlxvb3qCo5ZwKh9kG4LT6_I5IhlJH7aGhyxXFvUK-DWNmoudF8NAco9_h9iaGNj8q2ethFkMLs91kzk2PAcDTW9gb54h4FRWyuXpoQaV  Eq5xpGnNCivDflJsRQBXHx1hdR1k6Ulwe2JZD50LpXyWPEAeP88vLNO97IjlA7_GQ5sLKMgvfTeXZx9SE-7YwVol2NXOoAJe46sui395IW_GO-pWJ1O0BkTGoVEn2bKVRUCgu-GjBVaYLU6f3l9kJfFNS3E0QbVdxzubSu3Mkqzjkn439X0M_V51gfpRLI9JYanrC4D4qAdGcopV_0ZHHzQlBjudU2QvXt4ehNYTCBr6XCLQUShb1juUO1ZdiYoFaFQT5Tw8bGUl_x_jTj3ccPDVZFD9pIuhLhBOneufuBiB4cS98l2SR_RQyGWSeWjnczT0QU91p1DhOVRuOopznQz4BzEEOtIpmVdVEZNCqS7baC4crd0pqnRH_5IB3jw3bcxGn6QLvnEtfdUdiYrqBdss1l58BQ3KhooKeQTa9AB0Hw_Py5PJdTJNPY8cQn7ouZ2KKDcmnPGBY5t7yLc1QlQ5xHdwW1VhvKn-nXqhJTBgIPgtldC-KDV5z-y2XDwGUczuQPEfgmVtjL0Uyyx88GZFF1fOunH3-7cepKmtH4pxhtCoHqpWmT8YAmZxaewHgHAjLYsp1ZSe7zFYHj7C6ul7TjeLQeZD_YwD66t62wDmpe_HlB-TnBA-njbglfIsRLtXlnDzQkv5dTltRJ11BKBBypeeF6689rjcJIDEz9RWdczBwKfV3Akq5_MFZDFZCnW-wzl-CCo83WoZvnLQwCTeDv8uzluRSnm71I3QCLdhrqE2e9YkxvuxdBfpT_PI7Yz-FOKnu1R6HsJeDCjn12Sk3vmAktV2zb34MCdy7cpdTh_YVr7tss2u6vneTwrA86rZtu5Mbr1C1XsmvkxHQAdYo0zh_96-mK1R_7glhsum81dZxjTnYynPbZpHziZjeeHcXYsXaaMwkOlODsWa7I9xXDoRwbKgB719rrmI2oKr6N3Do9U0ajaHF-NKJnwgjMd2w9cjz3_-kyNlxAr2v4IKhGNpmM5iIgOS1VZnOZ68m6_pbLBSp3nssTdlqvd0tIiTHUzIYd7DHOhrWvxkwPQsRM2tOgrjbcrfvtQJipd-DlcxyVuuM9sQLdgjVk2oy26F0EmpScGLq2MowX7fhd_QJQ3ydy5cY7YIBi87w93IKLEdfnbJtoOPLUW0ITrJReOgo1cq9SbsxYawBgfp_gh6A5603k2-ZQwVK0JKSHuLFkuQ3U)	r   r$   r%   r*   r,   r-   r.   r/   r0   (   rz  r  !      C                  r  -   r  r  E      A                     r     r  r  r  q   r     r  r  B   r     <            r     f   >   Q   r  r  rv  r         rw  n   r   r        r     r        r        r  r  Z   ry     r     r     =      r  r           r      r        r  rz     r  r     r  r  r              D   r}  b   r     r     r  r  r  r     r  $      r  r  r        r|  r  r     r  r     r   r  r  r  r     r  r  r   r  ry  r  r     ;   r  r     r  r     r     r  r     r  r  r  7   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     ry  r  r  r  r     r  r  rw     r     r  z   r  r  r  r  r  r  r  r  r     V      @   \   r  r  r  r  r     U   r  r  r     r  r  r  rz  r  r  r  *   F      r  r  r  r     G   )rv  rw  r  r  r  rw  r{  rw  r  r  r  r  r  rw  r  +f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU+x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0z+jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI) r  r  r  r  ry  r  r  r  r  r  r  r  r  r  r  r   r  r  (   r   r{  r  |   ~   r  r     r  r  r     r  )    r  r        r  rz  r  r     r  r     r|  r~  r   r0  r     r1  r     P   r/  r  ?   r     r  r  r~  r  ES256)rv  rw  r  r  r  rw  r{  rw  r  r  r  r  r  rw  r  )r8  r  ry  r  r  r  d   rn   XAekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGkzXADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2XAY5pb7A0UFiB3RELSD64fTLOSV_jazdF7fLYyuTw8lOfRhWg6Y6rUrPAxerEzgdRhajnu0ferB0d53vM9mE15j2C)Br      r  r  r  r  r"  r  r  r     r  r  r  r        r     r   r  r  r  r  r  r  r  r     rw  r  r)  r  r  r7     r  r   r  r  r  r  r  r  r  r  r  r  r"        r  r  r:  ru   r  r  r        r     r9  r  w   r  )Br   r  r  r  r  r  r  r  r   r  rE  r,  r!  r  rE  r  r  r  r  r  r        r  r$     N   r  r"     r  r-  	   r  r%  r  r  r  rI  r  rw  r  r  r  r?  r
  r   k      r  r  I   r  r  r  r  r  r6  r  r  r     r  r  r  r  ES512eyJhbGciOiJub25lIn0r   r  rX   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                   z    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)TestJWSi  c           
      `   [         R                  " US   [        R                  " S	0 US   D6US   US   UR	                  SS 5      5      nUR                  5       n[        US   5      nUR                  U5        US   S   S:w  a  U R                  XAS   5        g UR                  US   5        g )
Nr&   rT   r  r   allowed_algsr  r   r   rN   )	r
   JWSCorer	   rP   getr^   r   r_   rc   )rR   r   rI  r5   decsigs        rU   
check_signTestJWS.check_sign  s    KKU.$u+.[)Y6	8
 ffh!#k"23	 ;u%V+%67
 HHT+&'rX   c                 .    U R                  [        5        g r   )rf  
A1_exampler   s    rU   test_A1TestJWS.test_A1      
#rX   c                 .    U R                  [        5        g r   )rf  
A2_exampler   s    rU   test_A2TestJWS.test_A2  rl  rX   c                 .    U R                  [        5        g r   )rf  
A3_exampler   s    rU   test_A3TestJWS.test_A3  rl  rX   c                 .    U R                  [        5        g r   )rf  
A4_exampler   s    rU   test_A4TestJWS.test_A4  rl  rX   c                     U R                  [        R                  U R                  [        5        SS/0nUR                  [        5        U R                  U5        g )Nrb  rX  )r   r
   InvalidJWSOperationrf  
A5_exampleupdate)rR   a5_biss     rU   test_A5TestJWS.test_A5
  sE    #11//:	7 6(+j!rX   c                    [         R                  " [        S   5      nUR                  [        S   S [        S   [        S   5        UR                  [        S   S [        S   [        S   5        UR	                  [        S   5        UR	                  [        S   5        UR                  5       nUR                  U[        S   5        UR                  [        [        S   5        U R                  [        S   UR                  5        g )	Nr   r   rY  rZ  r   r[  r\  r^  )
r
   rE  
A6_examplerF  r_   r   r   A6_serializedrc   r^  )rR   rI  r5   s      rU   test_A6TestJWS.test_A6  s    GGJy)*	
6*D"<0"9-	/ 	

6*D"<0"9-	/ 	
F#$	F#$kkm	c:f-.	mZ%78M2AMMBrX   c                 x    [         R                  " [        S   5      nUR                  [        [        S   5        g )Nr   r   )r
   rE  r  r   
A7_examplerR   rI  s     rU   test_A7TestJWS.test_A7   s(    GGJy)*	j*V"45rX   c                     [         R                  " [        S   5      nU R                  [         R                  5         UR                  [        5        UR                  S 5        S S S 5        g ! , (       d  f       g = f)Nr   )r
   rE  r  r   InvalidJWSSignaturer   
E_negativer_   r  s     rU   test_ETestJWS.test_E$  sL    GGJy)*s667MM*%HHTN 877s   'A--
A;c                    S n[        SSSU5      nSU0n[        R                  " [        S   US9nUR	                  [
        [        S   5        S	 n[        SSSU5      nSU0n[        R                  " [        S   US9nU R                  [        R                  5         UR	                  [
        [        S   5        S S S 5        g ! , (       d  f       g = f)
Nc                 &    U R                   S   S:H  $ Ncustom1
custom_valr^  jwobjs    rU   jws_chk1,TestJWS.test_customhdr_jws.<locals>.jws_chk1,      $$Y/<??rX   Custom header 1FTr  r   header_registryr   c                 &    U R                   S   S:H  $ Nr  
custom_notr  r  s    rU   jws_chk2,TestJWS.test_customhdr_jws.<locals>.jws_chk25  r  rX   )r   r
   rE  r  r   customhdr_jws_exampler   r  )rR   r  newhdrnewregrI  r  s         rU   test_customhdr_jwsTestJWS.test_customhdr_jws*  s    	@ %%6tXNV$GGJy)6B	+Z-?@	@ %%6tXNV$GGJy)6Bs667MM/F1CD 877s   C
Cc                     [        SSSS 5      nSU0nU R                  [        5         [        R                  " [
        S   US9  S S S 5        g ! , (       d  f       g = f)Nr  FTr&   r   r  )r   r   r   r
   rE  r  rR   r  r  s      rU   test_customhdr_jws_exists!TestJWS.test_customhdr_jws_exists>  sJ    $%6tTJ67GGJy)6B 877s   A
Ac                 <   / nS[         R                  ;   a  [        /nU H  n[         R                  R	                  US   5      nUS   nUS   n[
        R                  " U5      nUR                  US [        U5      S 5        UR                  SS9nU R                  UUS   5        [
        R                  " 5       nUR                  U5        UR                  UR                  5       5        U R                  UR                  R                  S5      US   5        M     g )	Nr9   key_jsonr   protected_headerTr[  jws_serialization_compactr   )r	   r   	E_Ed25519rP   r   r
   rE  rF  r   r   rc   r   r_   r  r   r   )	rR   examplescurve_examplerT   r   r  jws_testjws_test_serialization_compact
jws_verifys	            rU   #test_EdDsa_signing_and_verification+TestJWS.test_EdDsa_signing_and_verificationD  s   000!{H%M''##M*$=>C#I.G,-?@www'H""3#./?#@$H ""4"0 +;*+FGIJ""#ABcjjl+Z//66w?*957 &rX   c                    [         R                  " S0 [        S   S   D6n[        [	        [
        5      5      n[        R                  " U5      nUR                  US [        SS05      S 5        UR                  SS9n[        R                  " 5       nUR                  U5        UR                  UR                  5       5        U R                  UR                  U5        g )Nr'   r   r&   rZ  Tr[  rN   )r	   rP   r1  r]  r^  r_  r
   rE  rF  r   r   r   r_   r  rc   r   )rR   rT   r   r  r  r  s         rU   'test_secp256k1_signing_and_verification/TestJWS.test_secp256k1_signing_and_verificationY  s    gg9-f5a89	*-.777#sD+uh6G*H$O)1););D);)I&WWY
=>#**,'++W5rX   c           	      8   [         S    GH  n[        R                  " S0 UD6n[        [	        [
        5      5      n[        R                  " U5      nUR                  S5      nUS:X  a  SnOUS:X  a  SnOSnU/Ul	        UR                  US [        SU05      S 5        UR                  S	S
9n[        R                  " 5       nU/Ul	        UR                  U5        UR                  UR                  5       5        U R!                  UR"                  U5        GM     g )Nr'   r   rA   BP256R1rD   BP384R1BP512R1r&   Tr[  rN   )r:  r	   rP   r]  r^  r_  r
   rE  rd  rb  rF  r   r   r   r_   r  rc   r   )	rR   key_datarT   r   r  
curve_namer&   r  r  s	            rU   'test_brainpool_signing_and_verification/TestJWS.test_brainpool_signing_and_verificationd  s    -f5H''%H%CIj12Gwww'HJX%x'%(EH!""3k5#,.GN-5-?-?-?-M*J'*eJ#""#ABcjjl+Z//9- 6rX   c                    [         R                  " 5       R                  SSS9n[        R                  " SS9nUR                  US [        SS05      5        UR                  SS9nU R                  S	U;   5        [        UR                  5       5      nU R                  US
   S5        [        R                  " 5       nUR                  U5        UR                  U5        g )Nr1   r  rv   r   rk  r&   Tr[  z..r   )r	   rP   rw   r
   rE  rF  r   r   r   r   rc   r   r_   )rR   rT   rI  o1o2ts         rU   test_jws_issue_224TestJWS.test_jws_issue_224}  s    ggi  U 8 GGB	T;w/?#@A[[[&
#'I+GGI	b	rX   c                    SS0n[         R                  " U5      n[        R                  " 5       R	                  SSS9n[
        R                  " SS9nUR                  X1SUR                  5       0S9  U R                  X5        g )	Nr&   r  r1   rv   r   rk  r    r  header)
r   deepcopyr	   rP   rw   r
   rE  rF  r   rc   )rR   r  header_copyrT   rI  s        rU   test_jws_issue_281TestJWS.test_jws_issue_281  su    !mmF+ggi  U 8GGF#	 %s~~'78 	 	: 	-rX   c                 &   [         R                  " 5       n[         R                  R                  SSSS9n[         R                  R                  SSSS9n[         R                  R                  SSSS9nUR	                  U5        UR	                  U5        [
        R                  " S	S
9nUR                  USS9  [
        R                  " 5       nUR                  UR                  5       U5        U R                  UR                  S	5        [
        R                  " S	S
9nUR                  USS9  [
        R                  " 5       nU R                  [        5         UR                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f)Nr1   r  r   rs   HS384r   HS512key3   secretrk  {"alg":"HS256"}r  )r	   r   rP   rw   r   r
   rE  rF  r   r   rc   r   r   r   )	rR   r   r   r   r  s1s2s3s4s	            rU   test_decrypt_keysetTestJWS.test_decrypt_keyset  s$   ZZ\wwEwFCwwEwFCwwEwFC
t
tWWY'
):;WWY
r||~r*Y/WWY'
):;WWY}-NN2<<>2. .--s   !F
FrN   N)rq  rr  rs  rt  rf  rj  ro  rs  rw  r~  r  r  r  r  r  r  r  r  r  r  r  ru  rN   rX   rU   r`  r`    sZ    (&$$$$ C6E(C7*	6:2
./rX   r`  )?r~  r  r  r   rx  r  r  r  r   r  r  r  r  r   r  r  r   r  r  rx  r  r  r  r  r  r  r  r  r  r   r  r  r   r  r  rx  r   rR  r  r  rK  r  r  r<  r  r  r   r  r  rx  r   r  r  r  r  r  r  r  rx  r  r  r  r  .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)rT   r  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   rZ  r   r\  r  unprotectedr  r  aQ  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"header":{"alg":"A128KW","kid":"7"},"encrypted_key":"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ","iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}ai  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"header":{"alg":"A128KW","kid":"7", "custom1":"custom_val"},"encrypted_key":"6KB707dM9YTIgHtLvtgWQ8mKwboJW3of9locizkDTHzBC2IlrT1oOQ","iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"KDlTtXchhZTGufMYmOYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}zECDH-ES+A256KWA256CBC-HS512r&   r   a  eyJhbGciOiJFQ0RILUVTK0ExMjhLVyIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiJrZXkxIiwiZXBrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoicDNpU241cEFSNUpYUE5aVF9SSEw2MTJMUGliWEI2WDhvTE9EOXFrN2NhTSIsInkiOiI1Y04yQ2FqeXM3SVlDSXFEby1QUHF2bVQ1RzFvMEEtU0JicEQ5NFBOb3NNIn19.wG51hYE_Vma8tvFKVyeZs4lsHhXiarEw3-59eWHPmhRflDAKrMvnBw1urezo_BzZyPJ76m42ORQPbhEu5NvbJk3vgdgcp03j.lRttW8r6P6zM0uYDQt0EjQ.qnOnz7biCbqdLEdUH3acMamFm-cBRCSTFb83tNPrgDU.vZnwYpYjzrTaYritwMzaguaAMsq9rQOWe8NUHICv2hgzECDH-ES+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&   rA  zeyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc.hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg)r  r   r  r  A128GCMc                   h    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)TestJWEi~  c                     [         R                  " X[        S9nUR                  U5        UR	                  5       nUR                  Xc5        UR                  XC5        g )Nalgs)r   r   jwe_algs_and_rsa1_5r   r   r   )rR   r  r  rT   r  r%   r   s          rU   	check_encTestJWE.check_enc  sB    GGI/BC	kkm	c	f"rX   c                 d    U R                  [        S   [        S   [        S   [        S   5        g Nr  r  rT   r  )r  E_A1_exr   s    rU   rj  TestJWE.test_A1  *    w{+W[-Au~wx'8	:rX   c                 d    U R                  [        S   [        S   [        S   [        S   5        g r  )r  E_A2_exr   s    rU   ro  TestJWE.test_A2  r  rX   c                 d    U R                  [        S   [        S   [        S   [        S   5        g r  )r  E_A3_exr   s    rU   rs  TestJWE.test_A3  r  rX   c                    [         R                  " [        S   [        S   [        S9nUR	                  [        S   [        S   5        UR	                  [        S   [        S   5        UR                  5       nUR                  U[        S   5        UR                  U[        S   5        UR                  [        S   [        S   5        UR                  [        S   [        S   5        g )	Nr  r  r  r   rZ  r   r\  r  )r   r   E_A4_exr  r   r   r   )rR   r%   r   s      rU   rw  TestJWE.test_A4  s    GGGK('+*>,.	);<	);<kkm	c76?+	c76?+	gh'9	gh'9rX   c                 D   [         R                  " [        S9nUR                  [        [
        S   5        U R                  [         R                  5         [         R                  " S/S9nUR                  [        [
        S   5        S S S 5        g ! , (       d  f       g = f)Nr  r   A256KW)r   r   r  r   E_A5_exr  r   InvalidJWEDatarR   r%   s     rU   r~  TestJWE.test_A5  se    GG,-	gwv/s112hZ(AMM'76?3 322s   3B
Bc                    [         R                  " [        S   5      nUR                  [        S   [        S   5        U R	                  [         R
                  5         UR                  SS9  SSS5        g! , (       d  f       g= f)z2Compact representation requires a protected headerr  rT   r  Tr[  N)r   r   r  r   r   InvalidJWEOperationr   r  s     rU   test_compact_protected_header%TestJWE.test_compact_protected_header  sZ    GGGK()	(<=s667KKK% 877s   A66
Bc                    U R                  [        R                  5         [        R                  " [        S   [        S   S[        S   S9nUR                  SS9  S S S 5        U R                  [        R                  5         [        R                  " [        S   [        S   S[        S   S	9nUR                  SS9  S S S 5        g ! , (       d  f       Nr= f! , (       d  f       g = f)
Nr  r  XYZrT   )aad	recipientTr[  z'{"jku":"https://example.com/keys.jwks"})r  r  )r   r   r  r   r  r   r  s     rU   test_compact_invalid_header#TestJWE.test_compact_invalid_header  s    s667,gk.B!WU^=AKKK% 8
 s667,gk.B$M")%.2A KKK%	 87 87
 87s   <C<C
C
C'c                    Sn[        [        5      n[        R                  R	                  SSS9n[
        R                  " X5      nUR                  U5        UR                  5       nUR                  XS5        U R                  UR                  UR                  S5      5        [
        R                  " 5       nUR                  [        [        R                  " S0 [        D65        g )Nplainr   rn   r   r   rN   )r   !Issue_136_Protected_Header_no_epkr	   rP   rw   r   r   r   r   r   rc   r   encodeIssue_136_Contributed_JWEIssue_136_Contributed_Key)rR   r  r  rT   r%   r   s         rU   test_JWE_Issue_136TestJWE.test_JWE_Issue_136  s    	 AB	gg4W5GGI)	kkm	cI$4$4W$=>GGI	/gg: 9:	<rX   c                    S n[        SSSU5      nSU0n[        R                  " US9nUR                  [        [
        S   5        S n[        SSSU5      nSU0n[        R                  " US9nU R                  [        R                  5         UR                  [        [
        S   5        S S S 5        g ! , (       d  f       g = f)	Nc                 &    U R                   S   S:H  $ r  r  r  s    rU   jwe_chk1,TestJWE.test_customhdr_jwe.<locals>.jwe_chk1  r  rX   r  FTr  r  r   c                 &    U R                   S   S:H  $ r  r  r  s    rU   jwe_chk2,TestJWE.test_customhdr_jwe.<locals>.jwe_chk2  r  rX   )r   r   r   r   customhdr_jwe_exr  r   r  )rR   r  r  r  r%   r  s         rU   test_customhdr_jweTestJWE.test_customhdr_jwe  s    	@ %%6tXNV$GGF+	&8	@ %%6tXNV$GGF+s112MM*GFO< 322s   B66
Cc                     [        SSSS 5      nSU0nU R                  [        5         [        R                  " US9  S S S 5        g ! , (       d  f       g = f)Nr  FTr&   r  )r   r   r   r   r   r  s      rU   test_customhdr_jwe_exists!TestJWE.test_customhdr_jwe_exists  sC    $%6tTJ67GGF+ 877s   A
Ac                 ~   Sn[        [        5      nS[        R                  ;   a  [        R                  R                  SSS9n[        R                  " X5      nUR                  U5        UR                  5       n[        R                  " 5       nUR                  XS5        U R                  UR                  U5        g g )N   plainrI   r8   r   )r   X25519_Protected_Header_no_epkr	   r   rP   rw   r   r   r   r   r   rc   r   )rR   r  r  	x25519keye1r   e2s          rU   test_X25519_ECDHTestJWE.test_X25519_ECDH  s    	 >?	s///((U(AI.BY',,.CBNN3*RZZ3 0rX   c                 .   [         R                  " 5       n[         R                  R                  SSSS9n[         R                  R                  SSSS9n[         R                  R                  SSSS9nUR	                  U5        UR	                  U5        [
        R                  " S	S
9nUR                  US5        [
        R                  " 5       nUR                  UR                  5       U5        U R                  UR                  S	5        [
        R                  " S	S
9nUR                  US5        [
        R                  " 5       nU R                  [        5         UR                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f)Nr1   r2   r   rs   rq   r   r  r  r  r  r    {"alg":"A256KW","enc":"A256GCM"})r	   r   rP   rw   r   r   r   r   r   r   rc   r   r   r   )	rR   r   r   r   r  r'  r(  e3e4s	            rU   r  TestJWE.test_decrypt_keyset  s   ZZ\wwExVDwwExVDwwExVD
t
tWWy)
ABWWY
r||~r*Y/WWy)
ABWWY}-NN2<<>2. .--s   !F
Fc                    [         R                  " [        S   SS9nUR                  [        S   [        S   5        U R	                  SUR
                  5        U R	                  SUR                  5       5        [         R                  " [        S   5      nUR                  [        S   [        S   5        U R                  SUR
                  5        U R                  SUR                  5       5        g )Nr  F)	flattenedrT   r  
recipients)r   r   r  r   assertInrH  r   assertNotInr  s     rU   test_serialize_not_flattened$TestJWE.test_serialize_not_flattened  s    GGGK(E:	(<=lAII.lAKKM2GGGK()	(<=qyy1q{{}5rX   rN   N)rq  rr  rs  rt  r  rj  ro  rs  rw  r~  r  r  r  r  r!  r)  r  r6  ru  rN   rX   rU   r  r  ~  sH    #:::
:4&
&<=$,
4/&
6rX   r  a  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"recipients":[{"header":{"alg":"RSA1_5","kid":"2011-04-29"},"encrypted_key":"UGhIOguC7IuEvf_NPVaXsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"}],"iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"PURPOSEFULLYBROKENYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}a  {"protected":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2In0","unprotected":{"jku":"https://server.example.com/keys.jwks"},"recipients":[{"header":{"alg":"RSA1_5","kid":"2011-04-29"},"encrypted_key":"UGhIOguC7IuEvf_NPVaYsGMoLOmwvc1GyqlIKOK1nN94nHPoltGRhWhw7Zx0-kFm1NJn8LE9XShH59_i8J0PH5ZZyNfGy2xGdULU7sHNF6Gp2vPLgNZ__deLKxGHZ7PcHALUzoOegEI-8E66jX2E4zyJKx-YxzZIItRzC5hlRirb6Y5Cl_p-ko3YvkkysZIFNPccxRU7qve1WYPxqbb2Yw8kZqa2rMWI5ng8OtvzlV7elprCbuPhcCdZ6XDP0_F8rkXds2vE4X-ncOIM8hAYHHi29NX0mcKiRaD0-D-ljQTP-cFPgwCp6X-nZZd9OHBv-B3oWh2TbqmScqXMR4gp_A"}],"iv":"AxY8DCtDaGlsbGljb3RoZQ","ciphertext":"PURPOSEFULLYBROKENYGS4HffxPSUrfmqCHXaI9wOGY","tag":"Mz-VPPyU4RlcuYv1IwIvzw"}c                   *    \ rS rSr\S 5       rS rSrg)TestMMAi/  c                 j    SS K nUR                  R                  SS5      U l        SU l        SU l        g )Nr   JWCRYPTO_TESTS_ENABLE_MMAFi  r<  )osenvironrd  	enableMMA
iterationssub_iterations)clsr<  s     rU   
setUpClassTestMMA.setUpClass0  s+    

'BEJ rX   c                    U R                   (       Ga'  [        S5        Sn[        R                  " [        S9nUR                  [        5        Sn[        R                  " [        S9nUR                  [        5        SS Kn[        USUR                  5      n[        U R                  5       H  nU" 5       n[        U R                  5       H@  nU R                  [        R                  5         UR                  [         5        S S S 5        MB     U" 5       n	XU-
  U R                  -  -  nU" 5       n[        U R                  5       H@  nU R                  [        R                  5         UR                  [         5        S S S 5        MB     U" 5       n	X9U-
  U R                  -  -  nM     XR                  -  nX0R                  -  nX-
  U-  S-  n
[        SR#                  U5      5        [        SR#                  U5      5        [        SR#                  [%        U
5      U
5      5        U R'                  U
S	5        g g ! , (       d  f       GM  = f! , (       d  f       GM  = f)
NzTesting MMA timing attacksr   r  perf_counterr<  zMMA ok cek: {}zMMA ko cek: {}zMMA deviation: {}% ({})r   )r>  printr   r   r  r   MMA_vector_ok_cekMMA_vector_ko_cektimegetattrr   r?  r@  r   r  decryptMMA_vector_keyrg  int
assertLess)rR   ok_cekok_eko_cekko_erI  counter_startstop	deviations              rU   test_MMATestMMA.test_MMA7  s   >>>./F77 34D./F77 34D./dNDII>G4??+	t223A**3+=+=>^4 ?> 4 y%<4+>+>>>	t223A**3+=+=>^4 ?> 4 y%<4+>+>>> , oo%Foo%F /V3s:I"))&12"))&12+223y>9MNOOIq)I " ?> ?>s   -H;(I;
I
IrN   N)rq  rr  rs  rt  classmethodrB  rX  ru  rN   rX   rU   r9  r9  /  s    ! !%*rX   r9  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                   b    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)TestJWTi  c                    [         R                  " S0 [        D6n[        R                  " [
        [        [        S9nUR                  U5        UR                  5       nUR                  U5        [        R                  " [        US[        S9n[        R                  " [        USS0[        S9nU R                  [        R                  [        R                  [        U[        S9  g )Nr  F)r   rT   check_claimsr  r^  r\  r   rT   r  rN   )r	   rP   E_A2_keyr   JWT	A1_header	A1_claimsr  make_encrypted_tokenr   r   A1_tokenr   
JWTExpired)rR   rT   r  tokens       rU   rj  TestJWT.test_A1  s    gg!!GGIy,.	s#	eGGc,. GGc
8K,. 	#..#''xS2 	 	4rX   c                    [         R                  " S0 [        S   D6n[        R                  " [
        [        S   [        S9n[        R                  " UR                  USS9nU R                  [        [        UR                  5      5        U R                  [        R                  5         [        R                  " [
        [        S   / SQS9  S S S 5        g ! , (       d  f       g = f)NrT   rd  Fr   rT   rc  )rq   zA192CBC-HS384r   rN   )r	   rP   rn  r   rf  A2_tokenr  r  claimsrc   rh  r   r   r   r  )rR   sigkeytoutertinners       rU   ro  TestJWT.test_A2  s    -:e,-X75>13V]]UKK$>? s112GGgen>@ 322s   +$C
C&c           	         [         R                  " S	SS0[        D6n[         R                  R	                  [        [        5      5      n[        R                  " [        5      nSUS'   [        R                  " U[        [        S9nUR                  U5        UR                  5       nU R                  [        R                   [        R                  XR[        SS0S9  UR#                  U5        [        R                  " XR[        SS0S9  [        R                  " [        5      nSUS'   [        R                  " U[        [        S9nUR                  U5        UR                  5       nU R                  [        R                   [        R                  XR[        S9  [         R                  R	                  [        [        5      5      n[        R                  " [        5      n[        R                  " U[        [        S9nUR                  U5        UR                  5       nU R                  [        R                   [        R                  XR[        SS0S9  UR#                  U5        [        R                  " XR[        SS0S9  g )
Nr    testkeyr  r^  r\  r   rT   r  rc  r   rd  rN   )r	   rP   re  r   r   r   rZ   r   rg  r   rf  rh  r  ri  r   r   JWTMissingKeyr   )rR   rT   r  r  r  rl  s         rU   r  TestJWT.test_decrypt_keyset  s   gg0)0x0%%k+&>? 9%!uGGFI,?@	s##++SWW%2(-z': 	 	< 	

3E,?#Z0	2 9%uGGFI,?@	s##++SWW%2 	 	4 %%k+&>?9%GGFI,?@	s##++SWW%2(-z': 	 	< 	

3E,?#Z0	2rX   c                    [         R                  R                  [        [        5      5      n[         R
                  " SSS0[        D6nUR                  U5        [         R
                  " SSS0[        D6n[        R                  " [        5      nSUS'   [        R                  " U[        [        S9nUR                  U5        UR!                  5       nU R#                  [        R$                  5         [        R                  " XQ[        SS0S9  S S S 5        UR                  U5        [        R                  " XQ[        SS0S9  g ! , (       d  f       N<= f)Nr    rw  r  r^  r\  rx  rN   )r	   r   r   r   rZ   rP   E_A3_keyr   re  r   rg  r   rf  rh  r  ri  r   r   ry  )rR   r  rT   r  r  rl  s         rU   test_decrypt_keyset_dup_kid#TestJWT.test_decrypt_keyset_dup_kid  s    %%k+&>?gg0)0x0

3 gg0)0x09%!uGGFI,?@	s# s001GG0C"'!46 2
 	

3 	E,?#Z0	2 21s   3E
Ec           	         [         R                  " S0 [        D6nSS0nUR                  [        5        [
        R                  " [        U[        S9nUR                  U5        UR                  5       nU R                  [
        R                  [
        R                  UU[        SS0S9  U R                  [
        R                  [
        R                  UU[        SS0S9  [
        R                  " XA[        SS0S9  g )N	testclaimr   r  ijgirx  rv  rN   )r	   rP   re  r|  rh  r   rf  rg  r  ri  r   r   JWTInvalidClaimValue)rR   rT   rq  r  rl  s        rU   test_invalid_claim_typeTestJWT.test_invalid_claim_type  s    gg!!v&i GGIv,?@	s# 	#22CGG!(;(3V'< 	 	>
 	#22CGG!(;(3S'9 	 	;
 	E)<)62	4rX   c           	          [         R                  " S0 [        D6nSS S.nSnSn[        R                  " XCU[
        S9nUR                  U5        UR                  5       n[        R                  " Xa[
        SS SS.S9  g )	Nr   )r]  r^  z{"string_claim":"test"}z&{"alg":"RSA1_5","enc":"A128CBC-HS256"})default_claimsr  )r]  r^  string_claimrx  rN   )r	   rP   re  r   rf  r  ri  r   )rR   rT   r  string_claimsstring_headerr  rl  s          rU   test_claim_paramsTestJWT.test_claim_params	  sx    gg!!!'51@GGM#1,. 	
s# 	E)<%+D.46	7rX   c                 >   [         R                  " 5       R                  SSS9nSnSn[        R                  " X25      nUR                  U5        UR                  5       n[        R                  " XQSS0S9  U R                  [        R                  [        R                  UUSS	0S9  [        R                  " XQSS
0S9  U R                  [        R                  [        R                  UUSS0S9  Sn[        R                  " X25      nUR                  U5        UR                  5       nU R                  [        R                  [        R                  UUSS
0S9  U R                  [        R                  [        R                  UUSS0S9  [        R                  " XQS9  g )Nr1   r  rv   z{"typ":"application/test"}r  typr   ro  wrongzapplication/testzapplication/wrongz{"typ":"diffmime/test"}r   rT   )	r	   rP   rw   r   rf  make_signed_tokenr   r   r  )rR   rT   rq  r  r  rl  s         rU   test_claims_typTestJWT.test_claims_typ  sm   ggi  U 8-)GGM*	C  	E%A#22CGG!0@ 	 	B 	E%9K1LM#22CGG!8K0L 	 	N
 +GGM*	C #22CGG!8J0K 	 	M#22CGG! 	 	A 	E#rX   c                    [         R                  " 5       R                  SSS9n[        R                  " S0 5      nU R                  SUR                  5        UR                  U5        UR                  5       n[        R                  " 5       nUR                  X15        U R                  SUR                  5        [        R                  " SS5      nUR                  U5        UR                  5       n[        R                  " SS5      nU R                  SUR                  5        UR                  U5        UR                  5       n[        R                  " 5       nUR                  X15        U R                  SUR                  5        g )Nr1   r  rv   r  r   r    )
r	   rP   rw   r   rf  rc   rq  r  r   r   )rR   rT   r  rl  _jwts        rU   test_empty_claimsTestJWT.test_empty_claims9  s#   ggi  U 8 GG%r*qxx(	C wwy$t{{+ GG%r*	C  GG%s+ahh'	C wwy$dkk*rX   c                 ~   [         R                  " S0 [        D6n[        R                  " S0 5      nUR                  U5        UR                  5       n[         R                  " 5       nUR                  [         R                  " 5       R                  SS95        UR                  U5        [        R                  " X4S9  g )Nz{"alg":"ES256"}r1   )r   r  rN   )
r	   rP   A3_keyr   rf  r  r   r   r   rw   )rR   rT   r  rl  r   s        rU   test_Issue_209TestJWT.test_Issue_209U  s    ggGG%r*	C ZZ\
swwy!!e!,-
s 	E"rX   c           	         SSS/0n[         R                  " SSS9n[        R                  " SS0US	9nUR	                  U5        UR                  5       n[        R                  " X$SS0S
9  [        R                  " X$SS0S
9  [        R                  " X$SS/0S
9  [        R                  " X$SS/0S
9  [        R                  " X$SSS/0S
9  [        R                  " X$SSS/0S
9  U R                  [        R                  [        R                  UUSS0S
9  U R                  [        R                  [        R                  UUSS/0S
9  U R                  [        R                  [        R                  UUSSS/0S
9  g )Naudwww.example.comzwww.test.netr1   rj   rw   rl   r&   r  r  rq  rT   r   rc  nomatch	failmatch)r	   rP   r   rf  r  r   r   r  )rR   rq  rT   rl  sertoks        rU   test_Issue_277TestJWT.test_Issue_277c  s   +^<=ggu3/w/?$"C5:K2LMC5.2IJC5;L:M2NOC5>:J2KLC5;L;I;K 3L 	MC5;L;D;F 3G 	H#22CGG$E93E 	 	G#22CGG$EI;3G 	 	I#22CGG$EI<G<I 4J 	 	KrX   c                 D   SS0n[         R                  " SSS9n[        R                  " SS0US9nUR	                  U5        UR                  5       nSSS	/0nU R                  [        R                  [        R                  UXES
9  SSS/0n[        R                  " X$US
9  g )Nr  r  r1   rj   r  r&   r  r  rv  r  123)r	   rP   r   rf  r  r   r   JWTInvalidClaimFormat)rR   rq  rT   rl  r  check_claims         rU   test_claim_audTestJWT.test_claim_audy  s    *+ggu3/w/?$"0#67#33SWW#$ 	 	@0%89C+>rX   c                 
   [         R                  " SSS9nSS0n[        R                  " SS0US9nUR	                  U5        UR                  5       nUR                  U5        S	Ul        UR                  U5        S
Ul        U R                  [        5         UR                  U5        S S S 5        [        R                  " XAS9  [        R                  " XAS	S9  U R                  [        5         [        R                  " XAS
S9  S S S 5        [        R                  " US/US9  SUl
        [        R                  " XAS9  SUl
        U R                  [        5         [        R                  " XAS9  S S S 5        S Ul
        SUl        [        R                  " XAS9  SS/Ul        [        R                  " XAS9  SUl        U R                  [        5         [        R                  " XAS9  S S S 5        SS/Ul        U R                  [        5         [        R                  " XAS9  S S S 5        S Ul        [        R                  " SSS.US9nUR                  U5        UR                  5       nS[        l        [        R                  " XQS9  S[        l        UR                  U5        S
Ul        UR                  U5        S	Ul        U R                  [        5         UR                  U5        S S S 5        [        R                  " XQS
S9  U R                  [        5         [        R                  " XQS9  S S S 5        U R                  [        5         [        R                  " XQS	S9  S S S 5        [        R                  " USS/US9  SUl
        [        R                  " XQS9  SUl
        U R                  [        5         [        R                  " XQS9  S S S 5        S Ul
        SUl        U R                  [        5         [        R                  " XQS9  S S S 5        SS/Ul        U R                  [        5         [        R                  " XQS9  S S S 5        SUl        [        R                  " XQS9  SS/Ul        [        R                  " XQS9  S Ul        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNP= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN
= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNZ= f! , (       d  f       GN,= f! , (       d  f       GN= f)Nr1   rj   r  r  r   r&   r  r  rE  r   r  )r   rT   expected_type)r   r  rT   r5   r   r_   r^   rK  rt   r  A256GCMr  FT)r	   rP   r   rf  r  r   validater  r   	TypeErrorr   key_opsri  JWT_expect_type)rR   rT   rq  rl  r  enctoks         rU   test_unexpectedTestJWT.test_unexpected  s   ggu3/v&w/?$"s#s#y)NN3 * 	F$F59y)GGu= * 	F'4F$y)GG( *F$x(F$y)GG( * ),y)GG( *x	B%'""3'" $F$"s#s#y)NN3 * 	F59y)GG( *y)GGu= * 	F(I!6C@F$y)GG( *y)GG( *x(y)GG( *F$ ),F$K *)
 *) *) *) *)$ *) *))) *) *) *)s   R/R'R9SSS/TT=T%=T78U	
R$'
R69
S
S
S,/
S>
T
T"%
T47
U	
Uc           	         [         R                  " 5       R                  SSS9nSnSn[        R                  " X#5      nUR                  U5        UR                  5       nU R                  [        R                  [        R                  UUSS0S9  S	n[        R                  " X#5      nUR                  U5        UR                  5       nU R                  [        R                  [        R                  UUSS0S9  S
n[        R                  " X#5      nUR                  U5        UR                  5       nU R                  [        R                  [        R                  UUSS0S9  Sn[        R                  " X#5      nUR                  U5        UR                  5       n[        R                  " XQSS0S9  U R                  [        R                  [        R                  UUSS0S9  Sn[        R                  " X#5      nUR                  U5        UR                  5       n[        R                  " XQSS0S9  [        R                  " XQSS0S9  [        R                  " XQSS0S9  U R                  [        R                  [        R                  UUSS0S9  Sn[        R                  " X#5      nUR                  U5        UR                  5       nU R                  [        R                  [        R                  UUSS0S9  U R                  [        R                  [        R                  UUSSS/0S9  [        R                  " XQS9  g )Nr1   r  rv   r  r   scopereadro  z{"scope": 12345}z{"scope": ""}z{"scope":"read"}writez{"scope":"view read write"}viewr  rv  r   r  )r	   rP   rw   r   rf  r  r   r   JWTMissingClaimr  r  )rR   rT   r  rq  r  rl  s         rU   test_claims_scopeTestJWT.test_claims_scope  s   ggi  U 8) GGM*	C #--swwE!&0A 	 	C $GGM*	C #22CGG!&0A 	 	C !GGM*	C #22CGG!&0A 	 	C $GGM*	C E'61BC#22CGG!'0B 	 	D /GGM*	C E'61BCE'61BCE'71CD#22CGG!'0B 	 	D $GGM*	C #33SWW%!# 	 	@#33SWW%!67:K0L 	 	N 	E#rX   rN   N)rq  rr  rs  rt  rj  ro  r  r}  r  r  r  r  r  r  r  r  r  ru  rN   rX   rU   ra  ra    sI    4$@)2V244,7 $@+8#K,
?Pd<$rX   ra  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)ConformanceTestsi  c                 r    [         R                  " SSSS9nU R                  SUR                  S5      5        g )Nr1   secretmystery)r   r4   rP  rP  )r	   rP   rc   rd  r   s     rU   test_unknown_key_params(ConformanceTests.test_unknown_key_params  s-    gg%8Y?CGGI$67rX   c           	          U R                  [        R                  [        R                  SSS/SS9  U R                  [        R                  [        R                  SSSS/S9  g )Nr!   r   r^   r   )r   r$   r  r   )r   r$   r  r  r   s    rU   test_key_ops_values$ConformanceTests.test_key_ops_values  s]    #--sww#q6( 	 	G#--sww#q662B 	 	DrX   c                     [         R                  " SS9nUR                  [        R                  " S[        S5      S9S5        g )Nr  r,  r1      AAAAAAAAAAAAAAAAr  r   )r   r   r   r	   rP   r   rR   r   s     rU   test_jwe_no_protected_header-ConformanceTests.test_jwe_no_protected_header"  s4    gg(#''e/?	/JK<	>rX   c           
          [         R                  " SS9nU R                  [         R                  UR                  [
        R                  " S[        S5      S9S5        g )Nr  r,  r1   r  r  z{"enc":"A128GCM"}r   r   r   r  r   r	   rP   r   r  s     rU   test_jwe_no_alg_in_jose_headers0ConformanceTests.test_jwe_no_alg_in_jose_headers'  sE    gg(#,,c.?.?''e/?	/JK-	/rX   c           
          [         R                  " SS9nU R                  [         R                  UR                  [
        R                  " S[        S5      S9S5        g )Nr  r,  r1   r  r  z{"alg":"A128KW"}r  r  s     rU   test_jwe_no_enc_in_jose_headers0ConformanceTests.test_jwe_no_enc_in_jose_headers-  sE    gg(#,,c.?.?''e/?	/JK,	.rX   c                     [         R                  " SS9n[        R                  " S[	        S5      S9nUR                  US5        UR                  US5        g )Nr  r,  r1   r  r  z&{"alg":"A128KW","enc":"A128CBC-HS256"}r   r   r   r	   rP   r   r   )rR   r   key128s      rU   test_aes_128ConformanceTests.test_aes_1283  I    gg(U&67H&IJ&"JK&"DErX   c                     [         R                  " SS9n[        R                  " S[	        S5      S9nUR                  US5        UR                  US5        g )Nr  r,  r1   s   BBBBBBBBBBBBBBBBBBBBBBBBr  z&{"alg":"A192KW","enc":"A192CBC-HS384"}z {"alg":"A192KW","enc":"A192GCM"}r  )rR   r   key192s      rU   test_aes_192ConformanceTests.test_aes_1929  r  rX   c                     [         R                  " SS9n[        R                  " S[	        S5      S9nUR                  US5        UR                  US5        g )Nr  r,  r1   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr  &{"alg":"A256KW","enc":"A256CBC-HS512"}r-  r  )rR   r   key256s      rU   test_aes_256ConformanceTests.test_aes_256?  r  rX   c           	      d   [         R                  " SS9nUR                  [        R                  " S[        S5      S9SS9  UR                  5       n[         R                  " 5       nUR                  U[        R                  " S[        S5      S9SS9  U R                  UR                  S   5        g )	Nmessagerk  r1   @   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr  r  rB  rC  )
r
   rE  rF  r	   rP   r   r   r   r   rH  )rR   r^   ochecks       rU   test_jws_loopback"ConformanceTests.test_jws_loopbackE  s    wwy)377u0@0KL& 	 	(NN	!SWW2B92MN% 	 	'g./rX   c                    [         R                  " SS9n[        R                  " S[	        S5      S9nUR                  USS0SUR                  5       0S	9  UR                  5       n[         R                  " 5       nUR                  X2SS
9  U R                  UR                  S   5        U R                  UR                  S   UR                  5       5        g )Nr  rk  r1   r  r  r&   r  r    r  rB  rC  )r
   rE  r	   rP   r   rF  r   r   r   r   rH  rc   r^  rR   r^   rT   r  r  s        rU   test_jws_headers_as_dicts*ConformanceTests.test_jws_headers_as_dictsO  s    wwy)gg%#3I#>?35'*:#(#..*:"; 	 	=NN	!g.g./**513>>3CDrX   c                    [         R                  " SSSS.S9n[        R                  " S[	        S5      S9nUR                  US	UR                  5       05        UR                  5       n[         R                  " 5       nUR                  U5        UR                  U5        U R                  UR                  S
5        U R                  [        UR                  S   5      S	   UR                  5       5        g )Nr  r  r  r  r  r  r1   s    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr  r    s   messager  )r   r   r	   rP   r   r   r   r   r   rK  rc   r   r   rH  rR   r   rT   r  r  s        rU   test_jwe_headers_as_dicts*ConformanceTests.test_jwe_headers_as_dictsZ  s    gg	(0 IKgg%#3I#>?#s~~'789MMO	!c
3h/079I	KrX   c                    [         R                  " S[        S5      S9n[        R                  " SSUS9R                  5       n[        R                  " 5       nUR                  X!5        U R                  SUR                  5        g )Nr1   r  r  r  r   )r  r  r  r$  )	r	   rP   r   r   r   r   r   rc   r   )rR   rT   r   r  s       rU   test_jwe_default_recipient+ConformanceTests.test_jwe_default_recipientg  sh    gg%#34E#FGgg B #%%.Y[ 	 	##5==1rX   c                    Sn[         R                  " S/S9n[        R                  " SSS9nUR	                  XS9  U R                  [        UR                  5      SS	S
.5        U R                  [        5         [         R                  " 5       nUR	                  US9  [        UR                  5        S S S 5        g ! , (       d  f       g = f)NzTeyJhbGciOiJub25lIn0.eyJpc3MiOiJqb2UiLCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZX0.rX  r  r1   r   r  r  r[  T)r]  r_  r   )
r   rf  r	   rP   r   rc   r   rq  r   KeyError)rR   r%   rl  r4   s       rU   test_none_keyConformanceTests.test_none_keyp  s    OfX&GGU+a'U\\2!&dK	Mx(GGIE!$% )((s   9:B<<
C
c                     [         R                  " S5      nU R                  [         R                  S5         UR	                  [
        SS9  S S S 5        g ! , (       d  f       g = f)Nr   zAlgorithm not allowedr   rB  )r
   rE  assertRaisesRegexrz  rF  A2_keyr  s     rU   test_no_default_rsa_1_5(ConformanceTests.test_no_default_rsa_1_5}  sH    GGFO##C$;$;$;=OOFO1= = =s   A
A#c                 Z   [         R                  " SSSS.S9n[        R                  R	                  S5      nUR                  U5        UR                  5       n[         R                  " 5       nUR                  U5        UR                  U5        U R                  UR                  S5        g )Nr  PBES2-HS256+A128KWr  r  r  r   r$  )r   r   r	   rP   rV  r   r   r   rK  rc   r   r  s        rU   test_pbes2_hs256_aeskw'ConformanceTests.test_pbes2_hs256_aeskw  s    gg(<(7!9: gg##J/#MMO	!c1rX   c           	      x   [         R                  " SSSS[        S5      S.S9n[        R                  R                  S5      nUR                  U5        UR                  5       n[         R                  " 5       nUR                  U5        UR                  U5        U R                  UR                  S	5        [         R                  " SSSS[        S
5      S.S9n[        R                  R                  S5      nU R                  [        UR                  U5        [        R                  n[         R                  " SSSUS-   [        S5      S.S9nU R!                  [        S5         UR                  U5        S S S 5        [        =R                  S-  sl        UR                  U5        g ! , (       d  f       N9= f)Nr  r  r  rm   AAAAAAAAAAAAAAAA)r&   r   p2cp2sr  r   r$  AAAAAAAr   z	too larger   )r   r   r   r	   rP   rV  r   r   r   rK  rc   r   r   
ValueErrorr   default_max_pbkdf2_iterationsr  )rR   r   rT   r  r  maxiterp2cencs          rU   $test_pbes2_hs256_aeskw_custom_params5ConformanceTests.test_pbes2_hs256_aeskw_custom_params  sn   gg(<(7(,(8(B!DE
 gg##J/#MMO	!c1gg(<(7(,(8(A!CD
 gg##J/*c&7&7= 337+?+:+2Q;+;H+E$GH
 ##J<  % =))Q.)S! =<s   &F++
F9c                    [         R                  " S[        S5      S9nSSS-  -   S-   SS-  -   S-   nS	S
SSS.n[        R                  " UR                  S5      UUS9R                  SS9n[        R                  " 5       nUR                  U5        U R                  [        R                  5         UR                  U5        S S S 5        [        R                  nS[        l        UR                  USS9  U R                  [        R                  5         UR                  U5        S S S 5        [        R                  nS[        l        UR                  U5        U[        l        U R                  [        R                  5         UR                  U5        S S S 5        U[        l        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N<= f)Nr1   r  r  z{"u": "ui z	", "uu":"z"}r2   r  r   DEF)r&   r   r  zipr   )r  r  Tr[  i   i ʚ;)max_plaintext)r	   rP   r   r   r   r  r   r   r   r  rK  default_max_compressed_sizedefault_max_plaintext_size)rR   rT   r   r  r   r  defcmaxdefpmaxs           rU   test_jwe_decompression_max+ConformanceTests.test_jwe_decompression_max  s   gg%#34E#FGcIo-;Io $% 	
 gggnnW- # 022;)D)2I 	 	#s112MM# 3 11*:' 	c4 s112MM# 3 00)3&c +2' s112MM# 3 *1&7 32 32 32s$   1F+F<G+
F9<
G

Gc                     [         R                  " SS9n[        R                  " S[	        S5      S9nU R                  [        R                  5         UR                  USS9  S S S 5        g ! , (       d  f       g = f)Nr  rk  r1   r  r  r  rB  )	r
   rE  r	   rP   r   r   r   InvalidJWEKeyLengthrF  )rR   r^   rT   s      rU    test_jws_small_hmac_key_rejected1ConformanceTests.test_jws_small_hmac_key_rejected  sY    wwy)gg%#3I#>?s667s0 877s   A,,
A:c                    U R                  [        [        S[        R                  5        S[        l        [        R
                  " SS9n[        R                  " S[        S5      S9nUR                  USS	9  UR                  5       n[        R
                  " 5       nUR                  X2SS	9  U R                  UR                  S
   5        g )Ndefault_enforce_hmac_key_lengthFr  rk  r1   r  r  r  rB  rC  )
addCleanupsetattrr   r  r
   rE  r	   rP   r   rF  r   r   r   rH  r  s        rU   test_jws_small_hmac_key_allowed0ConformanceTests.test_jws_small_hmac_key_allowed  s     	&G;;	=.3+wwy)gg%#3I#>?3G,NN	!g.g./rX   rN   N)rq  rr  rs  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  ru  rN   rX   rU   r  r    si    8D>
/.FFF0	EK2&2
2 "D*1X10rX   r  c                       \ rS rSrS rSrg)JWATestsi  c                 ~   [         R                  R                  R                  5        GH  u  pU R	                  UR
                  U5        U R                  UR                  SS15        US;   a  U R                  UR                  S 5        O<U R                  UR                  [        5        U R                  UR                  S5        UR                  S:X  a  U R                  [         R                  5         [         R                  R!                  U5        S S S 5        U R                  [         R                  5         [         R                  R#                  U5        S S S 5        [         R                  R%                  U5      nU R                  U[         R&                  5        U R	                  UR
                  U5        GM  UR                  S:X  a  U R                  [         R                  5         [         R                  R!                  U5        S S S 5        U R                  [         R                  5         [         R                  R%                  U5        S S S 5        [         R                  R#                  U5      nU R                  U[         R&                  5        U R	                  UR
                  U5        GM  UR                  S:X  a  U R                  [         R                  5         [         R                  R%                  U5        S S S 5        U R                  [         R                  5         [         R                  R#                  U5        S S S 5        [         R                  R!                  U5      nU R                  U[         R&                  5        U R	                  UR
                  U5        GM  U R)                  X45        GM     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f)Nr&   r   )zECDH-ESrA  r9   Ed448r   r5   kex)r   JWAalgorithms_registryitemsrc   namer4  algorithm_usage_locationassertIskeysizeassertIsInstancerM  assertGreaterEqualalgorithm_user   InvalidJWAAlgorithmencryption_algkeymgmt_algsigning_algJWAAlgorithmfail)rR   r,  rA  insts       rU   test_jwa_createJWATests.test_jwa_create  s   44::<IDSXXt,MM#66G??ckk40%%ckk37''Q7  E)&&s'>'>?GG**40 @&&s'>'>?GG''- @ww**40%%dC,<,<=  D1""e+&&s'>'>?GG**40 @&&s'>'>?GG''- @ww**40%%dC,<,<=  D1""e+&&s'>'>?GG''- @&&s'>'>?GG''- @ww--d3%%dC,<,<=  D1		4+&E = @??? @??? @???sH   7 O> O&3 O8: P
/ P6 P.
O#	&
O5	8
P	

P	
P+	.
P<	rN   N)rq  rr  rs  rt  r:  ru  rN   rX   rU   r%  r%    s    #'rX   r%  r  z*{"alg":"HS256","b64":false,"crit":["b64"]}z$.02c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestUnencodedPayloadi#	  c                     Sn[         R                  " [        5      nUR                  [        R
                  " S0 [        S   S   D6[        S9  UR                  SS9nU R                  X15        g )NzGeyJhbGciOiJIUzI1NiJ9.JC4wMg.5mvfOroL-g7HyqJoozehmsaqmvTYGEq5jTI1gVvoEoQr'   r   r  Tr[  rN   )
r
   rE  rfc7797_payloadrF  r	   rP   r`   rfc7797_e_headerr   rc   rR   resultrI  r5   s       rU   test_regular!TestUnencodedPayload.test_regular%	  sf    : 	 GGO$	;-"7":;"2 	 	4kk$k'%rX   c                    Sn[         R                  " [        5      nUR                  [        R
                  " S0 [        S   S   D6[        S9  UR                  5       nU R                  [        U5      S   [        5        U R                  [         R                  5         UR                  SS9nS S S 5        UR                  5         UR                  SS9nU R                  X15        g ! , (       d  f       N?= f)	NeeyJhbGciOiJIUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..A5dxf2s96_n5FLueVuW1Z_vh161FwXZC4YLPff6dmDYr'   r   r  r   Tr[  rN   )r
   rE  r?  rF  r	   rP   r`   rfc7797_u_headerr   rc   r   r   rz  detach_payloadrA  s       rU   test_compat_unencoded*TestUnencodedPayload.test_compat_unencoded0	  s    : 	 GGO$	;-"7":;"2 	 	4 kkmS))4oFs667++d++C 8 	
kk$k'% 87s    C))
C7c                     Sn[         R                  " 5       nUR                  U5        UR                  [        R
                  " S0 [        S   S   D6[        S9  U R                  UR                  5        g )NrF  r'   r   )detached_payloadrN   )
r
   rE  r   r_   r	   rP   r`   r?  r   is_valid)rR   rl  rI  s      rU   "test_detached_payload_verification7TestUnencodedPayload.test_detached_payload_verificationC	  sa    : 	 GGI	e	4=034"1 	 	3

#rX   c           	         [         R                  " [        5      nU R                  [         R                  5         UR                  [        R                  " S0 [        S   S   D6SSS.S9  S S S 5        g ! , (       d  f       g = f)Nr'   r   r  F)r&   b64r  rN   )	r
   rE  r?  r   InvalidJWSObjectrF  r	   rP   r`   r  s     rU   test_misses_crit%TestUnencodedPayload.test_misses_critN	  sb    GGO$s334OOCGG?mF&;A&>?.5e&D  F 544s   2A55
Bc           	      r   [         R                  " [        5      nUR                  [        R
                  " S0 [        S   S   D6[        S9  U R                  [         R                  5         UR                  [        R
                  " S0 [        S   S   D6[        S9  S S S 5        g ! , (       d  f       g = f)Nr'   r   r  rN   )r
   rE  r?  rF  r	   rP   r`   r@  r   rR  rG  r  s     rU   test_mismatching_encoding.TestUnencodedPayload.test_mismatching_encodingT	  s    GGO$	;-"7":;"2 	 	4s334OOCGG?mF&;A&>?&6  8 544s   ,3B((
B6rN   N)
rq  rr  rs  rt  rC  rI  rN  rS  rV  ru  rN   rX   rU   r=  r=  #	  s    	&&&	$F8rX   r=  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestOverloadedOperatorsi]	  c           
         [         R                  R                  SSS9nSn[        R                  " UR                  S5      5      n[        R                  " UR                  S5      5      nU R                  X45        UR                  US [        SS05      [        SUR                  5       05      5        U R                  X45        UR                  US [        SS05      [        SUR                  5       05      5        U R                  X45        [        R                  R                  UR                  5       5      nU R                  X55        UR                  U5        U R                  X55        g )	Nr1   rj   rk   My Integrity protected messager   r&   r  r    )r	   rP   rw   r
   rE  r  rc   rF  r   r   assertNotEqualfrom_jose_tokenr   r_   rR   rT   r   signer_asigner_bsigner_cs         rU   test_jws_equality)TestOverloadedOperators.test_jws_equality_	  s)   gg5s32777>>'23777>>'23,sD*E7+;<*E3>>3C+DE	G 	H/sD*E7+;<*E3>>3C+DE	G 	,77**8+=+=+?@H/,rX   c           
         [         R                  R                  SSS9nSn[        R                  " UR                  S5      5      nU R                  [        U5      S5        U R                  [        U5      S5        UR                  US [        SS05      [        S	UR                  5       05      5        UR                  5       nU R                  [        U5      U5        U R                  [        U5      S
U S35        g )Nr1   rj   rk   r[  r   z+JWS(payload=My Integrity protected message)r&   r  r    zJWS.from_json_token(""))r	   rP   rw   r
   rE  r  rc   strreprrF  r   r   r   )rR   rT   r   rl  sers        rU   test_jws_representations0TestOverloadedOperators.test_jws_representationsw	  s    gg5s32w/0UF	HeF	HC'(89'0@(AB	D ooUS)e(=cU"&EFrX   c                 2   [         R                  R                  SSS9nSn[        R                  " UR                  S5      [        SSS.5      5      n[        R                  " UR                  S5      [        SSS.5      5      nU R                  X45        UR                  U5        U R                  X45        UR                  U5        U R                  X45        [        R                  R                  UR                  5       5      nU R                  X55        g )	Nr1   rj   rk   My Encrypted messager   r  r  r  )r	   rP   rw   r   r   r  r   rc   r   r\  r]  r   r^  s         rU   test_jwe_equality)TestOverloadedOperators.test_jwe_equality	  s    gg5s3(777>>'2&x/>(@ AB 777>>'2&x/>(@ AB 	,s#H/s#H/77**8+=+=+?@,rX   c                    [         R                  R                  SSS9nSn[        R                  " UR                  S5      [        SSS.5      5      nS	nU R                  [        U5      U5        U R                  [        U5      U5        UR                  U5        UR                  5       nU R                  [        U5      U5        U R                  [        U5      S
U S35        g )Nr1   rj   rk   rl  r   r  r  r  zJWE(plaintext=b'My Encrypted message', protected={"alg":"A256KW","enc":"A256CBC-HS512"}, unprotected=None, aad=None, algs=None)zJWE.from_json_token("re  )r	   rP   rw   r   r   r  r   rc   rf  rg  r   r   )rR   rT   r   rl  strreprh  s         rU   test_jwe_representations0TestOverloadedOperators.test_jwe_representations	  s    gg5s3(w/#H,;%= >?: 	UV,ef-C ooUS)e(=cU"&EFrX   c                    [         R                  R                  SSS9n[        R                  " SS0SS0S9n[        R                  " SS0SS0S9nU R                  X#5        UR                  U5        U R                  X#5        UR                  U5        U R                  X#5        [        R                  R                  UR                  5       5      nU R                  X$5        UR                  U5        U R                  X$5        [        R                  " S	S
S.UR                  5       S9n[        R                  " S	S
S.UR                  5       S9nU R                  XV5        UR                  U5        U R                  XV5        UR                  U5        U R                  XV5        [        R                  R                  UR                  5       5      nU R                  XW5        SUl        UR                  U5        U R                  XW5        g )Nr1   rj   rk   r&   r  infoI'm a signed tokenr  r  r  r  r   )r	   rP   rw   r   rf  rc   r  r\  r]  r   r  ri  r  )rR   rT   r_  r`  ra  eaebects           rU   test_jwt_equality)TestOverloadedOperators.test_jwt_equality	  s   gg5s3775'"2#)+?"@B775'"2#)+?"@B,""3'H/""3',77**8+=+=+?@H/#,WWH_E$..02WWH_E$..02 
$B#
$B#gg%%blln5B$!S!rX   c                    [         R                  R                  SSS9n[        R                  " SS0SS0S9nS	nU R                  [        U5      U5        U R                  [        U5      U5        UR                  U5        UR                  5       nU R                  [        U5      U5        UR                  R                  5       nS
SU S3-   S-   nU R                  [        U5      U5        g )Nr1   rj   rk   r&   r  rt  ru  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	   rP   rw   r   rf  rc   rf  rg  r  r   rl  )rR   rT   rl  rp  rh  ser2reprreps          rU   test_jwt_representations0TestOverloadedOperators.test_jwt_representations	  s    gg5s3w/ &(<=?; 	UV,ef-$ooUS){{$$&<-dV>BC GG 	eg.rX   c                    [         R                  R                  SSS9n[        R                  " SS9nUR                  USSSS	0S
9  UR                  SS9nUR                  SS9n[        R                  " 5       nUR                  X15        U R                  [        UR                  5      S   S5        [        R                  " SS9nU R                  [        5         UR                  X15        S S S 5        U R                  [        5         [        R                  " X1SSS9  S S S 5        [        R                  " SS9nUR                  XA5        U R                  [        UR                  5      S   S5        [        R                  " 5       nUR                  XA5        U R                  [        UR                  5      S   S5        g ! , (       d  f       N= f! , (       d  f       N= f)Nr1   rj   rk   z{"sub":"alice"}rk  r  r  r    za.b.c)r&   r  r  Fr[  Tsubalice)strict_serialization)r   rT   rc  r  )r	   rP   rw   r
   rE  rF  r   r   rf  r   rc   r   rq  r   r	  )	rR   rT   signer
json_tokencompact_tokenlenientstrict	strict_ok
lenient_oks	            rU   !test_jwt_strict_serialization_jws9TestOverloadedOperators.test_jwt_strict_serialization_jws	  s   
 gg5s3!23
 	Sg'8%*G$4 	 	6 %%e%4
(((6 '')J,W^^4U;WE d3z*z/ + z*GG
%)-/ +
 GG6	m1Y%5%56u=wGWWY
}2Z%6%67>H +* +*s   GG
G
G%c                     [         R                  R                  SSS9nSS/n[        R                  " SSS9nUR                  USS	S
.S9  UR                  SS9n[        R                  " SSS9nUR                  U5        UR                  SS9n[        R                  " US9nUR                  XA5        U R                  [        UR                  5      S   S5        [        R                  " USS9nU R                  [        5         UR                  XA5        S S S 5        [        R                  " USS9n	U	R                  Xa5        U R                  [        U	R                  5      S   S5        g ! , (       d  f       N]= f)Nr1   rj   rk   r  r  z{"sub":"bob"}z{"enc":"A256CBC-HS512"}r  z	a.b.c.d.e)r&   r    )r  Fr[  r  Tr  r  bob)r  r  )r	   rP   rw   r   r   r   r   r   rf  r   rc   r   rq  r   r	  )
rR   rT   r  r   r  enc2r  r  r  r  s
             rU   !test_jwt_strict_serialization_jwe9TestOverloadedOperators.test_jwt_strict_serialization_jwe
  sJ   gg5s3/*gg 9; 	#h{&KL]]5]1
ww!IK3t4 ''t$J,W^^4U;UC d>z*z/ +GGDA	m1Y%5%56u=uE	 +*s   E//
E=rN   N)rq  rr  rs  rt  rb  ri  rm  rq  ry  r~  r  r  ru  rN   rX   rU   rY  rY  ]	  s0    -0G-,G$'"R/*&IPFrX   rY  c                        \ rS rSrS rS rSrg)TestRfc9864i1
  c                    SnS[         R                  ;  a  U R                  S5        [         R                  R	                  SSS9nSS0n[
        R                  " U5      nUR                  US [        U5      S 5        UR                  SS9n[
        R                  " 5       nUR                  XR5        U R                  UR                  5        U R                  UR                  U5        g )	N   My Integrity protected messager9   zEd25519 not supportedr8   r   r&   Tr[  r	   r   skipTestrP   rw   r
   rE  rF  r   r   r   r   rM  rc   r   rR   r   rT   r  rJ  serialized_jwsjws_objs          rU   test_jws_ed25519TestRfc9864.test_jws_ed255193
  s    3C444MM12gg5i8!9-GGG$	T +,< =t	E",,T,:'')N0(()'2rX   c                    SnS[         R                  ;  a  U R                  S5        [         R                  R	                  SSS9nSS0n[
        R                  " U5      nUR                  US [        U5      S 5        UR                  SS9n[
        R                  " 5       nUR                  XR5        U R                  UR                  5        U R                  UR                  U5        g )	Nr  r'  zEd448 not supportedr8   r   r&   Tr[  r  r  s          rU   test_jws_ed448TestRfc9864.test_jws_ed448B
  s    3#222MM/0gg5g6!7+GGG$	T +,< =t	E",,T,:'')N0(()'2rX   rN   N)rq  rr  rs  rt  r  r  ru  rN   rX   rU   r  r  1
  s    33rX   r  rN   )
__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_algsr  rO   rZ   r`   rd   re   r   r   r   r   r   r$  r(  r,  r1  r6  r:  rD  rG  X25519PrivatePEMr   r   r   r   TestCaserK   A1_protectedr_  A1_signaturer]  r^  r   ri  A2_protected
A2_payloadr  A2_signaturern  A3_protected
A3_payloadr  A3_signaturerr  A4_protected
A4_payloadA4_keyA4_signaturerv  A5_protected
A5_payloadA5_keyA5_signaturer{  r  rP   r  r  r  r  r`  E_A1_plaintextE_A1_protectedE_A1_keyE_A1_vectorr  E_A2_plaintextE_A2_protectedre  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  r  r%  r  rL  rG  rH  r9  rg  rh  rj  rp  ra  r  r%  r@  rG  r?  r=  rY  r  rN   rX   rU   <module>r     s
   (   8 8 9      3 ) / > 4..(;  AA  "
$%$ LKM%N
, BBB $ $""" #K%%-& -'` !/1 ;;=	> ? C O B ,+ +""&&&E%'R@  	

 E  >	
 BB	  >>		@  >>		
 >>		
 $ >>>	
 >>>	
 ( >>		
 +*	
 @@	
 8 >>>	
 +**		
 @@@		
% @ 
 
 

 8	6	6 8	6	}h }D@ 0   #6*1- <!89@@Iy45 <!89	;
 E 
A ADDFFF5G > &  <!89@@Iy45 <!89	;
 E 

7
7
7	9 "++   <!89@@Iy45 <!89	;
 E -
---. 1
'	'   <!89@@Iy45 <!89	;
 %
 +L9@@Iy45'	)
 0 Yz*+GGf	,/077@E<01GGf	,/077@E#IJK(#%B#%&'

   /h /F&  BA ADDFFF5G 	>
  ''%H%(8i78 "
 *FA ADDFFF5G 	>	  ''%H%(8& "
 *F78  ''%H%(8??H& "
 3AB & & 77&X&;77&X&2(8%&67& "& &  % !
3  	6	6	68 F ,("C
D	 " 
M6h M6` $8$&  & "-*h -*d 	
 "&(	
 	 	.F$h F$R\0x(( \0~$'x   $'R % ? 788,, 78tQFh// QFh3(## 3rX   