package com.ruoyi.security.service;

import javax.crypto.SecretKey;

/**
 * 数据加密解密服务接口
 * 提供AES-256-GCM加密算法和密钥管理功能
 * 
 * @author ruoyi
 */
public interface EncryptionService {
    
    /**
     * 加密字符串数据
     * 
     * @param plaintext 明文数据
     * @return 加密后的数据（Base64编码）
     */
    String encrypt(String plaintext);
    
    /**
     * 解密字符串数据
     * 
     * @param ciphertext 密文数据（Base64编码）
     * @return 解密后的明文数据
     */
    String decrypt(String ciphertext);
    
    /**
     * 加密字节数组数据
     * 
     * @param plaintext 明文字节数组
     * @return 加密后的字节数组
     */
    byte[] encrypt(byte[] plaintext);
    
    /**
     * 解密字节数组数据
     * 
     * @param ciphertext 密文字节数组
     * @return 解密后的字节数组
     */
    byte[] decrypt(byte[] ciphertext);
    
    /**
     * 生成新的加密密钥
     * 
     * @return 新生成的密钥
     */
    SecretKey generateKey();
    
    /**
     * 轮换当前使用的密钥
     * 
     * @return 新的密钥ID
     */
    String rotateKey();
    
    /**
     * 获取当前活跃的密钥ID
     * 
     * @return 当前密钥ID
     */
    String getCurrentKeyId();
    
    /**
     * 验证数据完整性
     * 
     * @param data 原始数据
     * @param signature 数字签名
     * @return 验证结果
     */
    boolean verifyIntegrity(String data, String signature);
    
    /**
     * 生成数据签名
     * 
     * @param data 待签名数据
     * @return 数字签名
     */
    String generateSignature(String data);
}