#
# Commands covered: nacl::box
#

#
# (c) 2016 Alexander Schoepe
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#

if {[lsearch [namespace children] ::tcltest] == -1} {
  package require tcltest 2
  namespace import -force ::tcltest::*
}

package require nacl

if {[lsearch -exact [nacl::randombytes names] urandom] > -1} {
  nacl::randombytes source urandom
}

set sec1 [binary decode hex 77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a]
set pub1 [binary decode hex 8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a]
set sec2 [binary decode hex 5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb]
set pub2 [binary decode hex de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f]
set n1 [binary decode hex 69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37]
set m1 [binary decode hex be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffce5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb310e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f937763848645e0705]
set c1 [binary decode hex f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74e355a5]

test box-1.1 {box takes args} -body {
  nacl::box
} -returnCodes error -result "wrong # args: should be \"nacl::box ?command? ...\""

test box-1.2 {box info} {
  list [catch {nacl::box info} l] $l
} {0 {cipher+ 16 nonce 24 public-key 32 secret-key 32}}

test box-1.3 {box keypair} {
  list [nacl::box keypair pub sec] [string length $pub] [string length $sec]
} {0 32 32}

test box-1.4 {box pub2 sec1} {
  list [nacl::box encrypted $m1 $n1 $pub2 $sec1] $encrypted
} [list 0 $c1]

test box-1.5 {box open pub1 sec2} {
  list [nacl::box open decrypted $c1 $n1 $pub1 $sec2] $decrypted
} [list 0 $m1]

# cleanup
::tcltest::cleanupTests
return
