From e3808106af8f075bfb4a9aee5d96b33946e37a7b Mon Sep 17 00:00:00 2001 From: Malte Bauch <malte.bauch@h-da.de> Date: Fri, 20 Sep 2024 13:17:11 +0200 Subject: [PATCH] Immediately start go routine within etsi qm init method --- goKMS/kms/kmsintercom.go | 18 ++++++++++++++---- goKMS/kms/peers/danetQuantummodule.go | 4 +++- goKMS/kms/peers/etsi14Quantummodule.go | 7 ++++--- goKMS/kms/store/kms-keystore.go | 4 +++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/goKMS/kms/kmsintercom.go b/goKMS/kms/kmsintercom.go index 58e1c023..e1b332b3 100644 --- a/goKMS/kms/kmsintercom.go +++ b/goKMS/kms/kmsintercom.go @@ -35,13 +35,21 @@ type kmsTalkerServer struct { func (s *kmsTalkerServer) InterComCapabilities(ctx context.Context, in *pb.InterComCapabilitiesRequest) (capReply *pb.InterComCapabilitiesReply, err error) { log.Debugf("Received InterComCapabilities request from peer KMS: %v", in.GetKmsId()) - peer, err := s.kms.FindPeerById(in.GetKmsId()) + peerKmsId := in.GetKmsId() + peer, err := s.kms.FindPeerById(peerKmsId) if err != nil { return nil, status.Errorf(codes.Aborted, err.Error(), in.GetKmsId()) } - peer.QuantumModule().Reset() - peer.QuantumModule().Initialize() + if in.ResetKeyStore { + log.Debugf("Resetting quantum module: %s for peer: %s", peerKmsId) + peer.QuantumModule().Reset() + log.Debugf("Initializing quantum module: %s for peer: %s", peerKmsId) + if err := peer.QuantumModule().Initialize(); err != nil { + return nil, status.Errorf(codes.Aborted, err.Error(), in.GetKmsId()) + } + log.Debugf("Successfully initialized quantum module: %s for peer %s", peer.QuantumModule().ID(), peerKmsId) + } // NOTE: InterComCapabilities should return the capabilities of the kms. // This could include supported key sizes, crypto algorithms, etc. @@ -148,7 +156,9 @@ func (s *kmsTalkerServer) SyncKeyIdsForBulk(ctx context.Context, in *pb.SyncKeyI } for keyId, key := range keyData { - eqm.KeyStore().AddKey(keyId, key) + if err := eqm.KeyStore().AddKey(keyId, key); err != nil { + log.Error(err) + } } delete(eqm.RawBulkKeys, in.GetBulkId()) diff --git a/goKMS/kms/peers/danetQuantummodule.go b/goKMS/kms/peers/danetQuantummodule.go index 08fabd86..fa1487c1 100644 --- a/goKMS/kms/peers/danetQuantummodule.go +++ b/goKMS/kms/peers/danetQuantummodule.go @@ -120,7 +120,9 @@ func (qm *DanetQuantumModule) Sync() error { } for keyId, key := range keyData { - qm.keyStore.AddKey(keyId, key) + if err := qm.keyStore.AddKey(keyId, key); err != nil { + log.Error(err) + } } qm.RawBulkKeysMutex.Lock() diff --git a/goKMS/kms/peers/etsi14Quantummodule.go b/goKMS/kms/peers/etsi14Quantummodule.go index 0f0ee7f1..41119283 100644 --- a/goKMS/kms/peers/etsi14Quantummodule.go +++ b/goKMS/kms/peers/etsi14Quantummodule.go @@ -118,16 +118,17 @@ func (qm *ETSI014HTTPQuantumModule) Initialize() error { // start polling keys if qm.master { go func() { - restartWaitingTime := time.Duration(20) * time.Second + restartWaitingTime := time.Duration(2) * time.Minute ticker := time.NewTicker(restartWaitingTime) defer ticker.Stop() - // immediately start with the ticker instead of waiting the defined amount RestartFetchLoop: for { + // immediately start with the ticker instead of waiting the defined amount + qm.doKeyFetching(ctx) select { case <-ticker.C: - qm.doKeyFetching(ctx) + continue case <-ctx.Done(): break RestartFetchLoop } diff --git a/goKMS/kms/store/kms-keystore.go b/goKMS/kms/store/kms-keystore.go index 652ff337..ef1a5212 100644 --- a/goKMS/kms/store/kms-keystore.go +++ b/goKMS/kms/store/kms-keystore.go @@ -120,7 +120,9 @@ func AddETSIKeysToKeystore(keyStore *KmsKeyStore, keyContainer []etsi14.KeyConta return err } // add to keystore - keyStore.AddKey(keyId, key) + if err := keyStore.AddKey(keyId, key); err != nil { + log.Error(err) + } } log.Debugf("Current key store length: %d", keyStore.Length()) return nil -- GitLab