添加接口

This commit is contained in:
Cheney Wong
2025-06-09 17:04:38 +08:00
parent 1a23046250
commit 5d1dc5c31f
10 changed files with 323 additions and 8 deletions
@@ -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) {