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.value.EncryptedTimeStamp;
28 import org.apache.directory.server.kerberos.shared.messages.value.EncryptedTimeStampModifier;
29 import org.apache.directory.shared.asn1.der.ASN1InputStream;
30 import org.apache.directory.shared.asn1.der.DEREncodable;
31 import org.apache.directory.shared.asn1.der.DERGeneralizedTime;
32 import org.apache.directory.shared.asn1.der.DERInteger;
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
42
43
44
45
46
47
48
49 public class EncryptedTimestampDecoder implements Decoder, DecoderFactory
50 {
51 public Decoder getDecoder()
52 {
53 return new EncryptedTimestampDecoder();
54 }
55
56
57 public Encodable decode( byte[] encodedEncryptedTimestamp ) throws IOException
58 {
59 ASN1InputStream ais = new ASN1InputStream( encodedEncryptedTimestamp );
60
61 DERSequence sequence = ( DERSequence ) ais.readObject();
62
63 return decodeEncryptedTimestamp( sequence );
64 }
65
66
67 protected EncryptedTimeStamp decodeEncryptedTimestamp( DERSequence sequence )
68 {
69 EncryptedTimeStampModifier modifier = new EncryptedTimeStampModifier();
70
71 for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
72 {
73 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
74 int tag = object.getTagNo();
75 DEREncodable derObject = object.getObject();
76
77 switch ( tag )
78 {
79 case 0:
80 DERGeneralizedTime tag0 = ( DERGeneralizedTime ) derObject;
81 modifier.setKerberosTime( KerberosTimeDecoder.decode( tag0 ) );
82 break;
83 case 1:
84 DERInteger tag1 = ( DERInteger ) derObject;
85 modifier.setMicroSecond( tag1.intValue() );
86 break;
87 }
88 }
89
90 return modifier.getEncryptedTimestamp();
91 }
92 }