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.decoder;
21
22
23 import java.io.IOException;
24 import java.util.Enumeration;
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.server.kerberos.shared.messages.components.EncKrbPrivPartModifier;
29 import org.apache.directory.shared.asn1.der.ASN1InputStream;
30 import org.apache.directory.shared.asn1.der.DERApplicationSpecific;
31 import org.apache.directory.shared.asn1.der.DEREncodable;
32 import org.apache.directory.shared.asn1.der.DERGeneralizedTime;
33 import org.apache.directory.shared.asn1.der.DERInteger;
34 import org.apache.directory.shared.asn1.der.DEROctetString;
35 import org.apache.directory.shared.asn1.der.DERSequence;
36 import org.apache.directory.shared.asn1.der.DERTaggedObject;
37
38
39
40
41
42
43 public class EncKrbPrivPartDecoder implements Decoder, DecoderFactory
44 {
45 public Decoder getDecoder()
46 {
47 return new EncKrbPrivPartDecoder();
48 }
49
50
51 public Encodable decode( byte[] encodedPrivatePart ) throws IOException
52 {
53 ASN1InputStream ais = new ASN1InputStream( encodedPrivatePart );
54
55 DERApplicationSpecific app = ( DERApplicationSpecific ) ais.readObject();
56
57 DERSequence privatePart = ( DERSequence ) app.getObject();
58
59 return decodePrivatePartSequence( privatePart );
60 }
61
62
63 private EncKrbPrivPart decodePrivatePartSequence( DERSequence sequence )
64 {
65 EncKrbPrivPartModifier modifier = new EncKrbPrivPartModifier();
66
67 for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
68 {
69 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
70 int tag = object.getTagNo();
71 DEREncodable derObject = object.getObject();
72
73 switch ( tag )
74 {
75 case 0:
76 DEROctetString tag0 = ( DEROctetString ) derObject;
77 modifier.setUserData( tag0.getOctets() );
78 break;
79 case 1:
80 DERGeneralizedTime tag1 = ( DERGeneralizedTime ) derObject;
81 modifier.setTimestamp( KerberosTimeDecoder.decode( tag1 ) );
82 break;
83 case 2:
84 DERInteger tag2 = ( DERInteger ) derObject;
85 modifier.setMicroSecond( new Integer( tag2.intValue() ) );
86 break;
87 case 3:
88 DERInteger tag3 = ( DERInteger ) derObject;
89 modifier.setSequenceNumber( new Integer( tag3.intValue() ) );
90 break;
91 case 4:
92 DERSequence tag4 = ( DERSequence ) derObject;
93 modifier.setSenderAddress( HostAddressDecoder.decode( tag4 ) );
94 break;
95 case 5:
96 DERSequence tag5 = ( DERSequence ) derObject;
97 modifier.setRecipientAddress( HostAddressDecoder.decode( tag5 ) );
98 break;
99 }
100 }
101 return modifier.getEncKrbPrivPart();
102 }
103 }