001package org.apache.commons.ssl.org.bouncycastle.asn1.x509;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
009
010/**
011 * The AuthorityInformationAccess object.
012 * <pre>
013 * id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
014 *
015 * AuthorityInfoAccessSyntax  ::=
016 *      SEQUENCE SIZE (1..MAX) OF AccessDescription
017 * AccessDescription  ::=  SEQUENCE {
018 *       accessMethod          OBJECT IDENTIFIER,
019 *       accessLocation        GeneralName  }
020 *
021 * id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
022 * id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
023 * id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
024 * </pre>
025 */
026public class AuthorityInformationAccess
027    extends ASN1Object
028{
029    private AccessDescription[]    descriptions;
030
031    public static AuthorityInformationAccess getInstance(
032        Object  obj)
033    {
034        if (obj instanceof AuthorityInformationAccess)
035        {
036            return (AuthorityInformationAccess)obj;
037        }
038
039        if (obj != null)
040        {
041            return new AuthorityInformationAccess(ASN1Sequence.getInstance(obj));
042        }
043
044        return null;
045    }
046 
047    private AuthorityInformationAccess(
048        ASN1Sequence   seq)
049    {
050        if (seq.size() < 1) 
051        {
052            throw new IllegalArgumentException("sequence may not be empty");
053        }
054
055        descriptions = new AccessDescription[seq.size()];
056        
057        for (int i = 0; i != seq.size(); i++)
058        {
059            descriptions[i] = AccessDescription.getInstance(seq.getObjectAt(i));
060        }
061    }
062
063    public AuthorityInformationAccess(
064        AccessDescription description)
065    {
066        this.descriptions = new AccessDescription[]{ description };
067    }
068
069    /**
070     * create an AuthorityInformationAccess with the oid and location provided.
071     */
072    public AuthorityInformationAccess(
073        ASN1ObjectIdentifier oid,
074        GeneralName location)
075    {
076        this(new AccessDescription(oid, location));
077    }
078
079    /**
080     * 
081     * @return the access descriptions contained in this object.
082     */
083    public AccessDescription[] getAccessDescriptions()
084    {
085        return descriptions;
086    }
087    
088    public ASN1Primitive toASN1Primitive()
089    {
090        ASN1EncodableVector vec = new ASN1EncodableVector();
091        
092        for (int i = 0; i != descriptions.length; i++)
093        {
094            vec.add(descriptions[i]);
095        }
096        
097        return new DERSequence(vec);
098    }
099
100    public String toString()
101    {
102        return ("AuthorityInformationAccess: Oid(" + this.descriptions[0].getAccessMethod().getId() + ")");
103    }
104}