Skip to content
Snippets Groups Projects
Commit 9fd5a5fc authored by Martin Stiemerling's avatar Martin Stiemerling :speech_balloon:
Browse files

Works, but doesn't work. Still need link ETSI to kms

parent 78a72d2b
No related branches found
No related tags found
1 merge request!9First working draft version
...@@ -33,6 +33,7 @@ type eKMS struct { ...@@ -33,6 +33,7 @@ type eKMS struct {
kmsUUID uuid.UUID kmsUUID uuid.UUID
qleMapMutex sync.Mutex qleMapMutex sync.Mutex
QuantumElements map[qlElementId]*QuantumElement QuantumElements map[qlElementId]*QuantumElement
kmsPeersMutex sync.Mutex
KmsPeers map[string]*kmsPeer KmsPeers map[string]*kmsPeer
pbETSI.UnimplementedKmsETSIServer pbETSI.UnimplementedKmsETSIServer
pbIC.UnimplementedKmsTalkerServer pbIC.UnimplementedKmsTalkerServer
...@@ -54,6 +55,7 @@ func NeweKMS(kmsName string, kmsUUID uuid.UUID) (newekms *eKMS) { ...@@ -54,6 +55,7 @@ func NeweKMS(kmsName string, kmsUUID uuid.UUID) (newekms *eKMS) {
kmsName: kmsName, kmsName: kmsName,
kmsUUID: kmsUUID, kmsUUID: kmsUUID,
QuantumElements: make(map[qlElementId]*QuantumElement), QuantumElements: make(map[qlElementId]*QuantumElement),
KmsPeers: make(map[string]*kmsPeer),
} }
} }
...@@ -141,3 +143,24 @@ func (kms *eKMS) GenerateNewQleID() (qlElementId, error) { ...@@ -141,3 +143,24 @@ func (kms *eKMS) GenerateNewQleID() (qlElementId, error) {
//keep going.... //keep going....
} }
} }
// TODO/XXX error handling
func (kms *eKMS) AddPeer(kmsPeerSocket string) {
//check if peer exists
if _, there := kms.KmsPeers[kmsPeerSocket]; there {
log.Fatalf("Trying to add existing peer %s", kmsPeerSocket)
}
peer := NewKmsPeer()
peer.tcpSocketStr = kmsPeerSocket
kms.kmsPeersMutex.Lock()
kms.KmsPeers[kmsPeerSocket] = &peer
kms.kmsPeersMutex.Unlock()
go peer.PeerHandler(kms.kmsName)
}
// TODO/XXX error handling
func (kms *eKMS) RemovePeer(kmsPeerSocket string) {
}
...@@ -3,7 +3,6 @@ package kms ...@@ -3,7 +3,6 @@ package kms
import ( import (
"context" "context"
"flag" "flag"
"fmt"
"log" "log"
"net" "net"
...@@ -15,7 +14,11 @@ var ( ...@@ -15,7 +14,11 @@ var (
etsiPort = flag.Int("port", 50900, "The server port") etsiPort = flag.Int("port", 50900, "The server port")
) )
func (s *eKMS) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilitiesRequest) (capReply *pb.ETSICapabilitiesReply, err error) { type etsiServer struct {
pb.UnimplementedKmsETSIServer
}
func (kms *etsiServer) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilitiesRequest) (capReply *pb.ETSICapabilitiesReply, err error) {
log.Printf("Received: %v", in.GetMyKmsName()) log.Printf("Received: %v", in.GetMyKmsName())
return &pb.ETSICapabilitiesReply{ return &pb.ETSICapabilitiesReply{
...@@ -23,24 +26,26 @@ func (s *eKMS) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilitiesRequ ...@@ -23,24 +26,26 @@ func (s *eKMS) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilitiesRequ
}, nil }, nil
} }
func (s *eKMS) ETSIAddKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) { func (kms *etsiServer) ETSIAddKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) {
//determine the kms structure to call
log.Printf("AddKMSPeer called.")
s.AddPeer(in.GetKmsPeerSocket()) //etsiServer.AddPeer(in.GetKmsPeerSocket())
return &pb.ETSIKMSPeerReply{ return &pb.ETSIKMSPeerReply{
KmsPeerName: s.kmsName, //KmsPeerName: kms.kmsName,
}, nil }, nil
} }
func (s *eKMS) ETSIRemoveKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) { func (kms *etsiServer) ETSIRemoveKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) {
s.RemovePeer(in.GetKmsPeerSocket()) //kms.RemovePeer(in.GetKmsPeerSocket())
return &pb.ETSIKMSPeerReply{ return &pb.ETSIKMSPeerReply{
KmsPeerName: s.kmsName, //KmsPeerName: kms.kmsName,
}, nil }, nil
} }
func (s *eKMS) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetEncryptKeys256BitRequest) (*pb.ETSIGetEncryptKeys256BitReply, error) { func (kms *etsiServer) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetEncryptKeys256BitRequest) (*pb.ETSIGetEncryptKeys256BitReply, error) {
log.Printf("Received request for n=%d keys", in.GetAmount()) log.Printf("Received request for n=%d keys", in.GetAmount())
testBytes := []byte{120, 120, 120} testBytes := []byte{120, 120, 120}
...@@ -52,15 +57,16 @@ func (s *eKMS) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetEncryptKe ...@@ -52,15 +57,16 @@ func (s *eKMS) GetEncryptKeys256Bit(ctx context.Context, in *pb.ETSIGetEncryptKe
}, nil }, nil
} }
func StartETSI() { func StartETSI(listenAddr string) {
flag.Parse() flag.Parse()
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *etsiPort)) //lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *etsiPort))
lis, err := net.Listen("tcp", listenAddr)
if err != nil { if err != nil {
log.Fatalf("failed to listen: %v", err) log.Fatalf("failed to listen: %v", err)
} }
s := grpc.NewServer() s := grpc.NewServer()
pb.RegisterKmsETSIServer(s, &eKMS{}) pb.RegisterKmsETSIServer(s, &etsiServer{})
log.Printf("server listening at %v", lis.Addr()) log.Printf("server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil { if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err) log.Fatalf("failed to serve: %v", err)
......
...@@ -11,7 +11,11 @@ import ( ...@@ -11,7 +11,11 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
) )
func (s *eKMS) InterComCapabilities(ctx context.Context, in *pb.InterComCapabilitiesRequest) (capReply *pb.InterComCapabilitiesReply, err error) { type kmsTalkerServer struct {
pb.UnimplementedKmsTalkerServer
}
func (s *kmsTalkerServer) InterComCapabilities(ctx context.Context, in *pb.InterComCapabilitiesRequest) (capReply *pb.InterComCapabilitiesReply, err error) {
log.Printf("Received: %v", in.GetMyKmsName()) log.Printf("Received: %v", in.GetMyKmsName())
return &pb.InterComCapabilitiesReply{ return &pb.InterComCapabilitiesReply{
...@@ -27,7 +31,7 @@ func StartInterComm(interComPort int) { ...@@ -27,7 +31,7 @@ func StartInterComm(interComPort int) {
log.Fatalf("failed to listen: %v", err) log.Fatalf("failed to listen: %v", err)
} }
s := grpc.NewServer() s := grpc.NewServer()
pb.RegisterKmsTalkerServer(s, &eKMS{}) pb.RegisterKmsTalkerServer(s, &kmsTalkerServer{})
log.Printf("server listening at %v", lis.Addr()) log.Printf("server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil { if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err) log.Fatalf("failed to serve: %v", err)
......
...@@ -12,33 +12,43 @@ import ( ...@@ -12,33 +12,43 @@ import (
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
) )
type kmsPeerStatus int16
const (
kmsPeerUp kmsPeerStatus = iota // peer was seen up lately
kmsPeerDown // peer not reachable anymore
kmsPeerPending // peer was added and has to be succesfully contacted once
kmsPeerUnknown // not known, not initialized
)
type kmsPeerInfo interface { type kmsPeerInfo interface {
} }
type kmsPeer struct { type kmsPeer struct {
peerStatus kmsPeerStatus
tcpSocket net.TCPAddr // the IP address and TCP port (aka socket) of the kms peer tcpSocket net.TCPAddr // the IP address and TCP port (aka socket) of the kms peer
tcpSocketStr string // string rep. of tcpSocket tcpSocketStr string // string rep. of tcpSocket
name string // the name of the kms peer name string // the name of the kms peer
id uuid.UUID // uuid of the peer id uuid.UUID // uuid of the peer
} }
func NewKmsPeer() (peer *kmsPeer) { func NewKmsPeer() (peer kmsPeer) {
return &kmsPeer{} return kmsPeer{
peerStatus: kmsPeerUnknown,
}
} }
// TODO/XXX error handling // Handles everything with respect to a specific KMS peer
func (kms *eKMS) AddPeer(kmsPeerSocket string) { func (ph *kmsPeer) PeerHandler(kmsName string) {
//check if peer exists
if _, there := kms.KmsPeers[kmsPeerSocket]; there { log.Printf("%s started PeerHandler for %s:", kmsName, ph.tcpSocketStr)
log.Fatalf("Trying to add existing peer %s", kmsPeerSocket)
}
peer := NewKmsPeer()
peer.tcpSocketStr = kmsPeerSocket
// contact peer // contact peer
newPeerConn, err := grpc.Dial(kmsPeerSocket, grpc.WithTransportCredentials(insecure.NewCredentials())) newPeerConn, err := grpc.Dial(ph.tcpSocketStr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { if err != nil {
log.Fatalf("did not connect: %v", err) log.Printf("did not connect: %v", err)
ph.peerStatus = kmsPeerDown
return
} }
defer newPeerConn.Close() defer newPeerConn.Close()
...@@ -47,15 +57,12 @@ func (kms *eKMS) AddPeer(kmsPeerSocket string) { ...@@ -47,15 +57,12 @@ func (kms *eKMS) AddPeer(kmsPeerSocket string) {
// Contact the server and print out its response. // Contact the server and print out its response.
ctx, cancel := context.WithTimeout(context.Background(), time.Second) ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel() defer cancel()
r, err := c.ETSICapabilities(ctx, &pb.ETSICapabilitiesRequest{MyKmsName: kms.kmsName}) r, err := c.ETSICapabilities(ctx, &pb.ETSICapabilitiesRequest{MyKmsName: kmsName})
if err != nil { if err != nil {
log.Fatalf("could not greet: %v", err) log.Printf("could not greet: %v", err)
ph.peerStatus = kmsPeerDown
return
} }
log.Printf("Greeting: %s", r.GetPeerKmsName()) log.Printf("Greeting: %s", r.GetPeerKmsName())
} }
// TODO/XXX error handling
func (kms *eKMS) RemovePeer(kmsPeerSocket string) {
}
...@@ -46,9 +46,6 @@ func main() { ...@@ -46,9 +46,6 @@ func main() {
log.Println("Welcome to the proto-kms called: ", ql1Name) log.Println("Welcome to the proto-kms called: ", ql1Name)
// Start the SDN/management and key retrieval interface
go kms.StartETSI()
if selfTesting == true { if selfTesting == true {
log.Printf("%s in self-testing mode", ql1Name) log.Printf("%s in self-testing mode", ql1Name)
go emulatedKMS(ql2Name, udpQL2AddrString, udpQL1AddrString) go emulatedKMS(ql2Name, udpQL2AddrString, udpQL1AddrString)
...@@ -76,6 +73,9 @@ func emulatedKMS(myName string, myUDPAddr string, peerUDPAddr string) { ...@@ -76,6 +73,9 @@ func emulatedKMS(myName string, myUDPAddr string, peerUDPAddr string) {
myQL.QuantumElementLink.AddPeer(*udpQL2Addr) myQL.QuantumElementLink.AddPeer(*udpQL2Addr)
// Start the SDN/management and key retrieval interface
go kms.StartETSI(peerUDPAddr)
// TODO/XXX catch errors! // TODO/XXX catch errors!
emuKMS.GlobalKeyHandler(7 * time.Second) emuKMS.GlobalKeyHandler(7 * time.Second)
} }
File deleted
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment