home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Minami 80
/
MINAMI80.iso
/
Extra
/
DivXInstaller.exe
/
$PLUGINSDIR
/
GoogleToolbarFirefox.msi
/
xpi
/
amulet-jslib
/
google3
/
arc4.js
next >
Wrap
Text File
|
2006-05-15
|
971b
|
52 lines
function ARC4() {
this._S = new Array(256);
this._i = 0;
this._j = 0;
}
ARC4.prototype.setKey = function(key, opt_length) {
if (!isArray(key)) {
throw new Error("Key parameter must be a byte array");
}
if (!opt_length) {
opt_length = key.length;
}
var S = this._S;
for (var i = 0; i < 256; ++i) {
S[i] = i;
}
var j = 0;
for (var i = 0; i < 256; ++i) {
j = (j + S[i] + key[i % opt_length]) & 255;
var tmp = S[i];
S[i] = S[j];
S[j] = tmp;
}
this._i = 0;
this._j = 0;
}
ARC4.prototype.discard = function(n) {
var devnul = new Array(n);
this.crypt(devnul);
}
ARC4.prototype.crypt = function(data, opt_length) {
if (!opt_length) {
opt_length = data.length;
}
if (!isArray(data)) {
throw new Error("Data parameter must be a byte array");
}
var i = this._i;
var j = this._j;
var S = this._S;
for (var n = 0; n < opt_length; ++n) {
i = (i + 1) & 255;
j = (j + S[i]) & 255;
var tmp = S[i];
S[i] = S[j];
S[j] = tmp;
data[n] ^= S[(S[i] + S[j]) & 255];
}
this._i = i;
this._j = j;
}