{"version":3,"file":"cell.mjs","sources":["../../../../../../../../../src/mods/tor/binary/cells/direct/certs/cell.ts"],"sourcesContent":["import { Readable } from \"@hazae41/binary\"\nimport { Cursor } from \"@hazae41/cursor\"\nimport { Mutable } from \"libs/typescript/typescript.js\"\nimport { CrossCert } from \"mods/tor/binary/certs/cross/cert.js\"\nimport { Ed25519Cert } from \"mods/tor/binary/certs/ed25519/cert.js\"\nimport { RsaCert } from \"mods/tor/binary/certs/rsa/cert.js\"\nimport { Certs, DuplicatedCertError, UnknownCertError } from \"mods/tor/certs/certs.js\"\nimport { Unimplemented } from \"mods/tor/errors.js\"\n\nexport class CertsCell {\n  readonly #class = CertsCell\n\n  static readonly old = false\n  static readonly circuit = false\n  static readonly command = 129\n\n  constructor(\n    readonly certs: Partial<Certs>\n  ) { }\n\n  get circuit(): false {\n    return this.#class.circuit\n  }\n\n  get command(): 129 {\n    return this.#class.command\n  }\n\n  sizeOrThrow(): never {\n    throw new Unimplemented()\n  }\n\n  writeOrThrow(cursor: Cursor): never {\n    throw new Unimplemented()\n  }\n\n  static readOrThrow(cursor: Cursor) {\n    const certs: Partial<Mutable<Certs>> = {}\n\n    const count = cursor.readUint8OrThrow()\n\n    for (let i = 0; i < count; i++) {\n      const offset = cursor.offset\n\n      const type = cursor.readUint8OrThrow()\n      const length = cursor.readUint16OrThrow()\n\n      cursor.offset = offset\n\n      const bytes = cursor.readOrThrow(1 + 2 + length)\n\n      if (type === RsaCert.types.RSA_SELF) {\n        if (certs.rsa_self != null)\n          throw new DuplicatedCertError()\n\n        certs.rsa_self = Readable.readFromBytesOrThrow(RsaCert, bytes)\n        continue\n      }\n\n      if (type === RsaCert.types.RSA_TO_AUTH) {\n        if (certs.rsa_to_auth != null)\n          throw new DuplicatedCertError()\n\n        certs.rsa_to_auth = Readable.readFromBytesOrThrow(RsaCert, bytes)\n        continue\n      }\n\n      if (type === RsaCert.types.RSA_TO_TLS) {\n        if (certs.rsa_to_tls != null)\n          throw new DuplicatedCertError()\n\n        certs.rsa_to_tls = Readable.readFromBytesOrThrow(RsaCert, bytes)\n        continue\n      }\n\n      if (type === CrossCert.types.RSA_TO_ED) {\n        if (certs.rsa_to_ed != null)\n          throw new DuplicatedCertError()\n\n        certs.rsa_to_ed = Readable.readFromBytesOrThrow(CrossCert, bytes)\n        continue\n      }\n\n      if (type === Ed25519Cert.types.ED_TO_SIGN) {\n        if (certs.ed_to_sign != null)\n          throw new DuplicatedCertError()\n\n        certs.ed_to_sign = Readable.readFromBytesOrThrow(Ed25519Cert, bytes)\n        continue\n      }\n\n      if (type === Ed25519Cert.types.SIGN_TO_TLS) {\n        if (certs.sign_to_tls != null)\n          throw new DuplicatedCertError()\n\n        certs.sign_to_tls = Readable.readFromBytesOrThrow(Ed25519Cert, bytes)\n        continue\n      }\n\n      if (type === Ed25519Cert.types.SIGN_TO_AUTH) {\n        if (certs.sign_to_auth != null)\n          throw new DuplicatedCertError()\n\n        certs.sign_to_auth = Readable.readFromBytesOrThrow(Ed25519Cert, bytes)\n        continue\n      }\n\n      throw new UnknownCertError()\n    }\n\n    return new CertsCell(certs)\n  }\n\n}"],"names":[],"mappings":"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"}