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 Projectpackage java.security.cert; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ObjectIdentifier; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.utils.Array; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class implements a policy qualifier as defined by the ASN.1 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code PolicyQualifierInfo} structure. 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class PolicyQualifierInfo { 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // This PolicyQualifierInfo DER encoding 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final byte[] encoded; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // This PolicyQualifierInfo policy qualifier id - 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // OID represented as String containing non-negative integers 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // separated by periods 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final String policyQualifierId; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // DER encoding of the policy qualifier - part of encoded 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final byte[] policyQualifier; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code PolicyQualifierInfo} from the specified encoded 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * form. 42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param encoded 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the DER encoded policy qualifier. 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IOException 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the policy qualifier cannot be decoded. 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PolicyQualifierInfo(byte[] encoded) throws IOException { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoded == null) { 50897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new NullPointerException("encoded == null"); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoded.length == 0) { 53897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new IOException("encoded.length == 0"); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.encoded = new byte[encoded.length]; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(encoded, 0, this.encoded, 0, this.encoded.length); 57f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // DER Decoding: 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object[] decoded = (Object[]) org.apache.harmony.security.x509.PolicyQualifierInfo.ASN1 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .decode(this.encoded); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project policyQualifierId = ObjectIdentifier.toString((int[]) decoded[0]); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project policyQualifier = (byte[]) decoded[1]; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a ASN.1 DER encoded copy of policy qualifier info. 67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a ASN.1 DER encoded copy of policy qualifier info. 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final byte[] getEncoded() { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ret = new byte[encoded.length]; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(encoded, 0, ret, 0, encoded.length); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ret; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the identifier (an OID) of this policy qualifier info. 78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the identifier of this policy qualifier info. 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String getPolicyQualifierId() { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return policyQualifierId; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a ASN.1 DER encoded copy of the qualifier of this policy 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * qualifier info. 88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a ASN.1 DER encoded copy of the qualifier of this policy 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * qualifier info. 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final byte[] getPolicyQualifier() { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (policyQualifier == null) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ret = new byte[policyQualifier.length]; 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(policyQualifier, 0, ret, 0, policyQualifier.length); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ret; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a string representation of this {@code PolicyQualifierInfo} 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. 104f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a string representation of this {@code PolicyQualifierInfo} 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 1092f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes StringBuilder sb = 110f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes new StringBuilder("PolicyQualifierInfo: [\npolicyQualifierId: "); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(policyQualifierId); 112f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("\npolicyQualifier: \n"); 113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(Array.toString(policyQualifier, " ")); 114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("]"); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 118