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.components.EncKdcRepPart;
28 import org.apache.directory.server.kerberos.shared.messages.value.KerberosPrincipalModifier;
29 import org.apache.directory.server.kerberos.shared.messages.value.flags.TicketFlags;
30 import org.apache.directory.shared.asn1.der.ASN1InputStream;
31 import org.apache.directory.shared.asn1.der.DERApplicationSpecific;
32 import org.apache.directory.shared.asn1.der.DERBitString;
33 import org.apache.directory.shared.asn1.der.DEREncodable;
34 import org.apache.directory.shared.asn1.der.DERGeneralString;
35 import org.apache.directory.shared.asn1.der.DERGeneralizedTime;
36 import org.apache.directory.shared.asn1.der.DERInteger;
37 import org.apache.directory.shared.asn1.der.DERSequence;
38 import org.apache.directory.shared.asn1.der.DERTaggedObject;
39
40
41
42
43
44
45 public class EncKdcRepPartDecoder implements Decoder, DecoderFactory
46 {
47 public Decoder getDecoder()
48 {
49 return new EncKdcRepPartDecoder();
50 }
51
52
53 public Encodable decode( byte[] encoded ) throws IOException
54 {
55 ASN1InputStream ais = new ASN1InputStream( encoded );
56
57 DERApplicationSpecific app = ( DERApplicationSpecific ) ais.readObject();
58
59 DERSequence sequence = ( DERSequence ) app.getObject();
60
61 return decodeEncKdcRepPartSequence( sequence );
62 }
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 private EncKdcRepPart decodeEncKdcRepPartSequence( DERSequence sequence )
82 {
83 EncKdcRepPart modifier = new EncKdcRepPart();
84 KerberosPrincipalModifier principalModifier = new KerberosPrincipalModifier();
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 DERSequence tag0 = ( DERSequence ) derObject;
96 modifier.setKey( EncryptionKeyDecoder.decode( tag0 ) );
97 break;
98 case 1:
99 DERSequence tag1 = ( DERSequence ) derObject;
100 modifier.setLastRequest( LastRequestDecoder.decodeSequence( tag1 ) );
101 break;
102 case 2:
103 DERInteger tag2 = ( DERInteger ) derObject;
104 modifier.setNonce( new Integer( tag2.intValue() ) );
105 break;
106 case 3:
107 DERGeneralizedTime tag3 = ( DERGeneralizedTime ) derObject;
108 modifier.setKeyExpiration( KerberosTimeDecoder.decode( tag3 ) );
109 break;
110 case 4:
111 DERBitString tag4 = ( DERBitString ) derObject;
112 modifier.setFlags( new TicketFlags( tag4.getOctets() ) );
113 break;
114 case 5:
115 DERGeneralizedTime tag5 = ( DERGeneralizedTime ) derObject;
116 modifier.setAuthTime( KerberosTimeDecoder.decode( tag5 ) );
117 break;
118 case 6:
119 DERGeneralizedTime tag6 = ( DERGeneralizedTime ) derObject;
120 modifier.setStartTime( KerberosTimeDecoder.decode( tag6 ) );
121 break;
122 case 7:
123 DERGeneralizedTime tag7 = ( DERGeneralizedTime ) derObject;
124 modifier.setEndTime( KerberosTimeDecoder.decode( tag7 ) );
125 break;
126 case 8:
127 DERGeneralizedTime tag8 = ( DERGeneralizedTime ) derObject;
128 modifier.setRenewTill( KerberosTimeDecoder.decode( tag8 ) );
129 break;
130 case 9:
131 DERGeneralString tag9 = ( DERGeneralString ) derObject;
132 principalModifier.setRealm( tag9.getString() );
133 break;
134 case 10:
135 DERSequence tag10 = ( DERSequence ) derObject;
136 principalModifier.setPrincipalName( PrincipalNameDecoder.decode( tag10 ) );
137 break;
138 case 11:
139 DERSequence tag11 = ( DERSequence ) derObject;
140 modifier.setClientAddresses( HostAddressDecoder.decodeSequence( tag11 ) );
141 break;
142 }
143 }
144
145 modifier.setServerPrincipal( principalModifier.getKerberosPrincipal() );
146
147 return modifier;
148 }
149 }