Skip to content
Snippets Groups Projects
Commit a05e61a7 authored by Malte Bauch's avatar Malte Bauch
Browse files

Update etsi014 client and corresponding QuantumModule implementation

See merge request !173
parent 7c693bff
No related branches found
No related tags found
1 merge request!173Update etsi014 client and corresponding QuantumModule implementation
Pipeline #218503 passed
......@@ -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"`
}
......
......@@ -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()
}
......@@ -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
......
......@@ -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{
......
......@@ -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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment