blob: c35241429917ff76c4d81b158519a171e668fb71 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/**
* Sequence
*
* An ASN1 type for a Sequence, implemented as an Array
* Copyright (c) 2007 Henri Torgemane
*
* See LICENSE.txt for full license information.
*/
package com.hurlant.util.der
{
import flash.utils.ByteArray;
public dynamic class Sequence extends Array implements IAsn1Type
{
protected var type:uint;
protected var len:uint;
public function Sequence(type:uint = 0x30, length:uint = 0x00) {
this.type = type;
this.len = length;
}
public function getLength():uint
{
return len;
}
public function getType():uint
{
return type;
}
public function toDER():ByteArray {
var tmp:ByteArray = new ByteArray;
for (var i:int=0;i<length;i++) {
var e:IAsn1Type = this[i];
if (e == null) { // XXX Arguably, I could have a der.Null class instead
tmp.writeByte(0x05);
tmp.writeByte(0x00);
} else {
tmp.writeBytes(e.toDER());
}
}
return DER.wrapDER(type, tmp);
}
public function toString():String {
var s:String = DER.indent;
DER.indent += " ";
var t:String = "";
for (var i:int=0;i<length;i++) {
if (this[i]==null) continue;
var found:Boolean = false;
for (var key:String in this) {
if ( (i.toString()!=key) && this[i]==this[key]) {
t += key+": "+this[i]+"\n";
found = true;
break;
}
}
if (!found) t+=this[i]+"\n";
}
// var t:String = join("\n");
DER.indent= s;
return DER.indent+"Sequence["+type+"]["+len+"][\n"+t+"\n"+s+"]";
}
/////////
public function findAttributeValue(oid:String):IAsn1Type {
for each (var set:* in this) {
if (set is Set) {
var child:* = set[0];
if (child is Sequence) {
var tmp:* = child[0];
if (tmp is ObjectIdentifier) {
var id:ObjectIdentifier = tmp as ObjectIdentifier;
if (id.toString()==oid) {
return child[1] as IAsn1Type;
}
}
}
}
}
return null;
}
}
}
|