33 lines
760 B
Go
33 lines
760 B
Go
![]() |
package utils
|
||
|
|
||
|
import (
|
||
|
"crypto/sha256"
|
||
|
b64 "encoding/base64"
|
||
|
"math/rand"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
length = 32
|
||
|
)
|
||
|
|
||
|
// GenerateCodeChallenge creates PKCE-Code-Challenge
|
||
|
// and returns the verifier and challenge
|
||
|
func GenerateCodeChallenge() (string, string) {
|
||
|
// Generate Verifier
|
||
|
randGenerator := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||
|
randomBytes := make([]byte, length)
|
||
|
for i := 0; i < length; i++ {
|
||
|
randomBytes[i] = byte(randGenerator.Intn(255))
|
||
|
}
|
||
|
verifier := strings.Trim(b64.URLEncoding.EncodeToString(randomBytes), "=")
|
||
|
|
||
|
// Generate Challenge
|
||
|
rawChallenge := sha256.New()
|
||
|
rawChallenge.Write([]byte(verifier))
|
||
|
challenge := strings.Trim(b64.URLEncoding.EncodeToString(rawChallenge.Sum(nil)), "=")
|
||
|
|
||
|
return verifier, challenge
|
||
|
}
|