001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.util.asn1.x509; 019 020 import org.apache.geronimo.util.asn1.ASN1Encodable; 021 import org.apache.geronimo.util.asn1.ASN1EncodableVector; 022 import org.apache.geronimo.util.asn1.ASN1Sequence; 023 import org.apache.geronimo.util.asn1.ASN1TaggedObject; 024 import org.apache.geronimo.util.asn1.DERObject; 025 import org.apache.geronimo.util.asn1.DERSequence; 026 import org.apache.geronimo.util.asn1.DERTaggedObject; 027 028 public class V2Form 029 extends ASN1Encodable 030 { 031 GeneralNames issuerName; 032 IssuerSerial baseCertificateID; 033 ObjectDigestInfo objectDigestInfo; 034 035 public static V2Form getInstance( 036 ASN1TaggedObject obj, 037 boolean explicit) 038 { 039 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 040 } 041 042 public static V2Form getInstance( 043 Object obj) 044 { 045 if (obj == null || obj instanceof V2Form) 046 { 047 return (V2Form)obj; 048 } 049 else if (obj instanceof ASN1Sequence) 050 { 051 return new V2Form((ASN1Sequence)obj); 052 } 053 054 throw new IllegalArgumentException("unknown object in factory"); 055 } 056 057 public V2Form( 058 GeneralNames issuerName) 059 { 060 this.issuerName = issuerName; 061 } 062 063 public V2Form( 064 ASN1Sequence seq) 065 { 066 int index = 0; 067 068 if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject)) 069 { 070 index++; 071 this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0)); 072 } 073 074 for (int i = index; i != seq.size(); i++) 075 { 076 ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i); 077 if (o.getTagNo() == 0) 078 { 079 baseCertificateID = IssuerSerial.getInstance(o, false); 080 } 081 else if (o.getTagNo() == 1) 082 { 083 objectDigestInfo = ObjectDigestInfo.getInstance(o, false); 084 } 085 } 086 } 087 088 public GeneralNames getIssuerName() 089 { 090 return issuerName; 091 } 092 093 public IssuerSerial getBaseCertificateID() 094 { 095 return baseCertificateID; 096 } 097 098 public ObjectDigestInfo getObjectDigestInfo() 099 { 100 return objectDigestInfo; 101 } 102 103 /** 104 * Produce an object suitable for an ASN1OutputStream. 105 * <pre> 106 * V2Form ::= SEQUENCE { 107 * issuerName GeneralNames OPTIONAL, 108 * baseCertificateID [0] IssuerSerial OPTIONAL, 109 * objectDigestInfo [1] ObjectDigestInfo OPTIONAL 110 * -- issuerName MUST be present in this profile 111 * -- baseCertificateID and objectDigestInfo MUST NOT 112 * -- be present in this profile 113 * } 114 * </pre> 115 */ 116 public DERObject toASN1Object() 117 { 118 ASN1EncodableVector v = new ASN1EncodableVector(); 119 120 if (issuerName != null) 121 { 122 v.add(issuerName); 123 } 124 125 if (baseCertificateID != null) 126 { 127 v.add(new DERTaggedObject(false, 0, baseCertificateID)); 128 } 129 130 if (objectDigestInfo != null) 131 { 132 v.add(new DERTaggedObject(false, 1, objectDigestInfo)); 133 } 134 135 return new DERSequence(v); 136 } 137 }