1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vladimir N. Molotkov, Stepan M. Mishura 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.asn1; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class represents ASN.1 ANY type. 30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see <a href="http://asn1.elibel.tm.fr/en/standards/index.htm">ASN.1</a> 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 335c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilsonpublic final class ASN1Any extends ASN1Type { 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 355c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson /** default implementation */ 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final ASN1Any ASN1= new ASN1Any(); 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs ASN.1 ANY type 40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The constructor is provided for inheritance purposes 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when there is a need to create a custom ASN.1 ANY type. 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To get a default implementation it is recommended to use 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getInstance() method. 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ASN1Any() { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(TAG_ANY); // has not tag number 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns ASN.1 ANY type default implementation 52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The default implementation works with full encoding 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that is represented as raw byte array. 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return ASN.1 ANY type default implementation 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static ASN1Any getInstance() { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ASN1; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests provided identifier. 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param identifier - identifier to be verified 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return - true 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final boolean checkTag(int identifier) { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; //all tags are OK 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object decode(BerInputStream in) throws IOException { 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // only read content, doesn't check it 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project in.readContent(); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (in.isVerify) { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDecodedObject(in); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Extracts array of bytes that represents full encoding from BER input 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. 85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 865c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson * @param in BER input stream 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return array of bytes 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getDecodedObject(BerInputStream in) throws IOException { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bytesEncoded = new byte[in.offset - in.tagOffset]; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(in.buffer, in.tagOffset, bytesEncoded, 0, 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bytesEncoded.length); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return bytesEncoded; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void encodeASN(BerOutputStream out) { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.encodeANY(); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void encodeContent(BerOutputStream out) { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.encodeANY(); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEncodingContent(BerOutputStream out) { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.length = ((byte[]) out.content).length; 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getEncodedLength(BerOutputStream out) { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return out.length; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 112