package main import ( "crypto/rand" "crypto/sha256" "encoding/base64" ) type Token struct { secret []byte } func NewToken() (Token, error) { token := Token{} token.secret = make([]byte, 32) _, err := rand.Read(token.secret) if err != nil { return token, err } return token, nil } func (t Token) Public() string { hash := sha256.Sum256(t.secret) return base64.StdEncoding.EncodeToString(hash[:]) } func (t Token) Private() string { return base64.StdEncoding.EncodeToString(t.secret[:]) }