aboutsummaryrefslogtreecommitdiff
path: root/lib/paseto/v2/local_mode.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/paseto/v2/local_mode.go')
-rw-r--r--lib/paseto/v2/local_mode.go37
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)
+}