001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 009import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name; 010 011/** 012 * an X509Certificate structure. 013 * <pre> 014 * Certificate ::= SEQUENCE { 015 * tbsCertificate TBSCertificate, 016 * signatureAlgorithm AlgorithmIdentifier, 017 * signature BIT STRING 018 * } 019 * </pre> 020 */ 021public class Certificate 022 extends ASN1Object 023{ 024 ASN1Sequence seq; 025 TBSCertificate tbsCert; 026 AlgorithmIdentifier sigAlgId; 027 DERBitString sig; 028 029 public static Certificate getInstance( 030 ASN1TaggedObject obj, 031 boolean explicit) 032 { 033 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 034 } 035 036 public static Certificate getInstance( 037 Object obj) 038 { 039 if (obj instanceof Certificate) 040 { 041 return (Certificate)obj; 042 } 043 else if (obj != null) 044 { 045 return new Certificate(ASN1Sequence.getInstance(obj)); 046 } 047 048 return null; 049 } 050 051 private Certificate( 052 ASN1Sequence seq) 053 { 054 this.seq = seq; 055 056 // 057 // correct x509 certficate 058 // 059 if (seq.size() == 3) 060 { 061 tbsCert = TBSCertificate.getInstance(seq.getObjectAt(0)); 062 sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); 063 064 sig = DERBitString.getInstance(seq.getObjectAt(2)); 065 } 066 else 067 { 068 throw new IllegalArgumentException("sequence wrong size for a certificate"); 069 } 070 } 071 072 public TBSCertificate getTBSCertificate() 073 { 074 return tbsCert; 075 } 076 077 public ASN1Integer getVersion() 078 { 079 return tbsCert.getVersion(); 080 } 081 082 public int getVersionNumber() 083 { 084 return tbsCert.getVersionNumber(); 085 } 086 087 public ASN1Integer getSerialNumber() 088 { 089 return tbsCert.getSerialNumber(); 090 } 091 092 public X500Name getIssuer() 093 { 094 return tbsCert.getIssuer(); 095 } 096 097 public Time getStartDate() 098 { 099 return tbsCert.getStartDate(); 100 } 101 102 public Time getEndDate() 103 { 104 return tbsCert.getEndDate(); 105 } 106 107 public X500Name getSubject() 108 { 109 return tbsCert.getSubject(); 110 } 111 112 public SubjectPublicKeyInfo getSubjectPublicKeyInfo() 113 { 114 return tbsCert.getSubjectPublicKeyInfo(); 115 } 116 117 public AlgorithmIdentifier getSignatureAlgorithm() 118 { 119 return sigAlgId; 120 } 121 122 public DERBitString getSignature() 123 { 124 return sig; 125 } 126 127 public ASN1Primitive toASN1Primitive() 128 { 129 return seq; 130 } 131}