UNPKG

@hazae41/kdbx

Version:

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

45 lines (41 loc) 1.25 kB
'use strict'; var binary = require('@hazae41/binary'); class PreHmacKey { index; major; constructor(index, major) { this.index = index; this.major = major; } sizeOrThrow() { return 8 + this.major.bytes.length; } writeOrThrow(cursor) { cursor.writeUint64OrThrow(this.index, true); cursor.writeOrThrow(this.major.bytes); } async digestOrThrow() { const bytes = binary.Writable.writeToBytesOrThrow(this); const digest = new Uint8Array(await crypto.subtle.digest("SHA-512", bytes)); const key = await crypto.subtle.importKey("raw", digest, { name: "HMAC", hash: "SHA-256" }, true, ["sign", "verify"]); return new HmacKey(key); } } class HmacKey { key; constructor(key) { this.key = key; } async signOrThrow(data) { return new Uint8Array(await crypto.subtle.sign("HMAC", this.key, data)); } async verifyOrThrow(data, signature) { const result = await crypto.subtle.verify("HMAC", this.key, signature, data); if (result !== true) throw new Error(); return; } } exports.HmacKey = HmacKey; exports.PreHmacKey = PreHmacKey; //# sourceMappingURL=index.cjs.map