324 lines
12 KiB
Java
324 lines
12 KiB
Java
package com.sunyard.sge.database;
|
||
|
||
import com.sunyard.sge.plus.SydLibrary;
|
||
|
||
import java.util.List;
|
||
|
||
/**
|
||
* 上海黄金交易所 - 数据库加密方案
|
||
*/
|
||
public interface SydApi {
|
||
|
||
/**
|
||
* 设置全局日志相应的配置
|
||
*
|
||
* @param pcLogPath: 输入。日志存储路径
|
||
* @param iLogLevel: 输入。日志级别设置
|
||
* 0:不记录日志,
|
||
* 1:记录网络层错误日志,
|
||
* 2:记录接口错误日志及网络层错误日志,
|
||
* 3:记录正确日志及错误日志
|
||
* @return 无
|
||
**/
|
||
static void SYD_SetLogConfig(
|
||
String pcLogPath,
|
||
int iLogLevel) {
|
||
if (pcLogPath == null || iLogLevel < 0 || iLogLevel > 3) {
|
||
throw new IllegalArgumentException("地址不能为空且等级范围为0到3");
|
||
}
|
||
// logback 版本的日志直接由外部配置文件控制
|
||
|
||
if ( Env.isLinux() ){
|
||
// 初始化 C 部分日志
|
||
SydLibrary.INSTANCE.SYD_SetLogConfig(pcLogPath, pcLogPath.getBytes().length, iLogLevel);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 建立到指定地址和端口号的签名服务器的 TCP/IP 连接,返回 API 操作对象 SydApi。
|
||
* 如果采用短连接,交易结束,要调用 SydApi 的方法SYD_Disconnect_Ex 进行释放连接。
|
||
*
|
||
* @param pcIpList 签名服务器的IP地址
|
||
* @param iPortList 签名服务器的端口号
|
||
* @param iConnectTimeOut 连接超时,单位毫秒。
|
||
* @param iDealTimeOut 交易接口超时设定,单位毫秒(不超过10ms)。
|
||
* @return SydApi 的对象,只要有设备可用则返回。
|
||
*/
|
||
SydApi SYD_Short_Connect_Ex(
|
||
String[] pcIpList,
|
||
int[] iPortList,
|
||
int iConnectTimeOut,
|
||
int iDealTimeOut
|
||
);
|
||
|
||
|
||
/**
|
||
* 关闭与签名服务器的TCP/IP连接
|
||
*/
|
||
void SYD_Disconnect_Ex();
|
||
|
||
|
||
// /**
|
||
// * 对指定数据进行SM4加解密处理。
|
||
// *
|
||
// * @param iKeyIndex 会话密钥索引值
|
||
// * @param pcData 报文密文或明文。
|
||
// * @param iFlag 加解密标识,0:表示ECB解密;1:表示ECB加密
|
||
// * @return 报文明文或密文。
|
||
// */
|
||
// byte[] SYD_SM4_ShortData(
|
||
// int iKeyIndex,
|
||
// byte[] pcData,
|
||
// int iFlag
|
||
// );
|
||
//
|
||
//
|
||
// /**
|
||
// * 对指定批量数据进行SM4加解密处理。
|
||
// *
|
||
// * @param iKeyIndex 会话密钥索引值数组
|
||
// * @param pcData 要加密的报文明文或密文数组。
|
||
// * @param iFlag 加解密标识,0:表示ECB解密;1:表示ECB加密
|
||
// * @return List<byte [ ]>对象,List 的长度与输入参数 pcData 的长度相同。
|
||
// */
|
||
// List<byte[]> SYD_SM4_BatchData(
|
||
// int[] iKeyIndex,
|
||
// List<byte[]> pcData,
|
||
// int iFlag
|
||
// );
|
||
|
||
|
||
/**
|
||
* 短数据hash计算,对指定数据进行SM3哈希处理
|
||
*
|
||
* @param pcData:输入。原始数据。
|
||
* @return 哈希值(固定长度32字节)转HEX 字符串格式
|
||
*/
|
||
byte[] SYD_SM3_Hash_ShortData(
|
||
byte[] pcData
|
||
);
|
||
|
||
|
||
/**
|
||
* 长数据hash计算,对指定数据进行SM3 哈希处理。
|
||
*
|
||
* @param pcData:输入。要加密的数据。
|
||
* @param iPkgNum:输入。包序号:0 仅一包 pcHash为输出hash结果
|
||
* 1 第一包 输出过程数据pcProcData
|
||
* 2 中间包 pcProcData为输入上一包返回的过程数据输出本包返回的过程数据
|
||
* 3 最后一包 pcHash为输出hash结果
|
||
* @param pcProcData:输入。过程数据 (包序号为0或1时传入null,包序号为2或3时需要有值)
|
||
* @return LongDataReturn<String, String>对象。属性如下:
|
||
* procData:过程数据 (包序号为1或2时有值)字符串格式
|
||
* data:哈希值(固定长度32字节)转HEX 字符串格式
|
||
*/
|
||
LongDataReturn<byte[], byte[]> SYD_SM3_Hash_LongData(
|
||
byte[] pcData,
|
||
int iPkgNum,
|
||
byte[] pcProcData
|
||
);
|
||
|
||
|
||
/**
|
||
* 短数据加解密
|
||
* <p>
|
||
* 输入对指定的原始数据和公钥,通过 SM4 算法计算数据的散列值。
|
||
*
|
||
* @param iKeyIndex: 输入。会话密钥索引值
|
||
* @param pcData: 输入。 报文密文或明文。
|
||
* @param iFlag: 输入。加解密标识,0:表示ECB解密;1:表示ECB加密
|
||
* @return 明文或密文
|
||
*/
|
||
byte[] SYD_SM4_ShortData(
|
||
int iKeyIndex,
|
||
byte[] pcData,
|
||
int iFlag
|
||
);
|
||
|
||
|
||
/**
|
||
* 批量数据加解密
|
||
* <p>
|
||
* 输入对指定的原始数据和公钥,通过 SM4 算法计算数据的散列值。
|
||
*
|
||
* @param iKeyIndex: 输入。会话密钥索引值数组
|
||
* @param pcData: 输入。要加密的报文明文或密文数组。
|
||
* @param iFlag: 输入。加解密标识,0:表示ECB解密;
|
||
* 1:表示ECB加密
|
||
* @return List<byte [ ]>对象,List 的长度与输入参数 pcData 的长度相同。
|
||
*/
|
||
List<byte[]> SYD_SM4_BatchData(
|
||
int[] iKeyIndex,
|
||
List<byte[]> pcData,
|
||
int iFlag
|
||
);
|
||
|
||
/**
|
||
* 长数据加解密
|
||
* 输入对指定的原始数据和公钥,通过 SM4 算法计算数据的散列值。
|
||
*
|
||
* @param iKeyIndex:输入。会话密钥索引值
|
||
* @param pcData: 输入。要加密的数据。(数据的长度第一包以及中间包时需为16的整数倍)
|
||
* @param iPkgNum:输入。包序号:0:仅一包,1:第一包,2:中间包,3:结束包
|
||
* @param iFlag:输入。加解密标识,0:表示ECB解密;1:表示ECB加密
|
||
* @return 输出数据;
|
||
*/
|
||
byte[] SYD_SM4_LongData(
|
||
int iKeyIndex,
|
||
byte[] pcData,
|
||
int iPkgNum,
|
||
int iFlag
|
||
);
|
||
|
||
|
||
/**
|
||
* 批量数据MAC校验接口,对批量数据进行SM4 MAC计算。
|
||
*
|
||
* @param iKeyIndex:输入。计算mac所需要的密钥索引值数组
|
||
* @param pcData: 输入。要做MAC的数据组
|
||
* @return String[] 数组,长度等于 pcData List 的长度。
|
||
* String[] 数组中的每个值为 mac值(固定长度16字节)的 HEX字符串。
|
||
*/
|
||
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData);
|
||
|
||
|
||
/**
|
||
* 对批量数据进行SM4 MAC校验。有一条数据失败则抛出异常。
|
||
*
|
||
* @param iKeyIndex:输入。计算mac所需要的密钥索引值数组
|
||
* @param pcData: 输入。 要做MAC的数据组
|
||
* @param pcMac: 输入。输入的mac值数组组,每个 ma从(固定长度16字节)的HEX字符串。
|
||
* @return boolean[] 数组长度等于 pcData List 的长度。
|
||
* boolean[] 数组中的每个值为对应索引 pcData 和 pcMac 的校验结果。 true表示校验成功,false 表示校验失败。
|
||
*/
|
||
boolean[] SYD_SM4Mac_BatchData(
|
||
int[] iKeyIndex,
|
||
List<byte[]> pcData,
|
||
List<byte[]> pcMac
|
||
);
|
||
|
||
|
||
/**
|
||
* 长数据mac计算接口,对数据进行SM4 MAC计算。
|
||
*
|
||
* @param iKeyIndex:输入。计算mac所需要的密钥索引值
|
||
* @param pcData:输入。要做MAC的数据
|
||
* @param iPkgNum:输入。 包序号:0 仅一包 pcHash为输出hash结果
|
||
* 1 第一包 输出过程数据pcProcData
|
||
* 2 中间包 pcProcData为输入上一包返回的过程数据输出本包返回的过程数据
|
||
* 3 最后一包 pcHash为输出hash结果
|
||
* @return LongDataReturn<String, String> 的对象,
|
||
* 属性 procData 过程数据 (包序号为1或2时有值)字符串,
|
||
* 属性 data 输出的mac值(固定长度16字节)HEX 字符串
|
||
*/
|
||
LongDataReturn<byte[], byte[]> SYD_SM4Mac_LongData(
|
||
int iKeyIndex,
|
||
byte[] pcData,
|
||
int iPkgNum,
|
||
byte[] pcProcData
|
||
);
|
||
|
||
|
||
/**
|
||
* 长数据MAC数据校验接口,对长数据进行MAC SM4校验处理。
|
||
*
|
||
* @param iKeyIndex:输入。计算mac所需要的密钥索引值
|
||
* @param pcData: 输入。要做MAC的数据
|
||
* @param iPkgNum: 输入。 包序号:0 仅一包 pcHash为输出hash结果
|
||
* 1 第一包 输出过程数据pcProcData
|
||
* 2 中间包 pcProcData为输入上一包返回的过程数据输出本包返回的过程数据
|
||
* 3 最后一包 pcHash为输出hash结果
|
||
* @param pcProcData:输入。过程数据 (包序号为1或2时有值)
|
||
* @param pcMac: 输入。输出的mac值(固定长度16字节) HEX 字符串
|
||
* @return LongDataReturn<String, Boolean> 的对象
|
||
* 属性 procData 过程数据 (包序号为1或2时有值)字符串
|
||
* 属性 data 输出的mac校验结果。Boolean 类型,true表示校验成功,false 表示校验失败。
|
||
*/
|
||
LongDataReturn<byte[], Boolean> SYD_SM4Mac_LongData(
|
||
int iKeyIndex,
|
||
byte[] pcData,
|
||
int iPkgNum,
|
||
byte[] pcProcData,
|
||
byte[] pcMac
|
||
);
|
||
|
||
|
||
/**
|
||
* 短数据MAC计算接口,对数据进行SM4 MAC计算
|
||
*
|
||
* @param iKeyIndex:输入。计算mac所需要的密钥索引值
|
||
* @param pcData: 输入。计算mac所需要的数据。
|
||
* @return mac值(固定长度16字节)转HEX 字符串格式
|
||
*/
|
||
byte[] SYD_SM4Mac_ShortData(
|
||
int iKeyIndex,
|
||
byte[] pcData
|
||
);
|
||
|
||
|
||
/**
|
||
* 短数据MAC验证接口,对数据进行SM4 MAC校验
|
||
*
|
||
* @param iKeyIndex:输入,计算mac所需要的密钥索引值
|
||
* @param pcData: 输入。计算mac所需要的数据。
|
||
* @param pcMac: 输入。mac值(固定长度16字节)HEX字符串
|
||
* @return true表示校验成功,false 表示校验失败
|
||
*/
|
||
boolean SYD_SM4Mac_ShortData(
|
||
int iKeyIndex,
|
||
byte[] pcData,
|
||
byte[] pcMac
|
||
);
|
||
|
||
|
||
/**
|
||
* 短数据加密并计算 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 明文
|
||
*/
|
||
DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(
|
||
int iEncKeyIndex,
|
||
int iMacKeyIndex,
|
||
byte[] pcData,
|
||
byte[] 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();
|
||
|
||
public ISM4Mac initSM4Mac(int iKeyIndex);
|
||
}
|