func GenerateKey() (PrivateKey, PublicKey, bool) {
	key, x, y, err := elliptic.GenerateKey(curve, PRNG)
	if err != nil {
		return nil, nil, false
	}
	peer := elliptic.Marshal(curve, x, y)
	if peer == nil {
	}
	if len(key) != privateKeySize || len(peer) != publicKeySize {
		return nil, nil, false
	}
	return key, peer, true
}
GenerateKey generates an appropriate private and public keypair for
use in box.
package stoutbox
import (
	"bytes"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"crypto/sha512"
	"github.com/kisom/aescrypt/strongbox"
	"math/big"
)
type PublicKey []byte
type PrivateKey []byte
const VersionString = "2.0.0"
const (
	publicKeySize  = 133
	privateKeySize = 66
	sigSize        = 140
)
const (
	BoxUnsigned     byte = 1
	BoxSigned       byte = 2
	BoxShared       byte = 11
	BoxSharedSigned byte = 12
	peerList             = 21
)
const (
	SharedKeySize  = 80
	ecdhSharedSize = 80
)
var Overhead = publicKeySize + strongbox.Overhead + 9  
var SignedOverhead = publicKeySize + strongbox.Overhead + sigSize
var PRNG = rand.Reader
var curve = elliptic.P521()
func ecdh(key PrivateKey, peer PublicKey) ([]byte, bool) {
	x, y := elliptic.Unmarshal(curve, peer)
	if x == nil {
		return nil, false
	} else if !curve.IsOnCurve(x, y) {
		return nil, false
	}
	x, _ = curve.ScalarMult(x, y, key)
	if x == nil {
		return nil, false
	}
	xb := sha512.Sum512(x.Bytes())
	skey := xb[:32]
	mkey := xb[32:]
	h := sha512.New384()
	h.Write(mkey)
	mkey = h.Sum(nil)
	return append(skey, mkey...), true
}
func SharedKey(key PrivateKey, peer PublicKey) (strongbox.Key, bool) {
	return ecdh(key, peer)
}