wireguardEdgeSetup.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "3nets.io/wireguardcommon"
  4. "crypto/sha256"
  5. "encoding/base64"
  6. "flag"
  7. "fmt"
  8. "golang.org/x/crypto/curve25519"
  9. "log"
  10. )
  11. func main() {
  12. seedPtr := flag.String("seed", "", "A seed to use for ECDH generation, encoded as a BASE64 String")
  13. managerDHPublicPtr := flag.String("managerDHPublic", "", "The public component of 3nets manager dh to be used for wg shared key")
  14. peeripPtr := flag.String("peerip", "", "The ip address of 3nets manager to use for wg endpoint")
  15. peerportPtr := flag.String("peerport", "", "The udp port of 3nets manager to use for wg endpoint")
  16. flag.Parse()
  17. fmt.Println("seed=", *seedPtr)
  18. fmt.Println("managerDHPublic=", *managerDHPublicPtr)
  19. fmt.Println("peerip=", *peeripPtr)
  20. fmt.Println("peerport=", *peerportPtr)
  21. var publicKey []byte
  22. var seedBytes [32]byte
  23. var err error
  24. if *seedPtr != "" {
  25. seedBytes = sha256.Sum256([]byte(*seedPtr))
  26. } else {
  27. seedBytes = sha256.Sum256([]byte("3netsedge.io"))
  28. }
  29. //create a curve25519 privatekey
  30. seedBytes[0] &= 248
  31. seedBytes[31] &= 127
  32. seedBytes[31] |= 64
  33. privateKey := base64.StdEncoding.EncodeToString(seedBytes[:])
  34. fmt.Printf("privateKey = %s\n", privateKey)
  35. // build publickey from privatekey
  36. publicKey, err = curve25519.X25519(seedBytes[:], curve25519.Basepoint)
  37. if err != nil {
  38. log.Fatalf("curve25519.X25519() failed: %v", err)
  39. }
  40. publicKeyStr := base64.StdEncoding.EncodeToString(publicKey)
  41. fmt.Printf("publicKey = %s\n", publicKeyStr)
  42. if *managerDHPublicPtr != "" {
  43. presharedkey, edgePublic, err := wireguardcommon.GenPskOnEdge(*managerDHPublicPtr)
  44. if err != nil {
  45. fmt.Printf("Failed to generate edge presharedkey: %s\n", err)
  46. } else {
  47. fmt.Printf("presharedkey = %s\n", presharedkey)
  48. fmt.Printf("edgePublic = %s\n", edgePublic)
  49. }
  50. }
  51. }