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