comparison src/org/eclipse/jetty/util/StringUtil.java @ 853:3242aff51053

remove RolloverFileOutputStream and cleanup NCSARequestLog
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 20 Sep 2016 00:23:56 -0600
parents 8e9db0bbf4f9
children 8d0bdd357e6e
comparison
equal deleted inserted replaced
852:b462b4ff22d8 853:3242aff51053
33 * 33 *
34 * 34 *
35 */ 35 */
36 public class StringUtil 36 public class StringUtil
37 { 37 {
38 private static final Logger LOG = LoggerFactory.getLogger(StringUtil.class); 38 private static final Logger LOG = LoggerFactory.getLogger(StringUtil.class);
39 39
40 public static final String ALL_INTERFACES="0.0.0.0"; 40 public static final String ALL_INTERFACES="0.0.0.0";
41 public static final String CRLF="\015\012"; 41 public static final String CRLF="\015\012";
42 public static final String __LINE_SEPARATOR= 42
43 System.getProperty("line.separator","\n"); 43 public static final String __ISO_8859_1="ISO-8859-1";
44 44 public final static String __UTF8="UTF-8";
45 public static final String __ISO_8859_1="ISO-8859-1"; 45 public final static String __UTF8Alt="UTF8";
46 public final static String __UTF8="UTF-8"; 46 public final static String __UTF16="UTF-16";
47 public final static String __UTF8Alt="UTF8"; 47
48 public final static String __UTF16="UTF-16"; 48 public final static Charset __UTF8_CHARSET;
49 49 public final static Charset __ISO_8859_1_CHARSET;
50 public final static Charset __UTF8_CHARSET; 50
51 public final static Charset __ISO_8859_1_CHARSET; 51 static
52 52 {
53 static 53 __UTF8_CHARSET=Charset.forName(__UTF8);
54 { 54 __ISO_8859_1_CHARSET=Charset.forName(__ISO_8859_1);
55 __UTF8_CHARSET=Charset.forName(__UTF8); 55 }
56 __ISO_8859_1_CHARSET=Charset.forName(__ISO_8859_1); 56
57 } 57 private static char[] lowercases = {
58 58 '\000','\001','\002','\003','\004','\005','\006','\007',
59 private static char[] lowercases = { 59 '\010','\011','\012','\013','\014','\015','\016','\017',
60 '\000','\001','\002','\003','\004','\005','\006','\007', 60 '\020','\021','\022','\023','\024','\025','\026','\027',
61 '\010','\011','\012','\013','\014','\015','\016','\017', 61 '\030','\031','\032','\033','\034','\035','\036','\037',
62 '\020','\021','\022','\023','\024','\025','\026','\027', 62 '\040','\041','\042','\043','\044','\045','\046','\047',
63 '\030','\031','\032','\033','\034','\035','\036','\037', 63 '\050','\051','\052','\053','\054','\055','\056','\057',
64 '\040','\041','\042','\043','\044','\045','\046','\047', 64 '\060','\061','\062','\063','\064','\065','\066','\067',
65 '\050','\051','\052','\053','\054','\055','\056','\057', 65 '\070','\071','\072','\073','\074','\075','\076','\077',
66 '\060','\061','\062','\063','\064','\065','\066','\067', 66 '\100','\141','\142','\143','\144','\145','\146','\147',
67 '\070','\071','\072','\073','\074','\075','\076','\077', 67 '\150','\151','\152','\153','\154','\155','\156','\157',
68 '\100','\141','\142','\143','\144','\145','\146','\147', 68 '\160','\161','\162','\163','\164','\165','\166','\167',
69 '\150','\151','\152','\153','\154','\155','\156','\157', 69 '\170','\171','\172','\133','\134','\135','\136','\137',
70 '\160','\161','\162','\163','\164','\165','\166','\167', 70 '\140','\141','\142','\143','\144','\145','\146','\147',
71 '\170','\171','\172','\133','\134','\135','\136','\137', 71 '\150','\151','\152','\153','\154','\155','\156','\157',
72 '\140','\141','\142','\143','\144','\145','\146','\147', 72 '\160','\161','\162','\163','\164','\165','\166','\167',
73 '\150','\151','\152','\153','\154','\155','\156','\157', 73 '\170','\171','\172','\173','\174','\175','\176','\177' };
74 '\160','\161','\162','\163','\164','\165','\166','\167', 74
75 '\170','\171','\172','\173','\174','\175','\176','\177' }; 75 /* ------------------------------------------------------------ */
76 76 /**
77 /* ------------------------------------------------------------ */ 77 * fast lower case conversion. Only works on ascii (not unicode)
78 /** 78 * @param s the string to convert
79 * fast lower case conversion. Only works on ascii (not unicode) 79 * @return a lower case version of s
80 * @param s the string to convert 80 */
81 * @return a lower case version of s 81 public static String asciiToLowerCase(String s)
82 */ 82 {
83 public static String asciiToLowerCase(String s) 83 char[] c = null;
84 { 84 int i=s.length();
85 char[] c = null; 85
86 int i=s.length(); 86 // look for first conversion
87 87 while (i-->0)
88 // look for first conversion 88 {
89 while (i-->0) 89 char c1=s.charAt(i);
90 { 90 if (c1<=127)
91 char c1=s.charAt(i); 91 {
92 if (c1<=127) 92 char c2=lowercases[c1];
93 { 93 if (c1!=c2)
94 char c2=lowercases[c1]; 94 {
95 if (c1!=c2) 95 c=s.toCharArray();
96 { 96 c[i]=c2;
97 c=s.toCharArray(); 97 break;
98 c[i]=c2; 98 }
99 break; 99 }
100 } 100 }
101 } 101
102 } 102 while (i-->0)
103 103 {
104 while (i-->0) 104 if(c[i]<=127)
105 { 105 c[i] = lowercases[c[i]];
106 if(c[i]<=127) 106 }
107 c[i] = lowercases[c[i]]; 107
108 } 108 return c==null?s:new String(c);
109 109 }
110 return c==null?s:new String(c); 110
111 } 111
112 112 /* ------------------------------------------------------------ */
113 113 public static boolean startsWithIgnoreCase(String s,String w)
114 /* ------------------------------------------------------------ */ 114 {
115 public static boolean startsWithIgnoreCase(String s,String w) 115 if (w==null)
116 { 116 return true;
117 if (w==null) 117
118 return true; 118 if (s==null || s.length()<w.length())
119 119 return false;
120 if (s==null || s.length()<w.length()) 120
121 return false; 121 for (int i=0;i<w.length();i++)
122 122 {
123 for (int i=0;i<w.length();i++) 123 char c1=s.charAt(i);
124 { 124 char c2=w.charAt(i);
125 char c1=s.charAt(i); 125 if (c1!=c2)
126 char c2=w.charAt(i); 126 {
127 if (c1!=c2) 127 if (c1<=127)
128 { 128 c1=lowercases[c1];
129 if (c1<=127) 129 if (c2<=127)
130 c1=lowercases[c1]; 130 c2=lowercases[c2];
131 if (c2<=127) 131 if (c1!=c2)
132 c2=lowercases[c2]; 132 return false;
133 if (c1!=c2) 133 }
134 return false; 134 }
135 } 135 return true;
136 } 136 }
137 return true; 137
138 } 138 /* ------------------------------------------------------------ */
139 139 public static boolean endsWithIgnoreCase(String s,String w)
140 /* ------------------------------------------------------------ */ 140 {
141 public static boolean endsWithIgnoreCase(String s,String w) 141 if (w==null)
142 { 142 return true;
143 if (w==null) 143
144 return true; 144 if (s==null)
145 145 return false;
146 if (s==null) 146
147 return false; 147 int sl=s.length();
148 148 int wl=w.length();
149 int sl=s.length(); 149
150 int wl=w.length(); 150 if (sl<wl)
151 151 return false;
152 if (sl<wl) 152
153 return false; 153 for (int i=wl;i-->0;)
154 154 {
155 for (int i=wl;i-->0;) 155 char c1=s.charAt(--sl);
156 { 156 char c2=w.charAt(i);
157 char c1=s.charAt(--sl); 157 if (c1!=c2)
158 char c2=w.charAt(i); 158 {
159 if (c1!=c2) 159 if (c1<=127)
160 { 160 c1=lowercases[c1];
161 if (c1<=127) 161 if (c2<=127)
162 c1=lowercases[c1]; 162 c2=lowercases[c2];
163 if (c2<=127) 163 if (c1!=c2)
164 c2=lowercases[c2]; 164 return false;
165 if (c1!=c2) 165 }
166 return false; 166 }
167 } 167 return true;
168 } 168 }
169 return true; 169
170 } 170 /* ------------------------------------------------------------ */
171 171 /**
172 /* ------------------------------------------------------------ */ 172 * returns the next index of a character from the chars string
173 /** 173 */
174 * returns the next index of a character from the chars string 174 public static int indexFrom(String s,String chars)
175 */ 175 {
176 public static int indexFrom(String s,String chars) 176 for (int i=0;i<s.length();i++)
177 { 177 if (chars.indexOf(s.charAt(i))>=0)
178 for (int i=0;i<s.length();i++) 178 return i;
179 if (chars.indexOf(s.charAt(i))>=0) 179 return -1;
180 return i; 180 }
181 return -1; 181
182 } 182 /* ------------------------------------------------------------ */
183 183 /**
184 /* ------------------------------------------------------------ */ 184 * replace substrings within string.
185 /** 185 */
186 * replace substrings within string. 186 public static String replace(String s, String sub, String with)
187 */ 187 {
188 public static String replace(String s, String sub, String with) 188 int c=0;
189 { 189 int i=s.indexOf(sub,c);
190 int c=0; 190 if (i == -1)
191 int i=s.indexOf(sub,c); 191 return s;
192 if (i == -1) 192
193 return s; 193 StringBuilder buf = new StringBuilder(s.length()+with.length());
194 194
195 StringBuilder buf = new StringBuilder(s.length()+with.length()); 195 do
196 196 {
197 do 197 buf.append(s.substring(c,i));
198 { 198 buf.append(with);
199 buf.append(s.substring(c,i)); 199 c=i+sub.length();
200 buf.append(with); 200 } while ((i=s.indexOf(sub,c))!=-1);
201 c=i+sub.length(); 201
202 } while ((i=s.indexOf(sub,c))!=-1); 202 if (c<s.length())
203 203 buf.append(s.substring(c,s.length()));
204 if (c<s.length()) 204
205 buf.append(s.substring(c,s.length())); 205 return buf.toString();
206 206
207 return buf.toString(); 207 }
208 208
209 } 209
210 210 /* ------------------------------------------------------------ */
211 211 /** Remove single or double quotes.
212 /* ------------------------------------------------------------ */ 212 */
213 /** Remove single or double quotes. 213 public static String unquote(String s)
214 */ 214 {
215 public static String unquote(String s) 215 return QuotedStringTokenizer.unquote(s);
216 { 216 }
217 return QuotedStringTokenizer.unquote(s); 217
218 } 218
219 219 /* ------------------------------------------------------------ */
220 220 /** Append substring to StringBuilder
221 /* ------------------------------------------------------------ */ 221 * @param buf StringBuilder to append to
222 /** Append substring to StringBuilder 222 * @param s String to append from
223 * @param buf StringBuilder to append to 223 * @param offset The offset of the substring
224 * @param s String to append from 224 * @param length The length of the substring
225 * @param offset The offset of the substring 225 */
226 * @param length The length of the substring 226 public static void append(StringBuilder buf,
227 */ 227 String s,
228 public static void append(StringBuilder buf, 228 int offset,
229 String s, 229 int length)
230 int offset, 230 {
231 int length) 231 synchronized(buf)
232 { 232 {
233 synchronized(buf) 233 int end=offset+length;
234 { 234 for (int i=offset; i<end;i++)
235 int end=offset+length; 235 {
236 for (int i=offset; i<end;i++) 236 if (i>=s.length())
237 { 237 break;
238 if (i>=s.length()) 238 buf.append(s.charAt(i));
239 break; 239 }
240 buf.append(s.charAt(i)); 240 }
241 } 241 }
242 } 242
243 } 243
244 244 /* ------------------------------------------------------------ */
245 245 /**
246 /* ------------------------------------------------------------ */ 246 * append hex digit
247 /** 247 *
248 * append hex digit 248 */
249 * 249 public static void append(StringBuilder buf,byte b,int base)
250 */ 250 {
251 public static void append(StringBuilder buf,byte b,int base) 251 int bi=0xff&b;
252 { 252 int c='0'+(bi/base)%base;
253 int bi=0xff&b; 253 if (c>'9')
254 int c='0'+(bi/base)%base; 254 c= 'a'+(c-'0'-10);
255 if (c>'9') 255 buf.append((char)c);
256 c= 'a'+(c-'0'-10); 256 c='0'+bi%base;
257 buf.append((char)c); 257 if (c>'9')
258 c='0'+bi%base; 258 c= 'a'+(c-'0'-10);
259 if (c>'9') 259 buf.append((char)c);
260 c= 'a'+(c-'0'-10); 260 }
261 buf.append((char)c); 261
262 } 262 /* ------------------------------------------------------------ */
263 263 public static void append2digits(StringBuffer buf,int i)
264 /* ------------------------------------------------------------ */ 264 {
265 public static void append2digits(StringBuffer buf,int i) 265 if (i<100)
266 { 266 {
267 if (i<100) 267 buf.append((char)(i/10+'0'));
268 { 268 buf.append((char)(i%10+'0'));
269 buf.append((char)(i/10+'0')); 269 }
270 buf.append((char)(i%10+'0')); 270 }
271 } 271
272 } 272 /* ------------------------------------------------------------ */
273 273 public static void append2digits(StringBuilder buf,int i)
274 /* ------------------------------------------------------------ */ 274 {
275 public static void append2digits(StringBuilder buf,int i) 275 if (i<100)
276 { 276 {
277 if (i<100) 277 buf.append((char)(i/10+'0'));
278 { 278 buf.append((char)(i%10+'0'));
279 buf.append((char)(i/10+'0')); 279 }
280 buf.append((char)(i%10+'0')); 280 }
281 } 281
282 } 282 /* ------------------------------------------------------------ */
283 283 /** Return a non null string.
284 /* ------------------------------------------------------------ */ 284 * @param s String
285 /** Return a non null string. 285 * @return The string passed in or empty string if it is null.
286 * @param s String 286 */
287 * @return The string passed in or empty string if it is null. 287 public static String nonNull(String s)
288 */ 288 {
289 public static String nonNull(String s) 289 if (s==null)
290 { 290 return "";
291 if (s==null) 291 return s;
292 return ""; 292 }
293 return s; 293
294 } 294 /* ------------------------------------------------------------ */
295 295 public static boolean equals(String s,char[] buf, int offset, int length)
296 /* ------------------------------------------------------------ */ 296 {
297 public static boolean equals(String s,char[] buf, int offset, int length) 297 if (s.length()!=length)
298 { 298 return false;
299 if (s.length()!=length) 299 for (int i=0;i<length;i++)
300 return false; 300 if (buf[offset+i]!=s.charAt(i))
301 for (int i=0;i<length;i++) 301 return false;
302 if (buf[offset+i]!=s.charAt(i)) 302 return true;
303 return false; 303 }
304 return true; 304
305 } 305 /* ------------------------------------------------------------ */
306 306 public static String toUTF8String(byte[] b,int offset,int length)
307 /* ------------------------------------------------------------ */ 307 {
308 public static String toUTF8String(byte[] b,int offset,int length) 308 try
309 { 309 {
310 try 310 return new String(b,offset,length,__UTF8);
311 { 311 }
312 return new String(b,offset,length,__UTF8); 312 catch (UnsupportedEncodingException e)
313 } 313 {
314 catch (UnsupportedEncodingException e) 314 throw new IllegalArgumentException(e);
315 { 315 }
316 throw new IllegalArgumentException(e); 316 }
317 } 317
318 } 318 /* ------------------------------------------------------------ */
319 319 public static String toString(byte[] b,int offset,int length,String charset)
320 /* ------------------------------------------------------------ */ 320 {
321 public static String toString(byte[] b,int offset,int length,String charset) 321 try
322 { 322 {
323 try 323 return new String(b,offset,length,charset);
324 { 324 }
325 return new String(b,offset,length,charset); 325 catch (UnsupportedEncodingException e)
326 } 326 {
327 catch (UnsupportedEncodingException e) 327 throw new IllegalArgumentException(e);
328 { 328 }
329 throw new IllegalArgumentException(e); 329 }
330 } 330
331 } 331
332 332 /* ------------------------------------------------------------ */
333 333 public static boolean isUTF8(String charset)
334 /* ------------------------------------------------------------ */ 334 {
335 public static boolean isUTF8(String charset) 335 return __UTF8.equalsIgnoreCase(charset)||__UTF8Alt.equalsIgnoreCase(charset);
336 { 336 }
337 return __UTF8.equalsIgnoreCase(charset)||__UTF8Alt.equalsIgnoreCase(charset); 337
338 } 338
339 339 /* ------------------------------------------------------------ */
340 340 public static String printable(String name)
341 /* ------------------------------------------------------------ */ 341 {
342 public static String printable(String name) 342 if (name==null)
343 { 343 return null;
344 if (name==null) 344 StringBuilder buf = new StringBuilder(name.length());
345 return null; 345 for (int i=0;i<name.length();i++)
346 StringBuilder buf = new StringBuilder(name.length()); 346 {
347 for (int i=0;i<name.length();i++) 347 char c=name.charAt(i);
348 { 348 if (!Character.isISOControl(c))
349 char c=name.charAt(i); 349 buf.append(c);
350 if (!Character.isISOControl(c)) 350 }
351 buf.append(c); 351 return buf.toString();
352 } 352 }
353 return buf.toString(); 353
354 } 354 /* ------------------------------------------------------------ */
355 355 public static String printable(byte[] b)
356 /* ------------------------------------------------------------ */ 356 {
357 public static String printable(byte[] b) 357 StringBuilder buf = new StringBuilder();
358 { 358 for (int i=0;i<b.length;i++)
359 StringBuilder buf = new StringBuilder(); 359 {
360 for (int i=0;i<b.length;i++) 360 char c=(char)b[i];
361 { 361 if (Character.isWhitespace(c)|| c>' ' && c<0x7f)
362 char c=(char)b[i]; 362 buf.append(c);
363 if (Character.isWhitespace(c)|| c>' ' && c<0x7f) 363 else
364 buf.append(c); 364 {
365 else 365 buf.append("0x");
366 { 366 TypeUtil.toHex(b[i],buf);
367 buf.append("0x"); 367 }
368 TypeUtil.toHex(b[i],buf); 368 }
369 } 369 return buf.toString();
370 } 370 }
371 return buf.toString(); 371
372 } 372 public static byte[] getBytes(String s)
373 373 {
374 public static byte[] getBytes(String s) 374 try
375 { 375 {
376 try 376 return s.getBytes(__ISO_8859_1);
377 { 377 }
378 return s.getBytes(__ISO_8859_1); 378 catch(Exception e)
379 } 379 {
380 catch(Exception e) 380 LOG.warn("",e);
381 { 381 return s.getBytes();
382 LOG.warn("",e); 382 }
383 return s.getBytes(); 383 }
384 } 384
385 } 385 public static byte[] getBytes(String s,String charset)
386 386 {
387 public static byte[] getBytes(String s,String charset) 387 try
388 { 388 {
389 try 389 return s.getBytes(charset);
390 { 390 }
391 return s.getBytes(charset); 391 catch(Exception e)
392 } 392 {
393 catch(Exception e) 393 LOG.warn("",e);
394 { 394 return s.getBytes();
395 LOG.warn("",e); 395 }
396 return s.getBytes(); 396 }
397 } 397
398 } 398
399 399
400 400 /**
401 401 * Converts a binary SID to a string SID
402 /** 402 *
403 * Converts a binary SID to a string SID 403 * http://en.wikipedia.org/wiki/Security_Identifier
404 * 404 *
405 * http://en.wikipedia.org/wiki/Security_Identifier 405 * S-1-IdentifierAuthority-SubAuthority1-SubAuthority2-...-SubAuthorityn
406 * 406 */
407 * S-1-IdentifierAuthority-SubAuthority1-SubAuthority2-...-SubAuthorityn 407 public static String sidBytesToString(byte[] sidBytes)
408 */ 408 {
409 public static String sidBytesToString(byte[] sidBytes) 409 StringBuilder sidString = new StringBuilder();
410 { 410
411 StringBuilder sidString = new StringBuilder(); 411 // Identify this as a SID
412 412 sidString.append("S-");
413 // Identify this as a SID 413
414 sidString.append("S-"); 414 // Add SID revision level (expect 1 but may change someday)
415 415 sidString.append(Byte.toString(sidBytes[0])).append('-');
416 // Add SID revision level (expect 1 but may change someday) 416
417 sidString.append(Byte.toString(sidBytes[0])).append('-'); 417 StringBuilder tmpBuilder = new StringBuilder();
418 418
419 StringBuilder tmpBuilder = new StringBuilder(); 419 // crunch the six bytes of issuing authority value
420 420 for (int i = 2; i <= 7; ++i)
421 // crunch the six bytes of issuing authority value 421 {
422 for (int i = 2; i <= 7; ++i) 422 tmpBuilder.append(Integer.toHexString(sidBytes[i] & 0xFF));
423 { 423 }
424 tmpBuilder.append(Integer.toHexString(sidBytes[i] & 0xFF)); 424
425 } 425 sidString.append(Long.parseLong(tmpBuilder.toString(), 16)); // '-' is in the subauth loop
426
427 sidString.append(Long.parseLong(tmpBuilder.toString(), 16)); // '-' is in the subauth loop
428 426
429 // the number of subAuthorities we need to attach 427 // the number of subAuthorities we need to attach
430 int subAuthorityCount = sidBytes[1]; 428 int subAuthorityCount = sidBytes[1];
431 429
432 // attach each of the subAuthorities 430 // attach each of the subAuthorities
433 for (int i = 0; i < subAuthorityCount; ++i) 431 for (int i = 0; i < subAuthorityCount; ++i)
434 { 432 {
435 int offset = i * 4; 433 int offset = i * 4;
436 tmpBuilder.setLength(0); 434 tmpBuilder.setLength(0);
437 // these need to be zero padded hex and little endian 435 // these need to be zero padded hex and little endian
438 tmpBuilder.append(String.format("%02X%02X%02X%02X", 436 tmpBuilder.append(String.format("%02X%02X%02X%02X",
439 (sidBytes[11 + offset] & 0xFF), 437 (sidBytes[11 + offset] & 0xFF),
440 (sidBytes[10 + offset] & 0xFF), 438 (sidBytes[10 + offset] & 0xFF),
441 (sidBytes[9 + offset] & 0xFF), 439 (sidBytes[9 + offset] & 0xFF),
442 (sidBytes[8 + offset] & 0xFF))); 440 (sidBytes[8 + offset] & 0xFF)));
443 sidString.append('-').append(Long.parseLong(tmpBuilder.toString(), 16)); 441 sidString.append('-').append(Long.parseLong(tmpBuilder.toString(), 16));
444 } 442 }
445 443
446 return sidString.toString(); 444 return sidString.toString();
447 } 445 }
448 446
449 /** 447 /**
450 * Converts a string SID to a binary SID 448 * Converts a string SID to a binary SID
451 * 449 *
452 * http://en.wikipedia.org/wiki/Security_Identifier 450 * http://en.wikipedia.org/wiki/Security_Identifier
453 * 451 *
454 * S-1-IdentifierAuthority-SubAuthority1-SubAuthority2-...-SubAuthorityn 452 * S-1-IdentifierAuthority-SubAuthority1-SubAuthority2-...-SubAuthorityn
455 */ 453 */
456 public static byte[] sidStringToBytes( String sidString ) 454 public static byte[] sidStringToBytes( String sidString )
457 { 455 {
458 String[] sidTokens = sidString.split("-"); 456 String[] sidTokens = sidString.split("-");
459 457
460 int subAuthorityCount = sidTokens.length - 3; // S-Rev-IdAuth- 458 int subAuthorityCount = sidTokens.length - 3; // S-Rev-IdAuth-
461 459
462 int byteCount = 0; 460 int byteCount = 0;
463 byte[] sidBytes = new byte[1 + 1 + 6 + (4 * subAuthorityCount)]; 461 byte[] sidBytes = new byte[1 + 1 + 6 + (4 * subAuthorityCount)];
464 462
465 // the revision byte 463 // the revision byte
466 sidBytes[byteCount++] = (byte)Integer.parseInt(sidTokens[1]); 464 sidBytes[byteCount++] = (byte)Integer.parseInt(sidTokens[1]);
467 465
468 // the # of sub authorities byte 466 // the # of sub authorities byte
469 sidBytes[byteCount++] = (byte)subAuthorityCount; 467 sidBytes[byteCount++] = (byte)subAuthorityCount;
470 468
471 // the certAuthority 469 // the certAuthority
472 String hexStr = Long.toHexString(Long.parseLong(sidTokens[2])); 470 String hexStr = Long.toHexString(Long.parseLong(sidTokens[2]));
473 471
474 while( hexStr.length() < 12) // pad to 12 characters 472 while( hexStr.length() < 12) // pad to 12 characters
475 { 473 {
476 hexStr = "0" + hexStr; 474 hexStr = "0" + hexStr;
477 } 475 }
478 476
479 // place the certAuthority 6 bytes 477 // place the certAuthority 6 bytes
480 for ( int i = 0 ; i < hexStr.length(); i = i + 2) 478 for ( int i = 0 ; i < hexStr.length(); i = i + 2)
481 { 479 {
482 sidBytes[byteCount++] = (byte)Integer.parseInt(hexStr.substring(i, i + 2),16); 480 sidBytes[byteCount++] = (byte)Integer.parseInt(hexStr.substring(i, i + 2),16);
483 } 481 }
484 482
485 483
486 for ( int i = 3; i < sidTokens.length ; ++i) 484 for ( int i = 3; i < sidTokens.length ; ++i)
487 { 485 {
488 hexStr = Long.toHexString(Long.parseLong(sidTokens[i])); 486 hexStr = Long.toHexString(Long.parseLong(sidTokens[i]));
489 487
490 while( hexStr.length() < 8) // pad to 8 characters 488 while( hexStr.length() < 8) // pad to 8 characters
491 { 489 {
492 hexStr = "0" + hexStr; 490 hexStr = "0" + hexStr;
493 } 491 }
494 492
495 // place the inverted sub authorities, 4 bytes each 493 // place the inverted sub authorities, 4 bytes each
496 for ( int j = hexStr.length(); j > 0; j = j - 2) 494 for ( int j = hexStr.length(); j > 0; j = j - 2)
497 { 495 {
498 sidBytes[byteCount++] = (byte)Integer.parseInt(hexStr.substring(j-2, j),16); 496 sidBytes[byteCount++] = (byte)Integer.parseInt(hexStr.substring(j-2, j),16);
499 } 497 }
500 } 498 }
501 499
502 return sidBytes; 500 return sidBytes;
503 } 501 }
504 } 502 }