添加接口
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
package com.sunyard.sge.database;
|
||||
|
||||
public class DataAndMac {
|
||||
private byte[] data;
|
||||
private String mac;
|
||||
|
||||
public DataAndMac(byte[] data, String mac) {
|
||||
this.data = data;
|
||||
this.mac = mac;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(byte[] data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getMac() {
|
||||
return mac;
|
||||
}
|
||||
|
||||
public void setMac(String mac) {
|
||||
this.mac = mac;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.sunyard.sge.database;
|
||||
|
||||
public class DataAndMacCheck {
|
||||
private byte[] data;
|
||||
private boolean macCheck;
|
||||
|
||||
public DataAndMacCheck(byte[] data, boolean macCheck) {
|
||||
this.data = data;
|
||||
this.macCheck = macCheck;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(byte[] data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
|
||||
public boolean getMacCheck() {
|
||||
return macCheck;
|
||||
}
|
||||
|
||||
public void setMacCheck(boolean macCheck) {
|
||||
this.macCheck = macCheck;
|
||||
}
|
||||
}
|
||||
@@ -272,6 +272,48 @@ public interface SydApi {
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* 短数据加密并计算 MAC
|
||||
*
|
||||
* @param iEncKeyIndex:输入。加密所需要的密钥索引值
|
||||
* @param iMacKeyIndex:输入。计算mac所需要的密钥索引值
|
||||
* @param pcData: 输入。计算mac所需要的数据。
|
||||
* @return DataAndMac
|
||||
* - data 密文
|
||||
* - mac值 (固定长度16字节)转HEX 字符串格式
|
||||
*/
|
||||
DataAndMac SYD_SM4_EncryptAndMac_ShortData(
|
||||
int iEncKeyIndex,
|
||||
int iMacKeyIndex,
|
||||
byte[] pcData
|
||||
);
|
||||
|
||||
/**
|
||||
* 短数据校验 MAC 并解密
|
||||
* @param iEncKeyIndex:输入。加密所需要的密钥索引值
|
||||
* @param iMacKeyIndex:输入。计算mac所需要的密钥索引值
|
||||
* @param pcData 输入。密文。
|
||||
* @param mac 输入。密文的 MAC。
|
||||
* @return 明文
|
||||
*/
|
||||
byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(
|
||||
int iEncKeyIndex,
|
||||
int iMacKeyIndex,
|
||||
byte[] pcData,
|
||||
String mac
|
||||
);
|
||||
List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(
|
||||
int[] iEncKeyIndex,
|
||||
int[] iMacKeyIndex,
|
||||
List<byte[]> pcData
|
||||
);
|
||||
List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(
|
||||
int[] iEncKeyIndex,
|
||||
int[] iMacKeyIndex,
|
||||
List<DataAndMac> pcData
|
||||
);
|
||||
|
||||
|
||||
public ISM4 initSM4(int iKeyIndex, int ende);
|
||||
|
||||
public ISM3 initSM3();
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.sunyard.util.SYMUtil;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -790,6 +791,70 @@ public class SydApiBaseFunction implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
||||
String mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData);
|
||||
return new DataAndMac(enData, mac);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
|
||||
boolean ret = SYD_SM4Mac_ShortData(iMacKeyIndex, pcData, mac);
|
||||
if (!ret) {
|
||||
throw new SydApiException("MAC 验证不通过", 90);
|
||||
}
|
||||
|
||||
return SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_DEC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<byte[]> pcData) {
|
||||
if (null == this.hsms || null == iMacKeyIndex || null == pcData) {
|
||||
throw new SydApiException("输入内容为空",15);
|
||||
}
|
||||
if ( iEncKeyIndex.length != iMacKeyIndex.length || iEncKeyIndex.length != pcData.size() ) {
|
||||
throw new SydApiException("密钥长度和数据长度不对应", 15);
|
||||
}
|
||||
|
||||
List<byte[]> enDatas = SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC);
|
||||
String[] macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
|
||||
List<DataAndMac> ret = new ArrayList<DataAndMac>();
|
||||
for ( int i=0 ; i< enDatas.size() ; i++ ) {
|
||||
DataAndMac dam = new DataAndMac(enDatas.get(i), macs[i]);
|
||||
ret.add(dam);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
|
||||
if (null == this.hsms || null == iMacKeyIndex || null == pcData) {
|
||||
throw new SydApiException("输入内容为空",15);
|
||||
}
|
||||
if ( iEncKeyIndex.length != iMacKeyIndex.length || iEncKeyIndex.length != pcData.size() ) {
|
||||
throw new SydApiException("密钥长度和数据长度不对应", 15);
|
||||
}
|
||||
|
||||
String[] macs = new String[pcData.size()];
|
||||
List<byte[]>datas = new ArrayList<>(pcData.size());
|
||||
for ( int i=0 ; i<macs.length; i++ ) {
|
||||
macs[i] = pcData.get(i).getMac();
|
||||
datas.add(pcData.get(i).getData());
|
||||
}
|
||||
|
||||
boolean[] macCheck = SYD_SM4Mac_BatchData(iMacKeyIndex, datas, macs);
|
||||
List<byte[]> enData = SYD_SM4_BatchData(iEncKeyIndex, datas, Consts.ECB_DEC);
|
||||
|
||||
List<DataAndMacCheck>ret = new ArrayList<>(enData.size());
|
||||
for ( int i=0 ; i<enData.size() ; i++ ) {
|
||||
DataAndMacCheck damc = new DataAndMacCheck(enData.get(i), macCheck[i]);
|
||||
ret.add(damc);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ISM4 initSM4(int iKeyIndex, int ende) {
|
||||
|
||||
|
||||
@@ -154,6 +154,66 @@ public class SydApiLongLinkWrap implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
|
||||
FutureTask<DataAndMac> task = builder.getLongLinkWorks().fTask(new Callable<DataAndMac>() {
|
||||
@Override
|
||||
public DataAndMac call() throws Exception {
|
||||
return builder.get().SYD_SM4_EncryptAndMac_ShortData(iEncKeyIndex, iMacKeyIndex, pcData);
|
||||
}
|
||||
});
|
||||
try {
|
||||
return task.get();
|
||||
} catch (Exception e) {
|
||||
throw new SydApiException("并行任务执行失败", 0xC101, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
|
||||
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
|
||||
@Override
|
||||
public byte[] 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
|
||||
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>>() {
|
||||
@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
|
||||
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
|
||||
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
|
||||
public ISM4 initSM4(int iKeyIndex, int ende) {
|
||||
return new SydSM4(this, iKeyIndex, ende);
|
||||
|
||||
Reference in New Issue
Block a user