//sjcl.js подправлен (убран лишний require, добавлявший +400kb к bundle) и скопирован локально import sjcl from './sjcl'; //везде недоработки... sjcl.codec.bytes = { fromBits: function(arr) { var out = [], bl = sjcl.bitArray.bitLength(arr), i, tmp; for (i=0; i>> 24); tmp <<= 8; } return out; }, toBits: function(bytes) { var out = [], i, tmp=0; for (i=0; i 4)) { throw new sjcl.exception.invalid("json encrypt: invalid parameters"); } if (typeof password === "string") { tmp = sjcl.misc.cachedPbkdf2(password, p); password = tmp.key.slice(0,p.ks/32); p.salt = tmp.salt; } else if (sjcl.ecc && password instanceof sjcl.ecc.elGamal.publicKey) { tmp = password.kem(); p.kemtag = tmp.tag; password = tmp.key.slice(0,p.ks/32); } if (typeof plaintext === "string") { plaintext = sjcl.codec.utf8String.toBits(plaintext); } if (typeof adata === "string") { p.adata = adata = sjcl.codec.utf8String.toBits(adata); } prp = new sjcl.cipher[p.cipher](password); j._add(rp, p); rp.key = password; /* do the encryption */ if (p.mode === "ccm" && sjcl.arrayBuffer && sjcl.arrayBuffer.ccm && plaintext instanceof ArrayBuffer) { p.ct = sjcl.arrayBuffer.ccm.encrypt(prp, plaintext, p.iv, adata, p.ts); } else { p.ct = sjcl.mode[p.mode].encrypt(prp, plaintext, p.iv, adata, p.ts); } return p; } sjcl.decryptArray = function(password, ciphertext, params) { params = params || {}; var j = sjcl.json, p = j._add(j._add(j._add({},j.defaults),ciphertext), params, true), ct, tmp, prp, adata=p.adata; if (typeof p.salt === "string") { p.salt = sjcl.codec.base64.toBits(p.salt); } if (typeof p.iv === "string") { p.iv = sjcl.codec.base64.toBits(p.iv); } if (!sjcl.mode[p.mode] || !sjcl.cipher[p.cipher] || (typeof password === "string" && p.iter <= 100) || (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) || (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) || (!p.iv) || (p.iv.length < 2 || p.iv.length > 4)) { throw new sjcl.exception.invalid("json decrypt: invalid parameters"); } if (typeof password === "string") { tmp = sjcl.misc.cachedPbkdf2(password, p); password = tmp.key.slice(0,p.ks/32); p.salt = tmp.salt; } else if (sjcl.ecc && password instanceof sjcl.ecc.elGamal.secretKey) { password = password.unkem(sjcl.codec.base64.toBits(p.kemtag)).slice(0,p.ks/32); } if (typeof adata === "string") { adata = sjcl.codec.utf8String.toBits(adata); } prp = new sjcl.cipher[p.cipher](password); /* do the decryption */ if (p.mode === "ccm" && sjcl.arrayBuffer && sjcl.arrayBuffer.ccm && p.ct instanceof ArrayBuffer) { ct = sjcl.arrayBuffer.ccm.decrypt(prp, p.ct, p.iv, p.tag, adata, p.ts); } else { ct = sjcl.mode[p.mode].decrypt(prp, p.ct, p.iv, adata, p.ts); } return ct; } export default sjcl;