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 / IVMode.as
1 /**\r
2  * IVMode\r
3  * \r
4  * An abstract class for confidentialy modes that rely on an initialization vector.\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.crypto.tests.TestCase;\r
13         import com.hurlant.util.Memory;\r
14         \r
15         import flash.utils.ByteArray;\r
16         \r
17         /**\r
18          * An "abtract" class to avoid redundant code in subclasses\r
19          */\r
20         public class IVMode\r
21         {\r
22                 protected var key:ISymmetricKey;\r
23                 protected var padding:IPad;\r
24                 // random generator used to generate IVs\r
25                 protected var prng:Random;\r
26                 // optional static IV. used for testing only.\r
27                 protected var iv:ByteArray;\r
28                 // generated IV is stored here.\r
29                 protected var lastIV:ByteArray;\r
30                 protected var blockSize:uint;\r
31                 \r
32                 \r
33                 public function IVMode(key:ISymmetricKey, padding:IPad = null) {\r
34                         this.key = key;\r
35                         blockSize = key.getBlockSize();\r
36                         if (padding == null) {\r
37                                 padding = new PKCS5(blockSize);\r
38                         } else {\r
39                                 padding.setBlockSize(blockSize);\r
40                         }\r
41                         this.padding = padding;\r
42                         \r
43                         prng = new Random;\r
44                         iv = null;\r
45                         lastIV = new ByteArray;\r
46                 }\r
47                 \r
48                 public function getBlockSize():uint {\r
49                         return key.getBlockSize();\r
50                 }\r
51                 public function dispose():void {\r
52                         var i:uint;\r
53                         if (iv != null) {\r
54                                 for (i=0;i<iv.length;i++) {\r
55                                         iv[i] = prng.nextByte();\r
56                                 }\r
57                                 iv.length=0;\r
58                                 iv = null;\r
59                         }\r
60                         if (lastIV != null) {\r
61                                 for (i=0;i<iv.length;i++) {\r
62                                         lastIV[i] = prng.nextByte();\r
63                                 }\r
64                                 lastIV.length=0;\r
65                                 lastIV=null;\r
66                         }\r
67                         key.dispose();\r
68                         key = null;\r
69                         padding = null;\r
70                         prng.dispose();\r
71                         prng = null;\r
72                         Memory.gc();\r
73                 }\r
74                 /**\r
75                  * Optional function to force the IV value.\r
76                  * Normally, an IV gets generated randomly at every encrypt() call.\r
77                  * Also, use this to set the IV before calling decrypt()\r
78                  * (if not set before decrypt(), the IV is read from the beginning of the stream.)\r
79                  */\r
80                 public function set IV(value:ByteArray):void {\r
81                         iv = value;\r
82                         lastIV.length=0;\r
83                         lastIV.writeBytes(iv);\r
84                 }\r
85                 public function get IV():ByteArray {\r
86                         return lastIV;\r
87                 }\r
88                 \r
89                 protected function getIV4e():ByteArray {\r
90                         var vec:ByteArray = new ByteArray;\r
91                         if (iv) {\r
92                                 vec.writeBytes(iv);\r
93                         } else {\r
94                                 prng.nextBytes(vec, blockSize);\r
95                         }\r
96                         lastIV.length=0;\r
97                         lastIV.writeBytes(vec);\r
98                         return vec;\r
99                 }\r
100                 protected function getIV4d():ByteArray {\r
101                         var vec:ByteArray = new ByteArray;\r
102                         if (iv) {\r
103                                 vec.writeBytes(iv);\r
104                         } else {\r
105                                 throw new Error("an IV must be set before calling decrypt()");\r
106                         }\r
107                         return vec;\r
108                 }\r
109         }\r
110 }