From 297957be0028342c6b767d8ed4ee87d7d5513034 Mon Sep 17 00:00:00 2001 From: Malte Bauch <malte.bauch@h-da.de> Date: Wed, 23 Oct 2024 12:25:23 +0000 Subject: [PATCH] Allow to reset key store through qkdn-manager api See merge request danet/quant!229 --- goKMS/kms/peers/danetQuantummodule.go | 4 ++++ goKMS/kms/peers/etsi14Quantummodule.go | 4 ++++ goKMS/kms/peers/kmsPeer.go | 18 ++++++++++++++++++ goKMS/kms/peers/quantummodule.go | 1 + goKMS/qkdnManager/server.go | 6 ++++++ 5 files changed, 33 insertions(+) diff --git a/goKMS/kms/peers/danetQuantummodule.go b/goKMS/kms/peers/danetQuantummodule.go index fa1487c1..fd967f6b 100644 --- a/goKMS/kms/peers/danetQuantummodule.go +++ b/goKMS/kms/peers/danetQuantummodule.go @@ -75,6 +75,10 @@ func (qm *DanetQuantumModule) Address() string { return qm.addr } +func (qm *DanetQuantumModule) SetActive(active bool) { + qm.active = active +} + func (qm *DanetQuantumModule) IsActive() bool { return qm.active } diff --git a/goKMS/kms/peers/etsi14Quantummodule.go b/goKMS/kms/peers/etsi14Quantummodule.go index 41119283..b65f3780 100644 --- a/goKMS/kms/peers/etsi14Quantummodule.go +++ b/goKMS/kms/peers/etsi14Quantummodule.go @@ -151,6 +151,10 @@ func (qm *ETSI014HTTPQuantumModule) MaxKeyFillLevel() uint64 { return qm.maxKeyFillLevel } +func (qm *ETSI014HTTPQuantumModule) SetActive(active bool) { + qm.active = active +} + func (qm *ETSI014HTTPQuantumModule) IsActive() bool { return qm.active } diff --git a/goKMS/kms/peers/kmsPeer.go b/goKMS/kms/peers/kmsPeer.go index caf14e1f..3f7e48b5 100644 --- a/goKMS/kms/peers/kmsPeer.go +++ b/goKMS/kms/peers/kmsPeer.go @@ -219,3 +219,21 @@ func (kp *KmsPeer) SetStatus(updateStatus KmsPeerStatus) { func (kp *KmsPeer) GetKmsPeerId() uuid.UUID { return kp.peerKmsId } + +func (kp *KmsPeer) ResetKeyStore(kmsId string) error { + switch client := kp.peerClient; { + case client.KmsTalkerClient != nil: + _, err := client.InterComCapabilities(context.Background(), &pbIC.InterComCapabilitiesRequest{ + Timestamp: time.Now().Unix(), + KmsId: kmsId, + ResetKeyStore: true, + }) + if err != nil { + return err + } + default: + return fmt.Errorf("No active peer client found") + } + + return nil +} diff --git a/goKMS/kms/peers/quantummodule.go b/goKMS/kms/peers/quantummodule.go index 16629363..50147997 100644 --- a/goKMS/kms/peers/quantummodule.go +++ b/goKMS/kms/peers/quantummodule.go @@ -23,5 +23,6 @@ type QuantumModule interface { Sync() error Address() string IsActive() bool + SetActive(bool) Reset() } diff --git a/goKMS/qkdnManager/server.go b/goKMS/qkdnManager/server.go index ea3235f2..405f1a7c 100644 --- a/goKMS/qkdnManager/server.go +++ b/goKMS/qkdnManager/server.go @@ -220,6 +220,12 @@ func (qs *QkdnManagerServer) handleSetKeyStore(w http.ResponseWriter, r *http.Re return } } else if fetch == "false" { + eqm.SetActive(false) + if err := peer.ResetKeyStore(qs.kms.GetID().String()); err != nil { + eqm.SetActive(true) + http.Error(w, fmt.Sprintf("Failed to reset keystore for quantum module of peer: %s", peerID), http.StatusBadRequest) + return + } eqm.Reset() } } -- GitLab