@hazae41/kdbx
Version:
Rust-like KeePass (KDBX 4) file format for TypeScript
1 lines • 41.2 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../../../../../src/mods/kdbx/headers/outer/index.ts"],"sourcesContent":["export * from \"./cipher/index.js\"\nexport * from \"./compression/index.js\"\n\nimport { Argon2 } from \"@hazae41/argon2\"\nimport { Opaque, Readable, Writable } from \"@hazae41/binary\"\nimport { Cursor } from \"@hazae41/cursor\"\nimport { Lengthed } from \"@hazae41/lengthed\"\nimport { Bytes } from \"libs/bytes/index.js\"\nimport { StringAsUuid } from \"libs/uuid/index.js\"\nimport { Dictionary, Entries, Value } from \"mods/kdbx/dictionary/index.js\"\nimport { PreHmacKey } from \"mods/kdbx/hmac/index.js\"\nimport { CompositeKey, DerivedKey, MasterKeys, PreHmacMasterKey, PreMasterKey } from \"mods/kdbx/index.js\"\nimport { Vector } from \"mods/kdbx/vector/index.js\"\nimport { Cipher } from \"./cipher/index.js\"\nimport { Compression } from \"./compression/index.js\"\n\nexport class Version {\n\n constructor(\n readonly major: number,\n readonly minor: number,\n ) { }\n\n sizeOrThrow() {\n return 2 + 2\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeUint16OrThrow(this.minor, true)\n cursor.writeUint16OrThrow(this.major, true)\n }\n\n cloneOrThrow() {\n return this\n }\n\n}\n\nexport class MagicAndVersionAndHeadersWithBytesWithHashAndHmacWithKeys {\n\n constructor(\n readonly data: MagicAndVersionAndHeadersWithBytesWithHashAndHmac,\n readonly keys: MasterKeys\n ) { }\n\n sizeOrThrow() {\n return this.data.sizeOrThrow()\n }\n\n writeOrThrow(cursor: Cursor) {\n this.data.writeOrThrow(cursor)\n }\n\n async rotateOrThrow(composite: CompositeKey) {\n const data = this.data.data.rotateOrThrow()\n const keys = await data.deriveOrThrow(composite)\n\n const hash = await MagicAndVersionAndHeadersWithBytesWithHashAndHmac.computeOrThrow(data, keys)\n\n return new MagicAndVersionAndHeadersWithBytesWithHashAndHmacWithKeys(hash, keys)\n }\n\n}\n\n\nexport class MagicAndVersionAndHeadersWithBytesWithHashAndHmac {\n\n constructor(\n readonly data: MagicAndVersionAndHeadersWithBytes,\n readonly hash: Opaque<32>,\n readonly hmac: Opaque<32>\n ) { }\n\n static async computeOrThrow(data: MagicAndVersionAndHeadersWithBytes, keys: MasterKeys) {\n const index = 0xFFFFFFFFFFFFFFFFn\n const major = keys.authifier.bytes\n\n const key = await new PreHmacKey(index, major).digestOrThrow()\n\n const hash = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", data.bytes.bytes)) as Uint8Array & Lengthed<32>\n const hmac = new Uint8Array(await key.signOrThrow(data.bytes.bytes)) as Uint8Array & Lengthed<32>\n\n return new MagicAndVersionAndHeadersWithBytesWithHashAndHmac(data, new Opaque(hash), new Opaque(hmac))\n }\n\n async verifyOrThrow(keys: MasterKeys) {\n const hash = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", this.data.bytes.bytes))\n\n if (!Bytes.equals(hash, this.hash.bytes))\n throw new Error()\n\n const index = 0xFFFFFFFFFFFFFFFFn\n const major = keys.authifier.bytes\n\n const key = await new PreHmacKey(index, major).digestOrThrow()\n\n await key.verifyOrThrow(this.data.bytes.bytes, this.hmac.bytes)\n }\n\n sizeOrThrow() {\n return this.data.sizeOrThrow() + 32 + 32\n }\n\n writeOrThrow(cursor: Cursor) {\n this.data.writeOrThrow(cursor)\n\n cursor.writeOrThrow(this.hash.bytes)\n cursor.writeOrThrow(this.hmac.bytes)\n }\n\n cloneOrThrow() {\n const data = this.data.cloneOrThrow()\n const hash = this.hash.cloneOrThrow()\n const hmac = this.hmac.cloneOrThrow()\n\n return new MagicAndVersionAndHeadersWithBytesWithHashAndHmac(data, hash, hmac)\n }\n\n async deriveOrThrow(composite: CompositeKey) {\n return await this.data.deriveOrThrow(composite)\n }\n\n}\n\nexport namespace MagicAndVersionAndHeadersWithBytesWithHashAndHmac {\n\n export function readOrThrow(cursor: Cursor) {\n const data = MagicAndVersionAndHeadersWithBytes.readOrThrow(cursor)\n const hash = new Opaque(cursor.readOrThrow(32))\n const hmac = new Opaque(cursor.readOrThrow(32))\n\n return new MagicAndVersionAndHeadersWithBytesWithHashAndHmac(data, hash, hmac)\n }\n\n}\n\nexport class MagicAndVersionAndHeadersWithBytes {\n\n constructor(\n readonly value: MagicAndVersionAndHeaders,\n readonly bytes: Opaque,\n ) { }\n\n static computeOrThrow(value: MagicAndVersionAndHeaders) {\n const bytes = new Opaque(Writable.writeToBytesOrThrow(value))\n return new MagicAndVersionAndHeadersWithBytes(value, bytes)\n }\n\n rotateOrThrow() {\n return MagicAndVersionAndHeadersWithBytes.computeOrThrow(this.value.rotateOrThrow())\n }\n\n sizeOrThrow() {\n return this.bytes.bytes.length\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeOrThrow(this.bytes.bytes)\n }\n\n cloneOrThrow() {\n const value = this.value.cloneOrThrow()\n const bytes = this.bytes.cloneOrThrow()\n\n return new MagicAndVersionAndHeadersWithBytes(value, bytes)\n }\n\n async deriveOrThrow(composite: CompositeKey) {\n return await this.value.deriveOrThrow(composite)\n }\n\n}\n\nexport namespace MagicAndVersionAndHeadersWithBytes {\n\n export function readOrThrow(cursor: Cursor) {\n const start = cursor.offset\n\n const value = MagicAndVersionAndHeaders.readOrThrow(cursor)\n const bytes = new Opaque(cursor.bytes.subarray(start, cursor.offset))\n\n return new MagicAndVersionAndHeadersWithBytes(value, bytes)\n }\n\n}\n\nexport class MagicAndVersionAndHeaders {\n\n constructor(\n readonly version: Version,\n readonly headers: Headers\n ) { }\n\n rotateOrThrow() {\n const { version } = this\n\n const headers = this.headers.rotateOrThrow()\n\n return new MagicAndVersionAndHeaders(version, headers)\n }\n\n sizeOrThrow() {\n return 4 + 4 + this.version.sizeOrThrow() + this.headers.sizeOrThrow()\n }\n\n writeOrThrow(cursor: Cursor) {\n cursor.writeUint32OrThrow(0x9AA2D903, true)\n cursor.writeUint32OrThrow(0xB54BFB67, true)\n\n this.version.writeOrThrow(cursor)\n this.headers.writeOrThrow(cursor)\n }\n\n cloneOrThrow() {\n const version = this.version.cloneOrThrow()\n const headers = this.headers.cloneOrThrow()\n\n return new MagicAndVersionAndHeaders(version, headers)\n }\n\n async deriveOrThrow(composite: CompositeKey) {\n return await this.headers.deriveOrThrow(composite)\n }\n\n}\n\nexport namespace MagicAndVersionAndHeaders {\n\n export function readOrThrow(cursor: Cursor) {\n const alpha = cursor.readUint32OrThrow(true)\n\n if (alpha !== 0x9AA2D903)\n throw new Error()\n\n const beta = cursor.readUint32OrThrow(true)\n\n if (beta !== 0xB54BFB67)\n throw new Error()\n\n const minor = cursor.readUint16OrThrow(true)\n const major = cursor.readUint16OrThrow(true)\n\n const version = new Version(major, minor)\n\n if (major !== 4)\n throw new Error()\n\n const headers = Headers.readOrThrow(cursor)\n\n return new MagicAndVersionAndHeaders(version, headers)\n }\n\n}\n\nexport interface HeadersInit {\n readonly cipher: Cipher\n readonly compression: Compression\n readonly seed: Opaque<32>\n readonly iv: Opaque\n readonly kdf: KdfParameters\n readonly custom?: Dictionary\n}\n\nexport class Headers {\n\n constructor(\n readonly value: Vector<{ 2: readonly [Cipher], 3: readonly [Compression], 4: readonly [Opaque<32>], 7: readonly [Opaque], 11: readonly [KdfParameters], 12?: readonly [Dictionary] }>,\n ) { }\n\n get cipher() {\n return this.value.value[2][0]\n }\n\n get compression() {\n return this.value.value[3][0]\n }\n\n get seed() {\n return this.value.value[4][0]\n }\n\n get iv() {\n return this.value.value[7][0]\n }\n\n get kdf() {\n return this.value.value[11][0]\n }\n\n get custom() {\n return this.value.value[12]?.[0]\n }\n\n rotateOrThrow() {\n const { cipher, compression, custom } = this\n\n const seed = new Opaque(crypto.getRandomValues(new Uint8Array(32)) as Uint8Array & Lengthed<32>)\n const iv = new Opaque(crypto.getRandomValues(new Uint8Array(cipher.IV.length)))\n const kdf = this.kdf.rotateOrThrow()\n\n return Headers.initOrThrow({ cipher, compression, seed, iv, kdf, custom })\n }\n\n sizeOrThrow(): number {\n return this.value.sizeOrThrow()\n }\n\n writeOrThrow(cursor: Cursor): void {\n this.value.writeOrThrow(cursor)\n }\n\n cloneOrThrow() {\n return Readable.readFromBytesOrThrow(Headers, Writable.writeToBytesOrThrow(this))\n }\n\n async deriveOrThrow(composite: CompositeKey) {\n const { seed } = this\n\n const derived = this.kdf.deriveOrThrow(composite)\n\n const encrypter = await new PreMasterKey(seed, derived).digestOrThrow()\n const authifier = await new PreHmacMasterKey(seed, derived).digestOrThrow()\n\n return new MasterKeys(encrypter, authifier)\n }\n\n}\n\nexport namespace Headers {\n\n export function initOrThrow(init: HeadersInit) {\n const { cipher, compression, seed, iv, kdf, custom } = init\n\n if (iv.bytes.length !== cipher.IV.length)\n throw new Error()\n\n const indexed = {\n 2: [cipher],\n 3: [compression],\n 4: [new Opaque(seed.bytes)],\n 7: [new Opaque(iv.bytes)],\n 11: [kdf],\n 12: custom != null ? [custom] as const : undefined\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[2].length !== 1)\n throw new Error()\n if (vector.value[3].length !== 1)\n throw new Error()\n if (vector.value[4].length !== 1)\n throw new Error()\n if (vector.value[4][0].bytes.length !== 32)\n throw new Error()\n if (vector.value[7].length !== 1)\n throw new Error()\n if (vector.value[11].length !== 1)\n throw new Error()\n if (vector.value[12] != null && vector.value[12].length !== 1)\n throw new Error()\n\n const indexed = {\n 2: [vector.value[2][0].readIntoOrThrow(Cipher)],\n 3: [vector.value[3][0].readIntoOrThrow(Compression)],\n 4: [vector.value[4][0] as Opaque<32>],\n 7: [vector.value[7][0]],\n 11: [vector.value[11][0].readIntoOrThrow(KdfParameters)],\n 12: vector.value[12] != null ? [vector.value[12][0].readIntoOrThrow(Dictionary)] as const : undefined\n } as const\n\n return new Headers(new Vector(vector.bytes, indexed))\n }\n}\n\nexport class Seed {\n\n constructor(\n readonly bytes: Opaque<32>\n ) { }\n\n static readOrThrow(cursor: Cursor) {\n return new Seed(new Opaque(cursor.readOrThrow(32)))\n }\n\n}\n\nexport type KdfParameters =\n | KdfParameters.AesKdf\n | KdfParameters.Argon2d\n | KdfParameters.Argon2id\n\nexport namespace KdfParameters {\n\n export class AesKdf {\n\n constructor(\n readonly value: Dictionary<{ $UUID: Value.Bytes, R: Value.UInt32, S: Value.Bytes }>\n ) { }\n\n get seed() {\n return this.value.entries.value[\"S\"].value\n }\n\n get rounds() {\n return this.value.entries.value[\"R\"].value\n }\n\n rotateOrThrow() {\n const { version } = this.value\n\n const $UUID = this.value.entries.value[\"$UUID\"]\n\n const R = this.value.entries.value[\"R\"]\n const S = new Value.Bytes(new Opaque(crypto.getRandomValues(new Uint8Array(32)) as Uint8Array & Lengthed<32>))\n\n const value = Dictionary.initOrThrow(version, { $UUID, R, S })\n\n return new AesKdf(value)\n }\n\n deriveOrThrow(key: CompositeKey): never {\n throw new Error()\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 new AesKdf(this.value.cloneOrThrow())\n }\n\n }\n\n export namespace AesKdf {\n\n export const $UUID = \"c9d9f39a-628a-4460-bf74-0d08c18a4fea\"\n\n export function parseOrThrow(dictionary: Dictionary): AesKdf {\n const { version, entries } = dictionary\n\n if (entries.value[\"$UUID\"] instanceof Value.Bytes === false)\n throw new Error()\n const $UUID = entries.value[\"$UUID\"]\n\n if (entries.value.R instanceof Value.UInt32 === false)\n throw new Error()\n const R = entries.value.R\n\n if (entries.value.S instanceof Value.Bytes === false)\n throw new Error()\n const S = entries.value.S\n\n return new KdfParameters.AesKdf(new Dictionary(version, new Entries(entries.bytes, { $UUID, R, S })))\n }\n\n }\n\n export type Argon2 =\n | Argon2d\n | Argon2id\n\n export namespace Argon2 {\n\n export type Version = 0x10 | 0x13\n\n }\n\n export class Argon2d {\n\n constructor(\n readonly value: Dictionary<{ $UUID: Value.Bytes, S: Value.Bytes<32>, P: Value.UInt32, M: Value.UInt64, I: Value.UInt64, V: Value.UInt32<Argon2.Version> }>,\n ) { }\n\n get salt() {\n return this.value.entries.value[\"S\"].value\n }\n\n get parallelism() {\n return this.value.entries.value[\"P\"].value\n }\n\n get memory() {\n return this.value.entries.value[\"M\"].value\n }\n\n get iterations() {\n return this.value.entries.value[\"I\"].value\n }\n\n get version() {\n return this.value.entries.value[\"V\"].value\n }\n\n rotateOrThrow() {\n const { version } = this.value\n\n const $UUID = this.value.entries.value[\"$UUID\"]\n\n const S = new Value.Bytes(new Opaque(crypto.getRandomValues(new Uint8Array(32)) as Uint8Array & Lengthed<32>))\n const P = this.value.entries.value.P\n const M = this.value.entries.value.M\n const I = this.value.entries.value.I\n const V = this.value.entries.value.V\n\n const value = Dictionary.initOrThrow(version, { $UUID, S, P, M, I, V })\n\n return new Argon2d(value)\n }\n\n deriveOrThrow(key: CompositeKey) {\n const { version, iterations, parallelism, memory, salt } = this\n\n const { Memory, Argon2Deriver } = Argon2.get().getOrThrow()\n\n using mkey = Memory.importOrThrow(key.value.bytes)\n using msalt = Memory.importOrThrow(salt.bytes)\n\n using deriver = Argon2Deriver.createOrThrow(\"argon2d\", version, Number(memory) / 1024, Number(iterations), parallelism)\n using derived = deriver.deriveOrThrow(mkey, msalt)\n\n return new DerivedKey(new Opaque(new Uint8Array(derived.bytes) as Uint8Array & Lengthed<32>))\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 new Argon2d(this.value.cloneOrThrow())\n }\n\n }\n\n export namespace Argon2d {\n\n export const $UUID = \"ef636ddf-8c29-444b-91f7-a9a403e30a0c\"\n\n export function parseOrThrow(dictionary: Dictionary): Argon2d {\n const { version, entries } = dictionary\n\n if (dictionary.entries.value[\"$UUID\"] instanceof Value.Bytes === false)\n throw new Error()\n const $UUID = dictionary.entries.value[\"$UUID\"]\n\n if (dictionary.entries.value.S instanceof Value.Bytes === false)\n throw new Error()\n const S = dictionary.entries.value.S as Value.Bytes<32>\n\n if (dictionary.entries.value.P instanceof Value.UInt32 === false)\n throw new Error()\n const P = dictionary.entries.value.P\n\n if (dictionary.entries.value.M instanceof Value.UInt64 === false)\n throw new Error()\n const M = dictionary.entries.value.M\n\n if (dictionary.entries.value.I instanceof Value.UInt64 === false)\n throw new Error()\n const I = dictionary.entries.value.I\n\n if (dictionary.entries.value.V instanceof Value.UInt32 === false)\n throw new Error()\n const V = dictionary.entries.value.V as Value.UInt32<KdfParameters.Argon2.Version>\n\n return new KdfParameters.Argon2d(new Dictionary(version, new Entries(entries.bytes, { $UUID, S, P, M, I, V })))\n }\n\n }\n\n export class Argon2id {\n\n constructor(\n readonly value: Dictionary<{ $UUID: Value.Bytes, S: Value.Bytes<32>, P: Value.UInt32, M: Value.UInt64, I: Value.UInt64, V: Value.UInt32<Argon2.Version> }>,\n ) { }\n\n get salt() {\n return this.value.entries.value[\"S\"].value\n }\n\n get parallelism() {\n return this.value.entries.value[\"P\"].value\n }\n\n get memory() {\n return this.value.entries.value[\"M\"].value\n }\n\n get iterations() {\n return this.value.entries.value[\"I\"].value\n }\n\n get version() {\n return this.value.entries.value[\"V\"].value\n }\n\n rotateOrThrow() {\n const { version } = this.value\n\n const $UUID = this.value.entries.value[\"$UUID\"]\n\n const S = new Value.Bytes(new Opaque(crypto.getRandomValues(new Uint8Array(32)) as Uint8Array & Lengthed<32>))\n const P = this.value.entries.value.P\n const M = this.value.entries.value.M\n const I = this.value.entries.value.I\n const V = this.value.entries.value.V\n\n const value = Dictionary.initOrThrow(version, { $UUID, S, P, M, I, V })\n\n return new Argon2d(value)\n }\n\n deriveOrThrow(key: CompositeKey) {\n const { version, iterations, parallelism, memory, salt } = this\n\n const { Memory, Argon2Deriver } = Argon2.get().getOrThrow()\n\n using mkey = Memory.importOrThrow(key.value.bytes)\n using msalt = Memory.importOrThrow(salt.bytes)\n\n using deriver = Argon2Deriver.createOrThrow(\"argon2id\", version, Number(memory) / 1024, Number(iterations), parallelism)\n using derived = deriver.deriveOrThrow(mkey, msalt)\n\n return new DerivedKey(new Opaque(new Uint8Array(derived.bytes) as Uint8Array & Lengthed<32>))\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 new Argon2id(this.value.cloneOrThrow())\n }\n\n }\n\n export namespace Argon2id {\n\n export const $UUID = \"9e298b19-56db-4773-b23d-fc3ec6f0a1e6\"\n\n export function parseOrThrow(dictionary: Dictionary): Argon2id {\n const { version, entries } = dictionary\n\n if (entries.value[\"$UUID\"] instanceof Value.Bytes === false)\n throw new Error()\n const $UUID = entries.value[\"$UUID\"]\n\n if (entries.value.S instanceof Value.Bytes === false)\n throw new Error()\n const S = entries.value.S as Value.Bytes<32>\n\n if (entries.value.P instanceof Value.UInt32 === false)\n throw new Error()\n const P = entries.value.P\n\n if (entries.value.M instanceof Value.UInt64 === false)\n throw new Error()\n const M = entries.value.M\n\n if (entries.value.I instanceof Value.UInt64 === false)\n throw new Error()\n const I = entries.value.I\n\n if (entries.value.V instanceof Value.UInt32 === false)\n throw new Error()\n const V = entries.value.V as Value.UInt32<KdfParameters.Argon2.Version>\n\n return new KdfParameters.Argon2id(new Dictionary(version, new Entries(entries.bytes, { $UUID, S, P, M, I, V })))\n }\n\n }\n\n export function readOrThrow(cursor: Cursor): KdfParameters {\n const dictionary = Dictionary.readOrThrow(cursor)\n\n if (dictionary.entries.value[\"$UUID\"] instanceof Value.Bytes === false)\n throw new Error()\n\n const $UUID = StringAsUuid.from(dictionary.entries.value[\"$UUID\"].value.bytes)\n\n if (![KdfParameters.AesKdf.$UUID, KdfParameters.Argon2d.$UUID, KdfParameters.Argon2id.$UUID].includes($UUID))\n throw new Error()\n\n if ($UUID === KdfParameters.AesKdf.$UUID)\n return KdfParameters.AesKdf.parseOrThrow(dictionary)\n\n if ($UUID === KdfParameters.Argon2d.$UUID)\n return KdfParameters.Argon2d.parseOrThrow(dictionary)\n\n if ($UUID === KdfParameters.Argon2id.$UUID)\n return KdfParameters.Argon2id.parseOrThrow(dictionary)\n\n throw new Error()\n }\n\n\n}"],"names":["PreHmacKey","Opaque","Bytes","Writable","Readable","PreMasterKey","PreHmacMasterKey","MasterKeys","Vector","Cipher","Compression","KdfParameters","Dictionary","Value","Entries","Argon2","__addDisposableResource","DerivedKey","StringAsUuid"],"mappings":"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"}