@hazae41/kdbx
Version:
Rust-like KeePass (KDBX 4) file format for TypeScript
1 lines • 22.4 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../../../src/mods/kdbx/index.ts"],"sourcesContent":["export * from \"./dictionary/index.js\"\nexport * from \"./headers/index.js\"\n\nimport { Base64 } from \"@hazae41/base64\"\nimport { Opaque, Readable, Writable } from \"@hazae41/binary\"\nimport { Cursor } from \"@hazae41/cursor\"\nimport { Lengthed } from \"@hazae41/lengthed\"\nimport { gunzip, gzip } from \"libs/gzip/index.js\"\nimport { Inner, Outer } from \"./headers/index.js\"\nimport { Compression, MagicAndVersionAndHeadersWithBytesWithHashAndHmac } from \"./headers/outer/index.js\"\nimport { PreHmacKey } from \"./hmac/index.js\"\n\nexport class PasswordKey {\n readonly #class = PasswordKey\n\n constructor(\n readonly value: Opaque<32>\n ) { }\n\n static async digestOrThrow(password: Uint8Array) {\n const array = await crypto.subtle.digest(\"SHA-256\", password)\n const bytes = new Uint8Array(array) as Uint8Array & Lengthed<32>\n\n return new PasswordKey(new Opaque(bytes))\n }\n\n}\n\nexport class CompositeKey {\n readonly #class = CompositeKey\n\n constructor(\n readonly value: Opaque<32>,\n ) { }\n\n static async digestOrThrow(password: PasswordKey) {\n const array = await crypto.subtle.digest(\"SHA-256\", password.value.bytes)\n const bytes = new Uint8Array(array) as Uint8Array & Lengthed<32>\n\n return new CompositeKey(new Opaque(bytes))\n }\n\n}\n\nexport class DerivedKey {\n readonly #class = DerivedKey\n\n constructor(\n readonly value: Opaque<32>\n ) { }\n\n}\n\nexport class PreMasterKey {\n readonly #class = PreMasterKey\n\n constructor(\n readonly seed: Opaque<32>,\n readonly hash: DerivedKey\n ) { }\n\n sizeOrThrow() {\n return 32 + 32\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeOrThrow(this.seed.bytes)\n cursor.writeOrThrow(this.hash.value.bytes)\n }\n\n async digestOrThrow() {\n const input = Writable.writeToBytesOrThrow(this)\n\n const digest = await crypto.subtle.digest(\"SHA-256\", input)\n const output = new Uint8Array(digest) as Uint8Array & Lengthed<32>\n\n return new MasterKey(new Opaque(output))\n }\n\n}\n\nexport class MasterKey {\n readonly #class = MasterKey\n\n constructor(\n readonly value: Opaque<32>,\n ) { }\n\n}\n\nexport class PreHmacMasterKey {\n readonly #class = PreHmacMasterKey\n\n constructor(\n readonly seed: Opaque<32>,\n readonly hash: DerivedKey\n ) { }\n\n sizeOrThrow() {\n return 32 + 32 + 1\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeOrThrow(this.seed.bytes)\n cursor.writeOrThrow(this.hash.value.bytes)\n cursor.writeUint8OrThrow(1)\n }\n\n async digestOrThrow() {\n const input = Writable.writeToBytesOrThrow(this)\n\n const digest = await crypto.subtle.digest(\"SHA-512\", input)\n const output = new Uint8Array(digest) as Uint8Array & Lengthed<64>\n\n return new HmacMasterKey(new Opaque(output))\n }\n\n}\n\nexport class HmacMasterKey {\n readonly #class = HmacMasterKey\n\n constructor(\n readonly bytes: Opaque<64>,\n ) { }\n\n}\n\nexport class MasterKeys {\n readonly #class = MasterKeys\n\n constructor(\n readonly encrypter: MasterKey,\n readonly authifier: HmacMasterKey\n ) { }\n\n}\n\nexport namespace Database {\n\n export class Decrypted {\n\n constructor(\n readonly outer: Outer.MagicAndVersionAndHeadersWithBytesWithHashAndHmacWithKeys,\n readonly inner: Inner.HeadersAndContentWithBytes\n ) { }\n\n async rotateOrThrow(composite: CompositeKey) {\n return new Decrypted(await this.outer.rotateOrThrow(composite), await this.inner.rotateOrThrow())\n }\n\n async encryptOrThrow() {\n const cipher = await this.inner.headers.getCipherOrThrow()\n\n const $$values = this.inner.content.value.document.querySelectorAll(\"Value[Protected='True']\")\n\n for (let i = 0; i < $$values.length; i++) {\n const $value = $$values[i]\n\n const decrypted = new TextEncoder().encode($value.innerHTML)\n using encrypted = cipher.applyOrThrow(decrypted)\n\n $value.innerHTML = Base64.encodePaddedOrThrow(encrypted.bytes)\n }\n\n {\n const { cipher, iv, compression } = this.outer.data.data.value.headers\n\n const degzipped = Writable.writeToBytesOrThrow(this.inner.recomputeOrThrow())\n\n const engzipped = compression === Compression.Gzip ? new Uint8Array(await gzip(degzipped)) : degzipped\n const encrypted = await cipher.encryptOrThrow(this.outer.keys.encrypter.value.bytes, iv.bytes, engzipped)\n\n const blocks = new Array<BlockWithIndex>()\n\n const cursor = new Cursor(encrypted)\n const splits = cursor.splitOrThrow(1048576)\n\n let index = 0n\n\n for (let x = splits.next(); true; index++, x = splits.next()) {\n if (x.done)\n break\n\n blocks.push(await BlockWithIndex.fromOrThrow(this.outer.keys, index, x.value))\n\n continue\n }\n\n blocks.push(await BlockWithIndex.fromOrThrow(this.outer.keys, index, new Uint8Array(0)))\n\n return new Encrypted(this.outer.data, new Blocks(blocks))\n }\n }\n\n }\n\n export class Encrypted {\n\n constructor(\n readonly outer: Outer.MagicAndVersionAndHeadersWithBytesWithHashAndHmac,\n readonly inner: Blocks\n ) { }\n\n sizeOrThrow() {\n return this.outer.sizeOrThrow() + this.inner.sizeOrThrow()\n }\n\n writeOrThrow(cursor: Cursor) {\n this.outer.writeOrThrow(cursor)\n this.inner.writeOrThrow(cursor)\n }\n\n cloneOrThrow() {\n return new Encrypted(this.outer.cloneOrThrow(), this.inner.cloneOrThrow())\n }\n\n async decryptOrThrow(composite: CompositeKey) {\n const { cipher, iv, compression } = this.outer.data.value.headers\n\n const keys = await this.outer.deriveOrThrow(composite)\n\n await this.outer.verifyOrThrow(keys)\n\n const length = this.inner.blocks.reduce((a, b) => a + b.block.data.bytes.length, 0)\n const cursor = new Cursor(new Uint8Array(length))\n\n for (const block of this.inner.blocks) {\n await block.verifyOrThrow(keys)\n\n cursor.writeOrThrow(block.block.data.bytes)\n\n continue\n }\n\n const decrypted = await cipher.decryptOrThrow(keys.encrypter.value.bytes, iv.bytes, cursor.bytes)\n const degzipped = compression === Compression.Gzip ? await gunzip(decrypted) : decrypted\n\n const inner = Readable.readFromBytesOrThrow(Inner.HeadersAndContentWithBytes, degzipped)\n\n {\n const cipher = await inner.headers.getCipherOrThrow()\n\n const $$values = inner.content.value.document.querySelectorAll(\"Value[Protected='True']\")\n\n for (let i = 0; i < $$values.length; i++) {\n const $value = $$values[i]\n\n const encrypted = Base64.decodePaddedOrThrow($value.innerHTML)\n using decrypted = cipher.applyOrThrow(encrypted)\n\n $value.innerHTML = new TextDecoder().decode(decrypted.bytes)\n }\n\n const outer = new Outer.MagicAndVersionAndHeadersWithBytesWithHashAndHmacWithKeys(this.outer, keys)\n\n return new Decrypted(outer, inner)\n }\n }\n\n }\n\n export namespace Encrypted {\n\n export function readOrThrow(cursor: Cursor) {\n const head = MagicAndVersionAndHeadersWithBytesWithHashAndHmac.readOrThrow(cursor)\n const body = Blocks.readOrThrow(cursor)\n\n return new Encrypted(head, body)\n }\n\n }\n\n}\n\nexport class Blocks {\n\n constructor(\n readonly blocks: BlockWithIndex[]\n ) { }\n\n sizeOrThrow() {\n return this.blocks.reduce((a, b) => a + b.sizeOrThrow(), 0)\n }\n\n writeOrThrow(cursor: Cursor) {\n for (const block of this.blocks)\n block.writeOrThrow(cursor)\n return\n }\n\n cloneOrThrow() {\n return new Blocks(this.blocks.map(block => block.cloneOrThrow()))\n }\n\n}\n\nexport namespace Blocks {\n\n export function readOrThrow(cursor: Cursor) {\n const blocks = new Array<BlockWithIndex>()\n\n for (let index = 0n; true; index++) {\n const block = Block.readOrThrow(cursor)\n\n blocks.push(new BlockWithIndex(index, block))\n\n if (block.data.bytes.length === 0)\n break\n\n continue\n }\n\n return new Blocks(blocks)\n }\n\n}\n\nexport class BlockWithIndexPreHmacData {\n\n constructor(\n readonly index: bigint,\n readonly block: Opaque,\n ) { }\n\n sizeOrThrow() {\n return 8 + 4 + this.block.bytes.length\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeUint64OrThrow(this.index, true)\n cursor.writeUint32OrThrow(this.block.bytes.length, true)\n cursor.writeOrThrow(this.block.bytes)\n }\n\n}\n\nexport class BlockWithIndex {\n\n constructor(\n readonly index: bigint,\n readonly block: Block\n ) { }\n\n sizeOrThrow() {\n return this.block.sizeOrThrow()\n }\n\n writeOrThrow(cursor: Cursor) {\n this.block.writeOrThrow(cursor)\n }\n\n cloneOrThrow() {\n return new BlockWithIndex(this.index, this.block.cloneOrThrow())\n }\n\n async verifyOrThrow(keys: MasterKeys) {\n const { index } = this\n\n const major = keys.authifier.bytes\n\n const key = await new PreHmacKey(index, major).digestOrThrow()\n\n const preimage = new BlockWithIndexPreHmacData(this.index, this.block.data)\n const prebytes = Writable.writeToBytesOrThrow(preimage)\n\n await key.verifyOrThrow(prebytes, this.block.hmac.bytes)\n }\n\n}\n\nexport namespace BlockWithIndex {\n\n export async function fromOrThrow(keys: MasterKeys, index: bigint, data: Uint8Array) {\n const major = keys.authifier.bytes\n\n const key = await new PreHmacKey(index, major).digestOrThrow()\n\n const preimage = new BlockWithIndexPreHmacData(index, new Opaque(data))\n const prebytes = Writable.writeToBytesOrThrow(preimage)\n\n const hmac = new Opaque(await key.signOrThrow(prebytes) as Uint8Array & Lengthed<32>)\n\n const block = new Block(hmac, new Opaque(data))\n\n return new BlockWithIndex(index, block)\n }\n\n}\n\nexport class Block {\n\n constructor(\n readonly hmac: Opaque<32>,\n readonly data: Opaque\n ) { }\n\n sizeOrThrow() {\n return 32 + 4 + this.data.bytes.length\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeOrThrow(this.hmac.bytes)\n cursor.writeUint32OrThrow(this.data.bytes.length, true)\n cursor.writeOrThrow(this.data.bytes)\n }\n\n cloneOrThrow() {\n return new Block(this.hmac.cloneOrThrow(), this.data.cloneOrThrow())\n }\n\n}\n\nexport namespace Block {\n\n export function readOrThrow(cursor: Cursor) {\n const hmac = new Opaque(cursor.readOrThrow(32))\n const size = cursor.readUint32OrThrow(true)\n const data = new Opaque(cursor.readOrThrow(size))\n\n return new Block(hmac, data)\n }\n\n}\n\n"],"names":["Opaque","Writable","Database","Base64","Compression","gzip","cursor","Cursor","gunzip","Readable","Inner.HeadersAndContentWithBytes","Outer.MagicAndVersionAndHeadersWithBytesWithHashAndHmacWithKeys","MagicAndVersionAndHeadersWithBytesWithHashAndHmac","PreHmacKey"],"mappings":"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"}