diff options
Diffstat (limited to 'lib/paseto/v2/local_mode.go')
| -rw-r--r-- | lib/paseto/v2/local_mode.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/paseto/v2/local_mode.go b/lib/paseto/v2/local_mode.go new file mode 100644 index 00000000..0cc29aef --- /dev/null +++ b/lib/paseto/v2/local_mode.go @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: BSD-3-Clause +// SPDX-FileCopyrightText: 2020 Shulhan <ms@kilabit.info> + +package pasetov2 + +import ( + "crypto/cipher" + + "golang.org/x/crypto/chacha20poly1305" +) + +// LocalMode implement the PASETO encrypt and decrypt using shared key. +type LocalMode struct { + aead cipher.AEAD +} + +// NewLocalMode create and initialize new LocalMode using shared key. +func NewLocalMode(key []byte) (local *LocalMode, err error) { + local = &LocalMode{} + + local.aead, err = chacha20poly1305.NewX(key) + if err != nil { + return nil, err + } + + return local, nil +} + +// Pack encrypt the data and generate token with optional footer. +func (l *LocalMode) Pack(data, footer []byte) (token string, err error) { + return Encrypt(l.aead, data, footer) +} + +// Unpack decrypt the token and return the plain data and optional footer. +func (l *LocalMode) Unpack(token string) (data, footer []byte, err error) { + return Decrypt(l.aead, token) +} |
