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