14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.asn1.x509; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Sequence; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.DERBitString; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name; 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom/** 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * an X509Certificate structure. 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * <pre> 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * Certificate ::= SEQUENCE { 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * tbsCertificate TBSCertificate, 164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * signatureAlgorithm AlgorithmIdentifier, 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * signature BIT STRING 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * } 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * </pre> 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class Certificate 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Sequence seq; 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom TBSCertificate tbsCert; 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom AlgorithmIdentifier sigAlgId; 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERBitString sig; 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static Certificate getInstance( 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1TaggedObject obj, 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom boolean explicit) 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return getInstance(ASN1Sequence.getInstance(obj, explicit)); 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static Certificate getInstance( 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom Object obj) 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (obj instanceof Certificate) 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return (Certificate)obj; 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else if (obj != null) 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new Certificate(ASN1Sequence.getInstance(obj)); 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return null; 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private Certificate( 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Sequence seq) 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.seq = seq; 554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // 574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // correct x509 certficate 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (seq.size() == 3) 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom tbsCert = TBSCertificate.getInstance(seq.getObjectAt(0)); 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom sig = DERBitString.getInstance(seq.getObjectAt(2)); 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else 674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new IllegalArgumentException("sequence wrong size for a certificate"); 694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public TBSCertificate getTBSCertificate() 734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert; 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Integer getVersion() 784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getVersion(); 804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public int getVersionNumber() 834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getVersionNumber(); 854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Integer getSerialNumber() 884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getSerialNumber(); 904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public X500Name getIssuer() 934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getIssuer(); 954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public Time getStartDate() 984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getStartDate(); 1004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public Time getEndDate() 1034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1044c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getEndDate(); 1054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public X500Name getSubject() 1084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getSubject(); 1104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public SubjectPublicKeyInfo getSubjectPublicKeyInfo() 1134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return tbsCert.getSubjectPublicKeyInfo(); 1154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public AlgorithmIdentifier getSignatureAlgorithm() 1184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return sigAlgId; 1204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public DERBitString getSignature() 1234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return sig; 1254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 1284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return seq; 1304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 132