From f0fcd05acf2442cd8831ccb12902b4883a72c09e Mon Sep 17 00:00:00 2001 From: cheney Date: Thu, 30 Apr 2026 10:29:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20sdf=20=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openapi/service/impl/OpenApiService.java | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) 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 77cc765..455eae6 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 @@ -108,33 +108,34 @@ public class OpenApiService implements IOpenApiService { byte[] hash = new byte[32]; // SM3 哈希长度为 32 字节 IntByReference hashLength = new IntByReference(); - // 使用空指针作为会话句柄(SDFSoft 支持) - Pointer sessionHandle = Pointer.NULL; - // 默认的 SM2 用户 ID(与签名时保持一致) - String userId = "1234567812345678"; + final String userId = "1234567812345678"; - // 初始化哈希(包含公钥和用户 ID) - int ret = sdf.SDF_HashInit(sessionHandle, 0, publicKey, userId, userId.length()); - if (ret != 0) { - return false; - } + return sessionTemplate.withSession("SM2Verify", (sdf, deviceHandle, sessionHandle) -> { - // 更新哈希(添加原始数据) - ret = sdf.SDF_HashUpdate(sessionHandle, origBytes, origBytes.length); - if (ret != 0) { - return false; - } + // 初始化哈希(包含公钥和用户 ID) + sessionTemplate.ensureSuccess( + "SDF_HashInit", + sdf.SDF_HashInit(sessionHandle, 0, publicKey, userId.getBytes(), 16) + ); - // 完成哈希 - ret = sdf.SDF_HashFinal(sessionHandle, hash, hashLength); - if (ret != 0) { - return false; - } + // 更新哈希(添加原始数据) + sessionTemplate.ensureSuccess( + "SDF_HashUpdate", + sdf.SDF_HashUpdate(sessionHandle, origBytes, origBytes.length) + ); + + // 完成哈希 + sessionTemplate.ensureSuccess( + "SDF_HashFinal", + sdf.SDF_HashFinal(sessionHandle, hash, hashLength) + ); + + // 使用 SDF 接口进行 SM2 验签 + int ret = sdf.SDF_ExternalVerify_ECC(sessionHandle, 0, publicKey, hash, hashLength.getValue(), signature); + return ret == 0; + }); - // 使用 SDF 接口进行 SM2 验签 - ret = sdf.SDF_ExternalVerify_ECC(sessionHandle, 0, publicKey, hash, hashLength.getValue(), signature); - return ret == 0; } catch (Exception e) { e.printStackTrace(); return false;