diff --git a/www/file/file-crypto.js b/www/file/file-crypto.js index 44952fc87..06f9804cd 100644 --- a/www/file/file-crypto.js +++ b/www/file/file-crypto.js @@ -2,7 +2,7 @@ define([ '/bower_components/tweetnacl/nacl-fast.min.js', ], function () { var Nacl = window.nacl; - var PARANOIA = true; + //var PARANOIA = true; var plainChunkLength = 128 * 1024; var cypherChunkLength = 131088; @@ -36,24 +36,11 @@ define([ var increment = function (N) { var l = N.length; while (l-- > 1) { - if (PARANOIA) { - if (typeof(N[l]) !== 'number') { - throw new Error('E_UNSAFE_TYPE'); - } - if (N[l] > 255) { - throw new Error('E_OUT_OF_BOUNDS'); - } - } /* jshint probably suspects this is unsafe because we lack types but as long as this is only used on nonces, it should be safe */ if (N[l] !== 255) { return void N[l]++; } // jshint ignore:line + if (l === 0) { throw new Error('E_NONCE_TOO_LARGE'); } N[l] = 0; - - // you don't need to worry about this running out. - // you'd need a REAAAALLY big file - if (l === 0) { - throw new Error('E_NONCE_TOO_LARGE'); - } } }; @@ -160,19 +147,21 @@ define([ } var takeChunk = function (cb) { - var start = i * cypherChunkLength + 2 + metadataLength; - var end = start + cypherChunkLength; - i++; - var box = new Uint8Array(u8.subarray(start, end)); - - // decrypt the chunk - var plaintext = Nacl.secretbox.open(box, nonce, key); - increment(nonce); + setTimeout(function () { + var start = i * cypherChunkLength + 2 + metadataLength; + var end = start + cypherChunkLength; + i++; + var box = new Uint8Array(u8.subarray(start, end)); + + // decrypt the chunk + var plaintext = Nacl.secretbox.open(box, nonce, key); + increment(nonce); - if (!plaintext) { return cb('DECRYPTION_ERROR'); } + if (!plaintext) { return cb('DECRYPTION_ERROR'); } - _progress(end); - cb(void 0, plaintext); + _progress(end); + cb(void 0, plaintext); + }); }; var chunks = []; @@ -219,7 +208,7 @@ define([ var state = 0; var next = function (cb) { - if (state === 2) { return void cb(); } + if (state === 2) { return void setTimeout(cb); } var start; var end; @@ -238,7 +227,9 @@ define([ .concat(slice(box))); state++; - return void cb(void 0, prefixed); + return void setTimeout(function () { + cb(void 0, prefixed); + }); } // encrypt the rest of the file... @@ -253,7 +244,9 @@ define([ // regular data is done if (i * plainChunkLength >= u8.length) { state = 2; } - return void cb(void 0, box); + setTimeout(function () { + cb(void 0, box); + }); }; return next;