• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.bouncycastle.asn1;
2 
3 import java.io.IOException;
4 
5 public abstract class ASN1Util
6 {
checkTag(ASN1TaggedObject taggedObject, int tagClass, int tagNo)7     static ASN1TaggedObject checkTag(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
8     {
9         if (!taggedObject.hasTag(tagClass, tagNo))
10         {
11             String expected = getTagText(tagClass, tagNo);
12             String found = getTagText(taggedObject);
13             throw new IllegalStateException("Expected " + expected + " tag but found " + found);
14         }
15         return taggedObject;
16     }
17 
checkTag(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo)18     static ASN1TaggedObjectParser checkTag(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo)
19     {
20         if (!taggedObjectParser.hasTag(tagClass, tagNo))
21         {
22             String expected = getTagText(tagClass, tagNo);
23             String found = getTagText(taggedObjectParser);
24             throw new IllegalStateException("Expected " + expected + " tag but found " + found);
25         }
26         return taggedObjectParser;
27     }
28 
29 
30     /*
31      * Tag text methods
32      */
33 
getTagText(ASN1Tag tag)34     static String getTagText(ASN1Tag tag)
35     {
36         return getTagText(tag.getTagClass(), tag.getTagNumber());
37     }
38 
getTagText(ASN1TaggedObject taggedObject)39     public static String getTagText(ASN1TaggedObject taggedObject)
40     {
41         return getTagText(taggedObject.getTagClass(), taggedObject.getTagNo());
42     }
43 
getTagText(ASN1TaggedObjectParser taggedObjectParser)44     public static String getTagText(ASN1TaggedObjectParser taggedObjectParser)
45     {
46         return getTagText(taggedObjectParser.getTagClass(), taggedObjectParser.getTagNo());
47     }
48 
getTagText(int tagClass, int tagNo)49     public static String getTagText(int tagClass, int tagNo)
50     {
51         switch (tagClass)
52         {
53         case BERTags.APPLICATION:
54             return "[APPLICATION " + tagNo + "]";
55         case BERTags.CONTEXT_SPECIFIC:
56             return "[CONTEXT " + tagNo + "]";
57         case BERTags.PRIVATE:
58             return "[PRIVATE " + tagNo + "]";
59         default:
60             return "[UNIVERSAL " + tagNo + "]";
61         }
62     }
63 
64 
65     /*
66      * Wrappers for ASN1TaggedObject#getExplicitBaseObject
67      */
68 
getExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)69     public static ASN1Object getExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
70     {
71         return checkTag(taggedObject, tagClass, tagNo).getExplicitBaseObject();
72     }
73 
getExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)74     public static ASN1Object getExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)
75     {
76         return getExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);
77     }
78 
tryGetExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)79     public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
80     {
81         if (!taggedObject.hasTag(tagClass, tagNo))
82         {
83             return null;
84         }
85 
86         return taggedObject.getExplicitBaseObject();
87     }
88 
tryGetExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)89     public static ASN1Object tryGetExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)
90     {
91         return tryGetExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);
92     }
93 
94 
95     /*
96      * Wrappers for ASN1TaggedObject#getExplicitBaseTagged
97      */
98 
getExplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo)99     public static ASN1TaggedObject getExplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
100     {
101         return checkTag(taggedObject, tagClass, tagNo).getExplicitBaseTagged();
102     }
103 
getExplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo)104     public static ASN1TaggedObject getExplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo)
105     {
106         return getExplicitBaseTagged(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);
107     }
108 
tryGetExplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo)109     public static ASN1TaggedObject tryGetExplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
110     {
111         if (!taggedObject.hasTag(tagClass, tagNo))
112         {
113             return null;
114         }
115 
116         return taggedObject.getExplicitBaseTagged();
117     }
118 
tryGetExplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo)119     public static ASN1TaggedObject tryGetExplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo)
120     {
121         return tryGetExplicitBaseTagged(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);
122     }
123 
124 
125     /*
126      * Wrappers for ASN1TaggedObject#getImplicitBaseTagged
127      */
128 
getImplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo, int baseTagClass, int baseTagNo)129     public static ASN1TaggedObject getImplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo,
130         int baseTagClass, int baseTagNo)
131     {
132         return checkTag(taggedObject, tagClass, tagNo).getImplicitBaseTagged(baseTagClass, baseTagNo);
133     }
134 
getImplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo, int baseTagClass, int baseTagNo)135     public static ASN1TaggedObject getImplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo,
136         int baseTagClass, int baseTagNo)
137     {
138         return getImplicitBaseTagged(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo, baseTagClass, baseTagNo);
139     }
140 
tryGetImplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo, int baseTagClass, int baseTagNo)141     public static ASN1TaggedObject tryGetImplicitBaseTagged(ASN1TaggedObject taggedObject, int tagClass, int tagNo,
142         int baseTagClass, int baseTagNo)
143     {
144         if (!taggedObject.hasTag(tagClass, tagNo))
145         {
146             return null;
147         }
148 
149         return taggedObject.getImplicitBaseTagged(baseTagClass, baseTagNo);
150     }
151 
tryGetImplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo, int baseTagClass, int baseTagNo)152     public static ASN1TaggedObject tryGetImplicitContextBaseTagged(ASN1TaggedObject taggedObject, int tagNo,
153         int baseTagClass, int baseTagNo)
154     {
155         return tryGetImplicitBaseTagged(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo, baseTagClass, baseTagNo);
156     }
157 
158 
159     /*
160      * Wrappers for ASN1TaggedObject#getBaseUniversal
161      */
162 
getBaseUniversal(ASN1TaggedObject taggedObject, int tagClass, int tagNo, boolean declaredExplicit, int baseTagNo)163     public static ASN1Primitive getBaseUniversal(ASN1TaggedObject taggedObject, int tagClass, int tagNo,
164         boolean declaredExplicit, int baseTagNo)
165     {
166         return checkTag(taggedObject, tagClass, tagNo).getBaseUniversal(declaredExplicit, baseTagNo);
167     }
168 
getContextBaseUniversal(ASN1TaggedObject taggedObject, int tagNo, boolean declaredExplicit, int baseTagNo)169     public static ASN1Primitive getContextBaseUniversal(ASN1TaggedObject taggedObject, int tagNo,
170         boolean declaredExplicit, int baseTagNo)
171     {
172         return getBaseUniversal(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo, declaredExplicit, baseTagNo);
173     }
174 
tryGetBaseUniversal(ASN1TaggedObject taggedObject, int tagClass, int tagNo, boolean declaredExplicit, int baseTagNo)175     public static ASN1Primitive tryGetBaseUniversal(ASN1TaggedObject taggedObject, int tagClass, int tagNo,
176         boolean declaredExplicit, int baseTagNo)
177     {
178         if (!taggedObject.hasTag(tagClass, tagNo))
179         {
180             return null;
181         }
182 
183         return taggedObject.getBaseUniversal(declaredExplicit, baseTagNo);
184     }
185 
tryGetContextBaseUniversal(ASN1TaggedObject taggedObject, int tagNo, boolean declaredExplicit, int baseTagNo)186     public static ASN1Primitive tryGetContextBaseUniversal(ASN1TaggedObject taggedObject, int tagNo,
187         boolean declaredExplicit, int baseTagNo)
188     {
189         return tryGetBaseUniversal(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo, declaredExplicit, baseTagNo);
190     }
191 
192 
193     /*
194      * Wrappers for ASN1TaggedObjectParser#parseExplicitBaseTagged
195      */
196 
parseExplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo)197     public static ASN1TaggedObjectParser parseExplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
198         int tagClass, int tagNo) throws IOException
199     {
200         return checkTag(taggedObjectParser, tagClass, tagNo).parseExplicitBaseTagged();
201     }
202 
parseExplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagNo)203     public static ASN1TaggedObjectParser parseExplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
204         int tagNo) throws IOException
205     {
206         return parseExplicitBaseTagged(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo);
207     }
208 
tryParseExplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo)209     public static ASN1TaggedObjectParser tryParseExplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
210         int tagClass, int tagNo) throws IOException
211     {
212         if (!taggedObjectParser.hasTag(tagClass, tagNo))
213         {
214             return null;
215         }
216 
217         return taggedObjectParser.parseExplicitBaseTagged();
218     }
219 
tryParseExplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagNo)220     public static ASN1TaggedObjectParser tryParseExplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
221         int tagNo) throws IOException
222     {
223         return tryParseExplicitBaseTagged(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo);
224     }
225 
226 
227     /*
228      * Wrappers for ASN1TaggedObjectParser#parseImplicitBaseTagged
229      */
230 
parseImplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo, int baseTagClass, int baseTagNo)231     public static ASN1TaggedObjectParser parseImplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
232         int tagClass, int tagNo, int baseTagClass, int baseTagNo) throws IOException
233     {
234         return checkTag(taggedObjectParser, tagClass, tagNo).parseImplicitBaseTagged(baseTagClass, baseTagNo);
235     }
236 
parseImplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagNo, int baseTagClass, int baseTagNo)237     public static ASN1TaggedObjectParser parseImplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
238         int tagNo, int baseTagClass, int baseTagNo) throws IOException
239     {
240         return parseImplicitBaseTagged(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo, baseTagClass, baseTagNo);
241     }
242 
tryParseImplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo, int baseTagClass, int baseTagNo)243     public static ASN1TaggedObjectParser tryParseImplicitBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
244         int tagClass, int tagNo, int baseTagClass, int baseTagNo) throws IOException
245     {
246         if (!taggedObjectParser.hasTag(tagClass, tagNo))
247         {
248             return null;
249         }
250 
251         return taggedObjectParser.parseImplicitBaseTagged(baseTagClass, baseTagNo);
252     }
253 
tryParseImplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser, int tagNo, int baseTagClass, int baseTagNo)254     public static ASN1TaggedObjectParser tryParseImplicitContextBaseTagged(ASN1TaggedObjectParser taggedObjectParser,
255         int tagNo, int baseTagClass, int baseTagNo) throws IOException
256     {
257         return tryParseImplicitBaseTagged(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo, baseTagClass, baseTagNo);
258     }
259 
260 
261     /*
262      * Wrappers for ASN1TaggedObjectParser#parseBaseUniversal
263      */
264 
parseBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo, boolean declaredExplicit, int baseTagNo)265     public static ASN1Encodable parseBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagClass,
266         int tagNo, boolean declaredExplicit, int baseTagNo) throws IOException
267     {
268         return checkTag(taggedObjectParser, tagClass, tagNo).parseBaseUniversal(declaredExplicit, baseTagNo);
269     }
270 
parseContextBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagNo, boolean declaredExplicit, int baseTagNo)271     public static ASN1Encodable parseContextBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagNo,
272         boolean declaredExplicit, int baseTagNo) throws IOException
273     {
274         return parseBaseUniversal(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo, declaredExplicit, baseTagNo);
275     }
276 
tryParseBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo, boolean declaredExplicit, int baseTagNo)277     public static ASN1Encodable tryParseBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagClass,
278         int tagNo, boolean declaredExplicit, int baseTagNo) throws IOException
279     {
280         if (!taggedObjectParser.hasTag(tagClass, tagNo))
281         {
282             return null;
283         }
284 
285         return taggedObjectParser.parseBaseUniversal(declaredExplicit, baseTagNo);
286     }
287 
tryParseContextBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagNo, boolean declaredExplicit, int baseTagNo)288     public static ASN1Encodable tryParseContextBaseUniversal(ASN1TaggedObjectParser taggedObjectParser, int tagNo,
289         boolean declaredExplicit, int baseTagNo) throws IOException
290     {
291         return tryParseBaseUniversal(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo, declaredExplicit, baseTagNo);
292     }
293 
294 
295     /*
296      * Wrappers for ASN1TaggedObjectParser#parseExplicitBaseObject
297      */
298 
parseExplicitBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo)299     public static ASN1Encodable parseExplicitBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagClass,
300         int tagNo) throws IOException
301     {
302         return checkTag(taggedObjectParser, tagClass, tagNo).parseExplicitBaseObject();
303     }
304 
parseExplicitContextBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagNo)305     public static ASN1Encodable parseExplicitContextBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagNo)
306         throws IOException
307     {
308         return parseExplicitBaseObject(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo);
309     }
310 
tryParseExplicitBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagClass, int tagNo)311     public static ASN1Encodable tryParseExplicitBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagClass,
312         int tagNo) throws IOException
313     {
314         if (!taggedObjectParser.hasTag(tagClass, tagNo))
315         {
316             return null;
317         }
318 
319         return taggedObjectParser.parseExplicitBaseObject();
320     }
321 
tryParseExplicitContextBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagNo)322     public static ASN1Encodable tryParseExplicitContextBaseObject(ASN1TaggedObjectParser taggedObjectParser, int tagNo)
323         throws IOException
324     {
325         return tryParseExplicitBaseObject(taggedObjectParser, BERTags.CONTEXT_SPECIFIC, tagNo);
326     }
327 }
328