UNPKG

jwk-encrypt

Version:

Encrypt and decrypt your data using JSON Web Key (JWK). Implemented using [Web Crypto Api](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API), [RSA-OAEP](https://datatracker.ietf.org/doc/html/rfc3447), [AES-CTR](https://csrc.nist.gov/publica

35 lines 1.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decrypt = exports.decryptText = exports.importPrivateKey = void 0; function importPrivateKey(jwk) { const w = Object.create(jwk); w.alg = "RSA-OAEP-256"; w.ext = true; const algo = { name: "RSA-OAEP", hash: { name: "SHA-256" } }; return window.crypto.subtle.importKey("jwk", w, algo, false, ["decrypt"]); } exports.importPrivateKey = importPrivateKey; async function decryptText(jwk, data) { const decoder = new TextDecoder(); return decoder.decode(await decrypt(jwk, data)); } exports.decryptText = decryptText; async function decrypt(jwk, data) { const ivSize = 16; const keySize = 512; const iv = data.slice(0, ivSize); const key = data.slice(ivSize, ivSize + keySize); const content = data.slice(ivSize + keySize); const rsaPublicKey = await importPrivateKey(jwk); const aesRawKey = await window.crypto.subtle.decrypt({ name: "RSA-OAEP", }, rsaPublicKey, key); const aesKey = await crypto.subtle.importKey("raw", aesRawKey, "AES-CTR", false, ["decrypt"]); return await window.crypto.subtle.decrypt({ name: "AES-CTR", counter: iv, length: 128, }, aesKey, content); } exports.decrypt = decrypt; //# sourceMappingURL=index.js.map