001 package org.apache.commons.ssl.asn1;
002
003 import java.io.IOException;
004
005 public 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 }