package authapi import ( "crypto/rand" "crypto/sha256" "encoding/base64" ) func newPKCEPair() (verifier, challenge string, err error) { b := make([]byte, 32) if _, err := rand.Read(b); err != nil { return "", "", err } verifier = base64.RawURLEncoding.EncodeToString(b) sum := sha256.Sum256([]byte(verifier)) challenge = base64.RawURLEncoding.EncodeToString(sum[:]) return verifier, challenge, nil } func pkceChallengeFromVerifier(verifier string) string { sum := sha256.Sum256([]byte(verifier)) return base64.RawURLEncoding.EncodeToString(sum[:]) } func randomOAuthState() (string, error) { b := make([]byte, 16) if _, err := rand.Read(b); err != nil { return "", err } return base64.RawURLEncoding.EncodeToString(b), nil }