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.Authenticator;
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.DERSequence;
33 import org.apache.directory.shared.asn1.der.DERTaggedObject;
34
35
36
37
38
39
40 public class AuthenticatorEncoder implements Encoder, EncoderFactory
41 {
42
43
44
45 private static final int APPLICATION_CODE = 2;
46
47
48
49
50
51
52
53
54
55 public byte[] encode( Encodable authenticator ) throws IOException
56 {
57 ByteArrayOutputStream baos = new ByteArrayOutputStream();
58 ASN1OutputStream aos = new ASN1OutputStream( baos );
59
60 DERSequence replySequence = encodeInitialSequence( ( Authenticator ) authenticator );
61 aos.writeObject( DERApplicationSpecific.valueOf( APPLICATION_CODE, replySequence ) );
62 aos.close();
63
64 return baos.toByteArray();
65 }
66
67
68 public Encoder getEncoder()
69 {
70 return new AuthenticatorEncoder();
71 }
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 private DERSequence encodeInitialSequence( Authenticator authenticator )
96 {
97 String clientRealm = authenticator.getClientPrincipal().getRealm();
98
99 DERSequence sequence = new DERSequence();
100
101 sequence.add( new DERTaggedObject( 0, DERInteger.valueOf( authenticator.getVersionNumber() ) ) );
102 sequence.add( new DERTaggedObject( 1, DERGeneralString.valueOf( clientRealm ) ) );
103 sequence.add( new DERTaggedObject( 2, PrincipalNameEncoder.encode( authenticator.getClientPrincipal() ) ) );
104
105
106 if ( authenticator.getChecksum() != null )
107 {
108 sequence.add( new DERTaggedObject( 3, ChecksumEncoder.encode( authenticator.getChecksum() ) ) );
109 }
110
111 sequence.add( new DERTaggedObject( 4, DERInteger.valueOf( authenticator.getClientMicroSecond() ) ) );
112 sequence.add( new DERTaggedObject( 5, KerberosTimeEncoder.encode( authenticator.getClientTime() ) ) );
113
114
115 if ( authenticator.getSubSessionKey() != null )
116 {
117 sequence.add( new DERTaggedObject( 6, EncryptionKeyEncoder
118 .encodeSequence( authenticator.getSubSessionKey() ) ) );
119 }
120
121
122 if ( authenticator.getSequenceNumber() > 0 )
123 {
124 sequence.add( new DERTaggedObject( 7, DERInteger.valueOf( authenticator.getSequenceNumber() ) ) );
125 }
126
127
128 if ( authenticator.getAuthorizationData() != null )
129 {
130 sequence.add( new DERTaggedObject( 8, AuthorizationDataEncoder
131 .encode( authenticator.getAuthorizationData() ) ) );
132 }
133
134 return sequence;
135 }
136 }