· 7 years ago · Dec 20, 2018, 01:38 AM
1Helpers that are meant to be copied, pasted and modified... not imported.
2
3## Cryptography
4The secretbox library is intended to minimize the number of ways to screw things up, but using it still requires some setup.
5
6```go
7func Seal(data, key []byte) []byte {
8 if len(key) != 32 {
9 panic("invalid key length")
10 }
11
12 var secretKey [32]byte
13 var nonce [24]byte
14
15 copy(secretKey[:], key)
16 copy(nonce[:], RandBytes(24))
17
18 return secretbox.Seal(nonce[:], []byte(data), &nonce, &secretKey)
19}
20
21func Unseal(data, key []byte) ([]byte, error) {
22 if len(key) != 32 {
23 panic("invalid key length")
24 }
25
26 var secretKey [32]byte
27 var nonce [24]byte
28
29 copy(secretKey[:], key)
30
31 copy(nonce[:], data[:24])
32 decrypted, ok := secretbox.Open(nil, data[24:], &nonce, &secretKey)
33 if !ok {
34 return nil, errors.New("decryption failure")
35 }
36
37 return decrypted, nil
38}
39```