{
  "version": 3,
  "sources": ["../src/aes.ts", "../src/helpers/hex-to-bytes.ts", "../src/constants.ts"],
  "sourcesContent": ["import * as aesJs from \"aes-js\";\nimport {\n  ERROR_AES_IV_LENGTH,\n  ERROR_AES_KEY_LENGTH,\n  IV_LENGTH,\n  KEY_LENGTH,\n} from \"./constants\";\n\nconst { ModeOfOperation } = aesJs;\n\nfunction bytesToAesNumberArray(buf: Uint8Array): number[] {\n  return Array.from(buf);\n}\n\nfunction assertAesLengths(iv: Uint8Array, key: Uint8Array): void {\n  if (iv.length !== IV_LENGTH) {\n    throw new Error(ERROR_AES_IV_LENGTH);\n  }\n  if (key.length !== KEY_LENGTH) {\n    throw new Error(ERROR_AES_KEY_LENGTH);\n  }\n}\n\n/**\n * Encrypts data using AES-256-CBC.\n * @param iv Initialization vector (16 bytes).\n * @param key Encryption key (32 bytes).\n * @param data Plaintext bytes.\n * @returns Ciphertext bytes with PKCS#7 padding applied.\n */\nexport async function aesCbcEncrypt(\n  iv: Uint8Array,\n  key: Uint8Array,\n  data: Uint8Array\n): Promise<Uint8Array> {\n  return aesCbcEncryptSync(iv, key, data);\n}\n\n/**\n * Decrypts data using AES-256-CBC.\n * @param iv Initialization vector (16 bytes).\n * @param key Encryption key (32 bytes).\n * @param data Ciphertext bytes.\n * @returns Decrypted plaintext bytes without PKCS#7 padding.\n */\nexport async function aesCbcDecrypt(\n  iv: Uint8Array,\n  key: Uint8Array,\n  data: Uint8Array\n): Promise<Uint8Array> {\n  return aesCbcDecryptSync(iv, key, data);\n}\n\n/**\n * Encrypts data using AES-256-CBC.\n * @param iv Initialization vector (16 bytes).\n * @param key Encryption key (32 bytes).\n * @param data Plaintext bytes.\n * @returns Ciphertext bytes with PKCS#7 padding applied.\n */\nexport function aesCbcEncryptSync(\n  iv: Uint8Array,\n  key: Uint8Array,\n  data: Uint8Array\n): Uint8Array {\n  assertAesLengths(iv, key);\n  const padded = pkcs7Pad(data, IV_LENGTH);\n  const cbc = new ModeOfOperation.cbc(\n    bytesToAesNumberArray(key),\n    bytesToAesNumberArray(iv)\n  );\n  return new Uint8Array(cbc.encrypt(bytesToAesNumberArray(padded)));\n}\n\n/**\n * Decrypts data using AES-256-CBC.\n * @param iv Initialization vector (16 bytes).\n * @param key Encryption key (32 bytes).\n * @param data Ciphertext bytes.\n * @returns Decrypted plaintext bytes without PKCS#7 padding.\n */\nexport function aesCbcDecryptSync(\n  iv: Uint8Array,\n  key: Uint8Array,\n  data: Uint8Array\n): Uint8Array {\n  assertAesLengths(iv, key);\n  const cbc = new ModeOfOperation.cbc(\n    bytesToAesNumberArray(key),\n    bytesToAesNumberArray(iv)\n  );\n  const decrypted = new Uint8Array(cbc.decrypt(bytesToAesNumberArray(data)));\n  return pkcs7Unpad(decrypted, IV_LENGTH);\n}\n\n/**\n * Applies PKCS#7 padding to a byte array.\n * @param data Input bytes.\n * @param blockSize Cipher block size in bytes.\n * @returns Padded byte array.\n */\nfunction pkcs7Pad(data: Uint8Array, blockSize: number): Uint8Array {\n  const pad = blockSize - (data.length % blockSize);\n  const out = new Uint8Array(data.length + pad);\n  out.set(data);\n  out.fill(pad, data.length);\n  return out;\n}\n\n/**\n * Removes PKCS#7 padding from a byte array.\n * @param data Input bytes with PKCS#7 padding.\n * @returns Unpadded byte array.\n * @throws Error if padding is invalid.\n */\nfunction pkcs7Unpad(data: Uint8Array, blockSize: number): Uint8Array {\n  const padByte =\n    data.length === 0 ? undefined : data[data.length - 1];\n  if (padByte === undefined) {\n    throw new Error(\"PKCS#7: empty data\");\n  }\n  const pad = padByte;\n  if (pad < 1 || pad > blockSize || pad > data.length) {\n    throw new Error(\"PKCS#7: invalid padding\");\n  }\n  for (let i = data.length - pad; i < data.length; i++) {\n    if (data[i] !== pad) {\n      throw new Error(\"PKCS#7: invalid padding\");\n    }\n  }\n  return data.slice(0, data.length - pad);\n}\n", "/**\n * Hex string \u2192 byte values `0..255`. Odd length implies a leading `0` nibble (unlike {@link hexToBuffer}).\n *\n * @param hex Contiguous hex digits (no `0x` stripping).\n * @returns `number[]` of byte values.\n */\nexport function hexToBytes(hex: string): number[] {\n  const clean = hex.length % 2 ? `0${hex}` : hex;\n  const out: number[] = [];\n  for (let i = 0; i < clean.length; i += 2) {\n    out.push(Number.parseInt(clean.slice(i, i + 2), 16));\n  }\n  return out;\n}\n", "import { hexToBytes } from \"./helpers/hex-to-bytes\";\n\nexport const HEX_ENC = \"hex\";\nexport const UTF8_ENC = \"utf8\";\nexport const BINARY_ENC = \"binary\";\n\nexport const ENCRYPT_OP = \"encrypt\";\nexport const DECRYPT_OP = \"decrypt\";\n\nexport const SIGN_OP = \"sign\";\nexport const VERIFY_OP = \"verify\";\n\nexport const LENGTH_0 = 0;\nexport const LENGTH_1 = 1;\nexport const LENGTH_12 = 12;\nexport const LENGTH_16 = 16;\nexport const LENGTH_32 = 32;\nexport const LENGTH_64 = 64;\nexport const LENGTH_128 = 128;\nexport const LENGTH_256 = 256;\nexport const LENGTH_512 = 512;\nexport const LENGTH_1024 = 1024;\n\nexport const AES_LENGTH = LENGTH_256;\nexport const HMAC_LENGTH = LENGTH_256;\n\nexport const AES_BROWSER_ALGO = \"AES-CBC\";\nexport const HMAC_BROWSER_ALGO = `SHA-${AES_LENGTH}`;\nexport const HMAC_BROWSER = \"HMAC\";\n\nexport const SHA256_BROWSER_ALGO = \"SHA-256\";\nexport const SHA512_BROWSER_ALGO = \"SHA-512\";\n\nexport const AES_NODE_ALGO = `aes-${AES_LENGTH}-cbc`;\nexport const HMAC_NODE_ALGO = `sha${HMAC_LENGTH}`;\n\nexport const SHA256_NODE_ALGO = \"sha256\";\nexport const SHA512_NODE_ALGO = \"sha512\";\nexport const RIPEMD160_NODE_ALGO = \"ripemd160\";\n\nexport const PBKDF2_DIGEST_SHA256 = SHA256_NODE_ALGO;\nexport const PBKDF2_DIGEST_SHA512 = SHA512_NODE_ALGO;\n\nexport const PREFIX_LENGTH = LENGTH_1;\nexport const KEY_LENGTH = LENGTH_32;\nexport const IV_LENGTH = LENGTH_16;\nexport const AES_GCM_NONCE_LENGTH = LENGTH_12;\nexport const AES_GCM_ENVELOPE_NONCE_MAX_LENGTH = LENGTH_128;\nexport const AES_GCM_TAG_LENGTH = LENGTH_16;\nexport const MAC_LENGTH = LENGTH_32;\nexport const DECOMPRESSED_LENGTH = LENGTH_64;\n\nexport const PREFIXED_KEY_LENGTH = KEY_LENGTH + PREFIX_LENGTH;\nexport const PREFIXED_DECOMPRESSED_LENGTH = DECOMPRESSED_LENGTH + PREFIX_LENGTH;\n\nexport const ECIES_SERIALIZED_MIN_LENGTH =\n  IV_LENGTH + PREFIXED_KEY_LENGTH + MAC_LENGTH;\n\nexport const MAX_KEY_LENGTH = LENGTH_1024;\nexport const PBKDF2_DEFAULT_ITERATIONS = 210_000;\nexport const MAX_MSG_LENGTH = LENGTH_32;\n\nexport const EMPTY_BUFFER = new Uint8Array(LENGTH_0);\n\nexport const EC_GROUP_ORDER = new Uint8Array(\n  hexToBytes(\n    \"fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\"\n  )\n);\n\nexport const ZERO32 = new Uint8Array(LENGTH_32).fill(LENGTH_0);\n\nexport const ERROR_BAD_MAC = \"Bad MAC\";\nexport const ERROR_BAD_SIGNATURE = \"Bad signature\";\nexport const ERROR_BAD_PRIVATE_KEY = \"Bad private key\";\nexport const ERROR_BAD_PUBLIC_KEY = \"Bad public key\";\nexport const ERROR_ECIES_SERIALIZED_LENGTH =\n  \"ECIES deserialize: buffer shorter than minimum serialized length\";\n\nexport const ERROR_EMPTY_MESSAGE = \"Message should not be empty\";\nexport const ERROR_MESSAGE_TOO_LONG = \"Message is too long\";\n\nexport const ERROR_BAD_EPHEM_PRIVATE_KEY = \"Invalid ephemeral private key\";\n\nexport const ERROR_AES_IV_LENGTH = \"AES-CBC: IV must be 16 bytes\";\nexport const ERROR_AES_KEY_LENGTH = \"AES-CBC: key must be 32 bytes\";\n\nexport const ERROR_AES_GCM_KEY_LENGTH =\n  \"AES-GCM: key must be 16, 24, or 32 bytes\";\nexport const ERROR_AES_GCM_NONCE_LENGTH =\n  \"AES-GCM: nonce must be at least 8 bytes\";\nexport const ERROR_AES_GCM_CIPHERTEXT_LENGTH =\n  \"AES-GCM: ciphertext must be longer than the authentication tag\";\n"],
  "mappings": "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",
  "names": []
}
