Add the Certificate test.
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java
index 38addf4..c701eb6 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java
@@ -24,6 +24,7 @@
import org.apache.kerby.asn1.parse.Asn1Parser;
import org.apache.kerby.asn1.type.Asn1Any;
import org.apache.kerby.asn1.type.Asn1Application;
+import org.apache.kerby.asn1.type.Asn1Choice;
import org.apache.kerby.asn1.type.Asn1Simple;
import org.apache.kerby.asn1.type.Asn1Type;
import org.apache.kerby.asn1.util.HexUtil;
@@ -91,6 +92,8 @@
indent(indents).append(value.toString());
} else if (value instanceof Asn1Any) {
indent(indents).append("<Any>");
+ } else if (value instanceof Asn1Choice) {
+ indent(indents).append("<Choice>");
} else {
indent(indents).append("<Unknown>");
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
index 63abbee..3fc5026 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
@@ -87,6 +87,7 @@
*/
public static UniversalTag fromValue(int value) {
switch (value) {
+ case -2 : return CHOICE;
case 0x00 : return EOC;
case 0x01 : return BOOLEAN;
case 0x02 : return INTEGER;
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
index a7ff5ca..eca455a 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
@@ -148,7 +148,7 @@
return null;
}
- if (chosenField != null && index != chosenField) {
+ if (chosenField != null && index != chosenField.getIndex()) {
throw new IllegalArgumentException("Incorrect chosen value requested");
}
diff --git a/kerby-pkix/src/test/java/org/apache/kerby/cms/TestCertificate.java b/kerby-pkix/src/test/java/org/apache/kerby/cms/TestCertificate.java
new file mode 100644
index 0000000..29391cf
--- /dev/null
+++ b/kerby-pkix/src/test/java/org/apache/kerby/cms/TestCertificate.java
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.kerby.cms;
+
+import org.apache.kerby.asn1.Asn1;
+import org.apache.kerby.asn1.type.Asn1Type;
+import org.apache.kerby.cms.type.Certificate;
+import org.apache.kerby.x500.type.Name;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+
+public class TestCertificate extends CmsTestBase {
+ @Test
+ public void testDecodingCertificate() throws IOException {
+ byte[] data = readDataFile("/certificate1.txt");
+ try {
+ Asn1.dump(data, true);
+ Certificate certificate = new Certificate();
+ certificate.decode(data);
+ Asn1.dump(certificate);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Assert.fail();
+ }
+ }
+
+ @Test
+ public void testDecodingName() throws IOException {
+ byte[] data = readDataFile("/name.txt");
+ try {
+ Asn1.dump(data, true);
+ Name name = new Name();
+ name.decode(data);
+ Asn1.dump(name.getName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ Assert.fail();
+ }
+ }
+}
diff --git a/kerby-pkix/src/test/resources/certificate1.txt b/kerby-pkix/src/test/resources/certificate1.txt
new file mode 100644
index 0000000..5609025
--- /dev/null
+++ b/kerby-pkix/src/test/resources/certificate1.txt
@@ -0,0 +1 @@
+3082035E308202C7A003020102020107300D06092A864886F70D01010405003081B7310B30090603550406130241553111300F06035504081308566963746F726961311830160603550407130F536F757468204D656C626F75726E65311A3018060355040A1311436F6E6E656374203420507479204C7464311E301C060355040B1315436572746966696361746520417574686F72697479311530130603550403130C436F6E6E65637420342043413128302606092A864886F70D01090116197765626D617374657240636F6E6E656374342E636F6D2E6175301E170D3030303630323037353632315A170D3031303630323037353632315A3081B8310B30090603550406130241553111300F06035504081308566963746F726961311830160603550407130F536F757468204D656C626F75726E65311A3018060355040A1311436F6E6E656374203420507479204C746431173015060355040B130E576562736572766572205465616D311D301B06035504031314777777322E636F6E6E656374342E636F6D2E61753128302606092A864886F70D01090116197765626D617374657240636F6E6E656374342E636F6D2E617530819F300D06092A864886F70D010101050003818D0030818902818100AEF0F1725280872BFB43F5A6AF6ADE1B0E172FD0A787D7BEE95816CB6016372FCC55E5DD971CDDED002E73578E59090640488B3F2E5742D4D8FAC05427700E46F7767C454921C8DFDBD7B2EDB62E6BD27FBF3E4C1B6298A3DFD6087230A83F66986F60D312DC7F0ABFB3C64906CC04EEC6FCE5553E87DE0F4EFB163AC5AE29A10203010001A377307530240603551D11041D301B81197765626D617374657240636F6E6E656374342E636F6D2E6175303A06096086480186F842010D042D162B6D6F645F73736C2067656E65726174656420637573746F6D20736572766572206365727469666963617465301106096086480186F8420101040403020640300D06092A864886F70D010104050003818100A2D71C7CAA704AC2313351DA7BC0D1ECCFD1C3C760FD1A8E5B1E391CD54B8814B8FF737F4CED7DE7279029B7E6CDB000DA36CF56F22F1A04F13E03B530FE1982F81185AB1A6B4A82242916BE9338C907F7DEF3A26106E9BF8AD3C3353C026465046E3959D8F23488A0195FA845CEB568A0939CBABBCC1F0DDF3D5317F6C5E7FF
\ No newline at end of file
diff --git a/kerby-pkix/src/test/resources/name.txt b/kerby-pkix/src/test/resources/name.txt
new file mode 100644
index 0000000..930ac37
--- /dev/null
+++ b/kerby-pkix/src/test/resources/name.txt
@@ -0,0 +1 @@
+3081B7310B30090603550406130241553111300F06035504081308566963746F726961311830160603550407130F536F757468204D656C626F75726E65311A3018060355040A1311436F6E6E656374203420507479204C7464311E301C060355040B1315436572746966696361746520417574686F72697479311530130603550403130C436F6E6E65637420342043413128302606092A864886F70D01090116197765626D617374657240636F6E6E656374342E636F6D2E6175301E170D3030303630323037353632315A170D3031303630323037353632315A3081B8310B30090603550406130241553111300F06035504081308566963746F726961311830160603550407130F536F757468204D656C626F75726E65311A3018060355040A1311436F6E6E656374203420507479204C746431173015060355040B130E576562736572766572205465616D311D301B06035504031314777777322E636F6E6E656374342E636F6D2E6175