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.Encodable;
27 import org.apache.directory.server.kerberos.shared.messages.components.EncTicketPart;
28 import org.apache.directory.shared.asn1.der.ASN1OutputStream;
29 import org.apache.directory.shared.asn1.der.DERApplicationSpecific;
30 import org.apache.directory.shared.asn1.der.DERBitString;
31 import org.apache.directory.shared.asn1.der.DERGeneralString;
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 EncTicketPartEncoder implements Encoder, EncoderFactory
41 {
42
43
44
45 private static final int APPLICATION_CODE = 3;
46
47
48 public byte[] encode( Encodable ticketPart ) throws IOException
49 {
50 ByteArrayOutputStream baos = new ByteArrayOutputStream();
51 ASN1OutputStream aos = new ASN1OutputStream( baos );
52
53 DERSequence ticketSequence = encodeInitialSequence( ( EncTicketPart ) ticketPart );
54 aos.writeObject( DERApplicationSpecific.valueOf( APPLICATION_CODE, ticketSequence ) );
55 aos.close();
56
57 return baos.toByteArray();
58 }
59
60
61 public Encoder getEncoder()
62 {
63 return new EncTicketPartEncoder();
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 public DERSequence encodeInitialSequence( EncTicketPart ticketPart )
89 {
90 DERSequence sequence = new DERSequence();
91
92 sequence.add( new DERTaggedObject( 0, new DERBitString( ticketPart.getFlags().getBytes() ) ) );
93 sequence.add( new DERTaggedObject( 1, EncryptionKeyEncoder.encodeSequence( ticketPart.getSessionKey() ) ) );
94 sequence.add( new DERTaggedObject( 2, DERGeneralString.valueOf( ticketPart.getClientRealm().toString() ) ) );
95 sequence.add( new DERTaggedObject( 3, PrincipalNameEncoder.encode( ticketPart.getClientPrincipal() ) ) );
96 sequence.add( new DERTaggedObject( 4, TransitedEncodingEncoder.encode( ticketPart.getTransitedEncoding() ) ) );
97 sequence.add( new DERTaggedObject( 5, KerberosTimeEncoder.encode( ticketPart.getAuthTime() ) ) );
98
99
100 if ( ticketPart.getStartTime() != null )
101 {
102 sequence.add( new DERTaggedObject( 6, KerberosTimeEncoder.encode( ticketPart.getStartTime() ) ) );
103 }
104
105 sequence.add( new DERTaggedObject( 7, KerberosTimeEncoder.encode( ticketPart.getEndTime() ) ) );
106
107
108 if ( ticketPart.getRenewTill() != null )
109 {
110 sequence.add( new DERTaggedObject( 8, KerberosTimeEncoder.encode( ticketPart.getRenewTill() ) ) );
111 }
112
113
114 if ( ticketPart.getClientAddresses() != null )
115 {
116 sequence
117 .add( new DERTaggedObject( 9, HostAddressesEncoder.encodeSequence( ticketPart.getClientAddresses() ) ) );
118 }
119
120
121 if ( ticketPart.getAuthorizationData() != null )
122 {
123 sequence
124 .add( new DERTaggedObject( 10, AuthorizationDataEncoder.encode( ticketPart.getAuthorizationData() ) ) );
125 }
126
127 return sequence;
128 }
129 }