sydapi/src/main/java/com/sunyard/inf/SydGenApi.java

341 lines
14 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 算法标识 0RSA 1SM2
* @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, inPutDatamsgId]
* @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:AES1SM4
* @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:AES1-3SM4
* @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:AES1SM4
* @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:AES1SM4
* @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
);
}