4 * An ActionScript 3 implementation of RC4
\r
5 * Copyright (c) 2007 Henri Torgemane
\r
8 * The jsbn library, Copyright (c) 2003-2005 Tom Wu
\r
10 * See LICENSE.txt for full license information.
\r
12 package com.hurlant.crypto.prng
\r
14 import com.hurlant.crypto.symmetric.IStreamCipher;
\r
15 import com.hurlant.util.Memory;
\r
17 import flash.utils.ByteArray;
\r
19 public class ARC4 implements IPRNG, IStreamCipher {
\r
20 private var i:int = 0;
\r
21 private var j:int = 0;
\r
22 private var S:ByteArray;
\r
23 private const psize:uint = 256;
\r
24 public function ARC4(key:ByteArray = null){
\r
30 public function getPoolSize():uint {
\r
33 public function init(key:ByteArray):void {
\r
37 for (i=0; i<256; ++i) {
\r
41 for (i=0; i<256; ++i) {
\r
42 j = (j + S[i] + key[i%key.length]) & 255;
\r
50 public function next():uint {
\r
57 return S[(t+S[i])&255];
\r
60 public function getBlockSize():uint {
\r
64 public function encrypt(block:ByteArray):void {
\r
66 while (i<block.length) {
\r
67 block[i++] ^= next();
\r
70 public function decrypt(block:ByteArray):void {
\r
71 encrypt(block); // the beauty of XOR.
\r
73 public function dispose():void {
\r
76 for (i=0;i<S.length;i++) {
\r
77 S[i] = Math.random()*256;
\r
86 public function toString():String {
\r