hash 统一为 bytes

This commit is contained in:
cheney 2025-07-11 15:20:01 +08:00
parent 9c212c4f83
commit ff1263b3bc
13 changed files with 149 additions and 70 deletions

BIN
doc/构建文档.docx Normal file

Binary file not shown.

View File

@ -2,5 +2,5 @@ package com.sunyard.sge.database;
public interface ISM3 { public interface ISM3 {
public void update(byte[] pcData); public void update(byte[] pcData);
public String digest(); public byte[] digest();
} }

View File

@ -2,6 +2,6 @@ package com.sunyard.sge.database;
public interface ISM4Mac { public interface ISM4Mac {
public void update(byte[] pcData); public void update(byte[] pcData);
public String digest(); public byte[] digest();
public boolean checkDigest(String mac); public boolean checkDigest(byte[] mac);
} }

View File

@ -92,7 +92,7 @@ public interface SydApi {
* @param pcData输入原始数据 * @param pcData输入原始数据
* @return 哈希值固定长度32字节转HEX 字符串格式 * @return 哈希值固定长度32字节转HEX 字符串格式
*/ */
String SYD_SM3_Hash_ShortData( byte[] SYD_SM3_Hash_ShortData(
byte[] pcData byte[] pcData
); );
@ -110,10 +110,10 @@ public interface SydApi {
* procData过程数据 包序号为1或2时有值字符串格式 * procData过程数据 包序号为1或2时有值字符串格式
* data哈希值固定长度32字节转HEX 字符串格式 * data哈希值固定长度32字节转HEX 字符串格式
*/ */
LongDataReturn<String, String> SYD_SM3_Hash_LongData( LongDataReturn<byte[], byte[]> SYD_SM3_Hash_LongData(
byte[] pcData, byte[] pcData,
int iPkgNum, int iPkgNum,
String pcProcData byte[] pcProcData
); );
@ -209,11 +209,11 @@ public interface SydApi {
* 属性 procData 过程数据 包序号为1或2时有值字符串 * 属性 procData 过程数据 包序号为1或2时有值字符串
* 属性 data 输出的mac值固定长度16字节HEX 字符串 * 属性 data 输出的mac值固定长度16字节HEX 字符串
*/ */
LongDataReturn<String, String> SYD_SM4Mac_LongData( LongDataReturn<byte[], byte[]> SYD_SM4Mac_LongData(
int iKeyIndex, int iKeyIndex,
byte[] pcData, byte[] pcData,
int iPkgNum, int iPkgNum,
String pcProcData byte[] pcProcData
); );
@ -232,12 +232,12 @@ public interface SydApi {
* 属性 procData 过程数据 包序号为1或2时有值字符串 * 属性 procData 过程数据 包序号为1或2时有值字符串
* 属性 data 输出的mac校验结果Boolean 类型true表示校验成功false 表示校验失败 * 属性 data 输出的mac校验结果Boolean 类型true表示校验成功false 表示校验失败
*/ */
LongDataReturn<String, Boolean> SYD_SM4Mac_LongData( LongDataReturn<byte[], Boolean> SYD_SM4Mac_LongData(
int iKeyIndex, int iKeyIndex,
byte[] pcData, byte[] pcData,
int iPkgNum, int iPkgNum,
String pcProcData, byte[] pcProcData,
String pcMac byte[] pcMac
); );

View File

@ -121,7 +121,7 @@ public class SydApiBaseFunction implements SydApi {
} }
@Override @Override
public String SYD_SM3_Hash_ShortData(byte[] pcData) { public byte[] SYD_SM3_Hash_ShortData(byte[] pcData) {
if (LogFactory.iLogLevel == 3) { if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM3_Hash_ShortData方法接收参数pcData{}", Arrays.toString(pcData)); log.debug("SYD_SM3_Hash_ShortData方法接收参数pcData{}", Arrays.toString(pcData));
} }
@ -149,7 +149,7 @@ public class SydApiBaseFunction implements SydApi {
try { try {
byte[] hash = api.SYD_SM3_LongData(pcData, null, 0); byte[] hash = api.SYD_SM3_LongData(pcData, null, 0);
log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash)); log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash));
return Util.bytes2HexString(hash); return hash;
} catch (SydApiException e) { } catch (SydApiException e) {
le = e; le = e;
if (e.getRetCode() < 0) { if (e.getRetCode() < 0) {
@ -163,7 +163,7 @@ public class SydApiBaseFunction implements SydApi {
try { try {
byte[] hash = api.SYD_SM3_LongData(pcData, null, 0); byte[] hash = api.SYD_SM3_LongData(pcData, null, 0);
log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash)); log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash));
return Util.bytes2HexString(hash); return hash;
} catch (SydApiException e) { } catch (SydApiException e) {
le = e; le = e;
if (e.getRetCode() < 0) { if (e.getRetCode() < 0) {
@ -182,7 +182,7 @@ public class SydApiBaseFunction implements SydApi {
} }
@Override @Override
public LongDataReturn<String, String> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { public LongDataReturn<byte[], byte[]> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, byte[] pcProcData) {
Logger log = LogFactory.getLogger(); Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) { if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM3_Hash_LongData 方法接收参数pcData{},iPkgNum{},pcProcData{}", Arrays.toString(pcData), iPkgNum, pcProcData); log.debug("SYD_SM3_Hash_LongData 方法接收参数pcData{},iPkgNum{},pcProcData{}", Arrays.toString(pcData), iPkgNum, pcProcData);
@ -193,7 +193,7 @@ public class SydApiBaseFunction implements SydApi {
} }
byte[] procData = null; byte[] procData = null;
if (2 == iPkgNum || 3 == iPkgNum) { if (2 == iPkgNum || 3 == iPkgNum) {
procData = Util.hexString2Bytes(pcProcData); procData = pcProcData;
log.debug("Util.hexString2Bytes方法返回值{}", Arrays.toString(procData)); log.debug("Util.hexString2Bytes方法返回值{}", Arrays.toString(procData));
} }
@ -209,9 +209,9 @@ public class SydApiBaseFunction implements SydApi {
byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum);
log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash)); log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash));
if (0 == iPkgNum || 3 == iPkgNum) { if (0 == iPkgNum || 3 == iPkgNum) {
return new LongDataReturn<String, String>(null, Util.bytes2HexString(hash)); return new LongDataReturn<byte[], byte[]>(null, hash);
} else { } else {
return new LongDataReturn<String, String>(Util.bytes2HexString(hash), null); return new LongDataReturn<byte[], byte[]>(hash, null);
} }
} catch (SydApiException e) { } catch (SydApiException e) {
le = e; le = e;
@ -227,9 +227,9 @@ public class SydApiBaseFunction implements SydApi {
byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum);
log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash)); log.debug("api.SYD_SM3_LongData方法返回值{}", Arrays.toString(hash));
if (0 == iPkgNum || 3 == iPkgNum) { if (0 == iPkgNum || 3 == iPkgNum) {
return new LongDataReturn<String, String>(null, Util.bytes2HexString(hash)); return new LongDataReturn<byte[], byte[]>(null, hash);
} else { } else {
return new LongDataReturn<String, String>(Util.bytes2HexString(hash), null); return new LongDataReturn<byte[], byte[]>(hash, null);
} }
} catch (SydApiException e) { } catch (SydApiException e) {
le = e; le = e;
@ -669,7 +669,7 @@ public class SydApiBaseFunction implements SydApi {
} }
@Override @Override
public LongDataReturn<String, String> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { public LongDataReturn<byte[], byte[]> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData) {
Logger log = LogFactory.getLogger(); Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) { if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_LongData方法接收参数iKeyIndex{},pcData{},iPkgNum{},pcProcData{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData); log.debug("SYD_SM4Mac_LongData方法接收参数iKeyIndex{},pcData{},iPkgNum{},pcProcData{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData);
@ -684,7 +684,7 @@ public class SydApiBaseFunction implements SydApi {
// 仅一包 第一包 忽略 pcProcData 参数 // 仅一包 第一包 忽略 pcProcData 参数
if (Consts.PkgNumAll != iPkgNum && Consts.PkgNumHead != iPkgNum) { if (Consts.PkgNumAll != iPkgNum && Consts.PkgNumHead != iPkgNum) {
iv = pcProcData.getBytes(); iv = pcProcData;
} }
SydApiException le = new SydApiException(-1); SydApiException le = new SydApiException(-1);
updateLastUseTime(); updateLastUseTime();
@ -706,10 +706,10 @@ public class SydApiBaseFunction implements SydApi {
// 仅一包 尾包 返回最终结果 // 仅一包 尾包 返回最终结果
if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) { if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) {
return new LongDataReturn<>(null, Util.bytes2HexString(mac)); return new LongDataReturn<>(null, mac);
} else { } else {
// 返回中间值 // 返回中间值
return new LongDataReturn<>(Util.bytes2HexString(mac), null); return new LongDataReturn<>(mac, null);
} }
} catch (SydApiException e) { } catch (SydApiException e) {
@ -735,10 +735,10 @@ public class SydApiBaseFunction implements SydApi {
// 仅一包 尾包 返回最终结果 // 仅一包 尾包 返回最终结果
if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) { if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) {
return new LongDataReturn<>(null, Util.bytes2HexString(mac)); return new LongDataReturn<>(null, mac);
} else { } else {
// 返回中间值 // 返回中间值
return new LongDataReturn<>(Util.bytes2HexString(mac), null); return new LongDataReturn<>(mac, null);
} }
} catch (SydApiException e) { } catch (SydApiException e) {
@ -759,13 +759,13 @@ public class SydApiBaseFunction implements SydApi {
} }
@Override @Override
public LongDataReturn<String, Boolean> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) { public LongDataReturn<byte[], Boolean> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData, byte[] pcMac) {
Logger log = LogFactory.getLogger(); Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) { if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_LongData方法接收参数iKeyIndex{},pcData{},iPkgNum{},pcProcData{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData, pcMac); log.debug("SYD_SM4Mac_LongData方法接收参数iKeyIndex{}, iPkgNum{},pcProcData{}", iKeyIndex, iPkgNum, pcProcData);
} }
updateLastUseTime(); updateLastUseTime();
LongDataReturn<String, String> ret = SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData); LongDataReturn<byte[], byte[]> ret = SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData);
// 仅一包 尾包 返回最终结果 // 仅一包 尾包 返回最终结果
if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) { if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) {

View File

@ -40,10 +40,10 @@ public class SydApiLongLinkWrap implements SydApi {
} }
@Override @Override
public String SYD_SM3_Hash_ShortData(byte[] pcData) { public byte[] SYD_SM3_Hash_ShortData(byte[] pcData) {
FutureTask<String> task = builder.getLongLinkWorks().fTask(new Callable<String>() { FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
@Override @Override
public String call() throws Exception { public byte[] call() throws Exception {
return builder.get().SYD_SM3_Hash_ShortData(pcData); return builder.get().SYD_SM3_Hash_ShortData(pcData);
} }
}); });
@ -58,10 +58,10 @@ public class SydApiLongLinkWrap implements SydApi {
} }
@Override @Override
public LongDataReturn<String, String> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { public LongDataReturn<byte[], byte[]> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, byte[] pcProcData) {
FutureTask<LongDataReturn<String, String>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<String, String>>() { FutureTask<LongDataReturn<byte[], byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<byte[], byte[]>>() {
@Override @Override
public LongDataReturn<String, String> call() throws Exception { public LongDataReturn<byte[], byte[]> call() throws Exception {
return builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData); return builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData);
} }
}); });
@ -113,10 +113,10 @@ public class SydApiLongLinkWrap implements SydApi {
@Override @Override
public LongDataReturn<String, String> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { public LongDataReturn<byte[], byte[]> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData) {
FutureTask<LongDataReturn<String, String>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<String, String>>() { FutureTask<LongDataReturn<byte[], byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<byte[], byte[]>>() {
@Override @Override
public LongDataReturn<String, String> call() throws Exception { public LongDataReturn<byte[], byte[]> call() throws Exception {
return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData); return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData);
} }
}); });
@ -131,10 +131,10 @@ public class SydApiLongLinkWrap implements SydApi {
} }
@Override @Override
public LongDataReturn<String, Boolean> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) { public LongDataReturn<byte[], Boolean> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData, byte[] pcMac) {
FutureTask<LongDataReturn<String, Boolean>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<String, Boolean>>() { FutureTask<LongDataReturn<byte[], Boolean>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<byte[], Boolean>>() {
@Override @Override
public LongDataReturn<String, Boolean> call() throws Exception { public LongDataReturn<byte[], Boolean> call() throws Exception {
return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData, pcMac); return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData, pcMac);
} }
}); });

