From 1a6f527fbdf8663c6c9a3defd0262f8014146d9e Mon Sep 17 00:00:00 2001 From: liulu Date: Mon, 16 Dec 2024 09:51:46 +0800 Subject: [PATCH] sdf api test --- .../sdf/adapter/SdfApiAdapterFactory.java | 2 +- .../java/com/sunyard/chsm/dto/DeviceDTO.java | 1 + .../src/test/java/sdf/SdfApiServiceTest.java | 3 +- .../sunyard/chsm/sdf/SdfApiAdapterTest.java | 63 ++++++++----------- 4 files changed, 31 insertions(+), 38 deletions(-) diff --git a/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/SdfApiAdapterFactory.java b/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/SdfApiAdapterFactory.java index 78a9fd0..abd329a 100644 --- a/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/SdfApiAdapterFactory.java +++ b/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/SdfApiAdapterFactory.java @@ -58,7 +58,7 @@ public class SdfApiAdapterFactory { } } - public static SdfApiAdapter getProxyRcpAdapter(String ip, Integer port) { + private static SdfApiAdapter getProxyRcpAdapter(String ip, Integer port) { return (SdfApiAdapter) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), new Class[]{SdfApiAdapter.class}, (proxy, method, args) -> { diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/DeviceDTO.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/DeviceDTO.java index 71228a6..91603e4 100644 --- a/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/DeviceDTO.java +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/DeviceDTO.java @@ -121,6 +121,7 @@ public abstract class DeviceDTO { * 管理端口 */ private Integer managePort; + private Integer encKeyIdx; /** * 访问凭证 */ diff --git a/chsm-web-manage/src/test/java/sdf/SdfApiServiceTest.java b/chsm-web-manage/src/test/java/sdf/SdfApiServiceTest.java index 205edac..7702b8b 100644 --- a/chsm-web-manage/src/test/java/sdf/SdfApiServiceTest.java +++ b/chsm-web-manage/src/test/java/sdf/SdfApiServiceTest.java @@ -1,5 +1,6 @@ package sdf; +import com.sunyard.chsm.enums.ManufacturerModelEnum; import com.sunyard.chsm.sdf.SdfApiService; import com.sunyard.chsm.sdf.SingleSdfApiService; import com.sunyard.chsm.sdf.adapter.SdfApiAdapterFactory; @@ -30,7 +31,7 @@ public class SdfApiServiceTest { private final static String ip1 = "172.16.18.41"; private final static int port = 8889; private static final SdfApiService bcService = new SingleSdfApiService(SdfApiAdapterFactory.getBcAdapter()); - private static final SdfApiService sdfService = new SingleSdfApiService(SdfApiAdapterFactory.getProxyRcpAdapter(ip1, port)); + private static final SdfApiService sdfService = new SingleSdfApiService(SdfApiAdapterFactory.newInstance(ManufacturerModelEnum.enc001.getModel(), ip1, port)); private static EccPubKey pubKey; private static EccPriKey priKey; diff --git a/chsm-web-server/src/test/java/com/sunyard/chsm/sdf/SdfApiAdapterTest.java b/chsm-web-server/src/test/java/com/sunyard/chsm/sdf/SdfApiAdapterTest.java index 1c0a42a..51c385c 100644 --- a/chsm-web-server/src/test/java/com/sunyard/chsm/sdf/SdfApiAdapterTest.java +++ b/chsm-web-server/src/test/java/com/sunyard/chsm/sdf/SdfApiAdapterTest.java @@ -1,8 +1,6 @@ package com.sunyard.chsm.sdf; -import com.googlecode.jsonrpc4j.JsonRpcHttpClient; -import com.googlecode.jsonrpc4j.ProxyUtil; -import com.sunyard.chsm.sdf.adapter.RpcSdfAdapter; +import com.sunyard.chsm.enums.ManufacturerModelEnum; import com.sunyard.chsm.sdf.adapter.SdfApiAdapter; import com.sunyard.chsm.sdf.adapter.SdfApiAdapterFactory; import com.sunyard.chsm.sdf.context.AlgId; @@ -13,15 +11,12 @@ import com.sunyard.chsm.sdf.model.EccPriKey; import com.sunyard.chsm.sdf.model.EccPubKey; import com.sunyard.chsm.sdf.model.EccSignature; import com.sunyard.chsm.utils.CodecUtils; -import com.sunyard.chsm.utils.JsonUtils; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import java.net.URL; -import java.util.Collections; import java.util.Optional; /** @@ -37,8 +32,8 @@ class SdfApiAdapterTest { private final static String ip1 = "172.16.18.41"; private final static int port = 8889; private static final SdfApiAdapter bcAdapter = SdfApiAdapterFactory.getBcAdapter(); + private static final SdfApiAdapter sdfAdapter = SdfApiAdapterFactory.newInstance(ManufacturerModelEnum.enc001.getModel(), ip1, port); - private static RpcSdfAdapter rpcSdfAdapter; private static String hd; private static String hs; private static EccPubKey pubKey; @@ -47,13 +42,9 @@ class SdfApiAdapterTest { @BeforeAll public static void before() throws Exception { - JsonRpcHttpClient client = new JsonRpcHttpClient(JsonUtils.objectMapper(), - new URL("http://172.16.18.46:9989/sdf/adapter"), Collections.emptyMap()); - rpcSdfAdapter = ProxyUtil.createClientProxy( - SdfApiAdapterTest.class.getClassLoader(), RpcSdfAdapter.class, client); - hd = rpcSdfAdapter.openDevice(ip1, port, 3000, 3000, 0); - hs = rpcSdfAdapter.openSession(hd); - EccKey eccKey = rpcSdfAdapter.generateKeyPairECC(hs, AlgId.SGD_SM2_3); + hd = sdfAdapter.openDevice(); + hs = sdfAdapter.openSession(hd); + EccKey eccKey = sdfAdapter.generateKeyPairECC(hs, AlgId.SGD_SM2_3); pubKey = com.sunyard.chsm.sdf.model.EccPubKey.fromBytes(eccKey.getPubKey()); priKey = com.sunyard.chsm.sdf.model.EccPriKey.fromBytes(eccKey.getPriKey()); log.info("public key: {}", pubKey.getPubKeyHex()); @@ -62,30 +53,30 @@ class SdfApiAdapterTest { @AfterAll public static void after() { - Optional.ofNullable(hs).ifPresent(rpcSdfAdapter::closeSession); - Optional.ofNullable(hd).ifPresent(rpcSdfAdapter::closeDevice); + Optional.ofNullable(hs).ifPresent(sdfAdapter::closeSession); + Optional.ofNullable(hd).ifPresent(sdfAdapter::closeDevice); } @Test public void getDeviceInfo() { - DeviceInfo deviceInfo = rpcSdfAdapter.getDeviceInfo(hs); + DeviceInfo deviceInfo = sdfAdapter.getDeviceInfo(hs); Assertions.assertNotNull(deviceInfo); log.info("DeviceInfo: {}", deviceInfo); } @Test public void testSymEncAndDec() { - String hk = rpcSdfAdapter.importKey(hs, symKey); - byte[] ecbCipher = rpcSdfAdapter.symEncrypt(hs, hk, AlgId.SGD_SM4_ECB, null, plain.getBytes()); - byte[] ecbPlain = rpcSdfAdapter.symDecrypt(hs, hk, AlgId.SGD_SM4_ECB, null, ecbCipher); + String hk = sdfAdapter.importKey(hs, symKey); + byte[] ecbCipher = sdfAdapter.symEncrypt(hs, hk, AlgId.SGD_SM4_ECB, null, plain.getBytes()); + byte[] ecbPlain = sdfAdapter.symDecrypt(hs, hk, AlgId.SGD_SM4_ECB, null, ecbCipher); log.info("ecb_cipher: {}", CodecUtils.encodeHex(ecbCipher)); Assertions.assertEquals(plain, new String(ecbPlain)); - byte[] cbcCipher = rpcSdfAdapter.symEncrypt(hs, hk, AlgId.SGD_SM4_CBC, iv, plain.getBytes()); + byte[] cbcCipher = sdfAdapter.symEncrypt(hs, hk, AlgId.SGD_SM4_CBC, iv, plain.getBytes()); log.info("cbc_cipher: {}", CodecUtils.encodeHex(cbcCipher)); - byte[] cbcPlain = rpcSdfAdapter.symDecrypt(hs, hk, AlgId.SGD_SM4_CBC, iv, cbcCipher); + byte[] cbcPlain = sdfAdapter.symDecrypt(hs, hk, AlgId.SGD_SM4_CBC, iv, cbcCipher); Assertions.assertEquals(plain, new String(cbcPlain)); - rpcSdfAdapter.destroyKey(hs, hk); + sdfAdapter.destroyKey(hs, hk); Assertions.assertArrayEquals(ecbPlain, cbcPlain); Assertions.assertNotEquals(CodecUtils.encodeHex(ecbCipher), CodecUtils.encodeHex(cbcCipher)); @@ -104,7 +95,7 @@ class SdfApiAdapterTest { @Test public void testSM2EncAndDec() { - EccCipher sdfCipher = rpcSdfAdapter.externalEncryptECC(hs, pubKey, plain.getBytes()); + EccCipher sdfCipher = sdfAdapter.externalEncryptECC(hs, pubKey, plain.getBytes()); log.info("sdf sm2 cipher: {}", sdfCipher.getC1C3C2Hex()); byte[] bcPlain = bcAdapter.externalDecryptECC("", priKey, sdfCipher); log.info("bc sm2 plain: {}", new String(bcPlain)); @@ -112,7 +103,7 @@ class SdfApiAdapterTest { EccCipher bcCipher = bcAdapter.externalEncryptECC("", pubKey, plain.getBytes()); log.info("bc sm2 cipher: {}", bcCipher.getC1C3C2Hex()); - byte[] sm2Plain = rpcSdfAdapter.externalDecryptECC(hs, priKey, bcCipher); + byte[] sm2Plain = sdfAdapter.externalDecryptECC(hs, priKey, bcCipher); log.info("sdf sm2 plain: {}", new String(sm2Plain)); Assertions.assertEquals(plain, new String(sm2Plain)); @@ -122,11 +113,11 @@ class SdfApiAdapterTest { public void testSM2SignAndVerify() { EccSignature bcSign = bcAdapter.externalSignECC("", priKey, plain.getBytes()); log.info("bc sm2 signature: {}", bcSign.getRawSignHex()); - boolean sdfVerified = rpcSdfAdapter.externalVerifyECC(hs, pubKey, plain.getBytes(), bcSign); + boolean sdfVerified = sdfAdapter.externalVerifyECC(hs, pubKey, plain.getBytes(), bcSign); log.info("sdf sm2 verified: {}", sdfVerified); Assertions.assertTrue(sdfVerified); - EccSignature sdfSign = rpcSdfAdapter.externalSignECC(hs, priKey, plain.getBytes()); + EccSignature sdfSign = sdfAdapter.externalSignECC(hs, priKey, plain.getBytes()); log.info("sdf sm2 signature: {}", sdfSign.getRawSignHex()); boolean bcVerified = bcAdapter.externalVerifyECC("", pubKey, plain.getBytes(), sdfSign); log.info("bc sm2 verified: {}", bcVerified); @@ -135,12 +126,12 @@ class SdfApiAdapterTest { @Test public void testHash() { - String newSession = rpcSdfAdapter.openSession(hd); - rpcSdfAdapter.hashInit(newSession, AlgId.SGD_SM3, null, new byte[0]); - rpcSdfAdapter.hashUpdate(newSession, plain.getBytes()); - byte[] hash = rpcSdfAdapter.hashFinish(newSession); + String newSession = sdfAdapter.openSession(hd); + sdfAdapter.hashInit(newSession, AlgId.SGD_SM3, null, new byte[0]); + sdfAdapter.hashUpdate(newSession, plain.getBytes()); + byte[] hash = sdfAdapter.hashFinish(newSession); log.info("sdf hash: {}", CodecUtils.encodeHex(hash)); - rpcSdfAdapter.closeSession(newSession); + sdfAdapter.closeSession(newSession); String bcNewSession = bcAdapter.openSession(""); bcAdapter.hashInit(bcNewSession, AlgId.SGD_SM3, null, new byte[0]); @@ -154,10 +145,10 @@ class SdfApiAdapterTest { @Test public void testSm4Mac() { - String hk = rpcSdfAdapter.importKey(hs, symKey); - byte[] sdfMac = rpcSdfAdapter.calculateMAC(hs, hk, AlgId.SGD_SM4_MAC, iv, plain.getBytes()); + String hk = sdfAdapter.importKey(hs, symKey); + byte[] sdfMac = sdfAdapter.calculateMAC(hs, hk, AlgId.SGD_SM4_MAC, iv, plain.getBytes()); log.info("sdf mac: {}", CodecUtils.encodeHex(sdfMac)); - rpcSdfAdapter.destroyKey(hs, hk); + sdfAdapter.destroyKey(hs, hk); String bchk = bcAdapter.importKey("", symKey); byte[] bcMac = bcAdapter.calculateMAC("", bchk, AlgId.SGD_SM4_MAC, iv, plain.getBytes()); @@ -168,7 +159,7 @@ class SdfApiAdapterTest { @Test public void testRandom() { - byte[] r = rpcSdfAdapter.generateRandom(hs, 64); + byte[] r = sdfAdapter.generateRandom(hs, 64); Assertions.assertEquals(64, r.length); }