home *** CD-ROM | disk | FTP | other *** search
/ Minami 83 / MINAMI83.iso / Extra / DivXInstaller.exe / $PLUGINSDIR / GoogleToolbarFirefox.msi / xpi / amulet-jslib / google3 / arc4.js next >
Text File  |  2006-08-07  |  971b  |  52 lines

  1. function ARC4() {
  2. this._S = new Array(256);
  3. this._i = 0;
  4. this._j = 0;
  5. }
  6. ARC4.prototype.setKey = function(key, opt_length) {
  7. if (!isArray(key)) {
  8. throw new Error("Key parameter must be a byte array");
  9. }
  10. if (!opt_length) {
  11. opt_length = key.length;
  12. }
  13. var S = this._S;
  14. for (var i = 0; i < 256; ++i) {
  15. S[i] = i;
  16. }
  17. var j = 0;
  18. for (var i = 0; i < 256; ++i) {
  19. j = (j + S[i] + key[i % opt_length]) & 255;
  20. var tmp = S[i];
  21. S[i] = S[j];
  22. S[j] = tmp;
  23. }
  24. this._i = 0;
  25. this._j = 0;
  26. }
  27. ARC4.prototype.discard = function(n) {
  28. var devnul = new Array(n);
  29. this.crypt(devnul);
  30. }
  31. ARC4.prototype.crypt = function(data, opt_length) {
  32. if (!opt_length) {
  33. opt_length = data.length;
  34. }
  35. if (!isArray(data)) {
  36. throw new Error("Data parameter must be a byte array");
  37. }
  38. var i = this._i;
  39. var j = this._j;
  40. var S = this._S;
  41. for (var n = 0; n < opt_length; ++n) {
  42. i = (i + 1) & 255;
  43. j = (j + S[i]) & 255;
  44. var tmp = S[i];
  45. S[i] = S[j];
  46. S[j] = tmp;
  47. data[n] ^= S[(S[i] + S[j]) & 255];
  48. }
  49. this._i = i;
  50. this._j = j;
  51. }
  52.