生成超级管理员
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.common.api.ApiResponse;
|
||||||
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
|
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.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.cisd.tms.modules.mk.service.LmkService;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
@ -21,6 +27,8 @@ public class LmkController {
|
|||||||
private PcieCryptoService pcieCryptoService;
|
private PcieCryptoService pcieCryptoService;
|
||||||
@Resource
|
@Resource
|
||||||
private LmkService lmkService;
|
private LmkService lmkService;
|
||||||
|
@Resource
|
||||||
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成主密钥
|
* 生成主密钥
|
||||||
@ -32,5 +40,24 @@ public class LmkController {
|
|||||||
return ApiResponse.success(lmk);
|
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.DivisionUtils;
|
||||||
import com.cisd.tms.common.util.SerializationUtil;
|
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.BackupDataResult;
|
||||||
|
import com.cisd.tms.integration.crypto.pcie.model.EccInternalSignRequest;
|
||||||
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
|
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
|
||||||
import com.cisd.tms.modules.mk.common.LMKConstant;
|
import com.cisd.tms.modules.mk.common.LMKConstant;
|
||||||
import com.cisd.tms.modules.mk.dto.KeyComponent;
|
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.bouncycastle.util.encoders.Hex;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -31,6 +35,7 @@ public class LmkService {
|
|||||||
|
|
||||||
private List<String> keyComponentList;
|
private List<String> keyComponentList;
|
||||||
|
|
||||||
|
private static final int AUTH_SIGN_KEY_INDEX = IKEnums.KEY_TYPE_AUTH.getCode();
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PcieCryptoService pcieCryptoService;
|
private PcieCryptoService pcieCryptoService;
|
||||||
@ -112,4 +117,30 @@ public class LmkService {
|
|||||||
this.keyComponentList = result;
|
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