@@ -7,7 +7,7 @@ import (
77 "encoding/base64"
88 "fmt"
99 "hash"
10− "math/big"
10+ "io"
1111 "net/http"
1212 "strconv"
1313 "strings"
@@ -83,17 +83,13 @@ func SignedValue(seed string, key string, value []byte, now time.Time) (string,
8383 return cookieVal, nil
8484}
8585
86−func GenerateRandomASCIIString(length int) (string, error) {
87− b := make([]byte, length)
88− charsetLen := new(big.Int).SetInt64(int64(len(asciiCharset)))
89− for i := range b {
90− character, err := rand.Int(rand.Reader, charsetLen)
91− if err != nil {
92− return "", err
93− }
94− b[i] = asciiCharset[character.Int64()]
86+// GenerateCodeVerifierString returns a base64 encoded string of n random bytes
87+func GenerateCodeVerifierString(n int) (string, error) {
88+ data := make([]byte, n)
89+ if _, err := io.ReadFull(rand.Reader, data); err != nil {
90+ return "", err
9591 }
96− return string(b), nil
92+ return base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(data), nil
9793}
9894
9995func GenerateCodeChallenge(method, codeVerifier string) (string, error) {