001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package org.apache.geronimo.util.asn1;
020
021 import java.io.IOException;
022
023 public class DERGeneralString
024 extends DERObject implements DERString
025 {
026 private String string;
027
028 public static DERGeneralString getInstance(
029 Object obj)
030 {
031 if (obj == null || obj instanceof DERGeneralString)
032 {
033 return (DERGeneralString) obj;
034 }
035 if (obj instanceof ASN1OctetString)
036 {
037 return new DERGeneralString(((ASN1OctetString) obj).getOctets());
038 }
039 if (obj instanceof ASN1TaggedObject)
040 {
041 return getInstance(((ASN1TaggedObject) obj).getObject());
042 }
043 throw new IllegalArgumentException("illegal object in getInstance: "
044 + obj.getClass().getName());
045 }
046
047 public static DERGeneralString getInstance(
048 ASN1TaggedObject obj,
049 boolean explicit)
050 {
051 return getInstance(obj.getObject());
052 }
053
054 public DERGeneralString(byte[] string)
055 {
056 char[] cs = new char[string.length];
057 for (int i = 0; i != cs.length; i++)
058 {
059 cs[i] = (char)(string[i] & 0xff);
060 }
061 this.string = new String(cs);
062 }
063
064 public DERGeneralString(String string)
065 {
066 this.string = string;
067 }
068
069 public String getString()
070 {
071 return string;
072 }
073
074 public byte[] getOctets()
075 {
076 char[] cs = string.toCharArray();
077 byte[] bs = new byte[cs.length];
078 for (int i = 0; i != cs.length; i++)
079 {
080 bs[i] = (byte) cs[i];
081 }
082 return bs;
083 }
084
085 void encode(DEROutputStream out)
086 throws IOException
087 {
088 out.writeEncoded(GENERAL_STRING, this.getOctets());
089 }
090
091 public int hashCode()
092 {
093 return this.getString().hashCode();
094 }
095
096 public boolean equals(Object o)
097 {
098 if (!(o instanceof DERGeneralString))
099 {
100 return false;
101 }
102 DERGeneralString s = (DERGeneralString) o;
103 return this.getString().equals(s.getString());
104 }
105 }