diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index d07c85f..7694c76 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -1,8 +1,6 @@ package com.sunyard.sge.database; import com.sunyard.sge.database.pool.HsmLinkInfo; -import com.sunyard.sge.log.LogFactory; -import com.sunyard.sge.pool.CommWorker; import racal.sunyard.main.SydApi4j; import java.util.ArrayList; @@ -61,13 +59,14 @@ public class SydApi4Database extends SydApiBaseFunction { curDataGroup = new ArrayList<>(); curKeyGroup = new ArrayList<>(); + totalLen = 0; } curDataGroup.add(data); curKeyGroup.add(iKeyIndex[i]); - totalLen = data.length; + totalLen += data.length; } @@ -120,12 +119,13 @@ public class SydApi4Database extends SydApiBaseFunction { curDataGroup = new ArrayList<>(); curKeyGroup = new ArrayList<>(); + totalLen = 0; } curDataGroup.add(data); curKeyGroup.add(iKeyIndex[i]); - totalLen = data.length; + totalLen += data.length; } dataGroups.add(curDataGroup); @@ -182,13 +182,14 @@ public class SydApi4Database extends SydApiBaseFunction { curDataGroup = new ArrayList<>(); curKeyGroup = new ArrayList<>(); curMacGroup = new ArrayList<>(); + totalLen = 0; } curDataGroup.add(data); curKeyGroup.add(iKeyIndex[i]); curMacGroup.add(pcMac[i]); - totalLen = data.length; + totalLen += data.length; } dataGroups.add(curDataGroup); diff --git a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java index b5d7f90..5e64715 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java +++ b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java @@ -183,7 +183,6 @@ public class SydApiLongLinkWrap implements SydApi { if ( 0 == iKeyIndex.length ) { return new ArrayList<>(); } - // 将数据进行分组,防止超长。 List> dataGroups = new ArrayList<>(); List> keyGroups = new ArrayList<>(); @@ -206,13 +205,14 @@ public class SydApiLongLinkWrap implements SydApi { curDataGroup = new ArrayList<>(); curKeyGroup = new ArrayList<>(); + totalLen = 0; } curDataGroup.add(data); curKeyGroup.add(iKeyIndex[i]); - totalLen = data.length; + totalLen += data.length; } @@ -259,7 +259,6 @@ public class SydApiLongLinkWrap implements SydApi { if ( 0 == iKeyIndex.length ) { return new String[0]; } - // 将数据进行分组,防止超长。 List> dataGroups = new ArrayList<>(); List> keyGroups = new ArrayList<>(); @@ -282,12 +281,13 @@ public class SydApiLongLinkWrap implements SydApi { curDataGroup = new ArrayList<>(); curKeyGroup = new ArrayList<>(); + totalLen = 0; } curDataGroup.add(data); curKeyGroup.add(iKeyIndex[i]); - totalLen = data.length; + totalLen += data.length; } dataGroups.add(curDataGroup); @@ -323,7 +323,6 @@ public class SydApiLongLinkWrap implements SydApi { @Override public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) { - if ( null == iKeyIndex || null == pcData ) { throw new IllegalArgumentException("批量输入数据为 null"); } @@ -336,7 +335,6 @@ public class SydApiLongLinkWrap implements SydApi { return new boolean[0]; } - // 将数据进行分组,防止超长。 List> dataGroups = new ArrayList<>(); List> keyGroups = new ArrayList<>(); @@ -364,13 +362,14 @@ public class SydApiLongLinkWrap implements SydApi { curDataGroup = new ArrayList<>(); curKeyGroup = new ArrayList<>(); curMacGroup = new ArrayList<>(); + totalLen = 0; } curDataGroup.add(data); curKeyGroup.add(iKeyIndex[i]); curMacGroup.add(pcMac[i]); - totalLen = data.length; + totalLen += data.length; } dataGroups.add(curDataGroup); diff --git a/src/test/java/test/BatchDataTest.java b/src/test/java/test/BatchDataTest.java index 0ef0df9..b161896 100644 --- a/src/test/java/test/BatchDataTest.java +++ b/src/test/java/test/BatchDataTest.java @@ -63,8 +63,8 @@ public class BatchDataTest { SydApiBuilder builder = new SydApiBuilder( new String[]{"192.168.1.129"}, new int[]{8889}, - 10, - 15 + 20, + 30 ); api = builder.build(); @@ -104,6 +104,8 @@ public class BatchDataTest { } } + + @Test public void batchSM4Case2() { // 测试数据 @@ -117,6 +119,34 @@ public class BatchDataTest { } } + @Test + public void batchSM4Case3() { + // 密钥索引 + 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[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]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + 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); + + for (int i = 0; i < data.size(); i++) { + Assert.assertArrayEquals(orgData.get(i), data.get(i)); + } + } + + @Test public void batchSM4CaseZero() { // 测试数据 @@ -157,6 +187,60 @@ public class BatchDataTest { } } + @Test + public void batchMACDataCase2() { + // 密钥索引 + 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[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]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + 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++) { + Assert.assertTrue(checks[i]); + } + } + + @Test + public void batchMACData3() { + // 密钥索引 + 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[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]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + 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++) { + Assert.assertTrue(checks[i]); + } + } + @Test public void batchMACData() { // 测试数据 @@ -170,6 +254,7 @@ public class BatchDataTest { } } + @Test public void batchMACDataZero() { // 测试数据