package Ġch . ku on . commons Ċ Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test .* Ċ import Ġch . ku on . commons . Base 2 4 . encode 2 4 Ċ import Ġch . ku on . commons . Base 2 4 . decode 2 4 Ċ import Ġjava . security . Secure Random Ċ Ċ // ĠA Ġfew Ġhard Ġcoded Ġvalues Ċ val Ġvalues Ġ= ĠlistOf ( ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 0 ", Ġ" ZZ ZZ ZZ Z ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ", Ġ" ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ Z ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 1 ", Ġ" ZZ ZZ ZZ A ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 ", Ġ" ZZ ZZ ZZ AZ ZZ ZZ Z AZ ZZ ZZ ZA ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 1 0 ", Ġ" ZZ ZZ ZZ P ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 3 0 ", Ġ" ZZ ZZ Z CZ ", ĊĠĠĠ Ġ" 8 8 5 5 3 3 1 1 ", Ġ" 5 YE AT XA ", ĊĠĠĠ Ġ" FFFFFFFF ", Ġ" X 5 G GB H 7 ", ĊĠĠĠ Ġ" FFFFFFFF FFFFFFFF FFFFFFFF ", Ġ" X 5 G GB H 7 X 5 G GB H 7 X 5 G GB H 7 ", ĊĠĠĠ Ġ" FFFFFFFF FFFFFFFF FFFFFFFF ", Ġ" x 5 g gb h 7 x 5 g gb h 7 x 5 g gb h 7 ", ĊĠĠĠ Ġ" 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 ", Ġ" A 6 4 K HW Z 5 WE P AGG ", ĊĠĠĠ Ġ" 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 ", Ġ" a 6 4 k hw z 5 w ep agg ", ĊĠĠĠ Ġ" FF 0 0 0 1 FF 0 0 1 1 0 1 FF 0 1 0 2 3 3 9 9 ", Ġ" XG ES 6 3 F ZZ 2 4 7 C 7 ZC 2 ZA 6 G ", ĊĠĠĠ Ġ" FF 0 0 0 1 FF 0 0 1 1 0 1 FF 0 1 0 2 3 3 9 9 ", Ġ" x ges 6 3 f zz 2 4 7 c 7 zc 2 za 6 g ", ĊĠĠĠ Ġ" 2 5 8 9 6 9 8 4 1 2 5 4 7 8 5 4 6 5 9 8 5 6 3 2 5 1 4 5 2 6 5 8 ", Ġ" 2 FC 2 8 K TA 6 6 WR ST 4 X AH RR CF 2 3 7 S 8 Z ", ĊĠĠĠ Ġ" 2 5 8 9 6 9 8 4 1 2 5 4 7 8 5 4 6 5 9 8 5 6 3 2 5 1 4 5 2 6 5 8 ", Ġ" 2 fc 2 8 k ta 6 6 wr st 4 x ah rr cf 2 3 7 s 8 z ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 1 ", Ġ" ZZ ZZ ZZ A ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 2 ", Ġ" ZZ ZZ ZZ C ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 4 ", Ġ" ZZ ZZ ZZ B ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 0 8 ", Ġ" ZZ ZZ ZZ 4 ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 1 0 ", Ġ" ZZ ZZ ZZ P ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 2 0 ", Ġ" ZZ ZZ ZA 4 ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 4 0 ", Ġ" ZZ ZZ Z CP ", ĊĠĠĠ Ġ" 0 0 0 0 0 0 8 0 ", Ġ" ZZ ZZ Z 3 4 ", ĊĠĠĠ Ġ" 0 0 0 0 0 1 0 0 ", Ġ" ZZ ZZ Z HP ", ĊĠĠĠ Ġ" 0 0 0 0 0 2 0 0 ", Ġ" ZZ ZZ ZW 4 ", ĊĠĠĠ Ġ" 0 0 0 0 0 4 0 0 ", Ġ" ZZ ZZ ARP ", ĊĠĠĠ Ġ" 0 0 0 0 0 8 0 0 ", Ġ" ZZ ZZ 2 K 4 ", ĊĠĠĠ Ġ" 0 0 0 0 1 0 0 0 ", Ġ" ZZ ZZ F CP ", ĊĠĠĠ Ġ" 0 0 0 0 2 0 0 0 ", Ġ" ZZ ZZ 6 3 4 ", ĊĠĠĠ Ġ" 0 0 0 0 4 0 0 0 ", Ġ" ZZ Z AB HP ", ĊĠĠĠ Ġ" 0 0 0 0 8 0 0 0 ", Ġ" ZZ ZC 4 W 4 ", ĊĠĠĠ Ġ" 0 0 0 1 0 0 0 0 ", Ġ" ZZ ZB 8 RP ", ĊĠĠĠ Ġ" 0 0 0 2 0 0 0 0 ", Ġ" ZZ ZG 5 K 4 ", ĊĠĠĠ Ġ" 0 0 0 4 0 0 0 0 ", Ġ" ZZ Z RY CP ", ĊĠĠĠ Ġ" 0 0 0 8 0 0 0 0 ", Ġ" ZZ AK X 3 4 ", ĊĠĠĠ Ġ" 0 0 1 0 0 0 0 0 ", Ġ" ZZ 2 2 9 HP ", ĊĠĠĠ Ġ" 0 0 2 0 0 0 0 0 ", Ġ" Z ZE FP W 4 ", ĊĠĠĠ Ġ" 0 0 4 0 0 0 0 0 ", Ġ" ZZ T 7 GRP ", ĊĠĠĠ Ġ" 0 0 8 0 0 0 0 0 ", Ġ" Z AA ES K 4 ", ĊĠĠĠ Ġ" 0 1 0 0 0 0 0 0 ", Ġ" ZC CK 7 CP ", ĊĠĠĠ Ġ" 0 2 0 0 0 0 0 0 ", Ġ" ZB 3 2 E 3 4 ", ĊĠĠĠ Ġ" 0 4 0 0 0 0 0 0 ", Ġ" Z 4 H ET HP ", ĊĠĠĠ Ġ" 0 8 0 0 0 0 0 0 ", Ġ" ZP 9 K ZW 4 ", ĊĠĠĠ Ġ" 1 0 0 0 0 0 0 0 ", Ġ" AG 8 CAR P ", ĊĠĠĠ Ġ" 2 0 0 0 0 0 0 0 ", Ġ" C SH B 2 K 4 ", ĊĠĠĠ Ġ" 4 0 0 0 0 0 0 0 ", Ġ" 3 6 9 4 F CP ", ĊĠĠĠ Ġ" 8 0 0 0 0 0 0 0 ", Ġ" 5 3 PP 6 3 4 " Ċ ) Ċ Ċ class ĠLibrary Test Ġ{ ĊĊĠĠĠ Ġfun Ġencode ( str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġels Ġ= Ġstr . chunk ed ( 2 ) Ġ{ Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . Long . parse Long ( s . toString (), Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Byte () ĊĠĠĠĠĠĠĠ Ġ}. toByteArray () ĊĠĠĠĠĠĠĠ Ġreturn Ġencode 2 4 ( els ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecode ( str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode 2 4 ( str ). map Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ("% 0 2 X ", Ġb ) ĊĠĠĠĠĠĠĠ Ġ}. join ToString ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Fixed () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvalues . size Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġvalues . get ( i Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġvalues . get ( i Ġ* Ġ 2 Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( v . toUpperCase (), Ġencode ( k )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( k , Ġdecode ( v )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Random () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠSecure Random () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( words Ġin Ġ 1 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( 4 Ġ* Ġwords ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 1 _ 0 0 0 _ 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrand . next Bytes ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencoded Ġ= Ġencode 2 4 ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecoded Ġ= Ġdecode 2 4 ( encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( bytes . size , Ġdecoded . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( bytes Ġcontent Equals Ġdecoded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