From 0c595eec424f4b7485f7058e8c7a733ccaa79a55 Mon Sep 17 00:00:00 2001 From: liulu Date: Tue, 10 Mar 2026 16:27:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E5=AF=86=E9=92=A5=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/mk/controller/LmkController.java | 9 ++-- .../tms/modules/mk/dto/RecoveryResult.java | 16 +++++++ .../tms/modules/mk/enums/MasterKeyStatus.java | 46 +++++++++++++++++++ .../tms/modules/mk/service/LmkService.java | 11 +++++ 4 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/cisd/tms/modules/mk/dto/RecoveryResult.java create mode 100644 src/main/java/com/cisd/tms/modules/mk/enums/MasterKeyStatus.java diff --git a/src/main/java/com/cisd/tms/modules/mk/controller/LmkController.java b/src/main/java/com/cisd/tms/modules/mk/controller/LmkController.java index 5bf118b..d890e53 100644 --- a/src/main/java/com/cisd/tms/modules/mk/controller/LmkController.java +++ b/src/main/java/com/cisd/tms/modules/mk/controller/LmkController.java @@ -1,13 +1,13 @@ package com.cisd.tms.modules.mk.controller; import com.cisd.tms.common.api.ApiResponse; -import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService; import com.cisd.tms.modules.mk.dto.LMK; import com.cisd.tms.modules.mk.dto.MasterKeyRestoreDTO; import com.cisd.tms.modules.mk.dto.RecoveryResult; import com.cisd.tms.modules.mk.dto.UKeySignDTO; import com.cisd.tms.modules.mk.dto.UKeySignEntity; import com.cisd.tms.modules.mk.dto.UKeySignResult; +import com.cisd.tms.modules.mk.enums.MasterKeyStatus; import com.cisd.tms.modules.mk.service.LmkService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -32,8 +32,6 @@ import java.util.List; @RequestMapping("/api/v1") public class LmkController { - @Resource - private PcieCryptoService pcieCryptoService; @Resource private LmkService lmkService; @Resource @@ -69,6 +67,11 @@ public class LmkController { return ApiResponse.success(UKeySignResult.builder().sign(signValue).extra(components).build()); } + @GetMapping("/masterKeyStatus") + public ApiResponse getMasterKeyStatus() { + return ApiResponse.success(lmkService.getMasterKeyStatus()); + } + /** * 恢复主密钥 * @param masterKeyRestoreDTO diff --git a/src/main/java/com/cisd/tms/modules/mk/dto/RecoveryResult.java b/src/main/java/com/cisd/tms/modules/mk/dto/RecoveryResult.java new file mode 100644 index 0000000..a0782ab --- /dev/null +++ b/src/main/java/com/cisd/tms/modules/mk/dto/RecoveryResult.java @@ -0,0 +1,16 @@ +package com.cisd.tms.modules.mk.dto; + +import lombok.Data; + +@Data +public class RecoveryResult { + private boolean needNewUKey; + private String mac; + + public static RecoveryResult getInstance(boolean needNewUKey, String mac) { + RecoveryResult result = new RecoveryResult(); + result.needNewUKey = needNewUKey; + result.mac = mac; + return result; + } +} diff --git a/src/main/java/com/cisd/tms/modules/mk/enums/MasterKeyStatus.java b/src/main/java/com/cisd/tms/modules/mk/enums/MasterKeyStatus.java new file mode 100644 index 0000000..96a4183 --- /dev/null +++ b/src/main/java/com/cisd/tms/modules/mk/enums/MasterKeyStatus.java @@ -0,0 +1,46 @@ +package com.cisd.tms.modules.mk.enums; + +import lombok.Data; +import lombok.Getter; + +public enum MasterKeyStatus { + NORMAL(0, "已生成"), + ABNORMAL(1, "未生成"); + + MasterKeyStatus(int code, String desc) { + this.code = code; + this.desc = desc; + } + + @Getter + private final int code; + + @Getter + private final String desc; + + public StatusDetail getDetail() { + return new StatusDetail(this.code, this.desc); + } + + public StatusDetail getDetail(String ucSessionKey) { + return new StatusDetail(this.code, this.desc, ucSessionKey); + } + + @Data + public static class StatusDetail { + private int code; + private String desc; + private String ucSessionKey; + + public StatusDetail(int code, String desc) { + this.code = code; + this.desc = desc; + } + + public StatusDetail(int code, String desc, String ucSessionKey) { + this.code = code; + this.desc = desc; + this.ucSessionKey = ucSessionKey; + } + } +} diff --git a/src/main/java/com/cisd/tms/modules/mk/service/LmkService.java b/src/main/java/com/cisd/tms/modules/mk/service/LmkService.java index acd4527..dafa85e 100644 --- a/src/main/java/com/cisd/tms/modules/mk/service/LmkService.java +++ b/src/main/java/com/cisd/tms/modules/mk/service/LmkService.java @@ -12,6 +12,7 @@ import com.cisd.tms.modules.mk.dto.KeyComponent; import com.cisd.tms.modules.mk.dto.LMK; import com.cisd.tms.modules.mk.dto.LMKAndIK; import com.cisd.tms.modules.mk.enums.IKEnums; +import com.cisd.tms.modules.mk.enums.MasterKeyStatus; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.util.encoders.Hex; @@ -207,4 +208,14 @@ public class LmkService { keyComponentList = null; } + public MasterKeyStatus.StatusDetail getMasterKeyStatus() { + boolean ok = pcieCryptoService.checkLmk(); + MasterKeyStatus status = ok ? MasterKeyStatus.NORMAL : MasterKeyStatus.ABNORMAL; + if (ok) { + String mac = Hex.toHexString(pcieCryptoService.exportLmkSeedMac()); + return status.getDetail(mac); + } + return status.getDetail(); + } + }