主密钥状态查询

This commit is contained in:
liulu 2026-03-10 16:27:38 +08:00
parent 0eb857b6fa
commit 0c595eec42
4 changed files with 79 additions and 3 deletions

View File

@ -1,13 +1,13 @@
package com.cisd.tms.modules.mk.controller; package com.cisd.tms.modules.mk.controller;
import com.cisd.tms.common.api.ApiResponse; 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.LMK;
import com.cisd.tms.modules.mk.dto.MasterKeyRestoreDTO; import com.cisd.tms.modules.mk.dto.MasterKeyRestoreDTO;
import com.cisd.tms.modules.mk.dto.RecoveryResult; import com.cisd.tms.modules.mk.dto.RecoveryResult;
import com.cisd.tms.modules.mk.dto.UKeySignDTO; import com.cisd.tms.modules.mk.dto.UKeySignDTO;
import com.cisd.tms.modules.mk.dto.UKeySignEntity; import com.cisd.tms.modules.mk.dto.UKeySignEntity;
import com.cisd.tms.modules.mk.dto.UKeySignResult; 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.cisd.tms.modules.mk.service.LmkService;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -32,8 +32,6 @@ import java.util.List;
@RequestMapping("/api/v1") @RequestMapping("/api/v1")
public class LmkController { public class LmkController {
@Resource
private PcieCryptoService pcieCryptoService;
@Resource @Resource
private LmkService lmkService; private LmkService lmkService;
@Resource @Resource
@ -69,6 +67,11 @@ public class LmkController {
return ApiResponse.success(UKeySignResult.builder().sign(signValue).extra(components).build()); return ApiResponse.success(UKeySignResult.builder().sign(signValue).extra(components).build());
} }
@GetMapping("/masterKeyStatus")
public ApiResponse<MasterKeyStatus.StatusDetail> getMasterKeyStatus() {
return ApiResponse.success(lmkService.getMasterKeyStatus());
}
/** /**
* 恢复主密钥 * 恢复主密钥
* @param masterKeyRestoreDTO * @param masterKeyRestoreDTO

View File

@ -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;
}
}

View File

@ -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;
}
}
}

View File

@ -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.LMK;
import com.cisd.tms.modules.mk.dto.LMKAndIK; import com.cisd.tms.modules.mk.dto.LMKAndIK;
import com.cisd.tms.modules.mk.enums.IKEnums; import com.cisd.tms.modules.mk.enums.IKEnums;
import com.cisd.tms.modules.mk.enums.MasterKeyStatus;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
@ -207,4 +208,14 @@ public class LmkService {
keyComponentList = null; 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();
}
} }