Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 3x 6x 3x 3x 3x 3x 3x 3x 3x 3x 3x 75x 75x 75x 3x 6x 6x 3x | "use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PassmanCrypto = void 0;
const node_forge_1 = __importDefault(require("node-forge"));
const sjcl_1 = __importDefault(require("sjcl"));
const js_base64_1 = require("js-base64");
class PassmanCrypto {
static generateRSAKeypair = (keyLength = 2048) => {
return new Promise(function (resolve, reject) {
// generate an RSA key pair asynchronously (uses web workers if available)
// use workers: -1 to run a fast core estimator to optimize # of workers
node_forge_1.default.pki.rsa.generateKeyPair({
bits: keyLength,
workers: 2
}, (error, keypair) => {
resolve({ error, keypair });
});
});
};
static rsaKeyPairToPEM = (keypair) => {
return {
privateKey: node_forge_1.default.pki.privateKeyToPem(keypair.privateKey),
publicKey: node_forge_1.default.pki.publicKeyToPem(keypair.publicKey)
};
};
static sjcl_encryption_config = {
adata: "",
iter: 1000,
ks: 256,
mode: 'ccm',
ts: 64,
//salt: [],
//iv: []
};
static encryptString = (plainText, key) => {
// todo: think about replacing aes-ccm from sjcl with the more modern and faster aes-gcm from forge
// see https://crypto.stackexchange.com/questions/6842/how-to-choose-between-aes-ccm-and-aes-gcm-for-storage-volume-encryption
// see https://github.com/digitalbazaar/forge#cipher
// todo: try to use aes-ccm from jscrypto instead of the very outdated sjcl
// see https://github.com/Hinaser/jscrypto/blob/master/API.md#aes
let rp = {};
const ct = sjcl_1.default.encrypt(key, plainText, PassmanCrypto.sjcl_encryption_config, rp);
return js_base64_1.Base64.btoa(ct);
};
/**
* @param b64EncCiphertext
* @param key
* @throws untyped sjcl exceptions
*/
static decryptString = (b64EncCiphertext, key) => {
const ciphertext = js_base64_1.Base64.atob(b64EncCiphertext);
return sjcl_1.default.decrypt(key, ciphertext);
};
}
exports.PassmanCrypto = PassmanCrypto;
|