/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 9 ĠU gl jes a ĠJ ovan ov ic Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 . ion spin . kotlin . crypto . hash . sha Ċ Ċ import Ġcom . ion spin . kotlin . crypto . hash . encode ToU ByteArray Ċ import Ġcom . ion spin . kotlin . crypto . util . hex StringTo U ByteArray Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertTrue Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠU gl jes a ĠJ ovan ov ic Ċ Ġ* Ġug lj es a . j ovan ov ic @ ion spin . com Ċ Ġ* Ġon Ġ 1 7 - Jul - 2 0 1 9 Ċ Ġ*/ Ċ Ċ class ĠSh a 2 5 6 Test Ġ{ ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Well Known Value () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSh a 2 5 6 Pure . digest (" abc ". encode ToU ByteArray ()) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= Ġ" ba 7 8 1 6 bf 8 f 0 1 c fea 4 1 4 1 4 0 de 5 dae 2 2 2 3 b 0 0 3 6 1 a 3 9 6 1 7 7 a 9 cb 4 1 0 ff 6 1 f 2 0 0 1 5 ad " ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . content Equals ( expected Result . hex StringTo U ByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Well Known Double Block () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Double Block Ġ= ĠSh a 2 5 6 Pure . digest (" abc dbc dec def def ge f gh f gh igh ij hi jk ijkl j kl mk l mn l mn om nop nop q ". encode ToU ByteArray ()) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Result For Double Block Ġ= Ġ" 2 4 8 d 6 a 6 1 d 2 0 6 3 8 b 8 e 5 c 0 2 6 9 3 0 c 3 e 6 0 3 9 a 3 3 ce 4 5 9 6 4 ff 2 1 6 7 f 6 ec edd 4 1 9 db 0 6 c 1 " ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Double Block . content Equals ( expected Result For Double Block . hex StringTo U ByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Well Known 3 () Ġ{ Ġ// It 's Ġgood Ġthat ĠI 'm Ġconsistent Ġwith Ġnames . ĊĊĊĠĠĠĠĠĠĠ Ġval Ġresult Double Block Ġ= ĠSh a 2 5 6 Pure . digest (" abcdefgh bc def gh ic def gh ij def gh ij ke f gh ijk lf gh ijkl m gh ijkl mn hi j kl m no ijkl mn op j kl mnopq kl mnopq rl mn op qr sm nop q rst nop q rst u ". encode ToU ByteArray ()) ĊĠĠĠĠĠĠĠ Ġprintln ( result Double Block . map { Ġit . toString ( 1 6 )}. join ToString ( separator Ġ= Ġ"")) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Result For Double Block Ġ= Ġ" cf 5 b 1 6 a 7 7 8 af 8 3 8 0 0 3 6 ce 5 9 e 7 b 0 4 9 2 3 7 0 b 2 4 9 b 1 1 e 8 f 0 7 a 5 1 af ac 4 5 0 3 7 afe e 9 d 1 " ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Double Block . content Equals ( expected Result For Double Block . hex StringTo U ByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Well Known Long () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 1 0 0 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Builder . append (" a ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Double Block Ġ= ĠSh a 2 5 6 Pure . digest ( input Message Ġ= Ġ( input Builder . toString ()). encode To ByteArray (). map Ġ{ Ġit . to U Byte () Ġ}. to U ByteArray ()) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Result For Double Block Ġ= Ġ" cdc 7 6 e 5 c 9 9 1 4 fb 9 2 8 1 a 1 c 7 e 2 8 4 d 7 3 e 6 7 f 1 8 0 9 a 4 8 a 4 9 7 2 0 0 e 0 4 6 d 3 9 ccc 7 1 1 2 cd 0 " ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Double Block . content Equals ( expected Result For Double Block . hex StringTo U ByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