X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fbouncycastle%2Fasn1%2FDERVisibleString.java;h=f603b93e20a06d42cef10e230e07e90f19d7fff2;hp=f2071d3f31ca524722e057c918b39b85c54ca268;hb=da1f843588c8bd2b2c7cc74a5b4ffff8d57ab712;hpb=e5e9355b4f4e0e2c8de9068a71c1e3cc26fa9905 diff --git a/src/org/bouncycastle/asn1/DERVisibleString.java b/src/org/bouncycastle/asn1/DERVisibleString.java index f2071d3..f603b93 100644 --- a/src/org/bouncycastle/asn1/DERVisibleString.java +++ b/src/org/bouncycastle/asn1/DERVisibleString.java @@ -12,19 +12,61 @@ public class DERVisibleString String string; /** + * return a Visible String from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERVisibleString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERVisibleString) + { + return (DERVisibleString)obj; + } + + if (obj instanceof ASN1OctetString) + { + return new DERVisibleString(((ASN1OctetString)obj).getOctets()); + } + + if (obj instanceof ASN1TaggedObject) + { + return getInstance(((ASN1TaggedObject)obj).getObject()); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a Visible String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERVisibleString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(obj.getObject()); + } + + /** * basic constructor - byte encoded string. */ public DERVisibleString( byte[] string) { - try - { - this.string = new String(string, "US-ASCII"); - } - catch(UnsupportedEncodingException e) + char[] cs = new char[string.length]; + + for (int i = 0; i != cs.length; i++) { - throw new RuntimeException("PANIC: " + e); + cs[i] = (char)(string[i] & 0xff); } + + this.string = new String(cs); } /** @@ -43,14 +85,15 @@ public class DERVisibleString public byte[] getOctets() { - try - { - return string.getBytes("US-ASCII"); - } - catch(UnsupportedEncodingException e) + char[] cs = string.toCharArray(); + byte[] bs = new byte[cs.length]; + + for (int i = 0; i != cs.length; i++) { - throw new RuntimeException("PANIC: " + e); + bs[i] = (byte)cs[i]; } + + return bs; } void encode( @@ -59,4 +102,15 @@ public class DERVisibleString { out.writeEncoded(VISIBLE_STRING, this.getOctets()); } + + public boolean equals( + Object o) + { + if ((o == null) || !(o instanceof DERVisibleString)) + { + return false; + } + + return this.getString().equals(((DERVisibleString)o).getString()); + } }