/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġok io Ċ Ċ import Ġok io . internal . Hash Function Ċ import Ġok io . internal . common As Utf 8 To ByteArray Ċ import Ġok io . internal . new Hash Function Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠHash Function Test Ġ{ ĊĊĠ Ġ// Ġregion ĠSHA - 1 ĊĊĠ Ġ@ Test Ġfun Ġsha 1 Empty Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 1 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( byte ArrayOf ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" da 3 9 a 3 ee 5 e 6 b 4 b 0 d 3 2 5 5 b fef 9 5 6 0 1 8 9 0 afd 8 0 7 0 9 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 1 Simple Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġ" K evin ". common As Utf 8 To ByteArray () ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 1 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( value ) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" e 0 4 3 8 9 9 daa 0 c 7 add 3 7 bc 9 9 7 9 2 b 2 c 0 4 5 d 6 ab bc 6 dc ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 1 Padding Size Value is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 1 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 5 6 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 8 6 ef 7 8 0 4 dac b 2 1 6 1 8 4 1 bc 6 0 a 2 6 f 2 1 d 7 1 cf 3 f 3 4 9 f ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 1 Chunk Size Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 1 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 6 4 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 7 9 c 6 4 4 5 5 d 4 5 6 5 a 8 2 bc 3 f 4 ec 5 d 9 a 5 e 8 4 4 3 c 2 e 7 7 b 3 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 1 Value L arger Than Chunk Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 1 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 6 5 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 6 6 5 8 b 0 1 c 9 7 fd 6 db 0 bdb 0 1 0 b 2 e 1 5 4 1 6 4 2 8 5 e 5 bd 7 1 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 1 Complex Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġ" The Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ". common As Utf 8 To ByteArray () ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 1 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( value ) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 2 fd 4 e 1 c 6 7 a 2 d 2 8 fc ed 8 4 9 ee 1 bb 7 6 e 7 3 9 1 b 9 3 eb 1 2 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ// Ġend region ĊĊĠ Ġ// Ġregion ĠSHA - 2 5 6 ĊĊĠ Ġ@ Test Ġfun Ġsha 2 5 6 Empty Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 2 5 6 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( byte ArrayOf ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" e 3 b 0 c 4 4 2 9 8 fc 1 c 1 4 9 af bf 4 c 8 9 9 6 fb 9 2 4 2 7 ae 4 1 e 4 6 4 9 b 9 3 4 ca 4 9 5 9 9 1 b 7 8 5 2 b 8 5 5 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 2 5 6 Simple Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġ" hello Ġworld ". common As Utf 8 To ByteArray () ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 2 5 6 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( value ) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" b 9 4 d 2 7 b 9 9 3 4 d 3 e 0 8 a 5 2 e 5 2 d 7 da 7 dab fac 4 8 4 efe 3 7 a 5 3 8 0 ee 9 0 8 8 f 7 ace 2 ef cde 9 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 2 5 6 Padding Size Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 2 5 6 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 5 6 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" aae 8 7 2 3 5 d 5 b 4 c 8 9 c 3 b 7 1 6 1 d 9 de 5 1 3 0 1 9 aa 3 8 5 b 8 bc 2 fea 4 af bff 6 3 dd 8 c 1 d 7 7 ffd ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 2 5 6 Chunk Size Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 2 5 6 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 6 4 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" a 3 4 3 b 6 1 7 ce 1 0 7 0 a 3 7 2 5 1 a 5 e 6 6 b 4 0 9 9 4 7 ec 3 d 3 ff 7 d 8 9 b 9 de 4 8 2 d 7 df 8 4 4 0 2 7 7 8 d 2 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 2 5 6 Value L arger Than Chunk Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 2 5 6 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 6 5 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 7 db 9 2 d 7 7 e 8 b 1 d 5 ac 5 9 3 cd 6 1 4 2 4 4 1 0 9 b 7 0 6 1 8 fe 2 a 6 a 7 eba 5 4 1 a 5 3 4 7 ff 3 8 3 2 3 7 d 0 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 2 5 6 Complex Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġ" The Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ". common As Utf 8 To ByteArray () ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 2 5 6 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( value ) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" d 7 a 8 fbb 3 0 7 d 7 8 0 9 4 6 9 ca 9 ab cb 0 0 8 2 e 4 f 8 d 5 6 5 1 e 4 6 d 3 cdb 7 6 2 d 0 2 d 0 bf 3 7 c 9 e 5 9 2 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ// Ġend region ĊĊĠ Ġ// Ġregion ĠSHA - 5 1 2 ĊĊĠ Ġ@ Test Ġfun Ġsha 5 1 2 Empty Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 5 1 2 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( byte ArrayOf ()) ĊĠĠĠ Ġ}. digest () ĊĠĠĠ ĠassertEquals (" cf 8 3 e 1 3 5 7 ee fb 8 bdf 1 5 4 2 8 5 0 d 6 6 d 8 0 0 7 d 6 2 0 e 4 0 5 0 b 5 7 1 5 dc 8 3 f 4 a 9 2 1 d 3 6 ce 9 ce 4 7 d 0 d 1 3 c 5 d 8 5 f 2 b 0 ff 8 3 1 8 d 2 8 7 7 eec 2 f 6 3 b 9 3 1 bd 4 7 4 1 7 a 8 1 a 5 3 8 3 2 7 af 9 2 7 da 3 e ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 5 1 2 Simple Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 5 1 2 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate (" hello Ġworld ". common As Utf 8 To ByteArray ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 3 0 9 ecc 4 8 9 c 1 2 d 6 eb 4 cc 4 0 f 5 0 c 9 0 2 f 2 b 4 d 0 ed 7 7 ee 5 1 1 a 7 c 7 a 9 bcd 3 ca 8 6 d 4 cd 8 6 f 9 8 9 dd 3 5 bc 5 ff 4 9 9 6 7 0 da 3 4 2 5 5 b 4 5 b 0 cfd 8 3 0 e 8 1 f 6 0 5 dcf 7 dc 5 5 4 2 e 9 3 ae 9 cd 7 6 f ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 5 1 2 Padding Size Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 5 1 2 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 1 1 2 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 6 d 5 c 7 c 2 f 5 0 5 a 1 7 6 7 f 7 1 7 a 6 f 9 c 3 7 8 7 2 7 0 0 9 3 c 5 c 3 3 1 b 5 1 4 4 1 3 3 9 5 f 9 ecb 1 f 9 b 1 fa 6 2 5 1 4 f 6 4 e 8 6 2 ba 0 8 c 3 c 5 a 6 0 dde 8 9 fdf d 9 c 1 8 e 4 2 5 2 9 3 9 9 c 7 5 8 c 9 5 7 b 7 8 ed 9 c 3 3 2 2 1 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 5 1 2 Chunk Size Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 5 1 2 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 1 2 8 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 7 6 b 9 c 0 fd 4 f 6 2 bee 4 5 4 1 f 0 9 2 d 0 fd 2 8 6 9 fe 6 f 0 6 ca 6 7 2 5 be 4 6 1 1 c 8 4 e 2 7 a 8 6 4 1 d 6 1 a def 6 0 2 0 be 4 9 c 1 1 1 6 2 8 4 3 4 6 a 8 9 6 2 bed 7 d 5 b 3 df 0 3 6 1 8 cb 9 2 7 3 fa 5 de 0 b 9 1 0 4 a 5 1 e 8 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 5 1 2 Value L arger Than Chunk Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 5 1 2 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 1 2 9 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 3 4 a 1 5 9 4 4 d 8 6 a 6 7 fd 7 b 4 0 8 3 5 0 2 fb 5 f 0 8 b 6 ae 3 5 edd 4 b 4 a 5 6 d 6 ae 4 6 b 4 5 c 9 5 0 a 5 1 5 f 7 9 8 2 4 a 9 3 3 9 5 8 9 8 8 dac b 4 2 ed 7 1 dc 3 0 e 0 d 1 3 9 8 d 0 d 9 fcf 1 7 9 9 d 3 5 a 3 c 3 9 aec cbd 1 9 f ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsha 5 1 2 Complex Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" SHA - 5 1 2 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate (" The Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ". common As Utf 8 To ByteArray ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 0 7 e 5 4 7 d 9 5 8 6 f 6 a 7 3 f 7 3 fb ac 0 4 3 5 ed 7 6 9 5 1 2 1 8 fb 7 d 0 c 8 d 7 8 8 a 3 0 9 d 7 8 5 4 3 6 bbb 6 4 2 e 9 3 a 2 5 2 a 9 5 4 f 2 3 9 1 2 5 4 7 d 1 e 8 a 3 b 5 ed 6 e 1 bfd 7 0 9 7 8 2 1 2 3 3 fa 0 5 3 8 f 3 db 8 5 4 fee 6 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ// Ġend region ĊĊĠ Ġ// Ġregion ĠMD 5 ĊĊĠ Ġ@ Test Ġfun Ġmd 5 Empty Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" MD 5 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( byte ArrayOf ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" d 4 1 d 8 cd 9 8 f 0 0 b 2 0 4 e 9 8 0 0 9 9 8 ecf 8 4 2 7 e ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmd 5 Simple Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" MD 5 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate (" hello Ġworld ". common As Utf 8 To ByteArray ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 5 eb 6 3 bb be 0 1 ee ed 0 9 3 cb 2 2 bb 8 f 5 ac dc 3 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmd 5 Padding Size Value Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" MD 5 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 5 6 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" b 3 9 4 f 3 6 6 5 4 b 7 e 1 a 7 2 7 4 5 e 7 9 4 5 0 c 1 2 8 3 4 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmd 5 Chunk Size Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" MD 5 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 6 4 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 2 ac bc 1 a 0 af 1 f 7 d 3 0 a 2 d 6 d 9 ecc 8 e 3 9 0 6 6 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmd 5 Value L arger Than Chunk Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" MD 5 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate ( ByteArray ( 6 5 ) Ġ{ Ġ' i '. to Byte () Ġ}) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 0 d 0 a 2 7 0 d 6 b 5 2 7 f 7 b 8 7 6 9 2 5 f 0 7 b ccb 7 6 2 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmd 5 Complex Value Hash Is Correct () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġnew Hash Function (" MD 5 "). apply Ġ{ ĊĠĠĠĠĠ Ġupdate (" The Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ". common As Utf 8 To ByteArray ()) ĊĠĠĠ Ġ}. digest () ĊĊĠĠĠ ĠassertEquals (" 9 e 1 0 7 d 9 d 3 7 2 bb 6 8 2 6 bd 8 1 d 3 5 4 2 a 4 1 9 d 6 ", ĠByte String ( result ). hex ()) ĊĠ Ġ} ĊĊĠ Ġ// Ġend region ĊĊĠ Ġprivate Ġfun ĠHash Function . update ( byteArray : ĠByteArray ) Ġ{ ĊĠĠĠ Ġreturn Ġupdate ( byteArray , Ġ 0 , ĠbyteArray . size ) ĊĠ Ġ} Ċ } Ċ