74 private byte[] keyValue; |
74 private byte[] keyValue; |
75 private Integer kvno; // not part of ASN1 encoding; |
75 private Integer kvno; // not part of ASN1 encoding; |
76 |
76 |
77 private static final boolean DEBUG = Krb5.DEBUG; |
77 private static final boolean DEBUG = Krb5.DEBUG; |
78 |
78 |
79 public static int[] getETypes(EncryptionKey[] keys) { |
|
80 int len = keys.length; |
|
81 int[] result = new int[len]; |
|
82 int count = 0; // Number of elements in result. Might be less than |
|
83 // len if there are keys having the same etype |
|
84 loopi: for (int i=0; i<len; i++) { |
|
85 int eType = keys[i].getEType(); |
|
86 for (int j=0; j<count; j++) { |
|
87 if (result[j] == eType) { |
|
88 continue loopi; |
|
89 } |
|
90 } |
|
91 result[count++] = eType; |
|
92 } |
|
93 if (count != len) { |
|
94 result = Arrays.copyOf(result, count); |
|
95 } |
|
96 return result; |
|
97 } |
|
98 |
|
99 public synchronized int getEType() { |
79 public synchronized int getEType() { |
100 return keyType; |
80 return keyType; |
101 } |
81 } |
102 |
82 |
103 public final Integer getKeyVersionNumber() { |
83 public final Integer getKeyVersionNumber() { |
206 int[] etypes = EType.getDefaults("default_tkt_enctypes"); |
186 int[] etypes = EType.getDefaults("default_tkt_enctypes"); |
207 if (etypes == null) { |
187 if (etypes == null) { |
208 etypes = EType.getBuiltInDefaults(); |
188 etypes = EType.getBuiltInDefaults(); |
209 } |
189 } |
210 |
190 |
211 // set the preferred etype for preauth |
|
212 if ((pa_exists) && (pa_etype != EncryptedData.ETYPE_NULL)) { |
|
213 if (DEBUG) { |
|
214 System.out.println("Pre-Authentication: " + |
|
215 "Set preferred etype = " + pa_etype); |
|
216 } |
|
217 if (EType.isSupported(pa_etype)) { |
|
218 // reset etypes to preferred value |
|
219 etypes = new int[1]; |
|
220 etypes[0] = pa_etype; |
|
221 } |
|
222 } |
|
223 |
|
224 EncryptionKey[] encKeys = new EncryptionKey[etypes.length]; |
191 EncryptionKey[] encKeys = new EncryptionKey[etypes.length]; |
225 for (int i = 0; i < etypes.length; i++) { |
192 for (int i = 0; i < etypes.length; i++) { |
226 if (EType.isSupported(etypes[i])) { |
193 if (EType.isSupported(etypes[i])) { |
|
194 byte[] s2kparams = (pa_exists && etypes[i] == pa_etype) |
|
195 ? pa_s2kparams : null; |
227 encKeys[i] = new EncryptionKey( |
196 encKeys[i] = new EncryptionKey( |
228 stringToKey(password, salt, pa_s2kparams, etypes[i]), |
197 stringToKey(password, salt, s2kparams, etypes[i]), |
229 etypes[i], null); |
198 etypes[i], null); |
230 } else { |
199 } else { |
231 if (DEBUG) { |
200 if (DEBUG) { |
232 System.out.println("Encryption Type " + |
201 System.out.println("Encryption Type " + |
233 EType.toString(etypes[i]) + |
202 EType.toString(etypes[i]) + |