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对象,List 的长度与输入参数 pcData 的长度相同。 // */ // List SYD_SM4_BatchData( // int[] iKeyIndex, // List 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对象。属性如下: * procData:过程数据 (包序号为1或2时有值)字符串格式 * data:哈希值(固定长度32字节)转HEX 字符串格式 */ LongDataReturn SYD_SM3_Hash_LongData( byte[] pcData, int iPkgNum, byte[] pcProcData ); /** * 短数据加解密 *

* 输入对指定的原始数据和公钥,通过 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对象,List 的长度与输入参数 pcData 的长度相同。 */ List SYD_SM4_BatchData( int[] iKeyIndex, List 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 SYD_SM4Mac_BatchData(int[] iKeyIndex, List 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 pcData, List pcMac ); /** * 长数据mac计算接口,对数据进行SM4 MAC计算。 * * @param iKeyIndex:输入。计算mac所需要的密钥索引值 * @param pcData:输入。要做MAC的数据 * @param iPkgNum:输入。 包序号:0 仅一包 pcHash为输出hash结果 * 1 第一包 输出过程数据pcProcData * 2 中间包 pcProcData为输入上一包返回的过程数据输出本包返回的过程数据 * 3 最后一包 pcHash为输出hash结果 * @return LongDataReturn 的对象, * 属性 procData 过程数据 (包序号为1或2时有值)字符串, * 属性 data 输出的mac值(固定长度16字节)HEX 字符串 */ LongDataReturn 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 的对象 * 属性 procData 过程数据 (包序号为1或2时有值)字符串 * 属性 data 输出的mac校验结果。Boolean 类型,true表示校验成功,false 表示校验失败。 */ LongDataReturn 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 SYD_SM4_EncryptAndMac_BatchData( int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData ); List SYD_SM4_CheckMacAndDecrypt_BatchData( int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData ); public ISM4 initSM4(int iKeyIndex, int ende); public ISM3 initSM3(); public ISM4Mac initSM4Mac(int iKeyIndex); }