CMS. The 2nd CMS test passed happily, for the signed data type
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
index 89f5e88..3768ae7 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
@@ -85,6 +85,10 @@
return universalTag() == UniversalTag.EOC;
}
+ public boolean isNull() {
+ return universalTag() == UniversalTag.NULL;
+ }
+
public boolean isUniversal() {
return tagClass().isUniversal();
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
index 6aebeae..bf80ced 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
@@ -88,7 +88,7 @@
return headerLen;
}
- protected int getOffset() {
+ public int getOffset() {
return getBodyStart() - getHeaderLength();
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
index 42a1446..97221ce 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
@@ -92,39 +92,41 @@
int lastPos = -1, foundPos = -1;
- for (Asn1ParseResult parsingItem : parseResults) {
- if (parsingItem.isEOC()) {
+ for (Asn1ParseResult parseItem : parseResults) {
+ if (parseItem.isEOC() || parseItem.isNull()) {
continue;
}
foundPos = -1;
for (int i = lastPos + 1; i < fieldInfos.length; ++i) {
- if (parsingItem.isContextSpecific()) {
- if (fieldInfos[i].getTagNo() == parsingItem.tagNo()) {
+ if (parseItem.isContextSpecific()) {
+ if (fieldInfos[i].getTagNo() == parseItem.tagNo()) {
foundPos = i;
break;
}
- } else if (fields[i].tag().equals(parsingItem.tag())) {
+ } else if (fields[i].tag().equals(parseItem.tag())) {
foundPos = i;
break;
}
}
if (foundPos == -1) {
- throw new IOException("Unexpected item with tag: " + parsingItem.tag());
+ String error = String.format("Unexpected item tag=%s, off=%d",
+ parseItem.tag(), parseItem.getOffset());
+ throw new IOException(error);
}
lastPos = foundPos;
- AbstractAsn1Type<?> fieldValue = (AbstractAsn1Type<?>) fields[foundPos];
+ Asn1Type fieldValue = fields[foundPos];
if (fieldValue instanceof Asn1Any) {
Asn1Any any = (Asn1Any) fieldValue;
- any.setField(parsingItem);
+ any.setField(parseItem);
any.setFieldInfo(fieldInfos[foundPos]);
} else {
- if (parsingItem.isContextSpecific()) {
- Asn1Binder.bindWithTagging(parsingItem, fieldValue,
+ if (parseItem.isContextSpecific()) {
+ Asn1Binder.bindWithTagging(parseItem, fieldValue,
fieldInfos[foundPos].getTaggingOption());
} else {
- Asn1Binder.bind(parsingItem, fieldValue);
+ Asn1Binder.bind(parseItem, fieldValue);
}
}
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
index 643d5d0..e4a88b0 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
@@ -66,34 +66,37 @@
}
public void usePrimitive(boolean isPrimitive) {
- tag.usePrimitive(isPrimitive);
+ tag().usePrimitive(isPrimitive);
}
public boolean isPrimitive() {
- return tag.isPrimitive();
+ return tag().isPrimitive();
}
-
public boolean isUniversal() {
- return tag.isUniversal();
+ return tag().isUniversal();
}
public boolean isAppSpecific() {
- return tag.isAppSpecific();
+ return tag().isAppSpecific();
}
public boolean isContextSpecific() {
- return tag.isContextSpecific();
+ return tag().isContextSpecific();
}
public boolean isTagSpecific() {
- return tag.isSpecific();
+ return tag().isSpecific();
}
public boolean isEOC() {
return tag().isEOC();
}
+ public boolean isNull() {
+ return tag().isNull();
+ }
+
public boolean isSimple() {
return Asn1Simple.isSimple(tag());
}
diff --git a/kerby-pkix/src/test/java/org/apache/kerby/cms/TestSignedData.java b/kerby-pkix/src/test/java/org/apache/kerby/cms/TestSignedData.java
index d4e1a75..04e2aef 100644
--- a/kerby-pkix/src/test/java/org/apache/kerby/cms/TestSignedData.java
+++ b/kerby-pkix/src/test/java/org/apache/kerby/cms/TestSignedData.java
@@ -21,6 +21,7 @@
import org.apache.kerby.asn1.Asn1;
import org.apache.kerby.cms.type.ContentInfo;
+import org.apache.kerby.cms.type.SignedData;
import org.junit.Assert;
import org.junit.Test;
@@ -38,12 +39,9 @@
contentInfo.decode(data);
Asn1.dump(contentInfo);
- //To be fixed.
- /*
SignedData signedData =
contentInfo.getContentAs(SignedData.class);
Asn1.dump(signedData);
- */
} catch (Exception e) {
e.printStackTrace();
Assert.fail();