整理代码

This commit is contained in:
cheney 2022-09-08 15:54:42 +08:00
parent b32d2d7c40
commit ce43b10cc6
10 changed files with 744 additions and 173 deletions

View File

@ -28,7 +28,7 @@
<dependency> <dependency>
<groupId>com.sunyard</groupId> <groupId>com.sunyard</groupId>
<artifactId>sydapi4j</artifactId> <artifactId>sydapi4j</artifactId>
<version>1.0.20220805</version> <version>1.13.20220908</version>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -29,7 +29,7 @@ public interface SydApi {
throw new IllegalArgumentException("地址不能为空且等级范围为0到3"); throw new IllegalArgumentException("地址不能为空且等级范围为0到3");
} }
Logger logger = LogFactory.createLogger(pcLogPath, iLogLevel); Logger logger = LogFactory.createLogger(pcLogPath, iLogLevel);
SydApi4j.setLogger(logger); // SydApi4j.setLogger(logger);
} }
/** /**

View File

@ -6,13 +6,18 @@ import com.sunyard.sge.pool.CommWorker;
import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApi4j;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; 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 int BATCH_SIZE = 7680;
// 长连接的所有处理
private static final CommWorker longLinkWorks = new CommWorker(); private static final CommWorker longLinkWorks = new CommWorker();
public SydApi4Database() { public SydApi4Database() {
@ -24,10 +29,6 @@ public class SydApi4Database extends SydApi4Function {
} }
private List<byte[]> super_SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) {
return super.SYD_SM4_BatchData(iKeyIndex, pcData, iFlag);
}
@Override @Override
public List<byte[]> SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) { public List<byte[]> SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) {
// 将数据进行分组防止超长 // 将数据进行分组防止超长
@ -38,45 +39,42 @@ public class SydApi4Database extends SydApi4Function {
List<byte[]> curDataGroup = new ArrayList<>(); List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>(); List<Integer> curKeyGroup = new ArrayList<>();
for (int i = 0 ; i < pcData.size(); i++ ) { for (int i = 0; i < pcData.size(); i++) {
byte[] data = pcData.get( i ); byte[] data = pcData.get(i);
if (null == data) { if (null == data) {
data = new byte[0]; data = new byte[0];
} }
if ( if (
curDataGroup.size() <= 9 // 分组小于等于 9 curDataGroup.size() > 9 // 分组小于等于 9
&& (totalLen + data.length < BATCH_SIZE) // 总大小小于 BATCH_SIZE || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
) { ) { // 扩展包
curDataGroup.add(data);
curKeyGroup.add( iKeyIndex[i] );
totalLen += data.length;
} else {
// 扩展包
dataGroups.add(curDataGroup); dataGroups.add(curDataGroup);
keyGroups.add( curKeyGroup ); keyGroups.add(curKeyGroup);
curDataGroup = new ArrayList<>(); curDataGroup = new ArrayList<>();
curKeyGroup = 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 ); dataGroups.add(curDataGroup);
keyGroups.add( curKeyGroup ); keyGroups.add(curKeyGroup);
// 并发处理 // 并发处理
List<FutureTask<List<byte[]>>> tasks = new ArrayList<>(); List<FutureTask<List<byte[]>>> tasks = new ArrayList<>();
for ( int i = 0; i < dataGroups.size(); i++ ) { for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i; int finalI = i;
FutureTask<List<byte[]>> task = longLinkWorks.fTask(new Callable<List<byte[]>>() { FutureTask<List<byte[]>> task = longLinkWorks.fTask(new Callable<List<byte[]>>() {
@Override @Override
public List<byte[]> call() throws Exception { public List<byte[]> 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); tasks.add(task);
@ -90,26 +88,164 @@ public class SydApi4Database extends SydApi4Function {
return ret; return ret;
} catch (Exception e) { } catch (Exception e) {
throw new SydApiException("并行任务执行失败", 0xC101); throw new SydApiException("并行任务执行失败", 0xC101, e);
} }
} }
@Override @Override
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) { public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
return super.SYD_SM4Mac_BatchData(iKeyIndex, pcData); // 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> 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<FutureTask<String[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<String[]> task = longLinkWorks.fTask(new Callable<String[]>() {
@Override
public String[] call() throws Exception {
return SydApi4Database.super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
}
});
tasks.add(task);
}
try {
List<String> ret = new ArrayList<>();
for (FutureTask<String[]> 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 @Override
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) { public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
return super.SYD_SM4Mac_BatchData(iKeyIndex, pcData, pcMac); // 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
List<List<String>> macGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>();
List<String> 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<FutureTask<boolean[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<boolean[]> task = longLinkWorks.fTask(new Callable<boolean[]>() {
@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<Boolean> ret = new ArrayList<>();
for (FutureTask<boolean[]> 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<Integer> list){ private static int[] toIntArray(List<Integer> list) {
if ( null == list || 0 == list.size() ) { if (null == list || 0 == list.size()) {
return new int[0]; return new int[0];
} }
int[] ia = new int[ list.size() ]; int[] ia = new int[list.size()];
for ( int i = 0 ; i < ia.length; i ++ ) { for (int i = 0; i < ia.length; i++) {
ia[i] = list.get(i);
}
return ia;
}
private static boolean[] toBoolArray(List<Boolean> 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); ia[i] = list.get(i);
} }
return ia; return ia;

View File

@ -17,10 +17,6 @@ import java.util.List;
*/ */
public class SydApi4Function implements SydApi { public class SydApi4Function implements SydApi {
static {
SydApi.SYD_SetLogConfig("./logs/", 0);
}
private SydApi4j[] hsms = null; private SydApi4j[] hsms = null;
private HsmLinkInfo[] linkInfos = null; private HsmLinkInfo[] linkInfos = null;
private ObjectInPool oip = null; private ObjectInPool oip = null;

View File

@ -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<byte[]> SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) {
// 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> 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<FutureTask<List<byte[]>>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<List<byte[]>> task = longLinkWorks.fTask(new Callable<List<byte[]>>() {
@Override
public List<byte[]> call() throws Exception {
return SydApiShortLink.super.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
}
});
tasks.add(task);
}
try {
List<byte[]> ret = new ArrayList<>();
for (FutureTask<List<byte[]>> 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<byte[]> pcData) {
// 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> 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<FutureTask<String[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<String[]> task = longLinkWorks.fTask(new Callable<String[]>() {
@Override
public String[] call() throws Exception {
return SydApiShortLink.super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
}
});
tasks.add(task);
}
try {
List<String> ret = new ArrayList<>();
for (FutureTask<String[]> 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<byte[]> pcData, String[] pcMac) {
// 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
List<List<String>> macGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>();
List<String> 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<FutureTask<boolean[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<boolean[]> task = longLinkWorks.fTask(new Callable<boolean[]>() {
@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<Boolean> ret = new ArrayList<>();
for (FutureTask<boolean[]> 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<Integer> 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<Boolean> 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;
}
}

View File

@ -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<String> task = Workers.getLongLinkWorks().fTask(new Callable<String>() {
@Override
public String call() throws Exception {
return builder.build().SYD_SM3_Hash_ShortData(pcData);
}
});
return task.get();
}
@Override
public LongDataReturn<String, String> 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<byte[]> SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> 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<byte[]> pcData) {
return new String[0];
}
@Override
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
return new boolean[0];
}
@Override
public LongDataReturn<String, String> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) {
return null;
}
@Override
public LongDataReturn<String, Boolean> 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;
}
}

