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 / symmetric / XTeaKey.as
1 /**\r
2  * XTeaKey\r
3  * \r
4  * An ActionScript 3 implementation of the XTea algorithm\r
5  * Copyright (c) 2007 Henri Torgemane\r
6  * \r
7  * See LICENSE.txt for full license information.\r
8  */\r
9 package com.hurlant.crypto.symmetric\r
10 {\r
11         import com.hurlant.crypto.prng.Random;\r
12         import com.hurlant.util.Memory;\r
13         \r
14         import flash.utils.ByteArray;\r
15         \r
16         \r
17         public class XTeaKey implements ISymmetricKey\r
18         {\r
19                 public const NUM_ROUNDS:uint = 64;      \r
20                 private var k:Array;\r
21 \r
22                 public function XTeaKey(a:ByteArray) {\r
23                         a.position=0;\r
24                         k = [a.readUnsignedInt(),a.readUnsignedInt(),a.readUnsignedInt(),a.readUnsignedInt()];\r
25                 }\r
26                 /**\r
27                  * K is an hex string with 32 digits.\r
28                  */\r
29                 public static function parseKey(K:String):XTeaKey {\r
30                         var a:ByteArray = new ByteArray;\r
31                         a.writeUnsignedInt(parseInt(K.substr(0,8),16));\r
32                         a.writeUnsignedInt(parseInt(K.substr(8,8),16));\r
33                         a.writeUnsignedInt(parseInt(K.substr(16,8),16));\r
34                         a.writeUnsignedInt(parseInt(K.substr(24,8),16));\r
35                         a.position = 0;\r
36                         return new XTeaKey(a);\r
37                 }\r
38                 \r
39                 public function getBlockSize():uint {\r
40                         return 8;\r
41                 }\r
42 \r
43                 public function encrypt(block:ByteArray, index:uint=0):void {\r
44                         block.position = index;\r
45                         var v0:uint = block.readUnsignedInt();\r
46                         var v1:uint = block.readUnsignedInt();\r
47                         var i:uint;\r
48                         var sum:uint =0;\r
49                         var delta:uint = 0x9E3779B9;\r
50                         for (i=0; i<NUM_ROUNDS; i++) {\r
51                                 v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);\r
52                                 sum += delta;\r
53                         v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);\r
54                         }\r
55                         block.position-=8;\r
56                         block.writeUnsignedInt(v0);\r
57                         block.writeUnsignedInt(v1);\r
58                 }\r
59                 \r
60                 public function decrypt(block:ByteArray, index:uint=0):void {\r
61                         block.position = index;\r
62                         var v0:uint = block.readUnsignedInt();\r
63                         var v1:uint = block.readUnsignedInt();\r
64                         var i:uint;\r
65                         var delta:uint = 0x9E3779B9;\r
66                         var sum:uint = delta*NUM_ROUNDS;\r
67                         for (i=0; i<NUM_ROUNDS; i++) {\r
68                                 v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);\r
69                                 sum -= delta;\r
70                                 v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);\r
71                         }\r
72                         block.position-=8;\r
73                         block.writeUnsignedInt(v0);\r
74                         block.writeUnsignedInt(v1);\r
75                 }\r
76 \r
77                 public function dispose():void {\r
78                         //private var k:Array;\r
79                         var r:Random = new Random;\r
80                         for (var i:uint=0;i<k.length;i++) {\r
81                                 k[i] = r.nextByte();\r
82                                 delete k[i];\r
83                         }\r
84                         k = null;\r
85                         Memory.gc();\r
86                 }\r
87 \r
88                 public function toString():String {\r
89                         return "xtea";\r
90                 }\r
91         }\r
92         \r
93 \r
94 }