UNPKG

@hazae41/kdbx

Version:

Rust-like KeePass (KDBX 4) file format for TypeScript

1 lines 8.79 kB
{"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":"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"}