From 2b017885b4218f5d62d640b3ce3d715465b73833 Mon Sep 17 00:00:00 2001 From: chuzhenyang <2552648939@qq.com> Date: Mon, 11 Jul 2022 16:05:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E5=B1=80=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 10 + .../sunyard/sge/database/LongDataReturn.java | 4 + .../java/com/sunyard/sge/database/SydApi.java | 244 ++++++++++++++++-- .../sunyard/sge/database/SydApi4Database.java | 45 ++++ .../sunyard/sge/database/SydConfigApi.java | 24 ++ 5 files changed, 304 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/sunyard/sge/database/LongDataReturn.java create mode 100644 src/main/java/com/sunyard/sge/database/SydConfigApi.java diff --git a/pom.xml b/pom.xml index 57bfafb..3bdf2bf 100644 --- a/pom.xml +++ b/pom.xml @@ -27,5 +27,15 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + diff --git a/src/main/java/com/sunyard/sge/database/LongDataReturn.java b/src/main/java/com/sunyard/sge/database/LongDataReturn.java new file mode 100644 index 0000000..be4ddf2 --- /dev/null +++ b/src/main/java/com/sunyard/sge/database/LongDataReturn.java @@ -0,0 +1,4 @@ +package com.sunyard.sge.database; + +public class LongDataReturn { +} diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java index 1d4b00c..cfad14d 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi.java +++ b/src/main/java/com/sunyard/sge/database/SydApi.java @@ -4,26 +4,24 @@ import java.util.List; /** * 上海黄金交易所 - 数据库加密方案 - * */ -public interface SydApi -{ +public interface SydApi { /** * 建立到指定地址和端口号的签名服务器的 TCP/IP 连接,返回 API 操作对象 SydApi。 * 如果采用短连接,交易结束,要调用 SydApi 的方法SYD_Disconnect_Ex 进行释放连接。 * - * @param pcIpList 签名服务器的IP地址 - * @param iPortList 签名服务器的端口号 + * @param pcIpList 签名服务器的IP地址 + * @param iPortList 签名服务器的端口号 * @param iConnectTimeOut 连接超时,单位毫秒。 - * @param iDealTimeOut 交易接口超时设定,单位毫秒(不超过10ms)。 + * @param iDealTimeOut 交易接口超时设定,单位毫秒(不超过10ms)。 * @return SydApi 的对象,只要有设备可用则返回。 */ SydApi SYD_Connect_Ex( String[] pcIpList, - int[] iPortList, - int iConnectTimeOut, - int iDealTimeOut + int[] iPortList, + int iConnectTimeOut, + int iDealTimeOut ); @@ -33,32 +31,232 @@ public interface SydApi 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 +// ); + + /** - * 对指定数据进行SM4加解密处理。 - * @param iKeyIndex 会话密钥索引值 - * @param pcData 报文密文或明文。 - * @param iFlag 加解密标识,0:表示ECB解密;1:表示ECB加密 - * @return 报文明文或密文。 + * 短数据hash计算,对指定数据进行SM3哈希处理 + * + * @param pcData:输入。原始数据。 + * @return 哈希值(固定长度32字节)转HEX 字符串格式 + */ + String 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, + String pcProcData + ); + + + + /** + * 短数据加解密 + *

+ * 输入对指定的原始数据和公钥,通过 SM4 算法计算数据的散列值。 + * + * @param iKeyIndex: 输入。会话密钥索引值 + * @param pcData: 输入。 报文密文或明文。 + * @param iFlag: 输入。加解密标识,0:表示ECB解密;1:表示ECB加密 + * @return 明文或密文 */ byte[] SYD_SM4_ShortData( - int iKeyIndex, + int iKeyIndex, byte[] pcData, - int iFlag + int iFlag ); /** - * 对指定批量数据进行SM4加解密处理。 + * 批量数据加解密 + *

+ * 输入对指定的原始数据和公钥,通过 SM4 算法计算数据的散列值。 * - * @param iKeyIndex 会话密钥索引值数组 - * @param pcData 要加密的报文明文或密文数组。 - * @param iFlag 加解密标识,0:表示ECB解密;1:表示ECB加密 - * @return List对象,List 的长度与输入参数 pcData 的长度相同。 + * @param iKeyIndex: 输入。会话密钥索引值数组 + * @param pcData: 输入。要加密的报文明文或密文数组。 + * @param iFlag: 输入。加解密标识,0:表示ECB解密; + * 1:表示ECB加密 + * @return List对象,List 的长度与输入参数 pcData 的长度相同。 */ List SYD_SM4_BatchData( - int[] iKeyIndex, + int[] iKeyIndex, List pcData, - int iFlag + 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字符串。 + */ + String[] 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, + String[] 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, + String 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 表示校验失败。 + * */ + LongDataReturnSYD_SM4Mac_LongData( + int iKeyIndex, + byte[] pcData, + int iPkgNum, + String pcProcData, + String pcMac + ); + + + + /** + * 短数据MAC计算接口,对数据进行SM4 MAC计算 + * + * @param iKeyIndex:输入。计算mac所需要的密钥索引值 + * @param pcData: 输入。计算mac所需要的数据。 + * + * @return mac值(固定长度16字节)转HEX 字符串格式 + * */ + String 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, + String pcMac + ); + + + + } diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 37feaff..6e54f40 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -24,6 +24,16 @@ public class SydApi4Database implements SydApi } + @Override + public String SYD_SM3_Hash_ShortData(byte[] pcData) { + return null; + } + + @Override + public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { + return null; + } + @Override public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) { return new byte[0]; @@ -33,4 +43,39 @@ public class SydApi4Database implements SydApi public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) { return null; } + + @Override + public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) { + return new byte[0]; + } + + @Override + public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) { + return new String[0]; + } + + @Override + public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) { + return new boolean[0]; + } + + @Override + public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { + return null; + } + + @Override + public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) { + return null; + } + + @Override + public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) { + return null; + } + + @Override + public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) { + return false; + } } diff --git a/src/main/java/com/sunyard/sge/database/SydConfigApi.java b/src/main/java/com/sunyard/sge/database/SydConfigApi.java new file mode 100644 index 0000000..02cbd7e --- /dev/null +++ b/src/main/java/com/sunyard/sge/database/SydConfigApi.java @@ -0,0 +1,24 @@ +package com.sunyard.sge.database; +/** + * + * 日志配置接口 + * */ +public interface SydConfigApi { + + /** + * 设置日志相应的配置 + * + *@param pcLogPath: 输入。日志存储路径 + *@param iLogPathLen: 输入。日志路径长度。 + *@param iLogLevel: 输入。日志级别设置 0:不记录日志,1:记录网络层错误日志,2:记录接口错误日志及网络层错误日志,3:记录正确日志及错误日志 + * + * @return null + * */ + + static void SYD_SetLogConfig( + String pcLogPath, + int iLogPathLen, + int iLogLevel) { + + } +}