Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / socket.io-client / lib / vendor / web-socket-js / flash-src / com / hurlant / crypto / prng / ARC4.as
1 /**\r
2  * ARC4\r
3  * \r
4  * An ActionScript 3 implementation of RC4\r
5  * Copyright (c) 2007 Henri Torgemane\r
6  * \r
7  * Derived from:\r
8  *              The jsbn library, Copyright (c) 2003-2005 Tom Wu\r
9  * \r
10  * See LICENSE.txt for full license information.\r
11  */\r
12 package com.hurlant.crypto.prng\r
13 {\r
14         import com.hurlant.crypto.symmetric.IStreamCipher;\r
15         import com.hurlant.util.Memory;\r
16         \r
17         import flash.utils.ByteArray;\r
18 \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
25                         S = new ByteArray;\r
26                         if (key) {\r
27                                 init(key);\r
28                         }\r
29                 }\r
30                 public function getPoolSize():uint {\r
31                         return psize;\r
32                 }\r
33                 public function init(key:ByteArray):void {\r
34                         var i:int;\r
35                         var j:int;\r
36                         var t:int;\r
37                         for (i=0; i<256; ++i) {\r
38                                 S[i] = i;\r
39                         }\r
40                         j=0;\r
41                         for (i=0; i<256; ++i) {\r
42                                 j = (j + S[i] + key[i%key.length]) & 255;\r
43                                 t = S[i];\r
44                                 S[i] = S[j];\r
45                                 S[j] = t;\r
46                         }\r
47                         this.i=0;\r
48                         this.j=0;\r
49                 }\r
50                 public function next():uint {\r
51                         var t:int;\r
52                         i = (i+1)&255;\r
53                         j = (j+S[i])&255;\r
54                         t = S[i];\r
55                         S[i] = S[j];\r
56                         S[j] = t;\r
57                         return S[(t+S[i])&255];\r
58                 }\r
59 \r
60                 public function getBlockSize():uint {\r
61                         return 1;\r
62                 }\r
63                 \r
64                 public function encrypt(block:ByteArray):void {\r
65                         var i:uint = 0;\r
66                         while (i<block.length) {\r
67                                 block[i++] ^= next();\r
68                         }\r
69                 }\r
70                 public function decrypt(block:ByteArray):void {\r
71                         encrypt(block); // the beauty of XOR.\r
72                 }\r
73                 public function dispose():void {\r
74                         var i:uint = 0;\r
75                         if (S!=null) {\r
76                                 for (i=0;i<S.length;i++) {\r
77                                         S[i] = Math.random()*256;\r
78                                 }\r
79                                 S.length=0;\r
80                                 S = null;\r
81                         }\r
82                         this.i = 0;\r
83                         this.j = 0;\r
84                         Memory.gc();\r
85                 }\r
86                 public function toString():String {\r
87                         return "rc4";\r
88                 }\r
89         }\r
90 }