View File

@ -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;
}
}

View File

@ -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();
}
}
}
}

View File

@ -1,22 +1,60 @@
package test; package test;
import com.sunyard.proto.Util; import com.sunyard.proto.Util;
import com.sunyard.sge.database.*; import com.sunyard.sge.database.Consts;
import org.checkerframework.checker.units.qual.A; import com.sunyard.sge.database.SydApi;
import com.sunyard.sge.database.SydApiBuilder;
import org.junit.After; import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
public class BatchDataTest { public class BatchDataTest {
private SydApi api; private SydApi api;
private static class RandomTestData {
private int size;
private int[] keyIdx;
private List<byte[]> data;
public int[] getKeyIdx() {
return keyIdx;
}
public List<byte[]> 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 @Before
public void init() { public void init() {
@ -33,41 +71,122 @@ public class BatchDataTest {
} }
@After @After
public void end(){ public void end() {
if ( null != api ) { if (null != api) {
api.SYD_Disconnect_Ex(); api.SYD_Disconnect_Ex();
} }
} }
@Test @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<byte[]> data = new ArrayList<>(); List<byte[]> data = new ArrayList<>();
data.add( new byte[8] ); data.add(new byte[8]);
data.add( new byte[16] ); data.add(new byte[16]);
data.add( new byte[1024] ); data.add(new byte[1024]);
data.add( new byte[8] ); data.add(new byte[8]);
data.add( new byte[16] ); data.add(new byte[16]);
data.add( new byte[1024] ); data.add(new byte[1024]);
data.add( new byte[8] ); data.add(new byte[8]);
data.add( new byte[16] ); data.add(new byte[16]);
data.add( new byte[1024] ); data.add(new byte[1024]);
data.add( new byte[8] ); data.add(new byte[8]);
data.add( new byte[16] ); data.add(new byte[16]);
data.add( new byte[1024] ); data.add(new byte[1024]);
List<byte[]> encData = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_ENC ); List<byte[]> encData = api.SYD_SM4_BatchData(keyIdx, data, Consts.ECB_ENC);
List<byte[]> orgData = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC ); List<byte[]> orgData = api.SYD_SM4_BatchData(keyIdx, encData, Consts.ECB_DEC);
for ( int i = 0 ; i < data.size() ; i++ ) { for (int i = 0; i < data.size(); i++) {
System.out.println( "HEX=" + Util.bytes2HexString( encData.get( i ) ) ); System.out.println("HEX=" + Util.bytes2HexString(encData.get(i)));
Assert.assertArrayEquals( orgData.get( i ), data.get( i ) ); Assert.assertArrayEquals(orgData.get(i), data.get(i));
} }
} }
@Test
public void batchSM4Case2() {
// 测试数据
RandomTestData data = new RandomTestData();
List<byte[]> encData = api.SYD_SM4_BatchData(data.getKeyIdx(), data.getData(), Consts.ECB_ENC);
List<byte[]> 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<byte[]> encData = api.SYD_SM4_BatchData(data.getKeyIdx(), data.getData(), Consts.ECB_ENC);
List<byte[]> 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<byte[]> 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]);
}
}
} }

