001package org.apache.commons.ssl.org.bouncycastle.asn1.dvcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 011 012/** 013 * <pre> 014 * TargetEtcChain ::= SEQUENCE { 015 * target CertEtcToken, 016 * chain SEQUENCE SIZE (1..MAX) OF 017 * CertEtcToken OPTIONAL, 018 * pathProcInput [0] PathProcInput OPTIONAL 019 * } 020 * </pre> 021 */ 022 023public class TargetEtcChain 024 extends ASN1Object 025{ 026 private CertEtcToken target; 027 private ASN1Sequence chain; 028 private PathProcInput pathProcInput; 029 030 public TargetEtcChain(CertEtcToken target) 031 { 032 this(target, null, null); 033 } 034 035 public TargetEtcChain(CertEtcToken target, CertEtcToken[] chain) 036 { 037 this(target, chain, null); 038 } 039 040 public TargetEtcChain(CertEtcToken target, PathProcInput pathProcInput) 041 { 042 this(target, null, pathProcInput); 043 } 044 045 public TargetEtcChain(CertEtcToken target, CertEtcToken[] chain, PathProcInput pathProcInput) 046 { 047 this.target = target; 048 049 if (chain != null) 050 { 051 this.chain = new DERSequence(chain); 052 } 053 054 this.pathProcInput = pathProcInput; 055 } 056 057 private TargetEtcChain(ASN1Sequence seq) 058 { 059 int i = 0; 060 ASN1Encodable obj = seq.getObjectAt(i++); 061 this.target = CertEtcToken.getInstance(obj); 062 063 try 064 { 065 obj = seq.getObjectAt(i++); 066 this.chain = ASN1Sequence.getInstance(obj); 067 } 068 catch (IllegalArgumentException e) 069 { 070 } 071 catch (IndexOutOfBoundsException e) 072 { 073 return; 074 } 075 076 try 077 { 078 obj = seq.getObjectAt(i++); 079 ASN1TaggedObject tagged = ASN1TaggedObject.getInstance(obj); 080 switch (tagged.getTagNo()) 081 { 082 case 0: 083 this.pathProcInput = PathProcInput.getInstance(tagged, false); 084 break; 085 } 086 } 087 catch (IllegalArgumentException e) 088 { 089 } 090 catch (IndexOutOfBoundsException e) 091 { 092 } 093 } 094 095 public static TargetEtcChain getInstance(Object obj) 096 { 097 if (obj instanceof TargetEtcChain) 098 { 099 return (TargetEtcChain)obj; 100 } 101 else if (obj != null) 102 { 103 return new TargetEtcChain(ASN1Sequence.getInstance(obj)); 104 } 105 106 return null; 107 } 108 109 public static TargetEtcChain getInstance( 110 ASN1TaggedObject obj, 111 boolean explicit) 112 { 113 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 114 } 115 116 public ASN1Primitive toASN1Primitive() 117 { 118 ASN1EncodableVector v = new ASN1EncodableVector(); 119 v.add(target); 120 if (chain != null) 121 { 122 v.add(chain); 123 } 124 if (pathProcInput != null) 125 { 126 v.add(new DERTaggedObject(false, 0, pathProcInput)); 127 } 128 129 return new DERSequence(v); 130 } 131 132 public String toString() 133 { 134 StringBuffer s = new StringBuffer(); 135 s.append("TargetEtcChain {\n"); 136 s.append("target: " + target + "\n"); 137 if (chain != null) 138 { 139 s.append("chain: " + chain + "\n"); 140 } 141 if (pathProcInput != null) 142 { 143 s.append("pathProcInput: " + pathProcInput + "\n"); 144 } 145 s.append("}\n"); 146 return s.toString(); 147 } 148 149 150 public CertEtcToken getTarget() 151 { 152 return target; 153 } 154 155 public CertEtcToken[] getChain() 156 { 157 if (chain != null) 158 { 159 return CertEtcToken.arrayFromSequence(chain); 160 } 161 162 return null; 163 } 164 165 private void setChain(ASN1Sequence chain) 166 { 167 this.chain = chain; 168 } 169 170 public PathProcInput getPathProcInput() 171 { 172 return pathProcInput; 173 } 174 175 private void setPathProcInput(PathProcInput pathProcInput) 176 { 177 this.pathProcInput = pathProcInput; 178 } 179 180 public static TargetEtcChain[] arrayFromSequence(ASN1Sequence seq) 181 { 182 TargetEtcChain[] tmp = new TargetEtcChain[seq.size()]; 183 184 for (int i = 0; i != tmp.length; i++) 185 { 186 tmp[i] = TargetEtcChain.getInstance(seq.getObjectAt(i)); 187 } 188 189 return tmp; 190 } 191}