{"version":3,"sources":["../src/crypto/backend.node.ts","../src/bigint/big-integer-jsbn.ts","../src/bigint/big-integer-native.ts","../src/bigint/big-integer.ts","../src/crypto/bytes.ts","../src/formats/components.ts","../src/utils/text-utils.ts","../src/formats/openssh.ts","../src/asn1/oids.ts","../src/asn1/tags.ts","../src/asn1/reader.ts","../src/asn1/writer.ts","../src/formats/pem.ts","../src/formats/pkcs1.ts","../src/formats/pkcs8.ts","../src/formats/index.ts","../src/crypto/digest-length.ts","../src/schemes/oaep.ts","../src/schemes/pkcs1.ts","../src/schemes/pss.ts","../src/schemes/index.ts","../src/options.ts","../src/rsa/engine.ts","../src/rsa/key.ts","../src/node-rsa.ts","../src/rsa/native-engine.ts","../src/rsa/native-keygen.ts","../src/rsa/native-signatures.ts","../src/index.node.ts"],"names":["createHash","nodeRandomBytes","_backend","setBigIntegerBackend","getBackend","BigInteger","PRIVATE_OPENING","PRIVATE_CLOSING","PUBLIC_OPENING","PUBLIC_CLOSING","DB","DEFAULT_HASH","filled","nodeConstants","nodePrivateEncrypt","nodePublicEncrypt","nodePublicDecrypt","nodePrivateDecrypt","warnedSmallKey","generateKeyPairSync","bufferToU8","createPrivateKey","createPublicKey","nodeSign","nodeVerify"],"mappings":"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AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAC5E,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAC5E,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAC5E,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAC5E,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,GAAA;AAAA,EAAI,G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","file":"index.node.cjs","sourcesContent":["import { createHash, randomBytes as nodeRandomBytes } from 'node:crypto';\nimport type { CryptoBackend, HashingAlgorithm } from './types.js';\n\n// MD4 lives in OpenSSL's legacy provider, which is not loaded by default in\n// OpenSSL 3 (Node 17+). Probe once at module load to decide if it's usable.\nconst CANDIDATE: readonly HashingAlgorithm[] = [\n  'md4',\n  'md5',\n  'ripemd160',\n  'sha1',\n  'sha224',\n  'sha256',\n  'sha384',\n  'sha512',\n];\n\nconst SUPPORTED: ReadonlySet<HashingAlgorithm> = (() => {\n  const set = new Set<HashingAlgorithm>();\n  for (const alg of CANDIDATE) {\n    try {\n      createHash(alg);\n      set.add(alg);\n    } catch {\n      // Skip: provider not loaded (e.g., MD4 in OpenSSL 3).\n    }\n  }\n  return set;\n})();\n\nfunction bufferToU8(buf: Uint8Array): Uint8Array {\n  return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\nexport const nodeBackend: CryptoBackend = {\n  name: 'node',\n\n  randomBytes(n) {\n    return bufferToU8(nodeRandomBytes(n));\n  },\n\n  digest(alg, data) {\n    if (!SUPPORTED.has(alg)) {\n      throw new Error(`Unsupported hash algorithm: ${alg}`);\n    }\n    const h = createHash(alg);\n    h.update(data);\n    return bufferToU8(h.digest());\n  },\n\n  supportsHash(alg) {\n    return SUPPORTED.has(alg);\n  },\n};\n","/*\n * TypeScript port of Tom Wu's jsbn BigInteger.\n *\n * Original copyright (c) 2003-2009 Tom Wu.\n *\n * This port preserves the original digit representation, function names, and\n * algorithm structure 1-to-1 with the legacy implementation so that all\n * keygen RNG and primality-test paths produce byte-identical results.\n */\n\nimport type { CryptoBackend } from '../crypto/types.js';\n\n// Backend injection for RNG\nlet _backend: CryptoBackend | undefined;\n\nexport function setBigIntegerBackend(backend: CryptoBackend): void {\n  _backend = backend;\n}\n\nfunction getBackend(): CryptoBackend {\n  if (!_backend) {\n    throw new Error(\n      'BigInteger crypto backend not initialized. Did you import from src/index.node.ts or src/index.browser.ts?',\n    );\n  }\n  return _backend;\n}\n\n// Digit-base constants\nconst DB = 28; // bits per digit\nconst DM = (1 << DB) - 1;\nconst DV = 1 << DB;\nconst BI_FP = 52;\nconst FV = 2 ** BI_FP;\nconst F1 = BI_FP - DB;\nconst F2 = 2 * DB - BI_FP;\n\n// Reducer interface (Classic / Montgomery / Barrett / NullExp)\ninterface Reducer {\n  convert(x: BigInteger): BigInteger;\n  revert(x: BigInteger): BigInteger;\n  reduce(x: BigInteger): void;\n  mulTo(x: BigInteger, y: BigInteger, r: BigInteger): void;\n  sqrTo(x: BigInteger, r: BigInteger): void;\n}\n\n// Radix-conversion tables\nconst BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz';\nconst BI_RC: number[] = [];\n{\n  let rr = '0'.charCodeAt(0);\n  for (let vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\n  rr = 'a'.charCodeAt(0);\n  for (let vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n  rr = 'A'.charCodeAt(0);\n  for (let vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n}\n\nfunction int2char(n: number): string {\n  return BI_RM.charAt(n);\n}\n\nfunction intAt(s: string, i: number): number {\n  const c = BI_RC[s.charCodeAt(i)];\n  return c == null ? -1 : c;\n}\n\nfunction nbits(x: number): number {\n  let r = 1;\n  let t: number;\n  if ((t = x >>> 16) !== 0) {\n    x = t;\n    r += 16;\n  }\n  if ((t = x >> 8) !== 0) {\n    x = t;\n    r += 8;\n  }\n  if ((t = x >> 4) !== 0) {\n    x = t;\n    r += 4;\n  }\n  if ((t = x >> 2) !== 0) {\n    x = t;\n    r += 2;\n  }\n  if ((t = x >> 1) !== 0) {\n    r += 1;\n  }\n  return r;\n}\n\nfunction lbit(x: number): number {\n  if (x === 0) return -1;\n  let r = 0;\n  if ((x & 0xffff) === 0) {\n    x >>= 16;\n    r += 16;\n  }\n  if ((x & 0xff) === 0) {\n    x >>= 8;\n    r += 8;\n  }\n  if ((x & 0xf) === 0) {\n    x >>= 4;\n    r += 4;\n  }\n  if ((x & 3) === 0) {\n    x >>= 2;\n    r += 2;\n  }\n  if ((x & 1) === 0) ++r;\n  return r;\n}\n\nfunction cbit(x: number): number {\n  let r = 0;\n  while (x !== 0) {\n    x &= x - 1;\n    ++r;\n  }\n  return r;\n}\n\n// BigInteger class\nexport class BigInteger {\n  /** @internal digit array via numeric index — jsbn-style storage */\n  [n: number]: number;\n  /** @internal */\n  t = 0;\n  /** @internal */\n  s = 0;\n\n  // Mirror legacy `this.DB`/`this.DM`/etc. access patterns\n  /** @internal */\n  readonly DB = DB;\n  /** @internal */\n  readonly DM = DM;\n  /** @internal */\n  readonly DV = DV;\n  /** @internal */\n  readonly FV = FV;\n  /** @internal */\n  readonly F1 = F1;\n  /** @internal */\n  readonly F2 = F2;\n\n  static ZERO: BigInteger;\n  static ONE: BigInteger;\n  /** @internal */\n  static readonly int2char = int2char;\n\n  constructor(\n    a?: number | Uint8Array | number[] | string | null,\n    b?: number | string,\n    unsigned?: boolean,\n  ) {\n    if (a == null) return;\n    if (typeof a === 'number') {\n      this.fromNumber(a, b as number | undefined);\n    } else if (a instanceof Uint8Array) {\n      this.fromBuffer(a);\n    } else if (typeof a === 'string') {\n      this.fromString(a, b as number, unsigned);\n    } else if (Array.isArray(a)) {\n      this.fromByteArray(a, unsigned);\n    }\n  }\n\n  // am3: multiply-accumulate (digit-base 2^28)\n  /** @internal */\n  am(i: number, x: number, w: BigInteger, j: number, c: number, n: number): number {\n    const xl = x & 0x3fff;\n    const xh = x >> 14;\n    while (--n >= 0) {\n      let l = this[i]! & 0x3fff;\n      const h = this[i++]! >> 14;\n      const m = xh * l + h * xl;\n      l = xl * l + ((m & 0x3fff) << 14) + w[j]! + c;\n      c = (l >> 28) + (m >> 14) + xh * h;\n      w[j++] = l & 0xfffffff;\n    }\n    return c;\n  }\n\n  // protected: digit/byte initialisation\n  /** @internal */\n  copyTo(r: BigInteger): void {\n    for (let i = this.t - 1; i >= 0; --i) r[i] = this[i]!;\n    r.t = this.t;\n    r.s = this.s;\n  }\n\n  /** @internal */\n  fromInt(x: number): void {\n    this.t = 1;\n    this.s = x < 0 ? -1 : 0;\n    if (x > 0) this[0] = x;\n    else if (x < -1) this[0] = x + DV;\n    else this.t = 0;\n  }\n\n  /** @internal */\n  fromString(data: string | number[] | Uint8Array, radix?: number, unsigned?: boolean): void {\n    let k: number;\n    switch (radix) {\n      case 2:\n        k = 1;\n        break;\n      case 4:\n        k = 2;\n        break;\n      case 8:\n        k = 3;\n        break;\n      case 16:\n        k = 4;\n        break;\n      case 32:\n        k = 5;\n        break;\n      case 256:\n        k = 8;\n        break;\n      default:\n        this.fromRadix(data as string, radix);\n        return;\n    }\n    this.t = 0;\n    this.s = 0;\n    const dataAny = data as { [n: number]: number; length: number; charAt?(i: number): string };\n    let i = dataAny.length;\n    let mi = false;\n    let sh = 0;\n    while (--i >= 0) {\n      const x = k === 8 ? (dataAny[i] as number) & 0xff : intAt(data as string, i);\n      if (x < 0) {\n        if (dataAny.charAt && dataAny.charAt(i) === '-') mi = true;\n        continue;\n      }\n      mi = false;\n      if (sh === 0) this[this.t++] = x;\n      else if (sh + k > this.DB) {\n        this[this.t - 1] = (this[this.t - 1]! | ((x & ((1 << (this.DB - sh)) - 1)) << sh)) >>> 0;\n        this[this.t++] = x >> (this.DB - sh);\n      } else {\n        this[this.t - 1] = (this[this.t - 1]! | (x << sh)) >>> 0;\n      }\n      sh += k;\n      if (sh >= this.DB) sh -= this.DB;\n    }\n    if (!unsigned && k === 8 && ((dataAny[0] as number) & 0x80) !== 0) {\n      this.s = -1;\n      if (sh > 0)\n        this[this.t - 1] = (this[this.t - 1]! | (((1 << (this.DB - sh)) - 1) << sh)) >>> 0;\n    }\n    this.clamp();\n    if (mi) BigInteger.ZERO.subTo(this, this);\n  }\n\n  /** @internal */\n  fromByteArray(a: number[], unsigned?: boolean): void {\n    this.fromString(a, 256, unsigned);\n  }\n\n  /** @internal */\n  fromBuffer(a: Uint8Array): void {\n    this.fromString(a, 256, true);\n  }\n\n  /** @internal */\n  clamp(): void {\n    const c = this.s & this.DM;\n    while (this.t > 0 && this[this.t - 1] === c) --this.t;\n  }\n\n  // arithmetic on internal digits\n  /** @internal */\n  dlShiftTo(n: number, r: BigInteger): void {\n    let i: number;\n    for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]!;\n    for (i = n - 1; i >= 0; --i) r[i] = 0;\n    r.t = this.t + n;\n    r.s = this.s;\n  }\n\n  /** @internal */\n  drShiftTo(n: number, r: BigInteger): void {\n    for (let i = n; i < this.t; ++i) r[i - n] = this[i]!;\n    r.t = Math.max(this.t - n, 0);\n    r.s = this.s;\n  }\n\n  /** @internal */\n  lShiftTo(n: number, r: BigInteger): void {\n    const bs = n % this.DB;\n    const cbs = this.DB - bs;\n    const bm = (1 << cbs) - 1;\n    const ds = Math.floor(n / this.DB);\n    let c = (this.s << bs) & this.DM;\n    let i: number;\n    for (i = this.t - 1; i >= 0; --i) {\n      r[i + ds + 1] = (this[i]! >> cbs) | c;\n      c = (this[i]! & bm) << bs;\n    }\n    for (i = ds - 1; i >= 0; --i) r[i] = 0;\n    r[ds] = c;\n    r.t = this.t + ds + 1;\n    r.s = this.s;\n    r.clamp();\n  }\n\n  /** @internal */\n  rShiftTo(n: number, r: BigInteger): void {\n    r.s = this.s;\n    const ds = Math.floor(n / this.DB);\n    if (ds >= this.t) {\n      r.t = 0;\n      return;\n    }\n    const bs = n % this.DB;\n    const cbs = this.DB - bs;\n    const bm = (1 << bs) - 1;\n    r[0] = this[ds]! >> bs;\n    for (let i = ds + 1; i < this.t; ++i) {\n      r[i - ds - 1] = (r[i - ds - 1] ?? 0) | ((this[i]! & bm) << cbs);\n      r[i - ds] = this[i]! >> bs;\n    }\n    if (bs > 0) r[this.t - ds - 1] = (r[this.t - ds - 1] ?? 0) | ((this.s & bm) << cbs);\n    r.t = this.t - ds;\n    r.clamp();\n  }\n\n  /** @internal */\n  subTo(a: BigInteger, r: BigInteger): void {\n    let i = 0;\n    let c = 0;\n    const m = Math.min(a.t, this.t);\n    while (i < m) {\n      c += this[i]! - a[i]!;\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n    if (a.t < this.t) {\n      c -= a.s;\n      while (i < this.t) {\n        c += this[i]!;\n        r[i++] = c & this.DM;\n        c >>= this.DB;\n      }\n      c += this.s;\n    } else {\n      c += this.s;\n      while (i < a.t) {\n        c -= a[i]!;\n        r[i++] = c & this.DM;\n        c >>= this.DB;\n      }\n      c -= a.s;\n    }\n    r.s = c < 0 ? -1 : 0;\n    if (c < -1) r[i++] = this.DV + c;\n    else if (c > 0) r[i++] = c;\n    r.t = i;\n    r.clamp();\n  }\n\n  /** @internal */\n  multiplyTo(a: BigInteger, r: BigInteger): void {\n    const x = this.abs();\n    const y = a.abs();\n    let i = x.t;\n    r.t = i + y.t;\n    while (--i >= 0) r[i] = 0;\n    for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i]!, r, i, 0, x.t);\n    r.s = 0;\n    r.clamp();\n    if (this.s !== a.s) BigInteger.ZERO.subTo(r, r);\n  }\n\n  /** @internal */\n  squareTo(r: BigInteger): void {\n    const x = this.abs();\n    let i = (r.t = 2 * x.t);\n    while (--i >= 0) r[i] = 0;\n    for (i = 0; i < x.t - 1; ++i) {\n      const c = x.am(i, x[i]!, r, 2 * i, 0, 1);\n      if (\n        (r[i + x.t] = (r[i + x.t] ?? 0) + x.am(i + 1, 2 * x[i]!, r, 2 * i + 1, c, x.t - i - 1)) >=\n        x.DV\n      ) {\n        r[i + x.t] = r[i + x.t]! - x.DV;\n        r[i + x.t + 1] = 1;\n      }\n    }\n    if (r.t > 0) r[r.t - 1] = (r[r.t - 1] ?? 0) + x.am(i, x[i]!, r, 2 * i, 0, 1);\n    r.s = 0;\n    r.clamp();\n  }\n\n  /** @internal */\n  divRemTo(m: BigInteger, q: BigInteger | null, r: BigInteger | null): void {\n    const pm = m.abs();\n    if (pm.t <= 0) return;\n    const pt = this.abs();\n    if (pt.t < pm.t) {\n      if (q != null) q.fromInt(0);\n      if (r != null) this.copyTo(r);\n      return;\n    }\n    if (r == null) r = nbi();\n    const y = nbi();\n    const ts = this.s;\n    const ms = m.s;\n    const nsh = this.DB - nbits(pm[pm.t - 1]!);\n    if (nsh > 0) {\n      pm.lShiftTo(nsh, y);\n      pt.lShiftTo(nsh, r);\n    } else {\n      pm.copyTo(y);\n      pt.copyTo(r);\n    }\n    const ys = y.t;\n    const y0 = y[ys - 1]!;\n    if (y0 === 0) return;\n    const yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2]! >> this.F2 : 0);\n    const d1 = this.FV / yt;\n    const d2 = (1 << this.F1) / yt;\n    const e = 1 << this.F2;\n    let i = r.t;\n    let j = i - ys;\n    const t = q == null ? nbi() : q;\n    y.dlShiftTo(j, t);\n    if (r.compareTo(t) >= 0) {\n      r[r.t++] = 1;\n      r.subTo(t, r);\n    }\n    BigInteger.ONE.dlShiftTo(ys, t);\n    t.subTo(y, y);\n    while (y.t < ys) y[y.t++] = 0;\n    while (--j >= 0) {\n      let qd = r[--i]! === y0 ? this.DM : Math.floor(r[i]! * d1 + (r[i - 1]! + e) * d2);\n      if ((r[i] = r[i]! + y.am(0, qd, r, j, 0, ys)) < qd) {\n        y.dlShiftTo(j, t);\n        r.subTo(t, r);\n        while (r[i]! < --qd) r.subTo(t, r);\n      }\n    }\n    if (q != null) {\n      r.drShiftTo(ys, q);\n      if (ts !== ms) BigInteger.ZERO.subTo(q, q);\n    }\n    r.t = ys;\n    r.clamp();\n    if (nsh > 0) r.rShiftTo(nsh, r);\n    if (ts < 0) BigInteger.ZERO.subTo(r, r);\n  }\n\n  /** @internal */\n  invDigit(): number {\n    if (this.t < 1) return 0;\n    const x = this[0]!;\n    if ((x & 1) === 0) return 0;\n    let y = x & 3;\n    y = (y * (2 - (x & 0xf) * y)) & 0xf;\n    y = (y * (2 - (x & 0xff) * y)) & 0xff;\n    y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;\n    y = (y * (2 - ((x * y) % this.DV))) % this.DV;\n    return y > 0 ? this.DV - y : -y;\n  }\n\n  isEven(): boolean {\n    return ((this.t > 0 ? this[0]! & 1 : this.s) & 1) === 0;\n  }\n\n  /** @internal */\n  exp(e: number, z: Reducer): BigInteger {\n    if (e > 0xffffffff || e < 1) return BigInteger.ONE;\n    let r = nbi();\n    let r2 = nbi();\n    const g = z.convert(this);\n    let i = nbits(e) - 1;\n    g.copyTo(r);\n    while (--i >= 0) {\n      z.sqrTo(r, r2);\n      if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);\n      else {\n        const tmp = r;\n        r = r2;\n        r2 = tmp;\n      }\n    }\n    return z.revert(r);\n  }\n\n  // public arithmetic & comparisons\n  toString(b?: number): string {\n    if (this.s < 0) return `-${this.negate().toString(b)}`;\n    let k: number;\n    if (b === 16) k = 4;\n    else if (b === 8) k = 3;\n    else if (b === 2) k = 1;\n    else if (b === 32) k = 5;\n    else if (b === 4) k = 2;\n    else return this.toRadix(b);\n    const km = (1 << k) - 1;\n    let d: number;\n    let m = false;\n    let r = '';\n    let i = this.t;\n    let p = this.DB - ((i * this.DB) % k);\n    if (i-- > 0) {\n      if (p < this.DB && (d = this[i]! >> p) > 0) {\n        m = true;\n        r = int2char(d);\n      }\n      while (i >= 0) {\n        if (p < k) {\n          d = (this[i]! & ((1 << p) - 1)) << (k - p);\n          d |= this[--i]! >> (p += this.DB - k);\n        } else {\n          d = (this[i]! >> (p -= k)) & km;\n          if (p <= 0) {\n            p += this.DB;\n            --i;\n          }\n        }\n        if (d > 0) m = true;\n        if (m) r += int2char(d);\n      }\n    }\n    return m ? r : '0';\n  }\n\n  /** @internal */\n  negate(): BigInteger {\n    const r = nbi();\n    BigInteger.ZERO.subTo(this, r);\n    return r;\n  }\n\n  abs(): BigInteger {\n    return this.s < 0 ? this.negate() : this;\n  }\n\n  compareTo(a: BigInteger): number {\n    let r = this.s - a.s;\n    if (r !== 0) return r;\n    let i = this.t;\n    r = i - a.t;\n    if (r !== 0) return this.s < 0 ? -r : r;\n    while (--i >= 0) if ((r = this[i]! - a[i]!) !== 0) return r;\n    return 0;\n  }\n\n  bitLength(): number {\n    if (this.t <= 0) return 0;\n    return this.DB * (this.t - 1) + nbits(this[this.t - 1]! ^ (this.s & this.DM));\n  }\n\n  mod(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.abs().divRemTo(a, null, r);\n    if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n    return r;\n  }\n\n  modPowInt(e: number, m: BigInteger): BigInteger {\n    const z: Reducer = e < 256 || m.isEven() ? new Classic(m) : new Montgomery(m);\n    return this.exp(e, z);\n  }\n\n  // extended functions\n  /** @internal */\n  clone(): BigInteger {\n    const r = nbi();\n    this.copyTo(r);\n    return r;\n  }\n\n  /** @internal */\n  intValue(): number {\n    if (this.s < 0) {\n      if (this.t === 1) return this[0]! - this.DV;\n      if (this.t === 0) return -1;\n    } else if (this.t === 1) return this[0]!;\n    else if (this.t === 0) return 0;\n    return ((this[1]! & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]!;\n  }\n\n  /** @internal */\n  byteValue(): number {\n    return this.t === 0 ? this.s : (this[0]! << 24) >> 24;\n  }\n\n  /** @internal */\n  shortValue(): number {\n    return this.t === 0 ? this.s : (this[0]! << 16) >> 16;\n  }\n\n  /** @internal */\n  chunkSize(r: number): number {\n    return Math.floor((Math.LN2 * this.DB) / Math.log(r));\n  }\n\n  signum(): number {\n    if (this.s < 0) return -1;\n    if (this.t <= 0 || (this.t === 1 && this[0]! <= 0)) return 0;\n    return 1;\n  }\n\n  /** @internal */\n  toRadix(b?: number): string {\n    const base = b ?? 10;\n    if (this.signum() === 0 || base < 2 || base > 36) return '0';\n    const cs = this.chunkSize(base);\n    const a = base ** cs;\n    const d = nbv(a);\n    const y = nbi();\n    const z = nbi();\n    let r = '';\n    this.divRemTo(d, y, z);\n    while (y.signum() > 0) {\n      r = (a + z.intValue()).toString(base).slice(1) + r;\n      y.divRemTo(d, y, z);\n    }\n    return z.intValue().toString(base) + r;\n  }\n\n  /** @internal */\n  fromRadix(s: string, b?: number): void {\n    this.fromInt(0);\n    const base = b ?? 10;\n    const cs = this.chunkSize(base);\n    const d = base ** cs;\n    let mi = false;\n    let j = 0;\n    let w = 0;\n    for (let i = 0; i < s.length; ++i) {\n      const x = intAt(s, i);\n      if (x < 0) {\n        if (s.charAt(i) === '-' && this.signum() === 0) mi = true;\n        continue;\n      }\n      w = base * w + x;\n      if (++j >= cs) {\n        this.dMultiply(d);\n        this.dAddOffset(w, 0);\n        j = 0;\n        w = 0;\n      }\n    }\n    if (j > 0) {\n      this.dMultiply(base ** j);\n      this.dAddOffset(w, 0);\n    }\n    if (mi) BigInteger.ZERO.subTo(this, this);\n  }\n\n  /** @internal */\n  fromNumber(a: number, b?: number): void {\n    if (typeof b === 'number') {\n      // (bits, certainty) → generate probable prime\n      if (a < 2) this.fromInt(1);\n      else {\n        this.fromNumber(a);\n        if (!this.testBit(a - 1)) {\n          this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\n        }\n        if (this.isEven()) this.dAddOffset(1, 0);\n        while (!this.isProbablePrime(b)) {\n          this.dAddOffset(2, 0);\n          if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n        }\n      }\n    } else {\n      // (bits) → random a-bit integer\n      const x = getBackend().randomBytes((a >> 3) + 1);\n      const t = a & 7;\n      const bytes = new Uint8Array(x);\n      if (t > 0) bytes[0] = bytes[0]! & ((1 << t) - 1);\n      else bytes[0] = 0;\n      this.fromByteArray(Array.from(bytes));\n    }\n  }\n\n  /** @internal */\n  toByteArray(): number[] {\n    let i = this.t;\n    const r: number[] = [];\n    r[0] = this.s;\n    let p = this.DB - ((i * this.DB) % 8);\n    let d: number;\n    let k = 0;\n    if (i-- > 0) {\n      if (p < this.DB && (d = this[i]! >> p) !== (this.s & this.DM) >> p) {\n        r[k++] = d | (this.s << (this.DB - p));\n      }\n      while (i >= 0) {\n        if (p < 8) {\n          d = (this[i]! & ((1 << p) - 1)) << (8 - p);\n          d |= this[--i]! >> (p += this.DB - 8);\n        } else {\n          d = (this[i]! >> (p -= 8)) & 0xff;\n          if (p <= 0) {\n            p += this.DB;\n            --i;\n          }\n        }\n        if ((d & 0x80) !== 0) d |= -256;\n        if (k === 0 && (this.s & 0x80) !== (d & 0x80)) ++k;\n        if (k > 0 || d !== this.s) r[k++] = d;\n      }\n    }\n    return r;\n  }\n\n  /**\n   * Return a Uint8Array of this integer in big-endian unsigned form.\n   *\n   * - `trimOrSize === true`: drop a leading 0x00 sign byte if present.\n   * - `trimOrSize` is a positive integer: left-pad or trim leading zeros to\n   *   produce exactly `trimOrSize` bytes. Returns null if trimming would\n   *   discard a non-zero byte (i.e., the value doesn't fit).\n   * - Otherwise: return the raw two's-complement byte array with possible\n   *   leading 0x00 sign byte.\n   */\n  toBuffer(trimOrSize?: boolean | number): Uint8Array | null {\n    let res = Uint8Array.from(this.toByteArray().map((b) => b & 0xff));\n    if (trimOrSize === true && res.length > 0 && res[0] === 0) {\n      res = res.subarray(1);\n    } else if (typeof trimOrSize === 'number') {\n      if (res.length > trimOrSize) {\n        const excess = res.length - trimOrSize;\n        for (let i = 0; i < excess; i++) {\n          if (res[i] !== 0) return null;\n        }\n        return res.subarray(excess).slice();\n      }\n      if (res.length < trimOrSize) {\n        const padded = new Uint8Array(trimOrSize);\n        padded.set(res, trimOrSize - res.length);\n        return padded;\n      }\n    }\n    return res.slice();\n  }\n\n  /** @internal */\n  equals(a: BigInteger): boolean {\n    return this.compareTo(a) === 0;\n  }\n\n  /** @internal */\n  min(a: BigInteger): BigInteger {\n    return this.compareTo(a) < 0 ? this : a;\n  }\n\n  /** @internal */\n  max(a: BigInteger): BigInteger {\n    return this.compareTo(a) > 0 ? this : a;\n  }\n\n  /** @internal */\n  bitwiseTo(a: BigInteger, op: (x: number, y: number) => number, r: BigInteger): void {\n    let i: number;\n    let f: number;\n    const m = Math.min(a.t, this.t);\n    for (i = 0; i < m; ++i) r[i] = op(this[i]!, a[i]!);\n    if (a.t < this.t) {\n      f = a.s & this.DM;\n      for (i = m; i < this.t; ++i) r[i] = op(this[i]!, f);\n      r.t = this.t;\n    } else {\n      f = this.s & this.DM;\n      for (i = m; i < a.t; ++i) r[i] = op(f, a[i]!);\n      r.t = a.t;\n    }\n    r.s = op(this.s, a.s);\n    r.clamp();\n  }\n\n  /** @internal */\n  and(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.bitwiseTo(a, op_and, r);\n    return r;\n  }\n  /** @internal */\n  or(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.bitwiseTo(a, op_or, r);\n    return r;\n  }\n  /** @internal */\n  xor(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.bitwiseTo(a, op_xor, r);\n    return r;\n  }\n  /** @internal */\n  andNot(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.bitwiseTo(a, op_andnot, r);\n    return r;\n  }\n  /** @internal */\n  not(): BigInteger {\n    const r = nbi();\n    for (let i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]!;\n    r.t = this.t;\n    r.s = ~this.s;\n    return r;\n  }\n\n  shiftLeft(n: number): BigInteger {\n    const r = nbi();\n    if (n < 0) this.rShiftTo(-n, r);\n    else this.lShiftTo(n, r);\n    return r;\n  }\n\n  shiftRight(n: number): BigInteger {\n    const r = nbi();\n    if (n < 0) this.lShiftTo(-n, r);\n    else this.rShiftTo(n, r);\n    return r;\n  }\n\n  /** @internal */\n  getLowestSetBit(): number {\n    for (let i = 0; i < this.t; ++i) if (this[i] !== 0) return i * this.DB + lbit(this[i]!);\n    if (this.s < 0) return this.t * this.DB;\n    return -1;\n  }\n\n  /** @internal */\n  bitCount(): number {\n    let r = 0;\n    const x = this.s & this.DM;\n    for (let i = 0; i < this.t; ++i) r += cbit(this[i]! ^ x);\n    return r;\n  }\n\n  testBit(n: number): boolean {\n    const j = Math.floor(n / this.DB);\n    if (j >= this.t) return this.s !== 0;\n    return (this[j]! & (1 << (n % this.DB))) !== 0;\n  }\n\n  /** @internal */\n  changeBit(n: number, op: (x: number, y: number) => number): BigInteger {\n    const r = BigInteger.ONE.shiftLeft(n);\n    this.bitwiseTo(r, op, r);\n    return r;\n  }\n  /** @internal */\n  setBit(n: number): BigInteger {\n    return this.changeBit(n, op_or);\n  }\n  /** @internal */\n  clearBit(n: number): BigInteger {\n    return this.changeBit(n, op_andnot);\n  }\n  /** @internal */\n  flipBit(n: number): BigInteger {\n    return this.changeBit(n, op_xor);\n  }\n\n  /** @internal */\n  addTo(a: BigInteger, r: BigInteger): void {\n    let i = 0;\n    let c = 0;\n    const m = Math.min(a.t, this.t);\n    while (i < m) {\n      c += this[i]! + a[i]!;\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n    if (a.t < this.t) {\n      c += a.s;\n      while (i < this.t) {\n        c += this[i]!;\n        r[i++] = c & this.DM;\n        c >>= this.DB;\n      }\n      c += this.s;\n    } else {\n      c += this.s;\n      while (i < a.t) {\n        c += a[i]!;\n        r[i++] = c & this.DM;\n        c >>= this.DB;\n      }\n      c += a.s;\n    }\n    r.s = c < 0 ? -1 : 0;\n    if (c > 0) r[i++] = c;\n    else if (c < -1) r[i++] = this.DV + c;\n    r.t = i;\n    r.clamp();\n  }\n\n  add(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.addTo(a, r);\n    return r;\n  }\n  subtract(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.subTo(a, r);\n    return r;\n  }\n  multiply(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.multiplyTo(a, r);\n    return r;\n  }\n  square(): BigInteger {\n    const r = nbi();\n    this.squareTo(r);\n    return r;\n  }\n  /** @internal */\n  divide(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.divRemTo(a, r, null);\n    return r;\n  }\n  /** @internal */\n  remainder(a: BigInteger): BigInteger {\n    const r = nbi();\n    this.divRemTo(a, null, r);\n    return r;\n  }\n  divideAndRemainder(a: BigInteger): [BigInteger, BigInteger] {\n    const q = nbi();\n    const r = nbi();\n    this.divRemTo(a, q, r);\n    return [q, r];\n  }\n\n  /** @internal */\n  dMultiply(n: number): void {\n    this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n    ++this.t;\n    this.clamp();\n  }\n\n  /** @internal */\n  dAddOffset(n: number, w: number): void {\n    if (n === 0) return;\n    while (this.t <= w) this[this.t++] = 0;\n    this[w] = this[w]! + n;\n    while (this[w]! >= this.DV) {\n      this[w] = this[w]! - this.DV;\n      if (++w >= this.t) this[this.t++] = 0;\n      this[w] = (this[w] ?? 0) + 1;\n    }\n  }\n\n  /** @internal */\n  pow(e: number): BigInteger {\n    return this.exp(e, new NullExp());\n  }\n\n  /** @internal */\n  multiplyLowerTo(a: BigInteger, n: number, r: BigInteger): void {\n    let i = Math.min(this.t + a.t, n);\n    r.s = 0;\n    r.t = i;\n    while (i > 0) r[--i] = 0;\n    let j: number;\n    for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i]!, r, i, 0, this.t);\n    for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i]!, r, i, 0, n - i);\n    r.clamp();\n  }\n\n  /** @internal */\n  multiplyUpperTo(a: BigInteger, n: number, r: BigInteger): void {\n    --n;\n    let i = (r.t = this.t + a.t - n);\n    r.s = 0;\n    while (--i >= 0) r[i] = 0;\n    for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n      r[this.t + i - n] = this.am(n - i, a[i]!, r, 0, 0, this.t + i - n);\n    }\n    r.clamp();\n    r.drShiftTo(1, r);\n  }\n\n  modPow(e: BigInteger, m: BigInteger): BigInteger {\n    let i = e.bitLength();\n    let k: number;\n    let r = nbv(1);\n    let z: Reducer;\n    if (i <= 0) return r;\n    if (i < 18) k = 1;\n    else if (i < 48) k = 3;\n    else if (i < 144) k = 4;\n    else if (i < 768) k = 5;\n    else k = 6;\n    if (i < 8) z = new Classic(m);\n    else if (m.isEven()) z = new Barrett(m);\n    else z = new Montgomery(m);\n\n    const g: BigInteger[] = [];\n    let n = 3;\n    const k1 = k - 1;\n    const km = (1 << k) - 1;\n    g[1] = z.convert(this);\n    if (k > 1) {\n      const g2 = nbi();\n      z.sqrTo(g[1]!, g2);\n      while (n <= km) {\n        g[n] = nbi();\n        z.mulTo(g2, g[n - 2]!, g[n]!);\n        n += 2;\n      }\n    }\n\n    let j = e.t - 1;\n    let w: number;\n    let is1 = true;\n    let r2 = nbi();\n    let t: BigInteger;\n    i = nbits(e[j]!) - 1;\n    while (j >= 0) {\n      if (i >= k1) w = (e[j]! >> (i - k1)) & km;\n      else {\n        w = (e[j]! & ((1 << (i + 1)) - 1)) << (k1 - i);\n        if (j > 0) w |= e[j - 1]! >> (this.DB + i - k1);\n      }\n      n = k;\n      while ((w & 1) === 0) {\n        w >>= 1;\n        --n;\n      }\n      if ((i -= n) < 0) {\n        i += this.DB;\n        --j;\n      }\n      if (is1) {\n        g[w]!.copyTo(r);\n        is1 = false;\n      } else {\n        while (n > 1) {\n          z.sqrTo(r, r2);\n          z.sqrTo(r2, r);\n          n -= 2;\n        }\n        if (n > 0) z.sqrTo(r, r2);\n        else {\n          t = r;\n          r = r2;\n          r2 = t;\n        }\n        z.mulTo(r2, g[w]!, r);\n      }\n      while (j >= 0 && (e[j]! & (1 << i)) === 0) {\n        z.sqrTo(r, r2);\n        t = r;\n        r = r2;\n        r2 = t;\n        if (--i < 0) {\n          i = this.DB - 1;\n          --j;\n        }\n      }\n    }\n    return z.revert(r);\n  }\n\n  gcd(a: BigInteger): BigInteger {\n    let x = this.s < 0 ? this.negate() : this.clone();\n    let y = a.s < 0 ? a.negate() : a.clone();\n    if (x.compareTo(y) < 0) {\n      [x, y] = [y, x];\n    }\n    let i = x.getLowestSetBit();\n    let g = y.getLowestSetBit();\n    if (g < 0) return x;\n    if (i < g) g = i;\n    if (g > 0) {\n      x.rShiftTo(g, x);\n      y.rShiftTo(g, y);\n    }\n    while (x.signum() > 0) {\n      if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x);\n      if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y);\n      if (x.compareTo(y) >= 0) {\n        x.subTo(y, x);\n        x.rShiftTo(1, x);\n      } else {\n        y.subTo(x, y);\n        y.rShiftTo(1, y);\n      }\n    }\n    if (g > 0) y.lShiftTo(g, y);\n    return y;\n  }\n\n  /** @internal */\n  modInt(n: number): number {\n    if (n <= 0) return 0;\n    const d = this.DV % n;\n    let r = this.s < 0 ? n - 1 : 0;\n    if (this.t > 0) {\n      if (d === 0) r = this[0]! % n;\n      else for (let i = this.t - 1; i >= 0; --i) r = (d * r + this[i]!) % n;\n    }\n    return r;\n  }\n\n  modInverse(m: BigInteger): BigInteger {\n    const ac = m.isEven();\n    if ((this.isEven() && ac) || m.signum() === 0) return BigInteger.ZERO;\n    const u = m.clone();\n    const v = this.clone();\n    const a = nbv(1);\n    const b = nbv(0);\n    const c = nbv(0);\n    const d = nbv(1);\n    while (u.signum() !== 0) {\n      while (u.isEven()) {\n        u.rShiftTo(1, u);\n        if (ac) {\n          if (!a.isEven() || !b.isEven()) {\n            a.addTo(this, a);\n            b.subTo(m, b);\n          }\n          a.rShiftTo(1, a);\n        } else if (!b.isEven()) b.subTo(m, b);\n        b.rShiftTo(1, b);\n      }\n      while (v.isEven()) {\n        v.rShiftTo(1, v);\n        if (ac) {\n          if (!c.isEven() || !d.isEven()) {\n            c.addTo(this, c);\n            d.subTo(m, d);\n          }\n          c.rShiftTo(1, c);\n        } else if (!d.isEven()) d.subTo(m, d);\n        d.rShiftTo(1, d);\n      }\n      if (u.compareTo(v) >= 0) {\n        u.subTo(v, u);\n        if (ac) a.subTo(c, a);\n        b.subTo(d, b);\n      } else {\n        v.subTo(u, v);\n        if (ac) c.subTo(a, c);\n        d.subTo(b, d);\n      }\n    }\n    if (v.compareTo(BigInteger.ONE) !== 0) return BigInteger.ZERO;\n    if (d.compareTo(m) >= 0) return d.subtract(m);\n    // Normalize sign — extended Euclidean can leave d in (-m, m), or\n    // occasionally further negative; the legacy jsbn applies +m up to twice.\n    if (d.signum() < 0) d.addTo(m, d);\n    else return d;\n    if (d.signum() < 0) return d.add(m);\n    return d;\n  }\n\n  isProbablePrime(t: number): boolean {\n    let i: number;\n    const x = this.abs();\n    if (x.t === 1 && x[0]! <= lowprimes[lowprimes.length - 1]!) {\n      for (i = 0; i < lowprimes.length; ++i) if (x[0] === lowprimes[i]) return true;\n      return false;\n    }\n    if (x.isEven()) return false;\n    i = 1;\n    while (i < lowprimes.length) {\n      let m = lowprimes[i]!;\n      let j = i + 1;\n      while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]!;\n      m = x.modInt(m);\n      while (i < j) if (m % lowprimes[i++]! === 0) return false;\n    }\n    return x.millerRabin(t);\n  }\n\n  /** @internal */\n  millerRabin(t: number): boolean {\n    const n1 = this.subtract(BigInteger.ONE);\n    const k = n1.getLowestSetBit();\n    if (k <= 0) return false;\n    const r = n1.shiftRight(k);\n    // Witnesses must come from a CSPRNG over the full [2, n-2] range — not\n    // a small fixed table sampled with Math.random() — or an adversary can\n    // construct pseudoprimes tuned to the specific witnesses we'll pick.\n    // The caller's round count is honoured directly; see FIPS 186-4 Table\n    // C.3 for the minimums (40/28/16 rounds at 1024/1536/≥2048 bits).\n    const two = nbv(2);\n    const nMinus3 = n1.subtract(two); // n - 3 = range size for [2, n-2]\n    const byteLen = ((this.bitLength() + 7) >> 3) + 1; // +1 byte to keep modulo bias < 2^-8\n    for (let i = 0; i < t; ++i) {\n      const rb = getBackend().randomBytes(byteLen);\n      const a = new BigInteger(rb).mod(nMinus3).add(two);\n      let y = a.modPow(r, this);\n      if (y.compareTo(BigInteger.ONE) !== 0 && y.compareTo(n1) !== 0) {\n        let j = 1;\n        while (j++ < k && y.compareTo(n1) !== 0) {\n          y = y.modPowInt(2, this);\n          if (y.compareTo(BigInteger.ONE) === 0) return false;\n        }\n        if (y.compareTo(n1) !== 0) return false;\n      }\n    }\n    return true;\n  }\n}\n\n// helpers and reducers\nfunction nbi(): BigInteger {\n  return new BigInteger(null);\n}\n\nfunction nbv(i: number): BigInteger {\n  const r = nbi();\n  r.fromInt(i);\n  return r;\n}\n\nfunction op_and(x: number, y: number): number {\n  return x & y;\n}\nfunction op_or(x: number, y: number): number {\n  return x | y;\n}\nfunction op_xor(x: number, y: number): number {\n  return x ^ y;\n}\nfunction op_andnot(x: number, y: number): number {\n  return x & ~y;\n}\n\nclass Classic implements Reducer {\n  constructor(private readonly m: BigInteger) {}\n  convert(x: BigInteger): BigInteger {\n    if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n    return x;\n  }\n  revert(x: BigInteger): BigInteger {\n    return x;\n  }\n  reduce(x: BigInteger): void {\n    x.divRemTo(this.m, null, x);\n  }\n  mulTo(x: BigInteger, y: BigInteger, r: BigInteger): void {\n    x.multiplyTo(y, r);\n    this.reduce(r);\n  }\n  sqrTo(x: BigInteger, r: BigInteger): void {\n    x.squareTo(r);\n    this.reduce(r);\n  }\n}\n\nclass Montgomery implements Reducer {\n  m: BigInteger;\n  mp: number;\n  mpl: number;\n  mph: number;\n  um: number;\n  mt2: number;\n  constructor(m: BigInteger) {\n    this.m = m;\n    this.mp = m.invDigit();\n    this.mpl = this.mp & 0x7fff;\n    this.mph = this.mp >> 15;\n    this.um = (1 << (m.DB - 15)) - 1;\n    this.mt2 = 2 * m.t;\n  }\n  convert(x: BigInteger): BigInteger {\n    const r = nbi();\n    x.abs().dlShiftTo(this.m.t, r);\n    r.divRemTo(this.m, null, r);\n    if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n    return r;\n  }\n  revert(x: BigInteger): BigInteger {\n    const r = nbi();\n    x.copyTo(r);\n    this.reduce(r);\n    return r;\n  }\n  reduce(x: BigInteger): void {\n    while (x.t <= this.mt2) x[x.t++] = 0;\n    for (let i = 0; i < this.m.t; ++i) {\n      let j = x[i]! & 0x7fff;\n      const u0 =\n        (j * this.mpl + (((j * this.mph + (x[i]! >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n      j = i + this.m.t;\n      x[j] = (x[j] ?? 0) + this.m.am(0, u0, x, i, 0, this.m.t);\n      while (x[j]! >= x.DV) {\n        x[j] = x[j]! - x.DV;\n        x[++j] = (x[j] ?? 0) + 1;\n      }\n    }\n    x.clamp();\n    x.drShiftTo(this.m.t, x);\n    if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n  }\n  mulTo(x: BigInteger, y: BigInteger, r: BigInteger): void {\n    x.multiplyTo(y, r);\n    this.reduce(r);\n  }\n  sqrTo(x: BigInteger, r: BigInteger): void {\n    x.squareTo(r);\n    this.reduce(r);\n  }\n}\n\nclass Barrett implements Reducer {\n  r2: BigInteger;\n  q3: BigInteger;\n  mu: BigInteger;\n  m: BigInteger;\n  constructor(m: BigInteger) {\n    this.r2 = nbi();\n    this.q3 = nbi();\n    BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n    this.mu = this.r2.divide(m);\n    this.m = m;\n  }\n  convert(x: BigInteger): BigInteger {\n    if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m);\n    if (x.compareTo(this.m) < 0) return x;\n    const r = nbi();\n    x.copyTo(r);\n    this.reduce(r);\n    return r;\n  }\n  revert(x: BigInteger): BigInteger {\n    return x;\n  }\n  reduce(x: BigInteger): void {\n    x.drShiftTo(this.m.t - 1, this.r2);\n    if (x.t > this.m.t + 1) {\n      x.t = this.m.t + 1;\n      x.clamp();\n    }\n    this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n    this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n    while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1);\n    x.subTo(this.r2, x);\n    while (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n  }\n  mulTo(x: BigInteger, y: BigInteger, r: BigInteger): void {\n    x.multiplyTo(y, r);\n    this.reduce(r);\n  }\n  sqrTo(x: BigInteger, r: BigInteger): void {\n    x.squareTo(r);\n    this.reduce(r);\n  }\n}\n\nclass NullExp implements Reducer {\n  convert(x: BigInteger): BigInteger {\n    return x;\n  }\n  revert(x: BigInteger): BigInteger {\n    return x;\n  }\n  reduce(_x: BigInteger): void {}\n  mulTo(x: BigInteger, y: BigInteger, r: BigInteger): void {\n    x.multiplyTo(y, r);\n  }\n  sqrTo(x: BigInteger, r: BigInteger): void {\n    x.squareTo(r);\n  }\n}\n\n// lowprimes table for primality testing\n// biome-ignore format: keep the lowprimes table on one line for clarity vs the legacy file\nconst lowprimes: number[] = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];\nconst lplim = (1 << 26) / lowprimes[lowprimes.length - 1]!;\n\n// constants — defined after the class because they call nbv\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n","import type { CryptoBackend } from '../crypto/types.js';\n\n// Native-BigInt implementation of the jsbn BigInteger surface used by node-rsa.\n// Drop-in for src/bigint/big-integer-jsbn.ts — same exported class name and\n// public methods. Selected by src/bigint/big-integer.ts (selector).\n//\n// Backend injection (random_bytes for primality testing) mirrors the jsbn file.\n\nlet _backend: CryptoBackend | undefined;\n\nexport function setBigIntegerBackend(backend: CryptoBackend): void {\n  _backend = backend;\n}\n\nfunction getBackend(): CryptoBackend {\n  if (!_backend) {\n    throw new Error(\n      'BigInteger (native): backend not set. Did you import the package via its main entry?',\n    );\n  }\n  return _backend;\n}\n\n// helpers\nconst ZERO_BI = 0n;\nconst ONE_BI = 1n;\nconst TWO_BI = 2n;\n\n/** big-endian bytes → unsigned bigint (signed if `unsigned === false`). */\nfunction bytesToBigInt(bytes: Uint8Array, unsigned: boolean): bigint {\n  if (bytes.length === 0) return ZERO_BI;\n  if (!unsigned && (bytes[0]! & 0x80) !== 0) {\n    // signed two's complement → negative magnitude\n    let inv = ZERO_BI;\n    for (let i = 0; i < bytes.length; i++) {\n      inv = (inv << 8n) | BigInt(bytes[i]! ^ 0xff);\n    }\n    return -(inv + ONE_BI);\n  }\n  let v = ZERO_BI;\n  for (let i = 0; i < bytes.length; i++) {\n    v = (v << 8n) | BigInt(bytes[i]!);\n  }\n  return v;\n}\n\n/**\n * bigint → big-endian bytes, matching jsbn `toBuffer` semantics:\n *  - If `length` is given, output is exactly that many bytes (left-padded\n *    with zeros, truncated from the left if too long).\n *  - If `length` is omitted, the magnitude is emitted with a leading 0x00\n *    when the high bit would otherwise be set — so the bytes survive an\n *    ASN.1 two's-complement round-trip without sign confusion.\n */\nfunction bigIntToBytes(v: bigint, length?: number): Uint8Array {\n  if (v < ZERO_BI) throw new Error('BigInteger.toBuffer: negative value');\n  if (v === ZERO_BI) return new Uint8Array(length ?? 1);\n  let hex = v.toString(16);\n  if (hex.length & 1) hex = `0${hex}`;\n  const raw = new Uint8Array(hex.length / 2);\n  for (let i = 0; i < raw.length; i++) {\n    raw[i] = Number.parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n  }\n  if (length === undefined) {\n    // Prepend 0x00 if the high bit is set, matching jsbn's sign-preserving\n    // output. ASN.1 writers in this codebase normalize either form, so this\n    // is for byte-level parity rather than functional correctness.\n    if ((raw[0] as number) & 0x80) {\n      const padded = new Uint8Array(raw.length + 1);\n      padded.set(raw, 1);\n      return padded;\n    }\n    return raw;\n  }\n  if (length === raw.length) return raw;\n  if (length < raw.length) {\n    let cut = 0;\n    while (cut < raw.length - length && raw[cut] === 0) cut++;\n    if (raw.length - cut === length) return raw.slice(cut);\n    return raw.slice(raw.length - length);\n  }\n  const out = new Uint8Array(length);\n  out.set(raw, length - raw.length);\n  return out;\n}\n\nfunction bitLengthOf(v: bigint): number {\n  if (v === ZERO_BI) return 0;\n  const x = v < ZERO_BI ? -v : v;\n  return x.toString(2).length;\n}\n\n/** square-and-multiply modular exponentiation. */\nfunction modPowBI(base: bigint, exp: bigint, mod: bigint): bigint {\n  if (mod === ONE_BI) return ZERO_BI;\n  if (exp < ZERO_BI) {\n    // a^-e mod n = (a^-1)^e mod n\n    return modPowBI(modInverseBI(base, mod), -exp, mod);\n  }\n  let b = base % mod;\n  if (b < ZERO_BI) b += mod;\n  let result = ONE_BI;\n  let e = exp;\n  while (e > ZERO_BI) {\n    if (e & ONE_BI) result = (result * b) % mod;\n    e >>= ONE_BI;\n    b = (b * b) % mod;\n  }\n  return result;\n}\n\n/** Extended Euclidean inverse; returns 0n if gcd(a, m) ≠ 1 (jsbn behaviour). */\nfunction modInverseBI(a: bigint, m: bigint): bigint {\n  if (m <= ZERO_BI) throw new Error('BigInteger.modInverse: modulus must be positive');\n  let aNorm = a % m;\n  if (aNorm < ZERO_BI) aNorm += m;\n  let oldR = aNorm;\n  let r = m;\n  let oldS = ONE_BI;\n  let s = ZERO_BI;\n  while (r !== ZERO_BI) {\n    const q = oldR / r;\n    [oldR, r] = [r, oldR - q * r];\n    [oldS, s] = [s, oldS - q * s];\n  }\n  if (oldR !== ONE_BI) return ZERO_BI; // no inverse\n  return oldS < ZERO_BI ? oldS + m : oldS;\n}\n\nfunction gcdBI(a: bigint, b: bigint): bigint {\n  let x = a < ZERO_BI ? -a : a;\n  let y = b < ZERO_BI ? -b : b;\n  while (y !== ZERO_BI) {\n    [x, y] = [y, x % y];\n  }\n  return x;\n}\n\n// 168 primes below 1000; matches jsbn's sieve table.\n// biome-ignore format: dense table reads better unwrapped\nconst SMALL_PRIMES: ReadonlyArray<number> = [\n  2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,\n  73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,\n  179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,\n  283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,\n  419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,\n  547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,\n  661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,\n  811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,\n  947,953,967,971,977,983,991,997,\n];\nconst SMALL_PRIMES_BI: ReadonlyArray<bigint> = SMALL_PRIMES.map((p) => BigInt(p));\n\n/**\n * Miller-Rabin primality test with CSPRNG witnesses in [2, n-2].\n * Matches src/bigint/big-integer-jsbn.ts's audited semantics.\n */\nfunction millerRabin(n: bigint, rounds: number): boolean {\n  if (n < TWO_BI) return false;\n  if (n === TWO_BI || n === 3n) return true;\n  if ((n & ONE_BI) === ZERO_BI) return false;\n\n  const nMinus1 = n - ONE_BI;\n  let s = 0;\n  let d = nMinus1;\n  while ((d & ONE_BI) === ZERO_BI) {\n    d >>= ONE_BI;\n    s++;\n  }\n\n  const byteLen = ((bitLengthOf(n) + 7) >> 3) + 1;\n  const backend = getBackend();\n  const nMinus3 = n - 3n; // range size for [0, n-4]; we add 2 → [2, n-2]\n\n  witnessLoop: for (let i = 0; i < rounds; i++) {\n    let a: bigint;\n    for (;;) {\n      a = bytesToBigInt(backend.randomBytes(byteLen), true) % nMinus3;\n      a += TWO_BI;\n      if (a >= TWO_BI && a <= nMinus1 - ONE_BI) break;\n    }\n    let x = modPowBI(a, d, n);\n    if (x === ONE_BI || x === nMinus1) continue;\n    for (let r = 1; r < s; r++) {\n      x = (x * x) % n;\n      if (x === nMinus1) continue witnessLoop;\n    }\n    return false;\n  }\n  return true;\n}\n\nfunction probablePrime(v: bigint, rounds: number): boolean {\n  if (v < TWO_BI) return false;\n  for (const p of SMALL_PRIMES_BI) {\n    if (v === p) return true;\n    if (v % p === ZERO_BI) return false;\n  }\n  return millerRabin(v, rounds);\n}\n\n/**\n * Generate a random `bits`-bit number that passes a single Miller-Rabin round.\n * Matches jsbn fromNumber(bits, 1): the caller in RSAKey.generate runs a\n * second isProbablePrime(mrRounds) for full FIPS 186-4 validation.\n */\nfunction generateProbablePrime(bits: number): bigint {\n  if (bits < 2) throw new Error('BigInteger: cannot generate prime with < 2 bits');\n  const byteLen = (bits + 7) >> 3;\n  const backend = getBackend();\n  while (true) {\n    const x = backend.randomBytes(byteLen);\n    // Mask off unused high bits, then force top bit (exact bit length) and bottom bit (odd).\n    const tailBits = bits & 7;\n    if (tailBits > 0) x[0] = (x[0]! & ((1 << tailBits) - 1)) as number;\n    let v = bytesToBigInt(x, true);\n    v |= ONE_BI << BigInt(bits - 1);\n    v |= ONE_BI;\n    // Sequential search; bail and retry with fresh randomness if we'd exceed bit length.\n    for (let step = 0; step < 1 << 15; step += 2) {\n      if (bitLengthOf(v) > bits) break;\n      if (probablePrime(v, 1)) return v;\n      v += TWO_BI;\n    }\n  }\n}\n\nfunction parseFromString(s: string, radix: number): bigint {\n  if (s.length === 0) return ZERO_BI;\n  let str = s;\n  let neg = false;\n  if (str[0] === '-') {\n    neg = true;\n    str = str.substring(1);\n  }\n  if (str.length === 0) return ZERO_BI;\n  let v: bigint;\n  if (radix === 10) {\n    v = BigInt(str);\n  } else if (radix === 16) {\n    v = BigInt(`0x${str}`);\n  } else {\n    const r = BigInt(radix);\n    v = ZERO_BI;\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n      let d: number;\n      if (code >= 48 && code <= 57) d = code - 48;\n      else if (code >= 65 && code <= 90) d = code - 55;\n      else if (code >= 97 && code <= 122) d = code - 87;\n      else continue;\n      if (d < 0 || d >= radix) continue;\n      v = v * r + BigInt(d);\n    }\n  }\n  return neg ? -v : v;\n}\n\n// the public class\nexport class BigInteger {\n  static readonly ONE: BigInteger = new BigInteger(1);\n  static readonly ZERO: BigInteger = new BigInteger(0);\n\n  private _v: bigint;\n\n  constructor(a?: number | string | Uint8Array | bigint | null, b?: number, unsigned?: boolean) {\n    if (a == null) {\n      this._v = ZERO_BI;\n    } else if (typeof a === 'bigint') {\n      this._v = a;\n    } else if (typeof a === 'number') {\n      if (b === 1) {\n        this._v = generateProbablePrime(a);\n      } else {\n        this._v = BigInt(a);\n      }\n    } else if (typeof a === 'string') {\n      this._v = parseFromString(a, b ?? 10);\n    } else if (a instanceof Uint8Array) {\n      // Match jsbn's fromBuffer default: bytes are treated as unsigned\n      // big-endian unless the caller explicitly says otherwise. RSA\n      // components (n, p, q, …) almost always have the high bit set, so\n      // any other default flips them to negative.\n      this._v = bytesToBigInt(a, unsigned ?? true);\n    } else {\n      throw new Error(`BigInteger: unsupported input type ${typeof a}`);\n    }\n  }\n\n  signum(): -1 | 0 | 1 {\n    return this._v === ZERO_BI ? 0 : this._v > ZERO_BI ? 1 : -1;\n  }\n\n  compareTo(o: BigInteger): -1 | 0 | 1 {\n    if (this._v === o._v) return 0;\n    return this._v > o._v ? 1 : -1;\n  }\n\n  bitLength(): number {\n    return bitLengthOf(this._v);\n  }\n\n  testBit(n: number): boolean {\n    return ((this._v >> BigInt(n)) & ONE_BI) === ONE_BI;\n  }\n\n  isEven(): boolean {\n    return (this._v & ONE_BI) === ZERO_BI;\n  }\n\n  /** @internal */\n  negate(): BigInteger {\n    return new BigInteger(-this._v);\n  }\n\n  abs(): BigInteger {\n    return new BigInteger(this._v < ZERO_BI ? -this._v : this._v);\n  }\n\n  add(o: BigInteger): BigInteger {\n    return new BigInteger(this._v + o._v);\n  }\n\n  subtract(o: BigInteger): BigInteger {\n    return new BigInteger(this._v - o._v);\n  }\n\n  multiply(o: BigInteger): BigInteger {\n    return new BigInteger(this._v * o._v);\n  }\n\n  square(): BigInteger {\n    return new BigInteger(this._v * this._v);\n  }\n\n  /** @internal */\n  divide(o: BigInteger): BigInteger {\n    return new BigInteger(this._v / o._v);\n  }\n\n  /** Returns [quotient, remainder]. Matches jsbn divideAndRemainder. */\n  divideAndRemainder(o: BigInteger): [BigInteger, BigInteger] {\n    return [new BigInteger(this._v / o._v), new BigInteger(this._v % o._v)];\n  }\n\n  /** Always non-negative result for positive modulus (Java/jsbn semantics). */\n  mod(o: BigInteger): BigInteger {\n    const m = o._v;\n    if (m === ZERO_BI) throw new Error('BigInteger.mod: divide by zero');\n    let r = this._v % m;\n    const absM = m < ZERO_BI ? -m : m;\n    if (r < ZERO_BI) r += absM;\n    return new BigInteger(r);\n  }\n\n  modPow(e: BigInteger, m: BigInteger): BigInteger {\n    return new BigInteger(modPowBI(this._v, e._v, m._v));\n  }\n\n  modPowInt(e: number, m: BigInteger): BigInteger {\n    return new BigInteger(modPowBI(this._v, BigInt(e), m._v));\n  }\n\n  modInverse(m: BigInteger): BigInteger {\n    return new BigInteger(modInverseBI(this._v, m._v));\n  }\n\n  gcd(o: BigInteger): BigInteger {\n    return new BigInteger(gcdBI(this._v, o._v));\n  }\n\n  shiftLeft(n: number): BigInteger {\n    return new BigInteger(n >= 0 ? this._v << BigInt(n) : this._v >> BigInt(-n));\n  }\n\n  shiftRight(n: number): BigInteger {\n    return new BigInteger(n >= 0 ? this._v >> BigInt(n) : this._v << BigInt(-n));\n  }\n\n  isProbablePrime(rounds: number): boolean {\n    return probablePrime(this._v, rounds);\n  }\n\n  toString(radix?: number): string {\n    return this._v.toString(radix ?? 10);\n  }\n\n  /** Unsigned big-endian bytes; pads/truncates to `length` if given (jsbn parity). */\n  toBuffer(length?: number): Uint8Array | null {\n    if (this._v < ZERO_BI) {\n      // jsbn returns null on negative; matches callers that check `if (!out) throw`.\n      return null;\n    }\n    return bigIntToBytes(this._v, length);\n  }\n}\n","import type { CryptoBackend } from '../crypto/types.js';\nimport {\n  BigInteger as JsbnBigInteger,\n  setBigIntegerBackend as setJsbnBackend,\n} from './big-integer-jsbn.js';\nimport {\n  BigInteger as NativeBigInteger,\n  setBigIntegerBackend as setNativeBackend,\n} from './big-integer-native.js';\n\nexport type BigIntegerImpl = 'jsbn' | 'native';\n\n// The instance type stays jsbn-shaped at the type level (both impls satisfy\n// the same public surface); a single `BigInteger` identifier serves as both\n// value (live binding to the active class) and type alias for instances.\nexport type BigInteger = JsbnBigInteger;\nexport let BigInteger: typeof JsbnBigInteger = JsbnBigInteger;\n\nlet _currentImpl: BigIntegerImpl = 'jsbn';\nlet _currentBackend: CryptoBackend | undefined;\n\n/**\n * Switch the active BigInteger implementation. `'native'` falls back to\n * `'jsbn'` silently if `globalThis.BigInt` is unavailable.\n */\nexport function setBigIntegerImpl(impl: BigIntegerImpl): BigIntegerImpl {\n  if (impl === 'native' && typeof BigInt === 'function') {\n    BigInteger = NativeBigInteger as unknown as typeof JsbnBigInteger;\n    _currentImpl = 'native';\n  } else {\n    BigInteger = JsbnBigInteger;\n    _currentImpl = 'jsbn';\n  }\n  // Re-apply the most recent backend to both impls so the next prime search\n  // works regardless of which one the user just flipped to.\n  if (_currentBackend) {\n    setJsbnBackend(_currentBackend);\n    setNativeBackend(_currentBackend);\n  }\n  return _currentImpl;\n}\n\n/**\n * Inject the crypto backend that BigInteger uses for RNG (primality\n * testing). Applied to both impls so a later `setBigIntegerImpl` doesn't\n * lose the binding.\n */\nexport function setBigIntegerBackend(backend: CryptoBackend): void {\n  _currentBackend = backend;\n  setJsbnBackend(backend);\n  setNativeBackend(backend);\n}\n","const HEX_CHARS = '0123456789abcdef';\nconst utf8Encoder = new TextEncoder();\nconst utf8Decoder = new TextDecoder('utf-8', { fatal: false });\n\nexport function concat(...arrays: readonly Uint8Array[]): Uint8Array {\n  let total = 0;\n  for (const a of arrays) total += a.length;\n  const out = new Uint8Array(total);\n  let off = 0;\n  for (const a of arrays) {\n    out.set(a, off);\n    off += a.length;\n  }\n  return out;\n}\n\n// Length is treated as public: callers (OAEP lHash, PSS H/H', PKCS#1 padded\n// block) compare buffers whose size is derived from public modulus/hash\n// parameters, not from secret data. Do not use on variable-length secrets.\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) {\n    diff |= (a[i] as number) ^ (b[i] as number);\n  }\n  return diff === 0;\n}\n\nexport function toHex(bytes: Uint8Array): string {\n  let out = '';\n  for (let i = 0; i < bytes.length; i++) {\n    const b = bytes[i] as number;\n    out += HEX_CHARS[b >>> 4];\n    out += HEX_CHARS[b & 0x0f];\n  }\n  return out;\n}\n\nexport function fromHex(hex: string): Uint8Array {\n  const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n  if (clean.length % 2 !== 0) {\n    throw new Error(`Invalid hex: odd length ${clean.length}`);\n  }\n  const out = new Uint8Array(clean.length / 2);\n  for (let i = 0; i < out.length; i++) {\n    const hi = parseHexNibble(clean.charCodeAt(i * 2));\n    const lo = parseHexNibble(clean.charCodeAt(i * 2 + 1));\n    out[i] = (hi << 4) | lo;\n  }\n  return out;\n}\n\nfunction parseHexNibble(c: number): number {\n  if (c >= 0x30 && c <= 0x39) return c - 0x30;\n  if (c >= 0x61 && c <= 0x66) return c - 0x61 + 10;\n  if (c >= 0x41 && c <= 0x46) return c - 0x41 + 10;\n  throw new Error(`Invalid hex character: 0x${c.toString(16).padStart(2, '0')}`);\n}\n\nexport function toBase64(bytes: Uint8Array): string {\n  let binary = '';\n  const chunk = 0x8000;\n  for (let i = 0; i < bytes.length; i += chunk) {\n    const slice = bytes.subarray(i, Math.min(i + chunk, bytes.length));\n    binary += String.fromCharCode(...slice);\n  }\n  return btoa(binary);\n}\n\nexport function fromBase64(b64: string): Uint8Array {\n  const binary = atob(b64);\n  const out = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    out[i] = binary.charCodeAt(i);\n  }\n  return out;\n}\n\nexport function fromUtf8(s: string): Uint8Array {\n  return utf8Encoder.encode(s);\n}\n\nexport function toUtf8(bytes: Uint8Array): string {\n  return utf8Decoder.decode(bytes);\n}\n\n// latin1 (a.k.a. legacy Node \"binary\") — 1:1 mapping between byte 0x00-0xFF\n// and code points U+0000-U+00FF. Use for raw-byte string transport, never for\n// human-readable text.\nexport function fromLatin1(s: string): Uint8Array {\n  const out = new Uint8Array(s.length);\n  for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) & 0xff;\n  return out;\n}\n\nexport function toLatin1(bytes: Uint8Array): string {\n  let out = '';\n  const chunk = 0x8000;\n  for (let i = 0; i < bytes.length; i += chunk) {\n    const slice = bytes.subarray(i, Math.min(i + chunk, bytes.length));\n    out += String.fromCharCode(...slice);\n  }\n  return out;\n}\n\nexport function readUInt32BE(bytes: Uint8Array, offset = 0): number {\n  if (offset + 4 > bytes.length) {\n    throw new RangeError(`readUInt32BE: out of range (offset=${offset}, length=${bytes.length})`);\n  }\n  return (\n    (((bytes[offset] as number) << 24) |\n      ((bytes[offset + 1] as number) << 16) |\n      ((bytes[offset + 2] as number) << 8) |\n      (bytes[offset + 3] as number)) >>>\n    0\n  );\n}\n\nexport function writeUInt32BE(value: number, target: Uint8Array, offset = 0): void {\n  if (offset + 4 > target.length) {\n    throw new RangeError(`writeUInt32BE: out of range (offset=${offset}, length=${target.length})`);\n  }\n  target[offset] = (value >>> 24) & 0xff;\n  target[offset + 1] = (value >>> 16) & 0xff;\n  target[offset + 2] = (value >>> 8) & 0xff;\n  target[offset + 3] = value & 0xff;\n}\n","import type { RSAKey } from '../rsa/key.js';\nimport type { ExportOptions, FormatProvider, ImportOptions } from './types.js';\n\nexport interface PrivateComponents {\n  n: Uint8Array;\n  e: number | Uint8Array;\n  d: Uint8Array;\n  p: Uint8Array;\n  q: Uint8Array;\n  dmp1: Uint8Array;\n  dmq1: Uint8Array;\n  coeff: Uint8Array;\n}\n\nexport interface PublicComponents {\n  n: Uint8Array;\n  e: number | Uint8Array;\n}\n\n/**\n * Raw component object — plain JS object with `n`, `e`, `d`, `p`, `q`,\n * `dmp1`, `dmq1`, `coeff` (private) or just `n`, `e` (public).\n * No encoding step; intended for direct programmatic input.\n */\nexport const componentsFormat: FormatProvider = {\n  privateExport(key: RSAKey, _options: ExportOptions = {}): PrivateComponents {\n    if (!key.n || !key.d || !key.p || !key.q || !key.dmp1 || !key.dmq1 || !key.coeff) {\n      throw new Error('components export: incomplete private key');\n    }\n    return {\n      n: key.n.toBuffer() as Uint8Array,\n      e: key.e,\n      d: key.d.toBuffer() as Uint8Array,\n      p: key.p.toBuffer() as Uint8Array,\n      q: key.q.toBuffer() as Uint8Array,\n      dmp1: key.dmp1.toBuffer() as Uint8Array,\n      dmq1: key.dmq1.toBuffer() as Uint8Array,\n      coeff: key.coeff.toBuffer() as Uint8Array,\n    };\n  },\n\n  privateImport(key: RSAKey, data: unknown, _options: ImportOptions = {}): void {\n    const d = data as Partial<PrivateComponents>;\n    if (!d.n || !d.e || !d.d || !d.p || !d.q || !d.dmp1 || !d.dmq1 || !d.coeff) {\n      throw new Error('Invalid key data');\n    }\n    key.setPrivate(d.n, d.e, d.d, d.p, d.q, d.dmp1, d.dmq1, d.coeff);\n  },\n\n  publicExport(key: RSAKey, _options: ExportOptions = {}): PublicComponents {\n    if (!key.n) throw new Error('components export: missing modulus');\n    return { n: key.n.toBuffer() as Uint8Array, e: key.e };\n  },\n\n  publicImport(key: RSAKey, data: unknown, _options: ImportOptions = {}): void {\n    const d = data as Partial<PublicComponents>;\n    if (!d.n || d.e == null) throw new Error('Invalid key data');\n    key.setPublic(d.n, d.e);\n  },\n\n  autoImport(key: RSAKey, data: unknown): boolean {\n    if (typeof data !== 'object' || data === null) return false;\n    const d = data as Partial<PrivateComponents>;\n    if (!d.n || d.e == null) return false;\n    if (d.d && d.p && d.q && d.dmp1 && d.dmq1 && d.coeff) {\n      componentsFormat.privateImport?.(key, data);\n      return true;\n    }\n    componentsFormat.publicImport?.(key, data);\n    return true;\n  },\n};\n","/** Insert `\\n` every `maxLen` chars. */\nexport function linebrk(str: string, maxLen: number): string {\n  let out = '';\n  let i = 0;\n  while (i + maxLen < str.length) {\n    out += `${str.substring(i, i + maxLen)}\\n`;\n    i += maxLen;\n  }\n  return out + str.substring(i);\n}\n\n/**\n * Extract the body between `opening` and `closing` markers. Returns the\n * input unchanged if markers aren't found. Throws if a second `opening`\n * appears after the first `closing` (multi-block input — RFC 7468 §3\n * forbids ambiguity for PEM-style inputs).\n */\nexport function trimSurroundingText(data: string, opening: string, closing: string): string {\n  let start = 0;\n  let end = data.length;\n  const openIdx = data.indexOf(opening);\n  const closeIdx = openIdx >= 0 ? data.indexOf(closing, openIdx) : -1;\n  // Reject ambiguous multi-block input: a second opening marker after the\n  // first close means the input contains more than one block.\n  if (openIdx >= 0 && closeIdx >= 0) {\n    const secondOpen = data.indexOf(opening, closeIdx + closing.length);\n    if (secondOpen >= 0) {\n      throw new Error(`multiple ${opening} blocks — refusing ambiguous input`);\n    }\n  }\n  if (openIdx >= 0) start = openIdx + opening.length;\n  if (closeIdx >= 0) end = closeIdx;\n  return data.substring(start, end);\n}\n","import { BigInteger } from '../bigint/big-integer.js';\nimport {\n  fromBase64,\n  fromUtf8,\n  readUInt32BE,\n  toBase64,\n  toUtf8,\n  writeUInt32BE,\n} from '../crypto/bytes.js';\nimport type { RSAKey } from '../rsa/key.js';\nimport { linebrk, trimSurroundingText } from '../utils/text-utils.js';\nimport type { ExportOptions, FormatProvider, ImportOptions } from './types.js';\n\nconst PRIVATE_OPENING = '-----BEGIN OPENSSH PRIVATE KEY-----';\nconst PRIVATE_CLOSING = '-----END OPENSSH PRIVATE KEY-----';\n\n/**\n * OpenSSH — `ssh-rsa AAAA…` single-line public format, and\n * `OPENSSH PRIVATE KEY` PEM (openssh-key-v1). Only unencrypted keys\n * (cipher=\"none\", kdf=\"none\"); encrypted private keys are not supported.\n * The trailing comment field is preserved on import as `key.sshcomment`.\n */\nexport const opensshFormat: FormatProvider = {\n  /** OpenSSH private-key export. The two checkint placeholders are left as zero (no integrity field is written). */\n  privateExport(key: RSAKey, options: ExportOptions = {}): Uint8Array | string {\n    if (!key.n || !key.d || !key.p || !key.q || !key.coeff) {\n      throw new Error('OpenSSH export: incomplete private key');\n    }\n\n    const nbuf = key.n.toBuffer() as Uint8Array;\n    let ebuf = new Uint8Array(4);\n    writeUInt32BE(key.e, ebuf, 0);\n    // Strip leading zero bytes\n    while (ebuf.length > 0 && ebuf[0] === 0) ebuf = ebuf.subarray(1);\n\n    const dbuf = key.d.toBuffer() as Uint8Array;\n    const coeffbuf = key.coeff.toBuffer() as Uint8Array;\n    const pbuf = key.p.toBuffer() as Uint8Array;\n    const qbuf = key.q.toBuffer() as Uint8Array;\n    const commentbuf = key.sshcomment ? fromUtf8(key.sshcomment) : new Uint8Array(0);\n\n    const pubkeyLength =\n      11 + // length-prefixed 'ssh-rsa' (4-byte uint32 length + 7 chars)\n      4 +\n      ebuf.byteLength + // 4 = length prefix for e\n      4 +\n      nbuf.byteLength; // 4 = length prefix for n\n\n    const privateKeyLength =\n      8 + // two uint32 checkints (file-corruption / wrong-passphrase detector)\n      11 + // length-prefixed 'ssh-rsa' (4 + 7)\n      4 +\n      nbuf.byteLength + // 4 = length prefix for n\n      4 +\n      ebuf.byteLength + // 4 = length prefix for e\n      4 +\n      dbuf.byteLength + // 4 = length prefix for d\n      4 +\n      coeffbuf.byteLength + // 4 = length prefix for iqmp (coeff)\n      4 +\n      pbuf.byteLength + // 4 = length prefix for p\n      4 +\n      qbuf.byteLength + // 4 = length prefix for q\n      4 +\n      commentbuf.byteLength; // 4 = length prefix for comment\n    const paddingLength = Math.ceil(privateKeyLength / 8) * 8 - privateKeyLength;\n\n    const totalLength =\n      15 + // 'openssh-key-v1\\0' magic\n      16 + // two length-prefixed 'none' strings (cipher + kdf), 2*(4+4)\n      4 + // empty kdfoptions (length prefix only, zero bytes of payload)\n      4 + // numkeys (uint32 = 1)\n      4 + // pubkey-blob length prefix\n      pubkeyLength +\n      4 + // private-section length prefix\n      privateKeyLength +\n      paddingLength;\n\n    const buf = new Uint8Array(totalLength);\n    const writer = new SshWriter(buf);\n\n    // \"openssh-key-v1\\0\"\n    buf.set(fromUtf8('openssh-key-v1'), 0);\n    buf[14] = 0;\n    writer.off = 15;\n\n    writer.writeString(fromUtf8('none'));\n    writer.writeString(fromUtf8('none'));\n    writer.writeString(new Uint8Array(0));\n\n    writer.writeUInt32(1); // number of keys\n    writer.writeUInt32(pubkeyLength);\n\n    writer.writeString(fromUtf8('ssh-rsa'));\n    writer.writeString(ebuf);\n    writer.writeString(nbuf);\n\n    writer.writeUInt32(privateKeyLength + paddingLength); // length prefix for the private section\n    writer.off += 8; // skip two uint32 checkints (left as zero — no integrity field is written)\n\n    writer.writeString(fromUtf8('ssh-rsa'));\n    writer.writeString(nbuf);\n    writer.writeString(ebuf);\n    writer.writeString(dbuf);\n    writer.writeString(coeffbuf);\n    writer.writeString(pbuf);\n    writer.writeString(qbuf);\n    writer.writeString(commentbuf);\n\n    let pad = 0x01;\n    while (writer.off < totalLength) {\n      buf[writer.off++] = pad++;\n    }\n\n    if (options.type === 'der') return buf;\n    return `${PRIVATE_OPENING}\\n${linebrk(toBase64(buf), 70)}\\n${PRIVATE_CLOSING}\\n`;\n  },\n\n  /** OpenSSH private-key import. The format omits CRT exponents, so `dp` and `dq` are derived from `d mod (p−1)` and `d mod (q−1)`. */\n  privateImport(key: RSAKey, data: Uint8Array | string, options: ImportOptions = {}): void {\n    let buffer: Uint8Array;\n    if (options.type !== 'der') {\n      const text = data instanceof Uint8Array ? toUtf8(data) : (data as string);\n      const trimmed = trimSurroundingText(text, PRIVATE_OPENING, PRIVATE_CLOSING).replace(\n        /\\s+/g,\n        '',\n      );\n      buffer = fromBase64(trimmed);\n    } else if (data instanceof Uint8Array) {\n      buffer = data;\n    } else {\n      throw new Error('Unsupported key format');\n    }\n\n    const magic = toUtf8(buffer.subarray(0, 14));\n    if (magic !== 'openssh-key-v1') throw new Error('Invalid file format.');\n\n    const reader = new SshReader(buffer);\n    reader.off = 15;\n\n    if (toUtf8(reader.readString()) !== 'none') throw new Error('Unsupported key type');\n    if (toUtf8(reader.readString()) !== 'none') throw new Error('Unsupported key type');\n    if (toUtf8(reader.readString()) !== '') throw new Error('Unsupported key type');\n\n    reader.off += 4; // keynum\n    reader.off += 4; // sshpublength\n\n    if (toUtf8(reader.readString()) !== 'ssh-rsa') throw new Error('Unsupported key type');\n    reader.readString(); // public e\n    reader.readString(); // public n\n\n    // Private section: `length || checkint1 || checkint2 || keydata` —\n    // the two checkints MUST be identical (file corruption / wrong\n    // passphrase detector per the OpenSSH key format).\n    reader.off += 4; // private section length (subsequent reads bounds-check)\n    const checkInt1 = readUInt32BE(reader.buf, reader.off);\n    reader.off += 4;\n    const checkInt2 = readUInt32BE(reader.buf, reader.off);\n    reader.off += 4;\n    if (checkInt1 !== checkInt2) {\n      throw new Error(\n        'OpenSSH private key: checksum mismatch (file may be corrupted or encrypted)',\n      );\n    }\n    if (toUtf8(reader.readString()) !== 'ssh-rsa') throw new Error('Unsupported key type');\n\n    const n = reader.readString();\n    const e = reader.readString();\n    const d = reader.readString();\n    const coeff = reader.readString();\n    const p = reader.readString();\n    const q = reader.readString();\n\n    // Derive dp = d mod (p-1) and dq = d mod (q-1)\n    const dint = new BigInteger(d);\n    const pint = new BigInteger(p);\n    const qint = new BigInteger(q);\n    const dp = dint.mod(pint.subtract(BigInteger.ONE)).toBuffer() as Uint8Array;\n    const dq = dint.mod(qint.subtract(BigInteger.ONE)).toBuffer() as Uint8Array;\n\n    key.setPrivate(n, e, d, p, q, dp, dq, coeff);\n    key.sshcomment = toUtf8(reader.readString());\n  },\n\n  publicExport(key: RSAKey, options: ExportOptions = {}): Uint8Array | string {\n    if (!key.n) throw new Error('OpenSSH export: missing modulus');\n    let ebuf = new Uint8Array(4);\n    writeUInt32BE(key.e, ebuf, 0);\n    while (ebuf.length > 0 && ebuf[0] === 0) ebuf = ebuf.subarray(1);\n    const nbuf = key.n.toBuffer() as Uint8Array;\n\n    const buf = new Uint8Array(ebuf.byteLength + 4 + nbuf.byteLength + 4 + 'ssh-rsa'.length + 4);\n    const writer = new SshWriter(buf);\n    writer.writeString(fromUtf8('ssh-rsa'));\n    writer.writeString(ebuf);\n    writer.writeString(nbuf);\n\n    if (options.type === 'der') return buf;\n    const comment = key.sshcomment ?? '';\n    return `ssh-rsa ${toBase64(buf)} ${comment}\\n`;\n  },\n\n  publicImport(key: RSAKey, data: Uint8Array | string, options: ImportOptions = {}): void {\n    let buffer: Uint8Array;\n    if (options.type !== 'der') {\n      const text = data instanceof Uint8Array ? toUtf8(data) : (data as string);\n      if (text.substring(0, 8) !== 'ssh-rsa ') throw new Error('Unsupported key format');\n      let pemEnd = text.indexOf(' ', 8);\n      if (pemEnd === -1) {\n        pemEnd = text.length;\n      } else {\n        // Legacy strips ALL whitespace (not just trailing) — multi-word\n        // comments are lossy on round-trip. Preserving that for 1-to-1.\n        key.sshcomment = text.substring(pemEnd + 1).replace(/\\s+|\\n\\r|\\n|\\r$/gm, '');\n      }\n      const pem = text.substring(8, pemEnd).replace(/\\s+/g, '');\n      buffer = fromBase64(pem);\n    } else if (data instanceof Uint8Array) {\n      buffer = data;\n    } else {\n      throw new Error('Unsupported key format');\n    }\n\n    const reader = new SshReader(buffer);\n    const type = toUtf8(reader.readString());\n    if (type !== 'ssh-rsa') throw new Error(`Invalid key type: ${type}`);\n    const e = reader.readString();\n    const n = reader.readString();\n    key.setPublic(n, e);\n  },\n\n  autoImport(key: RSAKey, data: unknown): boolean {\n    const text =\n      typeof data === 'string'\n        ? data\n        : data instanceof Uint8Array\n          ? new TextDecoder().decode(data)\n          : null;\n    if (text === null) return false;\n    if (\n      /^[\\S\\s]*-----BEGIN OPENSSH PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END OPENSSH PRIVATE KEY-----[\\S\\s]*$/g.test(\n        text,\n      )\n    ) {\n      opensshFormat.privateImport?.(key, text);\n      return true;\n    }\n    if (/^[\\S\\s]*ssh-rsa \\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1[\\S\\s]*$/g.test(text)) {\n      opensshFormat.publicImport?.(key, text);\n      return true;\n    }\n    return false;\n  },\n};\n\nclass SshReader {\n  off = 0;\n\n  constructor(readonly buf: Uint8Array) {}\n\n  readString(): Uint8Array {\n    const len = readUInt32BE(this.buf, this.off);\n    // Uint8Array.subarray silently truncates on OOB rather than throwing,\n    // so a forged length field would deliver a short buffer deep into the\n    // key parser with an opaque failure mode. Bound-check explicitly.\n    if (this.off + 4 + len > this.buf.length) {\n      throw new Error(\n        `OpenSSH: string length ${len} exceeds buffer (offset=${this.off}, buffer=${this.buf.length})`,\n      );\n    }\n    this.off += 4;\n    const out = this.buf.subarray(this.off, this.off + len);\n    this.off += len;\n    return out;\n  }\n}\n\nclass SshWriter {\n  off = 0;\n\n  constructor(readonly buf: Uint8Array) {}\n\n  writeString(data: Uint8Array): void {\n    writeUInt32BE(data.byteLength, this.buf, this.off);\n    this.off += 4;\n    this.buf.set(data, this.off);\n    this.off += data.byteLength;\n  }\n\n  writeUInt32(value: number): void {\n    writeUInt32BE(value, this.buf, this.off);\n    this.off += 4;\n  }\n}\n","export const OID = {\n  /** rsaEncryption — used in PKCS#8 AlgorithmIdentifier */\n  RSA_ENCRYPTION: '1.2.840.113549.1.1.1',\n} as const;\n","export const Tag = {\n  INTEGER: 0x02,\n  BIT_STRING: 0x03,\n  OCTET_STRING: 0x04,\n  NULL: 0x05,\n  OBJECT_IDENTIFIER: 0x06,\n  SEQUENCE: 0x30,\n} as const;\n\nexport function tagName(tag: number): string {\n  switch (tag) {\n    case Tag.INTEGER:\n      return 'INTEGER';\n    case Tag.BIT_STRING:\n      return 'BIT STRING';\n    case Tag.OCTET_STRING:\n      return 'OCTET STRING';\n    case Tag.NULL:\n      return 'NULL';\n    case Tag.OBJECT_IDENTIFIER:\n      return 'OBJECT IDENTIFIER';\n    case Tag.SEQUENCE:\n      return 'SEQUENCE';\n    default:\n      return `tag 0x${tag.toString(16).padStart(2, '0')}`;\n  }\n}\n","import { Tag, tagName } from './tags.js';\n\nexport class DerReader {\n  private pos = 0;\n  private readonly bytes: Uint8Array;\n\n  constructor(bytes: Uint8Array) {\n    this.bytes = bytes;\n  }\n\n  get position(): number {\n    return this.pos;\n  }\n\n  get remaining(): number {\n    return this.bytes.length - this.pos;\n  }\n\n  hasMore(): boolean {\n    return this.pos < this.bytes.length;\n  }\n\n  /**\n   * Read a generic TLV. If `expectedTag` is supplied, asserts the tag matches.\n   * Returns the value bytes (no tag, no length octets).\n   */\n  readTlv(expectedTag?: number): { tag: number; value: Uint8Array } {\n    if (this.pos >= this.bytes.length) {\n      throw new Error('DerReader: unexpected end of input');\n    }\n    const tag = this.bytes[this.pos++] as number;\n    if (expectedTag !== undefined && tag !== expectedTag) {\n      throw new Error(\n        `DerReader: expected ${tagName(expectedTag)} (0x${expectedTag.toString(16)}) but got ${tagName(tag)} (0x${tag.toString(16)})`,\n      );\n    }\n    const length = this.readLength();\n    const end = this.pos + length;\n    if (end > this.bytes.length) {\n      throw new Error(\n        `DerReader: TLV length ${length} exceeds buffer (pos=${this.pos}, len=${this.bytes.length})`,\n      );\n    }\n    const value = this.bytes.subarray(this.pos, end);\n    this.pos = end;\n    return { tag, value };\n  }\n\n  private readLength(): number {\n    if (this.pos >= this.bytes.length) {\n      throw new Error('DerReader: missing length octet');\n    }\n    const first = this.bytes[this.pos++] as number;\n    if ((first & 0x80) === 0) return first;\n    const numBytes = first & 0x7f;\n    if (numBytes === 0) {\n      throw new Error('DerReader: indefinite length not permitted in DER');\n    }\n    if (numBytes > 4) {\n      throw new Error(`DerReader: unsupported length width ${numBytes}`);\n    }\n    let len = 0;\n    for (let i = 0; i < numBytes; i++) {\n      if (this.pos >= this.bytes.length) {\n        throw new Error('DerReader: truncated length');\n      }\n      const b = this.bytes[this.pos++] as number;\n      // X.690 §10.1: long-form length octets must be the minimum number\n      // necessary — no leading zeros.\n      if (i === 0 && b === 0 && numBytes > 1) {\n        throw new Error('DerReader: non-canonical length (leading zero in long-form)');\n      }\n      len = (len << 8) | b;\n    }\n    // X.690 §10.1: short-form is required when the value is < 128.\n    if (len < 128) {\n      throw new Error(`DerReader: non-canonical length (long-form used for length ${len} < 128)`);\n    }\n    return len;\n  }\n\n  /** Read a SEQUENCE and return a sub-reader scoped to its contents. */\n  readSequence(): DerReader {\n    return new DerReader(this.readTlv(Tag.SEQUENCE).value);\n  }\n\n  /** Read an INTEGER and return its raw value bytes (DER content). */\n  readInteger(): Uint8Array {\n    const bytes = this.readTlv(Tag.INTEGER).value;\n    if (bytes.length === 0) {\n      throw new Error('DerReader: INTEGER must have at least one content octet');\n    }\n    // X.690 §8.3.2: a leading 0x00 is allowed only when the next byte's MSB\n    // is set (sign-bit padding); a leading 0xff only when it's clear.\n    if (bytes.length >= 2) {\n      const b0 = bytes[0];\n      const b1 = bytes[1];\n      if (b1 !== undefined) {\n        if (b0 === 0x00 && (b1 & 0x80) === 0) {\n          throw new Error('DerReader: non-canonical INTEGER (redundant leading 0x00)');\n        }\n        if (b0 === 0xff && (b1 & 0x80) !== 0) {\n          throw new Error('DerReader: non-canonical INTEGER (redundant leading 0xff)');\n        }\n      }\n    }\n    return bytes;\n  }\n\n  /**\n   * Read an INTEGER, decoding it as an unsigned JavaScript number.\n   * Throws if the value doesn't fit in a safe-integer.\n   */\n  readSmallInteger(): number {\n    const bytes = this.readInteger();\n    // Skip any leading zero used to indicate sign (positive)\n    let i = 0;\n    while (i < bytes.length - 1 && bytes[i] === 0) i++;\n    const meaningful = bytes.subarray(i);\n    if (meaningful.length > 6) {\n      throw new Error(`DerReader: integer too large for safe number (${meaningful.length} bytes)`);\n    }\n    let n = 0;\n    for (const b of meaningful) {\n      n = n * 256 + b;\n    }\n    return n;\n  }\n\n  /** Read an OBJECT IDENTIFIER and return its dotted-string form. */\n  readOid(): string {\n    return decodeOid(this.readTlv(Tag.OBJECT_IDENTIFIER).value);\n  }\n\n  /** Read a NULL TLV. Throws if the value is non-empty. */\n  readNull(): void {\n    const { value } = this.readTlv(Tag.NULL);\n    if (value.length !== 0) {\n      throw new Error(`DerReader: NULL must be zero-length, got ${value.length}`);\n    }\n  }\n\n  /** Read a BIT STRING and return its value bytes INCLUDING the leading unused-bits octet. */\n  readBitStringRaw(): Uint8Array {\n    return this.readTlv(Tag.BIT_STRING).value;\n  }\n\n  /**\n   * Read a BIT STRING and return its content octets (after the unused-bits byte).\n   * Asserts unused-bits is zero.\n   */\n  readBitString(): Uint8Array {\n    const raw = this.readBitStringRaw();\n    if (raw.length === 0) {\n      throw new Error('DerReader: empty BIT STRING');\n    }\n    if (raw[0] !== 0) {\n      throw new Error(`DerReader: non-zero unused bits (${raw[0]}) not supported`);\n    }\n    return raw.subarray(1);\n  }\n\n  /** Read an OCTET STRING and return its value bytes. */\n  readOctetString(): Uint8Array {\n    return this.readTlv(Tag.OCTET_STRING).value;\n  }\n}\n\nfunction decodeOid(bytes: Uint8Array): string {\n  if (bytes.length === 0) {\n    throw new Error('DerReader: empty OID');\n  }\n  let i = 0;\n  // First base-128 sequence encodes (40*arc0 + arc1).\n  let combined = 0;\n  let b: number;\n  do {\n    if (i >= bytes.length) throw new Error('DerReader: truncated OID');\n    b = bytes[i++] as number;\n    combined = combined * 128 + (b & 0x7f);\n  } while ((b & 0x80) !== 0);\n\n  const arcs: number[] = [];\n  if (combined < 40) {\n    arcs.push(0, combined);\n  } else if (combined < 80) {\n    arcs.push(1, combined - 40);\n  } else {\n    arcs.push(2, combined - 80);\n  }\n\n  while (i < bytes.length) {\n    let arc = 0;\n    do {\n      if (i >= bytes.length) throw new Error('DerReader: truncated OID arc');\n      b = bytes[i++] as number;\n      arc = arc * 128 + (b & 0x7f);\n    } while ((b & 0x80) !== 0);\n    arcs.push(arc);\n  }\n  return arcs.join('.');\n}\n","import { concat } from '../crypto/bytes.js';\nimport { Tag } from './tags.js';\n\nexport class DerWriter {\n  private chunks: Uint8Array[] = [];\n  private sequenceStack: Uint8Array[][] = [];\n\n  /** Write a generic TLV with the given tag and value bytes. */\n  writeTlv(tag: number, value: Uint8Array): void {\n    this.chunks.push(new Uint8Array([tag]));\n    this.chunks.push(encodeLength(value.length));\n    this.chunks.push(value);\n  }\n\n  /**\n   * Write an INTEGER. Accepts:\n   *  - a positive JS number,\n   *  - an unsigned big-endian byte array (a leading zero will be prepended\n   *    if the MSB is set, to preserve positive sign).\n   */\n  writeInteger(value: number | Uint8Array): void {\n    if (typeof value === 'number') {\n      this.writeTlv(Tag.INTEGER, encodeSmallInteger(value));\n    } else {\n      this.writeTlv(Tag.INTEGER, normalizePositiveInteger(value));\n    }\n  }\n\n  writeOid(oid: string): void {\n    this.writeTlv(Tag.OBJECT_IDENTIFIER, encodeOid(oid));\n  }\n\n  writeNull(): void {\n    this.writeTlv(Tag.NULL, new Uint8Array(0));\n  }\n\n  /** Write a BIT STRING. Always emits an unused-bits prefix byte of 0x00. */\n  writeBitString(content: Uint8Array): void {\n    const body = new Uint8Array(content.length + 1);\n    body[0] = 0;\n    body.set(content, 1);\n    this.writeTlv(Tag.BIT_STRING, body);\n  }\n\n  /**\n   * Write a BIT STRING whose value bytes (including the leading unused-bits\n   * octet) are supplied directly. Mirrors callers that build the bit-string\n   * payload externally.\n   */\n  writeBitStringRaw(valueIncludingUnusedBitsByte: Uint8Array): void {\n    this.writeTlv(Tag.BIT_STRING, valueIncludingUnusedBitsByte);\n  }\n\n  writeOctetString(content: Uint8Array): void {\n    this.writeTlv(Tag.OCTET_STRING, content);\n  }\n\n  /** Begin a nested SEQUENCE; subsequent writes go into it until endSequence(). */\n  startSequence(): void {\n    this.sequenceStack.push(this.chunks);\n    this.chunks = [];\n  }\n\n  /** Close the most recently opened SEQUENCE, emitting it as a TLV in the parent. */\n  endSequence(): void {\n    if (this.sequenceStack.length === 0) {\n      throw new Error('DerWriter: endSequence without startSequence');\n    }\n    const inner = concat(...this.chunks);\n    this.chunks = this.sequenceStack.pop() as Uint8Array[];\n    this.writeTlv(Tag.SEQUENCE, inner);\n  }\n\n  /** Return the assembled DER bytes. Throws if any SEQUENCE is unclosed. */\n  toBytes(): Uint8Array {\n    if (this.sequenceStack.length > 0) {\n      throw new Error(`DerWriter: ${this.sequenceStack.length} SEQUENCE(s) unclosed`);\n    }\n    return concat(...this.chunks);\n  }\n}\n\nfunction encodeLength(n: number): Uint8Array {\n  if (n < 0) throw new Error(`DerWriter: negative length ${n}`);\n  if (n < 0x80) return new Uint8Array([n]);\n  const bytes: number[] = [];\n  let temp = n;\n  while (temp > 0) {\n    bytes.unshift(temp & 0xff);\n    temp = Math.floor(temp / 256);\n  }\n  if (bytes.length > 0x7f) {\n    throw new Error(`DerWriter: length ${n} exceeds DER limits`);\n  }\n  return new Uint8Array([0x80 | bytes.length, ...bytes]);\n}\n\nfunction encodeSmallInteger(n: number): Uint8Array {\n  if (n < 0) throw new Error(`DerWriter: negative integers not supported (got ${n})`);\n  if (n === 0) return new Uint8Array([0]);\n  if (!Number.isSafeInteger(n)) {\n    throw new Error(`DerWriter: integer ${n} not a safe integer`);\n  }\n  const bytes: number[] = [];\n  let temp = n;\n  while (temp > 0) {\n    bytes.unshift(temp & 0xff);\n    temp = Math.floor(temp / 256);\n  }\n  // Prepend 0x00 if MSB is set so the value is parsed as unsigned/positive.\n  if ((bytes[0] as number) & 0x80) bytes.unshift(0);\n  return new Uint8Array(bytes);\n}\n\nfunction normalizePositiveInteger(value: Uint8Array): Uint8Array {\n  // Strip leading zeros, but keep one if MSB of the next byte is set.\n  let i = 0;\n  while (i < value.length - 1 && value[i] === 0 && ((value[i + 1] as number) & 0x80) === 0) {\n    i++;\n  }\n  const trimmed = value.subarray(i);\n  // Prepend a 0x00 if MSB is set, to signal positive.\n  if (trimmed.length > 0 && (trimmed[0] as number) & 0x80) {\n    const out = new Uint8Array(trimmed.length + 1);\n    out[0] = 0;\n    out.set(trimmed, 1);\n    return out;\n  }\n  return trimmed.length === 0 ? new Uint8Array([0]) : trimmed;\n}\n\nfunction encodeOid(oid: string): Uint8Array {\n  const arcs = oid.split('.').map((s) => {\n    const n = Number(s);\n    if (!Number.isFinite(n) || n < 0 || !Number.isInteger(n)) {\n      throw new Error(`DerWriter: invalid OID arc \"${s}\"`);\n    }\n    return n;\n  });\n  if (arcs.length < 2) {\n    throw new Error(`DerWriter: OID must have at least 2 arcs, got \"${oid}\"`);\n  }\n  const arc0 = arcs[0] as number;\n  const arc1 = arcs[1] as number;\n  if (arc0 > 2 || (arc0 < 2 && arc1 >= 40)) {\n    throw new Error(`DerWriter: invalid leading arcs ${arc0}.${arc1}`);\n  }\n  // The first byte encodes (40*arc0 + arc1) using base-128 — needed when\n  // arc0 = 2 and arc1 >= 48, where the combined value exceeds a single octet.\n  const out: number[] = [];\n  encodeBase128Into(arc0 * 40 + arc1, out);\n  for (let i = 2; i < arcs.length; i++) {\n    encodeBase128Into(arcs[i] as number, out);\n  }\n  return new Uint8Array(out);\n}\n\nfunction encodeBase128Into(n: number, out: number[]): void {\n  if (n === 0) {\n    out.push(0);\n    return;\n  }\n  const bytes: number[] = [];\n  let temp = n;\n  while (temp > 0) {\n    bytes.unshift(temp & 0x7f);\n    temp = Math.floor(temp / 128);\n  }\n  for (let i = 0; i < bytes.length - 1; i++) {\n    bytes[i] = (bytes[i] as number) | 0x80;\n  }\n  out.push(...bytes);\n}\n","import { fromBase64, toBase64 } from '../crypto/bytes.js';\nimport { linebrk, trimSurroundingText } from '../utils/text-utils.js';\nimport type { ImportOptions } from './types.js';\n\n/** Wrap raw DER bytes in a PEM container (base64 body line-wrapped at `lineLength`, default 64). */\nexport function encodePem(\n  body: Uint8Array,\n  opening: string,\n  closing: string,\n  lineLength = 64,\n): string {\n  return `${opening}\\n${linebrk(toBase64(body), lineLength)}\\n${closing}`;\n}\n\n/**\n * Decode a PEM-wrapped block into raw bytes. Tolerates leading and\n * trailing noise around the boundaries (matches v1 behaviour).\n */\nexport function decodePem(text: string, opening: string, closing: string): Uint8Array {\n  const trimmed = trimSurroundingText(text, opening, closing).replace(/\\s+/g, '');\n  return fromBase64(trimmed);\n}\n\n/**\n * Normalize import input to raw bytes. `options.type === 'der'` requires\n * a `Uint8Array`; otherwise the input is treated as PEM text (string or\n * UTF-8-decoded bytes) and routed through {@link decodePem}.\n */\nexport function resolveBytes(\n  data: Uint8Array | string,\n  options: ImportOptions,\n  opening: string,\n  closing: string,\n): Uint8Array {\n  if (options.type === 'der') {\n    if (data instanceof Uint8Array) return data;\n    throw new Error('Unsupported key format');\n  }\n  if (data instanceof Uint8Array) {\n    return decodePem(new TextDecoder().decode(data), opening, closing);\n  }\n  if (typeof data === 'string') {\n    return decodePem(data, opening, closing);\n  }\n  throw new Error('Unsupported key format');\n}\n","import { DerReader, DerWriter } from '../asn1/index.js';\nimport type { RSAKey } from '../rsa/key.js';\nimport { encodePem, resolveBytes } from './pem.js';\nimport type { ExportOptions, FormatProvider, ImportOptions } from './types.js';\n\nconst PRIVATE_OPENING = '-----BEGIN RSA PRIVATE KEY-----';\nconst PRIVATE_CLOSING = '-----END RSA PRIVATE KEY-----';\nconst PUBLIC_OPENING = '-----BEGIN RSA PUBLIC KEY-----';\nconst PUBLIC_CLOSING = '-----END RSA PUBLIC KEY-----';\n\n/** PKCS#1 (RFC 8017 §A.1) — `RSA PRIVATE KEY` / `RSA PUBLIC KEY` PEM, or raw DER. */\nexport const pkcs1Format: FormatProvider = {\n  privateExport(key: RSAKey, options: ExportOptions = {}): Uint8Array | string {\n    if (!key.n || !key.d || !key.p || !key.q || !key.dmp1 || !key.dmq1 || !key.coeff) {\n      throw new Error('PKCS#1 export: incomplete private key');\n    }\n    const w = new DerWriter();\n    w.startSequence();\n    w.writeInteger(0);\n    w.writeInteger(key.n.toBuffer() as Uint8Array);\n    w.writeInteger(key.e);\n    w.writeInteger(key.d.toBuffer() as Uint8Array);\n    w.writeInteger(key.p.toBuffer() as Uint8Array);\n    w.writeInteger(key.q.toBuffer() as Uint8Array);\n    w.writeInteger(key.dmp1.toBuffer() as Uint8Array);\n    w.writeInteger(key.dmq1.toBuffer() as Uint8Array);\n    w.writeInteger(key.coeff.toBuffer() as Uint8Array);\n    w.endSequence();\n    const bytes = w.toBytes();\n    return options.type === 'der' ? bytes : encodePem(bytes, PRIVATE_OPENING, PRIVATE_CLOSING);\n  },\n\n  privateImport(key: RSAKey, data: Uint8Array | string, options: ImportOptions = {}): void {\n    const buffer = resolveBytes(data, options, PRIVATE_OPENING, PRIVATE_CLOSING);\n    const seq = new DerReader(buffer).readSequence();\n    seq.readSmallInteger(); // version\n    const n = seq.readInteger();\n    const e = seq.readSmallInteger();\n    const d = seq.readInteger();\n    const p = seq.readInteger();\n    const q = seq.readInteger();\n    const dmp1 = seq.readInteger();\n    const dmq1 = seq.readInteger();\n    const coeff = seq.readInteger();\n    key.setPrivate(n, e, d, p, q, dmp1, dmq1, coeff);\n  },\n\n  publicExport(key: RSAKey, options: ExportOptions = {}): Uint8Array | string {\n    if (!key.n) throw new Error('PKCS#1 export: missing modulus');\n    const w = new DerWriter();\n    w.startSequence();\n    w.writeInteger(key.n.toBuffer() as Uint8Array);\n    w.writeInteger(key.e);\n    w.endSequence();\n    const bytes = w.toBytes();\n    return options.type === 'der' ? bytes : encodePem(bytes, PUBLIC_OPENING, PUBLIC_CLOSING);\n  },\n\n  publicImport(key: RSAKey, data: Uint8Array | string, options: ImportOptions = {}): void {\n    const buffer = resolveBytes(data, options, PUBLIC_OPENING, PUBLIC_CLOSING);\n    const seq = new DerReader(buffer).readSequence();\n    const n = seq.readInteger();\n    const e = seq.readSmallInteger();\n    key.setPublic(n, e);\n  },\n\n  autoImport(key: RSAKey, data: unknown): boolean {\n    const text =\n      typeof data === 'string'\n        ? data\n        : data instanceof Uint8Array\n          ? new TextDecoder().decode(data)\n          : null;\n    if (text === null) return false;\n    if (\n      /^[\\S\\s]*-----BEGIN RSA PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END RSA PRIVATE KEY-----[\\S\\s]*$/g.test(\n        text,\n      )\n    ) {\n      pkcs1Format.privateImport?.(key, text);\n      return true;\n    }\n    if (\n      /^[\\S\\s]*-----BEGIN RSA PUBLIC KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END RSA PUBLIC KEY-----[\\S\\s]*$/g.test(\n        text,\n      )\n    ) {\n      pkcs1Format.publicImport?.(key, text);\n      return true;\n    }\n    return false;\n  },\n};\n","import { DerReader, DerWriter, OID } from '../asn1/index.js';\nimport type { RSAKey } from '../rsa/key.js';\nimport { encodePem, resolveBytes } from './pem.js';\nimport type { ExportOptions, FormatProvider, ImportOptions } from './types.js';\n\nconst PRIVATE_OPENING = '-----BEGIN PRIVATE KEY-----';\nconst PRIVATE_CLOSING = '-----END PRIVATE KEY-----';\nconst PUBLIC_OPENING = '-----BEGIN PUBLIC KEY-----';\nconst PUBLIC_CLOSING = '-----END PUBLIC KEY-----';\n\n/**\n * PKCS#8 (RFC 5958) — `PRIVATE KEY` / `PUBLIC KEY` PEM, or raw DER. Wraps a\n * PKCS#1 body inside an algorithm-id envelope; only `rsaEncryption` OID is\n * accepted (RSASSA-PSS / RSAES-OAEP variants are rejected with a clear error).\n */\nexport const pkcs8Format: FormatProvider = {\n  privateExport(key: RSAKey, options: ExportOptions = {}): Uint8Array | string {\n    if (!key.n || !key.d || !key.p || !key.q || !key.dmp1 || !key.dmq1 || !key.coeff) {\n      throw new Error('PKCS#8 export: incomplete private key');\n    }\n    // Inner: PKCS#1 private key body\n    const body = new DerWriter();\n    body.startSequence();\n    body.writeInteger(0);\n    body.writeInteger(key.n.toBuffer() as Uint8Array);\n    body.writeInteger(key.e);\n    body.writeInteger(key.d.toBuffer() as Uint8Array);\n    body.writeInteger(key.p.toBuffer() as Uint8Array);\n    body.writeInteger(key.q.toBuffer() as Uint8Array);\n    body.writeInteger(key.dmp1.toBuffer() as Uint8Array);\n    body.writeInteger(key.dmq1.toBuffer() as Uint8Array);\n    body.writeInteger(key.coeff.toBuffer() as Uint8Array);\n    body.endSequence();\n\n    const w = new DerWriter();\n    w.startSequence();\n    w.writeInteger(0); // version\n    w.startSequence();\n    w.writeOid(OID.RSA_ENCRYPTION);\n    w.writeNull();\n    w.endSequence();\n    w.writeOctetString(body.toBytes());\n    w.endSequence();\n\n    const bytes = w.toBytes();\n    return options.type === 'der' ? bytes : encodePem(bytes, PRIVATE_OPENING, PRIVATE_CLOSING);\n  },\n\n  privateImport(key: RSAKey, data: Uint8Array | string, options: ImportOptions = {}): void {\n    const buffer = resolveBytes(data, options, PRIVATE_OPENING, PRIVATE_CLOSING);\n    const outer = new DerReader(buffer).readSequence();\n    // RFC 5958 §2: PrivateKeyInfo / OneAsymmetricKey version ∈ {0, 1}.\n    const outerVersion = outer.readSmallInteger();\n    if (outerVersion !== 0 && outerVersion !== 1) {\n      throw new Error(`PKCS#8: unsupported version ${outerVersion} (RFC 5958 §2 requires 0 or 1)`);\n    }\n    const header = outer.readSequence();\n    const oid = header.readOid();\n    if (oid !== OID.RSA_ENCRYPTION) {\n      throw pkcs8OidError(oid, 'private');\n    }\n    header.readNull();\n    const body = new DerReader(outer.readOctetString()).readSequence();\n    // RFC 8017 §A.1.2: 0 = two-prime, 1 = multi-prime. Two-prime only.\n    const innerVersion = body.readSmallInteger();\n    if (innerVersion !== 0) {\n      throw new Error(\n        `PKCS#8: PKCS#1 multi-prime keys (version ${innerVersion}) are not supported`,\n      );\n    }\n    const n = body.readInteger();\n    const e = body.readSmallInteger();\n    const d = body.readInteger();\n    const p = body.readInteger();\n    const q = body.readInteger();\n    const dmp1 = body.readInteger();\n    const dmq1 = body.readInteger();\n    const coeff = body.readInteger();\n    key.setPrivate(n, e, d, p, q, dmp1, dmq1, coeff);\n  },\n\n  publicExport(key: RSAKey, options: ExportOptions = {}): Uint8Array | string {\n    if (!key.n) throw new Error('PKCS#8 export: missing modulus');\n    // Inner: SEQUENCE { n, e }\n    const inner = new DerWriter();\n    inner.startSequence();\n    inner.writeInteger(key.n.toBuffer() as Uint8Array);\n    inner.writeInteger(key.e);\n    inner.endSequence();\n\n    const w = new DerWriter();\n    w.startSequence();\n    w.startSequence();\n    w.writeOid(OID.RSA_ENCRYPTION);\n    w.writeNull();\n    w.endSequence();\n    w.writeBitString(inner.toBytes());\n    w.endSequence();\n\n    const bytes = w.toBytes();\n    return options.type === 'der' ? bytes : encodePem(bytes, PUBLIC_OPENING, PUBLIC_CLOSING);\n  },\n\n  publicImport(key: RSAKey, data: Uint8Array | string, options: ImportOptions = {}): void {\n    const buffer = resolveBytes(data, options, PUBLIC_OPENING, PUBLIC_CLOSING);\n    const outer = new DerReader(buffer).readSequence();\n    const header = outer.readSequence();\n    const oid = header.readOid();\n    if (oid !== OID.RSA_ENCRYPTION) {\n      throw pkcs8OidError(oid, 'public');\n    }\n    header.readNull();\n    const inner = new DerReader(outer.readBitString()).readSequence();\n    const n = inner.readInteger();\n    const e = inner.readSmallInteger();\n    key.setPublic(n, e);\n  },\n\n  autoImport(key: RSAKey, data: unknown): boolean {\n    const text =\n      typeof data === 'string'\n        ? data\n        : data instanceof Uint8Array\n          ? new TextDecoder().decode(data)\n          : null;\n    if (text === null) return false;\n    if (\n      /^[\\S\\s]*-----BEGIN PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END PRIVATE KEY-----[\\S\\s]*$/g.test(\n        text,\n      )\n    ) {\n      pkcs8Format.privateImport?.(key, text);\n      return true;\n    }\n    if (\n      /^[\\S\\s]*-----BEGIN PUBLIC KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END PUBLIC KEY-----[\\S\\s]*$/g.test(\n        text,\n      )\n    ) {\n      pkcs8Format.publicImport?.(key, text);\n      return true;\n    }\n    return false;\n  },\n};\n\n/**\n * RFC 5958 §2 and RFC 8017 require rsaEncryption (1.2.840.113549.1.1.1)\n * in the PKCS#8 privateKeyAlgorithm field — not PSS/OAEP-specific OIDs.\n * Some implementations get this wrong; surface a clear diagnostic instead\n * of a generic \"invalid format\" that tempts maintainers to relax the check.\n */\nfunction pkcs8OidError(oid: string, kind: 'private' | 'public'): Error {\n  if (oid === '1.2.840.113549.1.1.10') {\n    return new Error(\n      `PKCS#8 ${kind} key: RSASSA-PSS-only keys (1.2.840.113549.1.1.10) are not supported; expected rsaEncryption`,\n    );\n  }\n  if (oid === '1.2.840.113549.1.1.7') {\n    return new Error(\n      `PKCS#8 ${kind} key: RSAES-OAEP-only keys (1.2.840.113549.1.1.7) are not supported; expected rsaEncryption`,\n    );\n  }\n  return new Error(\n    `PKCS#8 ${kind} key: unsupported algorithm OID ${oid}; expected rsaEncryption (1.2.840.113549.1.1.1)`,\n  );\n}\n","import type { RSAKey } from '../rsa/key.js';\nimport { componentsFormat } from './components.js';\nimport { opensshFormat } from './openssh.js';\nimport { pkcs1Format } from './pkcs1.js';\nimport { pkcs8Format } from './pkcs8.js';\nimport type { FormatProvider, ImportOptions } from './types.js';\n\n/** Registry of built-in format providers, keyed by scheme name. */\nexport const FORMATS: Record<string, FormatProvider> = {\n  pkcs1: pkcs1Format,\n  pkcs8: pkcs8Format,\n  components: componentsFormat,\n  openssh: opensshFormat,\n};\n\ninterface ParsedFormat {\n  scheme: string;\n  keyType: 'private' | 'public';\n  keyOpt: ImportOptions;\n}\n\nfunction formatParse(format: string): ParsedFormat {\n  const parts = format.split('-');\n  let keyType: 'private' | 'public' = 'private';\n  const keyOpt: ImportOptions = { type: 'default' };\n  for (let i = 1; i < parts.length; i++) {\n    const p = parts[i];\n    if (p === 'public' || p === 'private') keyType = p;\n    else if (p === 'pem' || p === 'der') keyOpt.type = p;\n  }\n  return { scheme: parts[0] ?? '', keyType, keyOpt };\n}\n\n/**\n * Import `data` into `key`. If `format` is omitted, each provider's\n * `autoImport` is tried in registration order. Returns false only on\n * the no-format auto path when nothing matched; the explicit-format path\n * throws on unknown scheme or missing provider method.\n *\n * Format string is `<scheme>[-public|-private][-pem|-der]`, e.g.\n * `\"pkcs1-private-pem\"`. Defaults: keyType=private, type=default.\n */\nexport function detectAndImport(key: RSAKey, data: unknown, format?: string): boolean {\n  if (!format) {\n    for (const scheme of Object.values(FORMATS)) {\n      if (scheme.autoImport?.(key, data)) return true;\n    }\n    return false;\n  }\n  const fmt = formatParse(format);\n  const provider = FORMATS[fmt.scheme];\n  if (!provider) throw new Error('Unsupported key format');\n  if (fmt.keyType === 'private') {\n    if (!provider.privateImport) throw new Error(`Format ${fmt.scheme} has no privateImport`);\n    provider.privateImport(key, data, fmt.keyOpt);\n  } else {\n    if (!provider.publicImport) throw new Error(`Format ${fmt.scheme} has no publicImport`);\n    provider.publicImport(key, data, fmt.keyOpt);\n  }\n  return true;\n}\n\n/**\n * Export `key` in the given format. Returns undefined if `format` is omitted.\n * Throws if the scheme is unknown, the key lacks the requested half\n * (private/public), or the provider doesn't implement that direction.\n * Format string syntax matches {@link detectAndImport}.\n */\nexport function detectAndExport(\n  key: RSAKey,\n  format?: string,\n): Uint8Array | string | object | undefined {\n  if (!format) return undefined;\n  const fmt = formatParse(format);\n  const provider = FORMATS[fmt.scheme];\n  if (!provider) throw new Error('Unsupported key format');\n  if (fmt.keyType === 'private') {\n    if (!key.isPrivate()) throw new Error('This is not private key');\n    if (!provider.privateExport) throw new Error(`Format ${fmt.scheme} has no privateExport`);\n    return provider.privateExport(key, fmt.keyOpt);\n  }\n  if (!key.isPublic()) throw new Error('This is not public key');\n  if (!provider.publicExport) throw new Error(`Format ${fmt.scheme} has no publicExport`);\n  return provider.publicExport(key, fmt.keyOpt);\n}\n\nexport type { PrivateComponents, PublicComponents } from './components.js';\nexport type { ExportOptions, FormatProvider, ImportOptions } from './types.js';\nexport { componentsFormat, opensshFormat, pkcs1Format, pkcs8Format };\n","import type { HashingAlgorithm } from './types.js';\n\nexport const DIGEST_LENGTH: Readonly<Record<HashingAlgorithm, number>> = Object.freeze({\n  md4: 16,\n  md5: 16,\n  ripemd160: 20,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n});\n","import { concat, constantTimeEqual, writeUInt32BE } from '../crypto/bytes.js';\nimport { DIGEST_LENGTH } from '../crypto/digest-length.js';\nimport type { CryptoBackend, HashingAlgorithm } from '../crypto/types.js';\nimport type { RSAKey } from '../rsa/key.js';\nimport type { EncryptionSchemeImpl, MaskGenerationFunction, SchemeOptions } from './types.js';\n\nconst DEFAULT_HASH: HashingAlgorithm = 'sha1';\n\n/** Default MGF1 implementation bound to a backend. */\nexport function mgf1(\n  seed: Uint8Array,\n  maskLength: number,\n  hash: HashingAlgorithm,\n  backend: CryptoBackend,\n): Uint8Array {\n  const hLen = DIGEST_LENGTH[hash];\n  const count = Math.ceil(maskLength / hLen);\n  const out = new Uint8Array(hLen * count);\n  const counter = new Uint8Array(4);\n  for (let i = 0; i < count; i++) {\n    writeUInt32BE(i, counter, 0);\n    const h = backend.digest(hash, concat(seed, counter));\n    out.set(h, i * hLen);\n  }\n  return out.subarray(0, maskLength);\n}\n\nclass OaepScheme implements EncryptionSchemeImpl {\n  constructor(\n    private readonly key: RSAKey,\n    private readonly options: SchemeOptions,\n  ) {}\n\n  private hash(): HashingAlgorithm {\n    return this.options.encryptionSchemeOptions.hash ?? DEFAULT_HASH;\n  }\n\n  private mgf(): MaskGenerationFunction {\n    const userMgf = this.options.encryptionSchemeOptions.mgf;\n    if (userMgf) return userMgf;\n    const backend = this.options.backend;\n    return (seed, maskLength, hash) => mgf1(seed, maskLength, hash, backend);\n  }\n\n  maxMessageLength(): number {\n    return this.key.encryptedDataLength - 2 * DIGEST_LENGTH[this.hash()] - 2;\n  }\n\n  encPad(buffer: Uint8Array): Uint8Array {\n    const hash = this.hash();\n    const mgf = this.mgf();\n    const label = this.options.encryptionSchemeOptions.label ?? new Uint8Array(0);\n    const emLen = this.key.encryptedDataLength;\n    const hLen = DIGEST_LENGTH[hash];\n\n    if (buffer.length > emLen - 2 * hLen - 2) {\n      throw new Error(\n        `Message is too long to encode into an encoded message with a length of ${emLen} bytes, increaseemLen to fix this error (minimum size: ${emLen - 2 * hLen - 2})`,\n      );\n    }\n\n    const lHash = this.options.backend.digest(hash, label);\n    const PS = new Uint8Array(emLen - buffer.length - 2 * hLen - 1);\n    PS[PS.length - 1] = 1;\n    const DB = concat(lHash, PS, buffer);\n    const seed = this.options.backend.randomBytes(hLen);\n\n    const dbMask = mgf(seed, DB.length, hash);\n    for (let i = 0; i < DB.length; i++) DB[i] = (DB[i] as number) ^ (dbMask[i] as number);\n\n    const seedMask = mgf(DB, hLen, hash);\n    for (let i = 0; i < seed.length; i++) seed[i] = (seed[i] as number) ^ (seedMask[i] as number);\n\n    const em = new Uint8Array(1 + seed.length + DB.length);\n    em[0] = 0;\n    em.set(seed, 1);\n    em.set(DB, 1 + seed.length);\n    return em;\n  }\n\n  /**\n   * Constant-time OAEP decode per RFC 8017 §7.1.2: all failure modes —\n   * wrong Y byte, lHash mismatch, no 0x01 separator, message length over\n   * the geometric maximum — must be indistinguishable in timing or a\n   * Manger oracle recovers plaintext in ~10⁵ queries. We accumulate a\n   * single `bad` flag without branches and return null once at the end.\n   */\n  encUnPad(buffer: Uint8Array): Uint8Array | null {\n    const hash = this.hash();\n    const mgf = this.mgf();\n    const label = this.options.encryptionSchemeOptions.label ?? new Uint8Array(0);\n    const hLen = DIGEST_LENGTH[hash];\n\n    // Length precondition — public-known info (key size), safe to branch on.\n    if (buffer.length < 2 * hLen + 2) return null;\n\n    // From here on, all checks are constant-time and accumulate into `bad`.\n    const work = buffer.slice();\n\n    // RFC 8017 §7.1.2 step 3: Y (the leading byte) must equal 0x00.\n    let bad = work[0] === 0x00 ? 0 : 1;\n\n    const seed = work.subarray(1, hLen + 1);\n    const DB = work.subarray(1 + hLen);\n\n    const seedMask = mgf(DB, hLen, hash);\n    for (let i = 0; i < seed.length; i++) seed[i] = (seed[i] as number) ^ (seedMask[i] as number);\n\n    const dbMask = mgf(seed, DB.length, hash);\n    for (let i = 0; i < DB.length; i++) DB[i] = (DB[i] as number) ^ (dbMask[i] as number);\n\n    // lHash compare in constant time.\n    const lHash = this.options.backend.digest(hash, label);\n    const lHashEM = DB.subarray(0, hLen);\n    bad |= constantTimeEqual(lHashEM, lHash) ? 0 : 1;\n\n    // Constant-iteration separator scan. Walk the entire DB from hLen onward,\n    // recording the position of the first 0x01 byte. Any non-{0x00,0x01} byte\n    // before the separator, or no separator at all, marks `bad`.\n    let found = 0;\n    let msgStart = 0;\n    for (let j = hLen; j < DB.length; j++) {\n      const b = DB[j] as number;\n      // isOne = 1 if b==0x01 else 0 (constant-time, no branch).\n      const isOne = (((b ^ 0x01) - 1) >>> 31) & 1;\n      // isZero = 1 if b==0x00 else 0.\n      const isZero = (((b | -b) >>> 31) ^ 1) & 1;\n      const notFoundYet = (1 - found) & 1;\n      // Record msgStart = j+1 (first byte after the separator) the first\n      // time we see 0x01. Use arithmetic mask, not branch.\n      const recordMask = -(notFoundYet & isOne);\n      msgStart = (msgStart & ~recordMask) | ((j + 1) & recordMask);\n      // Before separator, any byte ≠ 0x00 and ≠ 0x01 marks bad.\n      bad |= notFoundYet & (1 - isOne) & (1 - isZero);\n      found |= isOne;\n    }\n    bad |= 1 - found;\n\n    if (bad) return null;\n\n    const msg = DB.subarray(msgStart).slice();\n    // RFC 8017 §7.1.1 step 1.b: enforce mLen ≤ k − 2hLen − 2.\n    if (msg.length > this.maxMessageLength()) return null;\n    return msg;\n  }\n}\n\nexport const oaepScheme = {\n  isEncryption: true as const,\n  isSignature: false as const,\n  makeScheme(key: RSAKey, options: SchemeOptions): EncryptionSchemeImpl {\n    return new OaepScheme(key, options);\n  },\n};\n","import { concat, constantTimeEqual, fromHex } from '../crypto/bytes.js';\nimport type { HashingAlgorithm } from '../crypto/types.js';\nimport type { RSAKey } from '../rsa/key.js';\nimport type { EncryptionSchemeImpl, SchemeOptions, SignatureScheme } from './types.js';\n\nexport const RSA_NO_PADDING = 3;\n\nconst SIGN_INFO_HEAD: Partial<Record<HashingAlgorithm, Uint8Array>> = {\n  md5: fromHex('3020300c06082a864886f70d020505000410'),\n  sha1: fromHex('3021300906052b0e03021a05000414'),\n  sha224: fromHex('302d300d06096086480165030402040500041c'),\n  sha256: fromHex('3031300d060960864801650304020105000420'),\n  sha384: fromHex('3041300d060960864801650304020205000430'),\n  sha512: fromHex('3051300d060960864801650304020305000440'),\n  ripemd160: fromHex('3021300906052b2403020105000414'),\n};\n\nconst DEFAULT_HASH: HashingAlgorithm = 'sha256';\n\nclass Pkcs1Scheme implements EncryptionSchemeImpl, SignatureScheme {\n  constructor(\n    private readonly key: RSAKey,\n    private readonly options: SchemeOptions,\n  ) {}\n\n  private noPadding(): boolean {\n    return this.options.encryptionSchemeOptions.padding === RSA_NO_PADDING;\n  }\n\n  maxMessageLength(): number {\n    if (this.noPadding()) return this.key.encryptedDataLength;\n    return this.key.encryptedDataLength - 11;\n  }\n\n  encPad(buffer: Uint8Array, opts?: { type?: number }): Uint8Array {\n    const { type } = opts ?? {};\n\n    if (buffer.length > this.maxMessageLength()) {\n      throw new Error(\n        `Message too long for RSA (n=${this.key.encryptedDataLength}, l=${buffer.length})`,\n      );\n    }\n\n    if (this.noPadding()) {\n      const filled = new Uint8Array(this.maxMessageLength() - buffer.length);\n      return concat(filled, buffer);\n    }\n\n    if (type === 1) {\n      // Type 1: zeros padding for private-key encrypt (signing)\n      const filled = new Uint8Array(this.key.encryptedDataLength - buffer.length - 1);\n      filled.fill(0xff, 0, filled.length - 1);\n      filled[0] = 1;\n      filled[filled.length - 1] = 0;\n      return concat(filled, buffer);\n    }\n\n    // Type 2: random non-zero padding for public-key encrypt\n    const filled = new Uint8Array(this.key.encryptedDataLength - buffer.length);\n    filled[0] = 0;\n    filled[1] = 2;\n    const rand = this.options.backend.randomBytes(filled.length - 3);\n    for (let i = 0; i < rand.length; i++) {\n      let r = rand[i] as number;\n      while (r === 0) {\n        r = this.options.backend.randomBytes(1)[0] as number;\n      }\n      filled[i + 2] = r;\n    }\n    filled[filled.length - 1] = 0;\n    return concat(filled, buffer);\n  }\n\n  /**\n   * Constant-time PKCS#1 v1.5 decode per RFC 8017 §7.2.2: header byte,\n   * padding-type byte, PS validity, and minimum PS length all accumulate\n   * into a single bitwise `bad` flag with no early return; one `return\n   * null` for all failure modes.\n   *\n   * Full Bleichenbacher mitigation (RFC §7.2.2 NOTE — return synthetic\n   * plaintext instead of null) would require session-key plumbing and an\n   * API change (callers expect a throw). This closes only the internal\n   * differential timing oracle; the valid/invalid binary oracle inherent\n   * to PKCS#1 v1.5 remains — use OAEP for untrusted ciphertexts.\n   */\n  encUnPad(buffer: Uint8Array, opts?: { type?: number }): Uint8Array | null {\n    const { type } = opts ?? {};\n\n    if (this.noPadding()) {\n      // RSA_NO_PADDING: strip leading zero pad — matches legacy\n      // lastIndexOf('\\0') semantics. Not security-sensitive (no padding).\n      let lastZero = -1;\n      for (let j = buffer.length - 1; j >= 0; j--) {\n        if (buffer[j] === 0) {\n          lastZero = j;\n          break;\n        }\n      }\n      return buffer.subarray(lastZero + 1).slice();\n    }\n\n    // Length precondition — public-known (= key chunk size); safe to branch.\n    if (buffer.length < 11) return null;\n\n    const expectedType = type === 1 ? 1 : 2;\n\n    // From here on: all checks accumulate into `bad`; no branch on data.\n    let bad = buffer[0] as number; // must be 0x00\n    bad |= (buffer[1] as number) ^ expectedType; // must match type\n\n    let found = 0;\n    let sepPos = 0;\n    for (let i = 2; i < buffer.length; i++) {\n      const b = buffer[i] as number;\n      const isZero = (((b | -b) >>> 31) ^ 1) & 1; // 1 if b == 0\n      const notFoundYet = (1 - found) & 1;\n      if (expectedType === 1) {\n        // PS bytes must be 0xff. Mark `bad` if a byte before separator is\n        // neither 0xff (continue PS) nor 0x00 (separator).\n        const isNotFF = ((b ^ 0xff) === 0 ? 0 : 1) & 1;\n        bad |= notFoundYet & (1 - isZero) & isNotFF;\n      }\n      // For type 2: PS bytes are random non-zero; first 0x00 is the separator.\n      // No per-byte check needed beyond the separator-position validation below.\n\n      // Record sepPos = i the first time we see 0x00.\n      const recordMask = -(notFoundYet & isZero);\n      sepPos = (sepPos & ~recordMask) | (i & recordMask);\n      found |= isZero;\n    }\n    bad |= 1 - found;\n    // PS must be ≥ 8 bytes (RFC 8017 §7.2.1) → sepPos ≥ 10 (indices 2..9 inclusive are PS).\n    bad |= ((sepPos - 10) >>> 31) & 1;\n\n    if (bad) return null;\n    return buffer.subarray(sepPos + 1).slice();\n  }\n\n  sign(buffer: Uint8Array): Uint8Array {\n    const hashAlgorithm = this.options.signingSchemeOptions.hash ?? DEFAULT_HASH;\n    const hash = this.options.backend.digest(hashAlgorithm, buffer);\n    const padded = this.pkcs1pad(hash, hashAlgorithm);\n    const signed = this.key.$doPrivate(new this.key.BI(padded));\n    const out = signed.toBuffer(this.key.encryptedDataLength);\n    if (!out) throw new Error('PKCS#1 sign: output overflow');\n    return out;\n  }\n\n  verify(buffer: Uint8Array, signature: Uint8Array): boolean {\n    if (this.noPadding()) return false; // RSA_NO_PADDING has no verify data\n    const hashAlgorithm = this.options.signingSchemeOptions.hash ?? DEFAULT_HASH;\n    const hash = this.options.backend.digest(hashAlgorithm, buffer);\n    const padded = this.pkcs1pad(hash, hashAlgorithm);\n    // RFC 8017 §8.2.2 step 2.b: an out-of-range signature representative\n    // (or any other RSA-primitive failure) must yield \"invalid signature\",\n    // not a thrown error.\n    let m: Uint8Array | null;\n    try {\n      m = this.key.$doPublic(new this.key.BI(signature)).toBuffer();\n    } catch {\n      return false;\n    }\n    if (!m) return false;\n    return constantTimeEqual(m, padded);\n  }\n\n  pkcs1pad(hashBuf: Uint8Array, hashAlgorithm: HashingAlgorithm): Uint8Array {\n    const digest = SIGN_INFO_HEAD[hashAlgorithm];\n    if (!digest) throw new Error(`Unsupported hash algorithm: ${hashAlgorithm}`);\n    const data = concat(digest, hashBuf);\n    if (data.length + 10 > this.key.encryptedDataLength) {\n      throw new Error(`Key is too short for signing algorithm (${hashAlgorithm})`);\n    }\n    const filled = new Uint8Array(this.key.encryptedDataLength - data.length - 1);\n    filled.fill(0xff, 0, filled.length - 1);\n    filled[0] = 1;\n    filled[filled.length - 1] = 0;\n    return concat(filled, data);\n  }\n}\n\nexport const pkcs1Scheme = {\n  isEncryption: true as const,\n  isSignature: true as const,\n  makeScheme(key: RSAKey, options: SchemeOptions): EncryptionSchemeImpl & SignatureScheme {\n    return new Pkcs1Scheme(key, options);\n  },\n};\n","import { constantTimeEqual } from '../crypto/bytes.js';\nimport { DIGEST_LENGTH } from '../crypto/digest-length.js';\nimport type { HashingAlgorithm } from '../crypto/types.js';\nimport type { RSAKey } from '../rsa/key.js';\nimport { mgf1 } from './oaep.js';\nimport type { MaskGenerationFunction, SchemeOptions, SignatureScheme } from './types.js';\n\nconst DEFAULT_HASH: HashingAlgorithm = 'sha1';\nconst DEFAULT_SALT_LENGTH = 20;\n\nclass PssScheme implements SignatureScheme {\n  constructor(\n    private readonly key: RSAKey,\n    private readonly options: SchemeOptions,\n  ) {}\n\n  private hash(): HashingAlgorithm {\n    return this.options.signingSchemeOptions.hash ?? DEFAULT_HASH;\n  }\n\n  private mgf(): MaskGenerationFunction {\n    const userMgf = this.options.signingSchemeOptions.mgf;\n    if (userMgf) return userMgf;\n    const backend = this.options.backend;\n    return (seed, maskLength, hash) => mgf1(seed, maskLength, hash, backend);\n  }\n\n  private saltLen(): number {\n    return this.options.signingSchemeOptions.saltLength ?? DEFAULT_SALT_LENGTH;\n  }\n\n  sign(buffer: Uint8Array): Uint8Array {\n    const hash = this.hash();\n    const mHash = this.options.backend.digest(hash, buffer);\n    const encoded = this.emsaPssEncode(mHash, this.key.keySize - 1);\n    const signed = this.key.$doPrivate(new this.key.BI(encoded));\n    const out = signed.toBuffer(this.key.encryptedDataLength);\n    if (!out) throw new Error('PSS sign: output overflow');\n    return out;\n  }\n\n  verify(buffer: Uint8Array, signature: Uint8Array): boolean {\n    const hash = this.hash();\n    const emLen = Math.ceil((this.key.keySize - 1) / 8);\n    // RFC 8017 §8.1.2 step 2.b: signature-representative out of range\n    // (or any other RSA-primitive failure) yields \"invalid signature\",\n    // not a thrown error.\n    let m: Uint8Array | null;\n    try {\n      m = this.key.$doPublic(new this.key.BI(signature)).toBuffer(emLen);\n    } catch {\n      return false;\n    }\n    if (!m) return false;\n    const mHash = this.options.backend.digest(hash, buffer);\n    return this.emsaPssVerify(mHash, m, this.key.keySize - 1);\n  }\n\n  /** EMSA-PSS-ENCODE — RFC 3447 §9.1.1 */\n  private emsaPssEncode(mHash: Uint8Array, emBits: number): Uint8Array {\n    const hash = this.hash();\n    const mgf = this.mgf();\n    const sLen = this.saltLen();\n    const hLen = DIGEST_LENGTH[hash];\n    const emLen = Math.ceil(emBits / 8);\n\n    if (emLen < hLen + sLen + 2) {\n      throw new Error(\n        `Output length passed to emBits(${emBits}) is too small for the options specified(${hash}, ${sLen}). To fix this issue increase the value of emBits. (minimum size: ${8 * hLen + 8 * sLen + 9})`,\n      );\n    }\n\n    const salt = this.options.backend.randomBytes(sLen);\n\n    const mPrime = new Uint8Array(8 + hLen + sLen);\n    mPrime.set(mHash, 8);\n    mPrime.set(salt, 8 + mHash.length);\n\n    const H = this.options.backend.digest(hash, mPrime);\n\n    const DB = new Uint8Array(emLen - hLen - 1);\n    DB[emLen - hLen - 1 - sLen - 1] = 0x01;\n    DB.set(salt, emLen - hLen - 1 - sLen);\n\n    const dbMask = mgf(H, DB.length, hash);\n    for (let i = 0; i < DB.length; i++) DB[i] = (DB[i] as number) ^ (dbMask[i] as number);\n\n    const bits = 8 * emLen - emBits;\n    const mask = 0xff ^ (((0xff >> (8 - bits)) << (8 - bits)) & 0xff);\n    DB[0] = (DB[0] as number) & mask;\n\n    const EM = new Uint8Array(emLen);\n    EM.set(DB, 0);\n    EM.set(H, DB.length);\n    EM[EM.length - 1] = 0xbc;\n    return EM;\n  }\n\n  /**\n   * EMSA-PSS-VERIFY per RFC 8017 §9.1.2. All input-dependent checks\n   * (trailer byte, leftmost-bits zero, PS-zeros, separator 0x01, H == H')\n   * accumulate into a single `bad` flag with one `return bad === 0` at the\n   * end. PSS verify operates on public data, so this is hygiene rather\n   * than a tight side-channel requirement — but RFC step 11 mandates\n   * evaluating all checks before deciding.\n   */\n  private emsaPssVerify(mHash: Uint8Array, EM: Uint8Array, emBits: number): boolean {\n    const hash = this.hash();\n    const mgf = this.mgf();\n    const sLen = this.saltLen();\n    const hLen = DIGEST_LENGTH[hash];\n    const emLen = Math.ceil(emBits / 8);\n\n    // Geometry preconditions: configured by the caller, not derived from\n    // attacker input — early return is safe.\n    if (emLen < hLen + sLen + 2) return false;\n    if (EM.length !== emLen) return false;\n\n    let bad = 0;\n\n    // RFC step 4: trailer byte must be 0xbc.\n    bad |= (EM[EM.length - 1] as number) ^ 0xbc;\n\n    const DB = EM.slice(0, emLen - hLen - 1);\n    const bits = 8 * emLen - emBits;\n\n    // RFC step 6: leftmost (8*emLen - emBits) bits of maskedDB[0] must be 0.\n    let topMask = 0;\n    for (let i = 0; i < bits; i++) topMask |= 1 << (7 - i);\n    bad |= (DB[0] as number) & topMask;\n\n    const H = EM.subarray(emLen - hLen - 1, emLen - 1);\n    const dbMask = mgf(H, DB.length, hash);\n    for (let i = 0; i < DB.length; i++) DB[i] = (DB[i] as number) ^ (dbMask[i] as number);\n\n    // RFC step 9: zero the masked top bits of DB[0] after unmasking.\n    const adjustedMask = 0xff ^ (((0xff >> (8 - bits)) << (8 - bits)) & 0xff);\n    DB[0] = (DB[0] as number) & adjustedMask;\n\n    // RFC step 10: DB = PS (all zeros) || 0x01 || salt, where\n    // |PS| = emLen - hLen - sLen - 2, so 0x01 sits at index |PS| of DB.\n    const sepIdx = emLen - hLen - sLen - 2;\n    for (let i = 0; i < DB.length; i++) {\n      const b = DB[i] as number;\n      if (i < sepIdx) {\n        bad |= b; // must be 0x00\n      } else if (i === sepIdx) {\n        bad |= b ^ 0x01; // must be 0x01\n      }\n      // i > sepIdx: salt, no check (validated via H' below)\n    }\n\n    // RFC steps 12-13: recompute H' = Hash(0x00⁸ || mHash || salt) and compare.\n    const salt = DB.subarray(DB.length - sLen);\n    const mPrime = new Uint8Array(8 + hLen + sLen);\n    mPrime.set(mHash, 8);\n    mPrime.set(salt, 8 + mHash.length);\n    const HPrime = this.options.backend.digest(hash, mPrime);\n\n    bad |= constantTimeEqual(H, HPrime) ? 0 : 1;\n\n    return bad === 0;\n  }\n}\n\nexport const pssScheme = {\n  isEncryption: false as const,\n  isSignature: true as const,\n  makeScheme(key: RSAKey, options: SchemeOptions): SignatureScheme {\n    return new PssScheme(key, options);\n  },\n};\n","import type { RSAKey } from '../rsa/key.js';\nimport { oaepScheme } from './oaep.js';\nimport { pkcs1Scheme, RSA_NO_PADDING } from './pkcs1.js';\nimport { pssScheme } from './pss.js';\nimport type { EncryptionSchemeImpl, SchemeOptions, SignatureScheme } from './types.js';\n\nexport interface SchemeProvider {\n  isEncryption: boolean;\n  isSignature: boolean;\n  makeScheme(key: RSAKey, options: SchemeOptions): EncryptionSchemeImpl | SignatureScheme;\n}\n\nexport const SCHEMES: Record<string, SchemeProvider> = {\n  pkcs1: pkcs1Scheme,\n  pkcs1_oaep: oaepScheme,\n  pss: pssScheme,\n};\n\nexport type {\n  EncryptionSchemeImpl,\n  EncryptionSchemeOptions,\n  MaskGenerationFunction,\n  SchemeOptions,\n  SignatureScheme,\n  SigningSchemeOptions,\n} from './types.js';\nexport { oaepScheme, pkcs1Scheme, pssScheme, RSA_NO_PADDING };\n","import { setBigIntegerImpl } from './bigint/big-integer.js';\nimport type { HashingAlgorithm } from './crypto/types.js';\nimport { SCHEMES } from './schemes/index.js';\nimport type { EncryptionSchemeOptions, SigningSchemeOptions } from './schemes/types.js';\nimport type {\n  EncryptionScheme,\n  Environment,\n  NodeRSAOptions,\n  ResolvedOptions,\n  SigningScheme,\n} from './types.js';\n\nconst NODE_HASHES: ReadonlyArray<HashingAlgorithm> = [\n  'md4',\n  'md5',\n  'ripemd160',\n  'sha1',\n  'sha224',\n  'sha256',\n  'sha384',\n  'sha512',\n];\n\n// Legacy v1 exposed four environment values: 'node', 'browser', plus\n// 'node10' and 'iojs' as Node aliases (each retaining the same hash list).\n// v2 treats 'node10' and 'iojs' as 'node'-equivalents for the hash whitelist\n// so that any user setOptions({environment:'iojs'}) keeps working.\nexport const SUPPORTED_HASH_ALGORITHMS: Record<string, ReadonlyArray<HashingAlgorithm>> = {\n  node: NODE_HASHES,\n  node10: NODE_HASHES,\n  iojs: NODE_HASHES,\n  browser: ['md5', 'ripemd160', 'sha1', 'sha256', 'sha512'],\n};\n\nfunction allowedHashes(env: string): ReadonlyArray<HashingAlgorithm> {\n  return SUPPORTED_HASH_ALGORITHMS[env] ?? NODE_HASHES;\n}\n\nexport const DEFAULT_ENCRYPTION_SCHEME: EncryptionScheme = 'pkcs1_oaep';\n// PSS (RSASSA-PSS) is the modern best-practice signing scheme —\n// probabilistic, with a provable security reduction. Callers needing the\n// v1-era PKCS#1 v1.5 default must set `signingScheme: 'pkcs1'` explicitly.\nexport const DEFAULT_SIGNING_SCHEME: SigningScheme = 'pss';\n\nexport const EXPORT_FORMAT_ALIASES: Record<string, string> = {\n  private: 'pkcs1-private-pem',\n  'private-der': 'pkcs1-private-der',\n  public: 'pkcs8-public-pem',\n  'public-der': 'pkcs8-public-der',\n};\n\nexport function makeDefaultOptions(environment: Environment): ResolvedOptions {\n  return {\n    signingScheme: DEFAULT_SIGNING_SCHEME,\n    signingSchemeOptions: { hash: 'sha256' },\n    encryptionScheme: DEFAULT_ENCRYPTION_SCHEME,\n    encryptionSchemeOptions: { hash: 'sha1' },\n    environment,\n    // Mirrors the per-bundle default flipped by the entry module\n    // (index.browser.ts switches to 'native' at load; index.node.ts leaves\n    // 'jsbn'). Stored on ResolvedOptions so callers can read the active\n    // setting back off the NodeRSA instance.\n    bigIntImpl: environment === 'browser' ? 'native' : 'jsbn',\n  };\n}\n\nlet warnedEnvironment = false;\n\n/**\n * Apply user-supplied options on top of the resolved defaults, mutating\n * `target` in-place. Mirrors v1's setOptions string-parsing rules:\n *\n *  - \"pkcs1\" → scheme = pkcs1, no hash override\n *  - \"sha256\" → scheme = default (pkcs1), hash = sha256\n *  - \"pss-sha512\" → scheme = pss, hash = sha512\n *  - { scheme, hash, ... } → object form, scheme defaults to default\n */\nexport function applyOptions(target: ResolvedOptions, options: NodeRSAOptions): void {\n  if (options.bigIntImpl) {\n    // Side effect: globally swap the BigInteger implementation. The selector\n    // module guards the fallback for runtimes without globalThis.BigInt.\n    setBigIntegerImpl(options.bigIntImpl);\n    target.bigIntImpl = options.bigIntImpl;\n  }\n\n  if (options.environment) {\n    if (options.environment !== target.environment && !warnedEnvironment) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'NodeRSA: setOptions({environment}) is deprecated. Build-time platform conditions decide the runtime; the option now only forces the pure-JS engine path.',\n      );\n      warnedEnvironment = true;\n    }\n    target.environment = options.environment;\n  }\n\n  if (options.signingScheme !== undefined) {\n    if (typeof options.signingScheme === 'string') {\n      const parts = options.signingScheme.toLowerCase().split('-');\n      if (parts.length === 1) {\n        if (NODE_HASHES.includes(parts[0] as HashingAlgorithm)) {\n          target.signingSchemeOptions = { hash: parts[0] as HashingAlgorithm };\n          target.signingScheme = DEFAULT_SIGNING_SCHEME;\n        } else {\n          target.signingScheme = parts[0] as SigningScheme;\n          target.signingSchemeOptions = {};\n        }\n      } else {\n        target.signingScheme = parts[0] as SigningScheme;\n        target.signingSchemeOptions = { hash: parts[1] as HashingAlgorithm };\n      }\n    } else {\n      const obj = options.signingScheme;\n      target.signingScheme = (obj.scheme ?? DEFAULT_SIGNING_SCHEME) as SigningScheme;\n      const { scheme: _scheme, ...rest } = obj;\n      target.signingSchemeOptions = rest as SigningSchemeOptions;\n    }\n\n    if (!SCHEMES[target.signingScheme]?.isSignature) {\n      throw new Error('Unsupported signing scheme');\n    }\n    if (\n      target.signingSchemeOptions.hash &&\n      !allowedHashes(target.environment).includes(target.signingSchemeOptions.hash)\n    ) {\n      throw new Error(`Unsupported hashing algorithm for ${target.environment} environment`);\n    }\n    if (\n      target.signingSchemeOptions.hash &&\n      (target.signingSchemeOptions.hash === 'md4' || target.signingSchemeOptions.hash === 'md5')\n    ) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `node-rsa: ${target.signingSchemeOptions.hash} is cryptographically broken for signatures; use sha256 or stronger`,\n      );\n    }\n  }\n\n  if (options.encryptionScheme !== undefined) {\n    if (typeof options.encryptionScheme === 'string') {\n      target.encryptionScheme = options.encryptionScheme.toLowerCase() as EncryptionScheme;\n      target.encryptionSchemeOptions = {};\n    } else {\n      const obj = options.encryptionScheme;\n      target.encryptionScheme = (obj.scheme ?? DEFAULT_ENCRYPTION_SCHEME) as EncryptionScheme;\n      const { scheme: _scheme, ...rest } = obj;\n      target.encryptionSchemeOptions = rest as EncryptionSchemeOptions;\n    }\n\n    if (!SCHEMES[target.encryptionScheme]?.isEncryption) {\n      throw new Error('Unsupported encryption scheme');\n    }\n    if (\n      target.encryptionSchemeOptions.hash &&\n      !allowedHashes(target.environment).includes(target.encryptionSchemeOptions.hash)\n    ) {\n      throw new Error(`Unsupported hashing algorithm for ${target.environment} environment`);\n    }\n  }\n}\n","import { concat } from '../crypto/bytes.js';\nimport { pkcs1Scheme as pkcs1Provider } from '../schemes/pkcs1.js';\nimport type { EncryptionSchemeImpl, SchemeOptions, SignatureScheme } from '../schemes/types.js';\nimport type { RSAKey } from './key.js';\n\n/**\n * Engine handles full encrypt/decrypt for arbitrarily-long buffers by\n * chunking, applying the encryption scheme's padding, and invoking the\n * RSA primitive (key.$doPublic / $doPrivate).\n *\n * Type-1 path (encryptPrivate, decryptPublic) is *always* PKCS#1 v1.5,\n * even when the configured encryptionScheme is OAEP.\n */\nexport interface Engine {\n  /**\n   * Pad and encrypt `buffer`, splitting into key-size chunks as needed.\n   * `usePrivate=true` selects the \"sign-with-PKCS#1-type-1\" path (always\n   * PKCS#1 v1.5, regardless of the configured encryption scheme).\n   */\n  encrypt(buffer: Uint8Array, usePrivate?: boolean): Uint8Array;\n  /**\n   * Decrypt and unpad. `usePublic=true` mirrors `encrypt`'s type-1 path —\n   * verifies a public-decryptable PKCS#1 v1.5 message. Throws on length\n   * mismatch or invalid padding.\n   */\n  decrypt(buffer: Uint8Array, usePublic?: boolean): Uint8Array;\n}\n\n/** Pure-JS RSA encrypt/decrypt — runs the primitive via `RSAKey.$doPublic`/`$doPrivate`. */\nexport class JsEngine implements Engine {\n  /** Always a PKCS#1 v1.5 scheme — used for usePrivate / usePublic paths. */\n  private readonly pkcs1: EncryptionSchemeImpl;\n\n  constructor(private readonly key: RSAKey) {\n    this.pkcs1 = pkcs1Provider.makeScheme(key, key.options) as EncryptionSchemeImpl &\n      SignatureScheme;\n  }\n\n  encrypt(buffer: Uint8Array, usePrivate = false): Uint8Array {\n    const max = this.key.maxMessageLength;\n    if (max <= 0) throw new Error('Engine: key not initialised');\n    const buffersCount = Math.ceil(buffer.length / max) || 1;\n    const dividedSize = Math.ceil(buffer.length / buffersCount) || 1;\n\n    const chunks: Uint8Array[] = [];\n    if (buffersCount === 1) {\n      chunks.push(buffer);\n    } else {\n      for (let i = 0; i < buffersCount; i++) {\n        chunks.push(buffer.subarray(i * dividedSize, (i + 1) * dividedSize));\n      }\n    }\n\n    const out: Uint8Array[] = [];\n    for (const chunk of chunks) {\n      const padded = usePrivate\n        ? this.pkcs1.encPad(chunk, { type: 1 })\n        : this.key.encryptionScheme.encPad(chunk);\n      const bi = new this.key.BI(padded);\n      const result = usePrivate ? this.key.$doPrivate(bi) : this.key.$doPublic(bi);\n      const bytes = result.toBuffer(this.key.encryptedDataLength);\n      if (!bytes) throw new Error('Engine: RSA primitive returned oversize integer');\n      out.push(bytes);\n    }\n    return concat(...out);\n  }\n\n  decrypt(buffer: Uint8Array, usePublic = false): Uint8Array {\n    const chunkLen = this.key.encryptedDataLength;\n    if (buffer.length % chunkLen !== 0) {\n      throw new Error('Incorrect data or key');\n    }\n    const count = buffer.length / chunkLen;\n    const parts: Uint8Array[] = [];\n    let bad = 0;\n\n    for (let i = 0; i < count; i++) {\n      const off = i * chunkLen;\n      const ct = buffer.subarray(off, off + chunkLen);\n      const bi = new this.key.BI(ct);\n      const result = usePublic ? this.key.$doPublic(bi) : this.key.$doPrivate(bi);\n      const padded = result.toBuffer(chunkLen);\n      if (!padded) throw new Error('Engine: RSA primitive returned oversize integer');\n      const unpadded = usePublic\n        ? this.pkcs1.encUnPad(padded, { type: 1 })\n        : this.key.encryptionScheme.encUnPad(padded);\n      // Always perform equivalent work regardless of padding validity\n      // to prevent timing side-channels (Bleichenbacher-style attacks).\n      parts.push(unpadded ?? padded.subarray(0, 0));\n      bad |= unpadded ? 0 : 1;\n    }\n    if (bad) throw new Error('Decryption failed');\n    return concat(...parts);\n  }\n}\n\n// Re-export type for the SchemeOptions import that's used elsewhere\nexport type { SchemeOptions };\n","import { BigInteger } from '../bigint/big-integer.js';\nimport type { CryptoBackend } from '../crypto/types.js';\nimport type { EncryptionSchemeImpl, SchemeOptions, SignatureScheme } from '../schemes/types.js';\n\n// One-shot guard so repeated small-key calls don't spam stderr.\nlet warnedSmallKey = false;\n\n/**\n * Asymmetric RSA key (public or private).\n *\n * Field semantics (RFC 3447):\n *   n     — modulus\n *   e     — public exponent\n *   d     — private exponent\n *   p, q  — prime factors of n (n = p * q)\n *   dmp1  — d mod (p - 1)\n *   dmq1  — d mod (q - 1)\n *   coeff — (q^-1) mod p, used by CRT decryption\n */\nexport class RSAKey {\n  n: BigInteger | null = null;\n  e = 0;\n  d: BigInteger | null = null;\n  p: BigInteger | null = null;\n  q: BigInteger | null = null;\n  dmp1: BigInteger | null = null;\n  dmq1: BigInteger | null = null;\n  coeff: BigInteger | null = null;\n\n  // Cached per-update key metrics.\n  cache: { keyBitLength: number; keyByteLength: number } = {\n    keyBitLength: 0,\n    keyByteLength: 0,\n  };\n\n  // Scheme bindings — populated by setOptions().\n  encryptionScheme!: EncryptionSchemeImpl;\n  signingScheme!: SignatureScheme;\n  options!: SchemeOptions;\n\n  /** OpenSSH key comment field (preserved across import/export). */\n  sshcomment?: string;\n\n  /**\n   * BigInteger constructor that owns this key's components. Read off\n   * `n.constructor` so a later `setBigIntegerImpl()` swap by another\n   * NodeRSA instance can't corrupt operations on this key — fresh\n   * BigIntegers spawned during sign/encrypt/blinding stay the same class\n   * as `n`, `d`, `p`, `q` etc.\n   */\n  get BI(): typeof BigInteger {\n    if (!this.n) throw new Error('RSAKey: no key components');\n    return this.n.constructor as typeof BigInteger;\n  }\n\n  /**\n   * Bind encryption + signing scheme instances to this key. If both schemes\n   * resolve to the same provider (PKCS#1 v1.5 covers both), one instance is\n   * shared so internal padding state stays consistent. Throws on unknown\n   * scheme names.\n   */\n  setOptions(\n    options: SchemeOptions,\n    schemes: Record<\n      string,\n      { makeScheme(key: RSAKey, opts: SchemeOptions): EncryptionSchemeImpl | SignatureScheme }\n    >,\n  ): void {\n    this.options = options;\n    const sigProvider = schemes[options.signingScheme];\n    const encProvider = schemes[options.encryptionScheme];\n    if (!sigProvider) throw new Error(`Unknown signing scheme: ${options.signingScheme}`);\n    if (!encProvider) throw new Error(`Unknown encryption scheme: ${options.encryptionScheme}`);\n\n    if (sigProvider === encProvider) {\n      const scheme = sigProvider.makeScheme(this, options) as EncryptionSchemeImpl &\n        SignatureScheme;\n      this.signingScheme = scheme;\n      this.encryptionScheme = scheme;\n    } else {\n      this.encryptionScheme = encProvider.makeScheme(this, options) as EncryptionSchemeImpl;\n      this.signingScheme = sigProvider.makeScheme(this, options) as SignatureScheme;\n    }\n  }\n\n  /**\n   * Generate a fresh `B`-bit private key with public exponent E (hex string).\n   * Matches v1's algorithm and RNG call pattern exactly.\n   */\n  generate(B: number, E: string): void {\n    if (B < 512) {\n      throw new Error(\n        `Key size ${B} bits is cryptographically broken (< 512); refusing to generate`,\n      );\n    }\n    if (B < 2048 && !warnedSmallKey) {\n      warnedSmallKey = true;\n      // Below NIST SP 800-56B §6.1.6.2's 2048-bit minimum.\n      // eslint-disable-next-line no-console\n      console.warn(\n        `node-rsa: generating ${B}-bit RSA key — below NIST SP 800-56B §6.1.6.2 minimum (2048 bits); not recommended for production`,\n      );\n    }\n    const qs = B >> 1;\n    this.e = Number.parseInt(E, 16);\n    const ee = new BigInteger(E, 16);\n    // FIPS 186-4 Table C.3 Miller-Rabin minimums by half-modulus bit length.\n    const mrRounds = B >= 4096 ? 16 : B >= 3072 ? 28 : 40;\n    // FIPS 186-4 §B.3.6 Fermat-factoring defence: require |p − q| > 2^(B/2 − 100).\n    // With CSPRNG primes the rejection rate is ≈ 2⁻¹⁰⁰ per pair.\n    const minPQDiff = BigInteger.ONE.shiftLeft((B >> 1) - 100);\n    while (true) {\n      while (true) {\n        // `BigInteger(bits, 1)` is fromNumber's sequential prime search with\n        // one Miller-Rabin round per candidate — combined with trial division\n        // by 168 small primes, fast enough for the sieve. The outer\n        // isProbablePrime(mrRounds) below does the strong validation.\n        this.p = new BigInteger(B - qs, 1);\n        if (\n          this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) === 0 &&\n          this.p.isProbablePrime(mrRounds)\n        ) {\n          break;\n        }\n      }\n      while (true) {\n        this.q = new BigInteger(qs, 1);\n        if (\n          this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) === 0 &&\n          this.q.isProbablePrime(mrRounds)\n        ) {\n          break;\n        }\n      }\n      if (this.p.compareTo(this.q) <= 0) {\n        const t = this.p;\n        this.p = this.q;\n        this.q = t;\n      }\n      // Regenerate the pair if p and q are too close (Fermat defence).\n      if (this.p.subtract(this.q).compareTo(minPQDiff) < 0) continue;\n      const p1 = this.p.subtract(BigInteger.ONE);\n      const q1 = this.q.subtract(BigInteger.ONE);\n      const phi = p1.multiply(q1);\n      if (phi.gcd(ee).compareTo(BigInteger.ONE) === 0) {\n        this.n = this.p.multiply(this.q);\n        if (this.n.bitLength() < B) continue;\n        this.d = ee.modInverse(phi);\n        this.dmp1 = this.d.mod(p1);\n        this.dmq1 = this.d.mod(q1);\n        this.coeff = this.q.modInverse(this.p);\n        break;\n      }\n    }\n    this.recalculateCache();\n  }\n\n  /**\n   * Install private-key components (raw big-endian bytes; E may be a number).\n   * If any CRT field (P/Q/DP/DQ/C) is omitted the key works without CRT —\n   * slower decrypt but valid. Throws if N/E/D are missing or if CRT fields\n   * are present but mathematically inconsistent (Boneh-DeMillo-Lipton\n   * fault-attack guard).\n   */\n  setPrivate(\n    N: Uint8Array,\n    E: number | Uint8Array,\n    D: Uint8Array,\n    P?: Uint8Array,\n    Q?: Uint8Array,\n    DP?: Uint8Array,\n    DQ?: Uint8Array,\n    C?: Uint8Array,\n  ): void {\n    if (!N || N.length === 0) throw new Error('Invalid RSA private key');\n    if (typeof E !== 'number' && (!E || E.length === 0)) throw new Error('Invalid RSA private key');\n    if (!D || D.length === 0) throw new Error('Invalid RSA private key');\n\n    this.n = new BigInteger(N);\n    this.e = typeof E === 'number' ? E : readBigEndianUInt(E);\n    this.d = new BigInteger(D);\n\n    if (P && Q && DP && DQ && C) {\n      this.p = new BigInteger(P);\n      this.q = new BigInteger(Q);\n      this.dmp1 = new BigInteger(DP);\n      this.dmq1 = new BigInteger(DQ);\n      this.coeff = new BigInteger(C);\n    }\n    this.validateExponent();\n    this.validatePrivateConsistency();\n    this.recalculateCache();\n  }\n\n  /** Install public-key components (raw big-endian bytes; E may be a number). Throws if N/E are missing or E is invalid. */\n  setPublic(N: Uint8Array, E: number | Uint8Array): void {\n    if (!N || N.length === 0) throw new Error('Invalid RSA public key');\n    if (typeof E !== 'number' && (!E || E.length === 0)) throw new Error('Invalid RSA public key');\n\n    this.n = new BigInteger(N);\n    this.e = typeof E === 'number' ? E : readBigEndianUInt(E);\n    this.validateExponent();\n    this.recalculateCache();\n  }\n\n  /**\n   * RFC 8017 §3.1 requires 1 < e < n with e odd. e=1 makes ciphertext ==\n   * plaintext; even e breaks RSA invertibility entirely. The e < n side\n   * is implicit (n ≥ 2^512 ≫ any JS-number-encodable e).\n   */\n  private validateExponent(): void {\n    if (this.e <= 1) {\n      throw new Error('Invalid RSA exponent: e must be > 1');\n    }\n    if ((this.e & 1) === 0) {\n      throw new Error('Invalid RSA exponent: e must be odd');\n    }\n  }\n\n  /**\n   * Cross-check CRT invariants for an imported private key. Inconsistent\n   * components (n ≠ p·q, mismatched dp/dq, bad coeff) don't just produce\n   * garbage on decrypt — they enable Boneh-DeMillo-Lipton fault attacks\n   * where a single faulted signature reveals gcd(s_correct − s_faulted, n)\n   * and factors n. Skipped when CRT components are absent (basic n, e, d\n   * key still works, just without CRT).\n   */\n  private validatePrivateConsistency(): void {\n    if (!this.n || !this.d || !this.p || !this.q || !this.dmp1 || !this.dmq1 || !this.coeff) {\n      return;\n    }\n    if (this.p.multiply(this.q).compareTo(this.n) !== 0) {\n      throw new Error('RSA private key inconsistent: n ≠ p × q');\n    }\n    const p1 = this.p.subtract(BigInteger.ONE);\n    const q1 = this.q.subtract(BigInteger.ONE);\n    if (this.d.mod(p1).compareTo(this.dmp1) !== 0) {\n      throw new Error('RSA private key inconsistent: dp ≠ d mod (p − 1)');\n    }\n    if (this.d.mod(q1).compareTo(this.dmq1) !== 0) {\n      throw new Error('RSA private key inconsistent: dq ≠ d mod (q − 1)');\n    }\n    if (this.q.multiply(this.coeff).mod(this.p).compareTo(BigInteger.ONE) !== 0) {\n      throw new Error('RSA private key inconsistent: q × coeff ≢ 1 (mod p)');\n    }\n    const eBig = new BigInteger(this.e.toString(16), 16);\n    if (eBig.multiply(this.dmp1).mod(p1).compareTo(BigInteger.ONE) !== 0) {\n      throw new Error('RSA private key inconsistent: e × dp ≢ 1 (mod p − 1)');\n    }\n    if (eBig.multiply(this.dmq1).mod(q1).compareTo(BigInteger.ONE) !== 0) {\n      throw new Error('RSA private key inconsistent: e × dq ≢ 1 (mod q − 1)');\n    }\n  }\n\n  /** x^d mod n, using CRT if p/q are available, otherwise direct. */\n  $doPrivate(x: BigInteger): BigInteger {\n    if (!this.n || !this.d) throw new Error('No private key');\n    // RFC 8017 §5.1.2 / §3.2 mandate inputs in [0, n-1]. Without this\n    // check, ciphertext c and c+kn would decrypt the same (malleability)\n    // and negative intermediates would corrupt CRT recombination.\n    if (x.signum() < 0 || x.compareTo(this.n) >= 0) {\n      throw new Error('RSA: input out of range (must be 0 ≤ x < n)');\n    }\n\n    // Base blinding (Kocher 1996): the variable-time modPow leaks d-bits\n    // unless its input is masked from the attacker. Pre-multiply by r^e,\n    // post-multiply by r^-1, with r ← random coprime to n:\n    //   (x · r^e)^d  =  x^d · r^(e·d)  =  x^d · r  (mod n)\n    //   then × r^-1 mod n = x^d mod n\n    const blinding = this.makeBlinding();\n    const inputX = blinding ? x.multiply(blinding.re).mod(this.n) : x;\n\n    let result: BigInteger;\n    if (!this.p || !this.q || !this.dmp1 || !this.dmq1 || !this.coeff) {\n      result = inputX.modPow(this.d, this.n);\n    } else {\n      const xp = inputX.mod(this.p).modPow(this.dmp1, this.p);\n      const xq = inputX.mod(this.q).modPow(this.dmq1, this.q);\n      // Garner recombination without a data-dependent `while (xp < xq)`\n      // loop: BigInteger.mod normalises any negative dividend to [0, p).\n      result = xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n    }\n\n    if (blinding) {\n      result = result.multiply(blinding.rInv).mod(this.n);\n    }\n    return result;\n  }\n\n  /**\n   * Produce a fresh blinding pair (r^e mod n, r^-1 mod n) for one private\n   * operation. Returns null only in the astronomically rare case that the\n   * RNG keeps producing r with gcd(r, n) ≠ 1 — probability ≈ 2/√n per\n   * attempt; 10 attempts is overkill safety.\n   *\n   * Returns null also if there's no backend yet (e.g., key without\n   * setOptions() — only happens in some test setups).\n   */\n  private makeBlinding(): { re: BigInteger; rInv: BigInteger } | null {\n    if (!this.n || !this.options) return null;\n    const n = this.n;\n    const BI = this.BI;\n    const byteLen = ((n.bitLength() + 7) >> 3) + 1;\n    const two = new BI(Uint8Array.of(2));\n    const nMinus3 = n.subtract(BI.ONE).subtract(two); // range size for [2, n-2]\n\n    for (let attempt = 0; attempt < 10; attempt++) {\n      const rb = this.options.backend.randomBytes(byteLen);\n      const r = new BI(rb).mod(nMinus3).add(two);\n      const rInv = r.modInverse(n);\n      if (rInv.signum() === 0) continue; // gcd(r, n) ≠ 1; retry\n      const re = r.modPowInt(this.e, n);\n      return { re, rInv };\n    }\n    return null;\n  }\n\n  /** x^e mod n. */\n  $doPublic(x: BigInteger): BigInteger {\n    if (!this.n) throw new Error('No public key');\n    // RFC 8017 §5.2.2 / §3.2 mandate inputs in [0, n-1]; rejects s ≥ n\n    // on verify and m ≥ n on encrypt.\n    if (x.signum() < 0 || x.compareTo(this.n) >= 0) {\n      throw new Error('RSA: input out of range (must be 0 ≤ x < n)');\n    }\n    return x.modPowInt(this.e, this.n);\n  }\n\n  /** True iff `d` is loaded (n, e implied). */\n  isPrivate(): boolean {\n    return !!(this.n && this.e && this.d);\n  }\n\n  /** True iff `n` and `e` are set. With `strict=true` additionally requires `d` to be absent. */\n  isPublic(strict?: boolean): boolean {\n    if (!this.n || !this.e) return false;\n    if (strict && this.d) return false;\n    return true;\n  }\n\n  /** Modulus size in bits (0 if no key loaded). */\n  get keySize(): number {\n    return this.cache.keyBitLength;\n  }\n\n  /** Ciphertext block size in bytes. */\n  get encryptedDataLength(): number {\n    return this.cache.keyByteLength;\n  }\n\n  /** Largest single-chunk plaintext the configured encryption scheme will accept. */\n  get maxMessageLength(): number {\n    return this.encryptionScheme.maxMessageLength();\n  }\n\n  /** Recompute cached key-size metrics. */\n  recalculateCache(): void {\n    if (!this.n) {\n      this.cache = { keyBitLength: 0, keyByteLength: 0 };\n      return;\n    }\n    const keyBitLength = this.n.bitLength();\n    this.cache = {\n      keyBitLength,\n      keyByteLength: (keyBitLength + 6) >> 3,\n    };\n  }\n\n  /**\n   * Clear all key material from this instance. Call when the key is no\n   * longer needed to reduce the window in which private components are\n   * reachable from the JS heap (heap snapshots, core dumps, swap).\n   *\n   * JavaScript has no guaranteed deterministic memory zeroing — GC-managed\n   * BigInteger internals may linger until collected. This method removes\n   * references as early as possible, which is the strongest guarantee the\n   * language offers.\n   */\n  destroy(): void {\n    this.n = null;\n    this.e = 0;\n    this.d = null;\n    this.p = null;\n    this.q = null;\n    this.dmp1 = null;\n    this.dmq1 = null;\n    this.coeff = null;\n    this.cache = { keyBitLength: 0, keyByteLength: 0 };\n  }\n\n  /** Convenience: get the backend bound via setOptions. */\n  get backend(): CryptoBackend {\n    return this.options.backend;\n  }\n}\n\nfunction readBigEndianUInt(buf: Uint8Array): number {\n  let n = 0;\n  for (let i = 0; i < buf.length; i++) n = n * 256 + (buf[i] as number);\n  return n;\n}\n","import { setBigIntegerBackend } from './bigint/big-integer.js';\nimport {\n  fromBase64,\n  fromLatin1,\n  fromUtf8,\n  toBase64,\n  toHex,\n  toLatin1,\n  toUtf8,\n} from './crypto/bytes.js';\nimport type { CryptoBackend } from './crypto/types.js';\nimport { detectAndExport, detectAndImport } from './formats/index.js';\nimport { applyOptions, EXPORT_FORMAT_ALIASES, makeDefaultOptions } from './options.js';\nimport { type Engine, JsEngine } from './rsa/engine.js';\nimport { RSAKey } from './rsa/key.js';\nimport { SCHEMES } from './schemes/index.js';\nimport type { EncryptionSchemeImpl, SchemeOptions, SignatureScheme } from './schemes/types.js';\nimport type {\n  Data,\n  Encoding,\n  Environment,\n  Format,\n  FormatComponentsPrivate,\n  FormatComponentsPublic,\n  FormatDer,\n  FormatPem,\n  Key,\n  KeyBits,\n  KeyComponentsPrivate,\n  KeyComponentsPublic,\n  NodeRSAGenerateOptions,\n  NodeRSAOptions,\n  ResolvedOptions,\n} from './types.js';\n\ninterface SchemeProviderLike {\n  isEncryption: boolean;\n  isSignature: boolean;\n  makeScheme(key: RSAKey, options: SchemeOptions): EncryptionSchemeImpl | SignatureScheme;\n}\n\ninterface NodeRSAInternal {\n  environment: Environment;\n  backend: CryptoBackend;\n  /** Optional engine factory (e.g. NodeNativeEngine). Falls back to JsEngine. */\n  engineFor?: (key: RSAKey, options: ResolvedOptions) => Engine;\n  /**\n   * Optional native key generator (e.g. node:crypto.generateKeyPairSync).\n   * If absent, NodeRSA.generateKeyPair falls back to the pure-JS\n   * RSAKey.generate path.\n   */\n  keygenFor?: (key: RSAKey, bits: number, expHex: string) => void;\n  /**\n   * Optional override of the default SCHEMES registry. The node bundle\n   * passes a map with PKCS1 + PSS replaced by node:crypto-backed wrappers.\n   * Bypassed when the user forces environment:'browser' at runtime so\n   * setOptions can route back to the JS implementations.\n   */\n  schemes?: Record<string, SchemeProviderLike>;\n}\n\nlet internal: NodeRSAInternal | undefined;\n\n/** Called by the platform entry (src/index.node.ts or .browser.ts) at module load. */\nexport function bootstrap(config: NodeRSAInternal): void {\n  internal = config;\n  setBigIntegerBackend(config.backend);\n}\n\nfunction getInternal(): NodeRSAInternal {\n  if (!internal) {\n    throw new Error(\n      'NodeRSA: backend not initialized. Import the package via its main entry, not by deep-importing internals.',\n    );\n  }\n  return internal;\n}\n\nexport class NodeRSA {\n  $options: ResolvedOptions;\n  keyPair: RSAKey;\n  private engine: Engine | null = null;\n  private $cache: Record<string, Uint8Array | string | object> = {};\n\n  constructor(key?: KeyBits);\n  constructor(key: Key, format?: Format, options?: NodeRSAOptions);\n  constructor(key: null | undefined, format?: NodeRSAOptions);\n  constructor(\n    key?: Key | KeyBits | NodeRSAGenerateOptions | null,\n    format?: Format | string | NodeRSAOptions,\n    options?: NodeRSAOptions,\n  ) {\n    let opts: NodeRSAOptions | undefined;\n    let fmt: string | undefined;\n    if (typeof format === 'object' && format !== null) {\n      opts = format;\n      fmt = undefined;\n    } else {\n      fmt = format as string | undefined;\n      opts = options;\n    }\n\n    const env = getInternal().environment;\n    this.$options = makeDefaultOptions(env);\n    this.keyPair = new RSAKey();\n\n    // Apply user options BEFORE touching BigInteger so settings like\n    // `bigIntImpl` take effect during importKey/generateKeyPair. The keyPair\n    // is still empty here, so rewireScheme is a no-op-ish wire-up and safe.\n    if (opts) {\n      applyOptions(this.$options, opts);\n      this.rewireScheme();\n    }\n\n    if (key instanceof Uint8Array || typeof key === 'string') {\n      this.importKey(key as Key, fmt as Format | undefined);\n    } else if (key && typeof key === 'object') {\n      const gen = key as NodeRSAGenerateOptions;\n      this.generateKeyPair(gen.b, gen.e);\n    }\n\n    if (!opts && !key) this.rewireScheme();\n  }\n\n  setOptions(options: NodeRSAOptions): this {\n    if (\n      options.bigIntImpl &&\n      options.bigIntImpl !== this.$options.bigIntImpl &&\n      this.keyPair.n != null\n    ) {\n      // Existing BigInteger components carry the old impl's class identity.\n      // Switching now would mix impls inside one key — broken arithmetic.\n      throw new Error(\n        'NodeRSA: bigIntImpl can only be set on a fresh instance (before importKey / generateKeyPair). Pass it in the constructor options, or set it before importing.',\n      );\n    }\n    applyOptions(this.$options, options);\n    this.rewireScheme();\n    return this;\n  }\n\n  generateKeyPair(bits = 2048, exp = 65537): this {\n    if (bits % 8 !== 0) throw new Error('Key size must be a multiple of 8.');\n    const cfg = getInternal();\n    const expHex = exp.toString(16);\n    // Native fast-path (node bundle wires keygenFor → node:crypto.generateKeyPairSync,\n    // ~20–50× faster than RSAKey.generate for keys ≥ 2048 bits). The browser bundle\n    // doesn't wire it and falls back to the pure-JS path.\n    if (cfg.keygenFor && this.$options.environment !== 'browser') {\n      cfg.keygenFor(this.keyPair, bits, expHex);\n    } else {\n      this.keyPair.generate(bits, expHex);\n    }\n    this.$cache = {};\n    this.rewireScheme();\n    return this;\n  }\n\n  importKey(keyData: Key, format?: Format | string): this;\n  importKey(keyData: Uint8Array | string | object, format?: string): this {\n    if (keyData == null || (typeof keyData === 'string' && keyData.length === 0)) {\n      throw new Error('Empty key given');\n    }\n    const resolvedFormat = format ? (EXPORT_FORMAT_ALIASES[format] ?? format) : format;\n    const imported = detectAndImport(this.keyPair, keyData, resolvedFormat);\n    if (!imported && resolvedFormat === undefined) {\n      throw new Error('Key format must be specified');\n    }\n    this.$cache = {};\n    this.rewireScheme();\n    return this;\n  }\n\n  exportKey(format?: FormatPem): string;\n  exportKey(format: FormatDer): Uint8Array;\n  exportKey(format: FormatComponentsPrivate): KeyComponentsPrivate;\n  exportKey(format: FormatComponentsPublic): KeyComponentsPublic;\n  exportKey(format?: string): Uint8Array | string | object;\n  exportKey(format = 'private'): Uint8Array | string | object {\n    const resolved = EXPORT_FORMAT_ALIASES[format] ?? format;\n    if (!this.$cache[resolved]) {\n      const exported = detectAndExport(this.keyPair, resolved);\n      if (exported === undefined) throw new Error('Export failed');\n      this.$cache[resolved] = exported;\n    }\n    return this.$cache[resolved] as Uint8Array | string | object;\n  }\n\n  isPrivate(): boolean {\n    return this.keyPair.isPrivate();\n  }\n\n  isPublic(strict?: boolean): boolean {\n    return this.keyPair.isPublic(strict);\n  }\n\n  isEmpty(): boolean {\n    return !(this.keyPair.n || this.keyPair.e || this.keyPair.d);\n  }\n\n  getKeySize(): number {\n    return this.keyPair.keySize;\n  }\n\n  getMaxMessageSize(): number {\n    return this.keyPair.maxMessageLength;\n  }\n\n  encrypt(data: Data | Uint8Array, encoding?: 'buffer', sourceEncoding?: Encoding): Uint8Array;\n  encrypt(data: Data | Uint8Array, encoding: Encoding, sourceEncoding?: Encoding): string;\n  encrypt(buffer: unknown, encoding?: Encoding, sourceEncoding?: string): Uint8Array | string {\n    return this.$$encryptKey(false, buffer, encoding, sourceEncoding);\n  }\n\n  decrypt(data: Uint8Array | string, encoding?: 'buffer'): Uint8Array;\n  decrypt(data: Uint8Array | string, encoding: Encoding): string;\n  decrypt<T extends object>(data: Uint8Array | string, encoding: 'json'): T;\n  decrypt(buffer: Uint8Array | string, encoding?: Encoding | 'json'): Uint8Array | string | object {\n    return this.$$decryptKey(false, buffer, encoding as Encoding);\n  }\n\n  encryptPrivate(\n    data: Data | Uint8Array,\n    encoding?: 'buffer',\n    sourceEncoding?: Encoding,\n  ): Uint8Array;\n  encryptPrivate(data: Data | Uint8Array, encoding: Encoding, sourceEncoding?: Encoding): string;\n  encryptPrivate(\n    buffer: unknown,\n    encoding?: Encoding,\n    sourceEncoding?: string,\n  ): Uint8Array | string {\n    return this.$$encryptKey(true, buffer, encoding, sourceEncoding);\n  }\n\n  decryptPublic(data: Uint8Array | string, encoding?: 'buffer'): Uint8Array;\n  decryptPublic(data: Uint8Array | string, encoding: Encoding): string;\n  decryptPublic<T extends object>(data: Uint8Array | string, encoding: 'json'): T;\n  decryptPublic(\n    buffer: Uint8Array | string,\n    encoding?: Encoding | 'json',\n  ): Uint8Array | string | object {\n    return this.$$decryptKey(true, buffer, encoding as Encoding);\n  }\n\n  sign(data: Data | Uint8Array, encoding?: 'buffer', sourceEncoding?: Encoding): Uint8Array;\n  sign(data: Data | Uint8Array, encoding: Encoding, sourceEncoding?: Encoding): string;\n  sign(buffer: unknown, encoding?: Encoding, sourceEncoding?: string): Uint8Array | string {\n    if (!this.isPrivate()) throw new Error('This is not private key');\n    const data = this.$getDataForEncrypt(buffer, sourceEncoding);\n    const res = this.keyPair.signingScheme.sign(data);\n    return encoding && encoding !== 'buffer' ? encodeBytes(res, encoding) : res;\n  }\n\n  verify(data: Data | Uint8Array, signature: Uint8Array, sourceEncoding?: Encoding): boolean;\n  verify(\n    data: Data | Uint8Array,\n    signature: string,\n    sourceEncoding: Encoding | undefined,\n    signatureEncoding: Encoding,\n  ): boolean;\n  verify(\n    buffer: unknown,\n    signature: Uint8Array | string,\n    sourceEncoding?: string,\n    signatureEncoding?: string,\n  ): boolean {\n    if (!this.isPublic()) throw new Error('This is not public key');\n    const data = this.$getDataForEncrypt(buffer, sourceEncoding);\n    const sig =\n      typeof signature === 'string' ? decodeBytes(signature, signatureEncoding) : signature;\n    return this.keyPair.signingScheme.verify(data, sig);\n  }\n\n  // internals\n  $$encryptKey(\n    usePrivate: boolean,\n    buffer: unknown,\n    encoding?: Encoding,\n    sourceEncoding?: string,\n  ): Uint8Array | string {\n    try {\n      const data = this.$getDataForEncrypt(buffer, sourceEncoding);\n      const res = this.ensureEngine().encrypt(data, usePrivate);\n      return encoding && encoding !== 'buffer' ? encodeBytes(res, encoding) : res;\n    } catch {\n      throw new Error('Error during encryption');\n    }\n  }\n\n  $$decryptKey(\n    usePublic: boolean,\n    buffer: Uint8Array | string,\n    encoding?: Encoding,\n  ): Uint8Array | string | object {\n    try {\n      const bytes = typeof buffer === 'string' ? fromBase64(buffer) : buffer;\n      const res = this.ensureEngine().decrypt(bytes, usePublic);\n      return this.$getDecryptedData(res, encoding);\n    } catch {\n      throw new Error('Error during decryption');\n    }\n  }\n\n  $getDataForEncrypt(buffer: unknown, encoding?: string): Uint8Array {\n    if (typeof buffer === 'string') {\n      return encoding && encoding !== 'utf8' ? decodeBytes(buffer, encoding) : fromUtf8(buffer);\n    }\n    if (typeof buffer === 'number') return fromUtf8(String(buffer));\n    if (buffer instanceof Uint8Array) return buffer;\n    if (buffer !== null && typeof buffer === 'object') return fromUtf8(JSON.stringify(buffer));\n    throw new Error('Unexpected data type');\n  }\n\n  $getDecryptedData(bytes: Uint8Array, encoding?: Encoding | 'json'): Uint8Array | string | object {\n    const enc = encoding ?? 'buffer';\n    if (enc === 'buffer') return bytes;\n    if (enc === 'json') return JSON.parse(toUtf8(bytes));\n    return encodeBytes(bytes, enc);\n  }\n\n  private rewireScheme(): void {\n    const cfg = getInternal();\n    const opts: SchemeOptions = {\n      signingScheme: this.$options.signingScheme,\n      encryptionScheme: this.$options.encryptionScheme,\n      signingSchemeOptions: this.$options.signingSchemeOptions,\n      encryptionSchemeOptions: this.$options.encryptionSchemeOptions,\n      environment: this.$options.environment,\n      backend: cfg.backend,\n    };\n    // When the user forces environment:'browser' on the node bundle, revert\n    // to the pure-JS SCHEMES so signing also goes through the JS path —\n    // otherwise sign/verify would still use node:crypto while the engine\n    // uses JsEngine, defeating the override.\n    const forcedJs = this.$options.environment === 'browser';\n    const schemes = forcedJs ? SCHEMES : (cfg.schemes ?? SCHEMES);\n    this.keyPair.setOptions(opts, schemes);\n    this.engine = null;\n  }\n\n  private ensureEngine(): Engine {\n    if (this.engine) return this.engine;\n    const cfg = getInternal();\n    const forcedJs = this.$options.environment === 'browser';\n    if (!forcedJs && cfg.engineFor) {\n      this.engine = cfg.engineFor(this.keyPair, this.$options);\n    } else {\n      this.engine = new JsEngine(this.keyPair);\n    }\n    return this.engine;\n  }\n}\n\nfunction encodeBytes(bytes: Uint8Array, encoding: string): string {\n  switch (encoding) {\n    case 'hex':\n      return toHex(bytes);\n    case 'base64':\n      return toBase64(bytes);\n    case 'utf8':\n      return toUtf8(bytes);\n    case 'binary':\n    case 'latin1':\n      return toLatin1(bytes);\n    default:\n      // Best-effort: treat as base64 fallback\n      return toBase64(bytes);\n  }\n}\n\nfunction decodeBytes(s: string, encoding?: string): Uint8Array {\n  switch (encoding) {\n    case 'hex': {\n      if (s.length % 2 !== 0) throw new Error('Invalid hex string');\n      const out = new Uint8Array(s.length / 2);\n      for (let i = 0; i < out.length; i++)\n        out[i] = Number.parseInt(s.substring(i * 2, i * 2 + 2), 16);\n      return out;\n    }\n    case 'utf8':\n      return fromUtf8(s);\n    case 'binary':\n    case 'latin1':\n      return fromLatin1(s);\n    case undefined:\n    case null:\n    case 'buffer':\n    case 'base64':\n      return fromBase64(s);\n    default:\n      return fromBase64(s);\n  }\n}\n","import {\n  constants as nodeConstants,\n  privateDecrypt as nodePrivateDecrypt,\n  privateEncrypt as nodePrivateEncrypt,\n  publicDecrypt as nodePublicDecrypt,\n  publicEncrypt as nodePublicEncrypt,\n} from 'node:crypto';\nimport { detectAndExport } from '../formats/index.js';\nimport { RSA_NO_PADDING } from '../schemes/index.js';\nimport type { ResolvedOptions } from '../types.js';\nimport { type Engine, JsEngine } from './engine.js';\nimport type { RSAKey } from './key.js';\n\n/**\n * NodeNativeEngine — uses node:crypto.{publicEncrypt, privateDecrypt,\n * privateEncrypt, publicDecrypt} when the scheme is one of:\n *   - pkcs1 (RSA_PKCS1_PADDING)\n *   - pkcs1_oaep (RSA_PKCS1_OAEP_PADDING)\n *   - RSA_NO_PADDING (when set in encryptionSchemeOptions.padding)\n *\n * Falls back to the JS engine for unsupported combinations.\n */\nexport class NodeNativeEngine implements Engine {\n  private readonly fallback: JsEngine;\n  constructor(\n    private readonly key: RSAKey,\n    private readonly options: ResolvedOptions,\n  ) {\n    this.fallback = new JsEngine(key);\n  }\n\n  /**\n   * Routes back to the JS engine for combinations OpenSSL doesn't accept:\n   *  - `privateEncrypt` + OAEP padding (\"illegal or unsupported padding mode\")\n   *  - any RSA_NO_PADDING operation (Node would require pre-padded fixed-size\n   *    chunks; the JS engine handles padding/unpadding internally).\n   *  - PKCS#1 v1.5 privateDecrypt on modern Node (security-deprecated since\n   *    CVE-2024-PEND — Node throws unless --security-revert is set).\n   *\n   * `decrypt` is the parameter \"reversed\" for `usePublic=true` callers and\n   * \"not reversed\" for the canonical `privateDecrypt` path. The arg name in\n   * encrypt() means usePrivate; in decrypt() it means usePublic.\n   */\n  private nativeAvailableForEncrypt(usePrivate: boolean): boolean {\n    if (this.options.encryptionSchemeOptions.padding === RSA_NO_PADDING) return false;\n    if (usePrivate && this.options.encryptionScheme === 'pkcs1_oaep') return false;\n    return true;\n  }\n\n  private nativeAvailableForDecrypt(usePublic: boolean): boolean {\n    if (this.options.encryptionSchemeOptions.padding === RSA_NO_PADDING) return false;\n    if (usePublic && this.options.encryptionScheme === 'pkcs1_oaep') return false;\n    // PKCS#1 v1.5 privateDecrypt has been disabled in modern Node by default.\n    if (!usePublic && this.options.encryptionScheme === 'pkcs1') return false;\n    return true;\n  }\n\n  private padding(): number {\n    const p = this.options.encryptionSchemeOptions.padding;\n    if (p === RSA_NO_PADDING) return nodeConstants.RSA_NO_PADDING;\n    if (this.options.encryptionScheme === 'pkcs1_oaep') return nodeConstants.RSA_PKCS1_OAEP_PADDING;\n    return nodeConstants.RSA_PKCS1_PADDING;\n  }\n\n  private oaepHashOption(): { oaepHash?: string } {\n    if (this.options.encryptionScheme === 'pkcs1_oaep') {\n      const h = this.options.encryptionSchemeOptions.hash;\n      if (h) return { oaepHash: h };\n    }\n    return {};\n  }\n\n  encrypt(buffer: Uint8Array, usePrivate = false): Uint8Array {\n    if (!this.nativeAvailableForEncrypt(usePrivate))\n      return this.fallback.encrypt(buffer, usePrivate);\n    const max = this.key.maxMessageLength;\n    if (max <= 0) throw new Error('Engine: key not initialised');\n    const buffersCount = Math.ceil(buffer.length / max) || 1;\n    const dividedSize = Math.ceil(buffer.length / buffersCount) || 1;\n\n    const chunks: Uint8Array[] = [];\n    if (buffersCount === 1) {\n      chunks.push(buffer);\n    } else {\n      for (let i = 0; i < buffersCount; i++) {\n        chunks.push(buffer.subarray(i * dividedSize, (i + 1) * dividedSize));\n      }\n    }\n\n    const exportFormat = usePrivate ? 'pkcs1-private-pem' : 'pkcs8-public-pem';\n    const keyPem = detectAndExport(this.key, exportFormat) as string;\n    const oaep = this.oaepHashOption();\n    const padding = this.padding();\n\n    const out: Uint8Array[] = [];\n    for (const chunk of chunks) {\n      const ct = usePrivate\n        ? nodePrivateEncrypt({ key: keyPem, padding, ...oaep }, Buffer.from(chunk))\n        : nodePublicEncrypt({ key: keyPem, padding, ...oaep }, Buffer.from(chunk));\n      out.push(new Uint8Array(ct.buffer, ct.byteOffset, ct.byteLength));\n    }\n\n    return concatU8(out);\n  }\n\n  decrypt(buffer: Uint8Array, usePublic = false): Uint8Array {\n    if (!this.nativeAvailableForDecrypt(usePublic)) return this.fallback.decrypt(buffer, usePublic);\n    const chunkLen = this.key.encryptedDataLength;\n    if (buffer.length % chunkLen !== 0) throw new Error('Incorrect data or key');\n    const count = buffer.length / chunkLen;\n\n    const exportFormat = usePublic ? 'pkcs8-public-pem' : 'pkcs1-private-pem';\n    const keyPem = detectAndExport(this.key, exportFormat) as string;\n    const oaep = this.oaepHashOption();\n    const padding = this.padding();\n\n    const out: Uint8Array[] = [];\n    for (let i = 0; i < count; i++) {\n      const slice = Buffer.from(buffer.subarray(i * chunkLen, (i + 1) * chunkLen));\n      const pt = usePublic\n        ? nodePublicDecrypt({ key: keyPem, padding, ...oaep }, slice)\n        : nodePrivateDecrypt({ key: keyPem, padding, ...oaep }, slice);\n      out.push(new Uint8Array(pt.buffer, pt.byteOffset, pt.byteLength));\n    }\n    return concatU8(out);\n  }\n}\n\nfunction concatU8(parts: Uint8Array[]): Uint8Array {\n  let total = 0;\n  for (const p of parts) total += p.length;\n  const out = new Uint8Array(total);\n  let off = 0;\n  for (const p of parts) {\n    out.set(p, off);\n    off += p.length;\n  }\n  return out;\n}\n","import { generateKeyPairSync } from 'node:crypto';\nimport { fromBase64 } from '../crypto/bytes.js';\nimport type { RSAKey } from './key.js';\n\n// One-shot guard mirroring RSAKey.generate's warning behaviour.\nlet warnedSmallKey = false;\n\nfunction fromBase64Url(b64url: string): Uint8Array {\n  const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/');\n  const pad = (4 - (b64.length % 4)) % 4;\n  return fromBase64(b64 + '='.repeat(pad));\n}\n\n/**\n * Populate `key` with a freshly-generated `bits`-bit RSA key whose public\n * exponent is `expHex` (hex string, e.g. `\"010001\"`). Uses\n * `node:crypto.generateKeyPairSync` — orders of magnitude faster than the\n * pure-JS Miller-Rabin path for keys ≥ 2048 bits (~50 ms vs ~2 s for\n * 2048-bit).\n *\n * Browser bundle has no equivalent; src/index.browser.ts doesn't wire this\n * factory and NodeRSA.generateKeyPair falls back to RSAKey.generate.\n */\nexport function nodeNativeKeygen(key: RSAKey, bits: number, expHex: string): void {\n  if (bits < 512) {\n    throw new Error(\n      `Key size ${bits} bits is cryptographically broken (< 512); refusing to generate`,\n    );\n  }\n  if (bits < 2048 && !warnedSmallKey) {\n    warnedSmallKey = true;\n    // eslint-disable-next-line no-console\n    console.warn(\n      `node-rsa: generating ${bits}-bit RSA key — below NIST SP 800-56B §6.1.6.2 minimum (2048 bits); not recommended for production`,\n    );\n  }\n\n  const exp = Number.parseInt(expHex, 16);\n  const { privateKey } = generateKeyPairSync('rsa', {\n    modulusLength: bits,\n    publicExponent: exp,\n  });\n  const jwk = privateKey.export({ format: 'jwk' }) as {\n    n: string;\n    e: string;\n    d: string;\n    p: string;\n    q: string;\n    dp: string;\n    dq: string;\n    qi: string;\n  };\n\n  key.setPrivate(\n    fromBase64Url(jwk.n),\n    exp,\n    fromBase64Url(jwk.d),\n    fromBase64Url(jwk.p),\n    fromBase64Url(jwk.q),\n    fromBase64Url(jwk.dp),\n    fromBase64Url(jwk.dq),\n    fromBase64Url(jwk.qi),\n  );\n}\n","import {\n  createPrivateKey,\n  createPublicKey,\n  type KeyObject,\n  constants as nodeConstants,\n  sign as nodeSign,\n  verify as nodeVerify,\n} from 'node:crypto';\nimport type { HashingAlgorithm } from '../crypto/types.js';\nimport { pkcs1Format } from '../formats/pkcs1.js';\nimport type { SchemeProvider } from '../schemes/index.js';\nimport { oaepScheme } from '../schemes/oaep.js';\nimport { pkcs1Scheme } from '../schemes/pkcs1.js';\nimport type { EncryptionSchemeImpl, SchemeOptions, SignatureScheme } from '../schemes/types.js';\nimport type { RSAKey } from './key.js';\n\nconst DEFAULT_PKCS1_HASH: HashingAlgorithm = 'sha256';\nconst DEFAULT_PSS_HASH: HashingAlgorithm = 'sha1';\nconst DEFAULT_PSS_SALT = 20;\n\nfunction bufferToU8(buf: Buffer): Uint8Array {\n  return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\nfunction privateKeyObjectFor(key: RSAKey): KeyObject {\n  if (!key.isPrivate()) throw new Error('Native signing requires a private key');\n  const pem = pkcs1Format.privateExport?.(key, { type: 'pem' }) as string;\n  return createPrivateKey({ key: pem, format: 'pem', type: 'pkcs1' });\n}\n\nfunction publicKeyObjectFor(key: RSAKey): KeyObject {\n  if (!key.isPublic()) throw new Error('Native verifying requires a public key');\n  const pem = pkcs1Format.publicExport?.(key, { type: 'pem' }) as string;\n  return createPublicKey({ key: pem, format: 'pem', type: 'pkcs1' });\n}\n\nfunction assertHashSupported(backend: SchemeOptions['backend'], hash: HashingAlgorithm): void {\n  if (!backend.supportsHash(hash)) {\n    throw new Error(\n      `node-rsa: hash \"${hash}\" not available in node:crypto on this build (OpenSSL 3 may need the legacy provider for md4/ripemd160). Use setOptions({environment:\"browser\"}) to force the pure-JS path.`,\n    );\n  }\n}\n\n/**\n * PKCS#1 v1.5 — keeps the JS scheme for encryption padding (encPad/encUnPad),\n * delegates sign/verify to node:crypto. NodeNativeEngine handles the\n * encryption RSA primitive separately, so the JS scheme's sign/verify path\n * (which is what we override here) is the only thing still going through\n * BigInteger.modPow today.\n */\nclass NodeNativePkcs1Scheme implements EncryptionSchemeImpl, SignatureScheme {\n  private privateKeyObj?: KeyObject;\n  private publicKeyObj?: KeyObject;\n\n  constructor(\n    private readonly inner: EncryptionSchemeImpl & SignatureScheme,\n    private readonly key: RSAKey,\n    private readonly options: SchemeOptions,\n  ) {}\n\n  maxMessageLength(): number {\n    return this.inner.maxMessageLength();\n  }\n  encPad(buf: Uint8Array, opts?: { type?: number }): Uint8Array {\n    return this.inner.encPad(buf, opts);\n  }\n  encUnPad(buf: Uint8Array, opts?: { type?: number }): Uint8Array | null {\n    return this.inner.encUnPad(buf, opts);\n  }\n\n  sign(buffer: Uint8Array): Uint8Array {\n    const hash = this.options.signingSchemeOptions.hash ?? DEFAULT_PKCS1_HASH;\n    assertHashSupported(this.options.backend, hash);\n    if (!this.privateKeyObj) this.privateKeyObj = privateKeyObjectFor(this.key);\n    const sig = nodeSign(hash, buffer, {\n      key: this.privateKeyObj,\n      padding: nodeConstants.RSA_PKCS1_PADDING,\n    });\n    return bufferToU8(sig);\n  }\n\n  verify(buffer: Uint8Array, signature: Uint8Array): boolean {\n    const hash = this.options.signingSchemeOptions.hash ?? DEFAULT_PKCS1_HASH;\n    assertHashSupported(this.options.backend, hash);\n    if (!this.publicKeyObj) this.publicKeyObj = publicKeyObjectFor(this.key);\n    // RFC 8017 §8.2.2 step 2.b: out-of-range signature representative\n    // (or any other RSA-primitive failure) yields \"invalid signature\",\n    // not a thrown error.\n    try {\n      return nodeVerify(\n        hash,\n        buffer,\n        {\n          key: this.publicKeyObj,\n          padding: nodeConstants.RSA_PKCS1_PADDING,\n        },\n        signature,\n      );\n    } catch {\n      return false;\n    }\n  }\n}\n\n/**\n * PSS — node:crypto only supports MGF1 with the same hash as the message\n * digest. A custom MGF or a different MGF-hash configuration cannot be\n * expressed natively; we throw at scheme construction so the failure is\n * loud and early rather than silent at sign time.\n */\nclass NodeNativePssScheme implements SignatureScheme {\n  private privateKeyObj?: KeyObject;\n  private publicKeyObj?: KeyObject;\n\n  constructor(\n    private readonly key: RSAKey,\n    private readonly options: SchemeOptions,\n  ) {\n    if (options.signingSchemeOptions.mgf) {\n      throw new Error(\n        'node-rsa: custom MGF for PSS is not supported in the node-native engine ' +\n          '(node:crypto only does MGF1 with hash = signing hash). ' +\n          'Use setOptions({environment:\"browser\"}) to force the pure-JS path.',\n      );\n    }\n  }\n\n  sign(buffer: Uint8Array): Uint8Array {\n    const hash = this.options.signingSchemeOptions.hash ?? DEFAULT_PSS_HASH;\n    assertHashSupported(this.options.backend, hash);\n    const saltLength = this.options.signingSchemeOptions.saltLength ?? DEFAULT_PSS_SALT;\n    if (!this.privateKeyObj) this.privateKeyObj = privateKeyObjectFor(this.key);\n    const sig = nodeSign(hash, buffer, {\n      key: this.privateKeyObj,\n      padding: nodeConstants.RSA_PKCS1_PSS_PADDING,\n      saltLength,\n    });\n    return bufferToU8(sig);\n  }\n\n  verify(buffer: Uint8Array, signature: Uint8Array): boolean {\n    const hash = this.options.signingSchemeOptions.hash ?? DEFAULT_PSS_HASH;\n    assertHashSupported(this.options.backend, hash);\n    const saltLength = this.options.signingSchemeOptions.saltLength ?? DEFAULT_PSS_SALT;\n    if (!this.publicKeyObj) this.publicKeyObj = publicKeyObjectFor(this.key);\n    try {\n      return nodeVerify(\n        hash,\n        buffer,\n        {\n          key: this.publicKeyObj,\n          padding: nodeConstants.RSA_PKCS1_PSS_PADDING,\n          saltLength,\n        },\n        signature,\n      );\n    } catch {\n      return false;\n    }\n  }\n}\n\n/**\n * Drop-in replacement for the default `SCHEMES` map used by the Node bundle:\n * pkcs1 + pss sign/verify go through `node:crypto` (faster, FIPS-friendly);\n * pkcs1_oaep is unchanged because OAEP encryption already routes through\n * NodeNativeEngine. Constructing a PSS scheme with a custom MGF throws —\n * see `NodeNativePssScheme`.\n */\nexport const nodeNativeSchemes: Record<string, SchemeProvider> = {\n  pkcs1: {\n    isEncryption: true,\n    isSignature: true,\n    makeScheme(key: RSAKey, options: SchemeOptions): EncryptionSchemeImpl & SignatureScheme {\n      const inner = pkcs1Scheme.makeScheme(key, options) as EncryptionSchemeImpl & SignatureScheme;\n      return new NodeNativePkcs1Scheme(inner, key, options);\n    },\n  },\n  pss: {\n    isEncryption: false,\n    isSignature: true,\n    makeScheme(key: RSAKey, options: SchemeOptions): SignatureScheme {\n      return new NodeNativePssScheme(key, options);\n    },\n  },\n  pkcs1_oaep: oaepScheme,\n};\n","import { nodeBackend } from './crypto/backend.node.js';\nimport { bootstrap, NodeRSA } from './node-rsa.js';\nimport { JsEngine } from './rsa/engine.js';\nimport { NodeNativeEngine } from './rsa/native-engine.js';\nimport { nodeNativeKeygen } from './rsa/native-keygen.js';\nimport { nodeNativeSchemes } from './rsa/native-signatures.js';\nimport type { ResolvedOptions } from './types.js';\n\nbootstrap({\n  environment: 'node',\n  backend: nodeBackend,\n  // node:crypto.generateKeyPairSync — ~50× faster than RSAKey.generate\n  // for 2048-bit keys, used unless the caller forces environment:'browser'.\n  keygenFor: nodeNativeKeygen,\n  // PKCS#1 v1.5 and PSS sign/verify go through node:crypto.sign / verify.\n  // OAEP is unchanged here — the encrypt side is already handled by\n  // NodeNativeEngine below.\n  schemes: nodeNativeSchemes,\n  engineFor: (key, options: ResolvedOptions) => {\n    // Native path supports the two padding schemes node:crypto knows about.\n    // For everything else (and for setOptions({environment:'browser'}) which\n    // is checked at the call site), fall back to the JS engine.\n    if (options.encryptionScheme === 'pkcs1' || options.encryptionScheme === 'pkcs1_oaep') {\n      return new NodeNativeEngine(key, options);\n    }\n    return new JsEngine(key);\n  },\n});\n\nexport { NodeRSA };\nexport default NodeRSA;\n// Node bundle defaults to the jsbn BigInteger impl. Users who want native\n// BigInt instead pass `{ bigIntImpl: 'native' }` to the NodeRSA constructor\n// or to setOptions BEFORE the key is imported/generated.\nexport * from './types.js';\n"]}