wireguard.go 576 B

123456789101112131415161718192021222324
  1. package util
  2. import (
  3. "crypto/rand"
  4. "encoding/base64"
  5. "golang.org/x/crypto/curve25519"
  6. )
  7. // GenerateWireguardKeypair generates a base64 encoded private and public key pair for Wireguard.
  8. func GenerateWireguardKeypair() (privateKey string, publicKey string, err error) {
  9. var priv [32]byte
  10. if _, err := rand.Read(priv[:]); err != nil {
  11. return "", "", err
  12. }
  13. priv[0] &= 248
  14. priv[31] &= 127
  15. priv[31] |= 64
  16. var pub [32]byte
  17. curve25519.ScalarBaseMult(&pub, &priv)
  18. return base64.StdEncoding.EncodeToString(priv[:]), base64.StdEncoding.EncodeToString(pub[:]), nil
  19. }