func Verify16(a, b *[16]byte) bool {
	if a == nil || b == nil {
		panic("nacl: nil input")
	}
	return subtle.ConstantTimeCompare(a[:], b[:]) == 1
}
Verify16 returns true if and only if a and b have equal contents, without
leaking timing information.
package nacl
import (
	"crypto/sha512"
	"crypto/subtle"
	"encoding/hex"
	"fmt"
	"github.com/kevinburke/nacl/randombytes"
	"golang.org/x/crypto/salsa20/salsa"
)
const Version = "0.7"
const KeySize = 32
const NonceSize = 24
type Key *[KeySize]byte
type Nonce *[NonceSize]byte
func Load(hexkey string) (Key, error) {
	if len(hexkey) != 64 {
		return nil, fmt.Errorf("nacl: incorrect hex key length: %d, should be 64", len(hexkey))
	}
	keyBytes, err := hex.DecodeString(hexkey)
	if err != nil {
		return nil, err
	}
	if len(keyBytes) != KeySize {
		return nil, fmt.Errorf("nacl: incorrect key length: %d", len(keyBytes))
	}
	key := new([KeySize]byte)
	copy(key[:], keyBytes)
	return key, nil
}
func Load64(hexkey string) (*[64]byte, error) {
	if len(hexkey) != 128 {
		return nil, fmt.Errorf("nacl: incorrect hex key length: %d, should be 64", len(hexkey))
	}
	keyBytes, err := hex.DecodeString(hexkey)
	if err != nil {
		return nil, err
	}
	if len(keyBytes) != 64 {
		return nil, fmt.Errorf("nacl: incorrect key length: %d", len(keyBytes))
	}
	key := new([64]byte)
	copy(key[:], keyBytes)
	return key, nil
}
func NewKey() Key {
	key := new([KeySize]byte)
	randombytes.MustRead(key[:])
	return key
}
func NewNonce() Nonce {
	nonce := new([NonceSize]byte)
	randombytes.MustRead(nonce[:])
	return nonce
}
func Verify(a, b []byte) bool {
	return subtle.ConstantTimeCompare(a, b) == 1
}