1diff --git a/pkg/ext/auth.go b/pkg/ext/auth.go
2index d9fbfba5d27d98ab72acbb5dec58d6906248723e..ed122bb6b2631d882efac0f6191fe3c29e0dd050 100644
3--- a/pkg/ext/auth.go
4+++ b/pkg/ext/auth.go
5@@ -6,7 +6,7 @@ "crypto/aes"
6 "crypto/cipher"
7 "crypto/rand"
8 "encoding/gob"
9- "fmt"
10+ "errors"
11 "io"
12 )
13
14@@ -15,16 +15,6 @@ UserID uint
15 Username string
16 }
17
18-var nonce []byte
19-
20-func init() {
21- nonce = make([]byte, 12)
22- if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
23- fmt.Println("Erro while generating nonce " + err.Error())
24- panic(1)
25- }
26-}
27-
28 func ReadToken(data []byte, key []byte) (*Token, error) {
29 block, err := aes.NewCipher(key)
30 if err != nil {
31@@ -36,7 +26,13 @@ if err != nil {
32 panic(err.Error())
33 }
34
35- plaintext, err := aesgcm.Open(nil, nonce, data, nil)
36+ nonceSize := aesgcm.NonceSize()
37+ if len(data) < nonceSize {
38+ return nil, errors.New("nonce size greater than data's size")
39+ }
40+
41+ nonce, ciphertext := data[:nonceSize], data[nonceSize:]
42+ plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil)
43 if err != nil {
44 return nil, err
45 }
46@@ -66,7 +62,11 @@ enc := gob.NewEncoder(&buffer)
47 if err := enc.Encode(token); err != nil {
48 return nil, err
49 }
50+ nonce := make([]byte, aesgcm.NonceSize())
51+ if _, err = io.ReadFull(rand.Reader, nonce); err != nil {
52+ return nil, err
53+ }
54
55- ciphertext := aesgcm.Seal(nil, nonce, buffer.Bytes(), nil)
56+ ciphertext := aesgcm.Seal(nonce, nonce, buffer.Bytes(), nil)
57 return ciphertext, nil
58 }