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