001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package org.apache.geronimo.util.asn1.x509; 020 021 import java.util.Enumeration; 022 import java.util.Vector; 023 024 import org.apache.geronimo.util.asn1.ASN1Encodable; 025 import org.apache.geronimo.util.asn1.ASN1EncodableVector; 026 import org.apache.geronimo.util.asn1.ASN1Sequence; 027 import org.apache.geronimo.util.asn1.ASN1TaggedObject; 028 import org.apache.geronimo.util.asn1.DERObject; 029 import org.apache.geronimo.util.asn1.DERObjectIdentifier; 030 import org.apache.geronimo.util.asn1.DERSequence; 031 032 public class CertificatePolicies 033 extends ASN1Encodable 034 { 035 static final DERObjectIdentifier anyPolicy = new DERObjectIdentifier("2.5.29.32.0"); 036 037 Vector policies = new Vector(); 038 039 /** 040 * @deprecated use an ASN1Sequence of PolicyInformation 041 */ 042 public static CertificatePolicies getInstance( 043 ASN1TaggedObject obj, 044 boolean explicit) 045 { 046 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 047 } 048 049 /** 050 * @deprecated use an ASN1Sequence of PolicyInformation 051 */ 052 public static CertificatePolicies getInstance( 053 Object obj) 054 { 055 if (obj instanceof CertificatePolicies) 056 { 057 return (CertificatePolicies)obj; 058 } 059 else if (obj instanceof ASN1Sequence) 060 { 061 return new CertificatePolicies((ASN1Sequence)obj); 062 } 063 064 throw new IllegalArgumentException("unknown object in factory"); 065 } 066 067 /** 068 * @deprecated use an ASN1Sequence of PolicyInformation 069 */ 070 public CertificatePolicies( 071 ASN1Sequence seq) 072 { 073 Enumeration e = seq.getObjects(); 074 while (e.hasMoreElements()) 075 { 076 ASN1Sequence s = (ASN1Sequence)e.nextElement(); 077 policies.addElement(s.getObjectAt(0)); 078 } 079 // For now we just don't handle PolicyQualifiers 080 } 081 082 /** 083 * create a certificate policy with the given OID. 084 * @deprecated use an ASN1Sequence of PolicyInformation 085 */ 086 public CertificatePolicies( 087 DERObjectIdentifier p) 088 { 089 policies.addElement(p); 090 } 091 092 /** 093 * create a certificate policy with the policy given by the OID represented 094 * by the string p. 095 * @deprecated use an ASN1Sequence of PolicyInformation 096 */ 097 public CertificatePolicies( 098 String p) 099 { 100 this(new DERObjectIdentifier(p)); 101 } 102 103 public void addPolicy( 104 String p) 105 { 106 policies.addElement(new DERObjectIdentifier(p)); 107 } 108 109 public String getPolicy(int nr) 110 { 111 if (policies.size() > nr) 112 return ((DERObjectIdentifier)policies.elementAt(nr)).getId(); 113 114 return null; 115 } 116 117 /** 118 * <pre> 119 * certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation 120 * 121 * PolicyInformation ::= SEQUENCE { 122 * policyIdentifier CertPolicyId, 123 * policyQualifiers SEQUENCE SIZE (1..MAX) OF 124 * PolicyQualifierInfo OPTIONAL } 125 * 126 * CertPolicyId ::= OBJECT IDENTIFIER 127 * 128 * PolicyQualifierInfo ::= SEQUENCE { 129 * policyQualifierId PolicyQualifierId, 130 * qualifier ANY DEFINED BY policyQualifierId } 131 * 132 * PolicyQualifierId ::= 133 * OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice ) 134 * </pre> 135 * @deprecated use an ASN1Sequence of PolicyInformation 136 */ 137 public DERObject toASN1Object() 138 { 139 ASN1EncodableVector v = new ASN1EncodableVector(); 140 141 // We only do policyIdentifier yet... 142 for (int i=0;i<policies.size();i++) 143 { 144 v.add(new DERSequence((DERObjectIdentifier)policies.elementAt(i))); 145 } 146 147 return new DERSequence(v); 148 } 149 150 public String toString() 151 { 152 String p = null; 153 for (int i=0;i<policies.size();i++) 154 { 155 if (p != null) 156 p += ", "; 157 p += ((DERObjectIdentifier)policies.elementAt(i)).getId(); 158 } 159 return "CertificatePolicies: "+p; 160 } 161 }