diff --git a/ekms/etsiqkdnclient/etsi-qkdn-client.go b/ekms/etsiqkdnclient/etsi-qkdn-client.go index 93805727647b1921cda1268eaac46b0bf8d8354e..97b73367566597f31229c5a52648327eeec52d6b 100644 --- a/ekms/etsiqkdnclient/etsi-qkdn-client.go +++ b/ekms/etsiqkdnclient/etsi-qkdn-client.go @@ -6,7 +6,7 @@ import ( log "github.com/sirupsen/logrus" - "code.fbi.h-da.de/danet/quant/ekms/internal/akmCkmsInterface" + "code.fbi.h-da.de/danet/quant/ekms/internal/akmsCkmsServer" "code.fbi.h-da.de/danet/quant/ekms/internal/kms" "github.com/google/uuid" ) @@ -127,7 +127,7 @@ func NewEkmsClient(bootInfo *Config) (myInfo *ekmsInfo) { func emulatedKMS(config *Config, id uuid.UUID, peerChannel chan string) *kms.EKMS { // Attach to eKMS emuKMS := kms.NewEKMS(config.Name, id, os.Stdout, log.TraceLevel, false, config.InterComAddr) - akmsCkmsReceiver := akmCkmsInterface.NewAKMSReceiver("4567", emuKMS) + akmsCkmsReceiverServer := akmsCkmsServer.NewAKMSReceiver("4567", emuKMS) var qm kms.QuantumModule var err error @@ -169,10 +169,11 @@ func emulatedKMS(config *Config, id uuid.UUID, peerChannel chan string) *kms.EKM } } - // Start the SDN/management, key retrieval interface and akms server + // Start the SDN/management and key retrieval interface go kms.StartETSI(config.GRPCAddr, emuKMS) - go akmsCkmsReceiver.Serve() + // Start the AKMSReceiverServer + go akmsCkmsReceiverServer.Serve() return emuKMS } diff --git a/ekms/internal/akmsCkmsClient/ckmsAkmsClient.go b/ekms/internal/akmsCkmsClient/ckmsAkmsClient.go new file mode 100644 index 0000000000000000000000000000000000000000..af44b22822b4c4a75ac62de5962b9d5897a502d4 --- /dev/null +++ b/ekms/internal/akmsCkmsClient/ckmsAkmsClient.go @@ -0,0 +1,60 @@ +package akmsCkmsClient + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" +) + +type CkmsAkmsClient struct { + url string +} + +func NewCkmsAkmsClient(url string) CkmsAkmsClient { + return CkmsAkmsClient{ + url: url, + } +} + +type PushKSAKeyRequest struct { + RequestID string `json:"request_ID"` + ProcessID string `json:"process_ID"` + KSAKeys []KSAKey `json:"ksa_keys"` +} + +type KSAKey struct { + KeyID string `json:"key_ID"` + Key string `json:"key"` +} + +func (c *CkmsAkmsClient) SendKSAKeys(requestID string, processID string, ksaKeys []KSAKey) error { + pushRequest := PushKSAKeyRequest{ + RequestID: requestID, + ProcessID: processID, + KSAKeys: ksaKeys, + } + + jsonData, err := json.Marshal(pushRequest) + if err != nil { + fmt.Println("Error marshaling JSON:", err) + return err + } + + resp, err := http.Post(c.url, "application/json", bytes.NewBuffer(jsonData)) + if err != nil { + fmt.Println("Error sending POST request:", err) + return err + } + err = resp.Body.Close() + if err != nil { + fmt.Println("Error closing response body:", err) + } + + if resp.StatusCode != http.StatusNoContent { + fmt.Println("Unexpected response status code:", resp.StatusCode) + return err + } + + return nil +} diff --git a/ekms/internal/akmCkmsInterface/akmsCkmsServer.go b/ekms/internal/akmsCkmsServer/akmsCkmsServer.go similarity index 81% rename from ekms/internal/akmCkmsInterface/akmsCkmsServer.go rename to ekms/internal/akmsCkmsServer/akmsCkmsServer.go index f43670857ce7135d4755611c374e44bfd735030e..e3cb9fd92033d9d7c6d4d4a22b319817340085f2 100644 --- a/ekms/internal/akmCkmsInterface/akmsCkmsServer.go +++ b/ekms/internal/akmsCkmsServer/akmsCkmsServer.go @@ -1,4 +1,4 @@ -package akmCkmsInterface +package akmsCkmsServer import ( "encoding/json" @@ -7,14 +7,14 @@ import ( "code.fbi.h-da.de/danet/quant/ekms/internal/kms" ) -// Define AKMSReceiver. -type AKMSReceiver struct { +// Define AKMSReceiverServer. +type AKMSReceiverServer struct { ekms *kms.EKMS server *http.Server } // create NewAKMSReceiver. -func NewAKMSReceiver(port string, ekms *kms.EKMS) *AKMSReceiver { +func NewAKMSReceiver(port string, ekms *kms.EKMS) *AKMSReceiverServer { router := http.NewServeMux() router.HandleFunc("/ksa_key_req", ksaReqHandler) @@ -24,7 +24,7 @@ func NewAKMSReceiver(port string, ekms *kms.EKMS) *AKMSReceiver { Handler: router, } - AKMSReceiver := &AKMSReceiver{ + AKMSReceiver := &AKMSReceiverServer{ ekms: ekms, server: server, } @@ -32,7 +32,7 @@ func NewAKMSReceiver(port string, ekms *kms.EKMS) *AKMSReceiver { return AKMSReceiver } -func (akmsReceiver *AKMSReceiver) Serve() { +func (akmsReceiver *AKMSReceiverServer) Serve() { go akmsReceiver.server.ListenAndServe() //nolint:errcheck } diff --git a/ekms/internal/kms/kms.go b/ekms/internal/kms/kms.go index 1385c5066f3d4377d688648e9ece4a633b58dd55..2e989d05c0a912310392721edcab3a67ae3e4939 100644 --- a/ekms/internal/kms/kms.go +++ b/ekms/internal/kms/kms.go @@ -15,6 +15,7 @@ import ( "google.golang.org/grpc/health" healthpb "google.golang.org/grpc/health/grpc_health_v1" + "code.fbi.h-da.de/danet/quant/ekms/internal/akmsCkmsClient" pbETSI "code.fbi.h-da.de/danet/quant/ekms/internal/api/gen/proto/go/kmsetsi" pbIC "code.fbi.h-da.de/danet/quant/ekms/internal/api/gen/proto/go/kmsintercom" "code.fbi.h-da.de/danet/quant/ekms/internal/kms/event" @@ -53,7 +54,7 @@ type EKMS struct { pbIC.UnimplementedKmsTalkerServer supportedKeyLengths map[BitKeyLength]bool eventBus *event.EventBus - //akmsSender *http.Server + ckmsAkmsClient akmsCkmsClient.CkmsAkmsClient } // Will keep information about the quantum elements that this EKMS is talking to @@ -85,6 +86,8 @@ func NewEKMS(kmsName string, kmsUUID uuid.UUID, logOutput io.Writer, logLevel lo log.SetReportCaller(false) } + ckmsAkmsClient := akmsCkmsClient.NewCkmsAkmsClient("127.0.0.1:1234") + createdEKMS := &EKMS{ kmsName: kmsName, kmsUUID: kmsUUID, @@ -94,13 +97,13 @@ func NewEKMS(kmsName string, kmsUUID uuid.UUID, logOutput io.Writer, logLevel lo KmsPeers: make(map[string]*kmsPeer), supportedKeyLengths: make(map[BitKeyLength]bool), eventBus: event.NewEventBus(), + ckmsAkmsClient: ckmsAkmsClient, } createdEKMS.supportedKeyLengths[BitKeyLen256] = true // start the inter communication gRPC server go createdEKMS.startGRPC(interComAddr) - //go createdEKMS.akmsSender.ListenAndServe() return createdEKMS }