Newer
Older
wg-portal / internal / wireguard / keys.go
@Christoph Haas Christoph Haas on 11 Oct 2021 1 KB wip: ip handling, refactoring, tests
package wireguard

import (
	"encoding/base64"

	"github.com/h44z/wg-portal/internal/persistence"
	"github.com/pkg/errors"
	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
)

func GetPrivateKeyBytes(p persistence.KeyPair) []byte {
	data, _ := base64.StdEncoding.DecodeString(p.PrivateKey)
	return data
}

func GetPublicKeyBytes(p persistence.KeyPair) []byte {
	data, _ := base64.StdEncoding.DecodeString(p.PublicKey)
	return data
}

func KeyBytesToString(key []byte) string {
	return base64.StdEncoding.EncodeToString(key)
}

type wgCtrlKeyGenerator struct{}

func (k wgCtrlKeyGenerator) GetFreshKeypair() (persistence.KeyPair, error) {
	privateKey, err := wgtypes.GeneratePrivateKey()
	if err != nil {
		return persistence.KeyPair{}, errors.Wrap(err, "failed to generate private Key")
	}

	return persistence.KeyPair{
		PrivateKey: privateKey.String(),
		PublicKey:  privateKey.PublicKey().String(),
	}, nil
}

func (k wgCtrlKeyGenerator) GetPreSharedKey() (persistence.PreSharedKey, error) {
	preSharedKey, err := wgtypes.GenerateKey()
	if err != nil {
		return "", errors.Wrap(err, "failed to generate pre-shared Key")
	}

	return persistence.PreSharedKey(preSharedKey.String()), nil
}