001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package org.apache.geronimo.util.asn1.x509; 020 021 import java.math.BigInteger; 022 023 import org.apache.geronimo.util.asn1.ASN1EncodableVector; 024 import org.apache.geronimo.util.asn1.ASN1Sequence; 025 import org.apache.geronimo.util.asn1.ASN1TaggedObject; 026 import org.apache.geronimo.util.asn1.DERBoolean; 027 import org.apache.geronimo.util.asn1.ASN1Encodable; 028 import org.apache.geronimo.util.asn1.DERInteger; 029 import org.apache.geronimo.util.asn1.DERObject; 030 import org.apache.geronimo.util.asn1.DERSequence; 031 032 public class BasicConstraints 033 extends ASN1Encodable 034 { 035 DERBoolean cA = new DERBoolean(false); 036 DERInteger pathLenConstraint = null; 037 038 public static BasicConstraints getInstance( 039 ASN1TaggedObject obj, 040 boolean explicit) 041 { 042 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 043 } 044 045 public static BasicConstraints getInstance( 046 Object obj) 047 { 048 if (obj == null || obj instanceof BasicConstraints) 049 { 050 return (BasicConstraints)obj; 051 } 052 else if (obj instanceof ASN1Sequence) 053 { 054 return new BasicConstraints((ASN1Sequence)obj); 055 } 056 057 throw new IllegalArgumentException("unknown object in factory"); 058 } 059 060 public BasicConstraints( 061 ASN1Sequence seq) 062 { 063 if (seq.size() == 0) 064 { 065 this.cA = null; 066 this.pathLenConstraint = null; 067 } 068 else 069 { 070 this.cA = (DERBoolean)seq.getObjectAt(0); 071 if (seq.size() > 1) 072 { 073 this.pathLenConstraint = (DERInteger)seq.getObjectAt(1); 074 } 075 } 076 } 077 078 /** 079 * @deprecated use one of the other two unambigous constructors. 080 * @param cA 081 * @param pathLenConstraint 082 */ 083 public BasicConstraints( 084 boolean cA, 085 int pathLenConstraint) 086 { 087 if (cA ) 088 { 089 this.cA = new DERBoolean(cA); 090 this.pathLenConstraint = new DERInteger(pathLenConstraint); 091 } 092 else 093 { 094 this.cA = null; 095 this.pathLenConstraint = null; 096 } 097 } 098 099 public BasicConstraints( 100 boolean cA) 101 { 102 if (cA) 103 { 104 this.cA = new DERBoolean(true); 105 } 106 else 107 { 108 this.cA = null; 109 } 110 this.pathLenConstraint = null; 111 } 112 113 /** 114 * create a cA=true object for the given path length constraint. 115 * 116 * @param pathLenConstraint 117 */ 118 public BasicConstraints( 119 int pathLenConstraint) 120 { 121 this.cA = new DERBoolean(true); 122 this.pathLenConstraint = new DERInteger(pathLenConstraint); 123 } 124 125 public boolean isCA() 126 { 127 return (cA != null) && cA.isTrue(); 128 } 129 130 public BigInteger getPathLenConstraint() 131 { 132 if (pathLenConstraint != null) 133 { 134 return pathLenConstraint.getValue(); 135 } 136 137 return null; 138 } 139 140 /** 141 * Produce an object suitable for an ASN1OutputStream. 142 * <pre> 143 * BasicConstraints := SEQUENCE { 144 * cA BOOLEAN DEFAULT FALSE, 145 * pathLenConstraint INTEGER (0..MAX) OPTIONAL 146 * } 147 * </pre> 148 */ 149 public DERObject toASN1Object() 150 { 151 ASN1EncodableVector v = new ASN1EncodableVector(); 152 153 if (cA != null) 154 { 155 v.add(cA); 156 157 if (pathLenConstraint != null) 158 { 159 v.add(pathLenConstraint); 160 } 161 } 162 163 return new DERSequence(v); 164 } 165 166 public String toString() 167 { 168 if (pathLenConstraint == null) 169 { 170 if (cA == null) 171 { 172 return "BasicConstraints: isCa(false)"; 173 } 174 return "BasicConstraints: isCa(" + this.isCA() + ")"; 175 } 176 return "BasicConstraints: isCa(" + this.isCA() + "), pathLenConstraint = " + pathLenConstraint.getValue(); 177 } 178 }