001package org.apache.commons.ssl.asn1;
002
003import java.io.IOException;
004
005public class DERBoolean
006    extends ASN1Object {
007    byte value;
008
009    public static final DERBoolean FALSE = new DERBoolean(false);
010    public static final DERBoolean TRUE = new DERBoolean(true);
011
012    /**
013     * return a boolean from the passed in object.
014     *
015     * @throws IllegalArgumentException if the object cannot be converted.
016     */
017    public static DERBoolean getInstance(
018        Object obj) {
019        if (obj == null || obj instanceof DERBoolean) {
020            return (DERBoolean) obj;
021        }
022
023        if (obj instanceof ASN1OctetString) {
024            return new DERBoolean(((ASN1OctetString) obj).getOctets());
025        }
026
027        if (obj instanceof ASN1TaggedObject) {
028            return getInstance(((ASN1TaggedObject) obj).getObject());
029        }
030
031        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
032    }
033
034    /** return a DERBoolean from the passed in boolean. */
035    public static DERBoolean getInstance(
036        boolean value) {
037        return (value ? TRUE : FALSE);
038    }
039
040    /**
041     * return a Boolean from a tagged object.
042     *
043     * @param obj      the tagged object holding the object we want
044     * @param explicit true if the object is meant to be explicitly
045     *                 tagged false otherwise.
046     * @throws IllegalArgumentException if the tagged object cannot
047     *                                  be converted.
048     */
049    public static DERBoolean getInstance(
050        ASN1TaggedObject obj,
051        boolean explicit) {
052        return getInstance(obj.getObject());
053    }
054
055    public DERBoolean(
056        byte[] value) {
057        this.value = value[0];
058    }
059
060    public DERBoolean(
061        boolean value) {
062        this.value = (value) ? (byte) 0xff : (byte) 0;
063    }
064
065    public boolean isTrue() {
066        return (value != 0);
067    }
068
069    void encode(
070        DEROutputStream out)
071        throws IOException {
072        byte[] bytes = new byte[1];
073
074        bytes[0] = value;
075
076        out.writeEncoded(BOOLEAN, bytes);
077    }
078
079    protected boolean asn1Equals(
080        DERObject o) {
081        if ((o == null) || !(o instanceof DERBoolean)) {
082            return false;
083        }
084
085        return (value == ((DERBoolean) o).value);
086    }
087
088    public int hashCode() {
089        return value;
090    }
091
092
093    public String toString() {
094        return (value != 0) ? "TRUE" : "FALSE";
095    }
096}