16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x500.style; 26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom/** 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * class for breaking up an X500 Name into it's component tokens, ala 56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * java.util.StringTokenizer. We need this class as some of the 66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * lightweight Java environment don't support classes like 76e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * StringTokenizer. 86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 9d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Rootpublic class X500NameTokenizer 106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{ 116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private String value; 126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private int index; 13e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom private char separator; 146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private StringBuffer buf = new StringBuffer(); 156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500NameTokenizer( 176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom String oid) 186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this(oid, ','); 206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500NameTokenizer( 236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom String oid, 24e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom char separator) 256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.value = oid; 276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.index = -1; 28e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom this.separator = separator; 296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public boolean hasMoreTokens() 326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return (index != value.length()); 346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public String nextToken() 376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (index == value.length()) 396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return null; 416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom int end = index + 1; 446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom boolean quoted = false; 456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom boolean escaped = false; 466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom buf.setLength(0); 486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom while (end != value.length()) 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom char c = value.charAt(end); 526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (c == '"') 546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (!escaped) 566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom quoted = !quoted; 586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 59a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom buf.append(c); 606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom escaped = false; 616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else 636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (escaped || quoted) 656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom buf.append(c); 676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom escaped = false; 686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else if (c == '\\') 706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 71a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom buf.append(c); 726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom escaped = true; 736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 74e1142c149e244797ce73b0e7fad40816e447a817Brian Carlstrom else if (c == separator) 756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom break; 776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else 796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom buf.append(c); 816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom end++; 846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom index = end; 87a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom 88a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom return buf.toString(); 896e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom} 91