diff --git a/pom.xml b/pom.xml
index fcede36..827cee5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
com.sunyard
sydapi4j
- 1.0.20220805
+ 1.13.20220908
diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java
index 26d5fd5..58026b0 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi.java
@@ -29,7 +29,7 @@ public interface SydApi {
throw new IllegalArgumentException("地址不能为空且等级范围为0到3");
}
Logger logger = LogFactory.createLogger(pcLogPath, iLogLevel);
- SydApi4j.setLogger(logger);
+// SydApi4j.setLogger(logger);
}
/**
diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java
index 1d5dc00..644415a 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java
@@ -6,13 +6,18 @@ import com.sunyard.sge.pool.CommWorker;
import racal.sunyard.main.SydApi4j;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
-public class SydApi4Database extends SydApi4Function {
+
+/**
+ * 主要用于短连接
+ */
+public class SydApi4Database extends SydApiShortLink {
private static final int BATCH_SIZE = 7680;
+ // 长连接的所有处理
private static final CommWorker longLinkWorks = new CommWorker();
public SydApi4Database() {
@@ -24,10 +29,6 @@ public class SydApi4Database extends SydApi4Function {
}
- private List super_SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) {
- return super.SYD_SM4_BatchData(iKeyIndex, pcData, iFlag);
- }
-
@Override
public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) {
// 将数据进行分组,防止超长。
@@ -38,45 +39,42 @@ public class SydApi4Database extends SydApi4Function {
List curDataGroup = new ArrayList<>();
List curKeyGroup = new ArrayList<>();
- for (int i = 0 ; i < pcData.size(); i++ ) {
- byte[] data = pcData.get( i );
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
if (null == data) {
data = new byte[0];
}
if (
- curDataGroup.size() <= 9 // 分组小于等于 9 个
- && (totalLen + data.length < BATCH_SIZE) // 总大小小于 BATCH_SIZE
- ) {
- curDataGroup.add(data);
- curKeyGroup.add( iKeyIndex[i] );
- totalLen += data.length;
- } else {
- // 扩展包
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) { // 扩展包
dataGroups.add(curDataGroup);
- keyGroups.add( curKeyGroup );
+ keyGroups.add(curKeyGroup);
curDataGroup = new ArrayList<>();
curKeyGroup = new ArrayList<>();
-
- curDataGroup.add(data);
- curKeyGroup.add( iKeyIndex[i] );
-
- totalLen = data.length;
}
+
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+
+ totalLen = data.length;
+
}
- dataGroups.add( curDataGroup );
- keyGroups.add( curKeyGroup );
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
// 并发处理
List>> tasks = new ArrayList<>();
- for ( int i = 0; i < dataGroups.size(); i++ ) {
+ for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask> task = longLinkWorks.fTask(new Callable>() {
@Override
public List call() throws Exception {
- return super_SYD_SM4_BatchData(toIntArray(keyGroups.get( finalI )), dataGroups.get( finalI ), iFlag);
+ return SydApi4Database.super.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
}
});
tasks.add(task);
@@ -90,26 +88,164 @@ public class SydApi4Database extends SydApi4Function {
return ret;
} catch (Exception e) {
- throw new SydApiException("并行任务执行失败", 0xC101);
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
}
}
@Override
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
- return super.SYD_SM4Mac_BatchData(iKeyIndex, pcData);
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) {// 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ }
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+
+ totalLen = data.length;
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ // 并发处理
+ List> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask task = longLinkWorks.fTask(new Callable() {
+ @Override
+ public String[] call() throws Exception {
+ return SydApi4Database.super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask t : tasks) {
+ String[] macs = t.get();
+ ret.addAll(Arrays.asList(macs));
+ }
+ return ret.toArray(new String[0]);
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
}
@Override
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
- return super.SYD_SM4Mac_BatchData(iKeyIndex, pcData, pcMac);
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ List> macGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+ List curMacGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) {
+ // 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+ macGroups.add(curMacGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ curMacGroup = new ArrayList<>();
+ }
+
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+ curMacGroup.add(pcMac[i]);
+ totalLen = data.length;
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+ macGroups.add(curMacGroup);
+
+ // 并发处理
+ List> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask task = longLinkWorks.fTask(new Callable() {
+ @Override
+ public boolean[] call() throws Exception {
+ return SydApi4Database.super.SYD_SM4Mac_BatchData(
+ toIntArray(keyGroups.get(finalI)),
+ dataGroups.get(finalI),
+ macGroups.get(finalI).toArray(new String[0])
+ );
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask t : tasks) {
+ boolean[] rets = t.get();
+ for (boolean r : rets) {
+ ret.add(r);
+ }
+ }
+ return toBoolArray(ret);
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
}
- private static int[] toIntArray(List list){
- if ( null == list || 0 == list.size() ) {
+ private static int[] toIntArray(List list) {
+ if (null == list || 0 == list.size()) {
return new int[0];
}
- int[] ia = new int[ list.size() ];
- for ( int i = 0 ; i < ia.length; i ++ ) {
+ int[] ia = new int[list.size()];
+ for (int i = 0; i < ia.length; i++) {
+ ia[i] = list.get(i);
+ }
+ return ia;
+ }
+
+ private static boolean[] toBoolArray(List list) {
+ if (null == list || 0 == list.size()) {
+ return new boolean[0];
+ }
+ boolean[] ia = new boolean[list.size()];
+ for (int i = 0; i < ia.length; i++) {
ia[i] = list.get(i);
}
return ia;
diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Function.java b/src/main/java/com/sunyard/sge/database/SydApi4Function.java
index b0281d0..73097b8 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi4Function.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi4Function.java
@@ -17,10 +17,6 @@ import java.util.List;
*/
public class SydApi4Function implements SydApi {
- static {
- SydApi.SYD_SetLogConfig("./logs/", 0);
- }
-
private SydApi4j[] hsms = null;
private HsmLinkInfo[] linkInfos = null;
private ObjectInPool oip = null;
diff --git a/src/main/java/com/sunyard/sge/database/SydApiShortLink.java b/src/main/java/com/sunyard/sge/database/SydApiShortLink.java
new file mode 100644
index 0000000..58d0ebf
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/SydApiShortLink.java
@@ -0,0 +1,253 @@
+package com.sunyard.sge.database;
+
+import com.sunyard.SydApiException;
+import com.sunyard.sge.database.pool.HsmLinkInfo;
+import com.sunyard.sge.pool.CommWorker;
+import racal.sunyard.main.SydApi4j;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
+
+
+/**
+ * 主要用于短连接
+ */
+public class SydApiShortLink extends SydApi4Function {
+ private static final int BATCH_SIZE = 7680;
+ // 长连接的所有处理
+ private static final CommWorker longLinkWorks = new CommWorker();
+
+ public SydApiShortLink() {
+ super();
+ }
+
+ public SydApiShortLink(SydApi4j[] hsms, HsmLinkInfo[] linkInfos) {
+ super(hsms, linkInfos);
+ }
+
+
+ @Override
+ public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) {
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) { // 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ }
+
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+
+ totalLen = data.length;
+
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ // 并发处理
+ List>> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask> task = longLinkWorks.fTask(new Callable>() {
+ @Override
+ public List call() throws Exception {
+ return SydApiShortLink.super.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask> t : tasks) {
+ ret.addAll(t.get());
+ }
+ return ret;
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
+ }
+
+ @Override
+ public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) {// 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ }
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+
+ totalLen = data.length;
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ // 并发处理
+ List> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask task = longLinkWorks.fTask(new Callable() {
+ @Override
+ public String[] call() throws Exception {
+ return SydApiShortLink.super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask t : tasks) {
+ String[] macs = t.get();
+ ret.addAll(Arrays.asList(macs));
+ }
+ return ret.toArray(new String[0]);
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
+ }
+
+ @Override
+ public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ List> macGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+ List curMacGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) {
+ // 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+ macGroups.add(curMacGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ curMacGroup = new ArrayList<>();
+ }
+
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+ curMacGroup.add(pcMac[i]);
+ totalLen = data.length;
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+ macGroups.add(curMacGroup);
+
+ // 并发处理
+ List> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask task = longLinkWorks.fTask(new Callable() {
+ @Override
+ public boolean[] call() throws Exception {
+ return SydApiShortLink.super.SYD_SM4Mac_BatchData(
+ toIntArray(keyGroups.get(finalI)),
+ dataGroups.get(finalI),
+ macGroups.get(finalI).toArray(new String[0])
+ );
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask t : tasks) {
+ boolean[] rets = t.get();
+ for (boolean r : rets) {
+ ret.add(r);
+ }
+ }
+ return toBoolArray(ret);
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
+ }
+
+ private static int[] toIntArray(List list) {
+ if (null == list || 0 == list.size()) {
+ return new int[0];
+ }
+ int[] ia = new int[list.size()];
+ for (int i = 0; i < ia.length; i++) {
+ ia[i] = list.get(i);
+ }
+ return ia;
+ }
+
+ private static boolean[] toBoolArray(List list) {
+ if (null == list || 0 == list.size()) {
+ return new boolean[0];
+ }
+ boolean[] ia = new boolean[list.size()];
+ for (int i = 0; i < ia.length; i++) {
+ ia[i] = list.get(i);
+ }
+ return ia;
+ }
+}
diff --git a/src/main/java/com/sunyard/sge/database/SydApiWrap.java b/src/main/java/com/sunyard/sge/database/SydApiWrap.java
new file mode 100644
index 0000000..d5350e1
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/SydApiWrap.java
@@ -0,0 +1,105 @@
+package com.sunyard.sge.database;
+
+import com.sunyard.sge.database.pool.Workers;
+
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
+
+/**
+ * 长连接的真正执行过程转发到长连接线程池中执行。
+ */
+public class SydApiWrap implements SydApi{
+
+ private SydApiBuilder builder;
+
+ public SydApiWrap(SydApiBuilder builder) {
+ this.builder = builder;
+ }
+
+ @Override
+ public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) {
+ throw new UnsupportedOperationException("此对象为长连接专用");
+ }
+
+ @Override
+ public void SYD_Disconnect_Ex() {
+ // pass
+ }
+
+ @Override
+ public String SYD_SM3_Hash_ShortData(byte[] pcData) {
+ FutureTask task = Workers.getLongLinkWorks().fTask(new Callable() {
+ @Override
+ public String call() throws Exception {
+ return builder.build().SYD_SM3_Hash_ShortData(pcData);
+ }
+ });
+ return task.get();
+ }
+
+ @Override
+ public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) {
+ return null;
+ }
+
+ @Override
+ public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) {
+ return new byte[0];
+ }
+
+ @Override
+ public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) {
+ return null;
+ }
+
+ @Override
+ public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) {
+ return new byte[0];
+ }
+
+ @Override
+ public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
+ return new String[0];
+ }
+
+ @Override
+ public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
+ return new boolean[0];
+ }
+
+ @Override
+ public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) {
+ return null;
+ }
+
+ @Override
+ public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) {
+ return null;
+ }
+
+ @Override
+ public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
+ return null;
+ }
+
+ @Override
+ public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) {
+ return false;
+ }
+
+ @Override
+ public SydApiSM4 initSM4(int iKeyIndex, int ende) {
+ return null;
+ }
+
+ @Override
+ public SydApiSM3 initSM3() {
+ return null;
+ }
+
+ @Override
+ public SydSM4Mac initSM4Mac(int iKeyIndex) {
+ return null;
+ }
+}
diff --git a/src/main/java/com/sunyard/sge/database/pool/Workers.java b/src/main/java/com/sunyard/sge/database/pool/Workers.java
new file mode 100644
index 0000000..2614fb5
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/pool/Workers.java
@@ -0,0 +1,19 @@
+package com.sunyard.sge.database.pool;
+
+import com.sunyard.sge.pool.CommWorker;
+
+public class Workers {
+ // 长连接的所有处理
+ private static final CommWorker longLinkWorks = new CommWorker();
+
+ // 短链接 批量处理
+ private static final CommWorker shortLinkWorks = new CommWorker();
+
+ public static CommWorker getLongLinkWorks() {
+ return longLinkWorks;
+ }
+
+ public static CommWorker getShortLinkWorks() {
+ return shortLinkWorks;
+ }
+}
diff --git a/src/test/java/sample/ConnectThread.java b/src/test/java/sample/ConnectThread.java
new file mode 100644
index 0000000..400ecb9
--- /dev/null
+++ b/src/test/java/sample/ConnectThread.java
@@ -0,0 +1,51 @@
+package sample;
+
+import com.sunyard.SydApi;
+import racal.sunyard.main.SydApi4j;
+import racal.sunyard.main.SydApiBuilder;
+
+public class ConnectThread extends Thread {
+
+ public SydApi getApi() {
+ SydApiBuilder builder = new SydApiBuilder().setIp("172.16.18.59");
+ SydApi4j papi = (SydApi4j) builder.build();
+// SydApi4j papi = (SydApi4j) new SydApi4j().connect("172.16.18.59" , 8889, null,1000);
+ return papi;
+ }
+ public static void main(String[] args) {
+
+ // logger.info("测试开始");
+ int n = Runtime.getRuntime().availableProcessors();
+ int max = 1001;
+ Thread[] tList = new Thread[max];
+ for (int i = 0; i < max; i++) {
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ System.out.println(Thread.currentThread().getName() + "已运行");
+ ConnectThread stable = new ConnectThread();
+ SydApi api = stable.getApi();
+ try {
+// SydApi api = stable.getApi();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ });
+ tList[i] = thread;
+ }
+ for (Thread t : tList) {
+ t.start();
+ }
+ for (Thread t : tList) {
+ try {
+ t.join();
+ } catch (InterruptedException e3) {
+ e3.printStackTrace();
+ }
+ }
+
+ }
+}
+
diff --git a/src/test/java/test/BatchDataTest.java b/src/test/java/test/BatchDataTest.java
index 8f4fcb6..3dbe67a 100644
--- a/src/test/java/test/BatchDataTest.java
+++ b/src/test/java/test/BatchDataTest.java
@@ -1,22 +1,60 @@
package test;
import com.sunyard.proto.Util;
-import com.sunyard.sge.database.*;
-import org.checkerframework.checker.units.qual.A;
+import com.sunyard.sge.database.Consts;
+import com.sunyard.sge.database.SydApi;
+import com.sunyard.sge.database.SydApiBuilder;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import java.nio.ByteBuffer;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class BatchDataTest {
private SydApi api;
+ private static class RandomTestData {
+ private int size;
+ private int[] keyIdx;
+ private List data;
+
+ public int[] getKeyIdx() {
+ return keyIdx;
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public RandomTestData(int lucky) {
+ this.size = lucky;
+ this.keyIdx = new int[lucky];
+ this.data = new ArrayList<>();
+ for ( int i = 0 ; i < lucky; i++ ) {
+ byte[] data = new byte[ new Random().nextInt(1024) ];
+ new Random().nextBytes( data );
+ this.data.add( data );
+ }
+ }
+ public RandomTestData() {
+ int lucky = new Random().nextInt(100);
+ this.size = lucky;
+ this.keyIdx = new int[lucky];
+ this.data = new ArrayList<>();
+ for ( int i = 0 ; i < lucky; i++ ) {
+ byte[] data = new byte[ new Random().nextInt(1024) ];
+ new Random().nextBytes( data );
+ this.data.add( data );
+ }
+ }
+ }
@Before
public void init() {
@@ -33,41 +71,122 @@ public class BatchDataTest {
}
@After
- public void end(){
- if ( null != api ) {
+ public void end() {
+ if (null != api) {
api.SYD_Disconnect_Ex();
}
}
-
@Test
- public void batchSM4Case1(){
+ public void batchSM4Case1() {
// 密钥索引
- int[] keyIdx = new int[]{ 0, 1, 2 , 0, 1, 2, 0, 1, 2, 0, 1, 2}; // 12 组
+ int[] keyIdx = new int[]{0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}; // 12 组
// 测试数据
List data = new ArrayList<>();
- data.add( new byte[8] );
- data.add( new byte[16] );
- data.add( new byte[1024] );
- data.add( new byte[8] );
- data.add( new byte[16] );
- data.add( new byte[1024] );
- data.add( new byte[8] );
- data.add( new byte[16] );
- data.add( new byte[1024] );
- data.add( new byte[8] );
- data.add( new byte[16] );
- data.add( new byte[1024] );
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
- List encData = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_ENC );
- List orgData = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC );
+ List encData = api.SYD_SM4_BatchData(keyIdx, data, Consts.ECB_ENC);
+ List orgData = api.SYD_SM4_BatchData(keyIdx, encData, Consts.ECB_DEC);
- for ( int i = 0 ; i < data.size() ; i++ ) {
- System.out.println( "HEX=" + Util.bytes2HexString( encData.get( i ) ) );
- Assert.assertArrayEquals( orgData.get( i ), data.get( i ) );
+ for (int i = 0; i < data.size(); i++) {
+ System.out.println("HEX=" + Util.bytes2HexString(encData.get(i)));
+ Assert.assertArrayEquals(orgData.get(i), data.get(i));
}
}
+ @Test
+ public void batchSM4Case2() {
+ // 测试数据
+ RandomTestData data = new RandomTestData();
+ List encData = api.SYD_SM4_BatchData(data.getKeyIdx(), data.getData(), Consts.ECB_ENC);
+ List orgData = api.SYD_SM4_BatchData(data.getKeyIdx(), encData, Consts.ECB_DEC);
+
+ for (int i = 0; i < data.getSize(); i++) {
+ System.out.println("HEX=" + Util.bytes2HexString(encData.get(i)));
+ Assert.assertArrayEquals(orgData.get(i), data.getData().get(i));
+ }
+ }
+
+ @Test
+ public void batchSM4CaseZero() {
+ // 测试数据
+ RandomTestData data = new RandomTestData(0);
+
+ List encData = api.SYD_SM4_BatchData(data.getKeyIdx(), data.getData(), Consts.ECB_ENC);
+ List orgData = api.SYD_SM4_BatchData(data.getKeyIdx(), encData, Consts.ECB_DEC);
+
+ for (int i = 0; i < data.getSize(); i++) {
+ System.out.println("HEX=" + Util.bytes2HexString(encData.get(i)));
+ Assert.assertArrayEquals(orgData.get(i), data.getData().get(i));
+ }
+ }
+
+ @Test
+ public void batchMACDataCase1() {
+ // 密钥索引
+ int[] keyIdx = new int[]{0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}; // 12 组
+ // 测试数据
+ List data = new ArrayList<>();
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+ data.add(new byte[8]);
+ data.add(new byte[16]);
+ data.add(new byte[1024]);
+
+ String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
+ boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
+
+ for (int i = 0; i < data.size(); i++) {
+ System.out.println("MAC[" + i + "]=" + macs[i]);
+ Assert.assertTrue(checks[i]);
+ }
+ }
+
+ @Test
+ public void batchMACData() {
+ // 测试数据
+ RandomTestData data = new RandomTestData();
+
+ String[] 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++) {
+ System.out.println("MAC[" + i + "]=" + macs[i]);
+ Assert.assertTrue(checks[i]);
+ }
+ }
+
+ @Test
+ public void batchMACDataZero() {
+ // 测试数据
+ RandomTestData data = new RandomTestData(0);
+
+ String[] 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++) {
+ System.out.println("MAC[" + i + "]=" + macs[i]);
+ Assert.assertTrue(checks[i]);
+ }
+ }
}
diff --git a/sydapi-database.iml b/sydapi-database.iml
deleted file mode 100644
index c99d6c7..0000000
--- a/sydapi-database.iml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file