diff --git a/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java b/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java index b2ca414..2f7b534 100644 --- a/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java +++ b/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java @@ -2,10 +2,11 @@ package com.cisd.tms.modules.openapi.service.impl; import com.cisd.tms.common.enums.ErrorCode; import com.cisd.tms.common.exception.BizException; +import com.cisd.tms.integration.crypto.pcie.Gm0018AlgorithmIds; import com.cisd.tms.integration.crypto.pcie.PcieSessionTemplate; import com.cisd.tms.integration.crypto.pcie.model.BackupDataResult; +import com.cisd.tms.integration.crypto.pcie.model.EccExternalVerifyRequest; import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest; -import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2VerifyRequest; import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService; import com.cisd.tms.modules.cert.entity.KeyEntity; import com.cisd.tms.modules.cert.service.CertificateService; @@ -14,7 +15,6 @@ import com.cisd.tms.modules.openapi.service.IOpenApiService; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.security.cert.X509Certificate; @@ -96,7 +96,7 @@ public class OpenApiService implements IOpenApiService { @Override public boolean rawVerify(byte[] origBytes, String signature, String dn) { - log.info("===== 开始执行 SM2 验签 ====="); + log.info("===== 开始执行 SM2 外部公钥验签 ====="); // 入参检查 if (origBytes == null || origBytes.length == 0) { @@ -125,21 +125,26 @@ public class OpenApiService implements IOpenApiService { log.info("找到证书: {}", cert.getSubjectDN()); + // 获取证书中的公钥 + byte[] publicKeyBytes = cert.getPublicKey().getEncoded(); + log.info("公钥数据长度: {} bytes", publicKeyBytes.length); + // 解码签名 byte[] sign = java.util.Base64.getDecoder().decode(signature); log.info("签名数据长度: {} bytes", sign.length); - // 验签 - UserKeySm2VerifyRequest request = new UserKeySm2VerifyRequest(); - request.setSignature(sign); + // 使用外部公钥验签 + EccExternalVerifyRequest request = new EccExternalVerifyRequest(); + request.setAlgId(Gm0018AlgorithmIds.SM2_SIGN); + request.setPublicKeyBlob(publicKeyBytes); request.setData(origBytes); - request.setUserId(DEFAULT_SM2_USER_ID); - - log.info("调用密码卡 SM2 验签接口..."); - sdf.userKeyVerifyWithSm2Sm3(request); + request.setSignature(sign); + + log.info("调用密码卡 SM2 外部公钥验签接口..."); + sdf.eccExternalVerify(request); log.info("验签成功"); - log.info("===== SM2 验签完成 ====="); + log.info("===== SM2 外部公钥验签完成 ====="); return true; } catch (Exception e) {