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.crypto.encryption;
21
22
23 import java.util.HashSet;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.crypto.KeyGenerator;
28 import javax.crypto.SecretKey;
29 import javax.crypto.spec.DESKeySpec;
30
31 import junit.framework.TestCase;
32
33 import org.apache.directory.server.kerberos.shared.messages.value.EncryptionKey;
34
35
36
37
38
39
40
41
42
43 public class RandomKeyFactoryTest extends TestCase
44 {
45
46
47
48
49
50 public void testGenerateDesKey() throws Exception
51 {
52 KeyGenerator keygen = KeyGenerator.getInstance( "DES" );
53 SecretKey key = keygen.generateKey();
54 assertEquals( "DES key size", 8, key.getEncoded().length );
55 assertTrue( DESKeySpec.isParityAdjusted( key.getEncoded(), 0 ) );
56 }
57
58
59
60
61
62
63
64 public void testGenerateTripleDesKey() throws Exception
65 {
66 KeyGenerator keygen = KeyGenerator.getInstance( "DESede" );
67 SecretKey key = keygen.generateKey();
68 assertEquals( "DESede key size", 24, key.getEncoded().length );
69 }
70
71
72
73
74
75
76
77 public void testGenerateAes128Key() throws Exception
78 {
79 KeyGenerator keygen = KeyGenerator.getInstance( "AES" );
80 keygen.init( 128 );
81 SecretKey key = keygen.generateKey();
82 assertEquals( "AES key size", 16, key.getEncoded().length );
83 }
84
85
86
87
88
89
90
91 public void testGenerateAes256Key() throws Exception
92 {
93 KeyGenerator keygen = KeyGenerator.getInstance( "AES" );
94 keygen.init( 256 );
95 SecretKey key = keygen.generateKey();
96 assertEquals( "AES key size", 32, key.getEncoded().length );
97 }
98
99
100
101
102
103
104
105 public void testGenerateArcFourKey() throws Exception
106 {
107 if ( !VendorHelper.isArcFourHmacSupported() )
108 {
109 return;
110 }
111
112 KeyGenerator keygen = KeyGenerator.getInstance( "ARCFOUR" );
113 SecretKey key = keygen.generateKey();
114 assertEquals( "ARCFOUR key size", 16, key.getEncoded().length );
115 }
116
117
118
119
120
121
122
123 public void testGenerateRc4Key() throws Exception
124 {
125 if ( !VendorHelper.isArcFourHmacSupported() )
126 {
127 return;
128 }
129
130 KeyGenerator keygen = KeyGenerator.getInstance( "RC4" );
131 SecretKey key = keygen.generateKey();
132 assertEquals( "RC4 key size", 16, key.getEncoded().length );
133 }
134
135
136
137
138
139
140
141 public void testRandomKeyFactory() throws Exception
142 {
143 Map<EncryptionType, EncryptionKey> map = RandomKeyFactory.getRandomKeys();
144
145 EncryptionKey kerberosKey = map.get( EncryptionType.DES_CBC_MD5 );
146
147 EncryptionType keyType = kerberosKey.getKeyType();
148 int keyLength = kerberosKey.getKeyValue().length;
149
150 assertEquals( keyType, EncryptionType.DES_CBC_MD5 );
151 assertEquals( keyLength, 8 );
152
153 kerberosKey = map.get( EncryptionType.DES3_CBC_SHA1_KD );
154 keyType = kerberosKey.getKeyType();
155 keyLength = kerberosKey.getKeyValue().length;
156
157 assertEquals( keyType, EncryptionType.DES3_CBC_SHA1_KD );
158 assertEquals( keyLength, 24 );
159
160 kerberosKey = map.get( EncryptionType.RC4_HMAC );
161 keyType = kerberosKey.getKeyType();
162 keyLength = kerberosKey.getKeyValue().length;
163
164 if ( VendorHelper.isArcFourHmacSupported() )
165 {
166 assertEquals( keyType, EncryptionType.RC4_HMAC );
167 assertEquals( keyLength, 16 );
168 }
169
170 kerberosKey = map.get( EncryptionType.AES128_CTS_HMAC_SHA1_96 );
171 keyType = kerberosKey.getKeyType();
172 keyLength = kerberosKey.getKeyValue().length;
173
174 assertEquals( keyType, EncryptionType.AES128_CTS_HMAC_SHA1_96 );
175 assertEquals( keyLength, 16 );
176
177 kerberosKey = map.get( EncryptionType.AES256_CTS_HMAC_SHA1_96 );
178 keyType = kerberosKey.getKeyType();
179 keyLength = kerberosKey.getKeyValue().length;
180
181 assertEquals( keyType, EncryptionType.AES256_CTS_HMAC_SHA1_96 );
182 assertEquals( keyLength, 32 );
183 }
184
185
186
187
188
189
190
191 public void testRandomKeyFactoryOnlyDes() throws Exception
192 {
193 Set<EncryptionType> encryptionTypes = new HashSet<EncryptionType>();
194 encryptionTypes.add( EncryptionType.DES_CBC_MD5 );
195
196 Map<EncryptionType, EncryptionKey> map = RandomKeyFactory.getRandomKeys( encryptionTypes );
197
198 assertEquals( "List length", 1, map.values().size() );
199
200 EncryptionKey kerberosKey = map.get( EncryptionType.DES_CBC_MD5 );
201
202 EncryptionType keyType = kerberosKey.getKeyType();
203 int keyLength = kerberosKey.getKeyValue().length;
204
205 assertEquals( keyType, EncryptionType.DES_CBC_MD5 );
206 assertEquals( keyLength, 8 );
207 }
208 }