chsm-server/chsm-common/src/main/java/com/sunyard/chsm/sdf/SdfApiService.java
2024-12-18 09:25:41 +08:00

147 lines
4.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

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.chsm.sdf;
import com.sunyard.chsm.enums.Padding;
import com.sunyard.chsm.sdf.context.AlgId;
import com.sunyard.chsm.sdf.model.EccCipher;
import com.sunyard.chsm.sdf.model.EccKey;
import com.sunyard.chsm.sdf.model.EccSignature;
/**
* @author liulu
* @since 2024/10/23
*/
public interface SdfApiService {
/**
* 产生随机数
*
* @param len 随机数长度
* @return 返回随机数
*/
byte[] generateRandom(int len);
/**
* 生成对称密钥
*
* @param alg 算法,只支持对称算法
* @param keyLen 密钥长度(bit),只针对密钥长度可变的算法。
* 禁止传 null
* @return 对称密钥
*/
// byte[] genSymKey(KeyAlg alg, Integer keyLen);
//
// byte[] genSymKey(KeyAlg alg);
/**
* 对称加密
*
* @param alg 算法,只支持对称算法
* @param padding
* @param key 密钥值,明文
* @param data 原始数据
*/
// byte[] symEncrypt(KeyAlg alg, AlgMode mode, Padding padding, byte[] key, byte[] data);
//
// byte[] symEncrypt(KeyAlg alg, byte[] key, byte[] data);
byte[] symEncrypt(AlgId alg, Padding padding, byte[] key, byte[] iv, byte[] data);
/**
* 对称解密
*
* @param mode 轮模式
* @param alg 算法,只支持对称算法
* @param padding 填充模式
* @param key 密钥值,明文
* @param data 密文数据
*/
// byte[] symDecrypt(KeyAlg alg, AlgMode mode, Padding padding, byte[] key, byte[] data);
//
// byte[] symDecrypt(KeyAlg alg, byte[] key, byte[] data);
byte[] symDecrypt(AlgId alg, Padding padding, byte[] key, byte[] iv, byte[] data);
/**
* 产生ECC密钥对并输出
*
* @return pubKey 返回公钥 | priKey 返回私钥
*/
EccKey genKeyPairEcc();
/**
* 外部密钥ECC签名
*
* @param privateKey ECC私钥
* @param pucData 缓冲区指针,用于存放外部输入的数据
* @param userId 签名者id
* @return pucSignature 返回签名值数据
*/
EccSignature externalSignWithIdECC(byte[] privateKey, byte[] pucData, byte[] userId);
EccSignature externalSignECC(byte[] privateKey, byte[] pucData);
/**
* 外部密钥ECC验证
*
* @param publicKey ECC公钥
* @param pubData 原文
* @param userId 签名者id
* @param signData 外部签名数据
* @return 0 成功; 非0 失败,返回错误代码
*/
boolean externalVerifyWithIdECC(byte[] publicKey, byte[] pubData, byte[] signData, byte[] userId);
boolean externalVerifyECC(byte[] publicKey, byte[] pubData, byte[] signData);
/**
* 外部密钥ECC公钥加密
*
* @param publicKey 外部ECC公钥结构
* @param pucData 缓冲区指针,用于存放外部输入的数据
* @return pucEncData 返回数据密文
*/
EccCipher externalEncryptECC(byte[] publicKey, byte[] pucData);
/**
* 外部密钥ECC私钥解密
*
* @param privateKey 外部ECC私钥结构
* @param encData 缓冲区指针,用于存放输入的数据密文
* @return pucData 返回数据明文
*/
byte[] externalDecryptECC(byte[] privateKey, byte[] encData);
/**
* 计算MAC
*
* @param algId algId
* @param padding padding
* @param symKey 用户指定的密钥
* @param pucIv 缓冲区指针用于存放输入和返回的IV数据
* @param pucData 缓冲区指针,用于存放输入的数据明文
* @return pucEncData 返回MAC值 | puiLength 返回MAC值长度
*/
byte[] calculateMAC(AlgId algId, Padding padding, byte[] symKey, byte[] pucIv, byte[] pucData);
byte[] hmac(byte[] key, byte[] srcData);
/**
* 杂凑运算
*
* @param pucData 缓冲区指针,用于存放输入的数据明文
* @return hash值
*/
byte[] hash(byte[] pucData);
byte[] encryptByTMK(byte[] data);
byte[] decryptByTMK(byte[] data);
}