Skip to content

Commit 4e2ec8b

Browse files
committed
New ASN1Util methods to help with CHOICE types
1 parent ad54856 commit 4e2ec8b

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

core/src/main/java/org/bouncycastle/asn1/ASN1Util.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,42 @@ static ASN1TaggedObjectParser checkTagClass(ASN1TaggedObjectParser taggedObjectP
6868
return taggedObjectParser;
6969
}
7070

71+
public static Object getInstanceChoiceBaseObject(ASN1TaggedObject taggedObject, boolean declaredExplicit,
72+
String choiceName)
73+
{
74+
if (!declaredExplicit)
75+
{
76+
String message = "Implicit tagging cannot be used with untagged choice type " + choiceName +
77+
" (X.680 30.6, 30.8).";
78+
79+
throw new IllegalArgumentException(message);
80+
}
81+
if (taggedObject == null)
82+
{
83+
throw new NullPointerException("'taggedObject' cannot be null");
84+
}
85+
86+
return getExplicitContextBaseObject(taggedObject);
87+
}
88+
89+
public static Object getTaggedChoiceBaseObject(ASN1TaggedObject taggedObject, boolean declaredExplicit,
90+
String choiceName)
91+
{
92+
if (!declaredExplicit)
93+
{
94+
String message = "Implicit tagging cannot be used with untagged choice type " + choiceName +
95+
" (X.680 30.6, 30.8).";
96+
97+
throw new IllegalArgumentException(message);
98+
}
99+
if (taggedObject == null)
100+
{
101+
throw new NullPointerException("'taggedObject' cannot be null");
102+
}
103+
104+
return taggedObject.getExplicitBaseObject();
105+
}
106+
71107

72108
/*
73109
* Tag text methods
@@ -138,16 +174,36 @@ public static String getTagText(int tagClass, int tagNo)
138174
* Wrappers for ASN1TaggedObject#getExplicitBaseObject
139175
*/
140176

177+
public static ASN1Object getExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass)
178+
{
179+
return checkTagClass(taggedObject, tagClass).getExplicitBaseObject();
180+
}
181+
141182
public static ASN1Object getExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
142183
{
143184
return checkTag(taggedObject, tagClass, tagNo).getExplicitBaseObject();
144185
}
145186

187+
public static ASN1Object getExplicitContextBaseObject(ASN1TaggedObject taggedObject)
188+
{
189+
return getExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC);
190+
}
191+
146192
public static ASN1Object getExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)
147193
{
148194
return getExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);
149195
}
150196

197+
public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass)
198+
{
199+
if (!taggedObject.hasTagClass(tagClass))
200+
{
201+
return null;
202+
}
203+
204+
return taggedObject.getExplicitBaseObject();
205+
}
206+
151207
public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject, int tagClass, int tagNo)
152208
{
153209
if (!taggedObject.hasTag(tagClass, tagNo))
@@ -158,6 +214,11 @@ public static ASN1Object tryGetExplicitBaseObject(ASN1TaggedObject taggedObject,
158214
return taggedObject.getExplicitBaseObject();
159215
}
160216

217+
public static ASN1Object tryGetExplicitContextBaseObject(ASN1TaggedObject taggedObject)
218+
{
219+
return tryGetExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC);
220+
}
221+
161222
public static ASN1Object tryGetExplicitContextBaseObject(ASN1TaggedObject taggedObject, int tagNo)
162223
{
163224
return tryGetExplicitBaseObject(taggedObject, BERTags.CONTEXT_SPECIFIC, tagNo);

0 commit comments

Comments
 (0)