import { a as AsyncEncryptionStrategy, b as EncryptionConfig, E as EncryptedRequest } from '../types-CaC11eNm.js'; export { A as AESKeys } from '../types-CaC11eNm.js'; /** * AES-256-CBC + HMAC-SHA256 加密策略 * * 方案: * - AES-256-CBC 对称加密(随机 IV,防重放) * - HMAC-SHA256 签名(防篡改) * - 固定对称密钥(通过环境变量注入) * * 运行要求: * - 使用 Web Crypto API 原生实现 * * 传输格式: * - 请求体:Base64(IV + 密文) * - 请求头:X-Encrypted, X-Timestamp, X-Signature */ /** AES-CBC + HMAC 密钥配置 */ interface AESCBCHMACKeys { /** 请求加密密钥(Hex 字符串,64 字符 = 256 位) */ requestKeyHex: string; /** 响应解密密钥(Hex 字符串,64 字符 = 256 位) */ responseKeyHex: string; } /** * AES-256-CBC + HMAC-SHA256 加密策略 */ declare class AESCBCHMACStrategy implements AsyncEncryptionStrategy { private readonly requestKeyHex; private readonly responseKeyHex; constructor(keys: AESCBCHMACKeys); encrypt(data: unknown, _timestamp: number): Promise; decrypt(ciphertext: string, _timestamp: number): Promise; /** 生成请求签名 */ generateRequestSignature(encryptedData: string, timestamp: number): Promise; /** 验证响应签名 */ verifyResponseSignature(encryptedData: string, signature: string, timestamp: number): Promise; /** 生成响应签名(便于测试或对接模拟端) */ generateResponseSignature(encryptedData: string, timestamp: number): Promise; } /** * Web Crypto API 原生加密工具(Web 端性能优化) * * 使用浏览器原生 Web Crypto API 实现 AES-256-CBC + HMAC-SHA256。 * 相比纯 JS 实现,性能显著更优。 * * 功能: * - AES-256-CBC 加密解密 * - HMAC-SHA256 签名验证 * - 原生安全随机 IV 生成 * * 运行要求: * - 环境必须提供 Web Crypto API */ /** * 检测当前环境是否支持 Web Crypto API */ declare function isWebCryptoAvailable(): boolean; /** * 加密器工厂 * * 优先使用 Web Crypto API 原生实现,非安全上下文自动切换为纯 JS 实现。 */ /** 统一的加密器接口 */ interface UnifiedCryptoProvider { encryptAES(plaintext: string, keyHex: string): Promise; decryptAES(encryptedBase64: string, keyHex: string): Promise; generateSignature(data: string, keyHex: string): Promise; verifySignature(data: string, signature: string, keyHex: string): Promise; sha256(data: string): Promise; } /** 加密器实现类型 */ type CryptoProviderType = 'native' | 'js-fallback'; /** 获取加密器实例(单例模式) */ declare function getCryptoProvider(): UnifiedCryptoProvider; /** 获取当前加密器类型 */ declare function getProviderType(): CryptoProviderType; /** 重置加密器(用于测试) */ declare function resetProvider(): void; /** 是否使用原生加密器 */ declare function isUsingNativeProvider(): boolean; declare function encryptAESOptimized(plaintext: string, keyHex: string): Promise; declare function decryptAESOptimized(encryptedBase64: string, keyHex: string): Promise; declare function generateSignatureOptimized(data: string, keyHex: string): Promise; declare function verifySignatureOptimized(data: string, signature: string, keyHex: string): Promise; declare function sha256Optimized(data: string): Promise; /** * 加密策略工厂 */ /** * 创建加密策略实例 * * @param config - 加密配置 * @returns AES-256-CBC + HMAC-SHA256 异步加密策略实例 * * @example * ```ts * const crypto = createEncryption({ * algorithm: 'aes-cbc-hmac', * keys: { * requestKeyHex: '64字符Hex请求密钥', * responseKeyHex: '64字符Hex响应密钥', * }, * }); * * const encrypted = await crypto.encrypt(data, Date.now()); * ``` */ declare function createEncryption(config: EncryptionConfig): AsyncEncryptionStrategy; /** * 加密请求数据的便捷函数 * * 将数据加密并生成 HMAC 签名。 * * @param strategy - 加密策略实例 * @param data - 要加密的请求数据 * @returns 加密结果 (密文 + 时间戳 + 签名) * * @example * ```ts * const crypto = createEncryption({ algorithm: 'aes-cbc-hmac', keys: { ... } }); * const { encrypted, timestamp, signature } = await encryptRequestData(crypto, requestBody); * * headers['X-Encrypted'] = 'true'; * headers['X-Timestamp'] = String(timestamp); * headers['X-Signature'] = signature; * body = encrypted; * ``` */ declare function encryptRequestData(strategy: AsyncEncryptionStrategy, data: unknown): Promise; /** * 解密响应数据的便捷函数 * * 验证时间戳和签名后解密数据。 * * @param strategy - 加密策略实例 * @param ciphertext - 密文 * @param timestamp - 时间戳 * @param options - 验证选项 * @returns 解密后的数据 * @throws 时间戳过期或签名验证失败时抛出错误 */ declare function decryptResponseData(strategy: AsyncEncryptionStrategy, ciphertext: string, timestamp?: number, options?: { replayWindow?: number; forwardSkew?: number; signature?: string; }): Promise; /** * 密码哈希工具 * * 优先使用 Web Crypto API,非安全上下文(HTTP)自动降级为纯 JS 实现并输出警告 */ /** 支持的哈希算法 */ type HashAlgorithm = 'sha256'; /** * 对密码进行哈希处理(SHA-256) * * 优先使用 Web Crypto API,非安全上下文自动降级为纯 JS 实现并输出控制台警告 * * @param password - 明文密码 * @param algorithm - 哈希算法,默认 'sha256' * @returns 哈希后的字符串 (hex) */ declare function hashPassword(password: string, algorithm?: HashAlgorithm): Promise; /** * 生成随机 hex 字符串 * * @param length - 长度,默认 32 * @returns 随机 hex 字符串 */ declare function generateRandomHex(length?: number): string; /** * 路径排除匹配工具 * * 支持 Ant 风格通配符: * - `**` 匹配任意层级路径 * - `*` 匹配单层路径中的任意字符 */ /** * 检查 URL 路径是否匹配排除模式列表 * * @param url - 请求 URL (完整路径或相对路径) * @param patterns - 排除模式列表 * @returns 是否应该被排除 * * @example * ```ts * const excludePaths = ['/api/auth/**', '/public/*', '/health']; * * isExcludedPath('/api/auth/login', excludePaths) // true * isExcludedPath('/api/auth/token/refresh', excludePaths) // true * isExcludedPath('/api/users', excludePaths) // false * isExcludedPath('/health', excludePaths) // true * isExcludedPath('/health-check', excludePaths) // false (段边界) * ``` */ declare function isExcludedPath(url: string, patterns: string[]): boolean; /** * 防重放时间戳验证 */ /** * 防重放验证选项 */ interface ReplayGuardOptions { /** 时间窗口 (秒),默认 60 */ window?: number; /** 允许的前向偏差 (秒),默认 5 (处理客户端时钟快于服务端的情况) */ forwardSkew?: number; } /** * 验证时间戳是否在有效窗口内 (防重放攻击) * * @param timestamp - 要验证的时间戳 (毫秒) * @param options - 验证选项 * @returns 是否有效 * * @example * ```ts * const ts = Date.now(); * validateTimestamp(ts) // true * validateTimestamp(ts - 120000) // false (超过60秒窗口) * validateTimestamp(ts + 10000) // false (超过5秒前向偏差) * ``` */ declare function validateTimestamp(timestamp: number, options?: ReplayGuardOptions): boolean; /** * 生成当前时间戳 (毫秒) * * @returns 当前时间戳 */ declare function generateTimestamp(): number; /** * 创建防重放守卫 * * 维护一个已用时间戳集合,防止同一时间戳被重复使用。 * * @param options - 选项 * @returns 守卫实例 * * @example * ```ts * const guard = createReplayGuard({ window: 120 }); * * guard.validate(timestamp) // true (首次) * guard.validate(timestamp) // false (重复) * ``` */ interface ReplayGuardConfig extends ReplayGuardOptions { /** 已使用时间戳集合的清理阈值,超过此数量触发自动清理。默认 1000 */ cleanupThreshold?: number; } declare function createReplayGuard(options?: ReplayGuardConfig): { /** * 验证时间戳有效性并标记为已使用 */ validate(timestamp: number): boolean; /** * 清空已用时间戳记录 */ reset(): void; }; export { type AESCBCHMACKeys, AESCBCHMACStrategy, AsyncEncryptionStrategy, type CryptoProviderType, EncryptedRequest, EncryptionConfig, type HashAlgorithm, type ReplayGuardConfig, type ReplayGuardOptions, type UnifiedCryptoProvider, createEncryption, createReplayGuard, decryptAESOptimized, decryptResponseData, encryptAESOptimized, encryptRequestData, generateRandomHex, generateSignatureOptimized, generateTimestamp, getCryptoProvider, getProviderType, hashPassword, isExcludedPath, isUsingNativeProvider, isWebCryptoAvailable, resetProvider, sha256Optimized, validateTimestamp, verifySignatureOptimized };