001 package org.apache.commons.ssl.asn1;
002
003 import java.io.IOException;
004
005 /** DER UTF8String object. */
006 public class DERUTF8String
007 extends ASN1Object
008 implements DERString {
009 String string;
010
011 /**
012 * return an UTF8 string from the passed in object.
013 *
014 * @throws IllegalArgumentException if the object cannot be converted.
015 */
016 public static DERUTF8String getInstance(Object obj) {
017 if (obj == null || obj instanceof DERUTF8String) {
018 return (DERUTF8String) obj;
019 }
020
021 if (obj instanceof ASN1OctetString) {
022 return new DERUTF8String(((ASN1OctetString) obj).getOctets());
023 }
024
025 if (obj instanceof ASN1TaggedObject) {
026 return getInstance(((ASN1TaggedObject) obj).getObject());
027 }
028
029 throw new IllegalArgumentException("illegal object in getInstance: "
030 + obj.getClass().getName());
031 }
032
033 /**
034 * return an UTF8 String from a tagged object.
035 *
036 * @param obj the tagged object holding the object we want
037 * @param explicit true if the object is meant to be explicitly tagged false
038 * otherwise.
039 * @throws IllegalArgumentException if the tagged object cannot be converted.
040 */
041 public static DERUTF8String getInstance(
042 ASN1TaggedObject obj,
043 boolean explicit) {
044 return getInstance(obj.getObject());
045 }
046
047 /** basic constructor - byte encoded string. */
048 DERUTF8String(byte[] string) {
049 this.string = Strings.fromUTF8ByteArray(string);
050 }
051
052 /** basic constructor */
053 public DERUTF8String(String string) {
054 this.string = string;
055 }
056
057 public String getString() {
058 return string;
059 }
060
061 public String toString() {
062 return string;
063 }
064
065 public int hashCode() {
066 return this.getString().hashCode();
067 }
068
069 boolean asn1Equals(DERObject o) {
070 if (!(o instanceof DERUTF8String)) {
071 return false;
072 }
073
074 DERUTF8String s = (DERUTF8String) o;
075
076 return this.getString().equals(s.getString());
077 }
078
079 void encode(DEROutputStream out)
080 throws IOException {
081 out.writeEncoded(UTF8_STRING, Strings.toUTF8ByteArray(string));
082 }
083 }