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 / util / der / ObjectIdentifier.as
1 /**\r
2  * ObjectIdentifier\r
3  * \r
4  * An ASN1 type for an ObjectIdentifier\r
5  * We store the oid in an Array.\r
6  * Copyright (c) 2007 Henri Torgemane\r
7  * \r
8  * See LICENSE.txt for full license information.\r
9  */\r
10 package com.hurlant.util.der\r
11 {\r
12         import flash.utils.ByteArray;\r
13         \r
14         public class ObjectIdentifier implements IAsn1Type\r
15         {\r
16                 private var type:uint;\r
17                 private var len:uint;\r
18                 private var oid:Array;\r
19                 \r
20                 public function ObjectIdentifier(type:uint, length:uint, b:*) {\r
21                         this.type = type;\r
22                         this.len = length;\r
23                         if (b is ByteArray) {\r
24                                 parse(b as ByteArray);\r
25                         } else if (b is String) {\r
26                                 generate(b as String);\r
27                         } else {\r
28                                 throw new Error("Invalid call to new ObjectIdentifier");\r
29                         }\r
30                 }\r
31                 \r
32                 private function generate(s:String):void {\r
33                         oid = s.split(".");\r
34                 }\r
35                 \r
36                 private function parse(b:ByteArray):void {\r
37                         // parse stuff\r
38                         // first byte = 40*value1 + value2\r
39                         var o:uint = b.readUnsignedByte();\r
40                         var a:Array = []\r
41                         a.push(uint(o/40));\r
42                         a.push(uint(o%40));\r
43                         var v:uint = 0;\r
44                         while (b.bytesAvailable>0) {\r
45                                 o = b.readUnsignedByte();\r
46                                 var last:Boolean = (o&0x80)==0;\r
47                                 o &= 0x7f;\r
48                                 v = v*128 + o;\r
49                                 if (last) {\r
50                                         a.push(v);\r
51                                         v = 0;\r
52                                 }\r
53                         }\r
54                         oid = a;\r
55                 }\r
56                 \r
57                 public function getLength():uint\r
58                 {\r
59                         return len;\r
60                 }\r
61                 \r
62                 public function getType():uint\r
63                 {\r
64                         return type;\r
65                 }\r
66                 \r
67                 public function toDER():ByteArray {\r
68                         var tmp:Array = [];\r
69                         tmp[0] = oid[0]*40 + oid[1];\r
70                         for (var i:int=2;i<oid.length;i++) {\r
71                                 var v:int = parseInt(oid[i]);\r
72                                 if (v<128) {\r
73                                         tmp.push(v);\r
74                                 } else if (v<128*128) {\r
75                                         tmp.push( (v>>7)|0x80 );\r
76                                         tmp.push( v&0x7f );\r
77                                 } else if (v<128*128*128) {\r
78                                         tmp.push( (v>>14)|0x80 );\r
79                                         tmp.push( (v>>7)&0x7f | 0x80 );\r
80                                         tmp.push( v&0x7f);\r
81                                 } else if (v<128*128*128*128) {\r
82                                         tmp.push( (v>>21)|0x80 );\r
83                                         tmp.push( (v>>14) & 0x7f | 0x80 );\r
84                                         tmp.push( (v>>7) & 0x7f | 0x80 );\r
85                                         tmp.push( v & 0x7f );\r
86                                 } else {\r
87                                         throw new Error("OID element bigger than we thought. :(");\r
88                                 }\r
89                         }\r
90                         len = tmp.length;\r
91                         if (type==0) {\r
92                                 type = 6;\r
93                         }\r
94                         tmp.unshift(len); // assume length is small enough to fit here.\r
95                         tmp.unshift(type);\r
96                         var b:ByteArray = new ByteArray;\r
97                         for (i=0;i<tmp.length;i++) {\r
98                                 b[i] = tmp[i];\r
99                         }\r
100                         return b;\r
101                 }\r
102 \r
103                 public function toString():String {\r
104                         return DER.indent+oid.join(".");\r
105                 }\r
106                 \r
107                 public function dump():String {\r
108                         return "OID["+type+"]["+len+"]["+toString()+"]";\r
109                 }\r
110                 \r
111         }\r
112 }