]> jfr.im git - irc/quakenet/qwebirc.git/blame - js/crypto.js
Merge pull request #373 from retropc/kill_flash
[irc/quakenet/qwebirc.git] / js / crypto.js
CommitLineData
e516cc76
CP
1qwebirc.util.crypto.getARC4Stream = function(key, length) {
2 var s = [];
3
4 var keyint = [];
5 for(var i=0;i<key.length;i++)
6 keyint.push(key.charCodeAt(i));
7
8 for(var i=0;i<256;i++)
9 s[i] = i;
10
11 var j = 0;
12 for(var i=0;i<256;i++) {
13 j = (j + s[i] + keyint[i % key.length]) & 255;
14 var w = s[i]; s[i] = s[j]; s[j] = w;
15 }
16
17 var output = [];
18 var i = 0;
19 var j = 0;
20 for(var k=0;k<length;k++) {
21 i = (i + 1) & 255;
22 j = (j + s[i]) & 255;
23
24 var w = s[i]; s[i] = s[j]; s[j] = w;
25 output.push(s[(s[i] + s[j]) & 255]);
26 }
27 return output;
28}
29
30qwebirc.util.crypto.xorStreams = function(data, prngstream) {
31 if(data.length != prngstream.length)
32 return;
33
34 var output = [];
35 for(var i=0;i<data.length;i++)
36 output.push(String.fromCharCode(data.charCodeAt(i) ^ prngstream[i]));
37
38 return output.join("");
39}
40
41qwebirc.util.crypto.ARC4 = function(key, data) {
42 var prngstream = qwebirc.util.crypto.getARC4Stream(key, data.length + 1024);
43 /* burn first 1024 bytes */
44 prngstream = prngstream.slice(1024);
45
46 return qwebirc.util.crypto.xorStreams(data, prngstream);
47}