@hazae41/kdbx
Version:
Rust-like KeePass (KDBX 4) file format for TypeScript
45 lines (41 loc) • 1.25 kB
JavaScript
;
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