1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.kerberos.shared.io.decoder;
21
22
23 import java.io.IOException;
24 import java.util.Enumeration;
25
26 import org.apache.directory.server.kerberos.shared.messages.Encodable;
27 import org.apache.directory.server.kerberos.shared.messages.value.AuthorizationData;
28 import org.apache.directory.server.kerberos.shared.messages.value.AuthorizationDataEntry;
29 import org.apache.directory.server.kerberos.shared.messages.value.types.AuthorizationType;
30 import org.apache.directory.shared.asn1.der.ASN1InputStream;
31 import org.apache.directory.shared.asn1.der.DEREncodable;
32 import org.apache.directory.shared.asn1.der.DERInteger;
33 import org.apache.directory.shared.asn1.der.DEROctetString;
34 import org.apache.directory.shared.asn1.der.DERSequence;
35 import org.apache.directory.shared.asn1.der.DERTaggedObject;
36
37
38
39
40
41
42 public class AuthorizationDataDecoder implements Decoder, DecoderFactory
43 {
44 public Decoder getDecoder()
45 {
46 return new AuthorizationDataDecoder();
47 }
48
49
50 public Encodable decode( byte[] encodedAuthData ) throws IOException
51 {
52 ASN1InputStream ais = new ASN1InputStream( encodedAuthData );
53
54 DERSequence sequence = ( DERSequence ) ais.readObject();
55
56 return decodeSequence( sequence );
57 }
58
59
60
61
62
63
64
65
66 protected static AuthorizationData decodeSequence( DERSequence sequence )
67 {
68 AuthorizationData authData = new AuthorizationData();
69
70 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
71 {
72 DERSequence object = ( DERSequence ) e.nextElement();
73 AuthorizationDataEntry entry = decodeAuthorizationEntry( object );
74 authData.add( entry );
75 }
76
77 return authData;
78 }
79
80
81 protected static AuthorizationDataEntry decodeAuthorizationEntry( DERSequence sequence )
82 {
83 AuthorizationType type = AuthorizationType.NULL;
84 byte[] data = null;
85
86 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
87 {
88 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
89 int tag = object.getTagNo();
90 DEREncodable derObject = object.getObject();
91
92 switch ( tag )
93 {
94 case 0:
95 DERInteger tag0 = ( DERInteger ) derObject;
96 type = AuthorizationType.getTypeByOrdinal( tag0.intValue() );
97 break;
98
99 case 1:
100 DEROctetString tag1 = ( DEROctetString ) derObject;
101 data = tag1.getOctets();
102 break;
103 }
104 }
105
106 return new AuthorizationDataEntry( type, data );
107 }
108 }