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.encoder;
21
22
23 import java.io.ByteArrayOutputStream;
24 import java.io.IOException;
25
26 import org.apache.directory.server.kerberos.shared.messages.components.Ticket;
27 import org.apache.directory.shared.asn1.der.ASN1OutputStream;
28 import org.apache.directory.shared.asn1.der.DERApplicationSpecific;
29 import org.apache.directory.shared.asn1.der.DERGeneralString;
30 import org.apache.directory.shared.asn1.der.DERInteger;
31 import org.apache.directory.shared.asn1.der.DERSequence;
32 import org.apache.directory.shared.asn1.der.DERTaggedObject;
33
34
35
36
37
38
39 public class TicketEncoder
40 {
41
42
43
44
45
46
47
48 public static byte[] encodeTicket( Ticket ticket ) throws IOException
49 {
50 ByteArrayOutputStream baos = new ByteArrayOutputStream();
51 ASN1OutputStream aos = new ASN1OutputStream( baos );
52
53 aos.writeObject( encode( ticket ) );
54 aos.close();
55
56 return baos.toByteArray();
57 }
58
59
60
61
62
63
64
65
66
67
68 protected static DERApplicationSpecific encode( Ticket ticket )
69 {
70 DERSequence vector = new DERSequence();
71
72 vector.add( new DERTaggedObject( 0, DERInteger.valueOf( ticket.getTktVno() ) ) );
73 vector.add( new DERTaggedObject( 1, DERGeneralString.valueOf( ticket.getRealm() ) ) );
74 vector.add( new DERTaggedObject( 2, PrincipalNameEncoder.encode( ticket.getSName() ) ) );
75 vector.add( new DERTaggedObject( 3, EncryptedDataEncoder.encodeSequence( ticket.getEncPart() ) ) );
76
77 DERApplicationSpecific ticketSequence = null;
78
79 try
80 {
81 ticketSequence = DERApplicationSpecific.valueOf( 1, vector );
82 }
83 catch ( Exception e )
84 {
85 e.printStackTrace();
86 }
87
88 return ticketSequence;
89 }
90
91
92 protected static DERSequence encodeSequence( Ticket[] tickets )
93 {
94 DERSequence outerVector = new DERSequence();
95
96 for ( int ii = 0; ii < tickets.length; ii++ )
97 {
98 DERSequence vector = new DERSequence();
99 vector.add( encode( tickets[ii] ) );
100 outerVector.add( vector );
101 }
102
103 return outerVector;
104 }
105 }