mix-encryption
Version:
基于国密算法 SM2 和 SM4 实现的混合加密解决方案。
90 lines (88 loc) • 3.46 kB
TypeScript
interface EncryptionOption {
cipherMode?: number;
selfPriKey?: string;
selfPubKey?: string;
partnerKey?: string;
}
interface MixEncryptResult {
encryptedData: string;
encryptKey: string;
}
interface VerifyResult {
signValueHex: string;
data: Record<string, any>;
}
/**
* 国密混合加密处理器(SM2+SM4)
* 功能:
* 1. 使用SM4加密业务数据
* 2. 使用SM2加密SM4密钥
* 3. 提供数字签名验证功能
*/
declare class MixEncryption {
private cipherMode;
private selfPriKey;
private selfPubKey;
private partnerKey;
constructor({ cipherMode, selfPriKey, selfPubKey, partnerKey, }?: EncryptionOption);
get publicKey(): string;
/**
* 重置密钥对
* 清空当前实例的公钥、私钥及合作方公钥
* 适用于需要重新生成密钥对或清除密钥的场景
*/
resetKeyPair(): void;
/**
* 混合加密方法,使用 SM4 加密请求数据,使用 SM2 加密 SM4 密钥
* @param requestData - 需要加密的请求数据,类型为键值对对象
* @returns 包含加密后的请求数据和加密后的 SM4 密钥的对象
* @throws 若公钥未初始化,抛出 "Public key not initialized" 错误
* @throws 若请求数据不是对象,抛出 "requestData must be an Object" 错误
*/
mixCryptoEnCrypto(requestData: Record<string, any>): MixEncryptResult;
/**
* 混合解密方法,使用 SM2 解密 SM4 密钥,再使用解密后的 SM4 密钥解密密文响应数据
* @param responseData - 需要解密的响应数据,类型为字符串
* @param secretSM4Key - 加密后的 SM4 密钥,类型为字符串
* @param needVerifySign - 是否需要验证签名,类型为布尔值,默认值为 true,首次和服务端通信时,还未拿到服务端公钥,不能验签
* @returns 解密后的明文响应数据
* @throws 若私钥未初始化,调用 sm2DeCrypto 方法时会抛出 "Private key not initialized" 错误
*/
mixCryptoDeCrypto(responseData: string, secretSM4Key: string, needVerifySign?: boolean): Record<string, any> | string;
/**
* 生成SM2算法密钥对
* 当开启加密功能时,生成新的SM2公私钥对并更新实例密钥
* 适用于密钥初始化或密钥轮换场景
* @returns 包含十六进制格式公钥和私钥的对象(openEncrypt为true时返回),否则返回空对象
*/
generateSM2Key(): {
publicKey: string;
privateKey: string;
};
/**
* 接收配对公钥
* @param key partner公钥
*/
acceptPartnerKey(key: string): void;
/**
* 更新密钥对
* @param sendCallBack - 发送新公钥到合作端并获取新公钥的回调函数
*/
renewKeyPair(sendCallBack: (data: MixEncryptResult) => Promise<string>): Promise<void>;
/**
* 生成随机HEX字符串
* @param length - 需要生成的字符串长度(实际输出长度为此参数值)
*/
randomStr(length: number): string;
private doVerifySign;
private doSign;
private sm2EnCrypto;
private sm2DeCrypto;
private sm4EnCrypto;
private generateSM4key;
private sm4DeCrypto;
private getCrypto;
}
declare function getCryptoInstance(options?: EncryptionOption): MixEncryption;
export { getCryptoInstance as default };
export type { EncryptionOption, MixEncryptResult, VerifyResult };