package routecrypto import ( "crypto/rand" "encoding/base64" "errors" ) // GenerateKey creates a new key full of random data. func GenerateKey() (*[32]byte, error) { var k [32]byte _, err := rand.Read(k[:]) if err != nil { return nil, err } return &k, nil } // ShowKey makes a string out of an encryption key. func ShowKey(key *[32]byte) string { return base64.URLEncoding.EncodeToString(key[:]) } // ParseKey decodes a key from a string. func ParseKey(s string) (*[32]byte, error) { k := &[32]byte{} raw, err := base64.URLEncoding.DecodeString(s) if err != nil { return nil, err } if n := copy(k[:], raw); n < len(k) { return nil, errors.New("not valid") } return k, nil }