    001package org.apache.commons.ssl.asn1;
    002
    003import java.io.IOException;
    004
    005/** DER T61String (also the teletex string) */
    006public class DERT61String
    007    extends ASN1Object
    008    implements DERString {
    009    String string;
    010
    011    /**
    012     * return a T61 string from the passed in object.
    013     *
    014     * @throws IllegalArgumentException if the object cannot be converted.
    015     */
    016    public static DERT61String getInstance(
    017        Object obj) {
    018        if (obj == null || obj instanceof DERT61String) {
    019            return (DERT61String) obj;
    020        }
    021
    022        if (obj instanceof ASN1OctetString) {
    023            return new DERT61String(((ASN1OctetString) obj).getOctets());
    024        }
    025
    026        if (obj instanceof ASN1TaggedObject) {
    027            return getInstance(((ASN1TaggedObject) obj).getObject());
    028        }
    029
    030        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
    031    }
    032
    033    /**
    034     * return an T61 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
    038     *                 tagged false otherwise.
    039     * @throws IllegalArgumentException if the tagged object cannot
    040     *                                  be converted.
    041     */
    042    public static DERT61String getInstance(
    043        ASN1TaggedObject obj,
    044        boolean explicit) {
    045        return getInstance(obj.getObject());
    046    }
    047
    048    /** basic constructor - with bytes. */
    049    public DERT61String(
    050        byte[] string) {
    051        char[] cs = new char[string.length];
    052
    053        for (int i = 0; i != cs.length; i++) {
    054            cs[i] = (char) (string[i] & 0xff);
    055        }
    056
    057        this.string = new String(cs);
    058    }
    059
    060    /** basic constructor - with string. */
    061    public DERT61String(
    062        String string) {
    063        this.string = string;
    064    }
    065
    066    public String getString() {
    067        return string;
    068    }
    069
    070    public String toString() {
    071        return string;
    072    }
    073
    074    void encode(
    075        DEROutputStream out)
    076        throws IOException {
    077        out.writeEncoded(T61_STRING, this.getOctets());
    078    }
    079
    080    public byte[] getOctets() {
    081        char[] cs = string.toCharArray();
    082        byte[] bs = new byte[cs.length];
    083
    084        for (int i = 0; i != cs.length; i++) {
    085            bs[i] = (byte) cs[i];
    086        }
    087
    088        return bs;
    089    }
    090
    091    boolean asn1Equals(
    092        DERObject o) {
    093        if (!(o instanceof DERT61String)) {
    094            return false;
    095        }
    096
    097        return this.getString().equals(((DERT61String) o).getString());
    098    }
    099
    100    public int hashCode() {
    101        return this.getString().hashCode();
    102    }
    103}