diff --git a/goKMS/gnmiHandlers/kms/keyStoreHandler.go b/goKMS/gnmiHandlers/kms/keyStoreHandler.go index e2785ecb9a9fd83bc1549405e35dd4619c237178..ddff4a7cc9d73a62a5adeec5a7228b7a4f04739e 100644 --- a/goKMS/gnmiHandlers/kms/keyStoreHandler.go +++ b/goKMS/gnmiHandlers/kms/keyStoreHandler.go @@ -2,26 +2,20 @@ package kmsHandler import ( "fmt" + "time" "code.fbi.h-da.de/danet/gnmi-target/handler" "code.fbi.h-da.de/danet/quant/goKMS/kms" - "code.fbi.h-da.de/danet/quant/goKMS/kms/event" gnmitargetygot "code.fbi.h-da.de/danet/quant/goKMS/model" "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/ygot/ygot" - "github.com/sirupsen/logrus" + log "github.com/sirupsen/logrus" ) type KeyStoreHandler struct { handler.DefaultPathHandler kms *kms.KMS maxKeyFillLevelsDefined map[string]uint64 - events <-chan event.Event -} - -type keyFillLevel struct { - storeID string - fillLevel uint64 } func NewKeyStoreHandler(kms *kms.KMS, maxKeyFillLevelsDefined map[string]uint64) *KeyStoreHandler { @@ -41,29 +35,20 @@ func (yh *KeyStoreHandler) Init(config *handler.Config, publishToSubsFunc func([ yh.Config = config yh.PublishToSubs = publishToSubsFunc - var err error - yh.events, err = yh.kms.EventBus().Subscribe(event.KEY_STORE) - if err != nil { - return err - } - - _, err = yh.updateOrCreateKeyStoreHandler() - if err != nil { - return err - } - // Start the go routine that takes care of any update from the kms go func() { - for { - select { - case <-yh.events: - logrus.Println("Update for KeyStores.") - _, err := yh.updateOrCreateKeyStoreHandler() - if err != nil { - logrus.Errorf("Error within key stores subscription goroutine; %v", err) - } - - // gnmi subscribe things here? + ticker := time.NewTicker(15 * time.Second) + defer ticker.Stop() + + // TODO: add context/channel to stop + for range ticker.C { + diff, err := yh.updateOrCreateKeyStores(yh.kms) + if err != nil { + log.Errorf("Error within key stores subscription goroutine; %v", err) + break + } + if err := yh.PublishToSubs(diff); err != nil { + log.Errorf("Error within key stores subscription goroutine; %v", err) } } }() @@ -75,7 +60,7 @@ func (yh *KeyStoreHandler) Update(c ygot.ValidatedGoStruct, jobs []*gnmi.Update) return nil } -func (yh *KeyStoreHandler) updateOrCreateKeyStoreHandler() ([]*gnmi.Notification, error) { +func (yh *KeyStoreHandler) updateOrCreateKeyStores(kms *kms.KMS) ([]*gnmi.Notification, error) { yh.Config.Lock() defer yh.Config.Unlock() @@ -89,21 +74,20 @@ func (yh *KeyStoreHandler) updateOrCreateKeyStoreHandler() ([]*gnmi.Notification return nil, fmt.Errorf("Wrong type, exptected: %T, got: %T", (*gnmitargetygot.Temp_KeyStores)(nil), copyCurrentConfig) } - confKeyStores := newConfig.GetOrCreateKeyStores() + kmsPeers := kms.PeersDeepCopy() - keyFillLevels := getKeyFillLevels(yh.kms) + confKeyStores := newConfig.GetOrCreateKeyStores() - // TODO: Maybe add more config values here! - for _, keyFillLevel := range keyFillLevels { - confKeyStoreContainer := confKeyStores.GetOrCreateKeyStore(keyFillLevel.storeID) + for peerKmsId, peer := range kmsPeers { + confKeyStoreContainer := confKeyStores.GetOrCreateKeyStore(peerKmsId) - confKeyStoreContainer.KmsPeerId = ygot.String(keyFillLevel.storeID) + confKeyStoreContainer.KmsPeerId = ygot.String(peerKmsId) confKeyStore := confKeyStoreContainer.GetOrCreateKeyStore() - confKeyStore.KeyFillLevel = ygot.Uint64(keyFillLevel.fillLevel) - maxKeyFillLevel, ok := yh.maxKeyFillLevelsDefined[keyFillLevel.storeID] + confKeyStore.KeyFillLevel = ygot.Uint64(uint64(peer.QuantumModule().KeyStore().Length())) + maxKeyFillLevel, ok := yh.maxKeyFillLevelsDefined[peerKmsId] if !ok { - return nil, fmt.Errorf("no max key fill level available for store with ID: %s", keyFillLevel.storeID) // TODO(faseid): check if really want to return here?! + return nil, fmt.Errorf("no max key fill level available for store with ID: %s", peerKmsId) // TODO: check if really want to return here } confKeyStore.MaxKeyFillLevel = ygot.Uint64(maxKeyFillLevel) @@ -123,17 +107,3 @@ func (yh *KeyStoreHandler) updateOrCreateKeyStoreHandler() ([]*gnmi.Notification return notifications, nil } - -func getKeyFillLevels(kms *kms.KMS) []keyFillLevel { - kmsPeers := kms.KmsPeers - keyFillLevels := []keyFillLevel{} - - for _, peer := range kmsPeers { - keyFillLevels = append(keyFillLevels, keyFillLevel{ - storeID: peer.GetKmsPeerId().String(), - fillLevel: uint64(peer.GetKeyStore().Length()), - }) - } - - return keyFillLevels -} diff --git a/goKMS/kms/event/event.go b/goKMS/kms/event/event.go index a0f3e83036776f54fca01d596cd41656ba97f5dd..b99faee99ccabaf0ca246dff53294935ce7961ac 100644 --- a/goKMS/kms/event/event.go +++ b/goKMS/kms/event/event.go @@ -9,7 +9,6 @@ const ( ROUTE QUANTUM_MODULE CREATE_ROUTE - KEY_STORE ) // Event ... @@ -87,23 +86,3 @@ func (e *RouteEvent) Topic() Topic { func (e *RouteEvent) Time() time.Time { return e.Timestamp } - -type KeyStoresEvent struct { - EventTopic Topic - Timestamp time.Time -} - -func NewKeyStoresEvent() *KeyStoresEvent { - return &KeyStoresEvent{ - EventTopic: KEY_STORE, - Timestamp: time.Now(), - } -} - -func (e *KeyStoresEvent) Topic() Topic { - return e.EventTopic -} - -func (e *KeyStoresEvent) Time() time.Time { - return e.Timestamp -} diff --git a/goKMS/kms/kms.go b/goKMS/kms/kms.go index 848590faad9b02144cca10b90500e030ad67743e..ba74c0ad95ce152d79450f137555cbd2cbf77f31 100644 --- a/goKMS/kms/kms.go +++ b/goKMS/kms/kms.go @@ -192,8 +192,7 @@ func (kms *KMS) initializePeers(config *config.Config) error { case "etsi": qm, err = peers.NewETSI014HTTPQuantumModule(pqm.Address, config.Id, pqm.LocalSAEID, pqm.TargetSAEID, config.QuantumModuleTLS, pqm.MasterMode, - peer.QuantumModule.KeyFetchInterval, int64(peer.QuantumModule.KeyFetchAmount), uint64(peer.QuantumModule.MaxKeyFillLevel), - kms.eventBus) + peer.QuantumModule.KeyFetchInterval, int64(peer.QuantumModule.KeyFetchAmount), uint64(peer.QuantumModule.MaxKeyFillLevel)) if err != nil { log.Fatalf("Failed to create ETSI QKD module: %s", err) return nil diff --git a/goKMS/kms/peers/etsi14Quantummodule.go b/goKMS/kms/peers/etsi14Quantummodule.go index 04bada91bef9d1f51d77e3d98a38827c5a075ede..902272ed155b60386e6146ef522ebfac4481378e 100644 --- a/goKMS/kms/peers/etsi14Quantummodule.go +++ b/goKMS/kms/peers/etsi14Quantummodule.go @@ -31,10 +31,9 @@ type ETSI014HTTPQuantumModule struct { keyFetchInterval int keyFetchAmount int64 maxKeyFillLevel uint64 - kmsEventBus *event.EventBus } -func NewETSI014HTTPQuantumModule(addr, kmsId, localSAEID, targetSAEID string, tlsConfig config.TLSConfig, master bool, keyFetchInterval int, keyFetchAmount int64, maxKeyFillLevel uint64, kmsEventBus *event.EventBus) (*ETSI014HTTPQuantumModule, error) { +func NewETSI014HTTPQuantumModule(addr, kmsId, localSAEID, targetSAEID string, tlsConfig config.TLSConfig, master bool, keyFetchInterval int, keyFetchAmount int64, maxKeyFillLevel uint64) (*ETSI014HTTPQuantumModule, error) { parsedUrl, err := url.Parse(addr) if err != nil { return nil, err @@ -95,7 +94,6 @@ func NewETSI014HTTPQuantumModule(addr, kmsId, localSAEID, targetSAEID string, tl keyFetchInterval: keyFetchInterval, keyFetchAmount: keyFetchAmount, maxKeyFillLevel: maxKeyFillLevel, - kmsEventBus: kmsEventBus, }, nil } @@ -108,9 +106,6 @@ func (qm *ETSI014HTTPQuantumModule) Client() *etsi14ClientImpl.ClientImpl { } func (qm *ETSI014HTTPQuantumModule) Initialize() error { - // sends events on the event bus every x seconds to keep key store config updated - go qm.runBackgroundKeyStoreUpdates() - // start polling keys if qm.master { go func() { @@ -216,15 +211,3 @@ func (qm *ETSI014HTTPQuantumModule) GetKeyWithIds(keyIds []etsi14ClientGenerated return container, nil } - -func (qm *ETSI014HTTPQuantumModule) runBackgroundKeyStoreUpdates() { - ticker := time.NewTicker(backgroundKeyStoreUpdateInterval * time.Second) - defer ticker.Stop() - - for range ticker.C { - err := qm.kmsEventBus.Publish(event.NewKeyStoresEvent()) - if err != nil { - log.Error(err) - } - } -} diff --git a/goKMS/kms/peers/kmsPeer.go b/goKMS/kms/peers/kmsPeer.go index 3581b8ec19f6c0e25b9c26eaaaaaaad4f3d07474..a6828434065e0b49f2b3ec1bca9be3d5b88c661f 100644 --- a/goKMS/kms/peers/kmsPeer.go +++ b/goKMS/kms/peers/kmsPeer.go @@ -10,7 +10,6 @@ import ( pbIC "code.fbi.h-da.de/danet/quant/goKMS/api/gen/proto/go/kmsintercom" "code.fbi.h-da.de/danet/quant/goKMS/kms/crypto" "code.fbi.h-da.de/danet/quant/goKMS/kms/event" - "code.fbi.h-da.de/danet/quant/goKMS/kms/store" "code.fbi.h-da.de/danet/quant/goKMS/kms/util" "github.com/google/uuid" log "github.com/sirupsen/logrus" @@ -215,7 +214,3 @@ func (kp *KmsPeer) SetStatus(updateStatus KmsPeerStatus) { func (kp *KmsPeer) GetKmsPeerId() uuid.UUID { return kp.peerKmsId } - -func (kp *KmsPeer) GetKeyStore() *store.KmsKeyStore { - return kp.servingQuantumModul.KeyStore() -} diff --git a/goKMS/kms/peers/quantummodule.go b/goKMS/kms/peers/quantummodule.go index 3b7d9c5fcb2ac28a2c8d0156b94333e642856c8f..cb9753ac1fede1fcc0aa29f27894a54166a9ca22 100644 --- a/goKMS/kms/peers/quantummodule.go +++ b/goKMS/kms/peers/quantummodule.go @@ -11,8 +11,6 @@ const ( defaultKeyFetchInterval = 10 defaultKeyFetchAmount = int64(1) DefaultMaxKeyFillLevel = uint64(100) - - backgroundKeyStoreUpdateInterval = 1 ) // QuantumModule interface definition.