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
JavaScript
;
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