diff --git a/config.properties b/config.properties
index 5084357..244c4fb 100644
--- a/config.properties
+++ b/config.properties
@@ -3,5 +3,4 @@
debug=true
# 地址列表 (格式: addX=ip:port)
-addr1=172.1.41.129:8889
-addr2=172.1.41.129:8889
+addr1=baishe.fullstack.club:18889
diff --git a/config2.properties b/config2.properties
new file mode 100644
index 0000000..5084357
--- /dev/null
+++ b/config2.properties
@@ -0,0 +1,7 @@
+# 应用配置
+# 调试模式 (true/false)
+debug=true
+
+# 地址列表 (格式: addX=ip:port)
+addr1=172.1.41.129:8889
+addr2=172.1.41.129:8889
diff --git a/pom.xml b/pom.xml
index 2cceca6..2f98ab1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,7 @@
com.sunyard
sydapi4j
- 1.15.20250701
+ 1.15.20250709
org.apache.logging.log4j
@@ -50,9 +50,25 @@
${log.version}
+
+ net.java.dev.jna
+ jna
+ 5.13.0
+
+
+
+
+ src/main/resources
+
+ **/*.so
+
+ false
+
+
+
diff --git a/src/main/java/com/sunyard/sge/bytes/BytesUtil.java b/src/main/java/com/sunyard/sge/bytes/BytesUtil.java
new file mode 100644
index 0000000..42c3e2a
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/bytes/BytesUtil.java
@@ -0,0 +1,20 @@
+package com.sunyard.sge.bytes;
+
+public class BytesUtil {
+ private static final int BLOCK_SIZE = 16;
+ /**
+ * 计算填充后的长度
+ * @param originalLen 原始长度
+ * @return 16字节对齐后的长度
+ */
+ public static int calculatePaddedLength(int originalLen) {
+ if (originalLen <= 0) {
+ return BLOCK_SIZE;
+ }
+ // 如果已经是16的倍数(包括0),则补一个完整的块(16字节)
+ // 否则补足到下一个16的倍数
+ return (originalLen % BLOCK_SIZE == 0)
+ ? originalLen + BLOCK_SIZE
+ : ((originalLen / BLOCK_SIZE) + 1) * BLOCK_SIZE;
+ }
+}
diff --git a/src/main/java/com/sunyard/sge/database/DataAndMac.java b/src/main/java/com/sunyard/sge/database/DataAndMac.java
index 2ea21fc..2d94470 100644
--- a/src/main/java/com/sunyard/sge/database/DataAndMac.java
+++ b/src/main/java/com/sunyard/sge/database/DataAndMac.java
@@ -2,9 +2,9 @@ package com.sunyard.sge.database;
public class DataAndMac {
private byte[] data;
- private String mac;
+ private byte[] mac;
- public DataAndMac(byte[] data, String mac) {
+ public DataAndMac(byte[] data, byte[] mac) {
this.data = data;
this.mac = mac;
}
@@ -17,11 +17,11 @@ public class DataAndMac {
this.data = data;
}
- public String getMac() {
+ public byte[] getMac() {
return mac;
}
- public void setMac(String mac) {
+ public void setMac(byte[] mac) {
this.mac = mac;
}
}
diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java
index 1c026db..854f25a 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi.java
@@ -177,10 +177,7 @@ public interface SydApi {
* @return String[] 数组,长度等于 pcData List 的长度。
* String[] 数组中的每个值为 mac值(固定长度16字节)的 HEX字符串。
*/
- String[] SYD_SM4Mac_BatchData(
- int[] iKeyIndex,
- List pcData
- );
+ public List SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData);
/**
@@ -195,7 +192,7 @@ public interface SydApi {
boolean[] SYD_SM4Mac_BatchData(
int[] iKeyIndex,
List pcData,
- String[] pcMac
+ List pcMac
);
@@ -251,7 +248,7 @@ public interface SydApi {
* @param pcData: 输入。计算mac所需要的数据。
* @return mac值(固定长度16字节)转HEX 字符串格式
*/
- String SYD_SM4Mac_ShortData(
+ byte[] SYD_SM4Mac_ShortData(
int iKeyIndex,
byte[] pcData
);
@@ -268,7 +265,7 @@ public interface SydApi {
boolean SYD_SM4Mac_ShortData(
int iKeyIndex,
byte[] pcData,
- String pcMac
+ byte[] pcMac
);
@@ -300,7 +297,7 @@ public interface SydApi {
int iEncKeyIndex,
int iMacKeyIndex,
byte[] pcData,
- String mac
+ byte[] mac
);
diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java
index 7694c76..344c98e 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java
@@ -83,7 +83,7 @@ public class SydApi4Database extends SydApiBaseFunction {
}
@Override
- public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
+ public List SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
@@ -94,7 +94,7 @@ public class SydApi4Database extends SydApiBaseFunction {
}
if ( 0 == iKeyIndex.length ) {
- return new String[0];
+ return new ArrayList<>();
}
// 将数据进行分组,防止超长。
@@ -132,16 +132,16 @@ public class SydApi4Database extends SydApiBaseFunction {
keyGroups.add(curKeyGroup);
// 排队处理
- List ret = new ArrayList<>();
+ List ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
- String[] macs = super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i));
- ret.addAll(Arrays.asList(macs));
+ List macs = super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i));
+ ret.addAll(macs);
}
- return ret.toArray(new String[0]);
+ return ret;
}
@Override
- public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
+ public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, List pcMac) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
@@ -158,12 +158,12 @@ public class SydApi4Database extends SydApiBaseFunction {
// 将数据进行分组,防止超长。
List> dataGroups = new ArrayList<>();
List> keyGroups = new ArrayList<>();
- List> macGroups = new ArrayList<>();
+ List> macGroups = new ArrayList<>();
int totalLen = 0;
List curDataGroup = new ArrayList<>();
List curKeyGroup = new ArrayList<>();
- List curMacGroup = new ArrayList<>();
+ List curMacGroup = new ArrayList<>();
for (int i = 0; i < pcData.size(); i++) {
byte[] data = pcData.get(i);
@@ -188,7 +188,7 @@ public class SydApi4Database extends SydApiBaseFunction {
curDataGroup.add(data);
curKeyGroup.add(iKeyIndex[i]);
- curMacGroup.add(pcMac[i]);
+ curMacGroup.add(pcMac.get(i));
totalLen += data.length;
}
@@ -203,7 +203,7 @@ public class SydApi4Database extends SydApiBaseFunction {
boolean[] rets = super.SYD_SM4Mac_BatchData(
toIntArray(keyGroups.get(i)),
dataGroups.get(i),
- macGroups.get(i).toArray(new String[0])
+ macGroups.get(i)
);
for (boolean r : rets) {
ret.add(r);
diff --git a/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
index d02c16c..25cdea6 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
@@ -515,14 +515,14 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
- public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
+ public List SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size());
}
if (pcData.isEmpty()) {
- return new String[0];
+ return new ArrayList<>();
}
if (null == this.hsms || this.hsms.length < 1) {
@@ -545,12 +545,12 @@ public class SydApiBaseFunction implements SydApi {
if (isShortLinkMode) {
try {
List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
- String[] ret = new String[list.size()];
+ List ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
- ret[i] = Util.bytes2HexString(mac);
+ ret.add( mac );
}
return ret;
@@ -566,12 +566,12 @@ public class SydApiBaseFunction implements SydApi {
synchronized (api) {
try {
List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
- String[] ret = new String[list.size()];
+ List ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
- ret[i] = Util.bytes2HexString(mac);
+ ret.add( mac );
}
return ret;
@@ -593,10 +593,10 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
- public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
+ public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, List pcMac) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
- log.debug("SYD_SM4Mac_BatchData方法接收参数:iKeyIndex:{}, pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), Arrays.toString(pcMac));
+ log.debug("SYD_SM4Mac_BatchData 方法接收参数:iKeyIndex:{}, pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), pcMac.size());
}
if (pcData.isEmpty()) {
@@ -626,7 +626,7 @@ public class SydApiBaseFunction implements SydApi {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
- ret[i] = pcMac[i].equals(Util.bytes2HexString(mac));
+ ret[i] = Arrays.equals(pcMac.get(i), mac);
}
return ret;
@@ -647,7 +647,7 @@ public class SydApiBaseFunction implements SydApi {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
- ret[i] = pcMac[i].equals(Util.bytes2HexString(mac));
+ ret[i] = Arrays.equals(pcMac.get(i), mac);
}
return ret;
@@ -777,11 +777,11 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
- public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
+ public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024);
}
- public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen) {
+ public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData));
@@ -843,15 +843,15 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
- public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) {
+ public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024, pcMac);
}
- public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen, String pcMac) {
+ public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen, byte[] pcMac) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
- log.debug("SYD_SM4Mac_ShortData方法接收参数:{}", iKeyIndex, Arrays.toString(pcData), pcMac);
+ log.debug("SYD_SM4Mac_ShortData 方法接收参数:{}", iKeyIndex, Util.bytes2HexString(pcData), Util.bytes2HexString(pcMac));
}
if ( null == pcData || pcData.length > limitDataLen ) {
@@ -866,7 +866,7 @@ public class SydApiBaseFunction implements SydApi {
throw new IllegalArgumentException();
}
updateLastUseTime();
- String mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
+ byte[] mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac);
return pcMac.equals(mac);
}
@@ -888,14 +888,14 @@ public class SydApiBaseFunction implements SydApi {
// 参数检查在函数内部
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
// mac 长度放宽到 1024,因为密文填充
- String mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
+ byte[] mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
return new DataAndMac(enData, mac);
}
@Override
- public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
+ public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] mac) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4_CheckMacAndDecrypt_ShortData:k1={} k2={}", iEncKeyIndex, iMacKeyIndex);
@@ -933,10 +933,10 @@ public class SydApiBaseFunction implements SydApi {
}
List enDatas = SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC);
- String[] macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
+ List macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
List ret = new ArrayList();
for ( int i=0 ; i< enDatas.size() ; i++ ) {
- DataAndMac dam = new DataAndMac(enDatas.get(i), macs[i]);
+ DataAndMac dam = new DataAndMac(enDatas.get(i), macs.get(i));
ret.add(dam);
}
return ret;
@@ -961,10 +961,10 @@ public class SydApiBaseFunction implements SydApi {
throw new SydApiException("密钥长度和数据长度不对应", 0x01000001);
}
- String[] macs = new String[pcData.size()];
+ List macs = new ArrayList<>(pcData.size());
Listdatas = new ArrayList<>(pcData.size());
- for ( int i=0 ; i task = builder.getLongLinkWorks().fTask(new Callable() {
+ public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
+ FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
@Override
- public String call() throws Exception {
+ public byte[] call() throws Exception {
return builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData);
}
});
try {
return task.get();
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
@Override
- public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) {
+ public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
@Override
public Boolean call() throws Exception {
@@ -151,6 +177,9 @@ public class SydApiLongLinkWrap implements SydApi {
try {
return task.get();
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
@@ -166,16 +195,19 @@ public class SydApiLongLinkWrap implements SydApi {
byte[] enData = taskEnc.get();
- FutureTask taskMac = builder.getLongLinkWorks().fTask(new Callable() {
+ FutureTask taskMac = builder.getLongLinkWorks().fTask(new Callable() {
@Override
- public String call() throws Exception {
+ public byte[] call() throws Exception {
return builder.get().SYD_SM4Mac_ShortData(iMacKeyIndex, enData);
}
});
- String mac = taskMac.get();
+ byte[] mac = taskMac.get();
return new DataAndMac(enData, mac);
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
@@ -183,8 +215,40 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
try {
+ if ( ! ConnectHandlerManager.isInited() ) {
+ throw new SydApiException(-1);
+ }
- return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
+ int enLen = BytesUtil.calculatePaddedLength(pcData.length);
+ byte[] encData = new byte[enLen];
+ byte[] mac = new byte[16];
+ IntByReference encDataLen = new IntByReference(encData.length);
+
+ int i = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_ShortData(
+ ConnectHandlerManager.getHandler(),
+ iEncKeyIndex,
+ iMacKeyIndex,
+ pcData,
+ pcData.length,
+ encData,
+ encDataLen,
+ mac
+ );
+
+ if ( 0 == i ){
+ byte[] data = new byte[encDataLen.getValue()];
+ if( data.length == encData.length ) {
+ data = encData;
+ } else {
+ System.arraycopy(encData, 0, data, 0, data.length);
+ }
+
+ return new DataAndMac(data, mac);
+ } else {
+ throw new SydApiException(i);
+ }
+
+// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
// // 线程池忙, 使用单线程计算
// if( builder.getLongLinkWorks().threadPoolIsBusy() ) {
@@ -245,53 +309,203 @@ public class SydApiLongLinkWrap implements SydApi {
//
// return new DataAndMac(enData, mac.getData());
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
@Override
- public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public DataAndMacCheck call() throws Exception {
- return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac);
- }
- });
+ public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
+
try {
- return task.get();
+ if ( ! ConnectHandlerManager.isInited() ) {
+ throw new SydApiException(-1);
+ }
+
+ byte[] decryptedData = new byte[pcData.length];
+ IntByReference decryptedDataLen = new IntByReference(decryptedData.length);
+
+
+ int i = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_ShortData(
+ ConnectHandlerManager.getHandler(),
+ iEncKeyIndex,
+ iMacKeyIndex,
+ pcData,
+ pcData.length,
+ macs,
+ decryptedData,
+ decryptedDataLen
+ );
+
+ byte[] data = new byte[decryptedDataLen.getValue()];
+ System.arraycopy(decryptedData, 0, data, 0, data.length);
+ System.out.println("outlen=" + data.length);
+
+ if ( 0 == i ){
+ return new DataAndMacCheck(data, true);
+ } if (0x01000010 == i) {
+ return new DataAndMacCheck(data, false);
+ } else {
+ throw new SydApiException(i);
+ }
} catch (Exception e) {
+ if ( e instanceof SydApiException) {
+ throw e;
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
+
+
+ // FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
+// @Override
+// public DataAndMacCheck call() throws Exception {
+// return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac);
+// }
+// });
+// try {
+// return task.get();
+// } catch (Exception e) {
+// throw new SydApiException("并行任务执行失败", 0xC101, e);
+// }
}
@Override
public List SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public List call() throws Exception {
- return builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
- }
- });
+ if ( ! ConnectHandlerManager.isInited() ) {
+ throw new SydApiException(-1);
+ }
+
try {
- return task.get();
+ int size = pcData.size();
+
+ // 准备输入参数 - 直接使用 byte[][]
+ byte[][] pcDataArray = pcData.toArray(new byte[0][]);
+ int[] iDataLen = pcData.stream()
+ .mapToInt(bytes -> bytes.length)
+ .toArray();
+
+ // 准备输出缓冲区
+ byte[][] pcEncData = new byte[size][];
+ int[] iEncDataLen = new int[size];
+ for (int i = 0; i < size; i++) {
+ int maxEncLen = ((pcData.get(i).length + 15) / 16 * 16);
+ pcEncData[i] = new byte[maxEncLen];
+ iEncDataLen[i] = maxEncLen;
+ }
+
+ byte[] pcMac = new byte[16];
+
+ // 调用加密函数
+ int result = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_BatchData(
+ ConnectHandlerManager.getHandler(),
+ iEncKeyIndex,
+ iMacKeyIndex,
+ pcDataArray,
+ iDataLen,
+ size,
+ pcEncData,
+ iEncDataLen,
+ pcMac);
+
+ if (0 == result) {
+ // 转换结果为Java风格的对象列表
+ List results = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ results.add(new DataAndMac(pcEncData[i], pcMac));
+ }
+
+ return results;
+ } else {
+ throw new SydApiException(result);
+ }
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
+
+// FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
+// @Override
+// public List call() throws Exception {
+// return builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
+// }
+// });
+// try {
+// return task.get();
+// } catch (Exception e) {
+// throw new SydApiException("并行任务执行失败", 0xC101, e);
+// }
+
}
@Override
public List SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public List call() throws Exception {
- return builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
- }
- });
- try {
- return task.get();
- } catch (Exception e) {
- throw new SydApiException("并行任务执行失败", 0xC101, e);
+
+ int size = pcData.size();
+
+ // 准备输入参数
+ byte[][] pcEncData = pcData.stream()
+ .map(DataAndMac::getData)
+ .toArray(byte[][]::new);
+
+ int[] iEncDataLen = pcData.stream()
+ .mapToInt(d -> d.getData().length)
+ .toArray();
+
+ byte[][] pcMac = pcData.stream()
+ .map(d -> d.getMac())
+ .toArray(byte[][]::new);
+
+ // 准备输出缓冲区
+ byte[][] pcOutData = new byte[size][];
+ int[] iOutDataLen = new int[size];
+ for (int i = 0; i < size; i++) {
+ int maxOutLen = pcData.get(i).getData().length;
+ pcOutData[i] = new byte[maxOutLen];
+ iOutDataLen[i] = maxOutLen;
}
+
+ int[] iCheckRet = new int[size];
+
+ // 调用解密函数
+ int result = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_BatchData(
+ ConnectHandlerManager.getHandler(),
+ iEncKeyIndex,
+ iMacKeyIndex,
+ pcEncData,
+ iEncDataLen,
+ pcMac,
+ size,
+ pcOutData,
+ iOutDataLen,
+ iCheckRet);
+
+ if (0 == result) {
+ // 转换结果为Java风格的对象列表
+ List results = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ results.add(new DataAndMacCheck(pcOutData[i], iCheckRet[i] == 0));
+ }
+
+ return results;
+ } else {
+ throw new SydApiException(result);
+ }
+
+ // FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
+// @Override
+// public List call() throws Exception {
+// return builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
+// }
+// });
+// try {
+// return task.get();
+// } catch (Exception e) {
+// throw new SydApiException("并行任务执行失败", 0xC101, e);
+// }
}
@Override
@@ -395,7 +609,7 @@ public class SydApiLongLinkWrap implements SydApi {
}
@Override
- public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
+ public List SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
}
@@ -405,7 +619,7 @@ public class SydApiLongLinkWrap implements SydApi {
}
if ( 0 == iKeyIndex.length ) {
- return new String[0];
+ return new ArrayList<>();
}
// 将数据进行分组,防止超长。
List> dataGroups = new ArrayList<>();
@@ -442,13 +656,13 @@ public class SydApiLongLinkWrap implements SydApi {
keyGroups.add(curKeyGroup);
// 并发处理
- List> tasks = new ArrayList<>();
+ List>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
+ FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
@Override
- public String[] call() throws Exception {
+ public List call() throws Exception {
SydApi api = builder.get();
return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
}
@@ -457,20 +671,23 @@ public class SydApiLongLinkWrap implements SydApi {
}
try {
- List ret = new ArrayList<>();
- for (FutureTask t : tasks) {
- String[] macs = t.get();
- ret.addAll(Arrays.asList(macs));
+ List ret = new ArrayList<>();
+ for (FutureTask> t : tasks) {
+ List macs = t.get();
+ ret.addAll(macs);
}
- return ret.toArray(new String[0]);
+ return ret;
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
@Override
- public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
+ public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, List pcMac) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
}
@@ -486,12 +703,12 @@ public class SydApiLongLinkWrap implements SydApi {
// 将数据进行分组,防止超长。
List> dataGroups = new ArrayList<>();
List> keyGroups = new ArrayList<>();
- List> macGroups = new ArrayList<>();
+ List> macGroups = new ArrayList<>();
int totalLen = 0;
List curDataGroup = new ArrayList<>();
List curKeyGroup = new ArrayList<>();
- List curMacGroup = new ArrayList<>();
+ List curMacGroup = new ArrayList<>();
for (int i = 0; i < pcData.size(); i++) {
byte[] data = pcData.get(i);
@@ -516,7 +733,7 @@ public class SydApiLongLinkWrap implements SydApi {
curDataGroup.add(data);
curKeyGroup.add(iKeyIndex[i]);
- curMacGroup.add(pcMac[i]);
+ curMacGroup.add(pcMac.get(i));
totalLen += data.length;
}
@@ -536,7 +753,7 @@ public class SydApiLongLinkWrap implements SydApi {
return api.SYD_SM4Mac_BatchData(
toIntArray(keyGroups.get(finalI)),
dataGroups.get(finalI),
- macGroups.get(finalI).toArray(new String[0])
+ macGroups.get(finalI)
);
}
});
@@ -554,6 +771,9 @@ public class SydApiLongLinkWrap implements SydApi {
return toBoolArray(ret);
} catch (Exception e) {
+ if ( e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
diff --git a/src/main/java/com/sunyard/sge/plus/ConnectHandlerManager.java b/src/main/java/com/sunyard/sge/plus/ConnectHandlerManager.java
new file mode 100644
index 0000000..c495b11
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/plus/ConnectHandlerManager.java
@@ -0,0 +1,50 @@
+package com.sunyard.sge.plus;
+
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.PointerByReference;
+
+/**
+ * JNA 部分, C 接口的长链接维护。
+ */
+public class ConnectHandlerManager {
+
+ private static PointerByReference phHandle = new PointerByReference();
+ private static Boolean inited = false;
+
+ /**
+ * 初始化链接
+ * @param pcIpList
+ * @param iPortList
+ * @param iConnectTimeOut
+ * @param iDealTimeOut
+ * @return
+ */
+ public static int init(String[] pcIpList,
+ int[] iPortList,
+ int iConnectTimeOut,
+ int iDealTimeOut){
+
+ int connectResult = SydLibrary.INSTANCE.SYD_Connect_Ex(
+ pcIpList,
+ iPortList,
+ pcIpList.length,
+ iConnectTimeOut,
+ iDealTimeOut,
+ 16,
+ phHandle);
+
+ if ( 0 == connectResult ){
+ inited = true;
+ }
+
+ return connectResult;
+ }
+
+ public static boolean isInited(){
+ return inited;
+ }
+
+ public static Pointer getHandler(){
+ return phHandle.getValue();
+ }
+}
diff --git a/src/main/resources/linux-x86-64/libsunyard.so b/src/main/resources/linux-x86-64/libsunyard.so
new file mode 100644
index 0000000..cb6fa8b
Binary files /dev/null and b/src/main/resources/linux-x86-64/libsunyard.so differ
diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java
index 997e9da..2edee5e 100644
--- a/src/test/java/sample/Sample.java
+++ b/src/test/java/sample/Sample.java
@@ -331,7 +331,7 @@ public class Sample
int keyIdx = 0;
// 测试数据
byte[] data = new byte[16];
- String macData = api.SYD_SM4Mac_ShortData( keyIdx , data );
+ byte[] macData = api.SYD_SM4Mac_ShortData( keyIdx , data );
boolean ret = api.SYD_SM4Mac_ShortData( keyIdx , data, macData );
Assert.assertTrue( ret );
}
@@ -345,7 +345,7 @@ public class Sample
data.add( new byte[16] );
data.add( new byte[1024] );
- String[] macs = api.SYD_SM4Mac_BatchData( keyIdx , data);
+ List macs = api.SYD_SM4Mac_BatchData( keyIdx , data);
boolean[] checks = api.SYD_SM4Mac_BatchData( keyIdx , data, macs );
for ( int i = 0 ; i < data.size() ; i++ ) {
diff --git a/src/test/java/test/BatchDataTest.java b/src/test/java/test/BatchDataTest.java
index c44c26c..0f17960 100644
--- a/src/test/java/test/BatchDataTest.java
+++ b/src/test/java/test/BatchDataTest.java
@@ -177,7 +177,7 @@ public class BatchDataTest {
data.add(new byte[16]);
data.add(new byte[1024]);
- String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
for (int i = 0; i < data.size(); i++) {
@@ -204,7 +204,7 @@ public class BatchDataTest {
data.add(new byte[1024]);
data.add(new byte[1024]);
- String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
for (int i = 0; i < data.size(); i++) {
@@ -231,7 +231,7 @@ public class BatchDataTest {
data.add(new byte[1024]);
data.add(new byte[1024]);
- String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
for (int i = 0; i < data.size(); i++) {
@@ -244,7 +244,7 @@ public class BatchDataTest {
// 测试数据
RandomTestData data = new RandomTestData();
- String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
+ List macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
for (int i = 0; i < data.getSize(); i++) {
@@ -258,7 +258,7 @@ public class BatchDataTest {
// 测试数据
RandomTestData data = new RandomTestData(0);
- String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
+ List macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
for (int i = 0; i < data.getSize(); i++) {
diff --git a/src/test/java/test/FuncTest.java b/src/test/java/test/FuncTest.java
index 4a8b137..82a7763 100644
--- a/src/test/java/test/FuncTest.java
+++ b/src/test/java/test/FuncTest.java
@@ -1,94 +1,591 @@
package test;
+import com.sunyard.SydApiException;
+import com.sunyard.proto.Util;
import com.sunyard.sge.database.*;
import com.sunyard.sge.log.LogFactory;
+import com.sunyard.sge.plus.ConnectHandlerManager;
import org.apache.logging.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
/**
* 功能确认
*/
public class FuncTest {
- private SydApi api;
- @Before
- public void init(){
+ public static final int ECB_DEC = 0;
+ public static final int ECB_ENC = 1;
+ private Config config;
+
+ private boolean isShortLink = false;
+ private int connectTimeout = 1000;
+ private int dealTimeout = 2000;
+
+ public FuncTest(Config config){
+ this.config = config;
}
- @Test
- public void syd_Short_Connect_Ex(){
- String[] pcipList = {"192.168.1.129", "192.168.1.129" };
- int[] iportList ={8889,8889};
- SydApi api = new SydApi4Database();
+
+
+ public SydApi connect(){
+ if ( isShortLink ) {
+
+ SydApi api = new SydApi4Database();
+ api.SYD_Short_Connect_Ex(config.getIps(), config.getPorts(), connectTimeout, dealTimeout);
+ return api;
+ }
+
+ else {
+ SydApiBuilder builder = new SydApiBuilder(
+ config.getIps(),
+ config.getPorts(),
+ connectTimeout,
+ dealTimeout
+ );
+ SydApi api = builder.build();
+ return api;
+ }
+ }
+
+
+ public void connectFunc() {
+ isShortLink = true;
+ System.out.println("-------- 切换到短连模式 --------");
+ }
+
+ public void longConnectFunc() {
+ System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------");
+SydApi api = connect();
+ System.out.println("设置长连接参数与获取长连接成功");
+
+ System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n");
+ }
+
+ public void sm3ShortFunc() {
+ System.out.println("-------- SM3短数据功能测试开始 --------");
+
+SydApi api = connect();
+
+ String res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]);
+ String res2 = api.SYD_SM3_Hash_ShortData(new byte[0]);
+
+ if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) {
+ System.out.println("SM3短数据测试成功");
+ } else {
+ System.out.println("SM3短数据测试失败");
+ System.out.println("计算结果:" + res1);
+ System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT1);
+ System.out.println("计算结果:" + res2);
+ System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT2);
+ }
+
try {
- api.SYD_Short_Connect_Ex(pcipList,iportList,10,10);
- } finally {
- if ( null != api ) {
- api.SYD_Disconnect_Ex();
+ api.SYD_SM3_Hash_ShortData(new byte[4096]);
+ System.out.println("SM3短数据超出测试失败");
+ } catch (SydApiException e) {
+ System.out.println("SM3短数据超出错误检测成功");
+ }
+
+
+ System.out.println("-------- SM3短数据功能测试结束 --------\n");
+ }
+
+ public void sm3LongFunc() {
+ System.out.println("-------- SM3长数据功能测试开始 --------");
+SydApi api = connect();
+
+ ISM3 sm3 = api.initSM3();
+ byte[] data = new byte[4064];
+ for (int i = 0; i < 10; i++) {
+ sm3.update(data);
+ }
+ String res1 = sm3.digest();
+
+ data = new byte[0];
+ sm3 = api.initSM3();
+ for (int i = 0; i < 10; i++) {
+ sm3.update(data);
+ }
+
+ String res2 = sm3.digest();
+
+ if (res1.equals(CalcRes.SM3_LONG_RESULT1) && res2.equals(CalcRes.SM3_LONG_RESULT2)) {
+ System.out.println("SM3长数据测试成功");
+ } else {
+ System.out.println("SM3长数据测试失败");
+ System.out.println("计算结果:" + res1);
+ System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT1);
+ System.out.println("计算结果:" + res2);
+ System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT2);
+ }
+
+ System.out.println("-------- SM3长数据功能测试结束 --------\n");
+ }
+
+ public void sm4ShortFunc() {
+ System.out.println("-------- SM4短数据加解密功能测试开始 --------");
+SydApi api = connect();
+ int key = 0;
+
+ byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC);
+ byte[] dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
+
+ byte[] enc2 = api.SYD_SM4_ShortData(key, new byte[0], ECB_ENC);
+ byte[] dec2 = api.SYD_SM4_ShortData(key, enc2, ECB_DEC);
+
+ String res1 = Util.bytes2HexString(enc1);
+ String res2 = Util.bytes2HexString(enc2);
+
+ if (res1.equals(CalcRes.SM4_SHORT_RESULT1) && res2.equals(CalcRes.SM4_SHORT_RESULT2)
+ && Arrays.equals(dec1, new byte[1024]) && Arrays.equals(dec2, new byte[0])) {
+ System.out.println("SM4短数据测试成功");
+ } else {
+ System.out.println("SM4短数据测试失败");
+ System.out.println("加密计算结果:" + res1);
+ System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT1);
+ System.out.println("解密计算结果:" + Util.bytes2HexString(dec1));
+ System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[1024]));
+ System.out.println("加密计算结果:" + res2);
+ System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT2);
+ System.out.println("解密计算结果:" + Util.bytes2HexString(dec2));
+ System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[0]));
+ }
+
+ try {
+ enc1 = api.SYD_SM4_ShortData(key, new byte[1025], ECB_ENC);
+ dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
+ System.out.println("SM4短数据长度超出测试失败");
+ } catch (SydApiException e) {
+ System.out.println("SM4短数据长度超出测试成功");
+ }
+
+ System.out.println("-------- SM4短数据加解密功能测试结束 --------\n");
+ }
+
+ public void sm4LongFunc() {
+ System.out.println("-------- SM4长数据加解密功能测试开始 --------");
+SydApi api = connect();
+ boolean ret = LongDataTest.case1(api);
+ if ( ! ret ){
+ System.out.println("-------- SM4长数据加解密功能测试失败 --------\n");
+ } else {
+ System.out.println("-------- SM4长数据加解密功能测试结束 --------\n");
+ }
+
+ }
+
+ public void sm4macShortFunc() {
+ System.out.println("-------- SM4MAC短数据功能测试开始 --------");
+ SydApi api = connect();
+
+ int key = 0;
+ byte[] data1 = new byte[1024];
+ byte[] data2 = new byte[0];
+
+ byte[] res1 = api.SYD_SM4Mac_ShortData(key, data1);
+ boolean check1 = api.SYD_SM4Mac_ShortData(key, data1, res1);
+
+ byte[] res2 = api.SYD_SM4Mac_ShortData(key, data2);
+ boolean check2 = api.SYD_SM4Mac_ShortData(key, data2, res2);
+
+ if (res1.equals(CalcRes.SM4MAC_SHORT_RESULT1) && res2.equals(CalcRes.SM4MAC_SHORT_RESULT2)
+ && check1 && check2) {
+ System.out.println("SM4MAC短数据测试成功");
+ } else {
+ System.out.println("SM4MAC短数据测试失败");
+ System.out.println("计算结果:" + res1);
+ System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT1);
+ System.out.println("计算结果:" + res2);
+ System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT2);
+ }
+
+ try {
+ res1 = api.SYD_SM4Mac_ShortData(key, new byte[1025]);
+ check1 = api.SYD_SM4Mac_ShortData(key, new byte[1025], res1);
+ System.out.println("SM4MAC短数据长度超出测试失败");
+ } catch (SydApiException e) {
+ System.out.println("SM4MAC短数据长度超出测试成功");
+ }
+
+ System.out.println("-------- SM4MAC短数据功能测试结束 --------\n");
+ }
+
+ public void sm4macLongFunc() {
+ System.out.println("-------- SM4MAC长数据功能测试开始 --------");
+SydApi api = connect();
+
+ byte[] data1 = new byte[4064];
+ int key = 0;
+ ISM4Mac sm4mac = api.initSM4Mac(key);
+ for (int i = 0; i < 10; i++) {
+ sm4mac.update(data1);
+ }
+ String res1 = sm4mac.digest();
+
+ byte[] data2 = new byte[16];
+ sm4mac = api.initSM4Mac(key);
+ for (int i = 0; i < 10; i++) {
+ sm4mac.update(data2);
+ }
+ String res2 = sm4mac.digest();
+
+// c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1))
+// s = opt.hexcheck(SM4MAC_LONG_RESULT1)
+//
+// c2 = opt2.check(hexStringTobytes(SM4MAC_LONG_RESULT2))
+// s2 = opt2.hexcheck(SM4MAC_LONG_RESULT2)
+
+ if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) {
+ System.out.println("SM4MAC长数据测试成功");
+ } else {
+ System.out.println("SM4MAC长数据测试失败");
+ System.out.println("计算结果:" + res1);
+ System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT1);
+ System.out.println("计算结果:" + res2);
+ System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT2);
+ }
+
+
+// try:
+// input = bytes(4080)
+// opt2 = conn.sm4_mac_init(0)
+// for _ in range(10):
+// opt2.update(input)
+// res2 = opt2.digest()
+// System.out.println('SM4MAC长数据长度超出测试失败')
+// except SmxApiException as e:
+// System.out.println('SM4MAC长数据长度超出测试成功')
+//
+// try:
+// input = bytes(17)
+// opt2 = conn.sm4_mac_init(0)
+// for _ in range(10):
+// opt2.update(input)
+// res2 = opt2.digest()
+// System.out.println('SM4MAC长数据16字节未对齐测试失败')
+// except SmxApiException as e:
+// System.out.println('SM4MAC长数据16字节未对齐测试成功')
+//
+// System.out.println('-------- SM4MAC长数据功能测试结束 --------\n')
+ }
+
+ public void sm4BatchFunc() {
+ System.out.println("-------- SM4批量数据加解密功能测试开始 --------");
+SydApi api = connect();
+
+ List data = new ArrayList<>();
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ int[] key = new int[]{0, 0, 0, 0, 0, 0, 0};
+
+
+ List en_data = api.SYD_SM4_BatchData(key, data, ECB_ENC);
+
+ List de_data = api.SYD_SM4_BatchData(key, en_data, ECB_DEC);
+
+ if (en_data.equals(CalcRes.SM4_BATCH_RESULT) && data.equals(de_data)) {
+ System.out.println("SM4批量数据加解密测试成功");
+ } else {
+ System.out.println("SM4批量数据加解密测试失败");
+// System.out.println("加密计算结果:" + en_data);
+ System.out.println("加密预期结果:" + CalcRes.SM4_BATCH_RESULT);
+// System.out.println("解密计算结果:" + de_data);
+// System.out.println("解密预期结果:" + data);
+ }
+
+ System.out.println("-------- SM4批量数据加解密功能测试结束 --------\n");
+ }
+
+ public void sm4macBatchFunc() {
+ System.out.println("-------- SM4MAC批量数据功能测试开始 --------");
+SydApi api = connect();
+
+ List data = new ArrayList<>();
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ int[] keyIdx = new int[]{0, 0, 0, 0};
+
+ List s = api.SYD_SM4Mac_BatchData(keyIdx, data);
+
+ boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s);
+
+ boolean flag = true;
+ if ( null != s) {
+ for (int i = 0; i < check.length; i++) {
+ if (!check[i]) {
+ flag = false;
+ break;
+ }
+ }
+ if (flag) {
+ System.out.println("SM4MAC批量数据测试成功");
+ } else {
+ System.out.println("SM4MAC批量数据测试失败");
+ System.out.println("计算结果:" + check);
+ System.out.println("预期结果:" + new boolean[]{true, true, true, true, true, true, true});
+ }
+ } else {
+ System.out.println("SM4MAC批量数据测试失败");
+ System.out.println("计算结果:" + s);
+ System.out.println("预期结果:" + CalcRes.SM4MAC_BATCH_RESULT);
+ }
+
+ System.out.println("-------- SM4MAC批量数据功能测试结束 --------\n");
+ }
+
+ public void sm4ShortMacFunc() {
+ System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试开始 --------");
+ SydApi api = connect();
+
+ int keyEnc = 0;
+ int keyMac = 0;
+ byte[] data1 = new byte[1024];
+ byte[] data2 = new byte[0];
+ System.out.println("step1");
+ DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
+ System.out.println("step2");
+ DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
+ System.out.println("step3");
+
+
+ try {
+ DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2);
+ System.out.println("step4");
+ }catch ( SydApiException e) {
+ if ( e.getRetCode() == 0x1000001 ) {
+ System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试通过");
+ } else {
+ System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试失败");
+ }
+ }
+
+ try {
+ DataAndMacCheck de_data2 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, new byte[15], new byte[0]);
+ System.out.println("step5");
+ }catch ( SydApiException e) {
+ if ( e.getRetCode() == 0x1000001 ) {
+ System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试通过");
+ } else {
+ System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试失败");
+ }
+ }
+
+
+ try {
+ data1 = new byte[1025];
+ api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
+ System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试失败");
+ } catch (SydApiException e) {
+ System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功");
+ }
+
+ System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
+ }
+
+ public void sm4BatchMacFunc() {
+ System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试开始 --------");
+ SydApi api = connect();
+
+ List data = new ArrayList<>();
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ int[] keyEnc = new int[]{0, 0, 0, 0, 0, 0, 0};
+ int[] keyMac = new int[]{0, 0, 0, 0, 0, 0, 0};
+
+ List en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data);
+ List de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
+
+ boolean flag = true;
+ for (int i = 0; i < de_data.size(); i++) {
+ flag = flag & de_data.get(i).getMacCheck();
+ }
+
+ if (flag) {
+ System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
+ } else {
+ System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
+ System.out.println("加密计算结果:" + en_data);
+ System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_BATCH_RESULT);
+ }
+
+
+ try {
+ data = new ArrayList<>();
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ keyEnc = new int[]{0, 1, 0, 1, 1, 1, 1, 0};
+ keyMac = new int[]{1, 0, 1, 0, 0, 0, 0, 0};
+
+ en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data);
+ de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
+ System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试失败");
+ } catch (SydApiException e) {
+ System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试成功");
+ }
+
+ System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
+ }
+
+
+ public void loggerFunc() {
+ System.out.println("-------- 设置日志配置功能测试开始 --------");
+ SydApi.SYD_SetLogConfig("./logs", 3);
+ System.out.println("日志配置成功,存储路径./logs,级别3");
+ System.out.println("-------- 设置日志配置功能测试结束 --------\n");
+ }
+
+
+ public void funcAll() {
+ this.loggerFunc();
+ this.connectFunc();
+ this.longConnectFunc();
+
+ this.sm3ShortFunc();
+
+
+ this.sm4ShortFunc();
+ this.sm4BatchFunc();
+
+
+ this.sm4macShortFunc();
+ this.sm4macBatchFunc();
+
+
+ this.sm4ShortMacFunc();
+ this.sm4BatchMacFunc();
+
+
+ this.sm4LongFunc();
+ this.sm4macLongFunc();
+ this.sm3LongFunc();
+
+ }
+
+ public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception{
+
+ boolean flag = true;
+ SydApi.SYD_SetLogConfig("./logs", 3);
+ while (flag) {
+ System.out.println("请选择测试项:");
+ System.out.println("1. 日志测试");
+ System.out.println("2. 短链接测试");
+ System.out.println("3. 长链接测试");
+
+ System.out.println("4. SM3短数据");
+
+
+ System.out.println("5. SM4 短数据加解密");
+ System.out.println("6. SM4 批量数据加解密");
+ System.out.println("7. SM4MAC 短数据");
+ System.out.println("8. SM4MAC 批量数据");
+
+ System.out.println("9. SM4短数据加密后生成MAC,解密验证MAC");
+ System.out.println("10. SM4批量数据加密后生成MAC,验证MAC解密");
+
+
+ System.out.println("11. SM4长数据加解密");
+ System.out.println("12. SM4长数据MAC");
+
+
+ System.out.println("13. SM3长数据");
+ System.out.println("-1.退出");
+
+ switch (choise.getAsInt()) {
+ case 1:
+ test.loggerFunc();
+ break;
+ case 2:
+ test.connectFunc();
+ break;
+ case 3:
+ test.longConnectFunc();
+ break;
+ case 4:
+ test.sm3ShortFunc();
+ break;
+
+ case 5:
+ test.sm4ShortFunc();
+ break;
+ case 6:
+ test.sm4BatchFunc();
+ break;
+
+ case 7:
+ test.sm4macShortFunc();
+ break;
+ case 8: {
+ test.sm4macBatchFunc();
+ break;
+ }
+ case 9: {
+ test.sm4ShortMacFunc();
+ break;
+ }
+ case 10: {
+ test.sm4BatchMacFunc();
+ break;
+ }
+ case 11:
+ test.sm4macLongFunc();
+ break;
+ case 12:
+ test.sm4LongFunc();
+ break;
+ case 13:
+ test.sm3LongFunc();
+ break;
+ case -1:
+ flag = false;
+ break;
}
}
}
- @Test
- public void sm3(){
- SydApiBuilder builder = new SydApiBuilder(
- new String[]{ "192.168.1.129" },
- new int[]{ 8889 },
- 10,
- 15
- );
-
- api = builder.build();
- byte[] bytes = api.SYD_SM4_LongData(1, new byte[16], 0, 1);
- String s = Arrays.toString(bytes);
- System.out.println(s);
- }
-
- @Test
- public void originLong() throws Exception {
- SydApiBuilder builder = new SydApiBuilder(new String[]{"192.168.1.129"}, new int[]{8889}, 10, 15);
- SydApi.SYD_SetLogConfig("./logs/",3);
- for (int i = 0; i < 1000; i++) {
- int tmp = i;
- new Thread(() -> {
- SydApi api = builder.build();
- for (int j = 0; j < 20; j++) {
- byte[] bytes = api.SYD_SM4_ShortData(0, (tmp + "t" + j).getBytes(), Consts.ECB_ENC);
- byte[] result = api.SYD_SM4_ShortData(0, bytes, Consts.ECB_DEC);
- }
- }, i + "t").start();
- }
- }
- @Test
- public void originShort() throws Exception {
- SydApi.SYD_SetLogConfig("./logs/",3);
- Logger log = LogFactory.getLogger();
- String[] pcipList = {"192.168.1.129", "192.168.1.129" };
- int[] iportList ={8080,8889};
- for (int i = 0; i < 1000; i++) {
- int tmp = i;
- new Thread(() -> {
- SydApi api = new SydApi4Database();
- try {
- for (int j = 0; j < 20; j++) {
- api.SYD_Short_Connect_Ex(pcipList,iportList,50,15);
- byte[] bytes = api.SYD_SM4_ShortData(0, (tmp + "t" + j).getBytes(), Consts.ECB_ENC);
- byte[] result = api.SYD_SM4_ShortData(0, bytes, Consts.ECB_DEC);
- }
- }
- finally {
- if ( null != api ) {
- api.SYD_Disconnect_Ex();
- }
- } } , i + "t").start();
+ public static void main(String[] args) throws Exception {
+ Config config = config = Config.loadConfig();
+ if (config == null || config.isDebug()) {
+ System.setProperty("com.sunyard.sydapi4j.debug", "true");
}
+
+ System.out.println("ips=" + Arrays.toString(config.getIps()));
+ System.out.println("ports=" + Arrays.toString(config.getPorts()));
+ System.out.println("debug=" + config.isDebug());
+
+ Choise choise = new Choise(args);
+
+ FuncTest funcTest = new FuncTest(config);
+ SydApi.SYD_SetLogConfig("./logs", 3);
+ funcTest.funcMenu(config, choise, funcTest);
+
}
+
}
diff --git a/src/test/java/test/ShortBatchDataTest.java b/src/test/java/test/ShortBatchDataTest.java
index 8df1ca4..64ccd2d 100644
--- a/src/test/java/test/ShortBatchDataTest.java
+++ b/src/test/java/test/ShortBatchDataTest.java
@@ -174,7 +174,7 @@ public class ShortBatchDataTest {
data.add(new byte[16]);
data.add(new byte[1024]);
- String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
for (int i = 0; i < data.size(); i++) {
@@ -201,7 +201,7 @@ public class ShortBatchDataTest {
data.add(new byte[1024]);
data.add(new byte[1024]);
- String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
for (int i = 0; i < data.size(); i++) {
@@ -228,7 +228,7 @@ public class ShortBatchDataTest {
data.add(new byte[1024]);
data.add(new byte[1024]);
- String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
for (int i = 0; i < data.size(); i++) {
@@ -241,7 +241,7 @@ public class ShortBatchDataTest {
// 测试数据
ShortBatchDataTest.RandomTestData data = new ShortBatchDataTest.RandomTestData();
- String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
+ List macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
for (int i = 0; i < data.getSize(); i++) {
@@ -255,7 +255,7 @@ public class ShortBatchDataTest {
// 测试数据
ShortBatchDataTest.RandomTestData data = new ShortBatchDataTest.RandomTestData(0);
- String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
+ List macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
for (int i = 0; i < data.getSize(); i++) {
diff --git a/src/test/java/test/TestAll.java b/src/test/java/test/TestAll.java
index f7c67cc..0c6c3db 100644
--- a/src/test/java/test/TestAll.java
+++ b/src/test/java/test/TestAll.java
@@ -33,6 +33,7 @@ public class TestAll {
}
+
private static void startPerformanceFile() {
try (FileWriter fw = new FileWriter(PERF_RESULT_FILE, true);
BufferedWriter bw = new BufferedWriter(fw)) {
@@ -98,6 +99,7 @@ public class TestAll {
public static void menu1(Config config, Choise choise, TestAll test) throws Exception {
+ FuncTest funcTest = new FuncTest(config);
while ( true ) {
@@ -112,16 +114,17 @@ public class TestAll {
switch (choise.getAsInt()) {
case 1:
SydApi.SYD_SetLogConfig("./logs", 3);
- funcMenu(config, choise, test);
+ funcTest.funcMenu(config, choise, funcTest);
break;
case 2:
- test.funcAll();
+ funcTest.funcAll();
break;
case 3:
SydApi.SYD_SetLogConfig("./logs", 0);
perfMenu(config, choise, test);
break;
case 4:
+ SydApi.SYD_SetLogConfig("./logs", 0);
startPerformanceFile();
test.perfAll();
stopPerformanceFile();
@@ -375,7 +378,7 @@ public class TestAll {
for (int i = 0; i < totalRequest; i++) {
poolEnc.submit(() -> {
SydApi api = Api.get();
- String[] s = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ List s = api.SYD_SM4Mac_BatchData(keyIdx, data);
});
}
poolEnc.shutdown();
@@ -723,574 +726,6 @@ public class TestAll {
System.out.println("-------- SM3长数据性能测试结束 --------");
}
- public void loggerFunc() {
- System.out.println("-------- 设置日志配置功能测试开始 --------");
- SydApi.SYD_SetLogConfig("./logs", 3);
- System.out.println("日志配置成功,存储路径./logs,级别3");
- System.out.println("-------- 设置日志配置功能测试结束 --------\n");
- }
-
- public void connectFunc() {
- System.out.println("-------- 短连接建立与关闭功能测试开始 --------");
-
- System.out.println("-------- 短连接建立与关闭功能测试结束 --------\n");
- }
-
- public void longConnectFunc() {
- System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
- System.out.println("设置长连接参数与获取长连接成功");
-
- System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n");
- }
-
- public void sm3ShortFunc() {
- System.out.println("-------- SM3短数据功能测试开始 --------");
-
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- String res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]);
- String res2 = api.SYD_SM3_Hash_ShortData(new byte[0]);
-
- if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) {
- System.out.println("SM3短数据测试成功");
- } else {
- System.out.println("SM3短数据测试失败");
- System.out.println("计算结果:" + res1);
- System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT1);
- System.out.println("计算结果:" + res2);
- System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT2);
- }
-
- try {
- api.SYD_SM3_Hash_ShortData(new byte[4096]);
- System.out.println("SM3短数据超出测试失败");
- } catch (SydApiException e) {
- System.out.println("SM3短数据超出错误检测成功");
- }
-
-
- System.out.println("-------- SM3短数据功能测试结束 --------\n");
- }
-
- public void sm3LongFunc() {
- System.out.println("-------- SM3长数据功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- ISM3 sm3 = api.initSM3();
- byte[] data = new byte[4064];
- for (int i = 0; i < 10; i++) {
- sm3.update(data);
- }
- String res1 = sm3.digest();
-
- data = new byte[0];
- sm3 = api.initSM3();
- for (int i = 0; i < 10; i++) {
- sm3.update(data);
- }
-
- String res2 = sm3.digest();
-
- if (res1.equals(CalcRes.SM3_LONG_RESULT1) && res2.equals(CalcRes.SM3_LONG_RESULT2)) {
- System.out.println("SM3长数据测试成功");
- } else {
- System.out.println("SM3长数据测试失败");
- System.out.println("计算结果:" + res1);
- System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT1);
- System.out.println("计算结果:" + res2);
- System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT2);
- }
-
- System.out.println("-------- SM3长数据功能测试结束 --------\n");
- }
-
- public void sm4ShortFunc() {
- System.out.println("-------- SM4短数据加解密功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
- int key = 0;
-
- byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC);
- byte[] dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
-
- byte[] enc2 = api.SYD_SM4_ShortData(key, new byte[0], ECB_ENC);
- byte[] dec2 = api.SYD_SM4_ShortData(key, enc2, ECB_DEC);
-
- String res1 = Util.bytes2HexString(enc1);
- String res2 = Util.bytes2HexString(enc2);
-
- if (res1.equals(CalcRes.SM4_SHORT_RESULT1) && res2.equals(CalcRes.SM4_SHORT_RESULT2)
- && Arrays.equals(dec1, new byte[1024]) && Arrays.equals(dec2, new byte[0])) {
- System.out.println("SM4短数据测试成功");
- } else {
- System.out.println("SM4短数据测试失败");
- System.out.println("加密计算结果:" + res1);
- System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT1);
- System.out.println("解密计算结果:" + Util.bytes2HexString(dec1));
- System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[1024]));
- System.out.println("加密计算结果:" + res2);
- System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT2);
- System.out.println("解密计算结果:" + Util.bytes2HexString(dec2));
- System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[0]));
- }
-
- try {
- enc1 = api.SYD_SM4_ShortData(key, new byte[1025], ECB_ENC);
- dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
- System.out.println("SM4短数据长度超出测试失败");
- } catch (SydApiException e) {
- System.out.println("SM4短数据长度超出测试成功");
- }
-
- System.out.println("-------- SM4短数据加解密功能测试结束 --------\n");
- }
-
- public void sm4LongFunc() {
- System.out.println("-------- SM4长数据加解密功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
- boolean ret = LongDataTest.case1(api);
- if ( ! ret ){
- System.out.println("-------- SM4长数据加解密功能测试失败 --------\n");
- } else {
- System.out.println("-------- SM4长数据加解密功能测试结束 --------\n");
- }
-
- }
-
- public void sm4macShortFunc() {
- System.out.println("-------- SM4MAC短数据功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- int key = 0;
- byte[] data1 = new byte[1024];
- byte[] data2 = new byte[0];
-
- String res1 = api.SYD_SM4Mac_ShortData(key, data1);
- boolean check1 = api.SYD_SM4Mac_ShortData(key, data1, res1);
-
- String res2 = api.SYD_SM4Mac_ShortData(key, data2);
- boolean check2 = api.SYD_SM4Mac_ShortData(key, data2, res2);
-
- if (res1.equals(CalcRes.SM4MAC_SHORT_RESULT1) && res2.equals(CalcRes.SM4MAC_SHORT_RESULT2)
- && check1 && check2) {
- System.out.println("SM4MAC短数据测试成功");
- } else {
- System.out.println("SM4MAC短数据测试失败");
- System.out.println("计算结果:" + res1);
- System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT1);
- System.out.println("计算结果:" + res2);
- System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT2);
- }
-
- try {
- res1 = api.SYD_SM4Mac_ShortData(key, new byte[1025]);
- check1 = api.SYD_SM4Mac_ShortData(key, new byte[1025], res1);
- System.out.println("SM4MAC短数据长度超出测试失败");
- } catch (SydApiException e) {
- System.out.println("SM4MAC短数据长度超出测试成功");
- }
-
- System.out.println("-------- SM4MAC短数据功能测试结束 --------\n");
- }
-
- public void sm4macLongFunc() {
- System.out.println("-------- SM4MAC长数据功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- byte[] data1 = new byte[4064];
- int key = 0;
- ISM4Mac sm4mac = api.initSM4Mac(key);
- for (int i = 0; i < 10; i++) {
- sm4mac.update(data1);
- }
- String res1 = sm4mac.digest();
-
- byte[] data2 = new byte[16];
- sm4mac = api.initSM4Mac(key);
- for (int i = 0; i < 10; i++) {
- sm4mac.update(data2);
- }
- String res2 = sm4mac.digest();
-
-// c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1))
-// s = opt.hexcheck(SM4MAC_LONG_RESULT1)
-//
-// c2 = opt2.check(hexStringTobytes(SM4MAC_LONG_RESULT2))
-// s2 = opt2.hexcheck(SM4MAC_LONG_RESULT2)
-
- if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) {
- System.out.println("SM4MAC长数据测试成功");
- } else {
- System.out.println("SM4MAC长数据测试失败");
- System.out.println("计算结果:" + res1);
- System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT1);
- System.out.println("计算结果:" + res2);
- System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT2);
- }
-
-
-// try:
-// input = bytes(4080)
-// opt2 = conn.sm4_mac_init(0)
-// for _ in range(10):
-// opt2.update(input)
-// res2 = opt2.digest()
-// System.out.println('SM4MAC长数据长度超出测试失败')
-// except SmxApiException as e:
-// System.out.println('SM4MAC长数据长度超出测试成功')
-//
-// try:
-// input = bytes(17)
-// opt2 = conn.sm4_mac_init(0)
-// for _ in range(10):
-// opt2.update(input)
-// res2 = opt2.digest()
-// System.out.println('SM4MAC长数据16字节未对齐测试失败')
-// except SmxApiException as e:
-// System.out.println('SM4MAC长数据16字节未对齐测试成功')
-//
-// System.out.println('-------- SM4MAC长数据功能测试结束 --------\n')
- }
-
- public void sm4BatchFunc() {
- System.out.println("-------- SM4批量数据加解密功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- List data = new ArrayList<>();
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- int[] key = new int[]{0, 0, 0, 0, 0, 0, 0};
-
-
- List en_data = api.SYD_SM4_BatchData(key, data, ECB_ENC);
-
- List de_data = api.SYD_SM4_BatchData(key, en_data, ECB_DEC);
-
- if (en_data.equals(CalcRes.SM4_BATCH_RESULT) && data.equals(de_data)) {
- System.out.println("SM4批量数据加解密测试成功");
- } else {
- System.out.println("SM4批量数据加解密测试失败");
-// System.out.println("加密计算结果:" + en_data);
- System.out.println("加密预期结果:" + CalcRes.SM4_BATCH_RESULT);
-// System.out.println("解密计算结果:" + de_data);
-// System.out.println("解密预期结果:" + data);
- }
-
- System.out.println("-------- SM4批量数据加解密功能测试结束 --------\n");
- }
-
- public void sm4macBatchFunc() {
- System.out.println("-------- SM4MAC批量数据功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- List data = new ArrayList<>();
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- int[] keyIdx = new int[]{0, 0, 0, 0};
-
- String[] s = api.SYD_SM4Mac_BatchData(keyIdx, data);
-
- boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s);
-
- boolean flag = true;
- if (Arrays.equals(s, CalcRes.SM4MAC_BATCH_RESULT)) {
- for (int i = 0; i < check.length; i++) {
- if (!check[i]) {
- flag = false;
- break;
- }
- }
- if (flag) {
- System.out.println("SM4MAC批量数据测试成功");
- } else {
- System.out.println("SM4MAC批量数据测试失败");
- System.out.println("计算结果:" + check);
- System.out.println("预期结果:" + new boolean[]{true, true, true, true, true, true, true});
- }
- } else {
- System.out.println("SM4MAC批量数据测试失败");
- System.out.println("计算结果:" + s);
- System.out.println("预期结果:" + CalcRes.SM4MAC_BATCH_RESULT);
- }
-
- System.out.println("-------- SM4MAC批量数据功能测试结束 --------\n");
- }
-
- public void sm4ShortMacFunc() {
- System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- int keyEnc = 0;
- int keyMac = 0;
- byte[] data1 = new byte[1024];
- byte[] data2 = new byte[0];
- DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
- DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
-
- DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2);
- DataAndMacCheck de_data2 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data2.getData(), en_data2.getMac());
-
- if (
- de_data2.getMacCheck()
- ) {
- System.out.println("短数据加密计算MAC,校验MAC解密测试成功");
- } else {
- System.out.println("短数据加密计算MAC,校验MAC解密测试失败");
- System.out.println("加密计算结果:" + en_data1);
- System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_SHORT_RESULT1);
- System.out.println("解密计算结果:" + de_data1);
- System.out.println("解密预期结果:" + data1);
- System.out.println("加密计算结果:" + en_data2);
- System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_SHORT_RESULT2);
- System.out.println("解密计算结果:" + de_data2);
- System.out.println("解密预期结果:" + data2);
- }
-
- try {
- data1 = new byte[1025];
- api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
- System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试失败");
- } catch (SydApiException e) {
- System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功");
- }
-
- System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
- }
-
- public void sm4BatchMacFunc() {
- System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试开始 --------");
- SydApiBuilder builder = new SydApiBuilder(
- config.getIps(),
- config.getPorts(),
- 1000,
- 2000
- );
- SydApi api = builder.build();
-
- List data = new ArrayList<>();
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- int[] keyEnc = new int[]{0, 0, 0, 0, 0, 0, 0};
- int[] keyMac = new int[]{0, 0, 0, 0, 0, 0, 0};
-
- List en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data);
- List de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
-
- boolean flag = true;
- for (int i = 0; i < de_data.size(); i++) {
- flag = flag & de_data.get(i).getMacCheck();
- }
-
- if (flag) {
- System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
- } else {
- System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
- System.out.println("加密计算结果:" + en_data);
- System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_BATCH_RESULT);
- }
-
-
- try {
- data = new ArrayList<>();
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- data.add(new byte[1024]);
- keyEnc = new int[]{0, 1, 0, 1, 1, 1, 1, 0};
- keyMac = new int[]{1, 0, 1, 0, 0, 0, 0, 0};
-
- en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data);
- de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
- System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试失败");
- } catch (SydApiException e) {
- System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试成功");
- }
-
- System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
- }
-
- public void funcAll() {
- this.loggerFunc();
- this.connectFunc();
- this.longConnectFunc();
-
- this.sm3ShortFunc();
-
-
- this.sm4ShortFunc();
- this.sm4BatchFunc();
-
-
- this.sm4macShortFunc();
- this.sm4macBatchFunc();
-
-
- this.sm4ShortMacFunc();
- this.sm4BatchMacFunc();
-
-
- this.sm4LongFunc();
- this.sm4macLongFunc();
- this.sm3LongFunc();
-
- }
-
- public static void funcMenu(Config config, Choise choise, TestAll test) throws Exception{
-
- boolean flag = true;
- SydApi.SYD_SetLogConfig("./logs", 3);
- while (flag) {
- System.out.println("请选择测试项:");
- System.out.println("1. 日志测试");
- System.out.println("2. 短链接测试");
- System.out.println("3. 长链接测试");
-
- System.out.println("4. SM3短数据");
-
-
- System.out.println("5. SM4 短数据加解密");
- System.out.println("6. SM4 批量数据加解密");
- System.out.println("7. SM4MAC 短数据");
- System.out.println("8. SM4MAC 批量数据");
-
- System.out.println("9. SM4短数据加密后生成MAC,解密验证MAC");
- System.out.println("10. SM4批量数据加密后生成MAC,验证MAC解密");
-
-
- System.out.println("11. SM4长数据加解密");
- System.out.println("12. SM4长数据MAC");
-
-
- System.out.println("13. SM3长数据");
- System.out.println("-1.退出");
-
- switch (choise.getAsInt()) {
- case 1:
- test.loggerFunc();
- break;
- case 2:
- test.connectFunc();
- break;
- case 3:
- test.longConnectFunc();
- break;
- case 4:
- test.sm3ShortFunc();
- break;
-
- case 5:
- test.sm4ShortFunc();
- break;
- case 6:
- test.sm4BatchFunc();
- break;
-
- case 7:
- test.sm4macShortFunc();
- break;
- case 8: {
- test.sm4macBatchFunc();
- break;
- }
- case 9: {
- test.sm4ShortMacFunc();
- break;
- }
- case 10: {
- test.sm4BatchMacFunc();
- break;
- }
- case 11:
- test.sm4macLongFunc();
- break;
- case 12:
- test.sm4LongFunc();
- break;
- case 13:
- test.sm3LongFunc();
- break;
- case -1:
- flag = false;
- break;
- }
- }
- }
@@ -1400,9 +835,4 @@ public class TestAll {
}
- void testComm(){
- String hex = "0436000000000000000E453030383130534B303030303030303030303030303030303030413030303030303030303031303030303234303000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
-
- }
-
}
diff --git a/说明.txt b/说明.txt
index c96dca2..9db3a3c 100644
--- a/说明.txt
+++ b/说明.txt
@@ -1,15 +1,14 @@
+#Readme
+
+
+## 主要类说明
SydApi - 接口
-SydApiBaseFunction - 主要用于长连接,由 Pool 创建。
-SydApi4Database - 主要用于短连接,继承自 SydApiBaseFunction
-
-
-
-
-sydapi4j-1.0.20220906.jar
-性能改动查看
-
+SydApiBaseFunction - 通用功能。
+SydApiLongLinkWrap - 用于长连接,包装自 SydApiBaseFunction。
+SydApi4Database - 主要用于短连接,继承自 SydApiBaseFunction。
+## 发布包格式
- doc 文档
- sample 示例代码
- jar
@@ -22,7 +21,13 @@ sydapi4j-1.0.20220906.jar
- sydapi4j-1.0.20220805.jar 加密机通信包
+## 二期需求
+加密带MAC 复合接口长连接四个都是封装自 C。
+
+
+
+## 测试环境
linux测试服务器
电口:172.1.10.245
光口:192.168.100.245