001package org.apache.commons.ssl.org.bouncycastle.asn1.crmf; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 011import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier; 013import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions; 014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 015 016public class CertTemplate 017 extends ASN1Object 018{ 019 private ASN1Sequence seq; 020 021 private ASN1Integer version; 022 private ASN1Integer serialNumber; 023 private AlgorithmIdentifier signingAlg; 024 private X500Name issuer; 025 private OptionalValidity validity; 026 private X500Name subject; 027 private SubjectPublicKeyInfo publicKey; 028 private DERBitString issuerUID; 029 private DERBitString subjectUID; 030 private Extensions extensions; 031 032 private CertTemplate(ASN1Sequence seq) 033 { 034 this.seq = seq; 035 036 Enumeration en = seq.getObjects(); 037 while (en.hasMoreElements()) 038 { 039 ASN1TaggedObject tObj = (ASN1TaggedObject)en.nextElement(); 040 041 switch (tObj.getTagNo()) 042 { 043 case 0: 044 version = ASN1Integer.getInstance(tObj, false); 045 break; 046 case 1: 047 serialNumber = ASN1Integer.getInstance(tObj, false); 048 break; 049 case 2: 050 signingAlg = AlgorithmIdentifier.getInstance(tObj, false); 051 break; 052 case 3: 053 issuer = X500Name.getInstance(tObj, true); // CHOICE 054 break; 055 case 4: 056 validity = OptionalValidity.getInstance(ASN1Sequence.getInstance(tObj, false)); 057 break; 058 case 5: 059 subject = X500Name.getInstance(tObj, true); // CHOICE 060 break; 061 case 6: 062 publicKey = SubjectPublicKeyInfo.getInstance(tObj, false); 063 break; 064 case 7: 065 issuerUID = DERBitString.getInstance(tObj, false); 066 break; 067 case 8: 068 subjectUID = DERBitString.getInstance(tObj, false); 069 break; 070 case 9: 071 extensions = Extensions.getInstance(tObj, false); 072 break; 073 default: 074 throw new IllegalArgumentException("unknown tag: " + tObj.getTagNo()); 075 } 076 } 077 } 078 079 public static CertTemplate getInstance(Object o) 080 { 081 if (o instanceof CertTemplate) 082 { 083 return (CertTemplate)o; 084 } 085 else if (o != null) 086 { 087 return new CertTemplate(ASN1Sequence.getInstance(o)); 088 } 089 090 return null; 091 } 092 093 public int getVersion() 094 { 095 return version.getValue().intValue(); 096 } 097 098 public ASN1Integer getSerialNumber() 099 { 100 return serialNumber; 101 } 102 103 public AlgorithmIdentifier getSigningAlg() 104 { 105 return signingAlg; 106 } 107 108 public X500Name getIssuer() 109 { 110 return issuer; 111 } 112 113 public OptionalValidity getValidity() 114 { 115 return validity; 116 } 117 118 public X500Name getSubject() 119 { 120 return subject; 121 } 122 123 public SubjectPublicKeyInfo getPublicKey() 124 { 125 return publicKey; 126 } 127 128 public DERBitString getIssuerUID() 129 { 130 return issuerUID; 131 } 132 133 public DERBitString getSubjectUID() 134 { 135 return subjectUID; 136 } 137 138 public Extensions getExtensions() 139 { 140 return extensions; 141 } 142 143 /** 144 * <pre> 145 * CertTemplate ::= SEQUENCE { 146 * version [0] Version OPTIONAL, 147 * serialNumber [1] INTEGER OPTIONAL, 148 * signingAlg [2] AlgorithmIdentifier OPTIONAL, 149 * issuer [3] Name OPTIONAL, 150 * validity [4] OptionalValidity OPTIONAL, 151 * subject [5] Name OPTIONAL, 152 * publicKey [6] SubjectPublicKeyInfo OPTIONAL, 153 * issuerUID [7] UniqueIdentifier OPTIONAL, 154 * subjectUID [8] UniqueIdentifier OPTIONAL, 155 * extensions [9] Extensions OPTIONAL } 156 * </pre> 157 * @return a basic ASN.1 object representation. 158 */ 159 public ASN1Primitive toASN1Primitive() 160 { 161 return seq; 162 } 163}