1.24版本更新:
在1.20版本上将1.19-1.23版本里更新的内容进行同步
This commit is contained in:
parent
729b6b217e
commit
3ecb230cf7
@ -3,4 +3,4 @@
|
||||
debug=true
|
||||
|
||||
# 地址列表 (格式: addX=ip:port)
|
||||
addr1=baishe.fullstack.club:18889
|
||||
addr1=192.168.110.240:8889
|
||||
|
||||
4
pom.xml
4
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>com.sunyard.sge.database</groupId>
|
||||
<artifactId>sydapi-database</artifactId>
|
||||
<version>1.20</version>
|
||||
<version>1.24</version>
|
||||
|
||||
<name>sydapi-database</name>
|
||||
|
||||
@ -63,7 +63,7 @@
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jna</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
<version>5.13.0</version> <!-- 使用最新版本 -->
|
||||
<version>4.5.0</version> <!-- 使用最新版本 -->
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
31
qodana.yaml
Normal file
31
qodana.yaml
Normal file
@ -0,0 +1,31 @@
|
||||
#-------------------------------------------------------------------------------#
|
||||
# Qodana analysis is configured by qodana.yaml file #
|
||||
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
|
||||
#-------------------------------------------------------------------------------#
|
||||
version: "1.0"
|
||||
|
||||
#Specify inspection profile for code analysis
|
||||
profile:
|
||||
name: qodana.starter
|
||||
|
||||
#Enable inspections
|
||||
#include:
|
||||
# - name: <SomeEnabledInspectionId>
|
||||
|
||||
#Disable inspections
|
||||
#exclude:
|
||||
# - name: <SomeDisabledInspectionId>
|
||||
# paths:
|
||||
# - <path/where/not/run/inspection>
|
||||
|
||||
projectJDK: "8" #(Applied in CI/CD pipeline)
|
||||
|
||||
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
|
||||
#bootstrap: sh ./prepare-qodana.sh
|
||||
|
||||
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
|
||||
#plugins:
|
||||
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
|
||||
|
||||
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
|
||||
linter: jetbrains/qodana-jvm-community:2025.1
|
||||
19
src/main/java/com/sunyard/sge/database/Env.java
Normal file
19
src/main/java/com/sunyard/sge/database/Env.java
Normal file
@ -0,0 +1,19 @@
|
||||
package com.sunyard.sge.database;
|
||||
|
||||
public class Env {
|
||||
|
||||
private static boolean isLinux = false;
|
||||
|
||||
static {
|
||||
String os = System.getProperty("os.name").toLowerCase();
|
||||
if (os.contains("nix") || os.contains("nux") || os.contains("aix")) {
|
||||
isLinux = true;
|
||||
} else {
|
||||
isLinux = false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isLinux(){
|
||||
return isLinux;
|
||||
}
|
||||
}
|
||||
@ -28,8 +28,10 @@ public interface SydApi {
|
||||
}
|
||||
// logback 版本的日志直接由外部配置文件控制
|
||||
|
||||
// 初始化 C 部分日志
|
||||
SydLibrary.INSTANCE.SYD_SetLogConfig(pcLogPath, pcLogPath.getBytes().length, iLogLevel);
|
||||
if ( Env.isLinux() ){
|
||||
// 初始化 C 部分日志
|
||||
SydLibrary.INSTANCE.SYD_SetLogConfig(pcLogPath, pcLogPath.getBytes().length, iLogLevel);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -274,10 +276,10 @@ public interface SydApi {
|
||||
*
|
||||
* @param iEncKeyIndex:输入。加密所需要的密钥索引值
|
||||
* @param iMacKeyIndex:输入。计算mac所需要的密钥索引值
|
||||
* @param pcData: 输入。计算mac所需要的数据。
|
||||
* @param pcData: 输入。计算mac所需要的数据。
|
||||
* @return DataAndMac
|
||||
* - data 密文
|
||||
* - mac值 (固定长度16字节)转HEX 字符串格式
|
||||
* - data 密文
|
||||
* - mac值 (固定长度16字节)转HEX 字符串格式
|
||||
*/
|
||||
DataAndMac SYD_SM4_EncryptAndMac_ShortData(
|
||||
int iEncKeyIndex,
|
||||
@ -287,11 +289,10 @@ public interface SydApi {
|
||||
|
||||
/**
|
||||
* 短数据校验 MAC 并解密
|
||||
*
|
||||
* @param iEncKeyIndex:输入。加密所需要的密钥索引值
|
||||
* @param iMacKeyIndex:输入。计算mac所需要的密钥索引值
|
||||
* @param pcData 输入。密文。
|
||||
* @param mac 输入。密文的 MAC。
|
||||
* @param pcData 输入。密文。
|
||||
* @param mac 输入。密文的 MAC。
|
||||
* @return 明文
|
||||
*/
|
||||
DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(
|
||||
@ -307,7 +308,6 @@ public interface SydApi {
|
||||
int[] iMacKeyIndex,
|
||||
List<byte[]> pcData
|
||||
);
|
||||
|
||||
List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(
|
||||
int[] iEncKeyIndex,
|
||||
int[] iMacKeyIndex,
|
||||
|
||||
@ -99,12 +99,12 @@ public class SydApiBaseFunction implements SydApi {
|
||||
try {
|
||||
api.disconnect();
|
||||
} catch (Exception e) {
|
||||
|
||||
// free
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
// free
|
||||
}
|
||||
hsms = null;
|
||||
}
|
||||
@ -683,7 +683,7 @@ public class SydApiBaseFunction implements SydApi {
|
||||
|
||||
// 仅一包 和 第一包 忽略 pcProcData 参数
|
||||
if (Consts.PkgNumAll != iPkgNum && Consts.PkgNumHead != iPkgNum) {
|
||||
iv = pcProcData;
|
||||
iv = Util.bytes2HexString(pcProcData).getBytes();
|
||||
}
|
||||
SydApiException le = new SydApiException(-1);
|
||||
updateLastUseTime();
|
||||
@ -768,7 +768,7 @@ public class SydApiBaseFunction implements SydApi {
|
||||
|
||||
// 仅一包 和 尾包 返回最终结果
|
||||
if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) {
|
||||
return new LongDataReturn<>(null, pcMac.equals(ret.getData()));
|
||||
return new LongDataReturn<>(null, Arrays.equals(pcMac, ret.getData()));
|
||||
} else {
|
||||
// 返回中间值
|
||||
return new LongDataReturn<>(ret.getProcData(), false);
|
||||
@ -866,7 +866,7 @@ public class SydApiBaseFunction implements SydApi {
|
||||
updateLastUseTime();
|
||||
byte[] mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
|
||||
log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac);
|
||||
return pcMac.equals(mac);
|
||||
return Arrays.equals(pcMac, mac);
|
||||
}
|
||||
|
||||
|
||||
@ -886,7 +886,7 @@ public class SydApiBaseFunction implements SydApi {
|
||||
}
|
||||
// 参数检查在函数内部
|
||||
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
||||
// mac 长度放宽到 1024,因为密文填充
|
||||
// mac 长度放宽到 1040,因为密文填充
|
||||
byte[] mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
|
||||
return new DataAndMac(enData, mac);
|
||||
}
|
||||
@ -909,6 +909,7 @@ public class SydApiBaseFunction implements SydApi {
|
||||
return new DataAndMacCheck(data, ret);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
||||
|
||||
@ -947,11 +948,6 @@ public class SydApiBaseFunction implements SydApi {
|
||||
log.debug("SYD_SM4_CheckMacAndDecrypt_BatchData");
|
||||
}
|
||||
|
||||
if (pcData.isEmpty()) {
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_BatchData pcData isEmpty");
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
if (null == this.hsms || null == iMacKeyIndex) {
|
||||
throw new SydApiException("输入内容为空", 0x01000001);
|
||||
}
|
||||
@ -959,11 +955,17 @@ public class SydApiBaseFunction implements SydApi {
|
||||
throw new SydApiException("密钥长度和数据长度不对应", 0x01000001);
|
||||
}
|
||||
|
||||
if (pcData.isEmpty()) {
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_BatchData pcData isEmpty");
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
List<byte[]> macs = new ArrayList<>(pcData.size());
|
||||
List<byte[]> datas = new ArrayList<>(pcData.size());
|
||||
for (int i = 0; i < macs.size(); i++) {
|
||||
macs.add(pcData.get(i).getMac());
|
||||
datas.add(pcData.get(i).getData());
|
||||
for (DataAndMac pcDatum : pcData) {
|
||||
macs.add(pcDatum.getMac());
|
||||
datas.add(pcDatum.getData());
|
||||
}
|
||||
|
||||
boolean[] macCheck = SYD_SM4Mac_BatchData(iMacKeyIndex, datas, macs);
|
||||
|
||||
@ -21,10 +21,9 @@ public class SydApiBuilder {
|
||||
int[] iPortList,
|
||||
int iConnectTimeOut,
|
||||
int iDealTimeOut
|
||||
) {
|
||||
this(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut, new PoolConfig());
|
||||
) {
|
||||
this( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut, new PoolConfig() );
|
||||
}
|
||||
|
||||
public SydApiBuilder(
|
||||
String[] pcIpList,
|
||||
int[] iPortList,
|
||||
@ -36,22 +35,23 @@ public class SydApiBuilder {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("创建链接");
|
||||
log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, iDealTimeOut);
|
||||
log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut);
|
||||
log.debug("pool config {}", config);
|
||||
}
|
||||
|
||||
// 同时初始化 jna 下 c 的链接
|
||||
int ret = ConnectHandlerManager.init(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||
if ( Env.isLinux() ) {
|
||||
// 同时初始化 jna 下 c 的链接
|
||||
int ret = ConnectHandlerManager.init(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||
|
||||
if (0 != ret) {
|
||||
throw new SydApiException(-1);
|
||||
if ( 0 != ret ) {
|
||||
throw new SydApiException(-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||
this.pool = new SydApiPool(config, linkInfo);
|
||||
longLinkWorks = new CommWorker();
|
||||
warmUp(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||
warmUp( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
|
||||
}
|
||||
|
||||
public CommWorker getLongLinkWorks() {
|
||||
@ -60,54 +60,52 @@ public class SydApiBuilder {
|
||||
|
||||
/**
|
||||
* 获取池内对象
|
||||
*
|
||||
* @return 池内对象
|
||||
*/
|
||||
public SydApi get() {
|
||||
public SydApi get(){
|
||||
return pool.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 升级
|
||||
* 修改了原实现
|
||||
*
|
||||
* @return 包装对象
|
||||
*/
|
||||
public SydApi build() {
|
||||
return new SydApiLongLinkWrap(this);
|
||||
return new SydApiLongLinkWrap( this );
|
||||
}
|
||||
|
||||
|
||||
private void warmUp(String[] pcIpList,
|
||||
int[] iPortList,
|
||||
int iConnectTimeOut,
|
||||
int iDealTimeOut) {
|
||||
int iDealTimeOut){
|
||||
SydApi api = null;
|
||||
try {
|
||||
api = new SydApi4Database();
|
||||
api.SYD_Short_Connect_Ex(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||
api.SYD_Short_Connect_Ex( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
|
||||
|
||||
try {
|
||||
|
||||
api.SYD_SM3_Hash_ShortData(new byte[8]);
|
||||
api.SYD_SM3_Hash_ShortData( new byte[8] );
|
||||
|
||||
} catch (Exception e) {
|
||||
}catch ( Exception e) {
|
||||
// 忽略
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
api.SYD_SM4_ShortData(0, new byte[16], Consts.ECB_ENC);
|
||||
api.SYD_SM4_ShortData( 0 , new byte[16], Consts.ECB_ENC );
|
||||
|
||||
} catch (Exception e) {
|
||||
}catch ( Exception e) {
|
||||
// 忽略
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
} catch ( Exception e ){
|
||||
// 忽略预热失败
|
||||
} finally {
|
||||
if (null != api) {
|
||||
if ( null != api ) {
|
||||
api.SYD_Disconnect_Ex();
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
org.slf4j.Logger log = LoggerFactory.getLogger(ThreadBasedConnectPool.class);
|
||||
|
||||
private SydApiBuilder builder;
|
||||
private final SydApiBuilder builder;
|
||||
|
||||
public SydApiLongLinkWrap(SydApiBuilder builder) {
|
||||
this.builder = builder;
|
||||
@ -46,12 +46,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM3_Hash_ShortData(byte[] pcData) {
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] call() throws Exception {
|
||||
return builder.get().SYD_SM3_Hash_ShortData(pcData);
|
||||
}
|
||||
});
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM3_Hash_ShortData(pcData));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -64,12 +59,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public LongDataReturn<byte[], byte[]> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, byte[] pcProcData) {
|
||||
FutureTask<LongDataReturn<byte[], byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<byte[], byte[]>>() {
|
||||
@Override
|
||||
public LongDataReturn<byte[], byte[]> call() throws Exception {
|
||||
return builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData);
|
||||
}
|
||||
});
|
||||
FutureTask<LongDataReturn<byte[], byte[]>> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -82,12 +72,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) {
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] call() throws Exception {
|
||||
return builder.get().SYD_SM4_ShortData(iKeyIndex, pcData, iFlag);
|
||||
}
|
||||
});
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_ShortData(iKeyIndex, pcData, iFlag));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -100,12 +85,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) {
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] call() throws Exception {
|
||||
return builder.get().SYD_SM4_LongData(iKeyIndex, pcData, iPkgNum, iFlag);
|
||||
}
|
||||
});
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_LongData(iKeyIndex, pcData, iPkgNum, iFlag));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -119,12 +99,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public LongDataReturn<byte[], byte[]> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData) {
|
||||
FutureTask<LongDataReturn<byte[], byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<byte[], byte[]>>() {
|
||||
@Override
|
||||
public LongDataReturn<byte[], byte[]> call() throws Exception {
|
||||
return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData);
|
||||
}
|
||||
});
|
||||
FutureTask<LongDataReturn<byte[], byte[]>> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -137,12 +112,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public LongDataReturn<byte[], Boolean> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData, byte[] pcMac) {
|
||||
FutureTask<LongDataReturn<byte[], Boolean>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<byte[], Boolean>>() {
|
||||
@Override
|
||||
public LongDataReturn<byte[], Boolean> call() throws Exception {
|
||||
return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData, pcMac);
|
||||
}
|
||||
});
|
||||
FutureTask<LongDataReturn<byte[], Boolean>> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData, pcMac));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -155,12 +125,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] call() throws Exception {
|
||||
return builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData);
|
||||
}
|
||||
});
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -173,12 +138,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
|
||||
FutureTask<Boolean> task = builder.getLongLinkWorks().fTask(new Callable<Boolean>() {
|
||||
@Override
|
||||
public Boolean call() throws Exception {
|
||||
return builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData, pcMac);
|
||||
}
|
||||
});
|
||||
FutureTask<Boolean> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData, pcMac));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
@ -189,26 +149,11 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
private DataAndMac SYD_SM4_AllInOne(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||
DataAndMac SYD_SM4_EncryptAndMac_ShortData_java(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||
try {
|
||||
FutureTask<byte[]> taskEnc = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] call() throws Exception {
|
||||
return builder.get().SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
||||
}
|
||||
});
|
||||
FutureTask<DataAndMac> taskEnc = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_EncryptAndMac_ShortData(iEncKeyIndex, iMacKeyIndex, pcData));
|
||||
|
||||
byte[] enData = taskEnc.get();
|
||||
|
||||
FutureTask<byte[]> taskMac = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] call() throws Exception {
|
||||
return builder.get().SYD_SM4Mac_ShortData(iMacKeyIndex, enData);
|
||||
}
|
||||
});
|
||||
|
||||
byte[] mac = taskMac.get();
|
||||
return new DataAndMac(enData, mac);
|
||||
return taskEnc.get();
|
||||
} catch (SydApiException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
@ -221,7 +166,15 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
@Override
|
||||
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||
log.info("SYD_SM4_EncryptAndMac_ShortData {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
if (Env.isLinux()) {
|
||||
return SYD_SM4_EncryptAndMac_ShortData_c(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
} else {
|
||||
return SYD_SM4_EncryptAndMac_ShortData_java(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
}
|
||||
}
|
||||
|
||||
DataAndMac SYD_SM4_EncryptAndMac_ShortData_c(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||
log.info("SYD_SM4_EncryptAndMac_ShortData_c {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
try {
|
||||
if (!ConnectHandlerManager.isInited()) {
|
||||
throw new SydApiException(-1);
|
||||
@ -255,67 +208,6 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
} else {
|
||||
throw new SydApiException(i);
|
||||
}
|
||||
|
||||
// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
|
||||
// // 线程池忙, 使用单线程计算
|
||||
// if( builder.getLongLinkWorks().threadPoolIsBusy() ) {
|
||||
// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
// }
|
||||
//
|
||||
// // 线程池不忙,使用并发计算
|
||||
//
|
||||
// // 将pcData拆分为两半,第一半16字节对齐
|
||||
// int halfLength = pcData.length / 2;
|
||||
// int alignedLength = (halfLength + 15) & ~15; // 向上取整到16的倍数
|
||||
// alignedLength = Math.min(alignedLength, pcData.length); // 不超过原始数据长度
|
||||
// if (alignedLength < 16) {
|
||||
// throw new IllegalArgumentException("数据长度不足16字节,无法对齐");
|
||||
// }
|
||||
//
|
||||
//
|
||||
// byte[] firstHalf = Arrays.copyOfRange(pcData, 0, alignedLength);
|
||||
// byte[] secondHalf = Arrays.copyOfRange(pcData, alignedLength, pcData.length);
|
||||
//
|
||||
//
|
||||
// FutureTask<byte[]> taskEnc1 = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
// @Override
|
||||
// public byte[] call() throws Exception {
|
||||
// return builder.get().SYD_SM4_LongData( iEncKeyIndex, firstHalf, 1, Consts.ECB_ENC);
|
||||
// }
|
||||
// });
|
||||
// FutureTask<byte[]> taskEnc2 = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
// @Override
|
||||
// public byte[] call() throws Exception {
|
||||
// return builder.get().SYD_SM4_LongData( iEncKeyIndex, secondHalf, 3, Consts.ECB_ENC);
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// byte[] enData1 = taskEnc1.get();
|
||||
// FutureTask<LongDataReturn<String, String>> taskMac = builder.getLongLinkWorks().fTask(new Callable< LongDataReturn<String, String>>() {
|
||||
// @Override
|
||||
// public LongDataReturn<String, String> call() throws Exception {
|
||||
// return builder.get().SYD_SM4Mac_LongData(iMacKeyIndex, enData1, 1, null);
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// byte[] enData2 = taskEnc2.get();
|
||||
// LongDataReturn<String, String> macProc = taskMac.get();
|
||||
// FutureTask<LongDataReturn<String, String>> taskMac2 = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<String, String>>() {
|
||||
// @Override
|
||||
// public LongDataReturn<String, String> call() throws Exception {
|
||||
// return builder.get().SYD_SM4Mac_LongData(iMacKeyIndex, enData2, 3, macProc.getProcData());
|
||||
// }
|
||||
// });
|
||||
// LongDataReturn<String, String> mac = taskMac.get();
|
||||
//
|
||||
// // 合并密文
|
||||
// byte[] enData = new byte[enData1.length + enData2.length];
|
||||
// System.arraycopy(enData1, 0, enData, 0, enData1.length);
|
||||
// System.arraycopy(enData2, 0, enData, enData1.length, enData2.length);
|
||||
//
|
||||
//
|
||||
// return new DataAndMac(enData, mac.getData());
|
||||
} catch (SydApiException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
@ -326,9 +218,19 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_ShortData {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
if (Env.isLinux()) {
|
||||
return SYD_SM4_CheckMacAndDecrypt_ShortData_c(iEncKeyIndex, iMacKeyIndex, pcData, macs);
|
||||
} else {
|
||||
return SYD_SM4_CheckMacAndDecrypt_ShortData_java(iEncKeyIndex, iMacKeyIndex, pcData, macs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData_c(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_ShortData_c {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
try {
|
||||
if (!ConnectHandlerManager.isInited()) {
|
||||
throw new SydApiException(-1);
|
||||
@ -351,7 +253,6 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
byte[] data = new byte[decryptedDataLen.getValue()];
|
||||
System.arraycopy(decryptedData, 0, data, 0, data.length);
|
||||
System.out.println("outlen=" + data.length);
|
||||
|
||||
if (0 == i) {
|
||||
return new DataAndMacCheck(data, true);
|
||||
@ -369,24 +270,36 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
}
|
||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FutureTask<DataAndMacCheck> task = builder.getLongLinkWorks().fTask(new Callable<DataAndMacCheck>() {
|
||||
// @Override
|
||||
// public DataAndMacCheck call() throws Exception {
|
||||
// return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac);
|
||||
// }
|
||||
// });
|
||||
// try {
|
||||
// return task.get();
|
||||
// } catch (Exception e) {
|
||||
// throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
// }
|
||||
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData_java(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_ShortData_java {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
FutureTask<DataAndMacCheck> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, macs));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (SydApiException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
if (e.getCause() instanceof SydApiException) {
|
||||
throw (SydApiException) e.getCause();
|
||||
}
|
||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
||||
log.info("SYD_SM4_EncryptAndMac_BatchData {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
if (Env.isLinux()) {
|
||||
return SYD_SM4_EncryptAndMac_BatchData_c(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
} else {
|
||||
return SYD_SM4_EncryptAndMac_BatchData_java(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData_c(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
||||
log.info("SYD_SM4_EncryptAndMac_BatchData_c {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
|
||||
if (!ConnectHandlerManager.isInited()) {
|
||||
throw new SydApiException(-1);
|
||||
@ -406,42 +319,64 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
// 3. 准备 MAC 输出缓冲
|
||||
Pointer[] pcMacArray = new Pointer[pcData.size()];
|
||||
|
||||
try {
|
||||
|
||||
for (int i = 0; i < pcData.size(); i++) {
|
||||
byte[] bytes = pcData.get(i);
|
||||
// 为每个 byte[] 分配本地内存并复制数据
|
||||
Memory memory = new Memory(bytes.length);
|
||||
memory.write(0, bytes, 0, bytes.length);
|
||||
pcDataArray[i] = memory;
|
||||
iDataLen[i] = bytes.length;
|
||||
iEncDataLen[i] = BytesUtil.calculatePaddedLength(bytes.length);
|
||||
pcEncArray[i] = new Memory(iEncDataLen[i]);
|
||||
pcMacArray[i] = new Memory(16);
|
||||
}
|
||||
|
||||
// 调用加密函数
|
||||
int result = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_BatchData(
|
||||
ConnectHandlerManager.getHandler(),
|
||||
iEncKeyIndex,
|
||||
iMacKeyIndex,
|
||||
pcDataArray,
|
||||
iDataLen,
|
||||
size,
|
||||
pcEncArray,
|
||||
iEncDataLen,
|
||||
pcMacArray);
|
||||
|
||||
if (0 == result) {
|
||||
// 转换结果为Java风格的对象列表
|
||||
List<DataAndMac> results = new ArrayList<>();
|
||||
for (int i = 0; i < size; i++) {
|
||||
results.add(new DataAndMac(pcEncArray[i].getByteArray(0, iEncDataLen[i]), pcMacArray[i].getByteArray(0, 16)));
|
||||
for (int i = 0; i < pcData.size(); i++) {
|
||||
byte[] bytes = pcData.get(i);
|
||||
// 为每个 byte[] 分配本地内存并复制数据
|
||||
Memory memory = new Memory(bytes.length);
|
||||
memory.write(0, bytes, 0, bytes.length);
|
||||
pcDataArray[i] = memory;
|
||||
iDataLen[i] = bytes.length;
|
||||
iEncDataLen[i] = BytesUtil.calculatePaddedLength(bytes.length);
|
||||
pcEncArray[i] = new Memory(iEncDataLen[i]);
|
||||
pcMacArray[i] = new Memory(16);
|
||||
}
|
||||
|
||||
return results;
|
||||
} else {
|
||||
throw new SydApiException(result);
|
||||
// 调用加密函数
|
||||
int result = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_BatchData(
|
||||
ConnectHandlerManager.getHandler(),
|
||||
iEncKeyIndex,
|
||||
iMacKeyIndex,
|
||||
pcDataArray,
|
||||
iDataLen,
|
||||
size,
|
||||
pcEncArray,
|
||||
iEncDataLen,
|
||||
pcMacArray);
|
||||
|
||||
|
||||
if (0 == result) {
|
||||
// 转换结果为Java风格的对象列表
|
||||
List<DataAndMac> results = new ArrayList<>();
|
||||
for (int i = 0; i < size; i++) {
|
||||
results.add(new DataAndMac(pcEncArray[i].getByteArray(0, iEncDataLen[i]), pcMacArray[i].getByteArray(0, 16)));
|
||||
}
|
||||
|
||||
return results;
|
||||
} else {
|
||||
throw new SydApiException(result);
|
||||
}
|
||||
} finally {
|
||||
// for ( Pointer d : pcDataArray ) {
|
||||
// if ( d instanceof Memory ) {
|
||||
// ((Memory)d).close();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// for ( Pointer d : pcEncArray ) {
|
||||
// if ( d instanceof Memory ) {
|
||||
// ((Memory)d).close();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// for ( Pointer d : pcMacArray ) {
|
||||
// if ( d instanceof Memory ) {
|
||||
// ((Memory)d).close();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
} catch (SydApiException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
@ -451,32 +386,42 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
}
|
||||
|
||||
// FutureTask<List<DataAndMac>> task = builder.getLongLinkWorks().fTask(new Callable<List<DataAndMac>>() {
|
||||
// @Override
|
||||
// public List<DataAndMac> call() throws Exception {
|
||||
// return builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
// }
|
||||
// });
|
||||
// try {
|
||||
// return task.get();
|
||||
// } catch (Exception e) {
|
||||
// throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData_java(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
||||
log.info("SYD_SM4_EncryptAndMac_BatchData {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
|
||||
FutureTask<List<DataAndMac>> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
|
||||
if (Env.isLinux()) {
|
||||
return SYD_SM4_CheckMacAndDecrypt_BatchData_c(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
} else {
|
||||
return SYD_SM4_CheckMacAndDecrypt_BatchData_java(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
}
|
||||
}
|
||||
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_BatchData {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
|
||||
List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData_c(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
|
||||
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_BatchData_c {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
|
||||
int size = pcData.size();
|
||||
log.debug("size {}", size);
|
||||
log.debug("SYD_SM4_CheckMacAndDecrypt_BatchData_c size {}", size);
|
||||
|
||||
// 1. 准备明文参数
|
||||
Pointer[] pcDataArray = new Pointer[pcData.size()];
|
||||
int[] iDataLen = new int[size];
|
||||
|
||||
|
||||
// 2. 准备密文缓冲区
|
||||
Pointer[] pcEncArray = new Pointer[pcData.size()];
|
||||
int[] iEncDataLen = new int[size];
|
||||
@ -486,72 +431,97 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
|
||||
int[] iCheckRet = new int[size];
|
||||
|
||||
try {
|
||||
|
||||
for (int i = 0; i < pcData.size(); i++) {
|
||||
DataAndMac dm = pcData.get(i);
|
||||
for (int i = 0; i < pcData.size(); i++) {
|
||||
DataAndMac dm = pcData.get(i);
|
||||
|
||||
|
||||
// 为每个 byte[] 分配本地内存并复制数据
|
||||
Memory memory = new Memory(dm.getData().length);
|
||||
memory.write(0, dm.getData(), 0, dm.getData().length);
|
||||
pcEncArray[i] = memory;
|
||||
iEncDataLen[i] = dm.getData().length;
|
||||
log.debug("pcEncArray={}", dm.getData().length);
|
||||
// 为每个 byte[] 分配本地内存并复制数据
|
||||
Memory memory = new Memory(dm.getData().length);
|
||||
memory.write(0, dm.getData(), 0, dm.getData().length);
|
||||
pcEncArray[i] = memory;
|
||||
iEncDataLen[i] = dm.getData().length;
|
||||
log.debug("pcEncArray={}", dm.getData().length);
|
||||
|
||||
|
||||
pcDataArray[i] = new Memory(dm.getData().length);
|
||||
iDataLen[i] = dm.getData().length;
|
||||
log.debug("iDataLen= {}", dm.getData().length);
|
||||
pcDataArray[i] = new Memory(dm.getData().length);
|
||||
iDataLen[i] = dm.getData().length;
|
||||
log.debug("iDataLen= {}", dm.getData().length);
|
||||
|
||||
|
||||
Memory mem_mac = new Memory(16);
|
||||
mem_mac.write(0, dm.getMac(), 0, 16);
|
||||
pcMacArray[i] = mem_mac;
|
||||
Memory mem_mac = new Memory(16);
|
||||
mem_mac.write(0, dm.getMac(), 0, 16);
|
||||
pcMacArray[i] = mem_mac;
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("mem_mac=" + Util.bytes2HexString(dm.getMac()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 调用解密函数
|
||||
int result = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_BatchData(
|
||||
ConnectHandlerManager.getHandler(),
|
||||
iEncKeyIndex,
|
||||
iMacKeyIndex,
|
||||
pcEncArray,
|
||||
iEncDataLen,
|
||||
pcMacArray,
|
||||
size,
|
||||
pcDataArray,
|
||||
iDataLen,
|
||||
iCheckRet);
|
||||
|
||||
if (0 == result) {
|
||||
// 转换结果为Java风格的对象列表
|
||||
List<DataAndMacCheck> results = new ArrayList<>();
|
||||
for (int i = 0; i < size; i++) {
|
||||
results.add(new DataAndMacCheck(pcDataArray[i].getByteArray(0, iDataLen[i]), iCheckRet[i] == 0));
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("mem_mac={}" , Util.bytes2HexString(dm.getMac()));
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
} else {
|
||||
throw new SydApiException(result);
|
||||
}
|
||||
|
||||
// FutureTask<List<DataAndMacCheck>> task = builder.getLongLinkWorks().fTask(new Callable<List<DataAndMacCheck>>() {
|
||||
// @Override
|
||||
// public List<DataAndMacCheck> call() throws Exception {
|
||||
// return builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
// 调用解密函数
|
||||
int result = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_BatchData(
|
||||
ConnectHandlerManager.getHandler(),
|
||||
iEncKeyIndex,
|
||||
iMacKeyIndex,
|
||||
pcEncArray,
|
||||
iEncDataLen,
|
||||
pcMacArray,
|
||||
size,
|
||||
pcDataArray,
|
||||
iDataLen,
|
||||
iCheckRet);
|
||||
|
||||
if (0 == result) {
|
||||
// 转换结果为 Java 风格的对象列表
|
||||
List<DataAndMacCheck> results = new ArrayList<>();
|
||||
for (int i = 0; i < size; i++) {
|
||||
results.add(new DataAndMacCheck(pcDataArray[i].getByteArray(0, iDataLen[i]), iCheckRet[i] == 0));
|
||||
}
|
||||
|
||||
return results;
|
||||
} else {
|
||||
throw new SydApiException(result);
|
||||
}
|
||||
} finally {
|
||||
// for ( Pointer d : pcDataArray ) {
|
||||
// if ( d instanceof Memory ) {
|
||||
// ((Memory)d).close();
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// try {
|
||||
// return task.get();
|
||||
// } catch (Exception e) {
|
||||
// throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
// }
|
||||
//
|
||||
// for ( Pointer d : pcEncArray ) {
|
||||
// if ( d instanceof Memory ) {
|
||||
// ((Memory)d).close();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// for ( Pointer d : pcMacArray ) {
|
||||
// if ( d instanceof Memory ) {
|
||||
// ((Memory)d).close();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData_java(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
|
||||
|
||||
log.info("SYD_SM4_CheckMacAndDecrypt_BatchData_java {} {}", iEncKeyIndex, iMacKeyIndex);
|
||||
|
||||
int size = pcData.size();
|
||||
log.debug("size {}", size);
|
||||
|
||||
|
||||
FutureTask<List<DataAndMacCheck>> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData));
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ISM4 initSM4(int iKeyIndex, int ende) {
|
||||
return new SydSM4(this, iKeyIndex, ende);
|
||||
@ -622,12 +592,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
for (int i = 0; i < dataGroups.size(); i++) {
|
||||
|
||||
int finalI = i;
|
||||
FutureTask<List<byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<List<byte[]>>() {
|
||||
@Override
|
||||
public List<byte[]> call() throws Exception {
|
||||
SydApi api = builder.get();
|
||||
return api.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
|
||||
}
|
||||
FutureTask<List<byte[]>> task = builder.getLongLinkWorks().fTask(() -> {
|
||||
SydApi api = builder.get();
|
||||
return api.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
|
||||
});
|
||||
tasks.add(task);
|
||||
}
|
||||
@ -702,12 +669,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
for (int i = 0; i < dataGroups.size(); i++) {
|
||||
|
||||
int finalI = i;
|
||||
FutureTask<List<byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<List<byte[]>>() {
|
||||
@Override
|
||||
public List<byte[]> call() throws Exception {
|
||||
SydApi api = builder.get();
|
||||
return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
|
||||
}
|
||||
FutureTask<List<byte[]>> task = builder.getLongLinkWorks().fTask(() -> {
|
||||
SydApi api = builder.get();
|
||||
return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
|
||||
});
|
||||
tasks.add(task);
|
||||
}
|
||||
@ -788,16 +752,13 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
for (int i = 0; i < dataGroups.size(); i++) {
|
||||
|
||||
int finalI = i;
|
||||
FutureTask<boolean[]> task = builder.getLongLinkWorks().fTask(new Callable<boolean[]>() {
|
||||
@Override
|
||||
public boolean[] call() throws Exception {
|
||||
SydApi api = builder.get();
|
||||
return api.SYD_SM4Mac_BatchData(
|
||||
toIntArray(keyGroups.get(finalI)),
|
||||
dataGroups.get(finalI),
|
||||
macGroups.get(finalI)
|
||||
);
|
||||
}
|
||||
FutureTask<boolean[]> task = builder.getLongLinkWorks().fTask(() -> {
|
||||
SydApi api = builder.get();
|
||||
return api.SYD_SM4Mac_BatchData(
|
||||
toIntArray(keyGroups.get(finalI)),
|
||||
dataGroups.get(finalI),
|
||||
macGroups.get(finalI)
|
||||
);
|
||||
});
|
||||
tasks.add(task);
|
||||
}
|
||||
|
||||
@ -40,10 +40,9 @@ public class SydSM4Mac implements ISM4Mac {
|
||||
}
|
||||
if (length % 16 != 0) {
|
||||
queue.push(pcData);
|
||||
byte[] pop = queue.pop(16, 0);
|
||||
pcdataResult =pop;
|
||||
pcdataResult = queue.pop(16, 0);
|
||||
}
|
||||
if (null == this.pcMac || "".equals(this.pcMac)) {
|
||||
if (null == this.pcMac || this.pcMac.length == 0) {
|
||||
LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData);
|
||||
pcProcData = stringStringLongDataReturn.getProcData();
|
||||
iPkgNum = 2;
|
||||
@ -59,7 +58,7 @@ public class SydSM4Mac implements ISM4Mac {
|
||||
|
||||
queue.push(pcData);
|
||||
byte[] pop = queue.pop(16, 0);
|
||||
if (null == this.pcMac || "".equals(this.pcMac)) {
|
||||
if (null == this.pcMac || this.pcMac.length == 0 ) {
|
||||
LongDataReturn<byte[], byte[]> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
|
||||
pcProcData = stringStringLongDataReturn.getProcData();
|
||||
iPkgNum = 2;
|
||||
|
||||
@ -12,7 +12,7 @@ import org.slf4j.LoggerFactory;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
public class SydApiPool extends ThreadBasedConnectPool<SydApi> {
|
||||
private HsmLinkInfo[] linkInfos;
|
||||
private final HsmLinkInfo[] linkInfos;
|
||||
public SydApiPool(HsmLinkInfo[] linkInfos) {
|
||||
super();
|
||||
this.linkInfos = linkInfos;
|
||||
@ -83,7 +83,7 @@ public class SydApiPool extends ThreadBasedConnectPool<SydApi> {
|
||||
hsms[i] = (SydApi4j) new SydApi4j().connect(info.getPcIp(), info.getiPort(), null, info.getiConnectTimeOut(), info.getiDealTimeOut());
|
||||
canUse = true;
|
||||
} catch (Exception e) {
|
||||
|
||||
// free
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
public interface SydLibrary extends Library {
|
||||
// 加载动态库
|
||||
SydLibrary INSTANCE = Native.load("sunyard", SydLibrary.class);
|
||||
SydLibrary INSTANCE = Native.loadLibrary("sunyard", SydLibrary.class);
|
||||
|
||||
// 1.1 设置日志配置
|
||||
int SYD_SetLogConfig(String pcLogPath, int iLogPathLen, int iLogLevel);
|
||||
|
||||
@ -49,6 +49,7 @@ public class ThreadBasedConnectPool<T> {
|
||||
try {
|
||||
free(oip.getObject());
|
||||
} catch (Exception e) {
|
||||
// free
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -67,6 +68,7 @@ public class ThreadBasedConnectPool<T> {
|
||||
try {
|
||||
free(oip.getObject());
|
||||
} catch (Exception e) {
|
||||
// free
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -76,7 +78,6 @@ public class ThreadBasedConnectPool<T> {
|
||||
checkPass = check(entry.getValue().getObjectForCheck());
|
||||
} catch (Exception e) {
|
||||
checkPass = false;
|
||||
} finally {
|
||||
}
|
||||
|
||||
if (!checkPass) {
|
||||
@ -87,6 +88,7 @@ public class ThreadBasedConnectPool<T> {
|
||||
try {
|
||||
free(oip.getObject());
|
||||
} catch (Exception e) {
|
||||
// free
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
169
src/test/java/com/sunyard/sge/database/EncryptAndMac.java
Normal file
169
src/test/java/com/sunyard/sge/database/EncryptAndMac.java
Normal file
@ -0,0 +1,169 @@
|
||||
package com.sunyard.sge.database;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class EncryptAndMac {
|
||||
|
||||
|
||||
public static void conformance_testcase1_SYD_SM4_EncryptAndMac_ShortData(SydApiLongLinkWrap api){
|
||||
int keyEnc = 0;
|
||||
int keyMac = 0;
|
||||
byte[] data1 = new byte[1024];
|
||||
System.out.println("step1");
|
||||
DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData_c(keyEnc, keyMac, data1);
|
||||
System.out.println("step2");
|
||||
DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData_java(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
|
||||
System.out.println("step3 ");
|
||||
if ( de_data1.getMacCheck() ) {
|
||||
System.out.println("conformance_testcase1 测试通过");
|
||||
}
|
||||
}
|
||||
|
||||
public static void conformance_testcase2_SYD_SM4_EncryptAndMac_ShortData(SydApiLongLinkWrap api){
|
||||
int keyEnc = 0;
|
||||
int keyMac = 0;
|
||||
byte[] data1 = new byte[1024];
|
||||
System.out.println("step1");
|
||||
DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData_java(keyEnc, keyMac, data1);
|
||||
System.out.println("step2");
|
||||
DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData_c(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
|
||||
System.out.println("step3 " + de_data1.getMacCheck());
|
||||
if ( de_data1.getMacCheck() ) {
|
||||
System.out.println("conformance_testcase2 测试通过");
|
||||
}
|
||||
}
|
||||
|
||||
public static void conformance_testcase1_sm4BatchMacFunc(SydApiLongLinkWrap api){
|
||||
List<byte[]> 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]);
|
||||
int[] keyEnc = new int[]{0, 0, 0, 0, 0, 0, 0};
|
||||
int[] keyMac = new int[]{0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
List<DataAndMac> en_data = api.SYD_SM4_EncryptAndMac_BatchData_c(keyEnc, keyMac, data);
|
||||
List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData_java(keyEnc, keyMac, en_data);
|
||||
|
||||
boolean flag = true;
|
||||
for (int i = 0; i < de_data.size(); i++) {
|
||||
flag = flag & de_data.get(i).getMacCheck();
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
|
||||
} else {
|
||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void conformance_testcase2_sm4BatchMacFunc(SydApiLongLinkWrap api){
|
||||
List<byte[]> 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]);
|
||||
int[] keyEnc = new int[]{0, 0, 0, 0, 0, 0, 0};
|
||||
int[] keyMac = new int[]{0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
List<DataAndMac> en_data = api.SYD_SM4_EncryptAndMac_BatchData_java(keyEnc, keyMac, data);
|
||||
List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData_c(keyEnc, keyMac, en_data);
|
||||
|
||||
boolean flag = true;
|
||||
for (int i = 0; i < de_data.size(); i++) {
|
||||
flag = flag & de_data.get(i).getMacCheck();
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
|
||||
} else {
|
||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
// 路径要以 / 或 \\ 结尾表示目录
|
||||
|
||||
String[] pcipList = {"172.1.41.216", "172.1.41.129"};
|
||||
int[] iportList = {8880, 8889};
|
||||
SydApi api = new SydApi4Database();
|
||||
try {
|
||||
|
||||
api.SYD_Short_Connect_Ex(pcipList, iportList, 1000, 1000);
|
||||
|
||||
// 密钥索引
|
||||
int keyEncIdx = 0;
|
||||
|
||||
int keyMacIdx = 0;
|
||||
|
||||
// 测试数据
|
||||
byte[] data = new byte[16];
|
||||
|
||||
|
||||
// 短数据
|
||||
DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data);
|
||||
DataAndMacCheck deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac());
|
||||
|
||||
if (Arrays.equals( data, deData.getData() ) ) {
|
||||
System.out.println("短数据加密并计算 MAC - 测试通过");
|
||||
} else {
|
||||
System.out.println("短数据加密并计算 MAC - 测试失败");
|
||||
}
|
||||
|
||||
|
||||
// 批量短数据
|
||||
List<byte[]>data2 = Arrays.asList(
|
||||
new byte[8],
|
||||
new byte[500],
|
||||
new byte[512]
|
||||
);
|
||||
|
||||
|
||||
List<DataAndMac> ret2 = api.SYD_SM4_EncryptAndMac_BatchData(
|
||||
new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
|
||||
new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
|
||||
data2
|
||||
);
|
||||
|
||||
List<DataAndMacCheck>deDatas = api.SYD_SM4_CheckMacAndDecrypt_BatchData(
|
||||
new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
|
||||
new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
|
||||
ret2
|
||||
);
|
||||
|
||||
for (int i=0; i< deDatas.size(); i++){
|
||||
byte[] d1 = data2.get(i);
|
||||
DataAndMacCheck d2 = deDatas.get(i);
|
||||
|
||||
if (! d2.getMacCheck() ) {
|
||||
System.out.println("批量短数据加密并计算 MAC 验证失败 - 测试失败");
|
||||
return;
|
||||
}
|
||||
if (! Arrays.equals( d1, d2.getData() ) ) {
|
||||
System.out.println("批量短数据加密并计算 MAC - 测试失败");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("批量短数据加密并计算 MAC - 测试通过");
|
||||
|
||||
} finally {
|
||||
if (null != api) {
|
||||
api.SYD_Disconnect_Ex();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -1,83 +0,0 @@
|
||||
package test;
|
||||
|
||||
import com.sunyard.sge.database.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class EncryptAndMac {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
// 路径要以 / 或 \\ 结尾表示目录
|
||||
|
||||
String[] pcipList = {"172.1.41.216", "172.1.41.129"};
|
||||
int[] iportList = {8880, 8889};
|
||||
SydApi api = new SydApi4Database();
|
||||
try {
|
||||
|
||||
api.SYD_Short_Connect_Ex(pcipList, iportList, 1000, 1000);
|
||||
|
||||
// 密钥索引
|
||||
int keyEncIdx = 0;
|
||||
|
||||
int keyMacIdx = 0;
|
||||
|
||||
// 测试数据
|
||||
byte[] data = new byte[16];
|
||||
|
||||
|
||||
// 短数据
|
||||
DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data);
|
||||
DataAndMacCheck deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac());
|
||||
|
||||
if (Arrays.equals( data, deData.getData() ) ) {
|
||||
System.out.println("短数据加密并计算 MAC - 测试通过");
|
||||
} else {
|
||||
System.out.println("短数据加密并计算 MAC - 测试失败");
|
||||
}
|
||||
|
||||
|
||||
// 批量短数据
|
||||
List<byte[]>data2 = Arrays.asList(
|
||||
new byte[8],
|
||||
new byte[500],
|
||||
new byte[512]
|
||||
);
|
||||
|
||||
|
||||
List<DataAndMac> ret2 = api.SYD_SM4_EncryptAndMac_BatchData(
|
||||
new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
|
||||
new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
|
||||
data2
|
||||
);
|
||||
|
||||
List<DataAndMacCheck>deDatas = api.SYD_SM4_CheckMacAndDecrypt_BatchData(
|
||||
new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
|
||||
new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
|
||||
ret2
|
||||
);
|
||||
|
||||
for (int i=0; i< deDatas.size(); i++){
|
||||
byte[] d1 = data2.get(i);
|
||||
DataAndMacCheck d2 = deDatas.get(i);
|
||||
|
||||
if (! d2.getMacCheck() ) {
|
||||
System.out.println("批量短数据加密并计算 MAC 验证失败 - 测试失败");
|
||||
return;
|
||||
}
|
||||
if (! Arrays.equals( d1, d2.getData() ) ) {
|
||||
System.out.println("批量短数据加密并计算 MAC - 测试失败");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("批量短数据加密并计算 MAC - 测试通过");
|
||||
|
||||
} finally {
|
||||
if (null != api) {
|
||||
api.SYD_Disconnect_Ex();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -21,22 +21,18 @@ public class FuncTest {
|
||||
private int connectTimeout = 1000;
|
||||
private int dealTimeout = 2000;
|
||||
|
||||
public FuncTest(Config config){
|
||||
public FuncTest(Config config) {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public SydApi connect(){
|
||||
if ( isShortLink ) {
|
||||
public SydApi connect() {
|
||||
if (isShortLink) {
|
||||
|
||||
SydApi api = new SydApi4Database();
|
||||
api.SYD_Short_Connect_Ex(config.getIps(), config.getPorts(), connectTimeout, dealTimeout);
|
||||
return api;
|
||||
}
|
||||
|
||||
else {
|
||||
} else {
|
||||
SydApiBuilder builder = new SydApiBuilder(
|
||||
config.getIps(),
|
||||
config.getPorts(),
|
||||
@ -111,7 +107,6 @@ public class FuncTest {
|
||||
}
|
||||
|
||||
|
||||
|
||||
data = new byte[0];
|
||||
sm3 = api.initSM3();
|
||||
for (int i = 0; i < 10; i++) {
|
||||
@ -176,7 +171,7 @@ public class FuncTest {
|
||||
System.out.println("-------- SM4长数据加解密功能测试开始 --------");
|
||||
SydApi api = connect();
|
||||
boolean ret = LongDataTest.case1(api);
|
||||
if ( ! ret ){
|
||||
if (!ret) {
|
||||
System.out.println("-------- SM4长数据加解密功能测试失败 --------\n");
|
||||
} else {
|
||||
System.out.println("-------- SM4长数据加解密功能测试结束 --------\n");
|
||||
@ -224,7 +219,7 @@ public class FuncTest {
|
||||
System.out.println("-------- SM4MAC长数据功能测试开始 --------");
|
||||
SydApi api = connect();
|
||||
|
||||
byte[] data1 = new byte[4064];
|
||||
byte[] data1 = new byte[2048];
|
||||
int key = 0;
|
||||
ISM4Mac sm4mac = api.initSM4Mac(key);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
@ -232,27 +227,23 @@ public class FuncTest {
|
||||
}
|
||||
byte[] res1 = sm4mac.digest();
|
||||
|
||||
// 64 x 16 = 1024
|
||||
byte[] data2 = new byte[16];
|
||||
sm4mac = api.initSM4Mac(key);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
for (int i = 0; i < 64; i++) {
|
||||
sm4mac.update(data2);
|
||||
}
|
||||
byte[] res2 = sm4mac.digest();
|
||||
|
||||
// c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1))
|
||||
// s = opt.hexcheck(SM4MAC_LONG_RESULT1)
|
||||
//
|
||||
// c2 = opt2.check(hexStringTobytes(SM4MAC_LONG_RESULT2))
|
||||
// s2 = opt2.hexcheck(SM4MAC_LONG_RESULT2)
|
||||
byte[] r = api.SYD_SM4Mac_ShortData(0, new byte[1024]);
|
||||
|
||||
if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) {
|
||||
System.out.println( Util.bytes2HexString(r) );
|
||||
if ( Arrays.equals(res2, r )
|
||||
&& Arrays.equals(r, Util.hexString2Bytes("E04F0975D47219AE9B949CB185C303E9"))
|
||||
) {
|
||||
System.out.println("SM4MAC长数据测试成功");
|
||||
} else {
|
||||
System.out.println("SM4MAC长数据测试失败");
|
||||
System.out.println("计算结果:" + res1);
|
||||
System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT1);
|
||||
System.out.println("计算结果:" + res2);
|
||||
System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT2);
|
||||
}
|
||||
|
||||
|
||||
@ -327,7 +318,7 @@ public class FuncTest {
|
||||
boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s);
|
||||
|
||||
boolean flag = true;
|
||||
if ( null != s) {
|
||||
if (null != s) {
|
||||
for (int i = 0; i < check.length; i++) {
|
||||
if (!check[i]) {
|
||||
flag = false;
|
||||
@ -362,14 +353,14 @@ public class FuncTest {
|
||||
DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
|
||||
System.out.println("step2");
|
||||
DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
|
||||
System.out.println("step3");
|
||||
System.out.println("step3 " + de_data1.getMacCheck());
|
||||
|
||||
|
||||
try {
|
||||
DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2);
|
||||
System.out.println("step4");
|
||||
}catch ( SydApiException e) {
|
||||
if ( e.getRetCode() == 0x1000001 ) {
|
||||
} catch (SydApiException e) {
|
||||
if (e.getRetCode() == 0x1000001) {
|
||||
System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试通过");
|
||||
} else {
|
||||
System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试失败");
|
||||
@ -380,8 +371,8 @@ public class FuncTest {
|
||||
try {
|
||||
DataAndMacCheck de_data2 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, new byte[15], new byte[0]);
|
||||
System.out.println("step5");
|
||||
}catch ( SydApiException e) {
|
||||
if ( e.getRetCode() == 0x1000001 ) {
|
||||
} catch (SydApiException e) {
|
||||
if (e.getRetCode() == 0x1000001) {
|
||||
System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试通过");
|
||||
} else {
|
||||
System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试失败");
|
||||
@ -397,6 +388,14 @@ public class FuncTest {
|
||||
System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功");
|
||||
}
|
||||
|
||||
if ( ! isShortLink ){
|
||||
System.out.println("long link");
|
||||
EncryptAndMac.conformance_testcase1_SYD_SM4_EncryptAndMac_ShortData((SydApiLongLinkWrap) api);
|
||||
EncryptAndMac.conformance_testcase2_SYD_SM4_EncryptAndMac_ShortData((SydApiLongLinkWrap) api);
|
||||
} else {
|
||||
System.out.println("short link");
|
||||
}
|
||||
|
||||
System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
|
||||
}
|
||||
|
||||
@ -419,8 +418,8 @@ public class FuncTest {
|
||||
List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
|
||||
|
||||
boolean flag = true;
|
||||
for (int i = 0; i < de_data.size(); i++) {
|
||||
flag = flag & de_data.get(i).getMacCheck();
|
||||
for (DataAndMacCheck deDatum : de_data) {
|
||||
flag = flag & deDatum.getMacCheck();
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
@ -429,6 +428,14 @@ public class FuncTest {
|
||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
|
||||
}
|
||||
|
||||
if ( ! isShortLink ){
|
||||
System.out.println("long link");
|
||||
EncryptAndMac.conformance_testcase1_sm4BatchMacFunc((SydApiLongLinkWrap) api);
|
||||
EncryptAndMac.conformance_testcase2_sm4BatchMacFunc((SydApiLongLinkWrap) api);
|
||||
} else {
|
||||
System.out.println("short link");
|
||||
}
|
||||
|
||||
System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
|
||||
}
|
||||
|
||||
@ -467,7 +474,7 @@ public class FuncTest {
|
||||
|
||||
}
|
||||
|
||||
public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception{
|
||||
public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception {
|
||||
|
||||
boolean flag = true;
|
||||
SydApi.SYD_SetLogConfig("./logs", 3);
|
||||
@ -488,9 +495,9 @@ public class FuncTest {
|
||||
System.out.println("9. SM4短数据加密后生成MAC,解密验证MAC");
|
||||
System.out.println("10. SM4批量数据加密后生成MAC,验证MAC解密");
|
||||
|
||||
System.out.println("11. SM4长数据MAC");
|
||||
System.out.println("12. SM4长数据加解密");
|
||||
|
||||
System.out.println("11. SM4长数据加解密");
|
||||
System.out.println("12. SM4长数据MAC");
|
||||
|
||||
|
||||
System.out.println("13. SM3长数据");
|
||||
@ -549,8 +556,6 @@ public class FuncTest {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
Config config = config = Config.loadConfig();
|
||||
if (config == null || config.isDebug()) {
|
||||
|
||||
@ -127,7 +127,7 @@ public class LongDataTest {
|
||||
public static boolean case1(SydApi api) {
|
||||
|
||||
int max = 1000;
|
||||
int size = 4065;
|
||||
int size = 4064;
|
||||
ISM4 en = api.initSM4(0, 1);
|
||||
ISM4 de = api.initSM4(0, 0);
|
||||
|
||||
|
||||
@ -27,13 +27,11 @@ public class TestAll {
|
||||
public static final int ECB_ENC = 1;
|
||||
|
||||
|
||||
|
||||
public static void setLog(){
|
||||
public static void setLog() {
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "false");
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void startPerformanceFile() {
|
||||
try (FileWriter fw = new FileWriter(PERF_RESULT_FILE, true);
|
||||
BufferedWriter bw = new BufferedWriter(fw)) {
|
||||
@ -102,7 +100,7 @@ public class TestAll {
|
||||
FuncTest funcTest = new FuncTest(config);
|
||||
|
||||
|
||||
while ( true ) {
|
||||
while (true) {
|
||||
System.out.println("请选择测试项:");
|
||||
System.out.println("1. 功能单项测试");
|
||||
System.out.println("2. 功能全量测试");
|
||||
@ -146,7 +144,6 @@ public class TestAll {
|
||||
private static final String PERF_RESULT_FILE = "performance_results.txt";
|
||||
|
||||
|
||||
|
||||
public void sm4ShortEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException {
|
||||
byte[] data = new byte[plainLen];
|
||||
SydApiBuilder builder = new SydApiBuilder(
|
||||
@ -183,7 +180,7 @@ public class TestAll {
|
||||
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatencyEnc = duration * 1.0 / totalRequest;
|
||||
double avgLatencyEnc = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
System.out.println("平均延时(加密): " + String.format("%.2f", avgLatencyEnc) + " ms");
|
||||
|
||||
writeToPerformanceFile("SM4短数据加密", 1024, 1, numberOfThreads, totalRequest, tps, avgLatencyEnc);
|
||||
@ -211,7 +208,7 @@ public class TestAll {
|
||||
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatencyDec = duration * 1.0 / totalRequest;
|
||||
double avgLatencyDec = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
System.out.println("平均延时(解密): " + String.format("%.2f", avgLatencyDec) + " ms");
|
||||
|
||||
writeToPerformanceFile("SM4短数据解密", 1024, 1, numberOfThreads, totalRequest, tps, avgLatencyDec);
|
||||
@ -266,7 +263,7 @@ public class TestAll {
|
||||
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatency = duration * 1.0 / totalRequest;
|
||||
double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4批量数据加密", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
|
||||
|
||||
SydApi apiTest = Api.get();
|
||||
@ -292,7 +289,7 @@ public class TestAll {
|
||||
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
avgLatency = duration * 1.0 / totalRequest;
|
||||
avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4批量数据解密", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
|
||||
}
|
||||
|
||||
@ -341,7 +338,7 @@ public class TestAll {
|
||||
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatency = duration * 1.0 / totalRequest;
|
||||
double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4MAC 短数据", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
|
||||
}
|
||||
|
||||
@ -393,7 +390,7 @@ public class TestAll {
|
||||
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatency = duration * 1.0 / totalRequest;
|
||||
double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4MAC 批量数据", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
|
||||
}
|
||||
|
||||
@ -440,7 +437,7 @@ public class TestAll {
|
||||
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatency = duration * 1.0 / totalRequest;
|
||||
double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM3 短数据", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
|
||||
}
|
||||
|
||||
@ -497,11 +494,10 @@ public class TestAll {
|
||||
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatency = duration * 1.0 / totalRequest;
|
||||
double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4短数据加密并生成MAC", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
|
||||
|
||||
|
||||
|
||||
ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads);
|
||||
start = System.currentTimeMillis();
|
||||
for (int i = 0; i < totalRequest; i++) {
|
||||
@ -522,7 +518,7 @@ public class TestAll {
|
||||
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
avgLatency = duration * 1.0 / totalRequest;
|
||||
avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4短数据解密并校验MAC", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
|
||||
}
|
||||
|
||||
@ -582,7 +578,7 @@ public class TestAll {
|
||||
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
double avgLatency = duration * 1.0 / totalRequest;
|
||||
double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4批量数据加密并生成MAC", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
|
||||
|
||||
ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads);
|
||||
@ -605,12 +601,11 @@ public class TestAll {
|
||||
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("TPS: " + String.format("%.2f", tps));
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
avgLatency = duration * 1.0 / totalRequest;
|
||||
avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
|
||||
writeToPerformanceFile("SM4批量数据解密并校验MAC", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void sm4LongEnde() {
|
||||
System.out.println("-------- SM4长数据加解密性能测试开始 --------");
|
||||
|
||||
@ -721,14 +716,12 @@ public class TestAll {
|
||||
|
||||
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
|
||||
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
|
||||
writeToPerformanceFile2("SM3长数据", "100MB", 1, 1, throughput);
|
||||
writeToPerformanceFile2("SM3长数据", "100MB", 1, 1, throughput);
|
||||
|
||||
System.out.println("-------- SM3长数据性能测试结束 --------");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void perfAll() throws InterruptedException {
|
||||
this.sm4ShortEndes();
|
||||
this.sm4BatchEndes();
|
||||
@ -744,7 +737,6 @@ public class TestAll {
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void showmenu() {
|
||||
System.out.println("请选择测试项:");
|
||||
System.out.println("1.SM4 短数据加解密");
|
||||
@ -761,8 +753,9 @@ public class TestAll {
|
||||
System.out.println("12. 批量数据 SM4+MAC性能测试");
|
||||
System.out.println("-1.退出");
|
||||
}
|
||||
public static void perfMenu(Config config, Choise choise, TestAll test) throws Exception{
|
||||
|
||||
|
||||
public static void perfMenu(Config config, Choise choise, TestAll test) throws Exception {
|
||||
|
||||
boolean flag = true;
|
||||
|
||||
while (flag) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user