diff --git a/goKMS/config/config.go b/goKMS/config/config.go index c8baeca69f0be281a714549db0b230dc8baa8844..44551cfdcebba2ddc5ddbc9cd010524915a4d155 100644 --- a/goKMS/config/config.go +++ b/goKMS/config/config.go @@ -37,8 +37,8 @@ type QuantumModule struct { QmType string `yaml:"Type"` Address string `yaml:"Address"` Hostname string `yaml:"Hostname"` - MasterSAEID string `yaml:"MasterSAEID"` - SlaveSAEID string `yaml:"SlaveSAEID"` + LocalSAEID string `yaml:"LocalSAEID"` + TargetSAEID string `yaml:"TargetSAEID"` MasterMode bool `yaml:"MasterMode"` } diff --git a/goKMS/kms/etsi/etsi14/client/client.go b/goKMS/kms/etsi/etsi14/client/client.go index ef7de47bb2cb475cb8f7353d5377f711748279f0..f0fdeb3e2c2f2b774905610583cf66d0647c01ab 100644 --- a/goKMS/kms/etsi/etsi14/client/client.go +++ b/goKMS/kms/etsi/etsi14/client/client.go @@ -5,7 +5,6 @@ import ( "net/http" restclient "code.fbi.h-da.de/danet/quant/etsi014/go/rest/etsi/client" - "github.com/sirupsen/logrus" ) type ClientImpl struct { @@ -20,40 +19,46 @@ func NewClientImpl(clientConf *restclient.Configuration) (*ClientImpl, error) { }, nil } -func (c *ClientImpl) GetStatus(slaveSAEID string) (*restclient.Status, *http.Response, error) { - req := c.restClient.DefaultAPI.GetStatus(context.Background(), slaveSAEID) +func (c *ClientImpl) GetStatus(targetSAEID string) (*restclient.Status, *http.Response, error) { + req := c.restClient.DefaultAPI.GetStatus(context.Background(), targetSAEID) return req.Execute() } -func (c *ClientImpl) GetKey(slaveSAEID string) (*restclient.KeyContainer, *http.Response, error) { - req := c.restClient.DefaultAPI.GetKey(context.Background(), slaveSAEID).Number(1).Size(256) +func (c *ClientImpl) GetKey(targetSAEID string, number int64, size int64) (*restclient.KeyContainer, *http.Response, error) { + req := c.restClient.DefaultAPI.GetKey(context.Background(), targetSAEID).Number(number).Size(size) return req.Execute() } -func (c *ClientImpl) GetKeyPost(slaveSAEID string) (*restclient.KeyContainer, *http.Response, error) { - postReq := c.restClient.DefaultAPI.GetKeyPost(context.Background(), slaveSAEID) - postReq.KeyRequest(restclient.KeyRequest{ - Number: restclient.PtrInt64(1), - Size: restclient.PtrInt64(256), - ExtensionOptional: []map[string]string{}, - }) +func (c *ClientImpl) GetKeyPost(targetSAEID string, number int64, size int64, additionalTargetSAEIDs []string, extensionMandatory []map[string]string, extensionOptional []map[string]string) (*restclient.KeyContainer, *http.Response, error) { + postReq := c.restClient.DefaultAPI.GetKeyPost(context.Background(), targetSAEID) + keyReq := restclient.KeyRequest{ + Number: restclient.PtrInt64(number), + Size: restclient.PtrInt64(size), + } + if additionalTargetSAEIDs != nil { + keyReq.AdditionalSlaveSAEIDs = additionalTargetSAEIDs + } + if extensionMandatory != nil { + keyReq.ExtensionMandatory = extensionMandatory + } + if extensionOptional != nil { + keyReq.ExtensionOptional = extensionOptional + } - return postReq.Execute() + return postReq.KeyRequest(keyReq).Execute() } -func (c *ClientImpl) GetKeyWithId(masterSAEID, keyID string) (*restclient.KeyContainer, *http.Response, error) { - req := c.restClient.DefaultAPI.GetKeyWithIds(context.Background(), masterSAEID).KeyID(keyID) +func (c *ClientImpl) GetKeyWithId(targetSAEID, keyID string) (*restclient.KeyContainer, *http.Response, error) { + req := c.restClient.DefaultAPI.GetKeyWithIds(context.Background(), targetSAEID).KeyID(keyID) return req.Execute() } -func (c *ClientImpl) GetKeyWithIdPost(masterSAEID string, keyIDs []restclient.KeyIDsRequestKeyIDsInner) (*restclient.KeyContainer, *http.Response, error) { - keyIDsRequest := restclient.NewKeyIDsRequest() - keyIDsRequest.SetKeyIDs(keyIDs) +func (c *ClientImpl) GetKeyWithIdPost(targetSAEID string, keyIDs []restclient.KeyIDsRequestKeyIDsInner) (*restclient.KeyContainer, *http.Response, error) { + postReq := c.restClient.DefaultAPI.GetKeyWithIdsPost(context.Background(), targetSAEID) + keyIDsReq := restclient.KeyIDsRequest{ + KeyIDs: keyIDs, + } - postReq := c.restClient.DefaultAPI.GetKeyWithIdsPost(context.Background(), masterSAEID).KeyIDsRequest(*keyIDsRequest) - - logrus.Info(keyIDsRequest) - - return postReq.Execute() + return postReq.KeyIDsRequest(keyIDsReq).Execute() } diff --git a/goKMS/kms/kms.go b/goKMS/kms/kms.go index 5540cb88e5e5ee7d02826b7ad0edff84aa6659c0..12ac106eabc25504d3b43fe36dd96038f052109c 100644 --- a/goKMS/kms/kms.go +++ b/goKMS/kms/kms.go @@ -190,7 +190,7 @@ func (kms *KMS) initializePeers(config *config.Config) error { case "emulated": qm = peers.NewDanetQuantumModule(pqm.Address, config.Id) case "etsi": - qm, err = peers.NewETSI014HTTPQuantumModule(pqm.Address, config.Id, pqm.SlaveSAEID, pqm.MasterSAEID, config.QuantumModuleTLS, pqm.MasterMode) + qm, err = peers.NewETSI014HTTPQuantumModule(pqm.Address, config.Id, pqm.LocalSAEID, pqm.TargetSAEID, config.QuantumModuleTLS, pqm.MasterMode) if err != nil { log.Fatalf("Failed to create ETSI QKD module: %s", err) return nil diff --git a/goKMS/kms/kmsintercom.go b/goKMS/kms/kmsintercom.go index 4bb2fb8dff42cd8690aa9da0ce582fc28180b363..1c52e43d92744e9b633978f165dfef0028681775 100644 --- a/goKMS/kms/kmsintercom.go +++ b/goKMS/kms/kmsintercom.go @@ -4,7 +4,6 @@ import ( "context" "encoding/base64" "fmt" - "io" "sync" "time" @@ -64,28 +63,13 @@ func (s *kmsTalkerServer) KeyIdNotification(ctx context.Context, in *pb.KeyIdNot } } - keyContainer, resp, err := eqm.Client().GetKeyWithIdPost(eqm.MasterSAEID, etsi14KeyIds) + keyContainer, err := eqm.GetKeyWithIds(etsi14KeyIds) if err != nil { return nil, err } - defer func() { - if closeError := resp.Body.Close(); closeError != nil { - log.Errorf("KeyIdNotification: response closing failure: %s", err) - } - }() - - // TODO: add proper status code handling - if resp.StatusCode != 200 { - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, err - } - return nil, status.Error(codes.Aborted, string(body)) - } - if err := store.AddETSIKeysToKeystore(eqm.KeyStore(), keyContainer.GetKeys()); err != nil { - return nil, status.Error(codes.Internal, "expected etsi014 quantum module") + return nil, status.Errorf(codes.Internal, "failed to add keys to keystore; %s", err) } return &pb.KeyIdNotificationResponse{ diff --git a/goKMS/kms/peers/etsi14Quantummodule.go b/goKMS/kms/peers/etsi14Quantummodule.go index 65e51140e6cbaff04e855da9d28ac94844f04272..7e0187202e7089e184022195f3436e035ff90a5b 100644 --- a/goKMS/kms/peers/etsi14Quantummodule.go +++ b/goKMS/kms/peers/etsi14Quantummodule.go @@ -25,12 +25,12 @@ type ETSI014HTTPQuantumModule struct { keyStore *store.KmsKeyStore kmsClient *GRPCClient client *etsi14ClientImpl.ClientImpl - SlaveSAEID string - MasterSAEID string + localSAEID string + targetSAEID string master bool } -func NewETSI014HTTPQuantumModule(addr, kmsId, slaveSAEID, masterSAEID string, tlsConfig config.TLSConfig, master bool) (*ETSI014HTTPQuantumModule, error) { +func NewETSI014HTTPQuantumModule(addr, kmsId, localSAEID, targetSAEID string, tlsConfig config.TLSConfig, master bool) (*ETSI014HTTPQuantumModule, error) { parsedUrl, err := url.Parse(addr) if err != nil { return nil, err @@ -72,8 +72,8 @@ func NewETSI014HTTPQuantumModule(addr, kmsId, slaveSAEID, masterSAEID string, tl keyStore: store.NewKmsKeyStore(256), kmsClient: nil, client: client, - SlaveSAEID: slaveSAEID, - MasterSAEID: masterSAEID, + localSAEID: localSAEID, + targetSAEID: targetSAEID, master: master, }, nil } @@ -95,7 +95,7 @@ func (qm *ETSI014HTTPQuantumModule) Initialize() error { // TODO: add context/channel to stop for range ticker.C { - container, _, err := qm.client.GetKey(qm.SlaveSAEID) + container, err := qm.GetKeys(1, 256, nil, nil, nil) if err != nil { log.Error(err) break @@ -153,3 +153,29 @@ func (qm *ETSI014HTTPQuantumModule) KmsGrpcClient() *GRPCClient { func (qm *ETSI014HTTPQuantumModule) SetKmsGrpcClient(peer *GRPCClient) { } + +func (qm *ETSI014HTTPQuantumModule) GetKeys(number int64, size int64, additionalTargetSAEIDs []string, extensionMandatory []map[string]string, extensionOptional []map[string]string) (*etsi14ClientGenerated.KeyContainer, error) { + container, _, err := qm.client.GetKeyPost(qm.targetSAEID, number, size, additionalTargetSAEIDs, extensionMandatory, extensionOptional) + if err != nil { + return nil, err + } + + if len(container.GetKeys()) == 0 { + return nil, fmt.Errorf("no key received, length of key container was: %d", len(container.GetKeys())) + } + + return container, nil +} + +func (qm *ETSI014HTTPQuantumModule) GetKeyWithIds(keyIds []etsi14ClientGenerated.KeyIDsRequestKeyIDsInner) (*etsi14ClientGenerated.KeyContainer, error) { + container, _, err := qm.client.GetKeyWithIdPost(qm.targetSAEID, keyIds) + if err != nil { + return nil, err + } + + if len(container.GetKeys()) == 0 { + return nil, fmt.Errorf("no key received, length of key container was: %d", len(container.GetKeys())) + } + + return container, nil +}