{"version":3,"sources":["../src/crypto/crypto-native.ts","../src/crypto/crypto-js-fallback.ts","../src/crypto/crypto-provider-factory.ts","../src/crypto/aes-cbc-hmac.ts","../src/crypto/replay-guard.ts","../src/crypto/factory.ts","../src/crypto/path-matcher.ts"],"names":["IV_LENGTH","KEY_HEX_LENGTH","validateKeyHex","generateRandomIV","aesjs"],"mappings":"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","file":"chunk-UTYHDFOB.cjs","sourcesContent":["/**\n * Web Crypto API 原生加密工具（Web 端性能优化）\n *\n * 使用浏览器原生 Web Crypto API 实现 AES-256-CBC + HMAC-SHA256。\n * 相比纯 JS 实现，性能显著更优。\n *\n * 功能：\n * - AES-256-CBC 加密解密\n * - HMAC-SHA256 签名验证\n * - 原生安全随机 IV 生成\n *\n * 运行要求：\n * - 环境必须提供 Web Crypto API\n */\n\n// ────────── 常量 ──────────\n\n/** IV 长度（16 字节 = 128 位） */\nconst IV_LENGTH = 16;\n\n/** 密钥长度（Hex 字符数，64 字符 = 32 字节 = 256 位） */\nconst KEY_HEX_LENGTH = 64;\n\n// ────────── 环境检测 ──────────\n\n/**\n * 检测当前环境是否支持 Web Crypto API\n */\nexport function isWebCryptoAvailable(): boolean {\n  return (\n    typeof crypto !== 'undefined' &&\n    typeof (crypto as { subtle?: unknown }).subtle !== 'undefined'\n  );\n}\n\n// ────────── 密钥处理 ──────────\n\n/**\n * 将 Hex 字符串转换为 ArrayBuffer\n */\nfunction hexToArrayBuffer(hex: string): ArrayBuffer {\n  const bytes = new Uint8Array(hex.length / 2);\n  for (let i = 0; i < hex.length; i += 2) {\n    bytes[i / 2] = Number.parseInt(hex.substring(i, i + 2), 16);\n  }\n  return bytes.buffer;\n}\n\n/**\n * 将 ArrayBuffer 转换为 Hex 字符串\n */\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n  const bytes = new Uint8Array(buffer);\n  return Array.from(bytes)\n    .map((b) => b.toString(16).padStart(2, '0'))\n    .join('');\n}\n\n/**\n * 将 Hex 密钥转换为 CryptoKey\n */\nasync function importKey(\n  hexKey: string,\n  algorithm: AesKeyGenParams | HmacImportParams,\n): Promise<CryptoKey> {\n  const keyBuffer = hexToArrayBuffer(hexKey);\n  return await crypto.subtle.importKey('raw', keyBuffer, algorithm, false, [\n    'encrypt',\n    'decrypt',\n  ]);\n}\n\n/**\n * 将 Hex 密钥转换为 HMAC CryptoKey\n */\nasync function importHmacKey(hexKey: string): Promise<CryptoKey> {\n  const keyBuffer = hexToArrayBuffer(hexKey);\n  return await crypto.subtle.importKey(\n    'raw',\n    keyBuffer,\n    { name: 'HMAC', hash: 'SHA-256' },\n    false,\n    ['sign', 'verify'],\n  );\n}\n\n// ────────── 随机 IV 生成 ──────────\n\n/**\n * 生成随机 IV（使用 Web Crypto API）\n * @returns Uint8Array (16 字节)\n */\nasync function generateRandomIV(): Promise<Uint8Array> {\n  return crypto.getRandomValues(new Uint8Array(IV_LENGTH));\n}\n\n// ────────── 密钥校验 ──────────\n\n/**\n * 校验密钥格式\n * @param keyHex Hex 字符串（64 字符 = 32 字节 = 256 位）\n */\nfunction validateKeyHex(keyHex: string): void {\n  if (!keyHex || keyHex.length !== KEY_HEX_LENGTH) {\n    throw new Error(\n      `[Crypto-Native] 密钥格式错误：需要 ${KEY_HEX_LENGTH} 个字符的 Hex 字符串，当前长度 ${keyHex?.length || 0}`,\n    );\n  }\n}\n\n// ────────── AES-256-CBC 加密解密 ──────────\n\n/**\n * AES-256-CBC 加密\n * @param plaintext 明文字符串\n * @param keyHex 密钥（Hex 字符串，64 字符）\n * @returns Base64(IV + 密文)\n */\nexport async function encryptAESNative(\n  plaintext: string,\n  keyHex: string,\n): Promise<string> {\n  if (!plaintext) return plaintext;\n  validateKeyHex(keyHex);\n\n  const iv = await generateRandomIV();\n  const key = await importKey(keyHex, { name: 'AES-CBC', length: 256 });\n\n  const encoder = new TextEncoder();\n  const data = encoder.encode(plaintext);\n\n  const encrypted = await crypto.subtle.encrypt(\n    { name: 'AES-CBC', iv: iv.buffer as ArrayBuffer },\n    key,\n    data,\n  );\n\n  const combined = new Uint8Array(iv.length + encrypted.byteLength);\n  combined.set(iv, 0);\n  combined.set(new Uint8Array(encrypted), iv.length);\n\n  return btoa(String.fromCharCode(...combined));\n}\n\n/**\n * AES-256-CBC 解密\n * @param encryptedBase64 Base64(IV + 密文)\n * @param keyHex 密钥（Hex 字符串）\n * @returns 明文字符串\n */\nexport async function decryptAESNative(\n  encryptedBase64: string,\n  keyHex: string,\n): Promise<string> {\n  if (!encryptedBase64) return encryptedBase64;\n  validateKeyHex(keyHex);\n\n  const combined = Uint8Array.from(atob(encryptedBase64), (c) =>\n    c.charCodeAt(0),\n  );\n\n  if (combined.length < IV_LENGTH + 16) {\n    throw new Error('[Crypto-Native] 加密数据长度不足');\n  }\n\n  const iv = combined.slice(0, IV_LENGTH);\n  const ciphertext = combined.slice(IV_LENGTH);\n\n  const key = await importKey(keyHex, { name: 'AES-CBC', length: 256 });\n\n  try {\n    const decrypted = await crypto.subtle.decrypt(\n      { name: 'AES-CBC', iv },\n      key,\n      ciphertext,\n    );\n\n    const decoder = new TextDecoder();\n    return decoder.decode(decrypted);\n  } catch (error) {\n    throw new Error('[Crypto-Native] 解密结果为空，可能密钥不正确', {\n      cause: error,\n    });\n  }\n}\n\n// ────────── HMAC-SHA256 签名 ──────────\n\n/**\n * HMAC-SHA256 签名\n * @param data 数据\n * @param keyHex 密钥（Hex 字符串）\n * @returns 签名（Hex 字符串）\n */\nexport async function generateSignatureNative(\n  data: string,\n  keyHex: string,\n): Promise<string> {\n  const key = await importHmacKey(keyHex);\n  const encoder = new TextEncoder();\n  const dataBuffer = encoder.encode(data);\n\n  const signature = await crypto.subtle.sign('HMAC', key, dataBuffer);\n  return arrayBufferToHex(signature);\n}\n\n/**\n * 验证 HMAC-SHA256 签名\n * @param data 数据\n * @param signature 待验证的签名（Hex 字符串）\n * @param keyHex 密钥（Hex 字符串）\n * @returns 签名是否有效\n */\nexport async function verifySignatureNative(\n  data: string,\n  signature: string,\n  keyHex: string,\n): Promise<boolean> {\n  if (!signature) return false;\n  const expected = await generateSignatureNative(data, keyHex);\n  return constantTimeCompare(expected, signature);\n}\n\n/**\n * 恒定时间字符串比较，防止时序攻击\n */\nfunction constantTimeCompare(a: string, b: string): boolean {\n  if (a.length !== b.length) return false;\n  let result = 0;\n  for (let i = 0; i < a.length; i++) {\n    result |= a.charCodeAt(i) ^ b.charCodeAt(i);\n  }\n  return result === 0;\n}\n\n// ────────── SHA-256 哈希 ──────────\n\n/**\n * SHA-256 哈希\n * @param data 数据\n * @returns 哈希值（Hex 字符串）\n */\nexport async function sha256Native(data: string): Promise<string> {\n  const encoder = new TextEncoder();\n  const dataBuffer = encoder.encode(data);\n  const hash = await crypto.subtle.digest('SHA-256', dataBuffer);\n  return arrayBufferToHex(hash);\n}\n","/**\n * 纯 JS 加密实现（非安全上下文 fallback）\n *\n * 在 Web Crypto API 不可用时（HTTP 局域网等），使用 aes-js 库提供 AES-256-CBC 加密。\n * 算法：AES-256-CBC + HMAC-SHA256，与 crypto-native.ts 完全兼容。\n */\n\nimport aesjs from 'aes-js';\n\n// ────────── 常量 ──────────\n\nconst IV_LENGTH = 16;\nconst KEY_HEX_LENGTH = 64;\n\n// ────────── 工具函数 ──────────\n\nfunction hexToBytes(hex: string): Uint8Array {\n  const bytes = new Uint8Array(hex.length / 2);\n  for (let i = 0; i < hex.length; i += 2) {\n    bytes[i / 2] = Number.parseInt(hex.substring(i, i + 2), 16);\n  }\n  return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n  return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\nfunction validateKeyHex(keyHex: string): void {\n  if (!keyHex || keyHex.length !== KEY_HEX_LENGTH) {\n    throw new Error(\n      `[Crypto-JS] 密钥格式错误：需要 ${KEY_HEX_LENGTH} 个字符的 Hex 字符串，当前长度 ${keyHex?.length || 0}`,\n    );\n  }\n}\n\nfunction generateRandomIV(): Uint8Array {\n  const iv = new Uint8Array(IV_LENGTH);\n  crypto.getRandomValues(iv);\n  return iv;\n}\n\n// ────────── SHA-256 ──────────\n\nconst SHA256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n  0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n  0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n  0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n  0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n  0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n\nfunction sha256Bytes(data: Uint8Array): Uint8Array {\n  const rotr = (n: number, x: number) => (x >>> n) | (x << (32 - n));\n  const ch = (x: number, y: number, z: number) => (x & y) ^ (~x & z);\n  const maj = (x: number, y: number, z: number) => (x & y) ^ (x & z) ^ (y & z);\n  const sigma0 = (x: number) => rotr(2, x) ^ rotr(13, x) ^ rotr(22, x);\n  const sigma1 = (x: number) => rotr(6, x) ^ rotr(11, x) ^ rotr(25, x);\n  const gamma0 = (x: number) => rotr(7, x) ^ rotr(18, x) ^ (x >>> 3);\n  const gamma1 = (x: number) => rotr(17, x) ^ rotr(19, x) ^ (x >>> 10);\n\n  const bitLen = data.length * 8;\n  const padded = new Uint8Array(Math.ceil((data.length + 9) / 64) * 64);\n  padded.set(data);\n  padded[data.length] = 0x80;\n  const view = new DataView(padded.buffer);\n  view.setUint32(padded.length - 4, bitLen, false);\n\n  let [h0, h1, h2, h3, h4, h5, h6, h7] = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,\n    0x1f83d9ab, 0x5be0cd19,\n  ];\n\n  for (let offset = 0; offset < padded.length; offset += 64) {\n    const W = new Array<number>(64);\n    for (let t = 0; t < 16; t++) W[t] = view.getUint32(offset + t * 4, false);\n    for (let t = 16; t < 64; t++)\n      W[t] = (gamma1(W[t - 2]) + W[t - 7] + gamma0(W[t - 15]) + W[t - 16]) | 0;\n\n    let [a, b, c, d, e, f, g, h] = [h0, h1, h2, h3, h4, h5, h6, h7];\n    for (let t = 0; t < 64; t++) {\n      const t1 = (h + sigma1(e) + ch(e, f, g) + SHA256_K[t] + W[t]) | 0;\n      const t2 = (sigma0(a) + maj(a, b, c)) | 0;\n      h = g;\n      g = f;\n      f = e;\n      e = (d + t1) | 0;\n      d = c;\n      c = b;\n      b = a;\n      a = (t1 + t2) | 0;\n    }\n    h0 = (h0 + a) | 0;\n    h1 = (h1 + b) | 0;\n    h2 = (h2 + c) | 0;\n    h3 = (h3 + d) | 0;\n    h4 = (h4 + e) | 0;\n    h5 = (h5 + f) | 0;\n    h6 = (h6 + g) | 0;\n    h7 = (h7 + h) | 0;\n  }\n\n  const result = new Uint8Array(32);\n  const rv = new DataView(result.buffer);\n  [h0, h1, h2, h3, h4, h5, h6, h7].forEach((v, i) => {\n    rv.setUint32(i * 4, v, false);\n  });\n  return result;\n}\n\n// ────────── HMAC-SHA256 ──────────\n\nfunction hmacSha256(data: Uint8Array, key: Uint8Array): Uint8Array {\n  const blockSize = 64;\n  const keyBlock = key.length > blockSize ? sha256Bytes(key) : key;\n\n  const paddedKey = new Uint8Array(blockSize);\n  paddedKey.set(keyBlock);\n\n  const ipad = new Uint8Array(blockSize);\n  const opad = new Uint8Array(blockSize);\n  for (let i = 0; i < blockSize; i++) {\n    ipad[i] = paddedKey[i] ^ 0x36;\n    opad[i] = paddedKey[i] ^ 0x5c;\n  }\n\n  const inner = new Uint8Array(blockSize + data.length);\n  inner.set(ipad);\n  inner.set(data, blockSize);\n  const innerHash = sha256Bytes(inner);\n\n  const outer = new Uint8Array(blockSize + 32);\n  outer.set(opad);\n  outer.set(innerHash, blockSize);\n  return sha256Bytes(outer);\n}\n\n// ────────── 导出 API（与 crypto-native.ts 接口一致） ──────────\n\n/** AES-256-CBC 加密（使用 aes-js 库） */\nexport async function encryptAESFallback(\n  plaintext: string,\n  keyHex: string,\n): Promise<string> {\n  if (!plaintext) return plaintext;\n  validateKeyHex(keyHex);\n\n  const iv = generateRandomIV();\n  const key = Array.from(hexToBytes(keyHex));\n  const data = aesjs.padding.pkcs7.pad(\n    Array.from(new TextEncoder().encode(plaintext)),\n  );\n\n  const aesCbc = new aesjs.ModeOfOperation.cbc(key, Array.from(iv));\n  const encrypted = aesCbc.encrypt(data);\n\n  const combined = new Uint8Array(IV_LENGTH + encrypted.length);\n  combined.set(iv, 0);\n  combined.set(encrypted, IV_LENGTH);\n  return btoa(String.fromCharCode(...combined));\n}\n\n/** AES-256-CBC 解密（使用 aes-js 库） */\nexport async function decryptAESFallback(\n  encryptedBase64: string,\n  keyHex: string,\n): Promise<string> {\n  if (!encryptedBase64) return encryptedBase64;\n  validateKeyHex(keyHex);\n\n  const combined = Uint8Array.from(atob(encryptedBase64), (c) =>\n    c.charCodeAt(0),\n  );\n  if (combined.length < IV_LENGTH + 16) {\n    throw new Error('[Crypto-JS] 加密数据长度不足');\n  }\n\n  const iv = Array.from(combined.slice(0, IV_LENGTH));\n  const ciphertext = Array.from(combined.slice(IV_LENGTH));\n  const key = Array.from(hexToBytes(keyHex));\n\n  const aesCbc = new aesjs.ModeOfOperation.cbc(key, iv);\n  const decrypted = aesjs.padding.pkcs7.strip(aesCbc.decrypt(ciphertext));\n  return new TextDecoder().decode(new Uint8Array(decrypted));\n}\n\n/** HMAC-SHA256 签名 */\nexport async function generateSignatureFallback(\n  data: string,\n  keyHex: string,\n): Promise<string> {\n  const key = hexToBytes(keyHex);\n  const dataBytes = new TextEncoder().encode(data);\n  return bytesToHex(hmacSha256(dataBytes, key));\n}\n\n/** 验证 HMAC-SHA256 签名 */\nexport async function verifySignatureFallback(\n  data: string,\n  signature: string,\n  keyHex: string,\n): Promise<boolean> {\n  if (!signature) return false;\n  const expected = await generateSignatureFallback(data, keyHex);\n  if (expected.length !== signature.length) return false;\n  let result = 0;\n  for (let i = 0; i < expected.length; i++) {\n    result |= expected.charCodeAt(i) ^ signature.charCodeAt(i);\n  }\n  return result === 0;\n}\n\n/** SHA-256 哈希 */\nexport async function sha256Fallback(data: string): Promise<string> {\n  const dataBytes = new TextEncoder().encode(data);\n  return bytesToHex(sha256Bytes(dataBytes));\n}\n","/**\n * 加密器工厂\n *\n * 优先使用 Web Crypto API 原生实现，非安全上下文自动切换为纯 JS 实现。\n */\n\nimport {\n  decryptAESFallback,\n  encryptAESFallback,\n  generateSignatureFallback,\n  sha256Fallback,\n  verifySignatureFallback,\n} from './crypto-js-fallback';\nimport {\n  decryptAESNative,\n  encryptAESNative,\n  generateSignatureNative,\n  isWebCryptoAvailable,\n  sha256Native,\n  verifySignatureNative,\n} from './crypto-native';\n\n/** 统一的加密器接口 */\nexport interface UnifiedCryptoProvider {\n  encryptAES(plaintext: string, keyHex: string): Promise<string>;\n  decryptAES(encryptedBase64: string, keyHex: string): Promise<string>;\n  generateSignature(data: string, keyHex: string): Promise<string>;\n  verifySignature(\n    data: string,\n    signature: string,\n    keyHex: string,\n  ): Promise<boolean>;\n  sha256(data: string): Promise<string>;\n}\n\n/** 加密器实现类型 */\nexport type CryptoProviderType = 'native' | 'js-fallback';\n\nlet _provider: UnifiedCryptoProvider | null = null;\nlet _providerType: CryptoProviderType | null = null;\nlet _initialized = false;\n\nfunction createNativeProvider(): UnifiedCryptoProvider {\n  return {\n    encryptAES: encryptAESNative,\n    decryptAES: decryptAESNative,\n    generateSignature: generateSignatureNative,\n    verifySignature: verifySignatureNative,\n    sha256: sha256Native,\n  };\n}\n\nfunction createFallbackProvider(): UnifiedCryptoProvider {\n  return {\n    encryptAES: encryptAESFallback,\n    decryptAES: decryptAESFallback,\n    generateSignature: generateSignatureFallback,\n    verifySignature: verifySignatureFallback,\n    sha256: sha256Fallback,\n  };\n}\n\nfunction initializeProvider(): void {\n  if (_initialized) return;\n\n  if (isWebCryptoAvailable()) {\n    _provider = createNativeProvider();\n    _providerType = 'native';\n  } else {\n    console.error(\n      '[Crypto-Factory] Web Crypto API 不可用（非安全上下文），已切换为纯 JS 实现，建议使用 HTTPS 访问',\n    );\n    _provider = createFallbackProvider();\n    _providerType = 'js-fallback';\n  }\n  _initialized = true;\n}\n\nfunction ensureProvider(): UnifiedCryptoProvider {\n  if (!_initialized) initializeProvider();\n  return _provider!;\n}\n\n// ────────── 公共 API ──────────\n\n/** 获取加密器实例（单例模式） */\nexport function getCryptoProvider(): UnifiedCryptoProvider {\n  return ensureProvider();\n}\n\n/** 获取当前加密器类型 */\nexport function getProviderType(): CryptoProviderType {\n  if (!_initialized) initializeProvider();\n  return _providerType!;\n}\n\n/** 重置加密器（用于测试） */\nexport function resetProvider(): void {\n  _provider = null;\n  _providerType = null;\n  _initialized = false;\n}\n\n/** 是否使用原生加密器 */\nexport function isUsingNativeProvider(): boolean {\n  return getProviderType() === 'native';\n}\n\n// ────────── 便捷导出 ──────────\n\nexport async function encryptAESOptimized(\n  plaintext: string,\n  keyHex: string,\n): Promise<string> {\n  return ensureProvider().encryptAES(plaintext, keyHex);\n}\n\nexport async function decryptAESOptimized(\n  encryptedBase64: string,\n  keyHex: string,\n): Promise<string> {\n  return ensureProvider().decryptAES(encryptedBase64, keyHex);\n}\n\nexport async function generateSignatureOptimized(\n  data: string,\n  keyHex: string,\n): Promise<string> {\n  return ensureProvider().generateSignature(data, keyHex);\n}\n\nexport async function verifySignatureOptimized(\n  data: string,\n  signature: string,\n  keyHex: string,\n): Promise<boolean> {\n  return ensureProvider().verifySignature(data, signature, keyHex);\n}\n\nexport async function sha256Optimized(data: string): Promise<string> {\n  return ensureProvider().sha256(data);\n}\n","/**\n * AES-256-CBC + HMAC-SHA256 加密策略\n *\n * 方案：\n * - AES-256-CBC 对称加密（随机 IV，防重放）\n * - HMAC-SHA256 签名（防篡改）\n * - 固定对称密钥（通过环境变量注入）\n *\n * 运行要求：\n * - 使用 Web Crypto API 原生实现\n *\n * 传输格式：\n * - 请求体：Base64(IV + 密文)\n * - 请求头：X-Encrypted, X-Timestamp, X-Signature\n */\n\nimport {\n  decryptAESOptimized,\n  encryptAESOptimized,\n  generateSignatureOptimized,\n  verifySignatureOptimized,\n} from './crypto-provider-factory';\nimport type { AsyncEncryptionStrategy } from './types';\n\n/** AES-CBC + HMAC 密钥配置 */\nexport interface AESCBCHMACKeys {\n  /** 请求加密密钥（Hex 字符串，64 字符 = 256 位） */\n  requestKeyHex: string;\n  /** 响应解密密钥（Hex 字符串，64 字符 = 256 位） */\n  responseKeyHex: string;\n}\n\n/**\n * AES-256-CBC + HMAC-SHA256 加密策略\n */\nexport class AESCBCHMACStrategy implements AsyncEncryptionStrategy {\n  private readonly requestKeyHex: string;\n  private readonly responseKeyHex: string;\n\n  constructor(keys: AESCBCHMACKeys) {\n    if (!keys.requestKeyHex || keys.requestKeyHex.length !== 64) {\n      throw new Error(\n        '[Crypto AES-CBC-HMAC] Invalid request key: expected 64 hex chars',\n      );\n    }\n    if (!keys.responseKeyHex || keys.responseKeyHex.length !== 64) {\n      throw new Error(\n        '[Crypto AES-CBC-HMAC] Invalid response key: expected 64 hex chars',\n      );\n    }\n    this.requestKeyHex = keys.requestKeyHex;\n    this.responseKeyHex = keys.responseKeyHex;\n  }\n\n  async encrypt(data: unknown, _timestamp: number): Promise<string> {\n    const plaintext = typeof data === 'string' ? data : JSON.stringify(data);\n    return encryptAESOptimized(plaintext, this.requestKeyHex);\n  }\n\n  async decrypt(ciphertext: string, _timestamp: number): Promise<unknown> {\n    const decrypted = await decryptAESOptimized(\n      ciphertext,\n      this.responseKeyHex,\n    );\n    try {\n      return JSON.parse(decrypted);\n    } catch {\n      return decrypted;\n    }\n  }\n\n  /** 生成请求签名 */\n  async generateRequestSignature(\n    encryptedData: string,\n    timestamp: number,\n  ): Promise<string> {\n    const signContent = `${encryptedData}|${timestamp}`;\n    return generateSignatureOptimized(signContent, this.requestKeyHex);\n  }\n\n  /** 验证响应签名 */\n  async verifyResponseSignature(\n    encryptedData: string,\n    signature: string,\n    timestamp: number,\n  ): Promise<boolean> {\n    const signContent = `${encryptedData}|${timestamp}`;\n    return verifySignatureOptimized(\n      signContent,\n      signature,\n      this.responseKeyHex,\n    );\n  }\n\n  /** 生成响应签名（便于测试或对接模拟端） */\n  async generateResponseSignature(\n    encryptedData: string,\n    timestamp: number,\n  ): Promise<string> {\n    const signContent = `${encryptedData}|${timestamp}`;\n    return generateSignatureOptimized(signContent, this.responseKeyHex);\n  }\n}\n","/**\n * 防重放时间戳验证\n */\n\n/**\n * 防重放验证选项\n */\nexport interface ReplayGuardOptions {\n  /** 时间窗口 (秒)，默认 60 */\n  window?: number;\n  /** 允许的前向偏差 (秒)，默认 5 (处理客户端时钟快于服务端的情况) */\n  forwardSkew?: number;\n}\n\n/**\n * 验证时间戳是否在有效窗口内 (防重放攻击)\n *\n * @param timestamp - 要验证的时间戳 (毫秒)\n * @param options - 验证选项\n * @returns 是否有效\n *\n * @example\n * ```ts\n * const ts = Date.now();\n * validateTimestamp(ts) // true\n * validateTimestamp(ts - 120000) // false (超过60秒窗口)\n * validateTimestamp(ts + 10000) // false (超过5秒前向偏差)\n * ```\n */\nexport function validateTimestamp(\n  timestamp: number,\n  options?: ReplayGuardOptions,\n): boolean {\n  const windowMs = (options?.window ?? 60) * 1000;\n  const forwardSkewMs = (options?.forwardSkew ?? 5) * 1000;\n  const now = Date.now();\n\n  // 检查时间戳不在未来太远\n  if (timestamp > now + forwardSkewMs) {\n    return false;\n  }\n\n  // 检查时间戳不在过去太远\n  if (now - timestamp > windowMs) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * 生成当前时间戳 (毫秒)\n *\n * @returns 当前时间戳\n */\nexport function generateTimestamp(): number {\n  return Date.now();\n}\n\n/**\n * 创建防重放守卫\n *\n * 维护一个已用时间戳集合，防止同一时间戳被重复使用。\n *\n * @param options - 选项\n * @returns 守卫实例\n *\n * @example\n * ```ts\n * const guard = createReplayGuard({ window: 120 });\n *\n * guard.validate(timestamp) // true (首次)\n * guard.validate(timestamp) // false (重复)\n * ```\n */\nexport interface ReplayGuardConfig extends ReplayGuardOptions {\n  /** 已使用时间戳集合的清理阈值，超过此数量触发自动清理。默认 1000 */\n  cleanupThreshold?: number;\n}\n\nexport function createReplayGuard(options?: ReplayGuardConfig) {\n  const usedTimestamps = new Set<number>();\n  const windowMs = (options?.window ?? 60) * 1000;\n  const cleanupThreshold = options?.cleanupThreshold ?? 1000;\n\n  function cleanup() {\n    const cutoff = Date.now() - windowMs * 2;\n    for (const ts of usedTimestamps) {\n      if (ts < cutoff) {\n        usedTimestamps.delete(ts);\n      }\n    }\n  }\n\n  return {\n    /**\n     * 验证时间戳有效性并标记为已使用\n     */\n    validate(timestamp: number): boolean {\n      // 时间窗口检查\n      if (!validateTimestamp(timestamp, options)) {\n        return false;\n      }\n\n      // 重复检查\n      if (usedTimestamps.has(timestamp)) {\n        return false;\n      }\n\n      usedTimestamps.add(timestamp);\n\n      // 定期清理\n      if (usedTimestamps.size > cleanupThreshold) {\n        cleanup();\n      }\n\n      return true;\n    },\n\n    /**\n     * 清空已用时间戳记录\n     */\n    reset(): void {\n      usedTimestamps.clear();\n    },\n  };\n}\n","/**\n * 加密策略工厂\n */\n\nimport { AESCBCHMACStrategy } from './aes-cbc-hmac';\nimport { generateTimestamp, validateTimestamp } from './replay-guard';\nimport type {\n  AsyncEncryptionStrategy,\n  EncryptedRequest,\n  EncryptionConfig,\n} from './types';\n\n/**\n * 创建加密策略实例\n *\n * @param config - 加密配置\n * @returns AES-256-CBC + HMAC-SHA256 异步加密策略实例\n *\n * @example\n * ```ts\n * const crypto = createEncryption({\n *   algorithm: 'aes-cbc-hmac',\n *   keys: {\n *     requestKeyHex: '64字符Hex请求密钥',\n *     responseKeyHex: '64字符Hex响应密钥',\n *   },\n * });\n *\n * const encrypted = await crypto.encrypt(data, Date.now());\n * ```\n */\nexport function createEncryption(\n  config: EncryptionConfig,\n): AsyncEncryptionStrategy {\n  if (config.algorithm !== 'aes-cbc-hmac') {\n    throw new Error(\n      `[Crypto] Unsupported algorithm: ${config.algorithm}. Only 'aes-cbc-hmac' is supported.`,\n    );\n  }\n  return new AESCBCHMACStrategy(config.keys);\n}\n\n/**\n * 加密请求数据的便捷函数\n *\n * 将数据加密并生成 HMAC 签名。\n *\n * @param strategy - 加密策略实例\n * @param data - 要加密的请求数据\n * @returns 加密结果 (密文 + 时间戳 + 签名)\n *\n * @example\n * ```ts\n * const crypto = createEncryption({ algorithm: 'aes-cbc-hmac', keys: { ... } });\n * const { encrypted, timestamp, signature } = await encryptRequestData(crypto, requestBody);\n *\n * headers['X-Encrypted'] = 'true';\n * headers['X-Timestamp'] = String(timestamp);\n * headers['X-Signature'] = signature;\n * body = encrypted;\n * ```\n */\nexport async function encryptRequestData(\n  strategy: AsyncEncryptionStrategy,\n  data: unknown,\n): Promise<EncryptedRequest> {\n  const timestamp = generateTimestamp();\n  const encrypted = await strategy.encrypt(data, timestamp);\n\n  let signature: string | undefined;\n  if (strategy instanceof AESCBCHMACStrategy) {\n    signature = await strategy.generateRequestSignature(encrypted, timestamp);\n  }\n\n  return { encrypted, timestamp, signature };\n}\n\n/**\n * 解密响应数据的便捷函数\n *\n * 验证时间戳和签名后解密数据。\n *\n * @param strategy - 加密策略实例\n * @param ciphertext - 密文\n * @param timestamp - 时间戳\n * @param options - 验证选项\n * @returns 解密后的数据\n * @throws 时间戳过期或签名验证失败时抛出错误\n */\nexport async function decryptResponseData(\n  strategy: AsyncEncryptionStrategy,\n  ciphertext: string,\n  timestamp?: number,\n  options?: { replayWindow?: number; forwardSkew?: number; signature?: string },\n): Promise<unknown> {\n  if (timestamp === undefined || timestamp === 0) {\n    throw new Error(\n      '[Crypto] Missing response timestamp, cannot verify replay protection',\n    );\n  }\n\n  const isValid = validateTimestamp(timestamp, {\n    window: options?.replayWindow,\n    forwardSkew: options?.forwardSkew,\n  });\n  if (!isValid) {\n    throw new Error(\n      '[Crypto] Response timestamp expired, possible replay attack',\n    );\n  }\n\n  if (strategy instanceof AESCBCHMACStrategy) {\n    if (!options?.signature) {\n      throw new Error(\n        '[Crypto] Missing response signature, cannot verify response integrity',\n      );\n    }\n\n    const isSignatureValid = await strategy.verifyResponseSignature(\n      ciphertext,\n      options.signature,\n      timestamp,\n    );\n    if (!isSignatureValid) {\n      throw new Error(\n        '[Crypto] Invalid response signature, possible tampering detected',\n      );\n    }\n  }\n\n  return strategy.decrypt(ciphertext, timestamp);\n}\n","/**\n * 路径排除匹配工具\n *\n * 支持 Ant 风格通配符:\n * - `**` 匹配任意层级路径\n * - `*` 匹配单层路径中的任意字符\n */\n\n/** 编译后的正则缓存，避免重复编译 */\nconst regexCache = new Map<string, RegExp>();\n\n/** 缓存最大容量，防止无限增长导致内存泄漏 */\nconst REGEX_CACHE_MAX_SIZE = 200;\n\n/**\n * 将 Ant 风格的路径模式转换为正则表达式（带缓存）\n */\nfunction patternToRegex(pattern: string): RegExp {\n  const cached = regexCache.get(pattern);\n  if (cached) return cached;\n\n  let regex = pattern\n    // 转义正则特殊字符 (除了 *)\n    .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n    // ** 匹配任意层级\n    .replace(/\\*\\*/g, '{{GLOBSTAR}}')\n    // * 匹配单层内任意字符 (不含 /)\n    .replace(/\\*/g, '[^/]*')\n    // 还原 **\n    .replace(/\\{\\{GLOBSTAR\\}\\}/g, '.*');\n\n  if (!regex.startsWith('^')) {\n    regex = `(^|/)${regex}`;\n  }\n\n  const compiled = new RegExp(regex);\n\n  // LRU 式清理：超限时移除最早的一半条目，避免全量清空导致缓存命中率骤降\n  if (regexCache.size >= REGEX_CACHE_MAX_SIZE) {\n    const entriesToRemove = Math.floor(REGEX_CACHE_MAX_SIZE / 2);\n    const keys = regexCache.keys();\n    for (let i = 0; i < entriesToRemove; i++) {\n      const next = keys.next();\n      if (next.done) break;\n      regexCache.delete(next.value);\n    }\n  }\n  regexCache.set(pattern, compiled);\n\n  return compiled;\n}\n\n/**\n * 从 URL 中提取路径部分（去除 query string 和 hash）\n */\nfunction extractPath(url: string): string {\n  if (url.startsWith('http://') || url.startsWith('https://')) {\n    try {\n      return new URL(url).pathname;\n    } catch {\n      // URL 解析失败，使用字符串分割\n    }\n  }\n  return url.split('?')[0].split('#')[0];\n}\n\n/**\n * 检查 URL 路径是否匹配排除模式列表\n *\n * @param url - 请求 URL (完整路径或相对路径)\n * @param patterns - 排除模式列表\n * @returns 是否应该被排除\n *\n * @example\n * ```ts\n * const excludePaths = ['/api/auth/**', '/public/*', '/health'];\n *\n * isExcludedPath('/api/auth/login', excludePaths)        // true\n * isExcludedPath('/api/auth/token/refresh', excludePaths) // true\n * isExcludedPath('/api/users', excludePaths)              // false\n * isExcludedPath('/health', excludePaths)                 // true\n * isExcludedPath('/health-check', excludePaths)           // false (段边界)\n * ```\n */\nexport function isExcludedPath(url: string, patterns: string[]): boolean {\n  if (!url || !patterns?.length) return false;\n\n  const path = extractPath(url);\n\n  return patterns.some((pattern) => {\n    // 精确匹配\n    if (path === pattern) return true;\n\n    // 包含通配符，使用正则匹配\n    if (pattern.includes('*')) {\n      return patternToRegex(pattern).test(path);\n    }\n\n    // 段边界前缀匹配 (防止 /health 匹配 /health-check)\n    if (pattern.endsWith('/')) {\n      return path.startsWith(pattern);\n    }\n    return path.startsWith(`${pattern}/`);\n  });\n}\n"]}