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.crypto.encryption.EncryptionType;
27 import org.apache.directory.server.kerberos.shared.messages.value.EncryptedData;
28 import org.apache.directory.shared.asn1.der.ASN1InputStream;
29 import org.apache.directory.shared.asn1.der.DEREncodable;
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 EncryptedDataDecoder
41 {
42
43
44
45
46
47
48
49 public static EncryptedData decode( byte[] encodedEncryptedData ) throws IOException
50 {
51 ASN1InputStream ais = new ASN1InputStream( encodedEncryptedData );
52
53 DERSequence sequence = ( DERSequence ) ais.readObject();
54
55 return decode( sequence );
56 }
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 public static EncryptedData decode( DERSequence sequence )
72 {
73 EncryptedData encryptedData = new EncryptedData();
74
75 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
76 {
77 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
78 int tag = object.getTagNo();
79 DEREncodable derObject = object.getObject();
80
81 switch ( tag )
82 {
83 case 0:
84 DERInteger etype = ( DERInteger ) derObject;
85 encryptedData.setEType( EncryptionType.getTypeByOrdinal( etype.intValue() ) );
86 break;
87
88 case 1:
89 DERInteger kvno = ( DERInteger ) derObject;
90 encryptedData.setKvno( kvno.intValue() );
91 break;
92
93 case 2:
94 DEROctetString cipher = ( DEROctetString ) derObject;
95 encryptedData.setCipher( cipher.getOctets() );
96 break;
97 }
98 }
99
100 return encryptedData;
101 }
102 }