001package org.apache.commons.ssl.org.bouncycastle.asn1.cms; 002 003import java.math.BigInteger; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Certificate; 013import org.apache.commons.ssl.org.bouncycastle.asn1.x509.X509CertificateStructure; 014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.X509Name; 015 016/** 017 * <a href="http://tools.ietf.org/html/rfc5652#section-10.2.4">RFC 5652</a>: IssuerAndSerialNumber object. 018 * <p> 019 * <pre> 020 * IssuerAndSerialNumber ::= SEQUENCE { 021 * issuer Name, 022 * serialNumber CertificateSerialNumber 023 * } 024 * 025 * CertificateSerialNumber ::= INTEGER -- See RFC 5280 026 * </pre> 027 */ 028public class IssuerAndSerialNumber 029 extends ASN1Object 030{ 031 private X500Name name; 032 private ASN1Integer serialNumber; 033 034 /** 035 * Return an IssuerAndSerialNumber object from the given object. 036 * <p> 037 * Accepted inputs: 038 * <ul> 039 * <li> null → null 040 * <li> {@link IssuerAndSerialNumber} object 041 * <li> {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with IssuerAndSerialNumber structure inside 042 * </ul> 043 * 044 * @param obj the object we want converted. 045 * @exception IllegalArgumentException if the object cannot be converted. 046 */ 047 public static IssuerAndSerialNumber getInstance( 048 Object obj) 049 { 050 if (obj instanceof IssuerAndSerialNumber) 051 { 052 return (IssuerAndSerialNumber)obj; 053 } 054 else if (obj != null) 055 { 056 return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj)); 057 } 058 059 return null; 060 } 061 062 /** 063 * @deprecated use getInstance() method. 064 */ 065 public IssuerAndSerialNumber( 066 ASN1Sequence seq) 067 { 068 this.name = X500Name.getInstance(seq.getObjectAt(0)); 069 this.serialNumber = (ASN1Integer)seq.getObjectAt(1); 070 } 071 072 public IssuerAndSerialNumber( 073 Certificate certificate) 074 { 075 this.name = certificate.getIssuer(); 076 this.serialNumber = certificate.getSerialNumber(); 077 } 078 079 /** 080 * @deprecated use constructor taking Certificate 081 */ 082 public IssuerAndSerialNumber( 083 X509CertificateStructure certificate) 084 { 085 this.name = certificate.getIssuer(); 086 this.serialNumber = certificate.getSerialNumber(); 087 } 088 089 public IssuerAndSerialNumber( 090 X500Name name, 091 BigInteger serialNumber) 092 { 093 this.name = name; 094 this.serialNumber = new ASN1Integer(serialNumber); 095 } 096 097 /** 098 * @deprecated use X500Name constructor 099 */ 100 public IssuerAndSerialNumber( 101 X509Name name, 102 BigInteger serialNumber) 103 { 104 this.name = X500Name.getInstance(name); 105 this.serialNumber = new ASN1Integer(serialNumber); 106 } 107 108 /** 109 * @deprecated use X500Name constructor 110 */ 111 public IssuerAndSerialNumber( 112 X509Name name, 113 ASN1Integer serialNumber) 114 { 115 this.name = X500Name.getInstance(name); 116 this.serialNumber = serialNumber; 117 } 118 119 public X500Name getName() 120 { 121 return name; 122 } 123 124 public ASN1Integer getSerialNumber() 125 { 126 return serialNumber; 127 } 128 129 public ASN1Primitive toASN1Primitive() 130 { 131 ASN1EncodableVector v = new ASN1EncodableVector(); 132 133 v.add(name); 134 v.add(serialNumber); 135 136 return new DERSequence(v); 137 } 138}