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