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 IssuerSerial
031        extends ASN1Encodable
032    {
033        GeneralNames            issuer;
034        DERInteger              serial;
035        DERBitString            issuerUID;
036    
037        public static IssuerSerial getInstance(
038                Object  obj)
039        {
040            if (obj == null || obj instanceof GeneralNames)
041            {
042                return (IssuerSerial)obj;
043            }
044    
045            if (obj instanceof ASN1Sequence)
046            {
047                return new IssuerSerial((ASN1Sequence)obj);
048            }
049    
050            throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
051        }
052    
053        public static IssuerSerial getInstance(
054            ASN1TaggedObject obj,
055            boolean          explicit)
056        {
057            return getInstance(ASN1Sequence.getInstance(obj, explicit));
058        }
059    
060        public IssuerSerial(
061            ASN1Sequence    seq)
062        {
063            issuer = GeneralNames.getInstance(seq.getObjectAt(0));
064            serial = (DERInteger)seq.getObjectAt(1);
065    
066            if (seq.size() == 3)
067            {
068                issuerUID = (DERBitString)seq.getObjectAt(2);
069            }
070        }
071    
072        public IssuerSerial(
073            GeneralNames    issuer,
074            DERInteger      serial)
075        {
076            this.issuer = issuer;
077            this.serial = serial;
078        }
079    
080        public GeneralNames getIssuer()
081        {
082            return issuer;
083        }
084    
085        public DERInteger getSerial()
086        {
087            return serial;
088        }
089    
090        public DERBitString getIssuerUID()
091        {
092            return issuerUID;
093        }
094    
095        /**
096         * Produce an object suitable for an ASN1OutputStream.
097         * <pre>
098         *  IssuerSerial  ::=  SEQUENCE {
099         *       issuer         GeneralNames,
100         *       serial         CertificateSerialNumber,
101         *       issuerUID      UniqueIdentifier OPTIONAL
102         *  }
103         * </pre>
104         */
105        public DERObject toASN1Object()
106        {
107            ASN1EncodableVector  v = new ASN1EncodableVector();
108    
109            v.add(issuer);
110            v.add(serial);
111    
112            if (issuerUID != null)
113            {
114                v.add(issuerUID);
115            }
116    
117            return new DERSequence(v);
118        }
119    }