mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
* feature: add peer sync and a server public key endpoints * test: add Management.Sync() gRpc endpoint test * feat: implement peer sync * docs: added some comments to the Management server * chore: use for loop over channel when monitoring peer updates * fix: exit infinite loop when sending updates to peers * test: add multiple concurrent peers test for management service * chore: remove unused test * fix: reduce the amount peers for a concurrent peer update test Co-authored-by: braginini <m.bragin@wiretrustee.com>
45 lines
1.5 KiB
Go
45 lines
1.5 KiB
Go
package management
|
|
|
|
import (
|
|
pb "github.com/golang/protobuf/proto" //nolint
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/wiretrustee/wiretrustee/management/proto"
|
|
"github.com/wiretrustee/wiretrustee/signal"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
)
|
|
|
|
// EncryptMessage encrypts a body of the given pn.Message and wraps into proto.EncryptedMessage
|
|
func EncryptMessage(peerKey wgtypes.Key, serverPrivateKey wgtypes.Key, message pb.Message) (*proto.EncryptedMessage, error) {
|
|
byteResp, err := pb.Marshal(message)
|
|
if err != nil {
|
|
log.Errorf("failed marshalling message %v", err)
|
|
return nil, err
|
|
}
|
|
|
|
encryptedBytes, err := signal.Encrypt(byteResp, peerKey, serverPrivateKey)
|
|
if err != nil {
|
|
log.Errorf("failed encrypting SyncResponse %v", err)
|
|
return nil, err
|
|
}
|
|
|
|
return &proto.EncryptedMessage{
|
|
WgPubKey: serverPrivateKey.PublicKey().String(),
|
|
Body: encryptedBytes}, nil
|
|
}
|
|
|
|
//DecryptMessage decrypts an encrypted message (proto.EncryptedMessage)
|
|
func DecryptMessage(peerKey wgtypes.Key, serverPrivateKey wgtypes.Key, encryptedMessage *proto.EncryptedMessage, message pb.Message) error {
|
|
decrypted, err := signal.Decrypt(encryptedMessage.Body, peerKey, serverPrivateKey)
|
|
if err != nil {
|
|
log.Warnf("error while decrypting Sync request message from peer %s", peerKey.String())
|
|
return err
|
|
}
|
|
|
|
err = pb.Unmarshal(decrypted, message)
|
|
if err != nil {
|
|
log.Warnf("error while umarshalling Sync request message from peer %s", peerKey.String())
|
|
return err
|
|
}
|
|
return nil
|
|
}
|