武汉人行指令整合

This commit is contained in:
zhoubin
2021-08-11 13:56:19 +08:00
parent 73ad09279e
commit 45f81f4685
15 changed files with 1479 additions and 259 deletions
+3 -2
View File
@@ -5,6 +5,7 @@ import com.sunyard.inf.*;
import com.sunyard.inf.customize.SydHAApi;
import com.sunyard.inf.customize.SydQNUCApi;
import com.sunyard.inf.customize.SydSDNXApi;
import racal.sunyard.main.SydApiBuilder;
import java.io.InputStream;
@@ -12,7 +13,7 @@ import java.io.InputStream;
* Created by Cheney on 2017/11/11.
* 程序调用接口
*/
public interface SydApi extends SydRawApi, SydCertApi, SydCryptionApi, SydGenApi, SydSVApi, SydHAApi, SydQNUCApi, SydPledge, SydPINOpt {
public interface SydApi extends SydRawApi, SydCertApi, SydCryptionApi, SydGenApi, SydSVApi, SydHAApi, SydQNUCApi, SydPledge, SydPINOpt, SydManufactureApi {
byte ALG_AES = 0x30;
byte ALG_SM4 = 0x31;
@@ -67,7 +68,7 @@ public interface SydApi extends SydRawApi, SydCertApi, SydCryptionApi, SydGenApi
*/
SydApi connect(String ip, int port, String pwd, int connectTimeout, int readTimeout);
void init(SydApiBuilder builder);
/**
* 断开连接
@@ -352,5 +352,25 @@ interface SydSYMApi {
*/
byte[] SYD_MAC_Data(String key, String infoData, byte[] factor, String IV, int disperseNum, int disperseAlg);
/**
* 对称加密数据
* @param key 索引地址,指示用户密钥存储区的27位地址
* @param intPutData 消息数据
* @return
* iv: IV 数据域
* msg_all: 消息数据
*/
public String SYMEncrytByKeyIndex( String key, String intPutData);
/**
* 对称解密数据
* @param key 索引地址,指示用户密钥存储区的27位地址
* @param intPutData 消息数据
* @return 消息数据
*/
public String SYMDecrytByKeyIndex(String key,String intPutData);
//通过索引读取对称秘钥
String readKey(String index);
}
@@ -2,6 +2,8 @@ package com.sunyard.inf;
import com.sunyard.RetWrap;
import java.io.UnsupportedEncodingException;
/**
* 密钥生成相关接口
@@ -128,6 +130,57 @@ public interface SydGenApi {
*/
RetWrap SM2GenSessionKey(String publicKey);
/**
* 生成数字信封
* @param publicKey 公钥
* @return
* CipherKey: 公钥加密的会话密钥,DER 编码,HEX 格式,
* SessionKey: 本地LMK 加密的会话密钥,HEX 格式 ,
* KCV: 会话密钥的检验值,HEX 格式,长度为 16H。
*/
RetWrap genDigitalEnvelope(String publicKey);
/**
* 解密数字信封
*
* @param sk 私钥索引
* @param cipherKey 密文
* @return sessionKey LMK加密下的密钥
*/
String deDigitalEnvelope(String sk, String cipherKey);
/**
* @Description: 数字信封加密数据,会员专用
* @Param: [pk, inPutData,msgId]
* @return: byte[] 格式:sessionByPk+\r\n+头+\r\n+密文
* @Author: wp
* @Date: 2020/11/20
*/
String genDigitalEnvelopeWithDM(String pk, String inPutDataStr,String msgId) throws UnsupportedEncodingException;
/**
* 数字信封加密数据,票价所定制格式
* @param pk 公钥值
* @param inPutData 报文明文
* @return 报文密文 格式:sessionByPk(base64)+\r\n+密文(base64)
* @throws UnsupportedEncodingException
*/
String genDigitalEnvelopeWithData(String pk,String inPutData) throws UnsupportedEncodingException;
/**
* 解密数字信封,解密数据
* @param sk 私钥索引
* @param inPutData 报文密文
* @return 报文明文
* @throws UnsupportedEncodingException
*/
String deDigitalEnvelopeWithData(String sk, String inPutData) throws UnsupportedEncodingException;
/**
* 将秘钥从 PK 加密转为 LMK 加密
* @param skIndex 私钥索引
* @param sessionKey 会话秘钥密文
* @return 会话秘钥密文
*/
String transKeyFromPkToLmk(String skIndex, String sessionKey);
/**
* 此函数用于会话密钥的接收,用于接收端。
@@ -148,6 +201,17 @@ public interface SydGenApi {
*/
RetWrap SM2ConfirmSessionKey(String sk, String cipherKey);
/**
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
* @param dn 对*方 X509 证书DN。
* @param nAlg 算法标识,0:AES,1:SM4
* @return RetWrap 包含 CipherKey SessionKey KCV
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
* SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
* KCV 会话密钥的检验值,HEX 格式,长度为 32H。
*/
RetWrap generateDEByDn(byte[] dn, byte nAlg) throws Exception;
/**
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
@@ -0,0 +1,72 @@
package com.sunyard.inf;
import com.sunyard.RetWrap;
/**
* @program: ssphsm
* @description:
* @author: wp
* @create: 2021-03-09 19:25
**/
public interface SydManufactureApi {
/**
* 设置设备证书信息
* @param equipType 设备型号
* @param equipNo 设备序号
* @param equipSk 设备密钥私钥
* @param equipPk 设备密钥公钥
* @param manuPk 厂商公钥
* @param authSign 授权签名
* @return 是否设置成功
*/
boolean setDevCert(String equipType, String equipNo, byte[] equipSk, byte[] equipPk, byte[] manuPk, byte[] authSign);
/**
* 更换设备证书信息
* @param equipSk 设备密钥私钥
* @param equipPk 设备密钥公钥
* @param authSign 授权签名
* @return 是否设置成功
*/
boolean changeDevCert(byte[] equipSk, byte[] equipPk, byte[] authSign);
/**
* @Description 查询设备证书信息 -> pass
* @Param
* @Return com.sunyard.RetWrap
* @Author wp
* @Date 2020/9/30 16:42
**/
RetWrap getDeviceCertiInfo();
/**
* @Description 加密机版本号 -> pass
* @Param [num]
* @Return com.sunyard.RetWrap
* @Author wp
* @Date 2020/9/30 16:42
**/
RetWrap getVersion(String num);
/**
* 设备签名
* @param orgData 哈希数据
* @return 签名的 DER 编码
*/
String deviceSignC(byte[] orgData);
/**
* TOKEN导入
* @param token 设备公钥加密的 Token 密文
* @return 是否导入成功
*/
boolean setToken(byte[] token);
/**
* 计算设备认证码
* @param certiContent 认证内容
* @return 认证码
*/
byte[] calcAuthHead(byte[] certiContent);
}
@@ -2,6 +2,7 @@ package com.sunyard.inf;
import com.sunyard.RetWrap;
import com.sunyard.cert.X509;
/**
* 签名验签相关接口
@@ -274,6 +275,19 @@ interface SydDetachedSVApi {
byte[] orgData,
byte[] sign);
/**
* 对指定的原始数据核验其带公钥证书签名(PKCS#7)返回证书信息
* 数据模式可选 DATA_HASH 或 DATA_ORIGIN
*
* @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1
* @param orgData 待签名的原始数据
* @param sign 签名数据
* @return 证书
*/
X509 detachedVerifyAndGetX509(int dataType,
byte[] orgData,
String sign);
/**
* 计算SM3散列值
* @param packSn 消息块号,0=仅一块,1=第一块,2=中间块,3=最后块
File diff suppressed because it is too large Load Diff
@@ -13,6 +13,15 @@ public class SydApiBuilder {
private boolean useEBCDMode = false;
private boolean useETEncrypt = false;
private ClassLoader classLoader;
private String encode="UTF-8";
public String getEncode() {
return encode;
}
public void setEncode(String encode) {
this.encode = encode;
}
public SydApi build() throws ClassNotFoundException, IllegalAccessException, InstantiationException {