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.crypto.asn1.x509;
019
020 import org.apache.geronimo.crypto.asn1.ASN1Encodable;
021 import org.apache.geronimo.crypto.asn1.ASN1EncodableVector;
022 import org.apache.geronimo.crypto.asn1.ASN1Sequence;
023 import org.apache.geronimo.crypto.asn1.ASN1TaggedObject;
024 import org.apache.geronimo.crypto.asn1.DERBitString;
025 import org.apache.geronimo.crypto.asn1.DERInteger;
026 import org.apache.geronimo.crypto.asn1.DERObject;
027 import org.apache.geronimo.crypto.asn1.DERSequence;
028
029 public class AttributeCertificateInfo
030 extends ASN1Encodable
031 {
032 private DERInteger version;
033 private Holder holder;
034 private AttCertIssuer issuer;
035 private AlgorithmIdentifier signature;
036 private DERInteger serialNumber;
037 private AttCertValidityPeriod attrCertValidityPeriod;
038 private ASN1Sequence attributes;
039 private DERBitString issuerUniqueID;
040 private X509Extensions extensions;
041
042 public static AttributeCertificateInfo getInstance(
043 ASN1TaggedObject obj,
044 boolean explicit)
045 {
046 return getInstance(ASN1Sequence.getInstance(obj, explicit));
047 }
048
049 public static AttributeCertificateInfo getInstance(
050 Object obj)
051 {
052 if (obj instanceof AttributeCertificateInfo)
053 {
054 return (AttributeCertificateInfo)obj;
055 }
056 else if (obj instanceof ASN1Sequence)
057 {
058 return new AttributeCertificateInfo((ASN1Sequence)obj);
059 }
060
061 throw new IllegalArgumentException("unknown object in factory");
062 }
063
064 public AttributeCertificateInfo(
065 ASN1Sequence seq)
066 {
067 this.version = DERInteger.getInstance(seq.getObjectAt(0));
068 this.holder = Holder.getInstance(seq.getObjectAt(1));
069 this.issuer = AttCertIssuer.getInstance(seq.getObjectAt(2));
070 this.signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(3));
071 this.serialNumber = DERInteger.getInstance(seq.getObjectAt(4));
072 this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(5));
073 this.attributes = ASN1Sequence.getInstance(seq.getObjectAt(6));
074
075 for (int i = 7; i < seq.size(); i++)
076 {
077 ASN1Encodable obj = (ASN1Encodable)seq.getObjectAt(i);
078
079 if (obj instanceof DERBitString)
080 {
081 this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i));
082 }
083 else if (obj instanceof ASN1Sequence || obj instanceof X509Extensions)
084 {
085 this.extensions = X509Extensions.getInstance(seq.getObjectAt(i));
086 }
087 }
088 }
089
090 public DERInteger getVersion()
091 {
092 return version;
093 }
094
095 public Holder getHolder()
096 {
097 return holder;
098 }
099
100 public AttCertIssuer getIssuer()
101 {
102 return issuer;
103 }
104
105 public AlgorithmIdentifier getSignature()
106 {
107 return signature;
108 }
109
110 public DERInteger getSerialNumber()
111 {
112 return serialNumber;
113 }
114
115 public AttCertValidityPeriod getAttrCertValidityPeriod()
116 {
117 return attrCertValidityPeriod;
118 }
119
120 public ASN1Sequence getAttributes()
121 {
122 return attributes;
123 }
124
125 public DERBitString getIssuerUniqueID()
126 {
127 return issuerUniqueID;
128 }
129
130 public X509Extensions getExtensions()
131 {
132 return extensions;
133 }
134
135 /**
136 * Produce an object suitable for an ASN1OutputStream.
137 * <pre>
138 * AttributeCertificateInfo ::= SEQUENCE {
139 * version AttCertVersion -- version is v2,
140 * holder Holder,
141 * issuer AttCertIssuer,
142 * signature AlgorithmIdentifier,
143 * serialNumber CertificateSerialNumber,
144 * attrCertValidityPeriod AttCertValidityPeriod,
145 * attributes SEQUENCE OF Attribute,
146 * issuerUniqueID UniqueIdentifier OPTIONAL,
147 * extensions Extensions OPTIONAL
148 * }
149 *
150 * AttCertVersion ::= INTEGER { v2(1) }
151 * </pre>
152 */
153 public DERObject toASN1Object()
154 {
155 ASN1EncodableVector v = new ASN1EncodableVector();
156
157 v.add(version);
158 v.add(holder);
159 v.add(issuer);
160 v.add(signature);
161 v.add(serialNumber);
162 v.add(attrCertValidityPeriod);
163 v.add(attributes);
164
165 if (issuerUniqueID != null)
166 {
167 v.add(issuerUniqueID);
168 }
169
170 if (extensions != null)
171 {
172 v.add(extensions);
173 }
174
175 return new DERSequence(v);
176 }
177 }