diff --git a/goKMS/kms/peers/danetQuantummodule.go b/goKMS/kms/peers/danetQuantummodule.go index fa1487c1545f18b2be7987aac3553c9ddfc930bb..fd967f6b7399512c104605d3c0a79c0b5c76bfe2 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 41119283a6261e0b8299f03e64048df48288887d..b65f378050c34e8b0670898d2de1a9850a30f60e 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 caf14e1f4e6c298eff4fdf55555e2739dd581221..3f7e48b5fc1f3b99386e500c5664710fc79ff1d8 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 166293631135285d0a91e937b3f380226c2a86dd..50147997875a11039074ddbe9b919a3c5e4560da 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 ea3235f26d12de7eb710ff9c3ec246c29459d222..405f1a7c3da1badd955bedac41157cde5b6f51b5 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() } }