package com.google.bitcoin.bouncycastle.asn1.x509;
import java.util.Enumeration;
import java.util.Vector;
import com.google.bitcoin.bouncycastle.asn1.ASN1Encodable;
import com.google.bitcoin.bouncycastle.asn1.ASN1EncodableVector;
import com.google.bitcoin.bouncycastle.asn1.ASN1Sequence;
import com.google.bitcoin.bouncycastle.asn1.ASN1TaggedObject;
import com.google.bitcoin.bouncycastle.asn1.DERObject;
import com.google.bitcoin.bouncycastle.asn1.DERObjectIdentifier;
import com.google.bitcoin.bouncycastle.asn1.DERSequence;
public class CertificatePolicies
extends ASN1Encodable
{
static final DERObjectIdentifier anyPolicy = new DERObjectIdentifier("2.5.29.32.0");
Vector policies = new Vector();
/**
* @deprecated use an ASN1Sequence of PolicyInformation
*/
public static CertificatePolicies getInstance(
ASN1TaggedObject obj,
boolean explicit)
{
return getInstance(ASN1Sequence.getInstance(obj, explicit));
}
/**
* @deprecated use an ASN1Sequence of PolicyInformation
*/
public static CertificatePolicies getInstance(
Object obj)
{
if (obj instanceof CertificatePolicies)
{
return (CertificatePolicies)obj;
}
else if (obj instanceof ASN1Sequence)
{
return new CertificatePolicies((ASN1Sequence)obj);
}
throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
}
/**
* @deprecated use an ASN1Sequence of PolicyInformation
*/
public CertificatePolicies(
ASN1Sequence seq)
{
Enumeration e = seq.getObjects();
while (e.hasMoreElements())
{
ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement());
policies.addElement(s.getObjectAt(0));
}
// For now we just don't handle PolicyQualifiers
}
/**
* create a certificate policy with the given OID.
* @deprecated use an ASN1Sequence of PolicyInformation
*/
public CertificatePolicies(
DERObjectIdentifier p)
{
policies.addElement(p);
}
/**
* create a certificate policy with the policy given by the OID represented
* by the string p.
* @deprecated use an ASN1Sequence of PolicyInformation
*/
public CertificatePolicies(
String p)
{
this(new DERObjectIdentifier(p));
}
public void addPolicy(
String p)
{
policies.addElement(new DERObjectIdentifier(p));
}
public String getPolicy(int nr)
{
if (policies.size() > nr)
{
return ((DERObjectIdentifier)policies.elementAt(nr)).getId();
}
return null;
}
/**
* <pre>
* certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
*
* PolicyInformation ::= SEQUENCE {
* policyIdentifier CertPolicyId,
* policyQualifiers SEQUENCE SIZE (1..MAX) OF
* PolicyQualifierInfo OPTIONAL }
*
* CertPolicyId ::= OBJECT IDENTIFIER
*
* PolicyQualifierInfo ::= SEQUENCE {
* policyQualifierId PolicyQualifierId,
* qualifier ANY DEFINED BY policyQualifierId }
*
* PolicyQualifierId ::=
* OBJECT IDENTIFIER (id-qt-cps | id-qt-unotice)
* </pre>
* @deprecated use an ASN1Sequence of PolicyInformation
*/
public DERObject toASN1Object()
{
ASN1EncodableVector v = new ASN1EncodableVector();
// We only do policyIdentifier yet...
for (int i=0;i<policies.size();i++)
{
v.add(new DERSequence((DERObjectIdentifier)policies.elementAt(i)));
}
return new DERSequence(v);
}
public String toString()
{
String p = null;
for (int i=0;i<policies.size();i++)
{
if (p != null)
{
p += ", ";
}
p += ((DERObjectIdentifier)policies.elementAt(i)).getId();
}
return "CertificatePolicies: "+p;
}
}