001package org.apache.commons.ssl.org.bouncycastle.asn1; 002 003import java.io.IOException; 004 005import org.bouncycastle.util.Arrays; 006import org.bouncycastle.util.Strings; 007 008public class DERGeneralString 009 extends ASN1Primitive 010 implements ASN1String 011{ 012 private byte[] string; 013 014 public static DERGeneralString getInstance( 015 Object obj) 016 { 017 if (obj == null || obj instanceof DERGeneralString) 018 { 019 return (DERGeneralString) obj; 020 } 021 022 if (obj instanceof byte[]) 023 { 024 try 025 { 026 return (DERGeneralString)fromByteArray((byte[])obj); 027 } 028 catch (Exception e) 029 { 030 throw new IllegalArgumentException("encoding error in getInstance: " + e.toString()); 031 } 032 } 033 034 throw new IllegalArgumentException("illegal object in getInstance: " 035 + obj.getClass().getName()); 036 } 037 038 public static DERGeneralString getInstance( 039 ASN1TaggedObject obj, 040 boolean explicit) 041 { 042 ASN1Primitive o = obj.getObject(); 043 044 if (explicit || o instanceof DERGeneralString) 045 { 046 return getInstance(o); 047 } 048 else 049 { 050 return new DERGeneralString(((ASN1OctetString)o).getOctets()); 051 } 052 } 053 054 DERGeneralString(byte[] string) 055 { 056 this.string = string; 057 } 058 059 public DERGeneralString(String string) 060 { 061 this.string = Strings.toByteArray(string); 062 } 063 064 public String getString() 065 { 066 return Strings.fromByteArray(string); 067 } 068 069 public String toString() 070 { 071 return getString(); 072 } 073 074 public byte[] getOctets() 075 { 076 return Arrays.clone(string); 077 } 078 079 boolean isConstructed() 080 { 081 return false; 082 } 083 084 int encodedLength() 085 { 086 return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; 087 } 088 089 void encode(ASN1OutputStream out) 090 throws IOException 091 { 092 out.writeEncoded(BERTags.GENERAL_STRING, string); 093 } 094 095 public int hashCode() 096 { 097 return Arrays.hashCode(string); 098 } 099 100 boolean asn1Equals(ASN1Primitive o) 101 { 102 if (!(o instanceof DERGeneralString)) 103 { 104 return false; 105 } 106 DERGeneralString s = (DERGeneralString)o; 107 108 return Arrays.areEqual(string, s.string); 109 } 110}