View File

@ -6,7 +6,7 @@ import com.sunyard.SydApiException;
public class SydSM3 implements ISM3 { public class SydSM3 implements ISM3 {
private boolean is_finished = false; private boolean is_finished = false;
private SydApi api; private SydApi api;
private String pcProcData; private byte[] pcProcData;
public SydSM3(SydApi sydApi) { public SydSM3(SydApi sydApi) {
this.api = sydApi; this.api = sydApi;
@ -23,24 +23,24 @@ public class SydSM3 implements ISM3 {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
if (null == this.pcProcData) { if (null == this.pcProcData) {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(pcData, 1, null); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(pcData, 1, null);
this.pcProcData = stringStringLongDataReturn.getProcData(); this.pcProcData = stringStringLongDataReturn.getProcData();
} else { } else {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(pcData, 2, pcProcData); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(pcData, 2, pcProcData);
this.pcProcData = stringStringLongDataReturn.getProcData(); this.pcProcData = stringStringLongDataReturn.getProcData();
} }
} }
public String digest() { public byte[] digest() {
if (is_finished) { if (is_finished) {
throw new SydApiException(0x8007); throw new SydApiException(0x8007);
} }
this.is_finished = true; this.is_finished = true;
if (null == pcProcData) { if (null == pcProcData) {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(new byte[0], 0, null); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(new byte[0], 0, null);
return stringStringLongDataReturn.getData(); return stringStringLongDataReturn.getData();
} else { } else {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(new byte[0], 3, pcProcData); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM3_Hash_LongData(new byte[0], 3, pcProcData);
return stringStringLongDataReturn.getData(); return stringStringLongDataReturn.getData();
} }
} }

View File

@ -4,14 +4,15 @@ import com.sunyard.SydApiException;
import com.sunyard.sge.bytes.BytesQueue; import com.sunyard.sge.bytes.BytesQueue;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays;
public class SydSM4Mac implements ISM4Mac { public class SydSM4Mac implements ISM4Mac {
private final SydApi api; private final SydApi api;
private final int iKeyIndex; private final int iKeyIndex;
private int iPkgNum = 1; private int iPkgNum = 1;
private String pcProcData; private byte[] pcProcData;
private boolean is_finished; private boolean is_finished;
private String pcMac; private byte[] pcMac;
private BytesQueue queue = new BytesQueue(); private BytesQueue queue = new BytesQueue();
public SydSM4Mac(SydApi api, int iKeyIndex) { public SydSM4Mac(SydApi api, int iKeyIndex) {
@ -43,11 +44,11 @@ public class SydSM4Mac implements ISM4Mac {
pcdataResult =pop; pcdataResult =pop;
} }
if (null == this.pcMac || "".equals(this.pcMac)) { if (null == this.pcMac || "".equals(this.pcMac)) {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData);
pcProcData = stringStringLongDataReturn.getProcData(); pcProcData = stringStringLongDataReturn.getProcData();
iPkgNum = 2; iPkgNum = 2;
} else { } else {
LongDataReturn<String, Boolean> stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData, pcMac); LongDataReturn<byte[], Boolean> stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData, pcMac);
pcProcData = stringBooleanLongDataReturn.getProcData(); pcProcData = stringBooleanLongDataReturn.getProcData();
iPkgNum = 2; iPkgNum = 2;
} }
@ -59,11 +60,11 @@ public class SydSM4Mac implements ISM4Mac {
queue.push(pcData); queue.push(pcData);
byte[] pop = queue.pop(16, 0); byte[] pop = queue.pop(16, 0);
if (null == this.pcMac || "".equals(this.pcMac)) { if (null == this.pcMac || "".equals(this.pcMac)) {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
pcProcData = stringStringLongDataReturn.getProcData(); pcProcData = stringStringLongDataReturn.getProcData();
iPkgNum = 2; iPkgNum = 2;
} else { } else {
LongDataReturn<String, Boolean> stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData, pcMac); LongDataReturn<byte[], Boolean> stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData, pcMac);
pcProcData = stringBooleanLongDataReturn.getProcData(); pcProcData = stringBooleanLongDataReturn.getProcData();
iPkgNum = 2; iPkgNum = 2;
@ -73,12 +74,12 @@ public class SydSM4Mac implements ISM4Mac {
} }
@Override @Override
public boolean checkDigest(String mac) { public boolean checkDigest(byte[] mac) {
return mac != null && this.pcMac.equals(mac); return mac != null && Arrays.equals(this.pcMac, mac);
} }
@Override @Override
public String digest() { public byte[] digest() {
if (is_finished) { if (is_finished) {
throw new SydApiException(0x8007); throw new SydApiException(0x8007);
@ -91,7 +92,7 @@ public class SydSM4Mac implements ISM4Mac {
} }
byte[] pop = queue.pop(); byte[] pop = queue.pop();
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData); LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
return stringStringLongDataReturn.getData(); return stringStringLongDataReturn.getData();
} }

View File

@ -0,0 +1,76 @@
package com.sunyard.sge.plus;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
public interface SydLibrary extends Library {
// 加载动态库
SydLibrary INSTANCE = Native.load("sunyard", SydLibrary.class);
// 1.1 设置日志配置
int SYD_SetLogConfig(String pcLogPath, int iLogPathLen, int iLogLevel);
// 1.2 建立与设备的连接
int SYD_Connect_Ex(
String[] pcIpList,
int[] iPortList,
int iSize,
int iConnectTimeOut,
int iDealTimeOut,
int iThreadCount,
PointerByReference phHandle);
// 1.3 断开与设备的连接
int SYD_DisConnect_Ex(Pointer phHandle);
// 1.14 短数据加密并输出密文校验值
int SYD_SM4_Encrypt_Mac_ShortData(
Pointer phHandle,
int iEncKeyIndex,
int iCheckKeyIndex,
byte[] pcData,
int iDataLen,
byte[] pcEncData,
IntByReference piEncDataLen,
byte[] pcMac);
// 1.15 短数据解密并对密文校验值进行核对
int SYD_SM4_Decrypt_Mac_ShortData(
Pointer phHandle,
int iEncKeyIndex,
int iCheckKeyIndex,
byte[] pcEncData,
int iEncDataLen,
byte[] pcMac,
byte[] pcOutData,
IntByReference piOutDataLen);
// 1.16 批量数据加密并输出密文校验值
int SYD_SM4_Encrypt_Mac_BatchData(
Pointer phHandle,
int[] iEncKeyIndex,
int[] iCheckKeyIndex,
byte[][] pcData,
int[] iDataLen,
int iSize,
byte[][] pcEncData,
int[] iEncDataLen,
byte[] pcMac);
// 1.17 批量数据解密并对密文校验值进行核对
int SYD_SM4_Decrypt_Mac_BatchData(
Pointer phHandle,
int[] iEncKeyIndex,
int[] iCheckKeyIndex,
byte[][] pcEncData,
int[] iEncDataLen,
byte[][] pcMac,
int iSize,
byte[][] pcOutData,
int[] iOutDataLen,
int[] iCheckRet);
}

Binary file not shown.

Binary file not shown.

View File

@ -268,8 +268,8 @@ public class Sample
public static void shortSM3(SydApi api){ public static void shortSM3(SydApi api){
// 测试数据 // 测试数据
byte[] data = new byte[16]; byte[] data = new byte[16];
String macData = api.SYD_SM3_Hash_ShortData( data ); byte[] macData = api.SYD_SM3_Hash_ShortData( data );
Assert.assertEquals( macData , "106E34A2B8C7BB13156CFDD0D91379DCC47543DCF9787C68AE5EB582620AE6E8"); Assert.assertEquals( macData , Util.hexString2Bytes("106E34A2B8C7BB13156CFDD0D91379DCC47543DCF9787C68AE5EB582620AE6E8"));
} }

View File

@ -62,7 +62,7 @@ public class FuncTest {
public void longConnectFunc() { public void longConnectFunc() {
System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------"); System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------");
SydApi api = connect(); SydApi api = connect();
System.out.println("设置长连接参数与获取长连接成功"); System.out.println("设置长连接参数与获取长连接成功");
System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n"); System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n");
@ -71,10 +71,10 @@ SydApi api = connect();
public void sm3ShortFunc() { public void sm3ShortFunc() {
System.out.println("-------- SM3短数据功能测试开始 --------"); System.out.println("-------- SM3短数据功能测试开始 --------");
SydApi api = connect(); SydApi api = connect();
String res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]); byte[] res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]);
String res2 = api.SYD_SM3_Hash_ShortData(new byte[0]); byte[] res2 = api.SYD_SM3_Hash_ShortData(new byte[0]);
if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) { if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) {
System.out.println("SM3短数据测试成功"); System.out.println("SM3短数据测试成功");
@ -106,7 +106,7 @@ SydApi api = connect();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
sm3.update(data); sm3.update(data);
} }
String res1 = sm3.digest(); byte[] res1 = sm3.digest();
data = new byte[0]; data = new byte[0];
sm3 = api.initSM3(); sm3 = api.initSM3();
@ -114,9 +114,11 @@ SydApi api = connect();
sm3.update(data); sm3.update(data);
} }
String res2 = sm3.digest(); byte[] res2 = sm3.digest();
if (res1.equals(CalcRes.SM3_LONG_RESULT1) && res2.equals(CalcRes.SM3_LONG_RESULT2)) { if (Arrays.equals(res1, Util.hexString2Bytes(CalcRes.SM3_LONG_RESULT1))
&& Arrays.equals(res2, Util.hexString2Bytes(CalcRes.SM3_LONG_RESULT2))
) {
System.out.println("SM3长数据测试成功"); System.out.println("SM3长数据测试成功");
} else { } else {
System.out.println("SM3长数据测试失败"); System.out.println("SM3长数据测试失败");
@ -131,7 +133,7 @@ SydApi api = connect();
public void sm4ShortFunc() { public void sm4ShortFunc() {
System.out.println("-------- SM4短数据加解密功能测试开始 --------"); System.out.println("-------- SM4短数据加解密功能测试开始 --------");
SydApi api = connect(); SydApi api = connect();
int key = 0; int key = 0;
byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC); byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC);
@ -219,7 +221,7 @@ SydApi api = connect();
public void sm4macLongFunc() { public void sm4macLongFunc() {
System.out.println("-------- SM4MAC长数据功能测试开始 --------"); System.out.println("-------- SM4MAC长数据功能测试开始 --------");
SydApi api = connect(); SydApi api = connect();
byte[] data1 = new byte[4064]; byte[] data1 = new byte[4064];
int key = 0; int key = 0;
@ -227,14 +229,14 @@ SydApi api = connect();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
sm4mac.update(data1); sm4mac.update(data1);
} }
String res1 = sm4mac.digest(); byte[] res1 = sm4mac.digest();
byte[] data2 = new byte[16]; byte[] data2 = new byte[16];
sm4mac = api.initSM4Mac(key); sm4mac = api.initSM4Mac(key);
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
sm4mac.update(data2); sm4mac.update(data2);
} }
String res2 = sm4mac.digest(); byte[] res2 = sm4mac.digest();
// c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1)) // c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1))
// s = opt.hexcheck(SM4MAC_LONG_RESULT1) // s = opt.hexcheck(SM4MAC_LONG_RESULT1)