{"version":3,"file":"index.cjs","sources":["../../../../../../../src/mods/kdbx/headers/inner/index.ts"],"sourcesContent":["import { Opaque, Readable, Writable } from \"@hazae41/binary\"\nimport { Cursor } from \"@hazae41/cursor\"\nimport { Lengthed } from \"@hazae41/lengthed\"\nimport { Vector } from \"mods/kdbx/vector/index.js\"\nimport { Cipher } from \"./cipher/index.js\"\nimport { KeePassFile } from \"./markup/index.js\"\n\nexport class HeadersAndContentWithBytes {\n\n  constructor(\n    readonly headers: Headers,\n    readonly content: ContentWithBytes\n  ) { }\n\n  static computeOrThrow(headers: Headers, content: KeePassFile) {\n    const contentWithBytes = ContentWithBytes.computeOrThrow(content)\n    return new HeadersAndContentWithBytes(headers, contentWithBytes)\n  }\n\n  async rotateOrThrow() {\n    return new HeadersAndContentWithBytes(await this.headers.rotateOrThrow(), this.content)\n  }\n\n  sizeOrThrow() {\n    return this.headers.sizeOrThrow() + this.content.sizeOrThrow()\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    this.headers.writeOrThrow(cursor)\n    this.content.writeOrThrow(cursor)\n  }\n\n  recomputeOrThrow() {\n    return HeadersAndContentWithBytes.computeOrThrow(this.headers, this.content.value)\n  }\n\n}\n\nexport class ContentWithBytes {\n\n  constructor(\n    readonly bytes: Opaque,\n    readonly value: KeePassFile\n  ) { }\n\n  static computeOrThrow(content: KeePassFile) {\n    const string = new XMLSerializer().serializeToString(content.document)\n    const opaque = new Opaque(new TextEncoder().encode(string))\n\n    return new ContentWithBytes(opaque, content)\n  }\n\n  sizeOrThrow() {\n    return this.bytes.sizeOrThrow()\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    this.bytes.writeOrThrow(cursor)\n  }\n\n  recomputeOrThrow() {\n    return ContentWithBytes.computeOrThrow(this.value)\n  }\n\n}\n\nexport namespace ContentWithBytes {\n\n  export function readOrThrow(cursor: Cursor) {\n    const bytes = new Opaque(cursor.readOrThrow(cursor.remaining))\n\n    const raw = new TextDecoder().decode(bytes.bytes)\n    const xml = new DOMParser().parseFromString(raw, \"text/xml\")\n\n    return new ContentWithBytes(bytes, new KeePassFile(xml))\n  }\n\n}\n\nexport namespace HeadersAndContentWithBytes {\n\n  export function readOrThrow(cursor: Cursor) {\n    const headers = Headers.readOrThrow(cursor)\n    const content = ContentWithBytes.readOrThrow(cursor)\n\n    return new HeadersAndContentWithBytes(headers, content)\n  }\n\n}\n\nexport interface HeadersInit {\n  readonly cipher: Cipher\n  readonly key: Opaque<32>\n  readonly binary: readonly Opaque[]\n}\n\nexport class Headers {\n\n  constructor(\n    readonly value: Vector<{ 1: readonly [Cipher], 2: readonly [Opaque], 3: readonly Opaque[] }>,\n  ) { }\n\n  get cipher() {\n    return this.value.value[1][0]\n  }\n\n  get key() {\n    return this.value.value[2][0]\n  }\n\n  get binary() {\n    return this.value.value[3]\n  }\n\n  sizeOrThrow() {\n    return this.value.sizeOrThrow()\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    this.value.writeOrThrow(cursor)\n  }\n\n  cloneOrThrow() {\n    return Readable.readFromBytesOrThrow(Headers, Writable.writeToBytesOrThrow(this))\n  }\n\n  async rotateOrThrow() {\n    const { cipher, binary } = this\n\n    const key = new Opaque(new Uint8Array(crypto.getRandomValues(new Uint8Array(32))) as Uint8Array & Lengthed<32>)\n\n    return Headers.initOrThrow({ cipher, key, binary })\n  }\n\n  async getCipherOrThrow() {\n    return await this.cipher.initOrThrow(this.key.bytes)\n  }\n\n}\n\nexport namespace Headers {\n\n  export function initOrThrow(init: HeadersInit) {\n    const { cipher, key, binary } = init\n\n    const indexed = {\n      1: [cipher],\n      2: [key],\n      3: binary\n    } as const\n\n    return new Headers(Vector.initOrThrow(indexed))\n  }\n\n  export function readOrThrow(cursor: Cursor) {\n    const vector = Vector.readOrThrow(cursor)\n\n    if (vector.value[1].length !== 1)\n      throw new Error()\n    if (vector.value[2].length !== 1)\n      throw new Error()\n    if (vector.value[3].length === 0)\n      throw new Error()\n\n    const indexed = {\n      1: [vector.value[1][0].readIntoOrThrow(Cipher)],\n      2: [vector.value[2][0]],\n      3: vector.value[3]\n    } as const\n\n    return new Headers(new Vector(vector.bytes, indexed))\n  }\n\n}\n\n"],"names":["Opaque","KeePassFile","Readable","Writable","binary","Vector","Cipher"],"mappings":";;;;;;;MAOa,0BAA0B,CAAA;AAG1B,IAAA,OAAA;AACA,IAAA,OAAA;IAFX,WAAA,CACW,OAAgB,EAChB,OAAyB,EAAA;QADzB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACd;AAEJ,IAAA,OAAO,cAAc,CAAC,OAAgB,EAAE,OAAoB,EAAA;QAC1D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC;AACjE,QAAA,OAAO,IAAI,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAClE;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,OAAO,IAAI,0BAA0B,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;IACzF;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;IAChE;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;IACnC;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACpF;AAED;MAEY,gBAAgB,CAAA;AAGhB,IAAA,KAAA;AACA,IAAA,KAAA;IAFX,WAAA,CACW,KAAa,EACb,KAAkB,EAAA;QADlB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IAEJ,OAAO,cAAc,CAAC,OAAoB,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtE,QAAA,MAAM,MAAM,GAAG,IAAIA,aAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE3D,QAAA,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9C;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;IACjC;IAEA,gBAAgB,GAAA;QACd,OAAO,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACpD;AAED;AAED,CAAA,UAAiB,gBAAgB,EAAA;IAE/B,SAAgB,WAAW,CAAC,MAAc,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAIA,aAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAE9D,QAAA,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC;QAE5D,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAIC,iBAAW,CAAC,GAAG,CAAC,CAAC;IAC1D;AAPgB,IAAA,gBAAA,CAAA,WAAW,cAO1B;AAEH,CAAC,EAXgB,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;AAajC,CAAA,UAAiB,0BAA0B,EAAA;IAEzC,SAAgB,WAAW,CAAC,MAAc,EAAA;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;QAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC;AAEpD,QAAA,OAAO,IAAI,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC;IACzD;AALgB,IAAA,0BAAA,CAAA,WAAW,cAK1B;AAEH,CAAC,EATgB,0BAA0B,KAA1B,0BAA0B,GAAA,EAAA,CAAA,CAAA;MAiB9B,OAAO,CAAA;AAGP,IAAA,KAAA;AADX,IAAA,WAAA,CACW,KAAmF,EAAA;QAAnF,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;AAEJ,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;IACjC;IAEA,YAAY,GAAA;AACV,QAAA,OAAOC,eAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAEC,eAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,EAAE,MAAM,UAAEC,QAAM,EAAE,GAAG,IAAI;QAE/B,MAAM,GAAG,GAAG,IAAIJ,aAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAA8B,CAAC;AAE/G,QAAA,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,UAAEI,QAAM,EAAE,CAAC;IACrD;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACtD;AAED;AAED,CAAA,UAAiB,OAAO,EAAA;IAEtB,SAAgB,WAAW,CAAC,IAAiB,EAAA;QAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;AAEpC,QAAA,MAAM,OAAO,GAAG;YACd,CAAC,EAAE,CAAC,MAAM,CAAC;YACX,CAAC,EAAE,CAAC,GAAG,CAAC;AACR,YAAA,CAAC,EAAE;SACK;QAEV,OAAO,IAAI,OAAO,CAACC,cAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjD;AAVgB,IAAA,OAAA,CAAA,WAAW,cAU1B;IAED,SAAgB,WAAW,CAAC,MAAc,EAAA;QACxC,MAAM,MAAM,GAAGA,cAAM,CAAC,WAAW,CAAC,MAAM,CAAC;QAEzC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,EAAE;QACnB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,EAAE;QACnB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,EAAE;AAEnB,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAACC,cAAM,CAAC,CAAC;YAC/C,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SACT;AAEV,QAAA,OAAO,IAAI,OAAO,CAAC,IAAID,cAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvD;AAjBgB,IAAA,OAAA,CAAA,WAAW,cAiB1B;AAEH,CAAC,EAjCgB,OAAO,KAAP,OAAO,GAAA,EAAA,CAAA,CAAA;;;;;;"}