diff options
author | Alex Auvolat <alex@adnab.me> | 2020-02-26 20:21:32 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2020-02-26 20:21:32 +0100 |
commit | f675ba57e400d378088d29c08bd5d0bd9126c74b (patch) | |
tree | c5d54b55b9f8a1bbb5e12cafb3da846124a2f821 /util.go | |
parent | d1b66d30883c9e5fda0c4cace494dec74d7df024 (diff) | |
download | easybridge-f675ba57e400d378088d29c08bd5d0bd9126c74b.tar.gz easybridge-f675ba57e400d378088d29c08bd5d0bd9126c74b.zip |
Implement account configuration save/load from db
Diffstat (limited to 'util.go')
-rw-r--r-- | util.go | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -1,10 +1,14 @@ package main import ( + "crypto/rand" + "encoding/base64" + "encoding/json" "fmt" "unicode" log "github.com/sirupsen/logrus" + "golang.org/x/crypto/nacl/secretbox" . "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector" ) @@ -56,3 +60,41 @@ func safeStringForId(in string) string { } return id2 } + +// ---- Encoding and encryption of account config + +func encryptAccountConfig(config map[string]string, key *[32]byte) string { + bytes, err := json.Marshal(config) + if err != nil { + log.Fatal(err) + } + + var nonce [24]byte + _, err = rand.Read(nonce[:]) + if err != nil { + log.Fatal(err) + } + + crypto := secretbox.Seal([]byte{}, bytes, &nonce, key) + all := append(nonce[:], crypto...) + return base64.StdEncoding.EncodeToString(all) +} + +func decryptAccountConfig(data string, key *[32]byte) (map[string]string, error) { + bytes, err := base64.StdEncoding.DecodeString(data) + if err != nil { + return nil, err + } + + var nonce [24]byte + copy(nonce[:], bytes[:24]) + + decoded, ok := secretbox.Open([]byte{}, bytes[24:], &nonce, key) + if !ok { + return nil, fmt.Errorf("Invalid key") + } + + var config map[string]string + err = json.Unmarshal(decoded, &config) + return config, err +} |