001 /* 002 * Copyright (c) 2000 - 2006 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) 003 * 004 * Permission is hereby granted, free of charge, to any person obtaining a copy of this 005 * software and associated documentation files (the "Software"), to deal in the Software 006 * without restriction, including without limitation the rights to use, copy, modify, 007 * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 008 * permit persons to whom the Software is furnished to do so, subject to the following 009 * conditions: 010 * 011 * The above copyright notice and this permission notice shall be included in all copies 012 * or substantial portions of the Software. 013 * 014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 015 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 016 * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 017 * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 018 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 019 * DEALINGS IN THE SOFTWARE. 020 * 021 */ 022 023 package org.apache.directory.shared.asn1.der; 024 025 026 import java.io.ByteArrayOutputStream; 027 import java.io.IOException; 028 029 030 /** 031 * DER Application Specific object. 032 */ 033 public class DERApplicationSpecific extends DERObject 034 { 035 private int tag; 036 037 038 /** 039 * Basic DERObject constructor. 040 */ 041 public DERApplicationSpecific(int tag, byte[] value) 042 { 043 super( tag, value ); 044 this.tag = tag; 045 } 046 047 048 /** 049 * Static factory method, type-conversion operator. 050 */ 051 public static DERApplicationSpecific valueOf( int tag, DEREncodable object ) throws IOException 052 { 053 tag = tag | CONSTRUCTED; 054 055 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 056 ASN1OutputStream aos = new ASN1OutputStream( baos ); 057 058 aos.writeObject( object ); 059 060 return new DERApplicationSpecific( tag, baos.toByteArray() ); 061 } 062 063 064 public int getApplicationTag() 065 { 066 return tag & 0x1F; 067 } 068 069 070 public DEREncodable getObject() throws IOException 071 { 072 final ASN1InputStream ais = new ASN1InputStream( getOctets() ); 073 try 074 { 075 return ais.readObject(); 076 } 077 finally 078 { 079 ais.close(); 080 } 081 } 082 083 084 public void encode( ASN1OutputStream out ) throws IOException 085 { 086 out.writeEncoded( APPLICATION | tag, value ); 087 } 088 }