/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġcom . ul . ims . g mdl . cb or data . security Ċ Ċ import Ġco . n st ant .` in `. cb or . Cb or Builder Ċ import Ġco . n st ant .` in `. cb or . Cb or Encoder Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . P 2 5 6 Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . P 3 8 4 Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . P 5 2 1 Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . brain pool P 2 5 6 r 1 Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . brain pool P 3 2 0 r 1 Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . brain pool P 3 8 4 r 1 Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key . Companion . brain pool P 5 1 2 r 1 Ċ import Ġorg . bouncycastle . util . en coders . Hex Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . math . BigInteger Ċ Ċ class ĠC ose Key Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġco se Key Data Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠ 0 xA 4 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 0 2 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 3 A . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 2 1 . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 4 2 . to Byte (), Ġ 0 x 8 3 . to Byte (), Ġ 0 x 9 F . to Byte (), Ġ 0 x 8 A . to Byte (), Ġ 0 xE 3 . to Byte (), Ġ 0 xBA . to Byte (), Ġ 0 x 4 4 . to Byte (), Ġ 0 x 8 5 . to Byte (), Ġ 0 x 1 9 . to Byte (), Ġ 0 x 0 3 . to Byte (), Ġ 0 x 0 D . to Byte (), Ġ 0 xB 0 . to Byte (), Ġ 0 xF 0 . to Byte (), Ġ 0 x 0 E . to Byte (), Ġ 0 xE C . to Byte (), Ġ 0 x CD . to Byte (), Ġ 0 x 2 6 . to Byte (), Ġ 0 x 2 7 . to Byte (), Ġ 0 xE 5 . to Byte (), Ġ 0 x 9 6 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 xC 5 . to Byte (), Ġ 0 x 9 7 . to Byte (), Ġ 0 x 1 1 . to Byte (), Ġ 0 x AD . to Byte (), Ġ 0 x 6 5 . to Byte (), Ġ 0 x 8 E . to Byte (), Ġ 0 x 3 D . to Byte (), Ġ 0 xB 3 . to Byte (), Ġ 0 x 3 2 . to Byte (), Ġ 0 xB F . to Byte (), Ġ 0 x 8 9 . to Byte (), Ġ 0 x 2 2 . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 7 B . to Byte (), Ġ 0 x 7 8 . to Byte (), Ġ 0 x 4 E . to Byte (), Ġ 0 x 8 0 . to Byte (), Ġ 0 x DE . to Byte (), Ġ 0 x CD . to Byte (), Ġ 0 xED . to Byte (), Ġ 0 xA 4 . to Byte (), Ġ 0 x 7 3 . to Byte (), Ġ 0 xA 9 . to Byte (), Ġ 0 x 0 6 . to Byte (), Ġ 0 x 7 7 . to Byte (), Ġ 0 x 7 8 . to Byte (), Ġ 0 x 8 A . to Byte (), Ġ 0 x 9 B . to Byte (), Ġ 0 x 7 6 . to Byte (), Ġ 0 x 5 6 . to Byte (), Ġ 0 x 7 0 . to Byte (), Ġ 0 x 2 C . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 x 3 7 . to Byte (), Ġ 0 xD 6 . to Byte (), Ġ 0 x 2 7 . to Byte (), Ġ 0 xC 9 . to Byte (), Ġ 0 x 5 5 . to Byte (), Ġ 0 x BE . to Byte (), Ġ 0 xB 5 . to Byte (), Ġ 0 x 0 D . to Byte (), Ġ 0 x AB . to Byte (), Ġ 0 x CA . to Byte (), Ġ 0 xC 5 . to Byte (), Ġ 0 xD 7 . to Byte () ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġkey Type Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġval Ġx Coordinate Ġ= Ġbyte ArrayOf ( 0 x 4 2 . to Byte (), Ġ 0 x 8 3 . to Byte (), Ġ 0 x 9 F . to Byte (), Ġ 0 x 8 A . to Byte (), Ġ 0 xE 3 . to Byte (), Ġ 0 xBA . to Byte (), Ġ 0 x 4 4 . to Byte (), Ġ 0 x 8 5 . to Byte (), Ġ 0 x 1 9 . to Byte (), Ġ 0 x 0 3 . to Byte (), Ġ 0 x 0 D . to Byte (), Ġ 0 xB 0 . to Byte (), Ġ 0 xF 0 . to Byte (), Ġ 0 x 0 E . to Byte (), Ġ 0 xE C . to Byte (), Ġ 0 x CD . to Byte (), Ġ 0 x 2 6 . to Byte (), Ġ 0 x 2 7 . to Byte (), Ġ 0 xE 5 . to Byte (), Ġ 0 x 9 6 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 xC 5 . to Byte (), Ġ 0 x 9 7 . to Byte (), Ġ 0 x 1 1 . to Byte (), Ġ 0 x AD . to Byte (), Ġ 0 x 6 5 . to Byte (), Ġ 0 x 8 E . to Byte (), Ġ 0 x 3 D . to Byte (), Ġ 0 xB 3 . to Byte (), Ġ 0 x 3 2 . to Byte (), Ġ 0 xB F . to Byte (), Ġ 0 x 8 9 . to Byte ()) ĊĠĠĠ Ġprivate Ġval Ġy Coordinate Ġ= Ġbyte ArrayOf ( 0 x 7 B . to Byte (), Ġ 0 x 7 8 . to Byte (), Ġ 0 x 4 E . to Byte (), Ġ 0 x 8 0 . to Byte (), Ġ 0 x DE . to Byte (), Ġ 0 x CD . to Byte (), Ġ 0 xED . to Byte (), Ġ 0 xA 4 . to Byte (), Ġ 0 x 7 3 . to Byte (), Ġ 0 xA 9 . to Byte (), Ġ 0 x 0 6 . to Byte (), Ġ 0 x 7 7 . to Byte (), Ġ 0 x 7 8 . to Byte (), Ġ 0 x 8 A . to Byte (), Ġ 0 x 9 B . to Byte (), Ġ 0 x 7 6 . to Byte (), Ġ 0 x 5 6 . to Byte (), Ġ 0 x 7 0 . to Byte (), Ġ 0 x 2 C . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 x 3 7 . to Byte (), Ġ 0 xD 6 . to Byte (), Ġ 0 x 2 7 . to Byte (), Ġ 0 xC 9 . to Byte (), Ġ 0 x 5 5 . to Byte (), Ġ 0 x BE . to Byte (), Ġ 0 xB 5 . to Byte (), Ġ 0 x 0 D . to Byte (), Ġ 0 x AB . to Byte (), Ġ 0 x CA . to Byte (), Ġ 0 xC 5 . to Byte (), Ġ 0 xD 7 . to Byte ()) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Encode Co se Key () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠC ose Key . Builder () ĊĠĠĠĠĠĠĠ Ġbuilder . set KeyType ( key Type ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Curve ( brain pool P 2 5 6 r 1 . value . toInt (), Ġx Coordinate , Ġy Coordinate , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= Ġbuilder . build (). encode () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( co se Key Data , Ġc Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Encode Co se Key _ KeyType T str () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected C Key Data Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 1 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 6 3 . to Byte (), Ġ 0 x 7 4 . to Byte (), Ġ 0 x 6 2 . to Byte (), Ġ 0 x 6 4 . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠC ose Key . Builder () ĊĠĠĠĠĠĠĠ Ġbuilder . set KeyType (" t bd ") ĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= Ġbuilder . build (). encode () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( expected C Key Data , Ġc Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== Ġbrain pool P 2 5 6 r 1 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ** ĠC ose Key Ġtests Ġfor Ġcurves Ġwhich Ġsupport Ġpoint Ġcompression Ġ** Ġ// ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed P 2 5 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= ĠP 2 5 6 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 7 2 DA 7 1 9 7 Ġ 6 2 3 4 CE 8 3 Ġ 3 A 6 9 0 7 4 2 Ġ 5 8 6 7 B 8 2 E Ġ 0 7 4 D 4 4 EF Ġ 9 0 7 DF B 4 B Ġ 3 E 2 1 C 1 C 2 Ġ 2 5 6 EB CD 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 5 A 7 DED 5 2 ĠFC BB 0 9 7 A Ġ 4 ED 2 5 0 E 0 Ġ 3 6 C 7 B 9 C 8 ĠC 7 0 0 4 C 4 E ĠE DC 4 F 0 6 8 ĠCD 7 BF 8 D 3 ĠF 9 0 0 E 3 B 4 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== ĠP 2 5 6 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed P 3 8 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= ĠP 3 8 4 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" AA 8 7 CA 2 2 ĠBE 8 B 0 5 3 7 Ġ 8 EB 1 C 7 1 E ĠF 3 2 0 AD 7 4 Ġ 6 E 1 D 3 B 6 2 Ġ 8 BA 7 9 B 9 8 Ġ 5 9 F 7 4 1 E 0 Ġ 8 2 5 4 2 A 3 8 Ġ 5 5 0 2 F 2 5 D ĠBF 5 5 2 9 6 C Ġ 3 A 5 4 5 E 3 8 Ġ 7 2 7 6 0 AB 7 ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 3 6 1 7 DE 4 A Ġ 9 6 2 6 2 C 6 F Ġ 5 D 9 E 9 8 BF Ġ 9 2 9 2 DC 2 9 ĠF 8 F 4 1 DB D Ġ 2 8 9 A 1 4 7 C ĠE 9 DA 3 1 1 3 ĠB 5 F 0 B 8 C 0 Ġ 0 A 6 0 B 1 CE Ġ 1 D 7 E 8 1 9 D Ġ 7 A 4 3 1 D 7 C Ġ 9 0 EA 0 E 5 F ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== ĠP 3 8 4 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed P 5 2 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= ĠP 5 2 1 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 0 0 C 6 8 5 8 E Ġ 0 6 B 7 0 4 0 4 ĠE 9 CD 9 E 3 E ĠCB 6 6 2 3 9 5 ĠB 4 4 2 9 C 6 4 Ġ 8 1 3 9 0 5 3 F ĠB 5 2 1 F 8 2 8 ĠAF 6 0 6 B 4 D Ġ 3 DB AA 1 4 B Ġ 5 E 7 7 E FE 7 Ġ 5 9 2 8 FE 1 D ĠC 1 2 7 A 2 FF ĠA 8 DE 3 3 4 8 ĠB 3 C 1 8 5 6 A Ġ 4 2 9 BF 9 7 E Ġ 7 E 3 1 C 2 E 5 ĠBD 6 6 ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 0 1 1 8 3 9 2 9 Ġ 6 A 7 8 9 A 3 B ĠC 0 0 4 5 C 8 A Ġ 5 FB 4 2 C 7 D Ġ 1 BD 9 9 8 F 5 Ġ 4 4 4 9 5 7 9 B Ġ 4 4 6 8 1 7 AF ĠBD 1 7 2 7 3 E Ġ 6 6 2 C 9 7 EE Ġ 7 2 9 9 5 EF 4 Ġ 2 6 4 0 C 5 5 0 ĠB 9 0 1 3 F AD Ġ 0 7 6 1 3 5 3 C Ġ 7 0 8 6 A 2 7 2 ĠC 2 4 0 8 8 BE Ġ 9 4 7 6 9 FD 1 Ġ 6 6 5 0 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== ĠP 5 2 1 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed Brain pool P 2 5 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= Ġbrain pool P 2 5 6 r 1 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 7 8 0 2 8 4 9 6 ĠB 5 E CA AB 3 ĠC 8 B 6 C 1 2 E Ġ 4 5 DB 1 E 0 2 ĠC 9 E 4 D 2 6 B Ġ 4 1 1 3 BC 4 F Ġ 0 1 5 F 6 0 C 5 ĠC CC 0 D 2 0 6 ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" A 2 AE 1 7 6 2 ĠA 3 8 3 1 C 1 D Ġ 2 0 F 0 3 F 8 D Ġ 1 E 3 C 0 C 3 9 ĠA FE 6 F 0 9 B Ġ 4 D 4 4 B BE 8 Ġ 0 CD 1 0 0 9 8 Ġ 7 B 0 5 F 9 2 B ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== Ġbrain pool P 2 5 6 r 1 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed Brain pool P 3 2 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= Ġbrain pool P 3 2 0 r 1 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 4 3 BD 7 E 9 A ĠFB 5 3 D 8 B 8 Ġ 5 2 8 9 B CC 4 Ġ 8 EE 5 B FE 6 ĠF 2 0 1 3 7 D 1 Ġ 0 A 0 8 7 EB 6 ĠE 7 8 7 1 E 2 A Ġ 1 0 A 5 9 9 C 7 Ġ 1 0 AF 8 D 0 D Ġ 3 9 E 2 0 6 1 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 1 4 F DD 0 5 5 Ġ 4 5 EC 1 CC 8 ĠAB 4 0 9 3 2 4 Ġ 7 F 7 7 2 7 5 E Ġ 0 7 4 3 FF ED Ġ 1 1 7 1 8 2 EA ĠA 9 C 7 7 8 7 7 ĠA AAC 6 AC 7 ĠD 3 5 2 4 5 D 1 Ġ 6 9 2 E 8 EE 1 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== Ġbrain pool P 3 2 0 r 1 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed Brain pool P 3 8 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= Ġbrain pool P 3 8 4 r 1 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 4 5 CB 2 6 E 4 Ġ 3 8 4 DA F 6 F ĠB 7 7 6 8 8 5 3 Ġ 0 7 B 9 A 3 8 B Ġ 7 AD 1 B 5 C 6 Ġ 9 2 E 0 C 3 2 F Ġ 0 1 2 5 3 3 2 7 Ġ 7 8 F 3 B 8 D 3 ĠF 5 0 CA 3 5 8 Ġ 0 9 9 B 3 0 DE ĠB 5 EE 6 9 A 9 Ġ 5 C 0 5 8 B 4 E ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 8 1 7 3 A 1 C 5 Ġ 4 AFF A 7 E 7 Ġ 8 1 D 0 E 1 E 1 ĠD 1 2 C 0 DC 2 ĠB 7 4 F 4 DF 5 Ġ 8 E 4 A 4 E 3 A ĠF 7 0 2 6 C 5 D Ġ 3 2 DC 5 3 0 A Ġ 2 CD 8 9 C 8 5 Ġ 9 BB 4 B 4 B 7 Ġ 6 8 4 9 7 F 4 9 ĠAB 8 CC 8 5 9 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== Ġbrain pool P 3 8 4 r 1 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key Compressed Brain pool P 5 1 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠLong Ġ= Ġkey Type . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġcurve Id : ĠLong Ġ= Ġbrain pool P 5 1 2 r 1 . value . to Long () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" 0 5 6 2 E 6 8 B Ġ 9 AF 7 CB FD Ġ 5 5 6 5 C 6 B 1 Ġ 6 8 8 3 B 7 7 7 ĠFF 1 1 C 1 9 9 Ġ 1 6 1 ECC 4 2 Ġ 7 A 3 9 D 1 7 E ĠC 2 1 6 6 4 9 9 Ġ 3 8 9 5 7 1 D 6 ĠA 9 9 4 9 7 7 C Ġ 5 6 AD 8 2 5 2 Ġ 6 5 8 BA 8 A 1 ĠB 7 2 AE 4 2 F Ġ 4 FB 7 5 3 2 1 Ġ 5 1 A FC 3 EF Ġ 0 9 7 1 CC DA ") ĊĠĠĠĠĠĠĠ Ġval Ġy Coordinate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex . decode (" A 7 CA 2 D 8 1 Ġ 9 1 E 2 1 7 7 6 ĠA 8 9 8 6 0 AF ĠBC 1 F 5 8 2 F ĠAA 3 0 8 D 5 5 Ġ 1 C 1 DC 6 1 3 Ġ 3 AF 9 F 9 C 3 ĠC AD 5 9 9 9 8 ĠD 7 0 0 7 9 5 4 Ġ 8 1 4 0 B 9 0 B Ġ 1 F 3 1 1 AF B Ġ 3 7 8 AA 8 1 F Ġ 5 1 B 2 7 5 B 2 ĠBE 6 B 7 DE E Ġ 9 7 8 E FC 7 3 Ġ 4 3 EA 6 4 2 E ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy Compressed Ġ= ĠBigInteger ( 1 , Ġy Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mod ( BigInteger . valueOf ( 2 )) Ġ== ĠBigInteger . ONE ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . KEY TYPE _ LABEL . value . to Long (), Ġkey Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . CUR VE ID _ LABEL . value . to Long (), Ġcurve Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . X COORD IN ATE _ LABEL . value . to Long (), Ġx Coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Co se Key . Y COORD IN ATE _ LABEL . value . to Long (), Ġy Compressed ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġmap . end () ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġco se Key Data Ġ= ĠoutputStream . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( co se Key Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġkey Type . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== Ġbrain pool P 5 1 2 r 1 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( x Coordinate , Ġc Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals ( y Coordinate , Ġc Key . curve ?. y Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( c Key . curve ?. privateKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Decode Co se Key _ New Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc key Data Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xA 4 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 0 2 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 2 1 . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 xDC . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 2 1 . to Byte (), Ġ 0 xB 2 . to Byte (), Ġ 0 x 1 D . to Byte (), Ġ 0 x 9 1 . to Byte (), Ġ 0 x 2 C . to Byte (), Ġ 0 xB 7 . to Byte (), Ġ 0 x 0 3 . to Byte (), Ġ 0 x 4 7 . to Byte (), Ġ 0 x 7 1 . to Byte (), Ġ 0 xA 0 . to Byte (), Ġ 0 x 4 F . to Byte (), Ġ 0 xE 0 . to Byte (), Ġ 0 xD 1 . to Byte (), Ġ 0 xB 2 . to Byte (), Ġ 0 x 0 C . to Byte (), Ġ 0 x 8 3 . to Byte (), Ġ 0 x 2 2 . to Byte (), Ġ 0 x 0 8 . to Byte (), Ġ 0 x 4 0 . to Byte (), Ġ 0 x 4 4 . to Byte (), Ġ 0 xE 2 . to Byte (), Ġ 0 x 2 B . to Byte (), Ġ 0 x 0 E . to Byte (), Ġ 0 x 2 C . to Byte (), Ġ 0 xD 3 . to Byte (), Ġ 0 x 7 5 . to Byte (), Ġ 0 x 2 2 . to Byte (), Ġ 0 x 0 5 . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 xD 5 . to Byte (), Ġ 0 x 2 2 . to Byte (), Ġ 0 x 5 8 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 3 0 . to Byte (), Ġ 0 x DA . to Byte (), Ġ 0 x 7 A . to Byte (), Ġ 0 x 5 C . to Byte (), Ġ 0 xD 4 . to Byte (), Ġ 0 x 1 8 . to Byte (), Ġ 0 x 4 9 . to Byte (), Ġ 0 x AD . to Byte (), Ġ 0 xB 1 . to Byte (), Ġ 0 x 6 7 . to Byte (), Ġ 0 xE C . to Byte (), Ġ 0 x 9 9 . to Byte (), Ġ 0 xE A . to Byte (), Ġ 0 x 6 D . to Byte (), Ġ 0 xEF . to Byte (), Ġ 0 xA 9 . to Byte (), Ġ 0 x 4 D . to Byte (), Ġ 0 x DD . to Byte (), Ġ 0 x 2 1 . to Byte (), Ġ 0 x 0 E . to Byte (), Ġ 0 xF 7 . to Byte (), Ġ 0 xFD . to Byte (), Ġ 0 x 5 2 . to Byte (), Ġ 0 x 6 E . to Byte (), Ġ 0 x 6 F . to Byte (), Ġ 0 x 2 C . to Byte (), Ġ 0 xC 1 . to Byte (), Ġ 0 xF 1 . to Byte (), Ġ 0 xFC . to Byte (), Ġ 0 x BD . to Byte (), Ġ 0 x 0 B . to Byte (), Ġ 0 xD 5 . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġc Key Ġ= ĠC ose Key . Builder (). decode ( ck ey Data ). build () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( c Key ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . key Type Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( c Key . curve ?. id Ġ== ĠP 2 5 6 . value . toInt ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( c Key . curve ?. x Coordinate ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( c Key . curve ?. y Coordinate ) ĊĠĠĠ Ġ} Ċ }