hash 统一为 bytes
This commit is contained in:
parent
9c212c4f83
commit
ff1263b3bc
BIN
doc/构建文档.docx
Normal file
BIN
doc/构建文档.docx
Normal file
Binary file not shown.
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
76
src/main/java/com/sunyard/sge/plus/SydLibrary.java
Normal file
76
src/main/java/com/sunyard/sge/plus/SydLibrary.java
Normal 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);
|
||||||
|
|
||||||
|
}
|
||||||
BIN
src/main/resources/lib/aarch64/libsunyard.so
Normal file
BIN
src/main/resources/lib/aarch64/libsunyard.so
Normal file
Binary file not shown.
BIN
src/main/resources/lib/x86_64/libsunyard.so
Normal file
BIN
src/main/resources/lib/x86_64/libsunyard.so
Normal file
Binary file not shown.
@ -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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user