{"version":3,"file":"client.cjs","sources":["../../../../../src/mods/tor/client.ts"],"sourcesContent":["import { Aes128Ctr128BEKey, AesWasm } from \"@hazae41/aes.wasm\";\nimport { Opaque, Readable, Writable } from \"@hazae41/binary\";\nimport { Bitset } from \"@hazae41/bitset\";\nimport { Bytes, Uint8Array } from \"@hazae41/bytes\";\nimport { Ciphers, TlsClientDuplex } from \"@hazae41/cadenas\";\nimport { HalfDuplex } from \"@hazae41/cascade\";\nimport { Cursor } from \"@hazae41/cursor\";\nimport { Future } from \"@hazae41/future\";\nimport { Mutex } from \"@hazae41/mutex\";\nimport { CloseEvents, ErrorEvents, Plume, SuperEventTarget } from \"@hazae41/plume\";\nimport { RsaWasm } from \"@hazae41/rsa.wasm\";\nimport { Sha1 } from \"@hazae41/sha1\";\nimport { X509 } from \"@hazae41/x509\";\nimport { Resizer } from \"libs/resizer/resizer.js\";\nimport { Console } from \"mods/console/index.js\";\nimport { TypedAddress } from \"mods/tor/binary/address.js\";\nimport { Cell } from \"mods/tor/binary/cells/cell.js\";\nimport { AuthChallengeCell } from \"mods/tor/binary/cells/direct/auth_challenge/cell.js\";\nimport { CertsCell } from \"mods/tor/binary/cells/direct/certs/cell.js\";\nimport { CreateFastCell } from \"mods/tor/binary/cells/direct/create_fast/cell.js\";\nimport { CreatedFastCell } from \"mods/tor/binary/cells/direct/created_fast/cell.js\";\nimport { DestroyCell } from \"mods/tor/binary/cells/direct/destroy/cell.js\";\nimport { NetinfoCell } from \"mods/tor/binary/cells/direct/netinfo/cell.js\";\nimport { PaddingCell } from \"mods/tor/binary/cells/direct/padding/cell.js\";\nimport { PaddingNegociateCell } from \"mods/tor/binary/cells/direct/padding_negociate/cell.js\";\nimport { RelayCell } from \"mods/tor/binary/cells/direct/relay/cell.js\";\nimport { VersionsCell } from \"mods/tor/binary/cells/direct/versions/cell.js\";\nimport { VariablePaddingCell } from \"mods/tor/binary/cells/direct/vpadding/cell.js\";\nimport { RelayConnectedCell } from \"mods/tor/binary/cells/relayed/relay_connected/cell.js\";\nimport { RelayDataCell } from \"mods/tor/binary/cells/relayed/relay_data/cell.js\";\nimport { RelayDropCell } from \"mods/tor/binary/cells/relayed/relay_drop/cell.js\";\nimport { RelayEndCell } from \"mods/tor/binary/cells/relayed/relay_end/cell.js\";\nimport { RelayExtended2Cell } from \"mods/tor/binary/cells/relayed/relay_extended2/cell.js\";\nimport { RelayTruncatedCell } from \"mods/tor/binary/cells/relayed/relay_truncated/cell.js\";\nimport { Circuit, SecretCircuit } from \"mods/tor/circuit.js\";\nimport { Target } from \"mods/tor/target.js\";\nimport { InvalidKdfKeyHashError, KDFTorResult } from \"./algorithms/kdftor.js\";\nimport { ExpectedStreamError, InvalidCellError, InvalidRelayCellDigestError, InvalidRelaySendmeCellDigestError } from \"./binary/cells/errors.js\";\nimport { OldCell } from \"./binary/cells/old.js\";\nimport { RelaySendmeCircuitCell, RelaySendmeDigest, RelaySendmeStreamCell } from \"./binary/cells/relayed/relay_sendme/cell.js\";\nimport { Certs } from \"./certs/certs.js\";\nimport { InvalidTorStateError, InvalidTorVersionError } from \"./errors.js\";\nimport { TorHandshakingState, TorNoneState, TorState, TorVersionedState } from \"./state.js\";\n\nexport interface Guard {\n  readonly identity: Uint8Array<20>\n  readonly certs: Certs\n}\n\nexport type TorClientDuplexEvents =\n  & CloseEvents\n  & ErrorEvents\n\nexport class TorClientDuplex {\n\n  readonly #secret: SecretTorClientDuplex\n\n  readonly events = new SuperEventTarget<TorClientDuplexEvents>()\n\n  constructor() {\n    this.#secret = new SecretTorClientDuplex()\n\n    this.#secret.events.on(\"close\", () => this.events.emit(\"close\"))\n    this.#secret.events.on(\"error\", e => this.events.emit(\"error\", e))\n  }\n\n  [Symbol.dispose]() {\n    this.close()\n  }\n\n  get inner() {\n    return this.#secret.inner\n  }\n\n  get outer() {\n    return this.#secret.outer\n  }\n\n  get closing() {\n    return this.#secret.closing\n  }\n\n  get closed() {\n    return this.#secret.closed\n  }\n\n  error(reason?: unknown) {\n    this.#secret.error(reason)\n  }\n\n  close() {\n    this.#secret.close()\n  }\n\n  async waitOrThrow(signal = new AbortController().signal) {\n    return await this.#secret.waitOrThrow(signal)\n  }\n\n  async createOrThrow(signal = new AbortController().signal) {\n    return await this.#secret.createOrThrow(signal)\n  }\n\n}\n\nexport type SecretTorEvents =\n  & CloseEvents\n  & ErrorEvents\n  & { handshaked: () => void }\n  & {\n    \"CREATED_FAST\": (cell: Cell.Circuitful<CreatedFastCell>) => void\n    \"DESTROY\": (cell: Cell.Circuitful<DestroyCell>) => void\n    \"RELAY_CONNECTED\": (cell: RelayCell.Streamful<Opaque>) => void\n    \"RELAY_DATA\": (cell: RelayCell.Streamful<RelayDataCell<Opaque>>) => void\n    \"RELAY_EXTENDED2\": (cell: RelayCell.Streamless<RelayExtended2Cell<Opaque>>) => void\n    \"RELAY_TRUNCATED\": (cell: RelayCell.Streamless<RelayTruncatedCell>) => void\n    \"RELAY_END\": (cell: RelayCell.Streamful<RelayEndCell>) => void\n  }\n\nexport class SecretTorClientDuplex {\n\n  readonly ciphers = [Ciphers.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]\n\n  readonly tls: TlsClientDuplex\n\n  readonly duplex: HalfDuplex<Opaque, Writable>\n\n  readonly events = new SuperEventTarget<SecretTorEvents>()\n\n  readonly circuits = new Mutex(new Map<number, SecretCircuit>())\n\n  readonly #buffer = new Resizer()\n\n  readonly #resolveOnStart = new Future<void>()\n  readonly #resolveOnTlsCertificates = new Future<X509.Certificate[]>()\n\n  #state: TorState = { type: \"none\" }\n\n  constructor() {\n    this.tls = new TlsClientDuplex({\n      /**\n       * Do not validate root certificates\n       */\n      authorized: true,\n      ciphers: [Ciphers.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384],\n      certificates: c => this.#resolveOnTlsCertificates.resolve(c)\n    })\n\n    this.duplex = new HalfDuplex<Opaque, Writable>({\n      output: {\n        start: () => this.#onOutputStart(),\n      },\n      input: {\n        write: c => this.#onInputWrite(c),\n      },\n      close: async () => void await this.events.emit(\"close\"),\n      error: async e => void await this.events.emit(\"error\", e)\n    })\n\n    this.tls.outer.readable.pipeTo(this.duplex.inner.writable).catch(() => { })\n    this.duplex.inner.readable.pipeTo(this.tls.outer.writable).catch(() => { })\n\n    this.#resolveOnStart.resolve()\n  }\n\n  [Symbol.dispose]() {\n    this.close()\n  }\n\n  async #init() {\n    await RsaWasm.initBundled()\n    await AesWasm.initBundled()\n  }\n\n  get state() {\n    return this.#state\n  }\n\n  /**\n   * TLS inner pair\n   */\n  get inner() {\n    return this.tls.inner\n  }\n\n  get outer() {\n    return this.duplex.outer\n  }\n\n  get input() {\n    return this.duplex.input\n  }\n\n  get output() {\n    return this.duplex.output\n  }\n\n  get closing() {\n    return this.duplex.closing\n  }\n\n  get closed() {\n    return this.duplex.closed\n  }\n\n  error(reason?: unknown) {\n    this.duplex.error(reason)\n  }\n\n  close() {\n    this.duplex.close()\n  }\n\n  async #onOutputStart() {\n    await this.#resolveOnStart.promise\n\n    await this.#init()\n\n    this.output.enqueue(OldCell.Circuitless.from(undefined, new VersionsCell([5])))\n\n    await Plume.waitWithCloseAndErrorOrThrow(this.events, \"handshaked\", (future: Future<void>) => future.resolve())\n  }\n\n  async #onInputWrite(chunk: Opaque) {\n    // Console.debug(this.#class.name, \"<-\", chunk)\n\n    if (this.#buffer.inner.offset)\n      await this.#onReadBuffered(chunk.bytes)\n    else\n      await this.#onReadDirect(chunk.bytes)\n  }\n\n  /**\n   * Read from buffer\n   * @param chunk \n   * @returns \n   */\n  async #onReadBuffered(chunk: Uint8Array) {\n    this.#buffer.writeOrThrow(chunk)\n    const full = new Uint8Array(this.#buffer.inner.before)\n\n    this.#buffer.inner.offset = 0\n    await this.#onReadDirect(full)\n  }\n\n  /**\n   * Zero-copy reading\n   * @param chunk \n   * @returns \n   */\n  async #onReadDirect(chunk: Uint8Array) {\n    const cursor = new Cursor(chunk)\n\n    while (cursor.remaining) {\n      let raw:\n        | OldCell.Raw<Opaque>\n        | Cell.Raw<Opaque>\n\n      try {\n        raw = this.#state.type === \"none\"\n          ? Readable.readOrRollbackAndThrow(OldCell.Raw, cursor)\n          : Readable.readOrRollbackAndThrow(Cell.Raw, cursor)\n      } catch (e: unknown) {\n        this.#buffer.writeOrThrow(cursor.after)\n        break\n      }\n\n      const cell = raw.unpackOrNull(this)\n\n      if (cell == null)\n        continue\n\n      await this.#onCell(cell, this.#state)\n    }\n  }\n\n  async #onCell(cell: Cell<Opaque> | OldCell<Opaque>, state: TorState) {\n    if (cell.command === PaddingCell.command) {\n      Console.debug(cell)\n      return\n    }\n\n    if (cell.command === VariablePaddingCell.command) {\n      Console.debug(cell)\n      return\n    }\n\n    if (state.type === \"none\")\n      return await this.#onNoneStateCell(cell, state)\n\n    if (cell instanceof OldCell.Circuitful)\n      throw new InvalidCellError()\n    if (cell instanceof OldCell.Circuitless)\n      throw new InvalidCellError()\n\n    if (state.type === \"versioned\")\n      return await this.#onVersionedStateCell(cell, state)\n    if (state.type === \"handshaking\")\n      return await this.#onHandshakingStateCell(cell, state)\n    if (state.type === \"handshaked\")\n      return await this.#onHandshakedStateCell(cell)\n\n    return state satisfies never\n  }\n\n  async #onNoneStateCell(cell: Cell<Opaque> | OldCell<Opaque>, state: TorNoneState) {\n    if (cell instanceof Cell.Circuitful)\n      throw new InvalidCellError()\n    if (cell instanceof Cell.Circuitless)\n      throw new InvalidCellError()\n\n    if (cell.command === VersionsCell.command)\n      return await this.#onVersionsCell(cell, state)\n\n    console.warn(`Unknown pre-version cell ${cell.command}`)\n  }\n\n  async #onVersionedStateCell(cell: Cell<Opaque>, state: TorVersionedState) {\n    if (cell.command === CertsCell.command)\n      return await this.#onCertsCell(cell, state)\n\n    console.warn(`Unknown versioned-state cell ${cell.command}`)\n  }\n\n  async #onHandshakingStateCell(cell: Cell<Opaque>, state: TorHandshakingState) {\n    if (cell.command === AuthChallengeCell.command)\n      return await this.#onAuthChallengeCell(cell, state)\n    if (cell.command === NetinfoCell.command)\n      return await this.#onNetinfoCell(cell, state)\n\n    console.warn(`Unknown handshaking-state cell ${cell.command}`)\n  }\n\n  async #onHandshakedStateCell(cell: Cell<Opaque>) {\n    if (cell.command === CreatedFastCell.command)\n      return await this.#onCreatedFastCell(cell)\n    if (cell.command === DestroyCell.command)\n      return await this.#onDestroyCell(cell)\n    if (cell.command === RelayCell.command)\n      return await this.#onRelayCell(cell)\n\n    console.warn(`Unknown handshaked-state cell ${cell.command}`)\n  }\n\n  async #onVersionsCell(cell: OldCell<Opaque>, state: TorNoneState) {\n    const cell2 = OldCell.Circuitless.intoOrThrow(cell, VersionsCell)\n\n    Console.debug(cell2)\n\n    if (!cell2.fragment.versions.includes(5))\n      throw new InvalidTorVersionError()\n\n    this.#state = { ...state, type: \"versioned\", version: 5 }\n  }\n\n  async #onCertsCell(cell: Cell<Opaque>, state: TorVersionedState) {\n    const cell2 = Cell.Circuitless.intoOrThrow(cell, CertsCell)\n\n    Console.debug(cell2)\n\n    const tlsCerts = await this.#resolveOnTlsCertificates.promise\n    const torCerts = await Certs.verifyOrThrow(cell2.fragment.certs, tlsCerts)\n\n    const identity = await torCerts.rsa_self.sha1OrThrow()\n    const guard: Guard = { certs: torCerts, identity }\n\n    this.#state = { ...state, type: \"handshaking\", guard }\n  }\n\n  async #onAuthChallengeCell(cell: Cell<Opaque>, state: TorHandshakingState) {\n    Console.debug(Cell.Circuitless.intoOrThrow(cell, AuthChallengeCell))\n  }\n\n  async #onNetinfoCell(cell: Cell<Opaque>, state: TorHandshakingState) {\n    const cell2 = Cell.Circuitless.intoOrThrow(cell, NetinfoCell)\n\n    Console.debug(cell2)\n\n    const address = new TypedAddress(4, new Uint8Array([127, 0, 0, 1]))\n    const netinfo = new NetinfoCell(0, address, [])\n    this.output.enqueue(Cell.Circuitless.from(undefined, netinfo))\n\n    const pversion = PaddingNegociateCell.versions.ZERO\n    const pcommand = PaddingNegociateCell.commands.STOP\n    const padding_negociate = new PaddingNegociateCell(pversion, pcommand, 0, 0)\n    this.output.enqueue(Cell.Circuitless.from(undefined, padding_negociate))\n\n    this.#state = { ...state, type: \"handshaked\" }\n\n    await this.events.emit(\"handshaked\")\n  }\n\n  async #onCreatedFastCell(cell: Cell<Opaque>) {\n    const cell2 = Cell.Circuitful.intoOrThrow(cell, CreatedFastCell)\n\n    Console.debug(cell2)\n\n    await this.events.emit(\"CREATED_FAST\", cell2)\n  }\n\n  async #onDestroyCell(cell: Cell<Opaque>) {\n    const cell2 = Cell.Circuitful.intoOrThrow(cell, DestroyCell)\n\n    Console.debug(cell2)\n\n    this.circuits.inner.delete(cell2.circuit.id)\n\n    await this.events.emit(\"DESTROY\", cell2)\n  }\n\n  async #onRelayCell(parent: Cell<Opaque>) {\n    const raw = RelayCell.Raw.uncellOrThrow(parent)\n    const cell = raw.unpackOrNull()\n\n    if (cell == null)\n      return\n\n    if (cell.rcommand === RelayExtended2Cell.rcommand)\n      return await this.#onRelayExtended2Cell(cell)\n    if (cell.rcommand === RelayConnectedCell.rcommand)\n      return await this.#onRelayConnectedCell(cell)\n    if (cell.rcommand === RelayDataCell.rcommand)\n      return await this.#onRelayDataCell(cell)\n    if (cell.rcommand === RelayEndCell.rcommand)\n      return await this.#onRelayEndCell(cell)\n    if (cell.rcommand === RelayDropCell.rcommand)\n      return await this.#onRelayDropCell(cell)\n    if (cell.rcommand === RelayTruncatedCell.rcommand)\n      return await this.#onRelayTruncatedCell(cell)\n    if (cell.rcommand === RelaySendmeCircuitCell.rcommand && cell.stream == null)\n      return await this.#onRelaySendmeCircuitCell(cell)\n    if (cell.rcommand === RelaySendmeStreamCell.rcommand && cell.stream != null)\n      return await this.#onRelaySendmeStreamCell(cell)\n\n    console.warn(`Unknown relay cell ${cell.rcommand}`)\n  }\n\n  async #onRelayExtended2Cell(cell: RelayCell<Opaque>) {\n    const cell2 = RelayCell.Streamless.intoOrThrow(cell, RelayExtended2Cell)\n\n    Console.debug(cell2)\n\n    await this.events.emit(\"RELAY_EXTENDED2\", cell2)\n  }\n\n  async #onRelayConnectedCell(cell: RelayCell<Opaque>) {\n    if (cell.stream == null)\n      throw new ExpectedStreamError()\n\n    await this.events.emit(\"RELAY_CONNECTED\", cell)\n  }\n\n  async #onRelayDataCell(cell: RelayCell<Opaque>) {\n    const cell2 = RelayCell.Streamful.intoOrThrow(cell, RelayDataCell)\n\n    Console.debug(cell2)\n\n    const exit = cell2.circuit.targets[cell2.circuit.targets.length - 1]\n\n    exit.delivery--\n\n    if (exit.delivery === 900) {\n      exit.delivery = 1000\n\n      if (cell2.digest == null)\n        throw new InvalidRelayCellDigestError()\n\n      const digest = new RelaySendmeDigest(cell2.digest)\n      const sendme = new RelaySendmeCircuitCell(1, digest)\n\n      const sendme_cell = RelayCell.Streamless.from(cell2.circuit, undefined, sendme)\n      this.output.enqueue(sendme_cell.cellOrThrow())\n    }\n\n    await this.events.emit(\"RELAY_DATA\", cell2)\n  }\n\n  async #onRelayEndCell(cell: RelayCell<Opaque>) {\n    const cell2 = RelayCell.Streamful.intoOrThrow(cell, RelayEndCell)\n\n    Console.debug(cell2)\n\n    await this.events.emit(\"RELAY_END\", cell2)\n  }\n\n  async #onRelayDropCell(cell: RelayCell<Opaque>) {\n    Console.debug(RelayCell.Streamful.intoOrThrow(cell, RelayDropCell))\n  }\n\n  async #onRelayTruncatedCell(cell: RelayCell<Opaque>) {\n    const cell2 = RelayCell.Streamless.intoOrThrow(cell, RelayTruncatedCell)\n\n    Console.debug(cell2)\n\n    cell2.circuit.targets.pop()\n\n    await this.events.emit(\"RELAY_TRUNCATED\", cell2)\n  }\n\n  async #onRelaySendmeCircuitCell(cell: RelayCell<Opaque>) {\n    const cell2 = RelayCell.Streamless.intoOrThrow(cell, RelaySendmeCircuitCell)\n\n    Console.debug(cell2)\n\n    if (cell2.fragment.version === 0) {\n      const exit = cell2.circuit.targets[cell2.circuit.targets.length - 1]\n\n      exit.package += 100\n\n      return\n    }\n\n    if (cell2.fragment.version === 1) {\n      const digest = cell2.fragment.fragment.readIntoOrThrow(RelaySendmeDigest)\n\n      Console.debug(digest)\n\n      const exit = cell2.circuit.targets[cell2.circuit.targets.length - 1]\n      const digest2 = exit.digests.shift()\n\n      if (digest2 == null)\n        throw new InvalidRelaySendmeCellDigestError()\n      if (!Bytes.equals(digest.digest, digest2))\n        throw new InvalidRelaySendmeCellDigestError()\n\n      exit.package += 100\n\n      return\n    }\n\n    console.warn(`Unknown RELAY_SENDME circuit cell version ${cell2.fragment.version}`)\n  }\n\n  async #onRelaySendmeStreamCell(cell: RelayCell<Opaque>) {\n    const cell2 = RelayCell.Streamful.intoOrThrow(cell, RelaySendmeStreamCell)\n\n    Console.debug(cell2)\n\n    cell2.stream.package += 50\n  }\n\n\n  async waitOrThrow(signal = new AbortController().signal) {\n    if (this.state.type === \"handshaked\")\n      return\n    await Plume.waitWithCloseAndErrorOrThrow(this.events, \"handshaked\", (future: Future<void>) => future.resolve(), signal)\n  }\n\n  async #createCircuitOrThrow(signal = new AbortController().signal) {\n    return await this.circuits.runOrWait((circuits) => {\n      while (!signal.aborted) {\n        const rawCircuitId = new Cursor(Bytes.random(4)).getUint32OrThrow()\n\n        if (rawCircuitId === 0)\n          continue\n\n        const circuitId = new Bitset(rawCircuitId, 32)\n          .enableBE(0)\n          .unsign()\n          .value\n\n        if (circuits.has(circuitId))\n          continue\n\n        const circuit = new SecretCircuit(circuitId, this)\n\n        circuits.set(circuitId, circuit)\n\n        return circuit\n      }\n\n      throw new Error(\"Aborted\", { cause: signal.reason })\n    })\n  }\n\n  async #waitCreatedFast(circuit: SecretCircuit, signal = new AbortController().signal): Promise<Cell.Circuitful<CreatedFastCell>> {\n    return await Plume.waitWithCloseAndErrorOrThrow(this.events, \"CREATED_FAST\", async (future: Future<Cell.Circuitful<CreatedFastCell>>, e) => {\n      if (e.circuit !== circuit)\n        return\n      future.resolve(e)\n    }, signal)\n  }\n\n  async createOrThrow(signal = new AbortController().signal) {\n    if (this.#state.type !== \"handshaked\")\n      throw new InvalidTorStateError()\n\n    const circuit = await this.#createCircuitOrThrow(signal)\n    const material = Bytes.random(20)\n\n    const create_fast = new CreateFastCell(material)\n    this.output.enqueue(Cell.Circuitful.from(circuit, create_fast))\n\n    const created_fast = await this.#waitCreatedFast(circuit, signal)\n\n    const k0 = Bytes.concat([material, created_fast.fragment.material])\n    const result = await KDFTorResult.computeOrThrow(k0)\n\n    if (!Bytes.equals(result.keyHash, created_fast.fragment.derivative))\n      throw new InvalidKdfKeyHashError()\n\n    const forwardDigest = Sha1.get().getOrThrow().Hasher.createOrThrow()\n    const backwardDigest = Sha1.get().getOrThrow().Hasher.createOrThrow()\n\n    forwardDigest.updateOrThrow(result.forwardDigest)\n    backwardDigest.updateOrThrow(result.backwardDigest)\n\n    using forwardKeyMemory = new AesWasm.Memory(result.forwardKey)\n    using forwardIvMemory = new AesWasm.Memory(new Uint8Array(16))\n\n    using backwardKeyMemory = new AesWasm.Memory(result.backwardKey)\n    using backwardIvMemory = new AesWasm.Memory(new Uint8Array(16))\n\n    const forwardKey = new Aes128Ctr128BEKey(forwardKeyMemory, forwardIvMemory)\n    const backwardKey = new Aes128Ctr128BEKey(backwardKeyMemory, backwardIvMemory)\n\n    const target = new Target(this.#state.guard.identity, circuit, forwardDigest, backwardDigest, forwardKey, backwardKey)\n\n    circuit.targets.push(target)\n\n    return new Circuit(circuit)\n  }\n\n}"],"names":["SuperEventTarget","Ciphers","Mutex","Resizer","Future","TlsClientDuplex","HalfDuplex","RsaWasm","AesWasm","OldCell","VersionsCell","Plume","cursor","Cursor","Readable","Cell","PaddingCell","Console","VariablePaddingCell","InvalidCellError","cell","CertsCell","AuthChallengeCell","NetinfoCell","CreatedFastCell","DestroyCell","RelayCell","InvalidTorVersionError","Certs","address","TypedAddress","PaddingNegociateCell","RelayExtended2Cell","RelayConnectedCell","RelayDataCell","RelayEndCell","RelayDropCell","RelayTruncatedCell","RelaySendmeCircuitCell","RelaySendmeStreamCell","ExpectedStreamError","InvalidRelayCellDigestError","RelaySendmeDigest","InvalidRelaySendmeCellDigestError","Bytes","Bitset","circuit","SecretCircuit","InvalidTorStateError","CreateFastCell","KDFTorResult","InvalidKdfKeyHashError","Sha1","__addDisposableResource","Aes128Ctr128BEKey","target","Target","Circuit"],"mappings":"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"}