生成超级管理员
This commit is contained in:
parent
1a05ed3c0e
commit
16fb6fa04e
@ -3,9 +3,15 @@ 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.UKeySignDTO;
|
||||
import com.cisd.tms.modules.mk.dto.UKeySignEntity;
|
||||
import com.cisd.tms.modules.mk.dto.UKeySignResult;
|
||||
import com.cisd.tms.modules.mk.service.LmkService;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@ -21,6 +27,8 @@ public class LmkController {
|
||||
private PcieCryptoService pcieCryptoService;
|
||||
@Resource
|
||||
private LmkService lmkService;
|
||||
@Resource
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
/**
|
||||
* 生成主密钥
|
||||
@ -32,5 +40,24 @@ public class LmkController {
|
||||
return ApiResponse.success(lmk);
|
||||
}
|
||||
|
||||
/**
|
||||
* UKey签名并获取主密钥组件
|
||||
* @param uKeySignDTO
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/masterkey/uKeySignAndKeyComponent")
|
||||
public ApiResponse<UKeySignResult> signAndKeyComponent(@RequestBody UKeySignDTO uKeySignDTO) {
|
||||
String iPubKey = lmkService.exportIkPublicKeyHex();
|
||||
String payload;
|
||||
try {
|
||||
payload = objectMapper.writeValueAsString(UKeySignEntity.getInstance(uKeySignDTO, iPubKey));
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new IllegalStateException("serialize sign payload failed", e);
|
||||
}
|
||||
String signValue = lmkService.signIk(payload);
|
||||
int uid = Integer.parseInt(uKeySignDTO.getUid());
|
||||
String components = lmkService.getComponent(uid);
|
||||
return ApiResponse.success(UKeySignResult.builder().sign(signValue).extra(components).build());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,7 +2,10 @@ package com.cisd.tms.modules.mk.service;
|
||||
|
||||
import com.cisd.tms.common.util.DivisionUtils;
|
||||
import com.cisd.tms.common.util.SerializationUtil;
|
||||
import com.cisd.tms.integration.crypto.pcie.jna.EccRefPublicKey;
|
||||
import com.cisd.tms.integration.crypto.pcie.jna.EccSignature;
|
||||
import com.cisd.tms.integration.crypto.pcie.model.BackupDataResult;
|
||||
import com.cisd.tms.integration.crypto.pcie.model.EccInternalSignRequest;
|
||||
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
|
||||
import com.cisd.tms.modules.mk.common.LMKConstant;
|
||||
import com.cisd.tms.modules.mk.dto.KeyComponent;
|
||||
@ -13,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
@ -31,6 +35,7 @@ public class LmkService {
|
||||
|
||||
private List<String> keyComponentList;
|
||||
|
||||
private static final int AUTH_SIGN_KEY_INDEX = IKEnums.KEY_TYPE_AUTH.getCode();
|
||||
|
||||
@Resource
|
||||
private PcieCryptoService pcieCryptoService;
|
||||
@ -112,4 +117,30 @@ public class LmkService {
|
||||
this.keyComponentList = result;
|
||||
}
|
||||
|
||||
public String exportIkPublicKeyHex() {
|
||||
int outBufferSize = new EccRefPublicKey().size();
|
||||
BackupDataResult result = pcieCryptoService.exportSignPublicKeyEcc(AUTH_SIGN_KEY_INDEX, outBufferSize);
|
||||
return Hex.toHexString(result.getData());
|
||||
}
|
||||
|
||||
public String signIk(String rawData) {
|
||||
EccInternalSignRequest request = new EccInternalSignRequest();
|
||||
request.setKeyIndex(AUTH_SIGN_KEY_INDEX);
|
||||
request.setData(rawData.getBytes(StandardCharsets.UTF_8));
|
||||
request.setSignatureBufferSize(new EccSignature().size());
|
||||
BackupDataResult result = pcieCryptoService.eccInternalSign(request);
|
||||
return Hex.toHexString(result.getData());
|
||||
}
|
||||
|
||||
public String getComponent(int uid) {
|
||||
if (keyComponentList == null || keyComponentList.isEmpty()) {
|
||||
throw new IllegalStateException("key components not initialized");
|
||||
}
|
||||
int index = uid - 1;
|
||||
if (index < 0 || index >= keyComponentList.size()) {
|
||||
throw new IllegalArgumentException("invalid component index: " + uid);
|
||||
}
|
||||
return keyComponentList.get(index);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user