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.EncryptionKey;
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 EncryptionKeyDecoder
41 {
42
43
44
45
46
47
48
49 public static EncryptionKey decode( byte[] encodedEncryptionKey ) throws IOException
50 {
51 ASN1InputStream ais = new ASN1InputStream( encodedEncryptionKey );
52
53 DERSequence sequence = ( DERSequence ) ais.readObject();
54
55 return decode( sequence );
56 }
57
58
59
60
61
62
63
64
65 protected static EncryptionKey decode( DERSequence sequence )
66 {
67 EncryptionType type = EncryptionType.NULL;
68 byte[] data = null;
69
70 for ( Enumeration e = sequence.getObjects(); e.hasMoreElements(); )
71 {
72 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
73 int tag = object.getTagNo();
74 DEREncodable derObject = object.getObject();
75
76 switch ( tag )
77 {
78 case 0:
79 DERInteger tag0 = ( DERInteger ) derObject;
80 type = EncryptionType.getTypeByOrdinal( tag0.intValue() );
81 break;
82 case 1:
83 DEROctetString tag1 = ( DEROctetString ) derObject;
84 data = tag1.getOctets();
85 break;
86 }
87 }
88
89 return new EncryptionKey( type, data );
90 }
91 }