package Ġid . walt . deprecated Ċ Ċ import Ġcom . nim bus ds . j ose .* Ċ import Ġcom . nim bus ds . j ose . crypto .* Ċ import Ġcom . nim bus ds . j ose . j wk . Curve Ċ import Ġcom . nim bus ds . j ose . j wk . Key Use Ċ import Ġcom . nim bus ds . j ose . j wk . gen . EC Key Generator Ċ import Ġcom . nim bus ds . j ose . j wk . gen . Oct et KeyPair Generator Ċ import Ġcom . nim bus ds . jwt . JWT Claims Set Ċ import Ġcom . nim bus ds . jwt . Signed JWT Ċ import Ġio . kot est . core . spec . style . Annotation Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġjava . security . Security Ċ import Ġjava . util .* ĊĊ Ċ // Ġhttps :// mk j wk . org / Ċ // Ġhttps :// bitbucket . org / connect 2 id / nim bus - j ose - jwt / src / master / Ċ // Ġhttps :// github . com / mitre id - connect / json - web - key - generator Ċ @ Deprecated ( message Ġ= Ġ" This Ġis Ġa Ġtest - class Ġand Ġshould Ġbe Ġremoved ") Ċ class ĠJwt Test Ġ: ĠAnnotation Spec () Ġ{ ĊĊĊĠĠĠ Ġ@ Test Ġ// Ġhttps :// connect 2 id . com / products / nim bus - j ose - jwt / examples / j ws - with - edd sa ĊĠĠĠ Ġfun Ġjwt Ed 2 5 5 1 9 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġa Ġkey Ġpair Ġwith ĠEd 2 5 5 1 9 Ġcurve ĊĠĠĠĠĠĠĠ Ġval Ġj wk Ġ= ĠOct et KeyPair Generator ( Curve . Ed 2 5 5 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate () ĊĠĠĠĠĠĠĠ Ġval Ġpublic J WK Ġ= Ġj wk . to Public J WK () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠEd D SA Ġsigner ĊĠĠĠĠĠĠĠ Ġval Ġsigner : ĠJ W SS ign er Ġ= ĠEd 2 5 5 1 9 Signer ( j wk ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare ĠJWT Ġwith Ġclaims Ġset ĊĠĠĠĠĠĠĠ Ġval Ġclaims Set Ġ= ĠJWT Claims Set . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subject (" alice ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. issuer (" https :// c 2 id . com ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. expiration Time ( Date ( Date (). time Ġ+ Ġ 6 0 Ġ* Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġvar Ġsigned JWT Ġ= ĠSigned JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ WS Header . Builder ( J WS Algorithm . Ed D SA ). key ID ( j wk . key ID ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclaims Set ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe ĠEC Ġsignature ĊĠĠĠĠĠĠĠ Ġsigned JWT . sign ( signer ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSerialize Ġthe ĠJ WS Ġto Ġcompact Ġform ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġsigned JWT . serialize () ĊĊĠĠĠĠĠĠĠ Ġ// ĠOn Ġthe Ġconsumer Ġside , Ġparse Ġthe ĠJ WS Ġand Ġverify Ġits ĠEd D SA Ġsignature ĊĠĠĠĠĠĠĠ Ġsigned JWT Ġ= ĠSigned JWT . parse ( s ) ĊĊĠĠĠĠĠĠĠ Ġprintln ( s ) ĊĠĠĠĠĠĠĠ Ġprintln ( public J WK . toJSON String ()) ĊĠĠĠĠĠĠĠ Ġprintln ( j wk . toJSON String ()) ĊĠĠĠĠĠĠĠ Ġval Ġverifier : ĠJ WS Verifier Ġ= ĠEd 2 5 5 1 9 Verifier ( public J WK ) ĊĠĠĠĠĠĠĠ Ġ( signed JWT . verify ( verifier )) ĠshouldBe Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġ/ Ġverify Ġthe ĠJWT Ġclaims Ġaccording Ġto Ġthe Ġapp Ġrequirements ĊĠĠĠĠĠĠĠ Ġ" alice " ĠshouldBe Ġsigned JWT . jwt Claims Set . subject ĊĠĠĠĠĠĠĠ Ġ" https :// c 2 id . com " ĠshouldBe Ġsigned JWT . jwt Claims Set . issuer ĊĠĠĠĠĠĠĠ Ġ( Date (). before ( signed JWT . jwt Claims Set . expiration Time )) ĠshouldBe Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĠCurve Ġnot Ġsupported : Ġse cp 2 5 6 k 1 Ġ( 1 . 3 . 1 3 2 . 0 . 1 0 ) ĊĠĠĠ Ġfun Ġjwt Spec 2 5 6 k 1 () Ġ{ ĊĠĠĠĠĠĠĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠĠĠĠĠĠĠ Ġ// ĠGenerate ĠEC Ġkey Ġpair Ġon Ġthe Ġse cp 2 5 6 k 1 Ġcurve ĊĠĠĠĠĠĠĠ Ġval Ġec J WK Ġ= ĠEC Key Generator ( Curve . SE CP 2 5 6 K 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Use ( Key Use . SIGNATURE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate () ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġpublic ĠEC Ġkey , Ġfor Ġrecipients Ġto Ġvalidate Ġthe Ġsignatures ĊĊĠĠĠĠĠĠĠ Ġval Ġec Public J WK Ġ= Ġec J WK . to Public J WK () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSample ĠJWT Ġclaims ĊĠĠĠĠĠĠĠ Ġval Ġclaims Set Ġ= ĠJWT Claims Set . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subject (" alice ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠJWT Ġfor ĠES 2 5 6 K Ġalg ĊĠĠĠĠĠĠĠ Ġval Ġjwt Ġ= ĠSigned JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ WS Header . Builder ( J WS Algorithm . ES 2 5 6 K ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID ( ec J WK . key ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclaims Set ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSign Ġwith Ġprivate ĠEC Ġkey ĊĠĠĠĠĠĠĠ Ġjwt . sign ( EC DS AS ign er ( ec J WK )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOutput Ġthe ĠJWT ĊĠĠĠĠĠĠĠ Ġprintln ( jwt . serialize ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWith Ġline Ġbreak Ġfor Ġcl arity : ĊĠĠĠĠĠĠĠ Ġ// Ġe y J ra W Qi Oi Ix Mj Mi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J zd WI i OiJ hb Gl j ZS J 9 ĊĠĠĠĠĠĠĠ Ġ// Ġ. z RQ y jd me PW 9 7 V 5 JY b Px w O rr t L 0 Md DP uz 7 w 9 O 0 CW v F - U 4 0 g 1 9 5 q Bu Z 8 f XH 2 ĊĠĠĠĠĠĠĠ Ġ// ĠX Zi _- U 4 Rd Mr 4 Jv bi TK XH 1 Clo f Z gw ĊĊĠĠĠĠĠĠĠ Ġ// ĠParse Ġthe Ġsigned ĠJWT ĊĠĠĠĠĠĠĠ Ġval Ġjwt String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ey J ra W Qi Oi Ix Mj Mi LCJ hb G ci OiJ FU z I 1 N ks if Q . ey J zd WI i OiJ hb Gl j ZS J 9 . kb qs 7 p Dj D CK N sy 9 K dd En f OD 0 i 1 B js iq ve VJ zt AX ra Is H _ ATL z J _ L qy DST Q 0 v Qh fu y 2 4 HB d A 4 j Sw ax 8 _ 0 r 6 g T bg " ĊĊĠĠĠĠĠĠĠ Ġval Ġjwt 2 Ġ= ĠSigned JWT . parse ( jwt . serialize ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthe ĠES 2 5 6 K Ġsignature Ġwith Ġthe Ġpublic ĠEC Ġkey ĊĊĠĠĠĠĠĠĠ Ġ( jwt 2 . verify ( ECD SA Verifier ( ec Public J WK ))) ĠshouldBe Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠOutput Ġthe ĠJWT Ġclaims : Ġ{" sub ":" alice "} ĊĊĠĠĠĠĠĠĠ Ġ// ĠOutput Ġthe ĠJWT Ġclaims : Ġ{" sub ":" alice "} ĊĠĠĠĠĠĠĠ Ġprintln ( jwt 2 . jwt Claims Set . to JSONObject ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġhttps :// github . com / fel x / nim bus - j ose - jwt / blob / master / src / test / java / com / nim bus ds / j ose / crypto / ECD H Crypto Test . java ĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġfun Ġsign And Encrypted Jwt P _ 2 5 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcheck : Ġinvalid Ġc ure v Ġattack ĊĠĠĠĠĠĠĠ Ġ// Ġe cd h - es Ġx ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġ// ĠGenerate ĠEC Ġkey Ġpair Ġon Ġthe Ġse cp 2 5 6 k 1 Ġcurve ĊĠĠĠĠĠĠĠ Ġval Ġsender J WK Ġ= ĠEC Key Generator ( Curve . SE CP 2 5 6 K 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Use ( Key Use . SIGNATURE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠJWT ĊĠĠĠĠĠĠĠ Ġval Ġsigned JWT Ġ= ĠSigned JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ WS Header . Builder ( J WS Algorithm . ES 2 5 6 K ). key ID ( sender J WK . key ID ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJWT Claims Set . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subject (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. issue Time ( Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. issuer (" https :// test . com ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSign Ġthe ĠJWT ĊĠĠĠĠĠĠĠ Ġsigned JWT . sign ( EC DS AS ign er ( sender J WK )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠJ WE Ġobject Ġwith Ġsigned ĠJWT Ġas Ġpayload ĊĠĠĠĠĠĠĠ Ġval Ġj we Object Ġ= ĠJ WE Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ WE Header . Builder ( J WE Algorithm . ECD H _ ES , ĠEncryption Method . A 2 5 6 GCM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" JWT ") Ġ// Ġrequired Ġto Ġindicate Ġnested ĠJWT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayload ( signed JWT ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecipient Public J WK Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEC Key Generator ( Curve . P _ 3 8 4 ) Ġ// ĠSE CP 2 5 6 K 1 Ġnot Ġworking Ġfor Ġencrypt er ; ĠP _ 3 8 4 Ġ-> Ġn ist Ġcomp lient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Use ( Key Use . SIGNATURE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID (" 4 5 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate () ĊĊĠĠĠĠĠĠĠ Ġ// ĠEncrypt Ġwith Ġthe Ġrecipient 's Ġpublic Ġkey ĊĠĠĠĠĠĠĠ Ġj we Object . encrypt ( ECD H Encrypt er ( recipient Public J WK )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSerial ise Ġto ĠJ WE Ġcompact Ġform ĊĠĠĠĠĠĠĠ Ġval Ġj we String Ġ= Ġj we Object . serialize () ĊĊĠĠĠĠĠĠĠ Ġprintln ( j we String ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġj we 2 Ġ= ĠJ WE Object . parse ( j we String ) ĊĊĠĠĠĠĠĠĠ Ġj we 2 . decrypt ( ECD H Decrypt er ( recipient Public J WK )) ĊĊĠĠĠĠĠĠĠ Ġval Ġjwt 2 Ġ= Ġj we 2 . payload . to Signed JWT () ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthe ĠES 2 5 6 K Ġsignature Ġwith Ġthe Ġpublic ĠEC Ġkey ĊĊĠĠĠĠĠĠĠ Ġ( jwt 2 . verify ( ECD SA Verifier ( sender J WK ))) ĠshouldBe Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsign And Encrypted Jwt Ed 2 5 5 1 9 () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġa Ġkey Ġpair Ġwith ĠEd 2 5 5 1 9 Ġcurve ĊĠĠĠĠĠĠĠ Ġval Ġsender J WK Ġ= ĠOct et KeyPair Generator ( Curve . Ed 2 5 5 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate () ĊĠĠĠĠĠĠĠ Ġval Ġsender Public J WK Ġ= Ġsender J WK . to Public J WK () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠEd D SA Ġsigner ĊĠĠĠĠĠĠĠ Ġval Ġsigner : ĠJ W SS ign er Ġ= ĠEd 2 5 5 1 9 Signer ( sender J WK ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare ĠJWT Ġwith Ġclaims Ġset ĊĠĠĠĠĠĠĠ Ġval Ġclaims Set Ġ= ĠJWT Claims Set . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subject (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. issuer (" https :// test . com ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġvar Ġsigned JWT Ġ= ĠSigned JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ WS Header . Builder ( J WS Algorithm . Ed D SA ). key ID ( sender J WK . key ID ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclaims Set ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe ĠEC Ġsignature ĊĠĠĠĠĠĠĠ Ġsigned JWT . sign ( signer ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠJ WE Ġobject Ġwith Ġsigned ĠJWT Ġas Ġpayload ĊĠĠĠĠĠĠĠ Ġval Ġj we Object Ġ= ĠJ WE Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ WE Header . Builder ( J WE Algorithm . ECD H _ ES , ĠEncryption Method . A 2 5 6 GCM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" JWT ") Ġ// Ġrequired Ġto Ġindicate Ġnested ĠJWT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayload ( signed JWT ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecipient J WK Ġ= ĠOct et KeyPair Generator ( Curve . X 2 5 5 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. key ID (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate () ĊĠĠĠĠĠĠĠ Ġval Ġrecipient Public J WK Ġ= Ġrecipient J WK . to Public J WK () ĊĊĠĠĠĠĠĠĠ Ġ// ĠEncrypt Ġwith Ġthe Ġrecipient 's Ġpublic Ġkey ĊĠĠĠĠĠĠĠ Ġj we Object . encrypt ( X 2 5 5 1 9 Encrypt er ( recipient Public J WK )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSerial ise Ġto ĠJ WE Ġcompact Ġform ĊĠĠĠĠĠĠĠ Ġval Ġj we String Ġ= Ġj we Object . serialize () ĊĊĠĠĠĠĠĠĠ Ġprintln ( j we String ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġj we 2 Ġ= ĠJ WE Object . parse ( j we String ) ĊĊĠĠĠĠĠĠĠ Ġj we 2 . decrypt ( X 2 5 5 1 9 Decrypt er ( recipient J WK )) ĊĊĠĠĠĠĠĠĠ Ġval Ġjwt 2 Ġ= Ġj we 2 . payload . to Signed JWT () ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthe ĠEd 2 5 5 1 9 Ġsignature Ġwith Ġthe Ġpublic ĠEC Ġkey ĊĠĠĠĠĠĠĠ Ġ( jwt 2 . verify ( Ed 2 5 5 1 9 Verifier ( sender Public J WK ))) ĠshouldBe Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