From c563ef91d3a7265e73cc48eafe6f84e1d05bc496 Mon Sep 17 00:00:00 2001 From: cheney Date: Thu, 8 Sep 2022 16:18:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=89=E7=B1=BB=E6=A8=A1=E5=BC=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sunyard/sge/database/SydApi.java | 5 +- .../sunyard/sge/database/SydApi4Database.java | 23 +- .../sunyard/sge/database/SydApi4Function.java | 33 ++- ...ydApiWrap.java => SydApiLongLinkWrap.java} | 27 +- .../sunyard/sge/database/SydApiShortLink.java | 253 ------------------ .../database/{SydApiSM3.java => SydSM3.java} | 11 +- .../database/{SydApiSM4.java => SydSM4.java} | 4 +- ...SydApiSM4Backup.java => SydSM4Backup.java} | 4 +- src/test/java/test/LongDataTest.java | 18 +- 9 files changed, 68 insertions(+), 310 deletions(-) rename src/main/java/com/sunyard/sge/database/{SydApiWrap.java => SydApiLongLinkWrap.java} (73%) delete mode 100644 src/main/java/com/sunyard/sge/database/SydApiShortLink.java rename src/main/java/com/sunyard/sge/database/{SydApiSM3.java => SydSM3.java} (87%) rename src/main/java/com/sunyard/sge/database/{SydApiSM4.java => SydSM4.java} (97%) rename src/main/java/com/sunyard/sge/database/{SydApiSM4Backup.java => SydSM4Backup.java} (98%) diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java index 58026b0..15e9fd3 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi.java +++ b/src/main/java/com/sunyard/sge/database/SydApi.java @@ -2,7 +2,6 @@ package com.sunyard.sge.database; import com.sunyard.sge.log.LogFactory; import org.apache.logging.log4j.Logger; -import racal.sunyard.main.SydApi4j; import java.util.List; @@ -272,9 +271,9 @@ public interface SydApi { ); - public SydApiSM4 initSM4(int iKeyIndex, int ende); + public SydSM4 initSM4(int iKeyIndex, int ende); - public SydApiSM3 initSM3(); + public SydSM3 initSM3(); public SydSM4Mac initSM4Mac(int iKeyIndex); } diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 644415a..fb8b6d0 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -15,7 +15,7 @@ import java.util.concurrent.FutureTask; /** * 主要用于短连接 */ -public class SydApi4Database extends SydApiShortLink { +public class SydApi4Database extends SydApi4Function { private static final int BATCH_SIZE = 7680; // 长连接的所有处理 private static final CommWorker longLinkWorks = new CommWorker(); @@ -229,25 +229,4 @@ public class SydApi4Database extends SydApiShortLink { } } - 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/SydApi4Function.java b/src/main/java/com/sunyard/sge/database/SydApi4Function.java index 73097b8..fa8e5c1 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Function.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Function.java @@ -769,17 +769,42 @@ public class SydApi4Function implements SydApi { @Override - public SydApiSM4 initSM4(int iKeyIndex, int ende) { + public SydSM4 initSM4(int iKeyIndex, int ende) { - return new SydApiSM4(this,iKeyIndex,ende); + return new SydSM4(this,iKeyIndex,ende); } - public SydApiSM3 initSM3() { - return new SydApiSM3(this); + @Override + public SydSM3 initSM3() { + return new SydSM3(this); } @Override public SydSM4Mac initSM4Mac(int iKeyIndex) { return new SydSM4Mac(this, iKeyIndex); } + + + + protected 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; + } + + protected 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/SydApiLongLinkWrap.java similarity index 73% rename from src/main/java/com/sunyard/sge/database/SydApiWrap.java rename to src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java index d5350e1..6487186 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiWrap.java +++ b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java @@ -1,5 +1,6 @@ package com.sunyard.sge.database; +import com.sunyard.SydApiException; import com.sunyard.sge.database.pool.Workers; import java.util.List; @@ -9,11 +10,11 @@ import java.util.concurrent.FutureTask; /** * 长连接的真正执行过程转发到长连接线程池中执行。 */ -public class SydApiWrap implements SydApi{ +public class SydApiLongLinkWrap implements SydApi { private SydApiBuilder builder; - public SydApiWrap(SydApiBuilder builder) { + public SydApiLongLinkWrap(SydApiBuilder builder) { this.builder = builder; } @@ -35,12 +36,26 @@ public class SydApiWrap implements SydApi{ return builder.build().SYD_SM3_Hash_ShortData(pcData); } }); - return task.get(); + try { + return task.get(); + } catch (Exception e) { + throw new SydApiException("并行任务执行失败", 0xC101, e); + } } @Override public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { - return null; + FutureTask> task = Workers.getLongLinkWorks().fTask(new Callable>() { + @Override + public LongDataReturn call() throws Exception { + return builder.build().SYD_SM3_Hash_LongData(pcData,iPkgNum, pcProcData); + } + }); + try { + return task.get(); + } catch (Exception e) { + throw new SydApiException("并行任务执行失败", 0xC101, e); + } } @Override @@ -89,12 +104,12 @@ public class SydApiWrap implements SydApi{ } @Override - public SydApiSM4 initSM4(int iKeyIndex, int ende) { + public SydSM4 initSM4(int iKeyIndex, int ende) { return null; } @Override - public SydApiSM3 initSM3() { + public SydSM3 initSM3() { return null; } diff --git a/src/main/java/com/sunyard/sge/database/SydApiShortLink.java b/src/main/java/com/sunyard/sge/database/SydApiShortLink.java deleted file mode 100644 index 58d0ebf..0000000 --- a/src/main/java/com/sunyard/sge/database/SydApiShortLink.java +++ /dev/null @@ -1,253 +0,0 @@ -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/SydApiSM3.java b/src/main/java/com/sunyard/sge/database/SydSM3.java similarity index 87% rename from src/main/java/com/sunyard/sge/database/SydApiSM3.java rename to src/main/java/com/sunyard/sge/database/SydSM3.java index daafa75..9c6799f 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiSM3.java +++ b/src/main/java/com/sunyard/sge/database/SydSM3.java @@ -3,19 +3,12 @@ package com.sunyard.sge.database; import com.sunyard.SydApiException; -import java.lang.reflect.Array; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class SydApiSM3 { +public class SydSM3 { private boolean is_finished = false; private SydApi api; - private int iPkgNum; private String pcProcData; - public SydApiSM3(SydApi sydApi) { + public SydSM3(SydApi sydApi) { this.api = sydApi; } diff --git a/src/main/java/com/sunyard/sge/database/SydApiSM4.java b/src/main/java/com/sunyard/sge/database/SydSM4.java similarity index 97% rename from src/main/java/com/sunyard/sge/database/SydApiSM4.java rename to src/main/java/com/sunyard/sge/database/SydSM4.java index d1b3f78..7c9dfa4 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiSM4.java +++ b/src/main/java/com/sunyard/sge/database/SydSM4.java @@ -4,7 +4,7 @@ import com.sunyard.SydApiException; import com.sunyard.sge.bytes.BytesQueue; -public class SydApiSM4 { +public class SydSM4 { private SydApi api; private int iKeyIndex; @@ -16,7 +16,7 @@ public class SydApiSM4 { private BytesQueue queue = new BytesQueue(); - public SydApiSM4(SydApi api, int iKeyIndex, int endeFlag) { + public SydSM4(SydApi api, int iKeyIndex, int endeFlag) { this.api = api; this.iFlag = endeFlag; this.iKeyIndex = iKeyIndex; diff --git a/src/main/java/com/sunyard/sge/database/SydApiSM4Backup.java b/src/main/java/com/sunyard/sge/database/SydSM4Backup.java similarity index 98% rename from src/main/java/com/sunyard/sge/database/SydApiSM4Backup.java rename to src/main/java/com/sunyard/sge/database/SydSM4Backup.java index 48d1121..b78a100 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiSM4Backup.java +++ b/src/main/java/com/sunyard/sge/database/SydSM4Backup.java @@ -5,7 +5,7 @@ import com.sunyard.proto.Util; import java.nio.ByteBuffer; -public class SydApiSM4Backup { +public class SydSM4Backup { private SydApi api; private int iKeyIndex; @@ -18,7 +18,7 @@ public class SydApiSM4Backup { ByteBuffer sourceWrap = ByteBuffer.wrap(new byte[0]); - public SydApiSM4Backup(SydApi api, int iKeyIndex, int endeFlag) { + public SydSM4Backup(SydApi api, int iKeyIndex, int endeFlag) { this.api = api; this.iFlag = endeFlag; this.iKeyIndex = iKeyIndex; diff --git a/src/test/java/test/LongDataTest.java b/src/test/java/test/LongDataTest.java index 4c9c0eb..6bc9447 100644 --- a/src/test/java/test/LongDataTest.java +++ b/src/test/java/test/LongDataTest.java @@ -30,7 +30,7 @@ public class LongDataTest { @Test public void sm3_case1() { - SydApiSM3 sm3 = api.initSM3(); + SydSM3 sm3 = api.initSM3(); sm3.update(null); String mac = sm3.digest(); Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac); @@ -38,7 +38,7 @@ public class LongDataTest { @Test public void sm3_case2() { - SydApiSM3 sm3 = api.initSM3(); + SydSM3 sm3 = api.initSM3(); sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678")); String mac = sm3.digest(); Assert.assertEquals("9431C865C84B02C8A7C503F53A6D6C3C66704F8F713D124610314E31B19937F7", mac); @@ -46,7 +46,7 @@ public class LongDataTest { @Test public void sm3_case3() { - SydApiSM3 sm3 = api.initSM3(); + SydSM3 sm3 = api.initSM3(); sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678")); sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678")); String mac = sm3.digest(); @@ -55,7 +55,7 @@ public class LongDataTest { @Test public void sm3_case4() { - SydApiSM3 sm3 = api.initSM3(); + SydSM3 sm3 = api.initSM3(); System.out.print("org="); for (int i = 0; i < 100; i++) { int lucky = new Random().nextInt(4065); @@ -73,7 +73,7 @@ public class LongDataTest { @Test public void sm3_case5() { - SydApiSM3 sm3 = api.initSM3(); + SydSM3 sm3 = api.initSM3(); String mac = sm3.digest(); Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac); } @@ -115,7 +115,7 @@ public class LongDataTest { @Test public void case5() { - SydApiSM4 sydApiSM4 = api.initSM4(1, 1); + SydSM4 sydApiSM4 = api.initSM4(1, 1); byte[] enData = sydApiSM4.finish(); System.out.println(Util.bytes2HexString(enData)); Assert.assertArrayEquals(Util.hexString2Bytes("FF49F76AD3A71651FE1A8A9F0D2A689E"), enData); @@ -123,7 +123,7 @@ public class LongDataTest { @Test public void case6() { - SydApiSM4 sydApiSM4 = api.initSM4(1, 1); + SydSM4 sydApiSM4 = api.initSM4(1, 1); for (int i = 0; i < 10; i++) { int lucky = new Random().nextInt(4065); @@ -144,8 +144,8 @@ public class LongDataTest { int max = 1000; int size = 4065; - SydApiSM4 en = api.initSM4(1, 1); - SydApiSM4 de = api.initSM4(1, 0); + SydSM4 en = api.initSM4(1, 1); + SydSM4 de = api.initSM4(1, 0); ByteBuffer inData = ByteBuffer.allocate(max * size); ByteBuffer enData = ByteBuffer.allocate(max * size + 16);