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 / ECBMode.as
1 /**\r
2  * ECBMode\r
3  * \r
4  * An ActionScript 3 implementation of the ECB confidentiality mode\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 flash.utils.ByteArray;\r
12         import com.hurlant.util.Memory;\r
13         import com.hurlant.util.Hex;\r
14         \r
15         /**\r
16          * ECB mode.\r
17          * This uses a padding and a symmetric key.\r
18          * If no padding is given, PKCS#5 is used.\r
19          */\r
20         public class ECBMode implements IMode, ICipher\r
21         {\r
22                 private var key:ISymmetricKey;\r
23                 private var padding:IPad;\r
24                 \r
25                 public function ECBMode(key:ISymmetricKey, padding:IPad = null) {\r
26                         this.key = key;\r
27                         if (padding == null) {\r
28                                 padding = new PKCS5(key.getBlockSize());\r
29                         } else {\r
30                                 padding.setBlockSize(key.getBlockSize());\r
31                         }\r
32                         this.padding = padding;\r
33                 }\r
34                 \r
35                 public function getBlockSize():uint {\r
36                         return key.getBlockSize();\r
37                 }\r
38                 \r
39                 public function encrypt(src:ByteArray):void {\r
40                         padding.pad(src);\r
41                         src.position = 0;\r
42                         var blockSize:uint = key.getBlockSize();\r
43                         var tmp:ByteArray = new ByteArray;\r
44                         var dst:ByteArray = new ByteArray;\r
45                         for (var i:uint=0;i<src.length;i+=blockSize) {\r
46                                 tmp.length=0;\r
47                                 src.readBytes(tmp, 0, blockSize);\r
48                                 key.encrypt(tmp);\r
49                                 dst.writeBytes(tmp);\r
50                         }\r
51                         src.length=0;\r
52                         src.writeBytes(dst);\r
53                 }\r
54                 public function decrypt(src:ByteArray):void {\r
55                         src.position = 0;\r
56                         var blockSize:uint = key.getBlockSize();\r
57                         \r
58                         // sanity check.\r
59                         if (src.length%blockSize!=0) {\r
60                                 throw new Error("ECB mode cipher length must be a multiple of blocksize "+blockSize);\r
61                         }\r
62                         \r
63                         var tmp:ByteArray = new ByteArray;\r
64                         var dst:ByteArray = new ByteArray;\r
65                         for (var i:uint=0;i<src.length;i+=blockSize) {\r
66                                 tmp.length=0;\r
67                                 src.readBytes(tmp, 0, blockSize);\r
68                                 \r
69                                 key.decrypt(tmp);\r
70                                 dst.writeBytes(tmp);\r
71                         }\r
72                         padding.unpad(dst);\r
73                         src.length=0;\r
74                         src.writeBytes(dst);\r
75                 }\r
76                 public function dispose():void {\r
77                         key.dispose();\r
78                         key = null;\r
79                         padding = null;\r
80                         Memory.gc();\r
81                 }\r
82                 public function toString():String {\r
83                         return key.toString()+"-ecb";\r
84                 }\r
85         }\r
86 }