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.components.Ticket;
27 import org.apache.directory.shared.asn1.der.ASN1InputStream;
28 import org.apache.directory.shared.asn1.der.DERApplicationSpecific;
29 import org.apache.directory.shared.asn1.der.DEREncodable;
30 import org.apache.directory.shared.asn1.der.DERGeneralString;
31 import org.apache.directory.shared.asn1.der.DERInteger;
32 import org.apache.directory.shared.asn1.der.DERSequence;
33 import org.apache.directory.shared.asn1.der.DERTaggedObject;
34
35
36
37
38
39
40 public class TicketDecoder
41 {
42
43
44
45
46
47
48
49 public static Ticket decode( byte[] encodedTicket ) throws IOException
50 {
51 ASN1InputStream ais = new ASN1InputStream( encodedTicket );
52
53 DERApplicationSpecific app = ( DERApplicationSpecific ) ais.readObject();
54
55 return decode( app );
56 }
57
58
59
60
61
62
63
64
65
66 public static Ticket[] decodeSequence( DERSequence sequence ) throws IOException
67 {
68 Ticket[] tickets = new Ticket[sequence.size()];
69
70 int ii = 0;
71 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
72 {
73 DERApplicationSpecific object = ( DERApplicationSpecific ) e.nextElement();
74 tickets[ii] = decode( object );
75 }
76
77 return tickets;
78 }
79
80
81
82
83
84
85
86
87
88
89 protected static Ticket decode( DERApplicationSpecific app ) throws IOException
90 {
91 DERSequence sequence = ( DERSequence ) app.getObject();
92
93 Ticket ticket = new Ticket();
94
95 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
96 {
97 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
98 int tag = object.getTagNo();
99 DEREncodable derObject = object.getObject();
100
101 switch ( tag )
102 {
103 case 0:
104 DERInteger tag0 = ( DERInteger ) derObject;
105 ticket.setTktVno( tag0.intValue() );
106 break;
107
108 case 1:
109 DERGeneralString tag1 = ( DERGeneralString ) derObject;
110 ticket.setRealm( tag1.getString() );
111 break;
112
113 case 2:
114 DERSequence tag2 = ( DERSequence ) derObject;
115 ticket.setSName( PrincipalNameDecoder.decode( tag2 ) );
116 break;
117
118 case 3:
119 DERSequence tag3 = ( DERSequence ) derObject;
120 ticket.setEncPart( EncryptedDataDecoder.decode( tag3 ) );
121 break;
122 }
123 }
124
125 return ticket;
126 }
127 }