diff --git a/ekms/etsiqkdnclient/etsi-qkdn-client.go b/ekms/etsiqkdnclient/etsi-qkdn-client.go index 177efe2b21f72b00ad4602c0ba8a974b9e124634..93805727647b1921cda1268eaac46b0bf8d8354e 100644 --- a/ekms/etsiqkdnclient/etsi-qkdn-client.go +++ b/ekms/etsiqkdnclient/etsi-qkdn-client.go @@ -6,6 +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/kms" "github.com/google/uuid" ) @@ -126,6 +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) var qm kms.QuantumModule var err error @@ -167,8 +169,9 @@ func emulatedKMS(config *Config, id uuid.UUID, peerChannel chan string) *kms.EKM } } - // Start the SDN/management and key retrieval interface + // Start the SDN/management, key retrieval interface and akms server go kms.StartETSI(config.GRPCAddr, emuKMS) + go akmsCkmsReceiver.Serve() return emuKMS } diff --git a/ekms/internal/akmCkmsInterface/akmsCkmsServer.go b/ekms/internal/akmCkmsInterface/akmsCkmsServer.go new file mode 100644 index 0000000000000000000000000000000000000000..563aa1766da9c69419c19fdf9d9575c0174d0595 --- /dev/null +++ b/ekms/internal/akmCkmsInterface/akmsCkmsServer.go @@ -0,0 +1,86 @@ +package akmCkmsInterface + +import ( + "encoding/json" + "log" + "net/http" + + "code.fbi.h-da.de/danet/quant/ekms/internal/kms" +) + +// Define AKMSReceiver. +type AKMSReceiver struct { + ekms *kms.EKMS + server *http.Server +} + +// create NewAKMSReceiver. +func NewAKMSReceiver(port string, ekms *kms.EKMS) *AKMSReceiver { + router := http.NewServeMux() + + router.HandleFunc("/ksa_key_req", ksaReqHandler) + router.HandleFunc("/notify_incomming_request", notifyIncomingReqHandler) + + server := &http.Server{ + Addr: ":" + port, + Handler: router, + } + + AKMSReceiver := &AKMSReceiver{ + ekms: ekms, + server: server, + } + + return AKMSReceiver +} + +func (akmsReceiver *AKMSReceiver) Serve() { + go akmsReceiver.server.ListenAndServe() //nolint:errcheck +} + +type KeyProperties struct { + Number int `json:"number"` + KeyLength int `json:"key_length"` + Timeout int `json:"timeout"` + TTL int `json:"TTL"` +} + +type KMSKeyRequest struct { + LocalCKMSID string `json:"local_CKMS_ID"` + RequestID string `json:"request_ID"` + KeyProperties []KeyProperties `json:"key_properties"` +} + +func ksaReqHandler(w http.ResponseWriter, r *http.Request) { + // Parse the request body + var req KMSKeyRequest + err := json.NewDecoder(r.Body).Decode(&req) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + // Run go routine + //ekms.stuff() + + w.WriteHeader(http.StatusNoContent) +} + +type NotifyIncomingRequest struct { + RequestID string `json:"request_ID"` +} + +func notifyIncomingReqHandler(w http.ResponseWriter, r *http.Request) { + var req NotifyIncomingRequest + err := json.NewDecoder(r.Body).Decode(&req) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + // Access the parsed data + requestID := req.RequestID + log.Printf("Got request with ID: %s. Don't know why but ok.", requestID) + + w.WriteHeader(http.StatusNoContent) +} diff --git a/ekms/internal/kms/kms.go b/ekms/internal/kms/kms.go index 93cdb536663d9427d10517f55b2b3e535e8255e4..1385c5066f3d4377d688648e9ece4a633b58dd55 100644 --- a/ekms/internal/kms/kms.go +++ b/ekms/internal/kms/kms.go @@ -53,6 +53,7 @@ type EKMS struct { pbIC.UnimplementedKmsTalkerServer supportedKeyLengths map[BitKeyLength]bool eventBus *event.EventBus + //akmsSender *http.Server } // Will keep information about the quantum elements that this EKMS is talking to @@ -99,6 +100,7 @@ func NewEKMS(kmsName string, kmsUUID uuid.UUID, logOutput io.Writer, logLevel lo // start the inter communication gRPC server go createdEKMS.startGRPC(interComAddr) + //go createdEKMS.akmsSender.ListenAndServe() return createdEKMS }