MAC 统一为 bytes
This commit is contained in:
+1
-2
@@ -3,5 +3,4 @@
|
|||||||
debug=true
|
debug=true
|
||||||
|
|
||||||
# 地址列表 (格式: addX=ip:port)
|
# 地址列表 (格式: addX=ip:port)
|
||||||
addr1=172.1.41.129:8889
|
addr1=baishe.fullstack.club:18889
|
||||||
addr2=172.1.41.129:8889
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# 应用配置
|
||||||
|
# 调试模式 (true/false)
|
||||||
|
debug=true
|
||||||
|
|
||||||
|
# 地址列表 (格式: addX=ip:port)
|
||||||
|
addr1=172.1.41.129:8889
|
||||||
|
addr2=172.1.41.129:8889
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sunyard</groupId>
|
<groupId>com.sunyard</groupId>
|
||||||
<artifactId>sydapi4j</artifactId>
|
<artifactId>sydapi4j</artifactId>
|
||||||
<version>1.15.20250701</version>
|
<version>1.15.20250709</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
@@ -50,9 +50,25 @@
|
|||||||
<version>${log.version}</version>
|
<version>${log.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.java.dev.jna</groupId>
|
||||||
|
<artifactId>jna</artifactId>
|
||||||
|
<version>5.13.0</version> <!-- 使用最新版本 -->
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.so</include>
|
||||||
|
</includes>
|
||||||
|
<filtering>false</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
<pluginManagement>
|
<pluginManagement>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.sunyard.sge.bytes;
|
||||||
|
|
||||||
|
public class BytesUtil {
|
||||||
|
private static final int BLOCK_SIZE = 16;
|
||||||
|
/**
|
||||||
|
* 计算填充后的长度
|
||||||
|
* @param originalLen 原始长度
|
||||||
|
* @return 16字节对齐后的长度
|
||||||
|
*/
|
||||||
|
public static int calculatePaddedLength(int originalLen) {
|
||||||
|
if (originalLen <= 0) {
|
||||||
|
return BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
// 如果已经是16的倍数(包括0),则补一个完整的块(16字节)
|
||||||
|
// 否则补足到下一个16的倍数
|
||||||
|
return (originalLen % BLOCK_SIZE == 0)
|
||||||
|
? originalLen + BLOCK_SIZE
|
||||||
|
: ((originalLen / BLOCK_SIZE) + 1) * BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,9 +2,9 @@ package com.sunyard.sge.database;
|
|||||||
|
|
||||||
public class DataAndMac {
|
public class DataAndMac {
|
||||||
private byte[] data;
|
private byte[] data;
|
||||||
private String mac;
|
private byte[] mac;
|
||||||
|
|
||||||
public DataAndMac(byte[] data, String mac) {
|
public DataAndMac(byte[] data, byte[] mac) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.mac = mac;
|
this.mac = mac;
|
||||||
}
|
}
|
||||||
@@ -17,11 +17,11 @@ public class DataAndMac {
|
|||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMac() {
|
public byte[] getMac() {
|
||||||
return mac;
|
return mac;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMac(String mac) {
|
public void setMac(byte[] mac) {
|
||||||
this.mac = mac;
|
this.mac = mac;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,10 +177,7 @@ public interface SydApi {
|
|||||||
* @return String[] 数组,长度等于 pcData List 的长度。
|
* @return String[] 数组,长度等于 pcData List 的长度。
|
||||||
* String[] 数组中的每个值为 mac值(固定长度16字节)的 HEX字符串。
|
* String[] 数组中的每个值为 mac值(固定长度16字节)的 HEX字符串。
|
||||||
*/
|
*/
|
||||||
String[] SYD_SM4Mac_BatchData(
|
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData);
|
||||||
int[] iKeyIndex,
|
|
||||||
List<byte[]> pcData
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -195,7 +192,7 @@ public interface SydApi {
|
|||||||
boolean[] SYD_SM4Mac_BatchData(
|
boolean[] SYD_SM4Mac_BatchData(
|
||||||
int[] iKeyIndex,
|
int[] iKeyIndex,
|
||||||
List<byte[]> pcData,
|
List<byte[]> pcData,
|
||||||
String[] pcMac
|
List<byte[]> pcMac
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -251,7 +248,7 @@ public interface SydApi {
|
|||||||
* @param pcData: 输入。计算mac所需要的数据。
|
* @param pcData: 输入。计算mac所需要的数据。
|
||||||
* @return mac值(固定长度16字节)转HEX 字符串格式
|
* @return mac值(固定长度16字节)转HEX 字符串格式
|
||||||
*/
|
*/
|
||||||
String SYD_SM4Mac_ShortData(
|
byte[] SYD_SM4Mac_ShortData(
|
||||||
int iKeyIndex,
|
int iKeyIndex,
|
||||||
byte[] pcData
|
byte[] pcData
|
||||||
);
|
);
|
||||||
@@ -268,7 +265,7 @@ public interface SydApi {
|
|||||||
boolean SYD_SM4Mac_ShortData(
|
boolean SYD_SM4Mac_ShortData(
|
||||||
int iKeyIndex,
|
int iKeyIndex,
|
||||||
byte[] pcData,
|
byte[] pcData,
|
||||||
String pcMac
|
byte[] pcMac
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -300,7 +297,7 @@ public interface SydApi {
|
|||||||
int iEncKeyIndex,
|
int iEncKeyIndex,
|
||||||
int iMacKeyIndex,
|
int iMacKeyIndex,
|
||||||
byte[] pcData,
|
byte[] pcData,
|
||||||
String mac
|
byte[] mac
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class SydApi4Database extends SydApiBaseFunction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
|
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
|
||||||
|
|
||||||
if ( null == iKeyIndex || null == pcData ) {
|
if ( null == iKeyIndex || null == pcData ) {
|
||||||
throw new IllegalArgumentException("批量输入数据为 null");
|
throw new IllegalArgumentException("批量输入数据为 null");
|
||||||
@@ -94,7 +94,7 @@ public class SydApi4Database extends SydApiBaseFunction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( 0 == iKeyIndex.length ) {
|
if ( 0 == iKeyIndex.length ) {
|
||||||
return new String[0];
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将数据进行分组,防止超长。
|
// 将数据进行分组,防止超长。
|
||||||
@@ -132,16 +132,16 @@ public class SydApi4Database extends SydApiBaseFunction {
|
|||||||
keyGroups.add(curKeyGroup);
|
keyGroups.add(curKeyGroup);
|
||||||
|
|
||||||
// 排队处理
|
// 排队处理
|
||||||
List<String> ret = new ArrayList<>();
|
List<byte[]> ret = new ArrayList<>();
|
||||||
for (int i = 0; i < dataGroups.size(); i++) {
|
for (int i = 0; i < dataGroups.size(); i++) {
|
||||||
String[] macs = super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i));
|
List<byte[]> macs = super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i));
|
||||||
ret.addAll(Arrays.asList(macs));
|
ret.addAll(macs);
|
||||||
}
|
}
|
||||||
return ret.toArray(new String[0]);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
|
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, List<byte[]> pcMac) {
|
||||||
|
|
||||||
if ( null == iKeyIndex || null == pcData ) {
|
if ( null == iKeyIndex || null == pcData ) {
|
||||||
throw new IllegalArgumentException("批量输入数据为 null");
|
throw new IllegalArgumentException("批量输入数据为 null");
|
||||||
@@ -158,12 +158,12 @@ public class SydApi4Database extends SydApiBaseFunction {
|
|||||||
// 将数据进行分组,防止超长。
|
// 将数据进行分组,防止超长。
|
||||||
List<List<byte[]>> dataGroups = new ArrayList<>();
|
List<List<byte[]>> dataGroups = new ArrayList<>();
|
||||||
List<List<Integer>> keyGroups = new ArrayList<>();
|
List<List<Integer>> keyGroups = new ArrayList<>();
|
||||||
List<List<String>> macGroups = new ArrayList<>();
|
List<List<byte[]>> macGroups = new ArrayList<>();
|
||||||
int totalLen = 0;
|
int totalLen = 0;
|
||||||
|
|
||||||
List<byte[]> curDataGroup = new ArrayList<>();
|
List<byte[]> curDataGroup = new ArrayList<>();
|
||||||
List<Integer> curKeyGroup = new ArrayList<>();
|
List<Integer> curKeyGroup = new ArrayList<>();
|
||||||
List<String> curMacGroup = new ArrayList<>();
|
List<byte[]> curMacGroup = new ArrayList<>();
|
||||||
|
|
||||||
for (int i = 0; i < pcData.size(); i++) {
|
for (int i = 0; i < pcData.size(); i++) {
|
||||||
byte[] data = pcData.get(i);
|
byte[] data = pcData.get(i);
|
||||||
@@ -188,7 +188,7 @@ public class SydApi4Database extends SydApiBaseFunction {
|
|||||||
|
|
||||||
curDataGroup.add(data);
|
curDataGroup.add(data);
|
||||||
curKeyGroup.add(iKeyIndex[i]);
|
curKeyGroup.add(iKeyIndex[i]);
|
||||||
curMacGroup.add(pcMac[i]);
|
curMacGroup.add(pcMac.get(i));
|
||||||
totalLen += data.length;
|
totalLen += data.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ public class SydApi4Database extends SydApiBaseFunction {
|
|||||||
boolean[] rets = super.SYD_SM4Mac_BatchData(
|
boolean[] rets = super.SYD_SM4Mac_BatchData(
|
||||||
toIntArray(keyGroups.get(i)),
|
toIntArray(keyGroups.get(i)),
|
||||||
dataGroups.get(i),
|
dataGroups.get(i),
|
||||||
macGroups.get(i).toArray(new String[0])
|
macGroups.get(i)
|
||||||
);
|
);
|
||||||
for (boolean r : rets) {
|
for (boolean r : rets) {
|
||||||
ret.add(r);
|
ret.add(r);
|
||||||
|
|||||||
@@ -515,14 +515,14 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
|
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
|
||||||
Logger log = LogFactory.getLogger();
|
Logger log = LogFactory.getLogger();
|
||||||
if (LogFactory.iLogLevel == 3) {
|
if (LogFactory.iLogLevel == 3) {
|
||||||
log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size());
|
log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcData.isEmpty()) {
|
if (pcData.isEmpty()) {
|
||||||
return new String[0];
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null == this.hsms || this.hsms.length < 1) {
|
if (null == this.hsms || this.hsms.length < 1) {
|
||||||
@@ -545,12 +545,12 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
if (isShortLinkMode) {
|
if (isShortLinkMode) {
|
||||||
try {
|
try {
|
||||||
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
|
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
|
||||||
String[] ret = new String[list.size()];
|
List<byte[]> ret = new ArrayList<>(list.size());
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
byte[] mac = new byte[16];
|
byte[] mac = new byte[16];
|
||||||
byte[] buff = list.get(i);
|
byte[] buff = list.get(i);
|
||||||
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
||||||
ret[i] = Util.bytes2HexString(mac);
|
ret.add( mac );
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@@ -566,12 +566,12 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
synchronized (api) {
|
synchronized (api) {
|
||||||
try {
|
try {
|
||||||
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
|
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
|
||||||
String[] ret = new String[list.size()];
|
List<byte[]> ret = new ArrayList<>(list.size());
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
byte[] mac = new byte[16];
|
byte[] mac = new byte[16];
|
||||||
byte[] buff = list.get(i);
|
byte[] buff = list.get(i);
|
||||||
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
||||||
ret[i] = Util.bytes2HexString(mac);
|
ret.add( mac );
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@@ -593,10 +593,10 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
|
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, List<byte[]> pcMac) {
|
||||||
Logger log = LogFactory.getLogger();
|
Logger log = LogFactory.getLogger();
|
||||||
if (LogFactory.iLogLevel == 3) {
|
if (LogFactory.iLogLevel == 3) {
|
||||||
log.debug("SYD_SM4Mac_BatchData方法接收参数:iKeyIndex:{}, pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), Arrays.toString(pcMac));
|
log.debug("SYD_SM4Mac_BatchData 方法接收参数:iKeyIndex:{}, pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), pcMac.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcData.isEmpty()) {
|
if (pcData.isEmpty()) {
|
||||||
@@ -626,7 +626,7 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
byte[] mac = new byte[16];
|
byte[] mac = new byte[16];
|
||||||
byte[] buff = list.get(i);
|
byte[] buff = list.get(i);
|
||||||
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
||||||
ret[i] = pcMac[i].equals(Util.bytes2HexString(mac));
|
ret[i] = Arrays.equals(pcMac.get(i), mac);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -647,7 +647,7 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
byte[] mac = new byte[16];
|
byte[] mac = new byte[16];
|
||||||
byte[] buff = list.get(i);
|
byte[] buff = list.get(i);
|
||||||
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
|
||||||
ret[i] = pcMac[i].equals(Util.bytes2HexString(mac));
|
ret[i] = Arrays.equals(pcMac.get(i), mac);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -777,11 +777,11 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
|
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
|
||||||
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024);
|
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen) {
|
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen) {
|
||||||
Logger log = LogFactory.getLogger();
|
Logger log = LogFactory.getLogger();
|
||||||
if (LogFactory.iLogLevel == 3) {
|
if (LogFactory.iLogLevel == 3) {
|
||||||
log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData));
|
log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData));
|
||||||
@@ -843,15 +843,15 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) {
|
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
|
||||||
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024, pcMac);
|
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024, pcMac);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen, String pcMac) {
|
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen, byte[] pcMac) {
|
||||||
Logger log = LogFactory.getLogger();
|
Logger log = LogFactory.getLogger();
|
||||||
if (LogFactory.iLogLevel == 3) {
|
if (LogFactory.iLogLevel == 3) {
|
||||||
log.debug("SYD_SM4Mac_ShortData方法接收参数:{}", iKeyIndex, Arrays.toString(pcData), pcMac);
|
log.debug("SYD_SM4Mac_ShortData 方法接收参数:{}", iKeyIndex, Util.bytes2HexString(pcData), Util.bytes2HexString(pcMac));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( null == pcData || pcData.length > limitDataLen ) {
|
if ( null == pcData || pcData.length > limitDataLen ) {
|
||||||
@@ -866,7 +866,7 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
updateLastUseTime();
|
updateLastUseTime();
|
||||||
String mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
|
byte[] mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
|
||||||
log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac);
|
log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac);
|
||||||
return pcMac.equals(mac);
|
return pcMac.equals(mac);
|
||||||
}
|
}
|
||||||
@@ -888,14 +888,14 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
// 参数检查在函数内部
|
// 参数检查在函数内部
|
||||||
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
||||||
// mac 长度放宽到 1024,因为密文填充
|
// mac 长度放宽到 1024,因为密文填充
|
||||||
String mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
|
byte[] mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
|
||||||
return new DataAndMac(enData, mac);
|
return new DataAndMac(enData, mac);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
|
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] mac) {
|
||||||
Logger log = LogFactory.getLogger();
|
Logger log = LogFactory.getLogger();
|
||||||
if (LogFactory.iLogLevel == 3) {
|
if (LogFactory.iLogLevel == 3) {
|
||||||
log.debug("SYD_SM4_CheckMacAndDecrypt_ShortData:k1={} k2={}", iEncKeyIndex, iMacKeyIndex);
|
log.debug("SYD_SM4_CheckMacAndDecrypt_ShortData:k1={} k2={}", iEncKeyIndex, iMacKeyIndex);
|
||||||
@@ -933,10 +933,10 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<byte[]> enDatas = SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
List<byte[]> enDatas = SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
||||||
String[] macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
|
List<byte[]> macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
|
||||||
List<DataAndMac> ret = new ArrayList<DataAndMac>();
|
List<DataAndMac> ret = new ArrayList<DataAndMac>();
|
||||||
for ( int i=0 ; i< enDatas.size() ; i++ ) {
|
for ( int i=0 ; i< enDatas.size() ; i++ ) {
|
||||||
DataAndMac dam = new DataAndMac(enDatas.get(i), macs[i]);
|
DataAndMac dam = new DataAndMac(enDatas.get(i), macs.get(i));
|
||||||
ret.add(dam);
|
ret.add(dam);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@@ -961,10 +961,10 @@ public class SydApiBaseFunction implements SydApi {
|
|||||||
throw new SydApiException("密钥长度和数据长度不对应", 0x01000001);
|
throw new SydApiException("密钥长度和数据长度不对应", 0x01000001);
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] macs = new String[pcData.size()];
|
List<byte[]> macs = new ArrayList<>(pcData.size());
|
||||||
List<byte[]>datas = new ArrayList<>(pcData.size());
|
List<byte[]>datas = new ArrayList<>(pcData.size());
|
||||||
for ( int i=0 ; i<macs.length; i++ ) {
|
for ( int i=0 ; i<macs.size(); i++ ) {
|
||||||
macs[i] = pcData.get(i).getMac();
|
macs.add(pcData.get(i).getMac());
|
||||||
datas.add(pcData.get(i).getData());
|
datas.add(pcData.get(i).getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package com.sunyard.sge.database;
|
package com.sunyard.sge.database;
|
||||||
|
|
||||||
|
import com.sunyard.SydApiException;
|
||||||
import com.sunyard.sge.database.pool.HsmLinkInfo;
|
import com.sunyard.sge.database.pool.HsmLinkInfo;
|
||||||
import com.sunyard.sge.database.pool.SydApiPool;
|
import com.sunyard.sge.database.pool.SydApiPool;
|
||||||
import com.sunyard.sge.log.LogFactory;
|
import com.sunyard.sge.log.LogFactory;
|
||||||
|
import com.sunyard.sge.plus.ConnectHandlerManager;
|
||||||
import com.sunyard.sge.pool.CommWorker;
|
import com.sunyard.sge.pool.CommWorker;
|
||||||
import com.sunyard.sge.pool.PoolConfig;
|
import com.sunyard.sge.pool.PoolConfig;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
@@ -37,6 +39,14 @@ public class SydApiBuilder {
|
|||||||
log.debug("pool config {}", config);
|
log.debug("pool config {}", config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 同时初始化 jna 下 c 的链接
|
||||||
|
int ret = ConnectHandlerManager.init(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||||
|
System.out.println("ConnectHandler return " + ret);
|
||||||
|
if ( 0 != ret ) {
|
||||||
|
throw new SydApiException(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
|
||||||
this.pool = new SydApiPool(config, linkInfo);
|
this.pool = new SydApiPool(config, linkInfo);
|
||||||
longLinkWorks = new CommWorker();
|
longLinkWorks = new CommWorker();
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
package com.sunyard.sge.database;
|
package com.sunyard.sge.database;
|
||||||
|
|
||||||
|
import com.sun.jna.ptr.IntByReference;
|
||||||
import com.sunyard.SydApiException;
|
import com.sunyard.SydApiException;
|
||||||
|
import com.sunyard.proto.Util;
|
||||||
|
import com.sunyard.sge.bytes.BytesUtil;
|
||||||
|
import com.sunyard.sge.plus.ConnectHandlerManager;
|
||||||
|
import com.sunyard.sge.plus.SydLibrary;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -45,6 +50,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,6 +68,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,6 +86,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,6 +104,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,6 +123,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,27 +141,33 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
|
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, 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_SM4Mac_ShortData(iKeyIndex, pcData);
|
return builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) {
|
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
|
||||||
FutureTask<Boolean> task = builder.getLongLinkWorks().fTask(new Callable<Boolean>() {
|
FutureTask<Boolean> task = builder.getLongLinkWorks().fTask(new Callable<Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public Boolean call() throws Exception {
|
public Boolean call() throws Exception {
|
||||||
@@ -151,6 +177,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
try {
|
try {
|
||||||
return task.get();
|
return task.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,16 +195,19 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
|
|
||||||
byte[] enData = taskEnc.get();
|
byte[] enData = taskEnc.get();
|
||||||
|
|
||||||
FutureTask<String> taskMac = builder.getLongLinkWorks().fTask(new Callable<String>() {
|
FutureTask<byte[]> taskMac = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||||
@Override
|
@Override
|
||||||
public String call() throws Exception {
|
public byte[] call() throws Exception {
|
||||||
return builder.get().SYD_SM4Mac_ShortData(iMacKeyIndex, enData);
|
return builder.get().SYD_SM4Mac_ShortData(iMacKeyIndex, enData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
String mac = taskMac.get();
|
byte[] mac = taskMac.get();
|
||||||
return new DataAndMac(enData, mac);
|
return new DataAndMac(enData, mac);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -183,8 +215,40 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
@Override
|
@Override
|
||||||
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||||
try {
|
try {
|
||||||
|
if ( ! ConnectHandlerManager.isInited() ) {
|
||||||
|
throw new SydApiException(-1);
|
||||||
|
}
|
||||||
|
|
||||||
return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
|
int enLen = BytesUtil.calculatePaddedLength(pcData.length);
|
||||||
|
byte[] encData = new byte[enLen];
|
||||||
|
byte[] mac = new byte[16];
|
||||||
|
IntByReference encDataLen = new IntByReference(encData.length);
|
||||||
|
|
||||||
|
int i = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_ShortData(
|
||||||
|
ConnectHandlerManager.getHandler(),
|
||||||
|
iEncKeyIndex,
|
||||||
|
iMacKeyIndex,
|
||||||
|
pcData,
|
||||||
|
pcData.length,
|
||||||
|
encData,
|
||||||
|
encDataLen,
|
||||||
|
mac
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( 0 == i ){
|
||||||
|
byte[] data = new byte[encDataLen.getValue()];
|
||||||
|
if( data.length == encData.length ) {
|
||||||
|
data = encData;
|
||||||
|
} else {
|
||||||
|
System.arraycopy(encData, 0, data, 0, data.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new DataAndMac(data, mac);
|
||||||
|
} else {
|
||||||
|
throw new SydApiException(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||||
|
|
||||||
// // 线程池忙, 使用单线程计算
|
// // 线程池忙, 使用单线程计算
|
||||||
// if( builder.getLongLinkWorks().threadPoolIsBusy() ) {
|
// if( builder.getLongLinkWorks().threadPoolIsBusy() ) {
|
||||||
@@ -245,53 +309,203 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
//
|
//
|
||||||
// return new DataAndMac(enData, mac.getData());
|
// return new DataAndMac(enData, mac.getData());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
|
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
|
||||||
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 {
|
try {
|
||||||
return task.get();
|
if ( ! ConnectHandlerManager.isInited() ) {
|
||||||
|
throw new SydApiException(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] decryptedData = new byte[pcData.length];
|
||||||
|
IntByReference decryptedDataLen = new IntByReference(decryptedData.length);
|
||||||
|
|
||||||
|
|
||||||
|
int i = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_ShortData(
|
||||||
|
ConnectHandlerManager.getHandler(),
|
||||||
|
iEncKeyIndex,
|
||||||
|
iMacKeyIndex,
|
||||||
|
pcData,
|
||||||
|
pcData.length,
|
||||||
|
macs,
|
||||||
|
decryptedData,
|
||||||
|
decryptedDataLen
|
||||||
|
);
|
||||||
|
|
||||||
|
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);
|
||||||
|
} if (0x01000010 == i) {
|
||||||
|
return new DataAndMacCheck(data, false);
|
||||||
|
} else {
|
||||||
|
throw new SydApiException(i);
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e instanceof SydApiException) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
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);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
||||||
FutureTask<List<DataAndMac>> task = builder.getLongLinkWorks().fTask(new Callable<List<DataAndMac>>() {
|
if ( ! ConnectHandlerManager.isInited() ) {
|
||||||
@Override
|
throw new SydApiException(-1);
|
||||||
public List<DataAndMac> call() throws Exception {
|
}
|
||||||
return builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
try {
|
try {
|
||||||
return task.get();
|
int size = pcData.size();
|
||||||
|
|
||||||
|
// 准备输入参数 - 直接使用 byte[][]
|
||||||
|
byte[][] pcDataArray = pcData.toArray(new byte[0][]);
|
||||||
|
int[] iDataLen = pcData.stream()
|
||||||
|
.mapToInt(bytes -> bytes.length)
|
||||||
|
.toArray();
|
||||||
|
|
||||||
|
// 准备输出缓冲区
|
||||||
|
byte[][] pcEncData = new byte[size][];
|
||||||
|
int[] iEncDataLen = new int[size];
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
int maxEncLen = ((pcData.get(i).length + 15) / 16 * 16);
|
||||||
|
pcEncData[i] = new byte[maxEncLen];
|
||||||
|
iEncDataLen[i] = maxEncLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] pcMac = new byte[16];
|
||||||
|
|
||||||
|
// 调用加密函数
|
||||||
|
int result = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_BatchData(
|
||||||
|
ConnectHandlerManager.getHandler(),
|
||||||
|
iEncKeyIndex,
|
||||||
|
iMacKeyIndex,
|
||||||
|
pcDataArray,
|
||||||
|
iDataLen,
|
||||||
|
size,
|
||||||
|
pcEncData,
|
||||||
|
iEncDataLen,
|
||||||
|
pcMac);
|
||||||
|
|
||||||
|
if (0 == result) {
|
||||||
|
// 转换结果为Java风格的对象列表
|
||||||
|
List<DataAndMac> results = new ArrayList<>();
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
results.add(new DataAndMac(pcEncData[i], pcMac));
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
} else {
|
||||||
|
throw new SydApiException(result);
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
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);
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
|
public List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
|
||||||
FutureTask<List<DataAndMacCheck>> task = builder.getLongLinkWorks().fTask(new Callable<List<DataAndMacCheck>>() {
|
|
||||||
@Override
|
int size = pcData.size();
|
||||||
public List<DataAndMacCheck> call() throws Exception {
|
|
||||||
return builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
|
// 准备输入参数
|
||||||
}
|
byte[][] pcEncData = pcData.stream()
|
||||||
});
|
.map(DataAndMac::getData)
|
||||||
try {
|
.toArray(byte[][]::new);
|
||||||
return task.get();
|
|
||||||
} catch (Exception e) {
|
int[] iEncDataLen = pcData.stream()
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
.mapToInt(d -> d.getData().length)
|
||||||
|
.toArray();
|
||||||
|
|
||||||
|
byte[][] pcMac = pcData.stream()
|
||||||
|
.map(d -> d.getMac())
|
||||||
|
.toArray(byte[][]::new);
|
||||||
|
|
||||||
|
// 准备输出缓冲区
|
||||||
|
byte[][] pcOutData = new byte[size][];
|
||||||
|
int[] iOutDataLen = new int[size];
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
int maxOutLen = pcData.get(i).getData().length;
|
||||||
|
pcOutData[i] = new byte[maxOutLen];
|
||||||
|
iOutDataLen[i] = maxOutLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int[] iCheckRet = new int[size];
|
||||||
|
|
||||||
|
// 调用解密函数
|
||||||
|
int result = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_BatchData(
|
||||||
|
ConnectHandlerManager.getHandler(),
|
||||||
|
iEncKeyIndex,
|
||||||
|
iMacKeyIndex,
|
||||||
|
pcEncData,
|
||||||
|
iEncDataLen,
|
||||||
|
pcMac,
|
||||||
|
size,
|
||||||
|
pcOutData,
|
||||||
|
iOutDataLen,
|
||||||
|
iCheckRet);
|
||||||
|
|
||||||
|
if (0 == result) {
|
||||||
|
// 转换结果为Java风格的对象列表
|
||||||
|
List<DataAndMacCheck> results = new ArrayList<>();
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
results.add(new DataAndMacCheck(pcOutData[i], iCheckRet[i] == 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// try {
|
||||||
|
// return task.get();
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -395,7 +609,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
|
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
|
||||||
if ( null == iKeyIndex || null == pcData ) {
|
if ( null == iKeyIndex || null == pcData ) {
|
||||||
throw new IllegalArgumentException("批量输入数据为 null");
|
throw new IllegalArgumentException("批量输入数据为 null");
|
||||||
}
|
}
|
||||||
@@ -405,7 +619,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( 0 == iKeyIndex.length ) {
|
if ( 0 == iKeyIndex.length ) {
|
||||||
return new String[0];
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
// 将数据进行分组,防止超长。
|
// 将数据进行分组,防止超长。
|
||||||
List<List<byte[]>> dataGroups = new ArrayList<>();
|
List<List<byte[]>> dataGroups = new ArrayList<>();
|
||||||
@@ -442,13 +656,13 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
keyGroups.add(curKeyGroup);
|
keyGroups.add(curKeyGroup);
|
||||||
|
|
||||||
// 并发处理
|
// 并发处理
|
||||||
List<FutureTask<String[]>> tasks = new ArrayList<>();
|
List<FutureTask<List<byte[]>>> tasks = new ArrayList<>();
|
||||||
for (int i = 0; i < dataGroups.size(); i++) {
|
for (int i = 0; i < dataGroups.size(); i++) {
|
||||||
|
|
||||||
int finalI = i;
|
int finalI = i;
|
||||||
FutureTask<String[]> task = builder.getLongLinkWorks().fTask(new Callable<String[]>() {
|
FutureTask<List<byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<List<byte[]>>() {
|
||||||
@Override
|
@Override
|
||||||
public String[] call() throws Exception {
|
public List<byte[]> call() throws Exception {
|
||||||
SydApi api = builder.get();
|
SydApi api = builder.get();
|
||||||
return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
|
return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
|
||||||
}
|
}
|
||||||
@@ -457,20 +671,23 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<String> ret = new ArrayList<>();
|
List<byte[]> ret = new ArrayList<>();
|
||||||
for (FutureTask<String[]> t : tasks) {
|
for (FutureTask<List<byte[]>> t : tasks) {
|
||||||
String[] macs = t.get();
|
List<byte[]> macs = t.get();
|
||||||
ret.addAll(Arrays.asList(macs));
|
ret.addAll(macs);
|
||||||
}
|
}
|
||||||
return ret.toArray(new String[0]);
|
return ret;
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
|
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, List<byte[]> pcMac) {
|
||||||
if ( null == iKeyIndex || null == pcData ) {
|
if ( null == iKeyIndex || null == pcData ) {
|
||||||
throw new IllegalArgumentException("批量输入数据为 null");
|
throw new IllegalArgumentException("批量输入数据为 null");
|
||||||
}
|
}
|
||||||
@@ -486,12 +703,12 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
// 将数据进行分组,防止超长。
|
// 将数据进行分组,防止超长。
|
||||||
List<List<byte[]>> dataGroups = new ArrayList<>();
|
List<List<byte[]>> dataGroups = new ArrayList<>();
|
||||||
List<List<Integer>> keyGroups = new ArrayList<>();
|
List<List<Integer>> keyGroups = new ArrayList<>();
|
||||||
List<List<String>> macGroups = new ArrayList<>();
|
List<List<byte[]>> macGroups = new ArrayList<>();
|
||||||
int totalLen = 0;
|
int totalLen = 0;
|
||||||
|
|
||||||
List<byte[]> curDataGroup = new ArrayList<>();
|
List<byte[]> curDataGroup = new ArrayList<>();
|
||||||
List<Integer> curKeyGroup = new ArrayList<>();
|
List<Integer> curKeyGroup = new ArrayList<>();
|
||||||
List<String> curMacGroup = new ArrayList<>();
|
List<byte[]> curMacGroup = new ArrayList<>();
|
||||||
|
|
||||||
for (int i = 0; i < pcData.size(); i++) {
|
for (int i = 0; i < pcData.size(); i++) {
|
||||||
byte[] data = pcData.get(i);
|
byte[] data = pcData.get(i);
|
||||||
@@ -516,7 +733,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
|
|
||||||
curDataGroup.add(data);
|
curDataGroup.add(data);
|
||||||
curKeyGroup.add(iKeyIndex[i]);
|
curKeyGroup.add(iKeyIndex[i]);
|
||||||
curMacGroup.add(pcMac[i]);
|
curMacGroup.add(pcMac.get(i));
|
||||||
totalLen += data.length;
|
totalLen += data.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,7 +753,7 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
return api.SYD_SM4Mac_BatchData(
|
return api.SYD_SM4Mac_BatchData(
|
||||||
toIntArray(keyGroups.get(finalI)),
|
toIntArray(keyGroups.get(finalI)),
|
||||||
dataGroups.get(finalI),
|
dataGroups.get(finalI),
|
||||||
macGroups.get(finalI).toArray(new String[0])
|
macGroups.get(finalI)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -554,6 +771,9 @@ public class SydApiLongLinkWrap implements SydApi {
|
|||||||
return toBoolArray(ret);
|
return toBoolArray(ret);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if ( e.getCause() instanceof SydApiException) {
|
||||||
|
throw (SydApiException) e.getCause();
|
||||||
|
}
|
||||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.sunyard.sge.plus;
|
||||||
|
|
||||||
|
import com.sun.jna.Pointer;
|
||||||
|
import com.sun.jna.ptr.PointerByReference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JNA 部分, C 接口的长链接维护。
|
||||||
|
*/
|
||||||
|
public class ConnectHandlerManager {
|
||||||
|
|
||||||
|
private static PointerByReference phHandle = new PointerByReference();
|
||||||
|
private static Boolean inited = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化链接
|
||||||
|
* @param pcIpList
|
||||||
|
* @param iPortList
|
||||||
|
* @param iConnectTimeOut
|
||||||
|
* @param iDealTimeOut
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static int init(String[] pcIpList,
|
||||||
|
int[] iPortList,
|
||||||
|
int iConnectTimeOut,
|
||||||
|
int iDealTimeOut){
|
||||||
|
|
||||||
|
int connectResult = SydLibrary.INSTANCE.SYD_Connect_Ex(
|
||||||
|
pcIpList,
|
||||||
|
iPortList,
|
||||||
|
pcIpList.length,
|
||||||
|
iConnectTimeOut,
|
||||||
|
iDealTimeOut,
|
||||||
|
16,
|
||||||
|
phHandle);
|
||||||
|
|
||||||
|
if ( 0 == connectResult ){
|
||||||
|
inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return connectResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isInited(){
|
||||||
|
return inited;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Pointer getHandler(){
|
||||||
|
return phHandle.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -331,7 +331,7 @@ public class Sample
|
|||||||
int keyIdx = 0;
|
int keyIdx = 0;
|
||||||
// 测试数据
|
// 测试数据
|
||||||
byte[] data = new byte[16];
|
byte[] data = new byte[16];
|
||||||
String macData = api.SYD_SM4Mac_ShortData( keyIdx , data );
|
byte[] macData = api.SYD_SM4Mac_ShortData( keyIdx , data );
|
||||||
boolean ret = api.SYD_SM4Mac_ShortData( keyIdx , data, macData );
|
boolean ret = api.SYD_SM4Mac_ShortData( keyIdx , data, macData );
|
||||||
Assert.assertTrue( ret );
|
Assert.assertTrue( ret );
|
||||||
}
|
}
|
||||||
@@ -345,7 +345,7 @@ public class Sample
|
|||||||
data.add( new byte[16] );
|
data.add( new byte[16] );
|
||||||
data.add( new byte[1024] );
|
data.add( new byte[1024] );
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData( keyIdx , data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData( keyIdx , data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData( keyIdx , data, macs );
|
boolean[] checks = api.SYD_SM4Mac_BatchData( keyIdx , data, macs );
|
||||||
|
|
||||||
for ( int i = 0 ; i < data.size() ; i++ ) {
|
for ( int i = 0 ; i < data.size() ; i++ ) {
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ public class BatchDataTest {
|
|||||||
data.add(new byte[16]);
|
data.add(new byte[16]);
|
||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -204,7 +204,7 @@ public class BatchDataTest {
|
|||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -231,7 +231,7 @@ public class BatchDataTest {
|
|||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -244,7 +244,7 @@ public class BatchDataTest {
|
|||||||
// 测试数据
|
// 测试数据
|
||||||
RandomTestData data = new RandomTestData();
|
RandomTestData data = new RandomTestData();
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.getSize(); i++) {
|
for (int i = 0; i < data.getSize(); i++) {
|
||||||
@@ -258,7 +258,7 @@ public class BatchDataTest {
|
|||||||
// 测试数据
|
// 测试数据
|
||||||
RandomTestData data = new RandomTestData(0);
|
RandomTestData data = new RandomTestData(0);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.getSize(); i++) {
|
for (int i = 0; i < data.getSize(); i++) {
|
||||||
|
|||||||
@@ -1,94 +1,591 @@
|
|||||||
package test;
|
package test;
|
||||||
|
|
||||||
|
import com.sunyard.SydApiException;
|
||||||
|
import com.sunyard.proto.Util;
|
||||||
import com.sunyard.sge.database.*;
|
import com.sunyard.sge.database.*;
|
||||||
import com.sunyard.sge.log.LogFactory;
|
import com.sunyard.sge.log.LogFactory;
|
||||||
|
import com.sunyard.sge.plus.ConnectHandlerManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 功能确认
|
* 功能确认
|
||||||
*/
|
*/
|
||||||
public class FuncTest {
|
public class FuncTest {
|
||||||
private SydApi api;
|
|
||||||
|
|
||||||
@Before
|
public static final int ECB_DEC = 0;
|
||||||
public void init(){
|
public static final int ECB_ENC = 1;
|
||||||
|
|
||||||
|
private Config config;
|
||||||
|
|
||||||
|
private boolean isShortLink = false;
|
||||||
|
private int connectTimeout = 1000;
|
||||||
|
private int dealTimeout = 2000;
|
||||||
|
|
||||||
|
public FuncTest(Config config){
|
||||||
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void syd_Short_Connect_Ex(){
|
|
||||||
String[] pcipList = {"192.168.1.129", "192.168.1.129" };
|
public SydApi connect(){
|
||||||
int[] iportList ={8889,8889};
|
if ( isShortLink ) {
|
||||||
SydApi api = new SydApi4Database();
|
|
||||||
|
SydApi api = new SydApi4Database();
|
||||||
|
api.SYD_Short_Connect_Ex(config.getIps(), config.getPorts(), connectTimeout, dealTimeout);
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
SydApiBuilder builder = new SydApiBuilder(
|
||||||
|
config.getIps(),
|
||||||
|
config.getPorts(),
|
||||||
|
connectTimeout,
|
||||||
|
dealTimeout
|
||||||
|
);
|
||||||
|
SydApi api = builder.build();
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void connectFunc() {
|
||||||
|
isShortLink = true;
|
||||||
|
System.out.println("-------- 切换到短连模式 --------");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void longConnectFunc() {
|
||||||
|
System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
System.out.println("设置长连接参数与获取长连接成功");
|
||||||
|
|
||||||
|
System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm3ShortFunc() {
|
||||||
|
System.out.println("-------- SM3短数据功能测试开始 --------");
|
||||||
|
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
String res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]);
|
||||||
|
String res2 = api.SYD_SM3_Hash_ShortData(new byte[0]);
|
||||||
|
|
||||||
|
if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) {
|
||||||
|
System.out.println("SM3短数据测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("SM3短数据测试失败");
|
||||||
|
System.out.println("计算结果:" + res1);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT1);
|
||||||
|
System.out.println("计算结果:" + res2);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT2);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
api.SYD_Short_Connect_Ex(pcipList,iportList,10,10);
|
api.SYD_SM3_Hash_ShortData(new byte[4096]);
|
||||||
} finally {
|
System.out.println("SM3短数据超出测试失败");
|
||||||
if ( null != api ) {
|
} catch (SydApiException e) {
|
||||||
api.SYD_Disconnect_Ex();
|
System.out.println("SM3短数据超出错误检测成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("-------- SM3短数据功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm3LongFunc() {
|
||||||
|
System.out.println("-------- SM3长数据功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
ISM3 sm3 = api.initSM3();
|
||||||
|
byte[] data = new byte[4064];
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
sm3.update(data);
|
||||||
|
}
|
||||||
|
String res1 = sm3.digest();
|
||||||
|
|
||||||
|
data = new byte[0];
|
||||||
|
sm3 = api.initSM3();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
sm3.update(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
String res2 = sm3.digest();
|
||||||
|
|
||||||
|
if (res1.equals(CalcRes.SM3_LONG_RESULT1) && res2.equals(CalcRes.SM3_LONG_RESULT2)) {
|
||||||
|
System.out.println("SM3长数据测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("SM3长数据测试失败");
|
||||||
|
System.out.println("计算结果:" + res1);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT1);
|
||||||
|
System.out.println("计算结果:" + res2);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- SM3长数据功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4ShortFunc() {
|
||||||
|
System.out.println("-------- SM4短数据加解密功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
int key = 0;
|
||||||
|
|
||||||
|
byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC);
|
||||||
|
byte[] dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
|
||||||
|
|
||||||
|
byte[] enc2 = api.SYD_SM4_ShortData(key, new byte[0], ECB_ENC);
|
||||||
|
byte[] dec2 = api.SYD_SM4_ShortData(key, enc2, ECB_DEC);
|
||||||
|
|
||||||
|
String res1 = Util.bytes2HexString(enc1);
|
||||||
|
String res2 = Util.bytes2HexString(enc2);
|
||||||
|
|
||||||
|
if (res1.equals(CalcRes.SM4_SHORT_RESULT1) && res2.equals(CalcRes.SM4_SHORT_RESULT2)
|
||||||
|
&& Arrays.equals(dec1, new byte[1024]) && Arrays.equals(dec2, new byte[0])) {
|
||||||
|
System.out.println("SM4短数据测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("SM4短数据测试失败");
|
||||||
|
System.out.println("加密计算结果:" + res1);
|
||||||
|
System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT1);
|
||||||
|
System.out.println("解密计算结果:" + Util.bytes2HexString(dec1));
|
||||||
|
System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[1024]));
|
||||||
|
System.out.println("加密计算结果:" + res2);
|
||||||
|
System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT2);
|
||||||
|
System.out.println("解密计算结果:" + Util.bytes2HexString(dec2));
|
||||||
|
System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
enc1 = api.SYD_SM4_ShortData(key, new byte[1025], ECB_ENC);
|
||||||
|
dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
|
||||||
|
System.out.println("SM4短数据长度超出测试失败");
|
||||||
|
} catch (SydApiException e) {
|
||||||
|
System.out.println("SM4短数据长度超出测试成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- SM4短数据加解密功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4LongFunc() {
|
||||||
|
System.out.println("-------- SM4长数据加解密功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
boolean ret = LongDataTest.case1(api);
|
||||||
|
if ( ! ret ){
|
||||||
|
System.out.println("-------- SM4长数据加解密功能测试失败 --------\n");
|
||||||
|
} else {
|
||||||
|
System.out.println("-------- SM4长数据加解密功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4macShortFunc() {
|
||||||
|
System.out.println("-------- SM4MAC短数据功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
int key = 0;
|
||||||
|
byte[] data1 = new byte[1024];
|
||||||
|
byte[] data2 = new byte[0];
|
||||||
|
|
||||||
|
byte[] res1 = api.SYD_SM4Mac_ShortData(key, data1);
|
||||||
|
boolean check1 = api.SYD_SM4Mac_ShortData(key, data1, res1);
|
||||||
|
|
||||||
|
byte[] res2 = api.SYD_SM4Mac_ShortData(key, data2);
|
||||||
|
boolean check2 = api.SYD_SM4Mac_ShortData(key, data2, res2);
|
||||||
|
|
||||||
|
if (res1.equals(CalcRes.SM4MAC_SHORT_RESULT1) && res2.equals(CalcRes.SM4MAC_SHORT_RESULT2)
|
||||||
|
&& check1 && check2) {
|
||||||
|
System.out.println("SM4MAC短数据测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("SM4MAC短数据测试失败");
|
||||||
|
System.out.println("计算结果:" + res1);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT1);
|
||||||
|
System.out.println("计算结果:" + res2);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
res1 = api.SYD_SM4Mac_ShortData(key, new byte[1025]);
|
||||||
|
check1 = api.SYD_SM4Mac_ShortData(key, new byte[1025], res1);
|
||||||
|
System.out.println("SM4MAC短数据长度超出测试失败");
|
||||||
|
} catch (SydApiException e) {
|
||||||
|
System.out.println("SM4MAC短数据长度超出测试成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- SM4MAC短数据功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4macLongFunc() {
|
||||||
|
System.out.println("-------- SM4MAC长数据功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
byte[] data1 = new byte[4064];
|
||||||
|
int key = 0;
|
||||||
|
ISM4Mac sm4mac = api.initSM4Mac(key);
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
sm4mac.update(data1);
|
||||||
|
}
|
||||||
|
String res1 = sm4mac.digest();
|
||||||
|
|
||||||
|
byte[] data2 = new byte[16];
|
||||||
|
sm4mac = api.initSM4Mac(key);
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
sm4mac.update(data2);
|
||||||
|
}
|
||||||
|
String 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)
|
||||||
|
|
||||||
|
if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// try:
|
||||||
|
// input = bytes(4080)
|
||||||
|
// opt2 = conn.sm4_mac_init(0)
|
||||||
|
// for _ in range(10):
|
||||||
|
// opt2.update(input)
|
||||||
|
// res2 = opt2.digest()
|
||||||
|
// System.out.println('SM4MAC长数据长度超出测试失败')
|
||||||
|
// except SmxApiException as e:
|
||||||
|
// System.out.println('SM4MAC长数据长度超出测试成功')
|
||||||
|
//
|
||||||
|
// try:
|
||||||
|
// input = bytes(17)
|
||||||
|
// opt2 = conn.sm4_mac_init(0)
|
||||||
|
// for _ in range(10):
|
||||||
|
// opt2.update(input)
|
||||||
|
// res2 = opt2.digest()
|
||||||
|
// System.out.println('SM4MAC长数据16字节未对齐测试失败')
|
||||||
|
// except SmxApiException as e:
|
||||||
|
// System.out.println('SM4MAC长数据16字节未对齐测试成功')
|
||||||
|
//
|
||||||
|
// System.out.println('-------- SM4MAC长数据功能测试结束 --------\n')
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4BatchFunc() {
|
||||||
|
System.out.println("-------- SM4批量数据加解密功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
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[] key = new int[]{0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
|
List<byte[]> en_data = api.SYD_SM4_BatchData(key, data, ECB_ENC);
|
||||||
|
|
||||||
|
List<byte[]> de_data = api.SYD_SM4_BatchData(key, en_data, ECB_DEC);
|
||||||
|
|
||||||
|
if (en_data.equals(CalcRes.SM4_BATCH_RESULT) && data.equals(de_data)) {
|
||||||
|
System.out.println("SM4批量数据加解密测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("SM4批量数据加解密测试失败");
|
||||||
|
// System.out.println("加密计算结果:" + en_data);
|
||||||
|
System.out.println("加密预期结果:" + CalcRes.SM4_BATCH_RESULT);
|
||||||
|
// System.out.println("解密计算结果:" + de_data);
|
||||||
|
// System.out.println("解密预期结果:" + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- SM4批量数据加解密功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4macBatchFunc() {
|
||||||
|
System.out.println("-------- SM4MAC批量数据功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
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]);
|
||||||
|
int[] keyIdx = new int[]{0, 0, 0, 0};
|
||||||
|
|
||||||
|
List<byte[]> s = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
|
|
||||||
|
boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s);
|
||||||
|
|
||||||
|
boolean flag = true;
|
||||||
|
if ( null != s) {
|
||||||
|
for (int i = 0; i < check.length; i++) {
|
||||||
|
if (!check[i]) {
|
||||||
|
flag = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (flag) {
|
||||||
|
System.out.println("SM4MAC批量数据测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("SM4MAC批量数据测试失败");
|
||||||
|
System.out.println("计算结果:" + check);
|
||||||
|
System.out.println("预期结果:" + new boolean[]{true, true, true, true, true, true, true});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("SM4MAC批量数据测试失败");
|
||||||
|
System.out.println("计算结果:" + s);
|
||||||
|
System.out.println("预期结果:" + CalcRes.SM4MAC_BATCH_RESULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- SM4MAC批量数据功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4ShortMacFunc() {
|
||||||
|
System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
int keyEnc = 0;
|
||||||
|
int keyMac = 0;
|
||||||
|
byte[] data1 = new byte[1024];
|
||||||
|
byte[] data2 = new byte[0];
|
||||||
|
System.out.println("step1");
|
||||||
|
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");
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2);
|
||||||
|
System.out.println("step4");
|
||||||
|
}catch ( SydApiException e) {
|
||||||
|
if ( e.getRetCode() == 0x1000001 ) {
|
||||||
|
System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试通过");
|
||||||
|
} else {
|
||||||
|
System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 ) {
|
||||||
|
System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试通过");
|
||||||
|
} else {
|
||||||
|
System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
data1 = new byte[1025];
|
||||||
|
api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
|
||||||
|
System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试失败");
|
||||||
|
} catch (SydApiException e) {
|
||||||
|
System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sm4BatchMacFunc() {
|
||||||
|
System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试开始 --------");
|
||||||
|
SydApi api = connect();
|
||||||
|
|
||||||
|
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(keyEnc, keyMac, data);
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flag) {
|
||||||
|
System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
|
||||||
|
} else {
|
||||||
|
System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
|
||||||
|
System.out.println("加密计算结果:" + en_data);
|
||||||
|
System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_BATCH_RESULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
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]);
|
||||||
|
data.add(new byte[1024]);
|
||||||
|
keyEnc = new int[]{0, 1, 0, 1, 1, 1, 1, 0};
|
||||||
|
keyMac = new int[]{1, 0, 1, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data);
|
||||||
|
de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
|
||||||
|
System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试失败");
|
||||||
|
} catch (SydApiException e) {
|
||||||
|
System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void loggerFunc() {
|
||||||
|
System.out.println("-------- 设置日志配置功能测试开始 --------");
|
||||||
|
SydApi.SYD_SetLogConfig("./logs", 3);
|
||||||
|
System.out.println("日志配置成功,存储路径./logs,级别3");
|
||||||
|
System.out.println("-------- 设置日志配置功能测试结束 --------\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void funcAll() {
|
||||||
|
this.loggerFunc();
|
||||||
|
this.connectFunc();
|
||||||
|
this.longConnectFunc();
|
||||||
|
|
||||||
|
this.sm3ShortFunc();
|
||||||
|
|
||||||
|
|
||||||
|
this.sm4ShortFunc();
|
||||||
|
this.sm4BatchFunc();
|
||||||
|
|
||||||
|
|
||||||
|
this.sm4macShortFunc();
|
||||||
|
this.sm4macBatchFunc();
|
||||||
|
|
||||||
|
|
||||||
|
this.sm4ShortMacFunc();
|
||||||
|
this.sm4BatchMacFunc();
|
||||||
|
|
||||||
|
|
||||||
|
this.sm4LongFunc();
|
||||||
|
this.sm4macLongFunc();
|
||||||
|
this.sm3LongFunc();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception{
|
||||||
|
|
||||||
|
boolean flag = true;
|
||||||
|
SydApi.SYD_SetLogConfig("./logs", 3);
|
||||||
|
while (flag) {
|
||||||
|
System.out.println("请选择测试项:");
|
||||||
|
System.out.println("1. 日志测试");
|
||||||
|
System.out.println("2. 短链接测试");
|
||||||
|
System.out.println("3. 长链接测试");
|
||||||
|
|
||||||
|
System.out.println("4. SM3短数据");
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("5. SM4 短数据加解密");
|
||||||
|
System.out.println("6. SM4 批量数据加解密");
|
||||||
|
System.out.println("7. SM4MAC 短数据");
|
||||||
|
System.out.println("8. SM4MAC 批量数据");
|
||||||
|
|
||||||
|
System.out.println("9. SM4短数据加密后生成MAC,解密验证MAC");
|
||||||
|
System.out.println("10. SM4批量数据加密后生成MAC,验证MAC解密");
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("11. SM4长数据加解密");
|
||||||
|
System.out.println("12. SM4长数据MAC");
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("13. SM3长数据");
|
||||||
|
System.out.println("-1.退出");
|
||||||
|
|
||||||
|
switch (choise.getAsInt()) {
|
||||||
|
case 1:
|
||||||
|
test.loggerFunc();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
test.connectFunc();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
test.longConnectFunc();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
test.sm3ShortFunc();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
test.sm4ShortFunc();
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
test.sm4BatchFunc();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
test.sm4macShortFunc();
|
||||||
|
break;
|
||||||
|
case 8: {
|
||||||
|
test.sm4macBatchFunc();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 9: {
|
||||||
|
test.sm4ShortMacFunc();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 10: {
|
||||||
|
test.sm4BatchMacFunc();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 11:
|
||||||
|
test.sm4macLongFunc();
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
test.sm4LongFunc();
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
test.sm3LongFunc();
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
flag = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void sm3(){
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
new String[]{ "192.168.1.129" },
|
|
||||||
new int[]{ 8889 },
|
|
||||||
10,
|
|
||||||
15
|
|
||||||
);
|
|
||||||
|
|
||||||
api = builder.build();
|
|
||||||
byte[] bytes = api.SYD_SM4_LongData(1, new byte[16], 0, 1);
|
|
||||||
String s = Arrays.toString(bytes);
|
|
||||||
System.out.println(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
@Test
|
Config config = config = Config.loadConfig();
|
||||||
public void originLong() throws Exception {
|
if (config == null || config.isDebug()) {
|
||||||
SydApiBuilder builder = new SydApiBuilder(new String[]{"192.168.1.129"}, new int[]{8889}, 10, 15);
|
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||||
SydApi.SYD_SetLogConfig("./logs/",3);
|
|
||||||
for (int i = 0; i < 1000; i++) {
|
|
||||||
int tmp = i;
|
|
||||||
new Thread(() -> {
|
|
||||||
SydApi api = builder.build();
|
|
||||||
for (int j = 0; j < 20; j++) {
|
|
||||||
byte[] bytes = api.SYD_SM4_ShortData(0, (tmp + "t" + j).getBytes(), Consts.ECB_ENC);
|
|
||||||
byte[] result = api.SYD_SM4_ShortData(0, bytes, Consts.ECB_DEC);
|
|
||||||
}
|
|
||||||
}, i + "t").start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void originShort() throws Exception {
|
|
||||||
SydApi.SYD_SetLogConfig("./logs/",3);
|
|
||||||
Logger log = LogFactory.getLogger();
|
|
||||||
String[] pcipList = {"192.168.1.129", "192.168.1.129" };
|
|
||||||
int[] iportList ={8080,8889};
|
|
||||||
for (int i = 0; i < 1000; i++) {
|
|
||||||
int tmp = i;
|
|
||||||
new Thread(() -> {
|
|
||||||
SydApi api = new SydApi4Database();
|
|
||||||
try {
|
|
||||||
for (int j = 0; j < 20; j++) {
|
|
||||||
api.SYD_Short_Connect_Ex(pcipList,iportList,50,15);
|
|
||||||
byte[] bytes = api.SYD_SM4_ShortData(0, (tmp + "t" + j).getBytes(), Consts.ECB_ENC);
|
|
||||||
byte[] result = api.SYD_SM4_ShortData(0, bytes, Consts.ECB_DEC);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if ( null != api ) {
|
|
||||||
api.SYD_Disconnect_Ex();
|
|
||||||
}
|
|
||||||
} } , i + "t").start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println("ips=" + Arrays.toString(config.getIps()));
|
||||||
|
System.out.println("ports=" + Arrays.toString(config.getPorts()));
|
||||||
|
System.out.println("debug=" + config.isDebug());
|
||||||
|
|
||||||
|
Choise choise = new Choise(args);
|
||||||
|
|
||||||
|
FuncTest funcTest = new FuncTest(config);
|
||||||
|
SydApi.SYD_SetLogConfig("./logs", 3);
|
||||||
|
funcTest.funcMenu(config, choise, funcTest);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ public class ShortBatchDataTest {
|
|||||||
data.add(new byte[16]);
|
data.add(new byte[16]);
|
||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -201,7 +201,7 @@ public class ShortBatchDataTest {
|
|||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -228,7 +228,7 @@ public class ShortBatchDataTest {
|
|||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
data.add(new byte[1024]);
|
data.add(new byte[1024]);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(keyIdx, data, macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
@@ -241,7 +241,7 @@ public class ShortBatchDataTest {
|
|||||||
// 测试数据
|
// 测试数据
|
||||||
ShortBatchDataTest.RandomTestData data = new ShortBatchDataTest.RandomTestData();
|
ShortBatchDataTest.RandomTestData data = new ShortBatchDataTest.RandomTestData();
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.getSize(); i++) {
|
for (int i = 0; i < data.getSize(); i++) {
|
||||||
@@ -255,7 +255,7 @@ public class ShortBatchDataTest {
|
|||||||
// 测试数据
|
// 测试数据
|
||||||
ShortBatchDataTest.RandomTestData data = new ShortBatchDataTest.RandomTestData(0);
|
ShortBatchDataTest.RandomTestData data = new ShortBatchDataTest.RandomTestData(0);
|
||||||
|
|
||||||
String[] macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
List<byte[]> macs = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData());
|
||||||
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
boolean[] checks = api.SYD_SM4Mac_BatchData(data.getKeyIdx(), data.getData(), macs);
|
||||||
|
|
||||||
for (int i = 0; i < data.getSize(); i++) {
|
for (int i = 0; i < data.getSize(); i++) {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ public class TestAll {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static void startPerformanceFile() {
|
private static void startPerformanceFile() {
|
||||||
try (FileWriter fw = new FileWriter(PERF_RESULT_FILE, true);
|
try (FileWriter fw = new FileWriter(PERF_RESULT_FILE, true);
|
||||||
BufferedWriter bw = new BufferedWriter(fw)) {
|
BufferedWriter bw = new BufferedWriter(fw)) {
|
||||||
@@ -98,6 +99,7 @@ public class TestAll {
|
|||||||
|
|
||||||
public static void menu1(Config config, Choise choise, TestAll test) throws Exception {
|
public static void menu1(Config config, Choise choise, TestAll test) throws Exception {
|
||||||
|
|
||||||
|
FuncTest funcTest = new FuncTest(config);
|
||||||
|
|
||||||
|
|
||||||
while ( true ) {
|
while ( true ) {
|
||||||
@@ -112,16 +114,17 @@ public class TestAll {
|
|||||||
switch (choise.getAsInt()) {
|
switch (choise.getAsInt()) {
|
||||||
case 1:
|
case 1:
|
||||||
SydApi.SYD_SetLogConfig("./logs", 3);
|
SydApi.SYD_SetLogConfig("./logs", 3);
|
||||||
funcMenu(config, choise, test);
|
funcTest.funcMenu(config, choise, funcTest);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
test.funcAll();
|
funcTest.funcAll();
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
SydApi.SYD_SetLogConfig("./logs", 0);
|
SydApi.SYD_SetLogConfig("./logs", 0);
|
||||||
perfMenu(config, choise, test);
|
perfMenu(config, choise, test);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
SydApi.SYD_SetLogConfig("./logs", 0);
|
||||||
startPerformanceFile();
|
startPerformanceFile();
|
||||||
test.perfAll();
|
test.perfAll();
|
||||||
stopPerformanceFile();
|
stopPerformanceFile();
|
||||||
@@ -375,7 +378,7 @@ public class TestAll {
|
|||||||
for (int i = 0; i < totalRequest; i++) {
|
for (int i = 0; i < totalRequest; i++) {
|
||||||
poolEnc.submit(() -> {
|
poolEnc.submit(() -> {
|
||||||
SydApi api = Api.get();
|
SydApi api = Api.get();
|
||||||
String[] s = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
List<byte[]> s = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
poolEnc.shutdown();
|
poolEnc.shutdown();
|
||||||
@@ -723,574 +726,6 @@ public class TestAll {
|
|||||||
System.out.println("-------- SM3长数据性能测试结束 --------");
|
System.out.println("-------- SM3长数据性能测试结束 --------");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loggerFunc() {
|
|
||||||
System.out.println("-------- 设置日志配置功能测试开始 --------");
|
|
||||||
SydApi.SYD_SetLogConfig("./logs", 3);
|
|
||||||
System.out.println("日志配置成功,存储路径./logs,级别3");
|
|
||||||
System.out.println("-------- 设置日志配置功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connectFunc() {
|
|
||||||
System.out.println("-------- 短连接建立与关闭功能测试开始 --------");
|
|
||||||
|
|
||||||
System.out.println("-------- 短连接建立与关闭功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void longConnectFunc() {
|
|
||||||
System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
System.out.println("设置长连接参数与获取长连接成功");
|
|
||||||
|
|
||||||
System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm3ShortFunc() {
|
|
||||||
System.out.println("-------- SM3短数据功能测试开始 --------");
|
|
||||||
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
String res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]);
|
|
||||||
String res2 = api.SYD_SM3_Hash_ShortData(new byte[0]);
|
|
||||||
|
|
||||||
if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) {
|
|
||||||
System.out.println("SM3短数据测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("SM3短数据测试失败");
|
|
||||||
System.out.println("计算结果:" + res1);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT1);
|
|
||||||
System.out.println("计算结果:" + res2);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT2);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
api.SYD_SM3_Hash_ShortData(new byte[4096]);
|
|
||||||
System.out.println("SM3短数据超出测试失败");
|
|
||||||
} catch (SydApiException e) {
|
|
||||||
System.out.println("SM3短数据超出错误检测成功");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("-------- SM3短数据功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm3LongFunc() {
|
|
||||||
System.out.println("-------- SM3长数据功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
ISM3 sm3 = api.initSM3();
|
|
||||||
byte[] data = new byte[4064];
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
sm3.update(data);
|
|
||||||
}
|
|
||||||
String res1 = sm3.digest();
|
|
||||||
|
|
||||||
data = new byte[0];
|
|
||||||
sm3 = api.initSM3();
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
sm3.update(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
String res2 = sm3.digest();
|
|
||||||
|
|
||||||
if (res1.equals(CalcRes.SM3_LONG_RESULT1) && res2.equals(CalcRes.SM3_LONG_RESULT2)) {
|
|
||||||
System.out.println("SM3长数据测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("SM3长数据测试失败");
|
|
||||||
System.out.println("计算结果:" + res1);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT1);
|
|
||||||
System.out.println("计算结果:" + res2);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT2);
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- SM3长数据功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4ShortFunc() {
|
|
||||||
System.out.println("-------- SM4短数据加解密功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
int key = 0;
|
|
||||||
|
|
||||||
byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC);
|
|
||||||
byte[] dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
|
|
||||||
|
|
||||||
byte[] enc2 = api.SYD_SM4_ShortData(key, new byte[0], ECB_ENC);
|
|
||||||
byte[] dec2 = api.SYD_SM4_ShortData(key, enc2, ECB_DEC);
|
|
||||||
|
|
||||||
String res1 = Util.bytes2HexString(enc1);
|
|
||||||
String res2 = Util.bytes2HexString(enc2);
|
|
||||||
|
|
||||||
if (res1.equals(CalcRes.SM4_SHORT_RESULT1) && res2.equals(CalcRes.SM4_SHORT_RESULT2)
|
|
||||||
&& Arrays.equals(dec1, new byte[1024]) && Arrays.equals(dec2, new byte[0])) {
|
|
||||||
System.out.println("SM4短数据测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("SM4短数据测试失败");
|
|
||||||
System.out.println("加密计算结果:" + res1);
|
|
||||||
System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT1);
|
|
||||||
System.out.println("解密计算结果:" + Util.bytes2HexString(dec1));
|
|
||||||
System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[1024]));
|
|
||||||
System.out.println("加密计算结果:" + res2);
|
|
||||||
System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT2);
|
|
||||||
System.out.println("解密计算结果:" + Util.bytes2HexString(dec2));
|
|
||||||
System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
enc1 = api.SYD_SM4_ShortData(key, new byte[1025], ECB_ENC);
|
|
||||||
dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC);
|
|
||||||
System.out.println("SM4短数据长度超出测试失败");
|
|
||||||
} catch (SydApiException e) {
|
|
||||||
System.out.println("SM4短数据长度超出测试成功");
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- SM4短数据加解密功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4LongFunc() {
|
|
||||||
System.out.println("-------- SM4长数据加解密功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
boolean ret = LongDataTest.case1(api);
|
|
||||||
if ( ! ret ){
|
|
||||||
System.out.println("-------- SM4长数据加解密功能测试失败 --------\n");
|
|
||||||
} else {
|
|
||||||
System.out.println("-------- SM4长数据加解密功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4macShortFunc() {
|
|
||||||
System.out.println("-------- SM4MAC短数据功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
int key = 0;
|
|
||||||
byte[] data1 = new byte[1024];
|
|
||||||
byte[] data2 = new byte[0];
|
|
||||||
|
|
||||||
String res1 = api.SYD_SM4Mac_ShortData(key, data1);
|
|
||||||
boolean check1 = api.SYD_SM4Mac_ShortData(key, data1, res1);
|
|
||||||
|
|
||||||
String res2 = api.SYD_SM4Mac_ShortData(key, data2);
|
|
||||||
boolean check2 = api.SYD_SM4Mac_ShortData(key, data2, res2);
|
|
||||||
|
|
||||||
if (res1.equals(CalcRes.SM4MAC_SHORT_RESULT1) && res2.equals(CalcRes.SM4MAC_SHORT_RESULT2)
|
|
||||||
&& check1 && check2) {
|
|
||||||
System.out.println("SM4MAC短数据测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("SM4MAC短数据测试失败");
|
|
||||||
System.out.println("计算结果:" + res1);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT1);
|
|
||||||
System.out.println("计算结果:" + res2);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT2);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
res1 = api.SYD_SM4Mac_ShortData(key, new byte[1025]);
|
|
||||||
check1 = api.SYD_SM4Mac_ShortData(key, new byte[1025], res1);
|
|
||||||
System.out.println("SM4MAC短数据长度超出测试失败");
|
|
||||||
} catch (SydApiException e) {
|
|
||||||
System.out.println("SM4MAC短数据长度超出测试成功");
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- SM4MAC短数据功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4macLongFunc() {
|
|
||||||
System.out.println("-------- SM4MAC长数据功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
byte[] data1 = new byte[4064];
|
|
||||||
int key = 0;
|
|
||||||
ISM4Mac sm4mac = api.initSM4Mac(key);
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
sm4mac.update(data1);
|
|
||||||
}
|
|
||||||
String res1 = sm4mac.digest();
|
|
||||||
|
|
||||||
byte[] data2 = new byte[16];
|
|
||||||
sm4mac = api.initSM4Mac(key);
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
sm4mac.update(data2);
|
|
||||||
}
|
|
||||||
String 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)
|
|
||||||
|
|
||||||
if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// try:
|
|
||||||
// input = bytes(4080)
|
|
||||||
// opt2 = conn.sm4_mac_init(0)
|
|
||||||
// for _ in range(10):
|
|
||||||
// opt2.update(input)
|
|
||||||
// res2 = opt2.digest()
|
|
||||||
// System.out.println('SM4MAC长数据长度超出测试失败')
|
|
||||||
// except SmxApiException as e:
|
|
||||||
// System.out.println('SM4MAC长数据长度超出测试成功')
|
|
||||||
//
|
|
||||||
// try:
|
|
||||||
// input = bytes(17)
|
|
||||||
// opt2 = conn.sm4_mac_init(0)
|
|
||||||
// for _ in range(10):
|
|
||||||
// opt2.update(input)
|
|
||||||
// res2 = opt2.digest()
|
|
||||||
// System.out.println('SM4MAC长数据16字节未对齐测试失败')
|
|
||||||
// except SmxApiException as e:
|
|
||||||
// System.out.println('SM4MAC长数据16字节未对齐测试成功')
|
|
||||||
//
|
|
||||||
// System.out.println('-------- SM4MAC长数据功能测试结束 --------\n')
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4BatchFunc() {
|
|
||||||
System.out.println("-------- SM4批量数据加解密功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
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[] key = new int[]{0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
|
|
||||||
List<byte[]> en_data = api.SYD_SM4_BatchData(key, data, ECB_ENC);
|
|
||||||
|
|
||||||
List<byte[]> de_data = api.SYD_SM4_BatchData(key, en_data, ECB_DEC);
|
|
||||||
|
|
||||||
if (en_data.equals(CalcRes.SM4_BATCH_RESULT) && data.equals(de_data)) {
|
|
||||||
System.out.println("SM4批量数据加解密测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("SM4批量数据加解密测试失败");
|
|
||||||
// System.out.println("加密计算结果:" + en_data);
|
|
||||||
System.out.println("加密预期结果:" + CalcRes.SM4_BATCH_RESULT);
|
|
||||||
// System.out.println("解密计算结果:" + de_data);
|
|
||||||
// System.out.println("解密预期结果:" + data);
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- SM4批量数据加解密功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4macBatchFunc() {
|
|
||||||
System.out.println("-------- SM4MAC批量数据功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
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]);
|
|
||||||
int[] keyIdx = new int[]{0, 0, 0, 0};
|
|
||||||
|
|
||||||
String[] s = api.SYD_SM4Mac_BatchData(keyIdx, data);
|
|
||||||
|
|
||||||
boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s);
|
|
||||||
|
|
||||||
boolean flag = true;
|
|
||||||
if (Arrays.equals(s, CalcRes.SM4MAC_BATCH_RESULT)) {
|
|
||||||
for (int i = 0; i < check.length; i++) {
|
|
||||||
if (!check[i]) {
|
|
||||||
flag = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (flag) {
|
|
||||||
System.out.println("SM4MAC批量数据测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("SM4MAC批量数据测试失败");
|
|
||||||
System.out.println("计算结果:" + check);
|
|
||||||
System.out.println("预期结果:" + new boolean[]{true, true, true, true, true, true, true});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
System.out.println("SM4MAC批量数据测试失败");
|
|
||||||
System.out.println("计算结果:" + s);
|
|
||||||
System.out.println("预期结果:" + CalcRes.SM4MAC_BATCH_RESULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- SM4MAC批量数据功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4ShortMacFunc() {
|
|
||||||
System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
int keyEnc = 0;
|
|
||||||
int keyMac = 0;
|
|
||||||
byte[] data1 = new byte[1024];
|
|
||||||
byte[] data2 = new byte[0];
|
|
||||||
DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
|
|
||||||
DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
|
|
||||||
|
|
||||||
DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2);
|
|
||||||
DataAndMacCheck de_data2 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data2.getData(), en_data2.getMac());
|
|
||||||
|
|
||||||
if (
|
|
||||||
de_data2.getMacCheck()
|
|
||||||
) {
|
|
||||||
System.out.println("短数据加密计算MAC,校验MAC解密测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("短数据加密计算MAC,校验MAC解密测试失败");
|
|
||||||
System.out.println("加密计算结果:" + en_data1);
|
|
||||||
System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_SHORT_RESULT1);
|
|
||||||
System.out.println("解密计算结果:" + de_data1);
|
|
||||||
System.out.println("解密预期结果:" + data1);
|
|
||||||
System.out.println("加密计算结果:" + en_data2);
|
|
||||||
System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_SHORT_RESULT2);
|
|
||||||
System.out.println("解密计算结果:" + de_data2);
|
|
||||||
System.out.println("解密预期结果:" + data2);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
data1 = new byte[1025];
|
|
||||||
api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
|
|
||||||
System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试失败");
|
|
||||||
} catch (SydApiException e) {
|
|
||||||
System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功");
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sm4BatchMacFunc() {
|
|
||||||
System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试开始 --------");
|
|
||||||
SydApiBuilder builder = new SydApiBuilder(
|
|
||||||
config.getIps(),
|
|
||||||
config.getPorts(),
|
|
||||||
1000,
|
|
||||||
2000
|
|
||||||
);
|
|
||||||
SydApi api = builder.build();
|
|
||||||
|
|
||||||
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(keyEnc, keyMac, data);
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flag) {
|
|
||||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
|
|
||||||
} else {
|
|
||||||
System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
|
|
||||||
System.out.println("加密计算结果:" + en_data);
|
|
||||||
System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_BATCH_RESULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
|
||||||
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]);
|
|
||||||
data.add(new byte[1024]);
|
|
||||||
keyEnc = new int[]{0, 1, 0, 1, 1, 1, 1, 0};
|
|
||||||
keyMac = new int[]{1, 0, 1, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data);
|
|
||||||
de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
|
|
||||||
System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试失败");
|
|
||||||
} catch (SydApiException e) {
|
|
||||||
System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试成功");
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void funcAll() {
|
|
||||||
this.loggerFunc();
|
|
||||||
this.connectFunc();
|
|
||||||
this.longConnectFunc();
|
|
||||||
|
|
||||||
this.sm3ShortFunc();
|
|
||||||
|
|
||||||
|
|
||||||
this.sm4ShortFunc();
|
|
||||||
this.sm4BatchFunc();
|
|
||||||
|
|
||||||
|
|
||||||
this.sm4macShortFunc();
|
|
||||||
this.sm4macBatchFunc();
|
|
||||||
|
|
||||||
|
|
||||||
this.sm4ShortMacFunc();
|
|
||||||
this.sm4BatchMacFunc();
|
|
||||||
|
|
||||||
|
|
||||||
this.sm4LongFunc();
|
|
||||||
this.sm4macLongFunc();
|
|
||||||
this.sm3LongFunc();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void funcMenu(Config config, Choise choise, TestAll test) throws Exception{
|
|
||||||
|
|
||||||
boolean flag = true;
|
|
||||||
SydApi.SYD_SetLogConfig("./logs", 3);
|
|
||||||
while (flag) {
|
|
||||||
System.out.println("请选择测试项:");
|
|
||||||
System.out.println("1. 日志测试");
|
|
||||||
System.out.println("2. 短链接测试");
|
|
||||||
System.out.println("3. 长链接测试");
|
|
||||||
|
|
||||||
System.out.println("4. SM3短数据");
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("5. SM4 短数据加解密");
|
|
||||||
System.out.println("6. SM4 批量数据加解密");
|
|
||||||
System.out.println("7. SM4MAC 短数据");
|
|
||||||
System.out.println("8. SM4MAC 批量数据");
|
|
||||||
|
|
||||||
System.out.println("9. SM4短数据加密后生成MAC,解密验证MAC");
|
|
||||||
System.out.println("10. SM4批量数据加密后生成MAC,验证MAC解密");
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("11. SM4长数据加解密");
|
|
||||||
System.out.println("12. SM4长数据MAC");
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("13. SM3长数据");
|
|
||||||
System.out.println("-1.退出");
|
|
||||||
|
|
||||||
switch (choise.getAsInt()) {
|
|
||||||
case 1:
|
|
||||||
test.loggerFunc();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
test.connectFunc();
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
test.longConnectFunc();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
test.sm3ShortFunc();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
test.sm4ShortFunc();
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
test.sm4BatchFunc();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
test.sm4macShortFunc();
|
|
||||||
break;
|
|
||||||
case 8: {
|
|
||||||
test.sm4macBatchFunc();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 9: {
|
|
||||||
test.sm4ShortMacFunc();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 10: {
|
|
||||||
test.sm4BatchMacFunc();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 11:
|
|
||||||
test.sm4macLongFunc();
|
|
||||||
break;
|
|
||||||
case 12:
|
|
||||||
test.sm4LongFunc();
|
|
||||||
break;
|
|
||||||
case 13:
|
|
||||||
test.sm3LongFunc();
|
|
||||||
break;
|
|
||||||
case -1:
|
|
||||||
flag = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1400,9 +835,4 @@ public class TestAll {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void testComm(){
|
|
||||||
String hex = "0436000000000000000E453030383130534B303030303030303030303030303030303030413030303030303030303031303030303234303000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
|
#Readme
|
||||||
|
|
||||||
|
|
||||||
|
## 主要类说明
|
||||||
SydApi - 接口
|
SydApi - 接口
|
||||||
SydApiBaseFunction - 主要用于长连接,由 Pool 创建。
|
SydApiBaseFunction - 通用功能。
|
||||||
SydApi4Database - 主要用于短连接,继承自 SydApiBaseFunction
|
SydApiLongLinkWrap - 用于长连接,包装自 SydApiBaseFunction。
|
||||||
|
SydApi4Database - 主要用于短连接,继承自 SydApiBaseFunction。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sydapi4j-1.0.20220906.jar
|
|
||||||
性能改动查看
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 发布包格式
|
||||||
- doc 文档
|
- doc 文档
|
||||||
- sample 示例代码
|
- sample 示例代码
|
||||||
- jar
|
- jar
|
||||||
@@ -22,7 +21,13 @@ sydapi4j-1.0.20220906.jar
|
|||||||
- sydapi4j-1.0.20220805.jar 加密机通信包
|
- sydapi4j-1.0.20220805.jar 加密机通信包
|
||||||
|
|
||||||
|
|
||||||
|
## 二期需求
|
||||||
|
加密带MAC 复合接口长连接四个都是封装自 C。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 测试环境
|
||||||
linux测试服务器
|
linux测试服务器
|
||||||
电口:172.1.10.245
|
电口:172.1.10.245
|
||||||
光口:192.168.100.245
|
光口:192.168.100.245
|
||||||
|
|||||||
Reference in New Issue
Block a user