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.DERBitString; 025 import org.apache.geronimo.util.asn1.DERObject; 026 import org.apache.geronimo.util.asn1.DERSequence; 027 import org.apache.geronimo.util.asn1.DERTaggedObject; 028 029 /** 030 * The DistributionPoint object. 031 * <pre> 032 * DistributionPoint ::= SEQUENCE { 033 * distributionPoint [0] DistributionPointName OPTIONAL, 034 * reasons [1] ReasonFlags OPTIONAL, 035 * cRLIssuer [2] GeneralNames OPTIONAL 036 * } 037 * </pre> 038 */ 039 public class DistributionPoint 040 extends ASN1Encodable 041 { 042 DistributionPointName distributionPoint; 043 ReasonFlags reasons; 044 GeneralNames cRLIssuer; 045 046 public static DistributionPoint getInstance( 047 ASN1TaggedObject obj, 048 boolean explicit) 049 { 050 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 051 } 052 053 public static DistributionPoint getInstance( 054 Object obj) 055 { 056 if(obj == null || obj instanceof DistributionPoint) 057 { 058 return (DistributionPoint)obj; 059 } 060 061 if(obj instanceof ASN1Sequence) 062 { 063 return new DistributionPoint((ASN1Sequence)obj); 064 } 065 066 throw new IllegalArgumentException("Invalid DistributionPoint: " + obj.getClass().getName()); 067 } 068 069 public DistributionPoint( 070 ASN1Sequence seq) 071 { 072 for (int i = 0; i != seq.size(); i++) 073 { 074 ASN1TaggedObject t = (ASN1TaggedObject)seq.getObjectAt(i); 075 switch (t.getTagNo()) 076 { 077 case 0: 078 distributionPoint = DistributionPointName.getInstance(t, true); 079 break; 080 case 1: 081 reasons = new ReasonFlags(DERBitString.getInstance(t, false)); 082 break; 083 case 2: 084 cRLIssuer = GeneralNames.getInstance(t, false); 085 } 086 } 087 } 088 089 public DistributionPoint( 090 DistributionPointName distributionPoint, 091 ReasonFlags reasons, 092 GeneralNames cRLIssuer) 093 { 094 this.distributionPoint = distributionPoint; 095 this.reasons = reasons; 096 this.cRLIssuer = cRLIssuer; 097 } 098 099 public DistributionPointName getDistributionPoint() 100 { 101 return distributionPoint; 102 } 103 104 public ReasonFlags getReasons() 105 { 106 return reasons; 107 } 108 109 public GeneralNames getCRLIssuer() 110 { 111 return cRLIssuer; 112 } 113 114 public DERObject toASN1Object() 115 { 116 ASN1EncodableVector v = new ASN1EncodableVector(); 117 118 if (distributionPoint != null) 119 { 120 // 121 // as this is a CHOICE it must be explicitly tagged 122 // 123 v.add(new DERTaggedObject(0, distributionPoint)); 124 } 125 126 if (reasons != null) 127 { 128 v.add(new DERTaggedObject(false, 1, reasons)); 129 } 130 131 if (cRLIssuer != null) 132 { 133 v.add(new DERTaggedObject(false, 2, cRLIssuer)); 134 } 135 136 return new DERSequence(v); 137 } 138 }