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.IOException;
24 import java.nio.ByteBuffer;
25
26 import org.apache.directory.server.kerberos.shared.messages.KdcReply;
27 import org.apache.directory.server.kerberos.shared.messages.value.PaData;
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.DERGeneralString;
31 import org.apache.directory.shared.asn1.der.DERInteger;
32 import org.apache.directory.shared.asn1.der.DEROctetString;
33 import org.apache.directory.shared.asn1.der.DERSequence;
34 import org.apache.directory.shared.asn1.der.DERTaggedObject;
35
36
37
38
39
40
41 public class KdcReplyEncoder
42 {
43
44
45
46
47
48
49
50
51
52
53 public void encode( KdcReply app, ByteBuffer out ) throws IOException
54 {
55 ASN1OutputStream aos = new ASN1OutputStream( out );
56
57 DERSequence kdcrep = encodeKdcReplySequence( app );
58 aos.writeObject( DERApplicationSpecific.valueOf( app.getMessageType().getOrdinal(), kdcrep ) );
59
60 aos.close();
61 }
62
63
64
65
66
67
68
69
70
71
72
73
74 private DERSequence encodeKdcReplySequence( KdcReply app )
75 {
76 DERSequence sequence = new DERSequence();
77
78 sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( app.getProtocolVersionNumber() ) ) );
79
80 sequence.add( new DERTaggedObject( 1, DERInteger.valueOf( app.getMessageType().getOrdinal() ) ) );
81
82 if ( app.getPaData() != null )
83 {
84 sequence.add( new DERTaggedObject( 2, encodePreAuthData( app.getPaData() ) ) );
85 }
86
87 sequence.add( new DERTaggedObject( 3, DERGeneralString.valueOf( app.getClientRealm().toString() ) ) );
88
89 sequence.add( new DERTaggedObject( 4, PrincipalNameEncoder.encode( app.getClientPrincipal() ) ) );
90
91 sequence.add( new DERTaggedObject( 5, TicketEncoder.encode( app.getTicket() ) ) );
92
93 sequence.add( new DERTaggedObject( 6, EncryptedDataEncoder.encodeSequence( app.getEncPart() ) ) );
94
95 return sequence;
96 }
97
98
99
100
101
102
103
104
105 private DERSequence encodePreAuthData( PaData[] preAuthData )
106 {
107 DERSequence preAuth = new DERSequence();
108
109 for ( int ii = 0; ii < preAuthData.length; ii++ )
110 {
111 DERSequence sequence = new DERSequence();
112
113 sequence.add( new DERTaggedObject( 1, DERInteger.valueOf( preAuthData[ii].getPaDataType().getOrdinal() ) ) );
114 sequence.add( new DERTaggedObject( 2, new DEROctetString( preAuthData[ii].getPaDataValue() ) ) );
115 preAuth.add( sequence );
116 }
117
118 return preAuth;
119 }
120 }