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 / Random.as
1 /**\r
2  * Random\r
3  * \r
4  * An ActionScript 3 implementation of a Random Number Generator\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 flash.utils.ByteArray;\r
15         import com.hurlant.util.Memory;\r
16         import flash.system.System;\r
17         import flash.system.Capabilities;\r
18         import flash.accessibility.AccessibilityProperties;\r
19         import flash.display.SWFVersion;\r
20         import flash.display.Stage;\r
21         import flash.utils.getTimer;\r
22         import flash.text.Font;\r
23         \r
24         public class Random\r
25         {\r
26                 private var state:IPRNG;\r
27                 private var ready:Boolean = false;\r
28                 private var pool:ByteArray;\r
29                 private var psize:int;\r
30                 private var pptr:int;\r
31                 private var seeded:Boolean = false;\r
32                 \r
33                 public function Random(prng:Class = null) {\r
34                         if (prng==null) prng = ARC4;\r
35                         state = new prng as IPRNG;\r
36                         psize= state.getPoolSize();\r
37                         pool = new ByteArray;\r
38                         pptr = 0;\r
39                         while (pptr <psize) {\r
40                                 var t:uint = 65536*Math.random();\r
41                                 pool[pptr++] = t >>> 8;\r
42                                 pool[pptr++] = t&255;\r
43                         }\r
44                         pptr=0;\r
45                         seed();\r
46                 }\r
47                 \r
48                 public function seed(x:int = 0):void {\r
49                         if (x==0) {\r
50                                 x = new Date().getTime();\r
51                         }\r
52                         pool[pptr++] ^= x & 255;\r
53                         pool[pptr++] ^= (x>>8)&255;\r
54                         pool[pptr++] ^= (x>>16)&255;\r
55                         pool[pptr++] ^= (x>>24)&255;\r
56                         pptr %= psize;\r
57                         seeded = true;\r
58                 }\r
59                 \r
60                 /**\r
61                  * Gather anything we have that isn't entirely predictable:\r
62                  *  - memory used\r
63                  *  - system capabilities\r
64                  *  - timing stuff\r
65                  *  - installed fonts\r
66                  */\r
67                 public function autoSeed():void {\r
68                         var b:ByteArray = new ByteArray;\r
69                         b.writeUnsignedInt(System.totalMemory);\r
70                         b.writeUTF(Capabilities.serverString);\r
71                         b.writeUnsignedInt(getTimer());\r
72                         b.writeUnsignedInt((new Date).getTime());\r
73                         var a:Array = Font.enumerateFonts(true);\r
74                         for each (var f:Font in a) {\r
75                                 b.writeUTF(f.fontName);\r
76                                 b.writeUTF(f.fontStyle);\r
77                                 b.writeUTF(f.fontType);\r
78                         }\r
79                         b.position=0;\r
80                         while (b.bytesAvailable>=4) {\r
81                                 seed(b.readUnsignedInt());\r
82                         }\r
83                 }\r
84                 \r
85                 \r
86                 public function nextBytes(buffer:ByteArray, length:int):void {\r
87                         while (length--) {\r
88                                 buffer.writeByte(nextByte());\r
89                         }\r
90                 }\r
91                 public function nextByte():int {\r
92                         if (!ready) {\r
93                                 if (!seeded) {\r
94                                         autoSeed();\r
95                                 }\r
96                                 state.init(pool);\r
97                                 pool.length = 0;\r
98                                 pptr = 0;\r
99                                 ready = true;\r
100                         }\r
101                         return state.next();\r
102                 }\r
103                 public function dispose():void {\r
104                         for (var i:uint=0;i<pool.length;i++) {\r
105                                 pool[i] = Math.random()*256;\r
106                         }\r
107                         pool.length=0;\r
108                         pool = null;\r
109                         state.dispose();\r
110                         state = null;\r
111                         psize = 0;\r
112                         pptr = 0;\r
113                         Memory.gc();\r
114                 }\r
115                 public function toString():String {\r
116                         return "random-"+state.toString();\r
117                 }\r
118         }\r
119 }\r