-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcrypto.js
51 lines (43 loc) · 1.82 KB
/
crypto.js
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
importScripts('/packages/planifica_file-encryption/CryptoJS/rollups/aes.js');
importScripts('/packages/planifica_file-encryption/formatters.js');
self.onmessage = function (oEvent) {
if (oEvent.data instanceof Object && oEvent.data.encrypt) {
encrypt(oEvent);
} else if (oEvent.data instanceof Object && oEvent.data.decrypt) {
decrypt(oEvent);
}
};
function encrypt(oEvent){
// Read file
var fileReader = new FileReaderSync();
var fileData;
var time = new Date();
if(oEvent.data.slice) fileData = fileReader.readAsBinaryString(oEvent.data.slice); // reads as utf8 string
//postMessage("time to read file: " + (new Date() - time));
var fileName = oEvent.data.fileName;
var passphrase = oEvent.data.passphrase;
var encrypted = {index: oEvent.data.index}; // keep index for eventual rebuilding
// Encrypt filename
if(fileName) encrypted.fileName = CryptoJS.AES.encrypt(fileName, passphrase).toString();
// Encrypt filedata
//time = new Date();
encrypted.fileData = CryptoJS.AES.encrypt(fileData, passphrase).toString(Latin1Formatter);
//postMessage("time to encrypt + format: " + (new Date() - time) + " size: " + encrypted.fileData.length);
postMessage(encrypted);
}
function decrypt(oEvent){
// decrypt
var decrypted = {index: oEvent.data.index};
var fileData = Latin1Formatter.parse(oEvent.data.fileData); // create wordArray from encrypted Latin1
var fileName = oEvent.data.fileName;
var passphrase = oEvent.data.passphrase;
try{
// Decrypt fileName if present
if(fileName) decrypted.fileName = CryptoJS.AES.decrypt(fileName, passphrase).toString(CryptoJS.enc.Latin1);
// Decrypt fileData
decrypted.fileData = CryptoJS.AES.decrypt(fileData, passphrase).toString(CryptoJS.enc.Utf8);
postMessage(decrypted);
} catch (e){
postMessage("Error"); // usually bad password
}
}