package Ġme . uport . kn acl Ċ Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Unsigned Types Ċ class ĠNa Cl Test Quick Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` all Ġsetup Ġis ĠOK `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` from Ġsecret Key `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsecret Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 3 7 , Ġ 5 0 , Ġ- 1 2 2 , Ġ- 1 2 3 , Ġ 0 , Ġ- 9 9 , Ġ- 5 0 , Ġ- 7 0 , Ġ 7 8 , Ġ- 9 5 , Ġ- 2 4 , Ġ- 6 0 , Ġ- 7 , Ġ- 4 2 , Ġ- 5 6 , Ġ- 5 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 3 , Ġ 1 2 1 , Ġ- 8 1 , Ġ- 1 9 , Ġ 4 8 , Ġ 8 , Ġ 7 1 , Ġ 2 0 , Ġ- 9 9 , Ġ 9 4 , Ġ 5 8 , Ġ- 2 5 , Ġ- 2 5 , Ġ- 4 1 , Ġ 1 8 , Ġ- 4 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Pub Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 4 , Ġ 2 1 , Ġ- 1 1 8 , Ġ 5 5 , Ġ 2 1 , Ġ 3 7 , Ġ- 7 3 , Ġ 4 0 , Ġ 1 2 0 , Ġ 1 1 9 , Ġ 3 2 , Ġ 6 7 , Ġ 1 1 4 , Ġ 1 4 , Ġ 1 1 2 , Ġ 4 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 6 , Ġ- 9 4 , Ġ- 9 , Ġ 4 5 , Ġ 4 , Ġ 3 5 , Ġ- 1 9 , Ġ 1 1 , Ġ 1 2 1 , Ġ- 8 6 , Ġ- 1 2 2 , Ġ- 1 , Ġ 5 9 , Ġ- 1 0 7 , Ġ- 1 2 7 , Ġ 1 2 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġ( pub , Ġ_) Ġ= Ġn acl . box . key Pair From SecretKey ( secret ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Pub , Ġpub ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` scal arm ult Ġbase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠByteArray ( 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠByteArray ( 3 2 ). apply Ġ{ Ġthis [ 0 ] Ġ= Ġ 9 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġn acl . scalar Mult ( n , Ġp ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 7 , Ġ- 2 7 , Ġ 1 2 5 , Ġ- 9 3 , Ġ 7 1 , Ġ- 5 1 , Ġ 9 8 , Ġ 6 7 , Ġ 2 1 , Ġ 4 0 , Ġ- 3 8 , Ġ- 8 4 , Ġ 9 5 , Ġ- 6 9 , Ġ 4 1 , Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 8 , Ġ- 1 , Ġ- 1 0 , Ġ- 1 2 4 , Ġ- 8 1 , Ġ- 6 0 , Ġ- 4 9 , Ġ- 6 2 , Ġ- 1 9 , Ġ- 1 1 2 , Ġ- 1 0 3 , Ġ 9 5 , Ġ 8 8 , Ġ- 5 3 , Ġ 5 9 , Ġ 1 1 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscal arm ult () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaa Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbb Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 3 , Ġ 1 2 1 , Ġ- 1 0 6 , Ġ 0 , Ġ- 1 0 , Ġ- 1 , Ġ- 8 2 , Ġ- 3 0 , Ġ- 3 1 , Ġ 3 3 , Ġ- 2 6 , Ġ- 7 2 , Ġ- 9 , Ġ- 9 6 , Ġ 9 3 , Ġ- 5 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 4 , Ġ 1 1 6 , Ġ- 7 5 , Ġ 2 9 , Ġ- 7 7 , Ġ 1 6 , Ġ 4 5 , Ġ 1 3 , Ġ 1 1 3 , Ġ- 9 , Ġ- 1 0 3 , Ġ- 9 6 , Ġ- 1 0 0 , Ġ- 7 6 , Ġ- 6 0 , Ġ 9 7 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 9 3 , Ġ 8 9 , Ġ 7 9 , Ġ 5 1 , Ġ 1 1 6 , Ġ- 1 0 7 , Ġ 1 1 3 , Ġ- 2 6 , Ġ 4 0 , Ġ- 8 5 , Ġ 8 0 , Ġ 5 1 , Ġ- 1 1 5 , Ġ- 8 , Ġ 8 8 , Ġ 6 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 2 0 , Ġ- 1 1 9 , Ġ- 1 0 8 , Ġ- 7 6 , Ġ 6 , Ġ- 9 3 , Ġ- 2 9 , Ġ 1 0 3 , Ġ 5 4 , Ġ 4 5 , Ġ- 4 9 , Ġ 6 1 , Ġ 6 3 , Ġ- 6 8 , Ġ- 6 0 , Ġ 1 8 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġn acl . scalar Mult ( aa , Ġbb ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbox Before () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaa Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbs K Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ(( 3 2 Ġ- Ġit ) Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbb Ġ= Ġn acl . box . key Pair From SecretKey ( bs K ). first ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 2 , Ġ- 1 4 , Ġ 3 2 , Ġ- 9 5 , Ġ 7 9 , Ġ- 1 0 8 , Ġ- 8 1 , Ġ 8 7 , Ġ- 2 8 , Ġ 1 0 7 , Ġ 4 3 , Ġ- 8 0 , Ġ- 1 2 5 , Ġ 6 7 , Ġ- 6 2 , Ġ- 2 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 2 3 , Ġ 4 , Ġ 1 2 7 , Ġ- 4 4 , Ġ 3 8 , Ġ 6 3 , Ġ- 1 7 , Ġ- 4 3 , Ġ 7 5 , Ġ- 4 3 , Ġ 3 , Ġ 6 9 , Ġ 5 0 , Ġ 8 0 , Ġ 9 9 , Ġ- 2 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġn acl . box . before ( bb , Ġaa ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Ġwith Ġknown Ġinputs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( 2 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġbyte ArrayOf ( 1 0 4 , Ġ 1 0 1 , Ġ 1 0 8 , Ġ 1 0 8 , Ġ 1 1 1 , Ġ 3 2 , Ġ 9 8 , Ġ 1 1 1 , Ġ 9 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 3 , Ġ 1 0 5 , Ġ 2 5 3 , Ġ 5 , Ġ 2 1 7 , Ġ 1 0 1 , Ġ 1 1 1 , Ġ 6 2 , Ġ 7 5 , Ġ 1 6 5 , Ġ 9 4 , Ġ 1 9 9 , Ġ 1 1 0 , Ġ 1 9 0 , Ġ 2 5 5 , Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 4 , Ġ 1 0 7 , Ġ 1 5 6 , Ġ 4 5 , Ġ 2 4 7 , Ġ 1 3 8 , Ġ 2 2 1 , Ġ 9 2 , Ġ 6 2 ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġit . to Byte () Ġ}. toByteArray () ĊĊĠĠĠĠĠĠĠ Ġval Ġciphertext 1 Ġ= Ġn acl . secret box . se al ( msg , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected , Ġciphertext 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Open Ġwith Ġknown Ġinputs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġciphertext Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 3 , Ġ 1 0 5 , Ġ 2 5 3 , Ġ 5 , Ġ 2 1 7 , Ġ 1 0 1 , Ġ 1 1 1 , Ġ 6 2 , Ġ 7 5 , Ġ 1 6 5 , Ġ 9 4 , Ġ 1 9 9 , Ġ 1 1 0 , Ġ 1 9 0 , Ġ 2 5 5 , Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 4 , Ġ 1 0 7 , Ġ 1 5 6 , Ġ 4 5 , Ġ 2 4 7 , Ġ 1 3 8 , Ġ 2 2 1 , Ġ 9 2 , Ġ 6 2 ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġit . to Byte () Ġ}. toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( 2 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Msg Ġ= Ġbyte ArrayOf ( 1 0 4 , Ġ 1 0 1 , Ġ 1 0 8 , Ġ 1 0 8 , Ġ 1 1 1 , Ġ 3 2 , Ġ 9 8 , Ġ 1 1 1 , Ġ 9 8 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġn acl . secret box . open ( ciphertext , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Msg , Ġmsg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Ġand Ġsecret box Open Ġwith Ġknown Ġinputs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( 2 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġbyte ArrayOf ( 1 0 4 , Ġ 1 0 1 , Ġ 1 0 8 , Ġ 1 0 8 , Ġ 1 1 1 , Ġ 3 2 , Ġ 9 8 , Ġ 1 1 1 , Ġ 9 8 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġciphertext Ġ= Ġn acl . secret box . se al ( msg , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġval Ġdecrypted Ġ= Ġn acl . secret box . open ( ciphertext , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( msg , Ġdecrypted ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Ġand Ġsecret box Open `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( n acl . crypto _ secret box _ KEY BYTES ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ secret box _ NON CE BYTES ) Ġ{ Ġ(( 3 2 Ġ+ Ġit ) Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" message Ġto Ġencrypt ". toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġbox Ġ= Ġn acl . secret box . se al ( msg , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġval Ġopened Msg Ġ= Ġn acl . secret box . open ( box , Ġnonce , Ġkey ) !! ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( msg , Ġopened Msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Open Ġwith Ġinvalid Ġbox `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( n acl . crypto _ secret box _ KEY BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ secret box _ NON CE BYTES ) ĊĠĠĠĠĠĠĠ ĠassertNull ( n acl . secret box . open ( ByteArray ( 0 ), Ġnonce , Ġkey )) ĊĠĠĠĠĠĠĠ ĠassertNull ( n acl . secret box . open ( ByteArray ( 1 0 ), Ġnonce , Ġkey )) ĊĠĠĠĠĠĠĠ ĠassertNull ( n acl . secret box . open ( ByteArray ( 1 0 0 ), Ġnonce , Ġkey )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Open Ġwith Ġinvalid Ġnonce `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( n acl . crypto _ secret box _ KEY BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ secret box _ NON CE BYTES ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnonce . size ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" message Ġto Ġencrypt ". toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġbox Ġ= Ġn acl . secret box . se al ( msg , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( msg , Ġn acl . secret box . open ( box , Ġnonce , Ġkey )) ĊĠĠĠĠĠĠĠ Ġnonce [ 0 ] Ġ= Ġ 2 5 5 . to Byte () ĊĠĠĠĠĠĠĠ ĠassertNull ( n acl . secret box . open ( box , Ġnonce , Ġkey )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Open Ġwith Ġinvalid Ġkey `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( n acl . crypto _ secret box _ KEY BYTES ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ secret box _ NON CE BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" message Ġto Ġencrypt ". toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġbox Ġ= Ġn acl . secret box . se al ( msg , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( msg , Ġn acl . secret box . open ( box , Ġnonce , Ġkey )) ĊĠĠĠĠĠĠĠ Ġkey [ 0 ] Ġ= Ġ 2 5 5 . to Byte () ĊĠĠĠĠĠĠĠ ĠassertNull ( n acl . secret box . open ( box , Ġnonce , Ġkey )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` secret box Ġwith Ġlengths Ġof Ġ 0 Ġto Ġ 1 0 2 4 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( n acl . crypto _ secret box _ KEY BYTES ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ secret box _ NON CE BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġfull Msg Ġ= ĠByteArray ( 1 0 2 4 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġfull Msg . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġfull Msg . copyOf Range ( 0 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbox Ġ= Ġn acl . secret box . se al ( msg , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun box Ġ= Ġn acl . secret box . open ( box , Ġnonce , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( msg , Ġun box ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` box Ġwith Ġknown Ġnonce `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ box _ NON CE BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġsk A Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 4 4 , Ġ- 8 , Ġ- 3 9 , Ġ- 1 1 0 , Ġ- 7 1 , Ġ- 1 2 , Ġ- 8 1 , Ġ- 4 6 , Ġ 1 2 2 , Ġ- 7 8 , Ġ 3 9 , Ġ 1 2 3 , Ġ 1 5 , Ġ 5 4 , Ġ- 4 5 , Ġ 6 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 1 4 , Ġ 5 2 , Ġ 4 9 , Ġ- 1 2 4 , Ġ- 7 2 , Ġ 1 0 0 , Ġ 3 7 , Ġ 1 2 4 , Ġ- 9 1 , Ġ- 7 1 , Ġ 8 4 , Ġ 8 7 , Ġ- 7 5 , Ġ- 3 9 , Ġ- 1 1 2 , Ġ- 3 3 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġpk B Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 9 4 , Ġ- 1 6 , Ġ- 1 6 , Ġ 1 6 , Ġ 4 1 , Ġ- 3 8 , Ġ- 4 2 , Ġ- 6 8 , Ġ- 1 2 7 , Ġ 2 9 , Ġ- 7 0 , Ġ- 9 2 , Ġ 1 1 7 , Ġ 1 0 4 , Ġ- 2 8 , Ġ- 5 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 6 , Ġ- 2 6 , Ġ- 6 3 , Ġ 4 2 , Ġ- 4 6 , Ġ- 4 3 , Ġ- 7 4 , Ġ 1 2 0 , Ġ 4 0 , Ġ- 1 0 8 , Ġ- 3 0 , Ġ 6 3 , Ġ 1 2 0 , Ġ- 9 5 , Ġ- 8 3 , Ġ 1 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" hello Ġkn acl ". toByteArray ( Charsets . UTF _ 8 ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġn acl . box . se al ( msg , Ġnonce , Ġpk B , Ġsk A ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 1 5 , Ġ- 9 7 , Ġ- 7 5 , Ġ 2 9 , Ġ 2 1 , Ġ 1 1 2 , Ġ- 2 6 , Ġ 6 5 , Ġ 2 5 , Ġ- 1 5 , Ġ 9 5 , Ġ- 7 0 , Ġ- 9 0 , Ġ- 2 4 , Ġ 3 4 , Ġ 1 2 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 2 , Ġ- 1 0 1 , Ġ 1 2 6 , Ġ 5 0 , Ġ- 3 , Ġ- 2 3 , Ġ 8 8 , Ġ 4 6 , Ġ- 4 2 , Ġ- 5 8 , Ġ- 1 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Result , Ġresult ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` box Ġboth Ġdirections `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 2 3 , Ġ- 8 3 , Ġ 8 4 , Ġ 5 1 , Ġ 5 2 , Ġ- 5 0 , Ġ 4 9 , Ġ 7 , Ġ 1 , Ġ- 4 7 , Ġ 3 2 , Ġ- 6 0 , Ġ- 6 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 1 , Ġ- 7 , Ġ- 9 6 , Ġ 1 1 8 , Ġ- 6 0 , Ġ 7 4 , Ġ- 1 2 7 , Ġ- 1 0 1 , Ġ- 3 7 , Ġ- 6 8 , Ġ- 5 9 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsk A Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 3 6 , Ġ 1 0 2 , Ġ- 7 3 , Ġ- 6 , Ġ 1 8 , Ġ 6 3 , Ġ 3 8 , Ġ 4 8 , Ġ 2 , Ġ 9 4 , Ġ- 1 1 7 , Ġ- 1 0 8 , Ġ- 1 0 3 , Ġ- 1 2 8 , Ġ 2 1 , Ġ- 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 7 4 , Ġ- 2 9 , Ġ- 9 5 , Ġ 1 1 2 , Ġ- 5 , Ġ- 1 0 2 , Ġ 8 9 , Ġ 1 2 , Ġ 3 , Ġ- 1 1 8 , Ġ 2 7 , Ġ 3 8 , Ġ- 7 1 , Ġ 1 1 0 , Ġ- 3 4 , Ġ 5 9 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġpk A Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 8 5 , Ġ 7 9 , Ġ 4 9 , Ġ- 1 0 6 , Ġ- 9 3 , Ġ- 4 8 , Ġ 8 9 , Ġ- 8 1 , Ġ 1 2 , Ġ- 3 1 , Ġ- 9 4 , Ġ 1 1 9 , Ġ 9 4 , Ġ- 7 , Ġ 6 , Ġ- 1 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 9 , Ġ- 3 0 , Ġ- 2 0 , Ġ 1 1 2 , Ġ- 8 2 , Ġ- 7 1 , Ġ 8 0 , Ġ- 7 7 , Ġ 8 1 , Ġ- 5 0 , Ġ 7 3 , Ġ 8 5 , Ġ- 6 5 , Ġ- 1 1 7 , Ġ 0 , Ġ 5 3 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsk B Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 4 , Ġ- 1 2 3 , Ġ 5 0 , Ġ- 4 6 , Ġ- 5 5 , Ġ 1 1 5 , Ġ 8 , Ġ- 6 , Ġ- 9 2 , Ġ 4 3 , Ġ- 4 1 , Ġ- 2 7 , Ġ- 9 0 , Ġ- 1 0 9 , Ġ- 4 9 , Ġ- 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , Ġ- 7 7 , Ġ 2 1 , Ġ- 2 4 , Ġ- 5 2 , Ġ 1 0 , Ġ 1 0 0 , Ġ 1 1 0 , Ġ 5 7 , Ġ- 5 3 , Ġ 6 , Ġ 6 6 , Ġ- 7 1 , Ġ- 4 2 , Ġ- 9 1 , Ġ- 8 3 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġpk B Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 1 , Ġ- 7 0 , Ġ- 4 3 , Ġ 2 1 , Ġ- 1 0 4 , Ġ- 1 4 , Ġ 2 7 , Ġ- 1 0 3 , Ġ- 6 3 , Ġ- 3 0 , Ġ 1 1 6 , Ġ 1 2 3 , Ġ 0 , Ġ- 5 6 , Ġ- 1 2 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 6 , Ġ- 3 4 , Ġ 1 1 1 , Ġ- 1 5 , Ġ 5 8 , Ġ 6 8 , Ġ 3 2 , Ġ- 3 0 , Ġ- 9 3 , Ġ 5 2 , Ġ 6 9 , Ġ 2 4 , Ġ 5 , Ġ 4 1 , Ġ 6 2 , Ġ- 1 1 7 , Ġ 4 9 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" hello Ġkn acl ". toByteArray ( Charsets . UTF _ 8 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 5 5 , Ġ- 1 6 , Ġ- 1 1 6 , Ġ 7 5 , Ġ 4 4 , Ġ- 1 2 2 , Ġ 1 3 , Ġ 5 9 , Ġ 1 2 0 , Ġ- 6 3 , Ġ 2 3 , Ġ- 3 4 , Ġ 2 8 , Ġ 9 7 , Ġ- 5 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 , Ġ- 1 1 6 , Ġ- 2 1 , Ġ- 1 1 7 , Ġ 8 , Ġ 8 , Ġ- 1 0 4 , Ġ 3 3 , Ġ- 5 6 , Ġ- 1 0 4 , Ġ 1 0 2 , Ġ 4 9 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmsg For A Ġ= Ġn acl . box . se al ( msg , Ġnonce , Ġpk A , Ġsk B ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected , Ġmsg For A ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmsg For B Ġ= Ġn acl . box . se al ( msg , Ġnonce , Ġpk B , Ġsk A ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected , Ġmsg For B ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` box Ġand Ġbox Open `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalice SecretKey Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ( it Ġand Ġ 0 xff ). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbob SecretKey Ġ= ĠByteArray ( 3 2 ) Ġ{ Ġ(( 3 2 Ġ- Ġit ) Ġand Ġ 0 xff ). to Byte () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( alice Pub , Ġ_) Ġ= Ġn acl . box . key Pair From SecretKey ( alice SecretKey ) ĊĠĠĠĠĠĠĠ Ġval Ġ( bob Pub , Ġ_) Ġ= Ġn acl . box . key Pair From SecretKey ( bob SecretKey ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠByteArray ( n acl . crypto _ box _ NON CE BYTES ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg To Bob Ġ= Ġbyte ArrayOf ( 1 0 4 , Ġ 1 0 1 , Ġ 1 0 8 , Ġ 1 0 8 , Ġ 1 1 1 , Ġ 3 2 , Ġ 9 8 , Ġ 1 1 1 , Ġ 9 8 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġab Box Ġ= Ġn acl . box . se al ( msg To Bob , Ġnonce , Ġbob Pub , Ġalice SecretKey ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbob Received Ġ= Ġn acl . box . open ( ab Box , Ġnonce , Ġalice Pub , Ġbob SecretKey ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( msg To Bob , Ġbob Received ) ĊĠĠĠ Ġ} Ċ }