View File

@ -1,108 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" name="Maven: com.sunyard:sydapi4j:1.0.20220805" level="project" />
<orderEntry type="library" name="Maven: com.sunyard:proto:1.0-20220804" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-all:2.4.15" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.17.0" level="project" />
<orderEntry type="library" name="Maven: org.owasp:dependency-check-maven:6.1.5" level="project" />
<orderEntry type="library" name="Maven: org.owasp:dependency-check-core:6.1.5" level="project" />
<orderEntry type="library" name="Maven: org.anarres.jdiagnostics:jdiagnostics:1.0.6" level="project" />
<orderEntry type="library" name="Maven: org.whitesource:pecoff4j:0.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-jcs-core:2.2.1" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: com.github.package-url:packageurl-java:1.2.0" level="project" />
<orderEntry type="library" name="Maven: us.springett:cpe-parser:2.0.2" level="project" />
<orderEntry type="library" name="Maven: com.vdurmont:semver4j:3.1.0" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.20" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.9" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-core:8.8.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-analyzers-common:8.8.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-queryparser:8.8.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-queries:8.8.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-sandbox:8.8.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.3" level="project" />
<orderEntry type="library" name="Maven: com.h2database:h2:1.4.199" level="project" />
<orderEntry type="library" name="Maven: org.glassfish:javax.json:1.1.4" level="project" />
<orderEntry type="library" name="Maven: org.jsoup:jsoup:1.13.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-afterburner:2.12.2" level="project" />
<orderEntry type="library" name="Maven: com.h3xstream.retirejs:retirejs-core:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.json:json:20190722" level="project" />
<orderEntry type="library" name="Maven: com.esotericsoftware:minlog:1.3.1" level="project" />
<orderEntry type="library" name="Maven: com.github.spullara.mustache.java:compiler:0.9.6" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.ossindex:ossindex-service-client:1.7.0" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.ossindex:ossindex-service-api:1.7.0" level="project" />
<orderEntry type="library" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.goodies:package-url-java:1.1.1" level="project" />
<orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.28" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.10.4" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.8.0" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
<orderEntry type="library" name="Maven: com.moandjiezana.toml:toml4j:0.7.2" level="project" />
<orderEntry type="library" name="Maven: com.hankcs:aho-corasick-double-array-trie:1.2.2" level="project" />
<orderEntry type="library" name="Maven: commons-validator:commons-validator:1.7" level="project" />
<orderEntry type="library" name="Maven: commons-digester:commons-digester:2.1" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.4" level="project" />
<orderEntry type="library" name="Maven: org.owasp:dependency-check-utils:6.1.5" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.shared:file-management:3.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-plugin-api:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-model:3.0" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.sisu:sisu-inject-plexus:1.4.2" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.sisu:sisu-inject-bean:1.4.2" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.sisu:sisu-guice:noaop:2.1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.shared:maven-shared-io:3.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-compat:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.wagon:wagon-provider-api:2.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.shared:maven-shared-utils:3.0.0" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.plexus:plexus-utils:3.3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.reporting:maven-reporting-api:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.doxia:doxia-sink-api:1.0" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.plexus:plexus-sec-dispatcher:1.4" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.plexus:plexus-cipher:1.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.shared:maven-dependency-tree:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.plexus:plexus-component-annotations:1.6" level="project" />
<orderEntry type="library" name="Maven: org.eclipse.aether:aether-util:0.9.0.M2" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.shared:maven-artifact-transfer:0.13.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-core:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-settings:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-settings-builder:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-repository-metadata:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-model-builder:3.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.maven:maven-aether-provider:3.0" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.aether:aether-impl:1.7" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.aether:aether-spi:1.7" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.aether:aether-api:1.7" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.aether:aether-util:1.7" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.plexus:plexus-interpolation:1.14" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.plexus:plexus-classworlds:2.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-artifact:3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.shared:maven-common-artifact-filters:3.1.0" level="project" />
</component>
</module>