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