341 lines
14 KiB
Java
341 lines
14 KiB
Java
package com.sunyard.inf;
|
||
|
||
import com.sunyard.RetWrap;
|
||
|
||
import java.io.UnsupportedEncodingException;
|
||
|
||
|
||
/**
|
||
* 密钥生成相关接口
|
||
*/
|
||
public interface SydGenApi {
|
||
/**
|
||
* RSA、SM2 非对称密钥产生
|
||
*
|
||
* @return RetWrap 包含 privateKey 和 publicKey
|
||
* privateKey LMK 加密下的私钥
|
||
* publicKey 公钥的 DER 编码
|
||
*/
|
||
RetWrap SM2GenKeyPair();
|
||
|
||
/**
|
||
* RSA、SM2 非对称密钥产生
|
||
* @param keyType 算法标识 0:RSA 1:SM2
|
||
* @param index 27位数字,以此索引存储生成的密钥
|
||
* @param length 长度
|
||
* @return RetWrap 包含 privateKey 和 publicKey
|
||
* privateKey LMK 加密下的私钥
|
||
* publicKey 公钥的 DER 编码
|
||
* 再之前的接口上添加了索引参数
|
||
*/
|
||
RetWrap SM2OrRSAGenKeyPair(int keyType,String index,int length);
|
||
|
||
|
||
/**
|
||
* 对称密钥产生
|
||
* @param keyType 密钥类型
|
||
* @param solution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
|
||
* @return RetWrap 包含
|
||
* lmkKey LMK LMK加密密钥
|
||
* keyCheck 密钥校验值
|
||
*
|
||
*/
|
||
RetWrap genSymmetricKey(String keyType,char solution);
|
||
|
||
/**
|
||
* 生成一个对称密钥(*) -> pass (对比之前添加了可产生ZMK加密下的密钥)
|
||
*
|
||
* 默认加密输出密钥的密钥方案为X,业务标识为N。
|
||
* @param mode 是否产生ZMK加密下的密钥,0-产生密钥。1-产生密钥并在ZMK下加密
|
||
* @param keyType 密钥类型
|
||
* @param solution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
|
||
* @param zmk zmk
|
||
* @return RetWrap 包含
|
||
* lmkKey LMK LMK加密密钥
|
||
* zmkKey ZMK加密密钥
|
||
* keyCheck 密钥校验值
|
||
*/
|
||
RetWrap genSymKey(int mode, String keyType, char solution, String zmk);
|
||
|
||
/**
|
||
* 生成一个密钥并以分开的成份形式打印(=)
|
||
* @param keyType 密钥类型
|
||
* @param solution 密钥长度/LMK 下加密密钥的方案。
|
||
* @return RetWrap
|
||
* lmkKey LMK 加密下的密钥。
|
||
* keyCheck 密钥校验值
|
||
*/
|
||
RetWrap genAndPrintSplit(String keyType,char solution);
|
||
|
||
|
||
/**
|
||
* 输出一个ZMK下加密的密钥
|
||
* @param keyType 密钥类型
|
||
* @param solution 密钥方案(ZMK) 加密输出密钥的密钥方案
|
||
* @param zmk 27 位的索引号: 16 位机构号+3 位密钥类型+8 位密钥索引号
|
||
* @param key LMK 加密的密钥。
|
||
* @return
|
||
* key lmk 头 + LMK 加密下的密钥。
|
||
* keyCheck 密钥校验值
|
||
*/
|
||
public RetWrap outputKey(String keyType, char solution, String zmk, String key);
|
||
|
||
/**
|
||
* 输入一个ZMK下加密的密钥。转换为LMK下加密
|
||
* @param keyType 密钥类型
|
||
* @param solution 加密输出密钥的密钥方案
|
||
* @param zmk zmk 27 位的索引号: 16 位机构号+3 位密钥类型+8 位密钥索引号
|
||
* @param key ZMK 加密下的密钥。
|
||
* @return RetWrap
|
||
* key lmk 头 + LMK 加密下的密钥。
|
||
* keyCheck 密钥校验值
|
||
*/
|
||
public RetWrap inputKey(String keyType, char solution, String zmk, String key);
|
||
|
||
/**
|
||
* 密钥合成
|
||
* @param keyType 密钥类型
|
||
* @param keySolution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
|
||
* @param keyClearPattern 两个明文分量异或合成
|
||
* @return RetWrap 包含
|
||
* lmkKey LMK LMK加密密钥
|
||
* keyCheck 密钥校验值
|
||
*
|
||
*/
|
||
RetWrap genComposeKey(String keyType,char keySolution,String keyClearPattern);
|
||
|
||
/**
|
||
* 由2到9个加密的成份组成一个密钥,同时返回一个LMK对(04-05)下加密的ZMK以及校验值
|
||
* @param keys 已加密的多个ZMK成份
|
||
* @return
|
||
*
|
||
*/
|
||
RetWrap genComposeKey(String[] keys);
|
||
/**
|
||
* SM2 非对称密钥产生和存储
|
||
*
|
||
* @return RetWrap 包含 privateKey 和 publicKey
|
||
* privateKey LMK 加密下的私钥
|
||
* publicKey 公钥的 DER 编码
|
||
*/
|
||
RetWrap SYD_SM2GenKeyPair();
|
||
|
||
|
||
/**
|
||
* 此函数用于会话密钥的产生,用于发起端。
|
||
* 加密机产生随机会话密钥,输出两类密文:
|
||
* 1、 公钥加密的密文,用于密钥的传递。
|
||
* 2、 本地 LMK 加密,用于本地应用数据的加解密。
|
||
*
|
||
* @param publicKey 公钥串,DER 编码,HEX 格式。
|
||
* @return CipherKey 公钥加密的会话密钥,DER 编码,HEX 格式, SessionKey 本地LMK 加密的会话密钥,HEX 格式 , KCV 会话密钥的检验值,HEX 格式,长度为 16H
|
||
*/
|
||
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);
|
||
|
||
/**
|
||
* 此函数用于会话密钥的接收,用于接收端。
|
||
* 加密机通过使用者 ID 所对应的私钥解密对方公钥加密的密文,输出本地 LMK 加密的会话密钥,用于本地应用数据的加解密。
|
||
*
|
||
* @param userId 使用者的 ID,最大长度为 16 位数字,右对齐。
|
||
* @param cipherKey 公钥加密的会话密钥,DER 编码,HEX 格式
|
||
* @return SessionKey : 本地LMK 加密的会话密钥,HEX 格式 ; KCV 会话密钥的检验值,HEX 格式,长度为 16H。
|
||
*/
|
||
RetWrap SM2ConfirmSessionKeyC(String userId, String cipherKey);
|
||
/**
|
||
* 此函数用于会话密钥的接收,用于接收端。
|
||
* 加密机通过使用者 ID 所对应的私钥解密对方公钥加密的密文,输出本地 LMK 加密的会话密钥,用于本地应用数据的加解密。
|
||
*
|
||
* @param sk 私钥
|
||
* @param cipherKey 公钥加密的会话密钥,DER 编码,HEX 格式
|
||
* @return SessionKey : 本地LMK 加密的会话密钥,HEX 格式 ; KCV 会话密钥的检验值,HEX 格式,长度为 16H。
|
||
*/
|
||
RetWrap SM2ConfirmSessionKey(String sk, String cipherKey);
|
||
|
||
/**
|
||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||
|
||
* @param dn 对*方 X509 证书DN。
|
||
* @param alg 算法标识,0:AES,1:SM4
|
||
* @param model 证书模式,0:证书序号,1:证书 DN
|
||
* @return RetWrap 包含 CipherKey SessionKey KCV
|
||
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
|
||
* SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 32H。
|
||
*/
|
||
RetWrap generateDEByDn(byte[] dn, int alg, int model) throws Exception;
|
||
|
||
/**
|
||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||
|
||
* @param certSerial 证书DN。
|
||
* @param oData 明文数据
|
||
* @return RetWrap 包含 CipherKey SessionKey KCV
|
||
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
|
||
* SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 32H。
|
||
*/
|
||
RetWrap generateDEByDn(byte[] certSerial, String oData);
|
||
|
||
/**
|
||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||
|
||
* @param certSerial 证书DN或SN。
|
||
* @param alg 算法标识,0:AES,1-3:SM4
|
||
* @param model 证书模式,0:证书序号,1:证书 DN
|
||
* @param oData 明文数据
|
||
* @return RetWrap 包含 CipherKey SessionKey KCV
|
||
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
|
||
* SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 32H。
|
||
*/
|
||
RetWrap generateDE(byte[] certSerial, int alg, int model, String oData);
|
||
|
||
/**
|
||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||
|
||
* @param certSerial 对*方 X509 证书的序列号。
|
||
* @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 generateDEbyGS(String certSerial, byte nAlg);
|
||
|
||
/**
|
||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||
*
|
||
* @param certSerial 对*方 X509 证书的序列号。
|
||
* @param orgCode 机构码
|
||
* @return RetWrap 包含 CipherKey, SessionKey, KCV
|
||
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
|
||
* SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 32H。
|
||
*/
|
||
RetWrap generateDEbyGS(String certSerial, String orgCode);
|
||
|
||
/**
|
||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||
|
||
* @param certSerial 对*方 X509 证书的序列号。
|
||
* @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 generateDE(
|
||
String certSerial,
|
||
byte nAlg
|
||
);
|
||
|
||
|
||
/**
|
||
* 接收用私钥解密数字信封,还原对称密钥。
|
||
*
|
||
* @param pCertSerial 输入。 对方 X509 证书的序列号。
|
||
* @param pCipherKey 输入。 公钥加密的会话密钥,BASE64 编码
|
||
* @return RetWrap 包含 SessionKey KCV
|
||
* SessionKey 输出。 本地LMK 加密的会话密钥,格式为:密钥类型|密钥密文,比如:02|密钥密文
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 36H。
|
||
* orgCode 如果有机构码的话会返回机构码
|
||
*/
|
||
RetWrap decryptDE(
|
||
String pCertSerial,
|
||
String pCipherKey
|
||
);
|
||
|
||
/**
|
||
* 接收用私钥解密数字信封,还原对称密钥。
|
||
* 默认会传P
|
||
* @param certSerial 输入。 对方 X509 证书的DN。
|
||
* @param pCipherKey 输入。 公钥加密的会话密钥,BASE64 编码
|
||
* @return RetWrap 包含 SessionKey KCV
|
||
* oData 如果有机构码的话会返回原数据
|
||
* SessionKey 输出。 本地LMK 加密的会话密钥,格式为:密钥类型|密钥密文,比如:02|密钥密文
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 36H。
|
||
* orgCode 如果有机构码的话会返回机构码
|
||
*/
|
||
RetWrap decryptDEByDN(byte[] certSerial, String pCipherKey);
|
||
|
||
/**
|
||
* 接收用私钥解密数字信封,还原对称密钥。
|
||
*
|
||
* @param pFlag 输入。 p标识,如果为true,则传入P
|
||
* @param model 输入。 证书模式,0:证书序号,1:证书 DN
|
||
* @param certSerial 输入。 对方 X509 证书的序列号或DN。
|
||
* @param pCipherKey 输入。 公钥加密的会话密钥,BASE64 编码
|
||
* @return RetWrap 包含 SessionKey KCV
|
||
* oData 如果有机构码的话会返回原数据
|
||
* SessionKey 输出。 本地LMK 加密的会话密钥,格式为:密钥类型|密钥密文,比如:02|密钥密文
|
||
* KCV 会话密钥的检验值,HEX 格式,长度为 36H。
|
||
* orgCode 如果有机构码的话会返回机构码
|
||
*/
|
||
RetWrap decryptDE(boolean pFlag, int model, byte[] certSerial, String pCipherKey);
|
||
|
||
/**
|
||
* 产生要求长度的随即数据串,可用于身份认证
|
||
*
|
||
* @param nRandomSize 需要输出的随机串的长度
|
||
* @return 未抛出异常表示成功, 返回 HEX 格式的密钥
|
||
*
|
||
*/
|
||
String GenerateRandom(
|
||
int nRandomSize
|
||
);
|
||
|
||
|
||
}
|