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.ASN1Sequence;
023 import org.apache.geronimo.util.asn1.ASN1TaggedObject;
024 import org.apache.geronimo.util.asn1.DERBitString;
025 import org.apache.geronimo.util.asn1.DERInteger;
026 import org.apache.geronimo.util.asn1.DERObject;
027 import org.apache.geronimo.util.asn1.pkcs.PKCSObjectIdentifiers;
028
029 /**
030 * an X509Certificate structure.
031 * <pre>
032 * Certificate ::= SEQUENCE {
033 * tbsCertificate TBSCertificate,
034 * signatureAlgorithm AlgorithmIdentifier,
035 * signature BIT STRING
036 * }
037 * </pre>
038 */
039 public class X509CertificateStructure
040 extends ASN1Encodable
041 implements X509ObjectIdentifiers, PKCSObjectIdentifiers
042 {
043 ASN1Sequence seq;
044 TBSCertificateStructure tbsCert;
045 AlgorithmIdentifier sigAlgId;
046 DERBitString sig;
047
048 public static X509CertificateStructure getInstance(
049 ASN1TaggedObject obj,
050 boolean explicit)
051 {
052 return getInstance(ASN1Sequence.getInstance(obj, explicit));
053 }
054
055 public static X509CertificateStructure getInstance(
056 Object obj)
057 {
058 if (obj instanceof X509CertificateStructure)
059 {
060 return (X509CertificateStructure)obj;
061 }
062 else if (obj instanceof ASN1Sequence)
063 {
064 return new X509CertificateStructure((ASN1Sequence)obj);
065 }
066
067 throw new IllegalArgumentException("unknown object in factory");
068 }
069
070 public X509CertificateStructure(
071 ASN1Sequence seq)
072 {
073 this.seq = seq;
074
075 //
076 // correct x509 certficate
077 //
078 if (seq.size() == 3)
079 {
080 tbsCert = TBSCertificateStructure.getInstance(seq.getObjectAt(0));
081 sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
082
083 sig = (DERBitString)seq.getObjectAt(2);
084 }
085 else
086 {
087 throw new IllegalArgumentException("sequence wrong size for a certificate");
088 }
089 }
090
091 public TBSCertificateStructure getTBSCertificate()
092 {
093 return tbsCert;
094 }
095
096 public int getVersion()
097 {
098 return tbsCert.getVersion();
099 }
100
101 public DERInteger getSerialNumber()
102 {
103 return tbsCert.getSerialNumber();
104 }
105
106 public X509Name getIssuer()
107 {
108 return tbsCert.getIssuer();
109 }
110
111 public Time getStartDate()
112 {
113 return tbsCert.getStartDate();
114 }
115
116 public Time getEndDate()
117 {
118 return tbsCert.getEndDate();
119 }
120
121 public X509Name getSubject()
122 {
123 return tbsCert.getSubject();
124 }
125
126 public SubjectPublicKeyInfo getSubjectPublicKeyInfo()
127 {
128 return tbsCert.getSubjectPublicKeyInfo();
129 }
130
131 public AlgorithmIdentifier getSignatureAlgorithm()
132 {
133 return sigAlgId;
134 }
135
136 public DERBitString getSignature()
137 {
138 return sig;
139 }
140
141 public DERObject toASN1Object()
142 {
143 return seq;
144 }
145 }