Skip to content
Snippets Groups Projects
main.go 1.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • Malte Bauch's avatar
    Malte Bauch committed
    package main
    
    import (
    	"flag"
    	"log"
    	"net"
    	"os"
    	"os/signal"
    	"syscall"
    
    
    	"code.fbi.h-da.de/danet/quant/quantumlayer"
    
    Malte Bauch's avatar
    Malte Bauch committed
    	pb "code.fbi.h-da.de/danet/quipsec/gen/go/quipsec"
    	"github.com/sirupsen/logrus"
    	"google.golang.org/grpc"
    	"google.golang.org/grpc/credentials/insecure"
    	"gopkg.in/yaml.v3"
    )
    
    type Config struct {
    	KMSAddr      string `yaml:"KMSAddr"`
    	UDPAddr      string `yaml:"UDPAddr"`
    	PeerUDPAddr  string `yaml:"PeerUDPAddr"`
    	GenerateKeys bool   `yaml:"GenerateKeys"`
    }
    
    func main() {
    	// TODO: flag validation
    	configPath := flag.String("config", "", "path to the config file")
    	flag.Parse()
    
    	// unmarshal config
    	config := &Config{}
    	file, err := os.ReadFile(*configPath)
    	if err != nil {
    		logrus.Fatal(err)
    	}
    	if err := yaml.Unmarshal(file, config); err != nil {
    		logrus.Fatal(err)
    	}
    
    	newPeerConn, err := grpc.Dial(config.KMSAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	kmsClient := pb.NewKmsQkdmCommunicationServiceClient(newPeerConn)
    
    	peerUDPAddr, err := net.ResolveUDPAddr("udp", config.PeerUDPAddr)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    
    Malte Bauch's avatar
    Malte Bauch committed
    	stopChan := make(chan os.Signal, 1)
    
    Malte Bauch's avatar
    Malte Bauch committed
    	signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM)
    
    	ql := quantumlayer.NewQuantumlayerEmuPRNG(kmsClient, os.Stdout, logrus.GetLevel(), false)
    	ql.Configure(config.GenerateKeys, config.UDPAddr)
    	ql.PowerOn()
    	ql.AddPeer(peerUDPAddr)
    
    	<-stopChan
    }