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.EncKrbPrivPart;
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.DERInteger;
31 import org.apache.directory.shared.asn1.der.DEROctetString;
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 EncKrbPrivPartEncoder implements Encoder, EncoderFactory
41 {
42 private static final int APPLICATION_CODE = 28;
43
44
45 public Encoder getEncoder()
46 {
47 return new EncKrbPrivPartEncoder();
48 }
49
50
51 public byte[] encode( Encodable privPart ) throws IOException
52 {
53 ByteArrayOutputStream baos = new ByteArrayOutputStream();
54 ASN1OutputStream aos = new ASN1OutputStream( baos );
55
56 DERSequence privPartSequence = encodePrivatePartSequence( ( EncKrbPrivPart ) privPart );
57 aos.writeObject( DERApplicationSpecific.valueOf( APPLICATION_CODE, privPartSequence ) );
58 aos.close();
59
60 return baos.toByteArray();
61 }
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 private DERSequence encodePrivatePartSequence( EncKrbPrivPart message )
80 {
81 DERSequence sequence = new DERSequence();
82
83 sequence.add( new DERTaggedObject( 0, new DEROctetString( message.getUserData() ) ) );
84
85 if ( message.getTimestamp() != null )
86 {
87 sequence.add( new DERTaggedObject( 1, KerberosTimeEncoder.encode( message.getTimestamp() ) ) );
88 }
89
90 if ( message.getMicroSecond() != null )
91 {
92 sequence.add( new DERTaggedObject( 2, DERInteger.valueOf( message.getMicroSecond().intValue() ) ) );
93 }
94
95 if ( message.getSequenceNumber() != null )
96 {
97 sequence.add( new DERTaggedObject( 3, DERInteger.valueOf( message.getSequenceNumber().intValue() ) ) );
98 }
99
100 sequence.add( new DERTaggedObject( 4, HostAddressesEncoder.encode( message.getSenderAddress() ) ) );
101
102 if ( message.getRecipientAddress() != null )
103 {
104 sequence.add( new DERTaggedObject( 5, HostAddressesEncoder.encode( message.getRecipientAddress() ) ) );
105 }
106
107 return sequence;
108 }
109 }