147 lines
4.0 KiB
Java
147 lines
4.0 KiB
Java
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);
|
||
}
|