UNPKG

@simplito/privmx-webendpoint

Version:

PrivMX Web Endpoint library

53 lines (52 loc) 1.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KeyStore = void 0; const AES_GCM_KEY_LENGTH_BYTES = 32; class KeyStore { _keys = new Map(); _encryptionKeyId = undefined; setKeys(keys) { this._keys.clear(); this._encryptionKeyId = undefined; for (const k of keys) { const rawKey = new Uint8Array(k.key); this.assertKeyBytes(rawKey); this._keys.set(k.keyId, { keyId: k.keyId, cryptoKey: crypto.subtle.importKey("raw", rawKey, { name: "AES-GCM" }, false, [ "encrypt", "decrypt", ]), type: k.type, }); if (k.type === 0) { this._encryptionKeyId = k.keyId; } } } async getKey(keyId) { const key = this._keys.get(keyId); return key ? key.cryptoKey : undefined; } hasKey(keyId) { return this._keys.has(keyId); } async getEncriptionKey() { if (!this._encryptionKeyId) { throw new Error("No encryption key set."); } return this._keys.get(this._encryptionKeyId).cryptoKey; } getEncryptionKeyId() { if (!this._encryptionKeyId) { throw new Error("No encryption key set."); } return this._encryptionKeyId; } assertKeyBytes(keyBytes) { if (keyBytes.length !== AES_GCM_KEY_LENGTH_BYTES) { throw new Error(`Invalid key length: ${keyBytes.length}`); } } } exports.KeyStore = KeyStore;