From 09aabbf15864243d313bd1992a2351692b4a11c4 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Wed, 31 Aug 2022 10:40:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0init/update/digest/finish?= =?UTF-8?q?=E9=95=BF=E6=95=B0=E6=8D=AE=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sunyard/sge/database/SydApi.java | 4 +- .../sunyard/sge/database/SydApi4Database.java | 10 ++--- .../com/sunyard/sge/database/SydApiSM4.java | 44 ++++++++++++------- .../com/sunyard/sge/database/SydSM4Mac.java | 23 +++++----- 4 files changed, 45 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java index 8716be1..c580204 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi.java +++ b/src/main/java/com/sunyard/sge/database/SydApi.java @@ -272,9 +272,9 @@ public interface SydApi { ); - public SydApiSM4 initSydApiSM4(SydApi sydApi,int ende, int key); + public SydApiSM4 initSydApiSM4(SydApi sydApi,int iFlag,int ende, int key); public SydApiSM3 initSydApiSM3(SydApi sydApi,int ende, int key); - public SydSM4Mac initSydSM4Mac(SydApi sydApi,int ende, int key); + public SydSM4Mac initSydSM4Mac(SydApi sydApi,int iKeyIndex,int ende, int key); } diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 001d36b..acae937 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -383,7 +383,7 @@ public class SydApi4Database implements SydApi { if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, iFlag); } - if (iFlag == Consts.ECB_DEC && null == pcData || pcData.length == 0) { + if (iFlag == Consts.ECB_DEC && (null == pcData || pcData.length == 0)) { throw new SydApiException(19); } if (null == this.hsms || this.hsms.length < 1) { @@ -768,9 +768,9 @@ public class SydApi4Database implements SydApi { @Override - public SydApiSM4 initSydApiSM4(SydApi sydApi,int ende, int key) { + public SydApiSM4 initSydApiSM4(SydApi sydApi,int iFlag,int ende, int key) { - return new SydApiSM4(sydApi,ende,key); + return new SydApiSM4(sydApi,iFlag,ende,key); } public SydApiSM3 initSydApiSM3(SydApi sydApi,int ende, int key) { @@ -778,8 +778,8 @@ public class SydApi4Database implements SydApi { } @Override - public SydSM4Mac initSydSM4Mac(SydApi sydApi, int ende, int key) { - return new SydSM4Mac(sydApi); + public SydSM4Mac initSydSM4Mac(SydApi sydApi, int iKeyIndex,int ende, int key) { + return new SydSM4Mac(sydApi,iKeyIndex,1,null); } public SydSM4Mac initSydSM4Mac(SydApi sydApi){ diff --git a/src/main/java/com/sunyard/sge/database/SydApiSM4.java b/src/main/java/com/sunyard/sge/database/SydApiSM4.java index 21b2c91..5f09162 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiSM4.java +++ b/src/main/java/com/sunyard/sge/database/SydApiSM4.java @@ -11,23 +11,28 @@ import java.util.List; public class SydApiSM4 { private SydApi api; - private int iKeyIndex; - private byte[] pcdataResult; - private int iPkgNum; + private int iKeyIndex=1; + private byte[] pcdataResult = new byte[0]; + private int iPkgNum = 1; private int iFlag; private int key; private int endeFlag; private boolean is_finished = false; - ByteBuffer sourceWrap = ByteBuffer.wrap(new byte[]{9,9,9}); + ByteBuffer sourceWrap = ByteBuffer.wrap(new byte[0]); - public SydApiSM4(SydApi api, int key, int endeFlag) { + + public SydApiSM4(SydApi api, int key, int endeFlag,int iFlag) { this.api = api; this.key = key; this.endeFlag = endeFlag; + this.iFlag = iFlag; } public void update(byte[] pcData) { + if (null==pcData||pcData.length==0){ + return; + } int plength = pcData.length; if (is_finished) { throw new SydApiException(0); @@ -35,9 +40,6 @@ public class SydApiSM4 { if (plength > 4064) { throw new SydApiException(0); } - if (0 == plength) { - return; - } if (0 == sourceWrap.array().length) { //加密 if (plength < 16) { @@ -79,6 +81,7 @@ public class SydApiSM4 { api.SYD_SM4_LongData(iKeyIndex, bytes, iPkgNum, iFlag); } else { + ByteBuffer bufferResult = ByteBuffer.allocate(sourceWrap.array().length + plength); bufferResult.put(sourceWrap); bufferResult.put(pcData); @@ -86,15 +89,16 @@ public class SydApiSM4 { ByteBuffer buffer = ByteBuffer.wrap(bytes); int remainder = bytes.length % 16; int intercept = bytes.length - remainder; - ByteBuffer byteBuffer = buffer.get(bytes, 0, intercept); + byte[] pcdataByte = new byte[intercept]; + ByteBuffer byteBuffer = buffer.get(pcdataByte, 0, intercept); byte[] bytes1 = new byte[remainder]; byteBuffer.get(bytes1); - this.pcdataResult = bytes; - ByteBuffer bufferResults = ByteBuffer.allocate(sourceWrap.array().length + remainder); - bufferResult.put(bytes1); + this.pcdataResult = pcdataByte; + ByteBuffer bufferResults = ByteBuffer.allocate(remainder); + bufferResults.put(bytes1); sourceWrap = bufferResults; api.SYD_SM4_LongData(iKeyIndex, pcdataResult, iPkgNum, iFlag); - iKeyIndex = 2; + iPkgNum = 2; } } } @@ -104,16 +108,22 @@ public class SydApiSM4 { throw new SydApiException(0); } this.is_finished = true; - if (1 == this.iKeyIndex) { - this.iKeyIndex = 0; - } else if (2 == this.iKeyIndex) { - this.iKeyIndex = 3; + if (1 == this.iPkgNum) { + this.iPkgNum = 0; + } else if (2 == this.iPkgNum) { + this.iPkgNum = 3; } byte[] bytes = api.SYD_SM4_LongData(iKeyIndex, pcdataResult, iPkgNum, iFlag); sourceWrap = null; return bytes; } + public ByteBuffer bufferResult(int plength,byte[] pcData){ + ByteBuffer bufferResult = ByteBuffer.allocate(sourceWrap.array().length + plength); + bufferResult.put(sourceWrap); + bufferResult.put(pcData); + return bufferResult; + } } diff --git a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java index d7779af..a167a02 100644 --- a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java +++ b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java @@ -8,18 +8,17 @@ import java.nio.charset.StandardCharsets; public class SydSM4Mac { private SydApi api; private byte[] last_in_data; - private int iKeyIndex = 1; - private int iPkgNum; + private int iKeyIndex; + private int iPkgNum = 1; private String pcProcData; private boolean is_finished; private String pcMac; - private byte[] pcdataResult; + private byte[] pcdataResult = new byte[0]; ByteBuffer sourceWrap = ByteBuffer.wrap(new byte[0]); public SydSM4Mac(SydApi api, int iKeyIndex, int iPkgNum, String pcProcData) { this.api = api; this.iKeyIndex = iKeyIndex; - this.iPkgNum = iPkgNum; this.pcProcData = pcProcData; } @@ -61,11 +60,11 @@ public class SydSM4Mac { if (null == this.pcMac || "".equals(this.pcMac)) { LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iKeyIndex, pcProcData); pcProcData = stringStringLongDataReturn.getProcData(); - iKeyIndex = 2; + iPkgNum = 2; } else { LongDataReturn stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iKeyIndex, pcProcData, pcMac); pcProcData = stringBooleanLongDataReturn.getProcData(); - iKeyIndex = 2; + iPkgNum = 2; } return this; } @@ -75,16 +74,16 @@ public class SydSM4Mac { throw new SydApiException(0); } this.is_finished = true; - if (1 == this.iKeyIndex) { - this.iKeyIndex = 2; - } else if (2 == this.iKeyIndex) { - this.iKeyIndex = 3; + if (1 == this.iPkgNum) { + this.iPkgNum = 0; + } else if (2 == this.iPkgNum) { + this.iPkgNum = 3; } if (null == this.pcMac || "".equals(this.pcMac)) { - LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, this.pcdataResult, iKeyIndex, pcProcData); + LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, this.pcdataResult, iPkgNum, pcProcData); return stringStringLongDataReturn; } else { - LongDataReturn stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, this.pcdataResult, iKeyIndex, pcProcData, pcMac); + LongDataReturn stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, this.pcdataResult, iPkgNum, pcProcData, pcMac); return stringBooleanLongDataReturn; } }