func Encrypt(aead cipher.AEAD, plain, footer []byte) (token string, err error) {
	nonce := make([]byte, randNonceSize)
	_, err = rand.Read(nonce)
	if err != nil {
		return "", err
	}
	return encrypt(aead, nonce, plain, footer)
}
Encrypt given the shared key, encrypt the plain message and generate the
"local" token with optional footer.
package paseto
import (
	"bytes"
	"crypto/cipher"
	"crypto/ed25519"
	"crypto/rand"
	"encoding/base64"
	"encoding/binary"
	"errors"
	"fmt"
	"strings"
	"golang.org/x/crypto/blake2b"
)
const (
	randNonceSize = 24
)
var (
	headerModePublic = []byte("v2.public.")
	headerModeLocal  = []byte("v2.local.")
)