1 package org.bouncycastle.asn1.ocsp; 2 3 import org.bouncycastle.asn1.ASN1EncodableVector; 4 import org.bouncycastle.asn1.ASN1Object; 5 import org.bouncycastle.asn1.ASN1Primitive; 6 import org.bouncycastle.asn1.ASN1Sequence; 7 import org.bouncycastle.asn1.DERSequence; 8 import org.bouncycastle.asn1.x500.X500Name; 9 import org.bouncycastle.asn1.x509.AuthorityInformationAccess; 10 11 public class ServiceLocator 12 extends ASN1Object 13 { 14 private final X500Name issuer; 15 private final AuthorityInformationAccess locator; 16 ServiceLocator(ASN1Sequence sequence)17 private ServiceLocator(ASN1Sequence sequence) 18 { 19 this.issuer = X500Name.getInstance(sequence.getObjectAt(0)); 20 if (sequence.size() == 2) 21 { 22 this.locator = AuthorityInformationAccess.getInstance(sequence.getObjectAt(1)); 23 } 24 else 25 { 26 this.locator = null; 27 28 } 29 } 30 getInstance( Object obj)31 public static ServiceLocator getInstance( 32 Object obj) 33 { 34 if (obj instanceof ServiceLocator) 35 { 36 return (ServiceLocator)obj; 37 } 38 else if (obj != null) 39 { 40 return new ServiceLocator(ASN1Sequence.getInstance(obj)); 41 } 42 43 return null; 44 } 45 getIssuer()46 public X500Name getIssuer() 47 { 48 return issuer; 49 } 50 getLocator()51 public AuthorityInformationAccess getLocator() 52 { 53 return locator; 54 } 55 56 /** 57 * Produce an object suitable for an ASN1OutputStream. 58 * <pre> 59 * ServiceLocator ::= SEQUENCE { 60 * issuer Name, 61 * locator AuthorityInfoAccessSyntax OPTIONAL } 62 * </pre> 63 */ toASN1Primitive()64 public ASN1Primitive toASN1Primitive() 65 { 66 ASN1EncodableVector v = new ASN1EncodableVector(2); 67 68 v.add(issuer); 69 70 if (locator != null) 71 { 72 v.add(locator); 73 } 74 75 return new DERSequence(v); 76 } 77 } 78