You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pl...@apache.org on 2015/12/07 04:33:31 UTC

[01/26] directory-kerby git commit: Consolidate the relevant hex-bytes converting utilities for more tests

Repository: directory-kerby
Updated Branches:
  refs/heads/pkinit-support 38b2aa3c9 -> 1d9567ec2


Consolidate the relevant hex-bytes converting utilities for more tests


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/ca1e8c10
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/ca1e8c10
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/ca1e8c10

Branch: refs/heads/pkinit-support
Commit: ca1e8c10e12fc3b614a771d121d16acc3b09fdbb
Parents: 78f67dc
Author: Kai Zheng <ka...@intel.com>
Authored: Mon Nov 30 15:09:12 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Mon Nov 30 15:09:12 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/HexUtil.java     | 113 ++++++++++++++
 .../org/apache/kerby/asn1/TestAsn1Boolean.java  |   4 +-
 .../apache/kerby/asn1/TestAsn1Collection.java   |   4 +-
 .../org/apache/kerby/asn1/TestAsn1Integer.java  |   4 +-
 .../kerby/asn1/TestAsn1ObjectIdentifier.java    |   4 +-
 .../org/apache/kerby/asn1/TestAsn1UtcTime.java  |   4 +-
 .../apache/kerby/asn1/TestPersonnelRecord.java  |  20 +--
 .../test/java/org/apache/kerby/asn1/Util.java   | 153 -------------------
 8 files changed, 133 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
new file mode 100644
index 0000000..a2a167f
--- /dev/null
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
@@ -0,0 +1,113 @@
+/**
+ *  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.asn1;
+
+/**
+ * This is only for test, be careful when use in production codes.
+ */
+public class HexUtil {
+
+    static final String HEX_CHARS_STR = "0123456789ABCDEF";
+    static final char[] HEX_CHARS = HEX_CHARS_STR.toCharArray();
+
+    /**
+     * Convert bytes into friendly format as:
+     * 0x02 02 00 80
+     */
+    public static String bytesToHexFriendly(byte[] bytes) {
+        int len = bytes.length * 2;
+        len += bytes.length; // for ' ' appended for each char
+        len += 2; // for '0x' prefix
+        char[] hexChars = new char[len];
+        hexChars[0] = '0';
+        hexChars[1] = 'x';
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 3 + 2] = HEX_CHARS[v >>> 4];
+            hexChars[j * 3 + 3] = HEX_CHARS[v & 0x0F];
+            hexChars[j * 3 + 4] = ' ';
+        }
+
+        return new String(hexChars);
+    }
+
+    /**
+     * Convert friendly hex string like follows into byte array
+     * 0x02 02 00 80
+     */
+    public static byte[] hex2bytesFriendly(String hexString) {
+        hexString = hexString.toUpperCase();
+        String hexStr = hexString;
+        if (hexString.startsWith("0X")) {
+            hexStr = hexString.substring(2);
+        }
+        String[] hexParts = hexStr.split(" ");
+
+        byte[] bytes = new byte[hexParts.length];
+        char[] hexPart;
+        for (int i = 0; i < hexParts.length; ++i) {
+            hexPart = hexParts[i].toCharArray();
+            if (hexPart.length != 2) {
+                throw new IllegalArgumentException("Invalid hex string to convert");
+            }
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4) +
+                HEX_CHARS_STR.indexOf(hexPart[1]));
+        }
+
+        return bytes;
+    }
+
+    /**
+     * Convert bytes into format as:
+     * 02020080
+     * @param bytes The bytes
+     * @return The hex string
+     */
+    public static String bytesToHex(byte[] bytes) {
+        int len = bytes.length * 2;
+        char[] hexChars = new char[len];
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 2] = HEX_CHARS[v >>> 4];
+            hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
+        }
+
+        return new String(hexChars);
+    }
+
+    /**
+     * Convert hex string like follows into byte array
+     * 02020080
+     * @param hexString The hex string
+     * @return The bytes
+     */
+    public static byte[] hex2bytes(String hexString) {
+        hexString = hexString.toUpperCase();
+        int len = hexString.length() / 2;
+        byte[] bytes = new byte[len];
+        char[] hexChars = hexString.toCharArray();
+        for (int i = 0, j = 0; i < len; ++i) {
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4) +
+                HEX_CHARS_STR.indexOf(hexChars[j++]));
+        }
+
+        return bytes;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
index 177ddef..227579c 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
@@ -36,7 +36,7 @@ public class TestAsn1Boolean {
 
     private void testEncodingWith(Boolean value, String expectedEncoding,
                                   boolean isDer) {
-        byte[] expected = Util.hex2bytes(expectedEncoding);
+        byte[] expected = HexUtil.hex2bytesFriendly(expectedEncoding);
         Asn1Boolean aValue = new Asn1Boolean(value);
         if (isDer) {
             aValue.useDER();
@@ -63,7 +63,7 @@ public class TestAsn1Boolean {
         } else {
             decoded.useBER();
         }
-        decoded.decode(Util.hex2bytes(content));
+        decoded.decode(HexUtil.hex2bytesFriendly(content));
         assertThat(decoded.getValue()).isEqualTo(expectedValue);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
index cfb5e29..d7210fe 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
@@ -33,8 +33,8 @@ public class TestAsn1Collection {
     static final String TEST_STR = "Jones";
     static final Boolean TEST_BOOL = true;
     static final byte[] EXPECTED_BYTES = new byte[] {(byte) 0x30, (byte) 0x0A,
-            (byte) 0x16, (byte) 0x05, (byte) 0x4A, (byte) 0x6F, (byte) 0x6E, (byte) 0x65, (byte) 0x73,
-            (byte) 0x01, (byte) 0x01, (byte) 0xFF
+            (byte) 0x16, (byte) 0x05, (byte) 0x4A, (byte) 0x6F, (byte) 0x6E,
+            (byte) 0x65, (byte) 0x73, (byte) 0x01, (byte) 0x01, (byte) 0xFF
     };
 
     @Test

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
index 8eb4b4d..1e33bf3 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
@@ -42,7 +42,7 @@ public class TestAsn1Integer {
     }
 
     private void testEncodingWith(int value, String expectedEncoding) {
-        byte[] expected = Util.hex2bytes(expectedEncoding);
+        byte[] expected = HexUtil.hex2bytesFriendly(expectedEncoding);
         Asn1Integer aValue = new Asn1Integer(value);
         aValue.useDER();
         byte[] encodingBytes = aValue.encode();
@@ -65,7 +65,7 @@ public class TestAsn1Integer {
     private void testDecodingWith(int expectedValue, String content) throws IOException {
         Asn1Integer decoded = new Asn1Integer();
         decoded.useDER();
-        decoded.decode(Util.hex2bytes(content));
+        decoded.decode(HexUtil.hex2bytesFriendly(content));
         assertThat(decoded.getValue().intValue()).isEqualTo(expectedValue);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
index 726c23e..75b8d4e 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
@@ -43,7 +43,7 @@ public class TestAsn1ObjectIdentifier {
     }
 
     private void testEncodingWith(String oid, String expectedEncoding) {
-        byte[] expected = Util.hex2bytes(expectedEncoding);
+        byte[] expected = HexUtil.hex2bytesFriendly(expectedEncoding);
         Asn1ObjectIdentifier aValue = new Asn1ObjectIdentifier(oid);
         aValue.useDER();
         byte[] encodingBytes = aValue.encode();
@@ -59,7 +59,7 @@ public class TestAsn1ObjectIdentifier {
     private void testDecodingWith(String expectedValue, String content) throws IOException {
         Asn1ObjectIdentifier decoded = new Asn1ObjectIdentifier();
         decoded.useDER();
-        decoded.decode(Util.hex2bytes(content));
+        decoded.decode(HexUtil.hex2bytesFriendly(content));
         assertThat(decoded.getValue()).isEqualTo(expectedValue);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
index ebc1509..efef9ae 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
@@ -46,7 +46,7 @@ public class TestAsn1UtcTime {
     }
 
     private void testEncodingWith(Date value, String expectedEncoding) {
-        byte[] expected = Util.hex2bytes(expectedEncoding);
+        byte[] expected = HexUtil.hex2bytesFriendly(expectedEncoding);
         Asn1UtcTime aValue = new Asn1UtcTime(value);
         aValue.useDER();
         byte[] encodingBytes = aValue.encode();
@@ -65,7 +65,7 @@ public class TestAsn1UtcTime {
     private void testDecodingWith(Date expectedValue, String content) throws IOException {
         Asn1UtcTime decoded = new Asn1UtcTime();
         decoded.useDER();
-        decoded.decode(Util.hex2bytes(content));
+        decoded.decode(HexUtil.hex2bytesFriendly(content));
         assertThat(decoded.getValue()).isEqualTo(expectedValue);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
index 21413e8..7f97293 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
@@ -39,30 +39,30 @@ public class TestPersonnelRecord {
 
         if (verbose) {
             System.out.println("Name:");
-            System.out.println(Util.bytesToHex(pr.getName().encode()));
+            System.out.println(HexUtil.bytesToHexFriendly(pr.getName().encode()));
 
         /*
         System.out.println("Title:");
-        System.out.println(Util.bytesToHex(pr.getFieldAs(1, Asn1VisibleString.class).encode()));
+        System.out.println(HexUtil.bytesToHexFriendly(pr.getFieldAs(1, Asn1VisibleString.class).encode()));
 
         System.out.println("EmployeeNumber:");
-        System.out.println(Util.bytesToHex(pr.getFieldAs(2, EmployeeNumber.class).encode()));
+        System.out.println(HexUtil.bytesToHexFriendly(pr.getFieldAs(2, EmployeeNumber.class).encode()));
         */
 
             System.out.println("DateOfHire:");
-            System.out.println(Util.bytesToHex(pr.getDateOfHire().encode()));
+            System.out.println(HexUtil.bytesToHexFriendly(pr.getDateOfHire().encode()));
 
             System.out.println("SpouseName:");
-            System.out.println(Util.bytesToHex(pr.getNameOfSpouse().encode()));
+            System.out.println(HexUtil.bytesToHexFriendly(pr.getNameOfSpouse().encode()));
 
             System.out.println("Child1:");
-            System.out.println(Util.bytesToHex(pr.getChildren().getElements().get(0).encode()));
+            System.out.println(HexUtil.bytesToHexFriendly(pr.getChildren().getElements().get(0).encode()));
 
             System.out.println("Child2:");
-            System.out.println(Util.bytesToHex(pr.getChildren().getElements().get(1).encode()));
+            System.out.println(HexUtil.bytesToHexFriendly(pr.getChildren().getElements().get(1).encode()));
 
             System.out.println("Children:");
-            System.out.println(Util.bytesToHex(pr.getChildren().encode()));
+            System.out.println(HexUtil.bytesToHexFriendly(pr.getChildren().encode()));
         }
 
         byte[] data = TestData.createSammplePersonnelEncodingData();
@@ -70,10 +70,10 @@ public class TestPersonnelRecord {
 
         if (verbose) {
             System.out.println("ExpectedData:");
-            System.out.println(Util.bytesToHex(data));
+            System.out.println(HexUtil.bytesToHexFriendly(data));
 
             System.out.println("Encoded:");
-            System.out.println(Util.bytesToHex(encoded));
+            System.out.println(HexUtil.bytesToHexFriendly(encoded));
         }
 
         assertThat(encoded).isEqualTo(data);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/ca1e8c10/kerby-asn1/src/test/java/org/apache/kerby/asn1/Util.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/Util.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/Util.java
deleted file mode 100644
index 679a23b..0000000
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/Util.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- *  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.asn1;
-
-public class Util {
-
-    static final String HEX_CHARS_STR = "0123456789ABCDEF";
-    static final char[] HEX_CHARS = HEX_CHARS_STR.toCharArray();
-
-    /**
-     * Convert bytes into format as:
-     * 0x02 02 00 80
-     */
-    public static String bytesToHex(byte[] bytes) {
-        int len = bytes.length * 2;
-        len += bytes.length; // for ' ' appended for each char
-        len += 2; // for '0x' prefix
-        char[] hexChars = new char[len];
-        hexChars[0] = '0';
-        hexChars[1] = 'x';
-        for (int j = 0; j < bytes.length; j++) {
-            int v = bytes[j] & 0xFF;
-            hexChars[j * 3 + 2] = HEX_CHARS[v >>> 4];
-            hexChars[j * 3 + 3] = HEX_CHARS[v & 0x0F];
-            hexChars[j * 3 + 4] = ' ';
-        }
-
-        return new String(hexChars);
-    }
-
-    /**
-     * Convert hex string like follows into byte array
-     * 0x02 02 00 80
-     */
-    public static byte[] hex2bytes(String hexString) {
-        if (hexString == null) {
-            throw new IllegalArgumentException("Invalid hex string to convert : null");
-        }
-        
-        char[] hexStr = hexString.toCharArray();
-
-        if (hexStr.length < 4) {
-            throw new IllegalArgumentException("Invalid hex string to convert : length below 4");
-        }
-        
-        if ((hexStr[0] != '0') || ((hexStr[1] != 'x') && (hexStr[1] != 'X'))) {
-            throw new IllegalArgumentException("Invalid hex string to convert : not starting with '0x'");
-        }
-        
-        byte[] bytes = new byte[(hexStr.length - 1) / 3];
-        int pos = 0; 
-        boolean high = false;
-        boolean prefix = true;
-        
-        for (char c : hexStr) {
-            if (prefix) {
-                if ((c == 'x') || (c == 'X')) {
-                    prefix = false;
-                }
-                
-                continue;
-            }
-            
-            switch (c) {
-                case ' ' :
-                    if (high) {
-                        // We have had only the high part
-                        throw new IllegalArgumentException("Invalid hex string to convert");
-                    }
-                    
-                    // A hex pair has been decoded
-                    pos++;
-                    high = false;
-                    break;
-                    
-                case '0': 
-                case '1': 
-                case '2': 
-                case '3': 
-                case '4':
-                case '5': 
-                case '6':
-                case '7':
-                case '8':
-                case '9':
-                    if (high) {
-                        bytes[pos] += (byte) (c - '0');
-                    } else {
-                        bytes[pos] = (byte) ((c - '0') << 4);
-                    }
-                    
-                    high = !high;
-                    break;
-                    
-                case 'a' :
-                case 'b' :
-                case 'c' :
-                case 'd' :
-                case 'e' :
-                case 'f' :
-                    if (high) {
-                        bytes[pos] += (byte) (c - 'a' + 10);
-                    } else {
-                        bytes[pos] = (byte) ((c - 'a' + 10) << 4);
-                    }
-
-                    high = !high;
-                    break;
-
-                case 'A' :
-                case 'B' :
-                case 'C' :
-                case 'D' :
-                case 'E' :
-                case 'F' :
-                    if (high) {
-                        bytes[pos] += (byte) (c - 'A' + 10);
-                    } else {
-                        bytes[pos] = (byte) ((c - 'A' + 10) << 4);
-                    }
-
-                    high = !high;
-                    break;
-                    
-                default :
-                    throw new IllegalArgumentException("Invalid hex string to convert");
-            }
-        }
-        
-        if (high) {
-            throw new IllegalArgumentException("Invalid hex string to convert");
-        }
-
-        return bytes;
-    }
-}


[25/26] directory-kerby git commit: ASN1. Consolidate utility classes into the util package

Posted by pl...@apache.org.
ASN1. Consolidate utility classes into the util package


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/68c837fa
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/68c837fa
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/68c837fa

Branch: refs/heads/pkinit-support
Commit: 68c837fa6f7566845b01dca368debaa548460242
Parents: 4cb4366
Author: Kai Zheng <ka...@intel.com>
Authored: Sat Dec 5 10:34:44 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Sat Dec 5 10:34:44 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/kerby/asn1/Asn1.java   |    2 +
 .../java/org/apache/kerby/asn1/Asn1Reader.java  |  111 --
 .../java/org/apache/kerby/asn1/Asn1Reader1.java |   47 -
 .../java/org/apache/kerby/asn1/Asn1Reader2.java |   62 --
 .../java/org/apache/kerby/asn1/Asn1Util.java    |  117 --
 .../java/org/apache/kerby/asn1/HexUtil.java     |  113 --
 .../org/apache/kerby/asn1/type/Asn1Object.java  |    4 +-
 .../apache/kerby/asn1/type/Asn1OctetString.java |    2 +-
 .../org/apache/kerby/asn1/type/Asn1Simple.java  |    2 +-
 .../org/apache/kerby/asn1/util/Asn1Reader.java  |  114 ++
 .../org/apache/kerby/asn1/util/Asn1Reader1.java |   47 +
 .../org/apache/kerby/asn1/util/Asn1Reader2.java |   62 ++
 .../org/apache/kerby/asn1/util/Asn1Util.java    |  119 ++
 .../java/org/apache/kerby/asn1/util/Base64.java | 1048 ++++++++++++++++++
 .../org/apache/kerby/asn1/util/HexUtil.java     |  113 ++
 .../java/org/apache/kerby/asn1/util/IOUtil.java |  109 ++
 .../java/org/apache/kerby/asn1/util/Utf8.java   |   34 +
 .../org/apache/kerby/asn1/PersonnelRecord.java  |   17 +-
 .../org/apache/kerby/asn1/TestAsn1Boolean.java  |    1 +
 .../org/apache/kerby/asn1/TestAsn1Flags.java    |    2 +-
 .../org/apache/kerby/asn1/TestAsn1Integer.java  |    1 +
 .../kerby/asn1/TestAsn1ObjectIdentifier.java    |    1 +
 .../org/apache/kerby/asn1/TestAsn1UtcTime.java  |    1 +
 .../apache/kerby/asn1/TestPersonnelRecord.java  |    1 +
 24 files changed, 1671 insertions(+), 459 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
index 68698a9..c1f46fc 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
@@ -21,6 +21,8 @@ package org.apache.kerby.asn1;
 
 import org.apache.kerby.asn1.type.Asn1Item;
 import org.apache.kerby.asn1.type.Asn1Type;
+import org.apache.kerby.asn1.util.Asn1Reader1;
+import org.apache.kerby.asn1.util.HexUtil;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java
deleted file mode 100644
index 9ee9819..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- *  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.asn1;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-/**
- * ASN1 reader from a byte buffer.
- */
-public abstract class Asn1Reader {
-    protected ByteBuffer buffer;
-
-    public Asn1Reader(ByteBuffer buffer) {
-        this.buffer = buffer;
-    }
-
-    public ByteBuffer getBuffer() {
-        return buffer;
-    }
-
-    public Asn1Header readHeader() throws IOException {
-        Tag tag = readTag();
-        int valueLength = readLength();
-        Asn1Header header = new Asn1Header(tag, valueLength,
-            getValueBuffer(valueLength));
-        return header;
-    }
-
-    protected abstract ByteBuffer getValueBuffer(int valueLength);
-
-    protected abstract byte readByte() throws IOException;
-
-    private Tag readTag() throws IOException {
-        int tagFlags = readTagFlags();
-        int tagNo = readTagNo(tagFlags);
-        return new Tag(tagFlags, tagNo);
-    }
-
-    private int readTagFlags() throws IOException {
-        int tagFlags = readByte() & 0xff;
-        return tagFlags;
-    }
-
-    private int readTagNo(int tagFlags) throws IOException {
-        int tagNo = tagFlags & 0x1f;
-
-        if (tagNo == 0x1f) {
-            tagNo = 0;
-
-            int b = readByte() & 0xff;
-            if ((b & 0x7f) == 0) {
-                throw new IOException("Invalid high tag number found");
-            }
-
-            while (b >= 0 && (b & 0x80) != 0) {
-                tagNo |= b & 0x7f;
-                tagNo <<= 7;
-                b = readByte();
-            }
-
-            tagNo |= b & 0x7f;
-        }
-
-        return tagNo;
-    }
-
-    private int readLength() throws IOException {
-        int result = readByte() & 0xff;
-        if (result == 0x80) {
-            return -1; // non-definitive length
-        }
-
-        if (result > 127) {
-            int length = result & 0x7f;
-            if (length > 4) {
-                throw new IOException("Bad length of more than 4 bytes: " + length);
-            }
-
-            result = 0;
-            int tmp;
-            for (int i = 0; i < length; i++) {
-                tmp = readByte() & 0xff;
-                result = (result << 8) + tmp;
-            }
-        }
-
-        if (result < 0) {
-            throw new IOException("Invalid length " + result);
-        }
-
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java
deleted file mode 100644
index 291756d..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- *  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.asn1;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-/**
- * ASN1 reader for stateful reading.
- */
-public final class Asn1Reader1 extends Asn1Reader {
-
-    public Asn1Reader1(ByteBuffer buffer) {
-        super(buffer);
-    }
-
-    @Override
-    protected byte readByte() throws IOException {
-        return buffer.get();
-    }
-
-    @Override
-    protected ByteBuffer getValueBuffer(int valueLength) {
-        ByteBuffer result = buffer.duplicate();
-        result.limit(buffer.position() + valueLength);
-        buffer.position(buffer.position() + valueLength);
-
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java
deleted file mode 100644
index 08e3472..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- *  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.asn1;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-/**
- * ASN1 reader for positional reading.
- */
-public final class Asn1Reader2 extends Asn1Reader {
-    private int position;
-
-    public Asn1Reader2(ByteBuffer buffer, int position) {
-        super(buffer);
-        this.position = position;
-    }
-
-    public Asn1Reader2(ByteBuffer buffer) {
-        super(buffer);
-        this.position = buffer.position();
-    }
-
-    public int getPosition() {
-        return position;
-    }
-
-    public void setPosition(int position) {
-        this.position = position;
-    }
-
-    public boolean available() {
-        return position < buffer.limit();
-    }
-
-    @Override
-    protected ByteBuffer getValueBuffer(int valueLength) {
-        return buffer;
-    }
-
-    @Override
-    protected byte readByte() throws IOException {
-        return buffer.get(position++);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
deleted file mode 100644
index 315cf28..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- *  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.asn1;
-
-import java.nio.ByteBuffer;
-
-/**
- * The abstract ASN1 object for all the ASN1 types. It provides basic
- * encoding and decoding utilities.
- */
-public final class Asn1Util {
-    private Asn1Util() {
-        
-    }
-
-    public static int lengthOfBodyLength(int bodyLength) {
-        int length = 1;
-
-        if (bodyLength > 127) {
-            int payload = bodyLength;
-            while (payload != 0) {
-                payload >>= 8;
-                length++;
-            }
-        }
-
-        return length;
-    }
-
-    public static int lengthOfTagLength(int tagNo) {
-        int length = 1;
-
-        if (tagNo >= 31) {
-            if (tagNo < 128) {
-                length++;
-            } else {
-                length++;
-
-                do {
-                    tagNo >>= 7;
-                    length++;
-                } while (tagNo > 127);
-            }
-        }
-
-        return length;
-    }
-
-    public static void encodeTag(ByteBuffer buffer, Tag tag) {
-        int flags = tag.tagFlags();
-        int tagNo = tag.tagNo();
-
-        if (tagNo < 31) {
-            buffer.put((byte) (flags | tagNo));
-        } else {
-            buffer.put((byte) (flags | 0x1f));
-            if (tagNo < 128) {
-                buffer.put((byte) tagNo);
-            } else {
-                byte[] tmpBytes = new byte[5]; // 5 * 7 > 32
-                int iPut = tmpBytes.length;
-
-                tmpBytes[--iPut] = (byte) (tagNo & 0x7f);
-                do {
-                    tagNo >>= 7;
-                    tmpBytes[--iPut] = (byte) (tagNo & 0x7f | 0x80);
-                } while (tagNo > 127);
-
-                buffer.put(tmpBytes, iPut, tmpBytes.length - iPut);
-            }
-        }
-    }
-
-    public static void encodeLength(ByteBuffer buffer, int bodyLength) {
-        if (bodyLength < 128) {
-            buffer.put((byte) bodyLength);
-        } else {
-            int length = 0;
-            int payload = bodyLength;
-
-            while (payload != 0) {
-                payload >>= 8;
-                length++;
-            }
-
-            buffer.put((byte) (length | 0x80));
-
-            payload = bodyLength;
-            for (int i = length - 1; i >= 0; i--) {
-                buffer.put((byte) (payload >> (i * 8)));
-            }
-        }
-    }
-
-    public static byte[] readAllLeftBytes(ByteBuffer buffer) {
-        byte[] result = new byte[buffer.remaining()];
-        buffer.get(result);
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java
deleted file mode 100644
index b23f960..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- *  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.asn1;
-
-/**
- * This is only for test, be careful when use in production codes.
- */
-public class HexUtil {
-
-    static final String HEX_CHARS_STR = "0123456789ABCDEF";
-    static final char[] HEX_CHARS = HEX_CHARS_STR.toCharArray();
-
-    /**
-     * Convert bytes into friendly format as:
-     * 0x02 02 00 80
-     */
-    public static String bytesToHexFriendly(byte[] bytes) {
-        int len = bytes.length * 2;
-        len += bytes.length; // for ' ' appended for each char
-        len += 2; // for '0x' prefix
-        char[] hexChars = new char[len];
-        hexChars[0] = '0';
-        hexChars[1] = 'x';
-        for (int j = 0; j < bytes.length; j++) {
-            int v = bytes[j] & 0xFF;
-            hexChars[j * 3 + 2] = HEX_CHARS[v >>> 4];
-            hexChars[j * 3 + 3] = HEX_CHARS[v & 0x0F];
-            hexChars[j * 3 + 4] = ' ';
-        }
-
-        return new String(hexChars);
-    }
-
-    /**
-     * Convert friendly hex string like follows into byte array
-     * 0x02 02 00 80
-     */
-    public static byte[] hex2bytesFriendly(String hexString) {
-        hexString = hexString.toUpperCase();
-        String hexStr = hexString;
-        if (hexString.startsWith("0X")) {
-            hexStr = hexString.substring(2);
-        }
-        String[] hexParts = hexStr.split(" ");
-
-        byte[] bytes = new byte[hexParts.length];
-        char[] hexPart;
-        for (int i = 0; i < hexParts.length; ++i) {
-            hexPart = hexParts[i].toCharArray();
-            if (hexPart.length != 2) {
-                throw new IllegalArgumentException("Invalid hex string to convert");
-            }
-            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4)
-                + HEX_CHARS_STR.indexOf(hexPart[1]));
-        }
-
-        return bytes;
-    }
-
-    /**
-     * Convert bytes into format as:
-     * 02020080
-     * @param bytes The bytes
-     * @return The hex string
-     */
-    public static String bytesToHex(byte[] bytes) {
-        int len = bytes.length * 2;
-        char[] hexChars = new char[len];
-        for (int j = 0; j < bytes.length; j++) {
-            int v = bytes[j] & 0xFF;
-            hexChars[j * 2] = HEX_CHARS[v >>> 4];
-            hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
-        }
-
-        return new String(hexChars);
-    }
-
-    /**
-     * Convert hex string like follows into byte array
-     * 02020080
-     * @param hexString The hex string
-     * @return The bytes
-     */
-    public static byte[] hex2bytes(String hexString) {
-        hexString = hexString.toUpperCase();
-        int len = hexString.length() / 2;
-        byte[] bytes = new byte[len];
-        char[] hexChars = hexString.toCharArray();
-        for (int i = 0, j = 0; i < len; ++i) {
-            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4)
-                + HEX_CHARS_STR.indexOf(hexChars[j++]));
-        }
-
-        return bytes;
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 70a43a7..b4a5b7b 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
@@ -20,11 +20,11 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1Header;
-import org.apache.kerby.asn1.Asn1Reader1;
-import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
+import org.apache.kerby.asn1.util.Asn1Reader1;
+import org.apache.kerby.asn1.util.Asn1Util;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
index 4511b42..46c9c32 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
@@ -19,8 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.UniversalTag;
+import org.apache.kerby.asn1.util.Asn1Util;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
index 23e0cb8..4358f65 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
+import org.apache.kerby.asn1.util.Asn1Util;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader.java
new file mode 100644
index 0000000..451e8ff
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader.java
@@ -0,0 +1,114 @@
+/**
+ *  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.asn1.util;
+
+import org.apache.kerby.asn1.Asn1Header;
+import org.apache.kerby.asn1.Tag;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * ASN1 reader from a byte buffer.
+ */
+public abstract class Asn1Reader {
+    protected ByteBuffer buffer;
+
+    public Asn1Reader(ByteBuffer buffer) {
+        this.buffer = buffer;
+    }
+
+    public ByteBuffer getBuffer() {
+        return buffer;
+    }
+
+    public Asn1Header readHeader() throws IOException {
+        Tag tag = readTag();
+        int valueLength = readLength();
+        Asn1Header header = new Asn1Header(tag, valueLength,
+            getValueBuffer(valueLength));
+        return header;
+    }
+
+    protected abstract ByteBuffer getValueBuffer(int valueLength);
+
+    protected abstract byte readByte() throws IOException;
+
+    private Tag readTag() throws IOException {
+        int tagFlags = readTagFlags();
+        int tagNo = readTagNo(tagFlags);
+        return new Tag(tagFlags, tagNo);
+    }
+
+    private int readTagFlags() throws IOException {
+        int tagFlags = readByte() & 0xff;
+        return tagFlags;
+    }
+
+    private int readTagNo(int tagFlags) throws IOException {
+        int tagNo = tagFlags & 0x1f;
+
+        if (tagNo == 0x1f) {
+            tagNo = 0;
+
+            int b = readByte() & 0xff;
+            if ((b & 0x7f) == 0) {
+                throw new IOException("Invalid high tag number found");
+            }
+
+            while (b >= 0 && (b & 0x80) != 0) {
+                tagNo |= b & 0x7f;
+                tagNo <<= 7;
+                b = readByte();
+            }
+
+            tagNo |= b & 0x7f;
+        }
+
+        return tagNo;
+    }
+
+    private int readLength() throws IOException {
+        int result = readByte() & 0xff;
+        if (result == 0x80) {
+            return -1; // non-definitive length
+        }
+
+        if (result > 127) {
+            int length = result & 0x7f;
+            if (length > 4) {
+                throw new IOException("Bad length of more than 4 bytes: " + length);
+            }
+
+            result = 0;
+            int tmp;
+            for (int i = 0; i < length; i++) {
+                tmp = readByte() & 0xff;
+                result = (result << 8) + tmp;
+            }
+        }
+
+        if (result < 0) {
+            throw new IOException("Invalid length " + result);
+        }
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader1.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader1.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader1.java
new file mode 100644
index 0000000..f53f99d
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader1.java
@@ -0,0 +1,47 @@
+/**
+ *  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.asn1.util;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * ASN1 reader for stateful reading.
+ */
+public final class Asn1Reader1 extends Asn1Reader {
+
+    public Asn1Reader1(ByteBuffer buffer) {
+        super(buffer);
+    }
+
+    @Override
+    protected byte readByte() throws IOException {
+        return buffer.get();
+    }
+
+    @Override
+    protected ByteBuffer getValueBuffer(int valueLength) {
+        ByteBuffer result = buffer.duplicate();
+        result.limit(buffer.position() + valueLength);
+        buffer.position(buffer.position() + valueLength);
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader2.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader2.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader2.java
new file mode 100644
index 0000000..9351c3f
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Reader2.java
@@ -0,0 +1,62 @@
+/**
+ *  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.asn1.util;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * ASN1 reader for positional reading.
+ */
+public final class Asn1Reader2 extends Asn1Reader {
+    private int position;
+
+    public Asn1Reader2(ByteBuffer buffer, int position) {
+        super(buffer);
+        this.position = position;
+    }
+
+    public Asn1Reader2(ByteBuffer buffer) {
+        super(buffer);
+        this.position = buffer.position();
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+    public void setPosition(int position) {
+        this.position = position;
+    }
+
+    public boolean available() {
+        return position < buffer.limit();
+    }
+
+    @Override
+    protected ByteBuffer getValueBuffer(int valueLength) {
+        return buffer;
+    }
+
+    @Override
+    protected byte readByte() throws IOException {
+        return buffer.get(position++);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Util.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Util.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Util.java
new file mode 100644
index 0000000..a1f3438
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Asn1Util.java
@@ -0,0 +1,119 @@
+/**
+ *  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.asn1.util;
+
+import org.apache.kerby.asn1.Tag;
+
+import java.nio.ByteBuffer;
+
+/**
+ * The abstract ASN1 object for all the ASN1 types. It provides basic
+ * encoding and decoding utilities.
+ */
+public final class Asn1Util {
+    private Asn1Util() {
+        
+    }
+
+    public static int lengthOfBodyLength(int bodyLength) {
+        int length = 1;
+
+        if (bodyLength > 127) {
+            int payload = bodyLength;
+            while (payload != 0) {
+                payload >>= 8;
+                length++;
+            }
+        }
+
+        return length;
+    }
+
+    public static int lengthOfTagLength(int tagNo) {
+        int length = 1;
+
+        if (tagNo >= 31) {
+            if (tagNo < 128) {
+                length++;
+            } else {
+                length++;
+
+                do {
+                    tagNo >>= 7;
+                    length++;
+                } while (tagNo > 127);
+            }
+        }
+
+        return length;
+    }
+
+    public static void encodeTag(ByteBuffer buffer, Tag tag) {
+        int flags = tag.tagFlags();
+        int tagNo = tag.tagNo();
+
+        if (tagNo < 31) {
+            buffer.put((byte) (flags | tagNo));
+        } else {
+            buffer.put((byte) (flags | 0x1f));
+            if (tagNo < 128) {
+                buffer.put((byte) tagNo);
+            } else {
+                byte[] tmpBytes = new byte[5]; // 5 * 7 > 32
+                int iPut = tmpBytes.length;
+
+                tmpBytes[--iPut] = (byte) (tagNo & 0x7f);
+                do {
+                    tagNo >>= 7;
+                    tmpBytes[--iPut] = (byte) (tagNo & 0x7f | 0x80);
+                } while (tagNo > 127);
+
+                buffer.put(tmpBytes, iPut, tmpBytes.length - iPut);
+            }
+        }
+    }
+
+    public static void encodeLength(ByteBuffer buffer, int bodyLength) {
+        if (bodyLength < 128) {
+            buffer.put((byte) bodyLength);
+        } else {
+            int length = 0;
+            int payload = bodyLength;
+
+            while (payload != 0) {
+                payload >>= 8;
+                length++;
+            }
+
+            buffer.put((byte) (length | 0x80));
+
+            payload = bodyLength;
+            for (int i = length - 1; i >= 0; i--) {
+                buffer.put((byte) (payload >> (i * 8)));
+            }
+        }
+    }
+
+    public static byte[] readAllLeftBytes(ByteBuffer buffer) {
+        byte[] result = new byte[buffer.remaining()];
+        buffer.get(result);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Base64.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Base64.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Base64.java
new file mode 100644
index 0000000..a15f477
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Base64.java
@@ -0,0 +1,1048 @@
+/*
+ * 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.asn1.util;
+
+import java.math.BigInteger;
+
+/**
+ * Provides Base64 encoding and decoding as defined by RFC 2045.
+ *
+ * <p>
+ * This class implements section <cite>6.8. Base64 Content-Transfer-Encoding</cite> from RFC 2045 <cite>Multipurpose
+ * Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</cite> by Freed and Borenstein.
+ * </p>
+ * <p>
+ * The class can be parameterized in the following manner with various constructors:
+ * </p>
+ * <ul>
+ * <li>URL-safe mode: Default off.</li>
+ * <li>Line length: Default 76. Line length that aren't multiples of 4 will still essentially end up being multiples of
+ * 4 in the encoded data.</li>
+ * <li>Line separator: Default is CRLF ("\r\n")</li>
+ * </ul>
+ * <p>
+ * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode
+ * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).
+ * </p>
+ *
+ * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>
+ * @author Apache Software Foundation
+ * @since 1.0
+ * @version $Id: Base64.java 155 2009-09-17 21:00:58Z julius $
+ */
+public class Base64 {
+    private static final int DEFAULT_BUFFER_RESIZE_FACTOR = 2;
+
+    private static final int DEFAULT_BUFFER_SIZE = 8192;
+
+    /**
+     * Chunk size per RFC 2045 section 6.8.
+     *
+     * <p>
+     * The {@value} character limit does not count the trailing CRLF, but counts all other characters, including any
+     * equal signs.
+     * </p>
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 section 6.8</a>
+     */
+    static final int CHUNK_SIZE = 76;
+
+    /**
+     * Chunk separator per RFC 2045 section 2.1.
+     *
+     * <p>
+     * N.B. The next major release may break compatibility and make this field private.
+     * </p>
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 section 2.1</a>
+     */
+    static final byte[] CHUNK_SEPARATOR = {'\r', '\n'};
+
+    /**
+     * This array is a lookup table that translates 6-bit positive integer index values into their "Base64 Alphabet"
+     * equivalents as specified in Table 1 of RFC 2045.
+     *
+     * Thanks to "commons" project in ws.apache.org for this code.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     */
+    private static final byte[] STANDARD_ENCODE_TABLE = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+    };
+
+    /**
+     * This is a copy of the STANDARD_ENCODE_TABLE above, but with + and /
+     * changed to - and _ to make the encoded Base64 results more URL-SAFE.
+     * This table is only used when the Base64's mode is set to URL-SAFE.
+     */
+    private static final byte[] URL_SAFE_ENCODE_TABLE = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'
+    };
+
+    /**
+     * Byte used to pad output.
+     */
+    private static final byte PAD = '=';
+
+    /**
+     * This array is a lookup table that translates Unicode characters drawn from the "Base64 Alphabet" (as specified in
+     * Table 1 of RFC 2045) into their 6-bit positive integer equivalents. Characters that are not in the Base64
+     * alphabet but fall within the bounds of the array are translated to -1.
+     *
+     * Note: '+' and '-' both decode to 62. '/' and '_' both decode to 63. This means decoder seamlessly handles both
+     * URL_SAFE and STANDARD base64. (The encoder, on the other hand, needs to know ahead of time what to emit).
+     *
+     * Thanks to "commons" project in ws.apache.org for this code.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     */
+    private static final byte[] DECODE_TABLE = {
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, 52, 53, 54,
+            55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4,
+            5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+            24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+            35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51
+    };
+
+    /** Mask used to extract 6 bits, used when encoding */
+    private static final int MASK_6BITS = 0x3f;
+
+    /** Mask used to extract 8 bits, used in decoding base64 bytes */
+    private static final int MASK_8BITS = 0xff;
+
+    // The static final fields above are used for the original static byte[] methods on Base64.
+    // The private member fields below are used with the new streaming approach, which requires
+    // some state be preserved between calls of encode() and decode().
+
+    /**
+     * Encode table to use: either STANDARD or URL_SAFE. Note: the DECODE_TABLE above remains static because it is able
+     * to decode both STANDARD and URL_SAFE streams, but the encodeTable must be a member variable so we can switch
+     * between the two modes.
+     */
+    private final byte[] encodeTable;
+
+    /**
+     * Line length for encoding. Not used when decoding. A value of zero or less implies no chunking of the base64
+     * encoded data.
+     */
+    private final int lineLength;
+
+    /**
+     * Line separator for encoding. Not used when decoding. Only used if lineLength > 0.
+     */
+    private final byte[] lineSeparator;
+
+    /**
+     * Convenience variable to help us determine when our buffer is going to run out of room and needs resizing.
+     * <code>decodeSize = 3 + lineSeparator.length;</code>
+     */
+    private final int decodeSize;
+
+    /**
+     * Convenience variable to help us determine when our buffer is going to run out of room and needs resizing.
+     * <code>encodeSize = 4 + lineSeparator.length;</code>
+     */
+    private final int encodeSize;
+
+    /**
+     * Buffer for streaming.
+     */
+    private byte[] buffer;
+
+    /**
+     * Position where next character should be written in the buffer.
+     */
+    private int pos;
+
+    /**
+     * Position where next character should be read from the buffer.
+     */
+    private int readPos;
+
+    /**
+     * Variable tracks how many characters have been written to the current line. Only used when encoding. We use it to
+     * make sure each encoded line never goes beyond lineLength (if lineLength > 0).
+     */
+    private int currentLinePos;
+
+    /**
+     * Writes to the buffer only occur after every 3 reads when encoding, an every 4 reads when decoding. This variable
+     * helps track that.
+     */
+    private int modulus;
+
+    /**
+     * Boolean flag to indicate the EOF has been reached. Once EOF has been reached, this Base64 object becomes useless,
+     * and must be thrown away.
+     */
+    private boolean eof;
+
+    /**
+     * Place holder for the 3 bytes we're dealing with for our base64 logic. Bitwise operations store and extract the
+     * base64 encoding or decoding from this variable.
+     */
+    private int x;
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length is 76, the line separator is CRLF, and the encoding table is STANDARD_ENCODE_TABLE.
+     * </p>
+     *
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     */
+    public Base64() {
+        this(false);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in the given URL-safe mode.
+     * <p>
+     * When encoding the line length is 76, the line separator is CRLF, and the encoding table is STANDARD_ENCODE_TABLE.
+     * </p>
+     *
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     *
+     * @param urlSafe
+     *            if <code>true</code>, URL-safe encoding is used. In most cases this should be set to
+     *            <code>false</code>.
+     * @since 1.4
+     */
+    public Base64(boolean urlSafe) {
+        this(CHUNK_SIZE, CHUNK_SEPARATOR, urlSafe);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length is given in the constructor, the line separator is CRLF, and the encoding table is
+     * STANDARD_ENCODE_TABLE.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 4 will still essentially end up being multiples of 4 in the encoded data.
+     * </p>
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     *
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 4).
+     *            If {@code lineLength <= 0}, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @since 1.4
+     */
+    public Base64(int lineLength) {
+        this(lineLength, CHUNK_SEPARATOR);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length and line separator are given in the constructor, and the encoding table is
+     * STANDARD_ENCODE_TABLE.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 4 will still essentially end up being multiples of 4 in the encoded data.
+     * </p>
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     *
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 4).
+     *            If {@code lineLength <= 0}, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @param lineSeparator
+     *            Each line of encoded data will end with this sequence of bytes.
+     * @throws IllegalArgumentException
+     *             Thrown when the provided lineSeparator included some base64 characters.
+     * @since 1.4
+     */
+    public Base64(int lineLength, byte[] lineSeparator) {
+        this(lineLength, lineSeparator, false);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length and line separator are given in the constructor, and the encoding table is
+     * STANDARD_ENCODE_TABLE.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 4 will still essentially end up being multiples of 4 in the encoded data.
+     * </p>
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     *
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 4).
+     *            If {@code lineLength <= 0}, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @param lineSeparator
+     *            Each line of encoded data will end with this sequence of bytes.
+     * @param urlSafe
+     *            Instead of emitting '+' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode
+     *            operations. Decoding seamlessly handles both modes.
+     * @throws IllegalArgumentException
+     *             The provided lineSeparator included some base64 characters. That's not going to work!
+     * @since 1.4
+     */
+    public Base64(int lineLength, byte[] lineSeparator, boolean urlSafe) {
+        if (lineSeparator == null) {
+            lineLength = 0;  // disable chunk-separating
+            lineSeparator = CHUNK_SEPARATOR;  // this just gets ignored
+        }
+        this.lineLength = lineLength > 0 ? (lineLength / 4) * 4 : 0;
+        this.lineSeparator = new byte[lineSeparator.length];
+        System.arraycopy(lineSeparator, 0, this.lineSeparator, 0, lineSeparator.length);
+        if (lineLength > 0) {
+            this.encodeSize = 4 + lineSeparator.length;
+        } else {
+            this.encodeSize = 4;
+        }
+        this.decodeSize = this.encodeSize - 1;
+        if (containsBase64Byte(lineSeparator)) {
+            String sep = Utf8.toString(lineSeparator);
+            throw new IllegalArgumentException("lineSeperator must not contain base64 characters: [" + sep + "]");
+        }
+        this.encodeTable = urlSafe ? URL_SAFE_ENCODE_TABLE : STANDARD_ENCODE_TABLE;
+    }
+
+    /**
+     * Returns our current encode mode. True if we're URL-SAFE, false otherwise.
+     *
+     * @return true if we're in URL-SAFE mode, false otherwise.
+     * @since 1.4
+     */
+    public boolean isUrlSafe() {
+        return this.encodeTable == URL_SAFE_ENCODE_TABLE;
+    }
+
+    /**
+     * Returns true if this Base64 object has buffered data for reading.
+     *
+     * @return true if there is Base64 object still available for reading.
+     */
+    boolean hasData() {
+        return this.buffer != null;
+    }
+
+    /**
+     * Returns the amount of buffered data available for reading.
+     *
+     * @return The amount of buffered data available for reading.
+     */
+    int avail() {
+        return buffer != null ? pos - readPos : 0;
+    }
+
+    /** Doubles our buffer. */
+    private void resizeBuffer() {
+        if (buffer == null) {
+            buffer = new byte[DEFAULT_BUFFER_SIZE];
+            pos = 0;
+            readPos = 0;
+        } else {
+            byte[] b = new byte[buffer.length * DEFAULT_BUFFER_RESIZE_FACTOR];
+            System.arraycopy(buffer, 0, b, 0, buffer.length);
+            buffer = b;
+        }
+    }
+
+    /**
+     * Extracts buffered data into the provided byte[] array, starting at position bPos, up to a maximum of bAvail
+     * bytes. Returns how many bytes were actually extracted.
+     *
+     * @param b
+     *            byte[] array to extract the buffered data into.
+     * @param bPos
+     *            position in byte[] array to start extraction at.
+     * @param bAvail
+     *            amount of bytes we're allowed to extract. We may extract fewer (if fewer are available).
+     * @return The number of bytes successfully extracted into the provided byte[] array.
+     */
+    int readResults(byte[] b, int bPos, int bAvail) {
+        if (buffer != null) {
+            int len = Math.min(avail(), bAvail);
+            if (buffer != b) {
+                System.arraycopy(buffer, readPos, b, bPos, len);
+                readPos += len;
+                if (readPos >= pos) {
+                    buffer = null;
+                }
+            } else {
+                // Re-using the original consumer's output array is only
+                // allowed for one round.
+                buffer = null;
+            }
+            return len;
+        }
+        return eof ? -1 : 0;
+    }
+
+    /**
+     * Sets the streaming buffer. This is a small optimization where we try to buffer directly to the consumer's output
+     * array for one round (if the consumer calls this method first) instead of starting our own buffer.
+     *
+     * @param out
+     *            byte[] array to buffer directly to.
+     * @param outPos
+     *            Position to start buffering into.
+     * @param outAvail
+     *            Amount of bytes available for direct buffering.
+     */
+    void setInitialBuffer(byte[] out, int outPos, int outAvail) {
+        // We can re-use consumer's original output array under
+        // special circumstances, saving on some System.arraycopy().
+        if (out != null && out.length == outAvail) {
+            buffer = out;
+            pos = outPos;
+            readPos = outPos;
+        }
+    }
+
+    /**
+     * <p>
+     * Encodes all of the provided data, starting at inPos, for inAvail bytes. Must be called at least twice: once with
+     * the data to encode, and once with inAvail set to "-1" to alert encoder that EOF has been reached, so flush last
+     * remaining bytes (if not multiple of 3).
+     * </p>
+     * <p>
+     * Thanks to "commons" project in ws.apache.org for the bitwise operations, and general approach.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     * </p>
+     *
+     * @param in
+     *            byte[] array of binary data to base64 encode.
+     * @param inPos
+     *            Position to start reading data from.
+     * @param inAvail
+     *            Amount of bytes available from input for encoding.
+     */
+    void encode(byte[] in, int inPos, int inAvail) {
+        if (eof) {
+            return;
+        }
+        // inAvail < 0 is how we're informed of EOF in the underlying data we're
+        // encoding.
+        if (inAvail < 0) {
+            eof = true;
+            if (buffer == null || buffer.length - pos < encodeSize) {
+                resizeBuffer();
+            }
+            switch (modulus) {
+                case 1 :
+                    buffer[pos++] = encodeTable[(x >> 2) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(x << 4) & MASK_6BITS];
+                    // URL-SAFE skips the padding to further reduce size.
+                    if (encodeTable == STANDARD_ENCODE_TABLE) {
+                        buffer[pos++] = PAD;
+                        buffer[pos++] = PAD;
+                    }
+                    break;
+
+                case 2 :
+                    buffer[pos++] = encodeTable[(x >> 10) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(x >> 4) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(x << 2) & MASK_6BITS];
+                    // URL-SAFE skips the padding to further reduce size.
+                    if (encodeTable == STANDARD_ENCODE_TABLE) {
+                        buffer[pos++] = PAD;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            if (lineLength > 0 && pos > 0) {
+                System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
+                pos += lineSeparator.length;
+            }
+        } else {
+            for (int i = 0; i < inAvail; i++) {
+                if (buffer == null || buffer.length - pos < encodeSize) {
+                    resizeBuffer();
+                }
+                modulus = (++modulus) % 3;
+                int b = in[inPos++];
+                if (b < 0) {
+                    b += 256;
+                }
+                x = (x << 8) + b;
+                if (0 == modulus) {
+                    buffer[pos++] = encodeTable[(x >> 18) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(x >> 12) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(x >> 6) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[x & MASK_6BITS];
+                    currentLinePos += 4;
+                    if (lineLength > 0 && lineLength <= currentLinePos) {
+                        System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
+                        pos += lineSeparator.length;
+                        currentLinePos = 0;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Decodes all of the provided data, starting at inPos, for inAvail bytes. Should be called at least twice: once
+     * with the data to decode, and once with inAvail set to "-1" to alert decoder that EOF has been reached. The "-1"
+     * call is not necessary when decoding, but it doesn't hurt, either.
+     * </p>
+     * <p>
+     * Ignores all non-base64 characters. This is how chunked (e.g. 76 character) data is handled, since CR and LF are
+     * silently ignored, but has implications for other bytes, too. This method subscribes to the garbage-in,
+     * garbage-out philosophy: it will not check the provided data for validity.
+     * </p>
+     * <p>
+     * Thanks to "commons" project in ws.apache.org for the bitwise operations, and general approach.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     * </p>
+     *
+     * @param in
+     *            byte[] array of ascii data to base64 decode.
+     * @param inPos
+     *            Position to start reading data from.
+     * @param inAvail
+     *            Amount of bytes available from input for encoding.
+     */
+    void decode(byte[] in, int inPos, int inAvail) {
+        if (eof) {
+            return;
+        }
+        if (inAvail < 0) {
+            eof = true;
+        }
+        for (int i = 0; i < inAvail; i++) {
+            if (buffer == null || buffer.length - pos < decodeSize) {
+                resizeBuffer();
+            }
+            byte b = in[inPos++];
+            if (b == PAD) {
+                // We're done.
+                eof = true;
+                break;
+            } else {
+                if (b >= 0 && b < DECODE_TABLE.length) {
+                    int result = DECODE_TABLE[b];
+                    if (result >= 0) {
+                        modulus = (++modulus) % 4;
+                        x = (x << 6) + result;
+                        if (modulus == 0) {
+                            buffer[pos++] = (byte) ((x >> 16) & MASK_8BITS);
+                            buffer[pos++] = (byte) ((x >> 8) & MASK_8BITS);
+                            buffer[pos++] = (byte) (x & MASK_8BITS);
+                        }
+                    }
+                }
+            }
+        }
+
+        // Two forms of EOF as far as base64 decoder is concerned: actual
+        // EOF (-1) and first time '=' character is encountered in stream.
+        // This approach makes the '=' padding characters completely optional.
+        if (eof && modulus != 0) {
+            x = x << 6;
+            switch (modulus) {
+                case 2 :
+                    x = x << 6;
+                    buffer[pos++] = (byte) ((x >> 16) & MASK_8BITS);
+                    break;
+                case 3 :
+                    buffer[pos++] = (byte) ((x >> 16) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((x >> 8) & MASK_8BITS);
+                    break;
+                default :
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Returns whether or not the <code>octet</code> is in the base 64 alphabet.
+     *
+     * @param octet
+     *            The value to test
+     * @return <code>true</code> if the value is defined in the the base 64 alphabet, <code>false</code> otherwise.
+     * @since 1.4
+     */
+    public static boolean isBase64(byte octet) {
+        return octet == PAD || octet >= 0 && octet < DECODE_TABLE.length && DECODE_TABLE[octet] != -1;
+    }
+
+    /**
+     * Tests a given byte array to see if it contains only valid characters within the Base64 alphabet. Currently the
+     * method treats whitespace as valid.
+     *
+     * @param arrayOctet
+     *            byte array to test
+     * @return <code>true</code> if all bytes are valid characters in the Base64 alphabet or if the byte array is empty;
+     *         false, otherwise
+     */
+    public static boolean isArrayByteBase64(byte[] arrayOctet) {
+        for (int i = 0; i < arrayOctet.length; i++) {
+            if (!isBase64(arrayOctet[i]) && !isWhiteSpace(arrayOctet[i])) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Tests a given byte array to see if it contains only valid characters within the Base64 alphabet.
+     *
+     * @param arrayOctet
+     *            byte array to test
+     * @return <code>true</code> if any byte is a valid character in the Base64 alphabet; false herwise
+     */
+    private static boolean containsBase64Byte(byte[] arrayOctet) {
+        for (int i = 0; i < arrayOctet.length; i++) {
+            if (isBase64(arrayOctet[i])) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm but does not chunk the output.
+     *
+     * @param binaryData
+     *            binary data to encode
+     * @return byte[] containing Base64 characters in their UTF-8 representation.
+     */
+    public static byte[] encodeBase64(byte[] binaryData) {
+        return encodeBase64(binaryData, false);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm into 76 character blocks separated by CRLF.
+     *
+     * @param binaryData
+     *            binary data to encode
+     * @return String containing Base64 characters.
+     * @since 1.4
+     */
+    public static String encodeBase64String(byte[] binaryData) {
+        return Utf8.toString(encodeBase64(binaryData, true));
+    }
+
+    /**
+     * Encodes binary data using a URL-safe variation of the base64 algorithm but does not chunk the output. The
+     * url-safe variation emits - and _ instead of + and / characters.
+     *
+     * @param binaryData
+     *            binary data to encode
+     * @return byte[] containing Base64 characters in their UTF-8 representation.
+     * @since 1.4
+     */
+    public static byte[] encodeBase64URLSafe(byte[] binaryData) {
+        return encodeBase64(binaryData, false, true);
+    }
+
+    /**
+     * Encodes binary data using a URL-safe variation of the base64 algorithm but does not chunk the output. The
+     * url-safe variation emits - and _ instead of + and / characters.
+     *
+     * @param binaryData
+     *            binary data to encode
+     * @return String containing Base64 characters
+     * @since 1.4
+     */
+    public static String encodeBase64URLSafeString(byte[] binaryData) {
+        return Utf8.toString(encodeBase64(binaryData, false, true));
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm and chunks the encoded output into 76 character blocks
+     *
+     * @param binaryData
+     *            binary data to encode
+     * @return Base64 characters chunked in 76 character blocks
+     */
+    public static byte[] encodeBase64Chunked(byte[] binaryData) {
+        return encodeBase64(binaryData, true);
+    }
+
+    /**
+     * Decodes an Object using the base64 algorithm. This method is provided in order to satisfy the requirements of the
+     * Decoder interface, and will throw a DecoderException if the supplied object is not of type byte[] or String.
+     *
+     * @param pObject
+     *            Object to decode
+     * @return An object (of type byte[]) containing the binary data which corresponds to the byte[] or String supplied.
+     */
+    public Object decode(Object pObject) {
+        if (pObject instanceof byte[]) {
+            return decode((byte[]) pObject);
+        } else if (pObject instanceof String) {
+            return decode((String) pObject);
+        } else {
+            throw new IllegalArgumentException("Parameter supplied to Base64 decode is not a byte[] or a String");
+        }
+    }
+
+    /**
+     * Decodes a String containing containing characters in the Base64 alphabet.
+     *
+     * @param pArray
+     *            A String containing Base64 character data
+     * @return a byte array containing binary data
+     * @since 1.4
+     */
+    public byte[] decode(String pArray) {
+        return decode(Utf8.toBytes(pArray));
+    }
+
+    /**
+     * Decodes a byte[] containing containing characters in the Base64 alphabet.
+     *
+     * @param pArray
+     *            A byte array containing Base64 character data
+     * @return a byte array containing binary data
+     */
+    public byte[] decode(byte[] pArray) {
+        reset();
+        if (pArray == null || pArray.length == 0) {
+            return pArray;
+        }
+        long len = (pArray.length * 3) / 4;
+        byte[] buf = new byte[(int) len];
+        setInitialBuffer(buf, 0, buf.length);
+        decode(pArray, 0, pArray.length);
+        decode(pArray, 0, -1); // Notify decoder of EOF.
+
+        // Would be nice to just return buf (like we sometimes do in the encode
+        // logic), but we have no idea what the line-length was (could even be
+        // variable).  So we cannot determine ahead of time exactly how big an
+        // array is necessary.  Hence the need to construct a 2nd byte array to
+        // hold the final result:
+
+        byte[] result = new byte[pos];
+        readResults(result, 0, result.length);
+        return result;
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.
+     *
+     * @param binaryData
+     *            Array containing binary data to encode.
+     * @param isChunked
+     *            if <code>true</code> this encoder will chunk the base64 output into 76 character blocks
+     * @return Base64-encoded data.
+     * @throws IllegalArgumentException
+     *             Thrown when the input array needs an output array bigger than {@link Integer#MAX_VALUE}
+     */
+    public static byte[] encodeBase64(byte[] binaryData, boolean isChunked) {
+        return encodeBase64(binaryData, isChunked, false);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.
+     *
+     * @param binaryData
+     *            Array containing binary data to encode.
+     * @param isChunked
+     *            if <code>true</code> this encoder will chunk the base64 output into 76 character blocks
+     * @param urlSafe
+     *            if <code>true</code> this encoder will emit - and _ instead of the usual + and / characters.
+     * @return Base64-encoded data.
+     * @throws IllegalArgumentException
+     *             Thrown when the input array needs an output array bigger than {@link Integer#MAX_VALUE}
+     * @since 1.4
+     */
+    public static byte[] encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe) {
+        return encodeBase64(binaryData, isChunked, urlSafe, Integer.MAX_VALUE);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.
+     *
+     * @param binaryData
+     *            Array containing binary data to encode.
+     * @param isChunked
+     *            if <code>true</code> this encoder will chunk the base64 output into 76 character blocks
+     * @param urlSafe
+     *            if <code>true</code> this encoder will emit - and _ instead of the usual + and / characters.
+     * @param maxResultSize
+     *            The maximum result size to accept.
+     * @return Base64-encoded data.
+     * @throws IllegalArgumentException
+     *             Thrown when the input array needs an output array bigger than maxResultSize
+     * @since 1.4
+     */
+    public static byte[] encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe, int maxResultSize) {
+        if (binaryData == null || binaryData.length == 0) {
+            return binaryData;
+        }
+
+        long len = getEncodeLength(binaryData, CHUNK_SIZE, CHUNK_SEPARATOR);
+        if (len > maxResultSize) {
+            throw new IllegalArgumentException("Input array too big, the output array would be bigger ("
+                    + len + ") than the specified maxium size of " + maxResultSize);
+        }
+
+        Base64 b64 = isChunked ? new Base64(urlSafe) : new Base64(0, CHUNK_SEPARATOR, urlSafe);
+        return b64.encode(binaryData);
+    }
+
+    /**
+     * Decodes a Base64 String into octets
+     *
+     * @param base64String
+     *            String containing Base64 data
+     * @return Array containing decoded data.
+     * @since 1.4
+     */
+    public static byte[] decodeBase64(String base64String) {
+        return new Base64().decode(base64String);
+    }
+
+    /**
+     * Decodes Base64 data into octets
+     *
+     * @param base64Data
+     *            Byte array containing Base64 data
+     * @return Array containing decoded data.
+     */
+    public static byte[] decodeBase64(byte[] base64Data) {
+        return new Base64().decode(base64Data);
+    }
+
+    /**
+     * Discards any whitespace from a base-64 encoded block.
+     *
+     * @param data
+     *            The base-64 encoded data to discard the whitespace from.
+     * @return The data, less whitespace (see RFC 2045).
+     * @deprecated This method is no longer needed
+     */
+    static byte[] discardWhitespace(byte[] data) {
+        byte[] groomedData = new byte[data.length];
+        int bytesCopied = 0;
+        for (int i = 0; i < data.length; i++) {
+            switch (data[i]) {
+                case ' ' :
+                case '\n' :
+                case '\r' :
+                case '\t' :
+                    break;
+                default :
+                    groomedData[bytesCopied++] = data[i];
+            }
+        }
+        byte[] packedData = new byte[bytesCopied];
+        System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);
+        return packedData;
+    }
+
+    /**
+     * Checks if a byte value is whitespace or not.
+     *
+     * @param byteToCheck
+     *            the byte to check
+     * @return true if byte is whitespace, false otherwise
+     */
+    private static boolean isWhiteSpace(byte byteToCheck) {
+        switch (byteToCheck) {
+            case ' ' :
+            case '\n' :
+            case '\r' :
+            case '\t' :
+                return true;
+            default :
+                return false;
+        }
+    }
+
+    // Implementation of the Encoder Interface
+
+    /**
+     * Encodes an Object using the base64 algorithm. This method is provided in order to satisfy the requirements of the
+     * Encoder interface, and will throw an EncoderException if the supplied object is not of type byte[].
+     *
+     * @param pObject
+     *            Object to encode
+     * @return An object (of type byte[]) containing the base64 encoded data which corresponds to the byte[] supplied.
+     */
+    public Object encode(Object pObject) {
+        if (!(pObject instanceof byte[])) {
+            throw new IllegalArgumentException("Parameter supplied to Base64 encode is not a byte[]");
+        }
+        return encode((byte[]) pObject);
+    }
+
+    /**
+     * Encodes a byte[] containing binary data, into a String containing characters in the Base64 alphabet.
+     *
+     * @param pArray
+     *            a byte array containing binary data
+     * @return A String containing only Base64 character data
+     * @since 1.4
+     */
+    public String encodeToString(byte[] pArray) {
+        return Utf8.toString(encode(pArray));
+    }
+
+    /**
+     * Encodes a byte[] containing binary data, into a byte[] containing characters in the Base64 alphabet.
+     *
+     * @param pArray
+     *            a byte array containing binary data
+     * @return A byte array containing only Base64 character data
+     */
+    public byte[] encode(byte[] pArray) {
+        reset();
+        if (pArray == null || pArray.length == 0) {
+            return pArray;
+        }
+        long len = getEncodeLength(pArray, lineLength, lineSeparator);
+        byte[] buf = new byte[(int) len];
+        setInitialBuffer(buf, 0, buf.length);
+        encode(pArray, 0, pArray.length);
+        encode(pArray, 0, -1); // Notify encoder of EOF.
+        // Encoder might have resized, even though it was unnecessary.
+        if (buffer != buf) {
+            readResults(buf, 0, buf.length);
+        }
+        // In URL-SAFE mode we skip the padding characters, so sometimes our
+        // final length is a bit smaller.
+        if (isUrlSafe() && pos < buf.length) {
+            byte[] smallerBuf = new byte[pos];
+            System.arraycopy(buf, 0, smallerBuf, 0, pos);
+            buf = smallerBuf;
+        }
+        return buf;
+    }
+
+    /**
+     * Pre-calculates the amount of space needed to base64-encode the supplied array.
+     *
+     * @param pArray byte[] array which will later be encoded
+     * @param chunkSize line-length of the output (<= 0 means no chunking) between each
+     *        chunkSeparator (e.g. CRLF).
+     * @param chunkSeparator the sequence of bytes used to separate chunks of output (e.g. CRLF).
+     *
+     * @return amount of space needed to encoded the supplied array.  Returns
+     *         a long since a max-len array will require Integer.MAX_VALUE + 33%.
+     */
+    private static long getEncodeLength(byte[] pArray, int chunkSize, byte[] chunkSeparator) {
+        // base64 always encodes to multiples of 4.
+        chunkSize = (chunkSize / 4) * 4;
+
+        long len = (pArray.length * 4) / 3;
+        long mod = len % 4;
+        if (mod != 0) {
+            len += 4 - mod;
+        }
+        if (chunkSize > 0) {
+            boolean lenChunksPerfectly = len % chunkSize == 0;
+            len += (len / chunkSize) * chunkSeparator.length;
+            if (!lenChunksPerfectly) {
+                len += chunkSeparator.length;
+            }
+        }
+        return len;
+    }
+
+    // Implementation of integer encoding used for crypto
+    /**
+     * Decodes a byte64-encoded integer according to crypto standards such as W3C's XML-Signature
+     *
+     * @param pArray
+     *            a byte array containing base64 character data
+     * @return A BigInteger
+     * @since 1.4
+     */
+    public static BigInteger decodeInteger(byte[] pArray) {
+        return new BigInteger(1, decodeBase64(pArray));
+    }
+
+    /**
+     * Encodes to a byte64-encoded integer according to crypto standards such as W3C's XML-Signature
+     *
+     * @param bigInt
+     *            a BigInteger
+     * @return A byte array containing base64 character data
+     * @throws NullPointerException
+     *             if null is passed in
+     * @since 1.4
+     */
+    public static byte[] encodeInteger(BigInteger bigInt) {
+        if (bigInt == null) {
+            throw new NullPointerException("encodeInteger called with null parameter");
+        }
+        return encodeBase64(toIntegerBytes(bigInt), false);
+    }
+
+    /**
+     * Returns a byte-array representation of a <code>BigInteger</code> without sign bit.
+     *
+     * @param bigInt
+     *            <code>BigInteger</code> to be converted
+     * @return a byte array representation of the BigInteger parameter
+     */
+    static byte[] toIntegerBytes(BigInteger bigInt) {
+        int bitlen = bigInt.bitLength();
+        // round bitlen
+        bitlen = ((bitlen + 7) >> 3) << 3;
+        byte[] bigBytes = bigInt.toByteArray();
+
+        if (bigInt.bitLength() % 8 != 0 && (bigInt.bitLength() / 8 + 1) == bitlen / 8) {
+            return bigBytes;
+        }
+        // set up params for copying everything but sign bit
+        int startSrc = 0;
+        int len = bigBytes.length;
+
+        // if bigInt is exactly byte-aligned, just skip signbit in copy
+        if (bigInt.bitLength() % 8 == 0) {
+            startSrc = 1;
+            len--;
+        }
+        int startDst = bitlen / 8 - len; // to pad w/ nulls as per spec
+        byte[] resizedBytes = new byte[bitlen / 8];
+        System.arraycopy(bigBytes, startSrc, resizedBytes, startDst, len);
+        return resizedBytes;
+    }
+
+    /**
+     * Resets this Base64 object to its initial newly constructed state.
+     */
+    private void reset() {
+        buffer = null;
+        pos = 0;
+        readPos = 0;
+        currentLinePos = 0;
+        modulus = 0;
+        eof = false;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/HexUtil.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/HexUtil.java
new file mode 100644
index 0000000..66a0ee8
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/HexUtil.java
@@ -0,0 +1,113 @@
+/**
+ *  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.asn1.util;
+
+/**
+ * This is only for test, be careful when use in production codes.
+ */
+public class HexUtil {
+
+    static final String HEX_CHARS_STR = "0123456789ABCDEF";
+    static final char[] HEX_CHARS = HEX_CHARS_STR.toCharArray();
+
+    /**
+     * Convert bytes into friendly format as:
+     * 0x02 02 00 80
+     */
+    public static String bytesToHexFriendly(byte[] bytes) {
+        int len = bytes.length * 2;
+        len += bytes.length; // for ' ' appended for each char
+        len += 2; // for '0x' prefix
+        char[] hexChars = new char[len];
+        hexChars[0] = '0';
+        hexChars[1] = 'x';
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 3 + 2] = HEX_CHARS[v >>> 4];
+            hexChars[j * 3 + 3] = HEX_CHARS[v & 0x0F];
+            hexChars[j * 3 + 4] = ' ';
+        }
+
+        return new String(hexChars);
+    }
+
+    /**
+     * Convert friendly hex string like follows into byte array
+     * 0x02 02 00 80
+     */
+    public static byte[] hex2bytesFriendly(String hexString) {
+        hexString = hexString.toUpperCase();
+        String hexStr = hexString;
+        if (hexString.startsWith("0X")) {
+            hexStr = hexString.substring(2);
+        }
+        String[] hexParts = hexStr.split(" ");
+
+        byte[] bytes = new byte[hexParts.length];
+        char[] hexPart;
+        for (int i = 0; i < hexParts.length; ++i) {
+            hexPart = hexParts[i].toCharArray();
+            if (hexPart.length != 2) {
+                throw new IllegalArgumentException("Invalid hex string to convert");
+            }
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4)
+                + HEX_CHARS_STR.indexOf(hexPart[1]));
+        }
+
+        return bytes;
+    }
+
+    /**
+     * Convert bytes into format as:
+     * 02020080
+     * @param bytes The bytes
+     * @return The hex string
+     */
+    public static String bytesToHex(byte[] bytes) {
+        int len = bytes.length * 2;
+        char[] hexChars = new char[len];
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 2] = HEX_CHARS[v >>> 4];
+            hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
+        }
+
+        return new String(hexChars);
+    }
+
+    /**
+     * Convert hex string like follows into byte array
+     * 02020080
+     * @param hexString The hex string
+     * @return The bytes
+     */
+    public static byte[] hex2bytes(String hexString) {
+        hexString = hexString.toUpperCase();
+        int len = hexString.length() / 2;
+        byte[] bytes = new byte[len];
+        char[] hexChars = hexString.toCharArray();
+        for (int i = 0, j = 0; i < len; ++i) {
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4)
+                + HEX_CHARS_STR.indexOf(hexChars[j++]));
+        }
+
+        return bytes;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/IOUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/IOUtil.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/IOUtil.java
new file mode 100644
index 0000000..02d1531
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/IOUtil.java
@@ -0,0 +1,109 @@
+/**
+ *  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.asn1.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+
+/**
+ * Some IO and file related utilities.
+ */
+public final class IOUtil {
+    private IOUtil() { }
+
+    public static byte[] readInputStream(InputStream in) throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int length = 0;
+        while ((length = in.read(buffer)) != -1) {
+            baos.write(buffer, 0, length);
+        }
+        in.close();
+        return baos.toByteArray();
+    }
+
+    public static void readInputStream(InputStream in,
+                                       byte[] buf) throws IOException {
+        int toRead = buf.length;
+        int off = 0;
+        while (toRead > 0) {
+            int ret = in.read(buf, off, toRead);
+            if (ret < 0) {
+                throw new IOException("Bad inputStream, premature EOF");
+            }
+            toRead -= ret;
+            off += ret;
+        }
+        in.close();
+    }
+
+    /**
+     * Read an input stream and return the content as string assuming UTF8.
+     * @param in The input stream
+     * @return The content
+     * @throws IOException e
+     */
+    public static String readInput(InputStream in) throws IOException {
+        byte[] content = readInputStream(in);
+        return Utf8.toString(content);
+    }
+
+    /**
+     * Read a file and return the content as string assuming UTF8.
+     * @param file The file to read
+     * @return The content
+     * @throws IOException e
+     */
+    public static String readFile(File file) throws IOException {
+        long len = 0;
+        if (file.length() >= Integer.MAX_VALUE) {
+            throw new IOException("Too large file, unexpected!");
+        } else {
+            len = file.length();
+        }
+        byte[] buf = new byte[(int) len];
+
+        InputStream is = new FileInputStream(file);
+        readInputStream(is, buf);
+
+        return Utf8.toString(buf);
+    }
+
+    /**
+     * Write a file with the content assuming UTF8.
+     * @param content The content
+     * @param file The file to write
+     * @throws IOException e
+     */
+    public static void writeFile(String content, File file) throws IOException {
+        FileOutputStream outputStream = new FileOutputStream(file);
+        FileChannel fc = outputStream.getChannel();
+
+        ByteBuffer buffer = ByteBuffer.wrap(Utf8.toBytes(content));
+        fc.write(buffer);
+        outputStream.close();
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Utf8.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Utf8.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Utf8.java
new file mode 100644
index 0000000..d24b12b
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/util/Utf8.java
@@ -0,0 +1,34 @@
+/**
+ *  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.asn1.util;
+
+import java.nio.charset.StandardCharsets;
+
+public final class Utf8 {
+    private Utf8() { }
+
+    public static String toString(byte[] bytes) {
+        return new String(bytes, StandardCharsets.UTF_8);
+    }
+
+    public static byte[] toBytes(String s) {
+        return s.getBytes(StandardCharsets.UTF_8);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
index 8547cdd..c2d3a08 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
@@ -23,12 +23,21 @@ import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceOf;
 import org.apache.kerby.asn1.type.Asn1SetType;
 import org.apache.kerby.asn1.type.Asn1Tagging;
-import org.apache.kerby.asn1.type.Asn1VisibleString;
 import org.apache.kerby.asn1.type.Asn1TaggingSequence;
 import org.apache.kerby.asn1.type.Asn1TaggingSet;
-import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.*;
-import static org.apache.kerby.asn1.PersonnelRecord.ChildInformation.MyEnum.*;
-import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.*;
+import org.apache.kerby.asn1.type.Asn1VisibleString;
+
+import static org.apache.kerby.asn1.PersonnelRecord.ChildInformation.MyEnum.CHILD_NAME;
+import static org.apache.kerby.asn1.PersonnelRecord.ChildInformation.MyEnum.DATEOFBIRTH;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.CHILDREN;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.DATEOFHIRE;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.NAME;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.NAMEOFSPOUSE;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.NUMBER;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.TITLE;
+import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.FAMILYNAME;
+import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.GIVENNAME;
+import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.INITIAL;
 
 /**
  * Ref. X.690-0207(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
index 227579c..2f7dcf4 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Boolean.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1;
 
 import org.apache.kerby.asn1.type.Asn1Boolean;
+import org.apache.kerby.asn1.util.HexUtil;
 import org.junit.Test;
 
 import java.io.IOException;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
index ad4545c..8300f6e 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
@@ -28,8 +28,8 @@ import org.junit.rules.ExpectedException;
 import java.io.IOException;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 public class TestAsn1Flags {
   


[18/26] directory-kerby git commit: ASN1. Allowing to return a header

Posted by pl...@apache.org.
ASN1. Allowing to return a header


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/4c7a8c44
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/4c7a8c44
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/4c7a8c44

Branch: refs/heads/pkinit-support
Commit: 4c7a8c4411fb1d3d6f619b8379b75ea431e8da6c
Parents: 7c93f2e
Author: Kai Zheng <ka...@intel.com>
Authored: Thu Dec 3 22:00:21 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Thu Dec 3 22:00:21 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/Asn1Header.java  |  54 +++++++++
 .../java/org/apache/kerby/asn1/Asn1Reader.java  | 111 +++++++++++++++++++
 .../java/org/apache/kerby/asn1/Asn1Reader1.java |  47 ++++++++
 .../java/org/apache/kerby/asn1/Asn1Reader2.java |  62 +++++++++++
 .../java/org/apache/kerby/asn1/Asn1Util.java    |  81 --------------
 .../main/java/org/apache/kerby/asn1/Tag.java    |   9 +-
 .../org/apache/kerby/asn1/UniversalTag.java     |   4 +-
 .../org/apache/kerby/asn1/type/Asn1Eoc.java     |  54 +++++++++
 .../org/apache/kerby/asn1/type/Asn1Object.java  |  58 ++++------
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |  12 +-
 10 files changed, 361 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Header.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Header.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Header.java
new file mode 100644
index 0000000..0fbd047
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Header.java
@@ -0,0 +1,54 @@
+/**
+ *  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.asn1;
+
+import java.nio.ByteBuffer;
+
+public class Asn1Header {
+    private Tag tag;
+    private int length;
+    private ByteBuffer valueBuffer;
+
+    public Asn1Header(Tag tag, int length, ByteBuffer valueBuffer) {
+        this.tag = tag;
+        this.length = length;
+        this.valueBuffer = valueBuffer;
+    }
+
+    public Tag getTag() {
+        return tag;
+    }
+
+    public int getLength() {
+        return length;
+    }
+
+    public ByteBuffer getValueBuffer() {
+        return valueBuffer;
+    }
+
+    public boolean isEOC() {
+        return length == 0 && tag.isEOC();
+    }
+
+    public boolean isDefinitiveLength() {
+        return length != -1;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java
new file mode 100644
index 0000000..9ee9819
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader.java
@@ -0,0 +1,111 @@
+/**
+ *  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.asn1;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * ASN1 reader from a byte buffer.
+ */
+public abstract class Asn1Reader {
+    protected ByteBuffer buffer;
+
+    public Asn1Reader(ByteBuffer buffer) {
+        this.buffer = buffer;
+    }
+
+    public ByteBuffer getBuffer() {
+        return buffer;
+    }
+
+    public Asn1Header readHeader() throws IOException {
+        Tag tag = readTag();
+        int valueLength = readLength();
+        Asn1Header header = new Asn1Header(tag, valueLength,
+            getValueBuffer(valueLength));
+        return header;
+    }
+
+    protected abstract ByteBuffer getValueBuffer(int valueLength);
+
+    protected abstract byte readByte() throws IOException;
+
+    private Tag readTag() throws IOException {
+        int tagFlags = readTagFlags();
+        int tagNo = readTagNo(tagFlags);
+        return new Tag(tagFlags, tagNo);
+    }
+
+    private int readTagFlags() throws IOException {
+        int tagFlags = readByte() & 0xff;
+        return tagFlags;
+    }
+
+    private int readTagNo(int tagFlags) throws IOException {
+        int tagNo = tagFlags & 0x1f;
+
+        if (tagNo == 0x1f) {
+            tagNo = 0;
+
+            int b = readByte() & 0xff;
+            if ((b & 0x7f) == 0) {
+                throw new IOException("Invalid high tag number found");
+            }
+
+            while (b >= 0 && (b & 0x80) != 0) {
+                tagNo |= b & 0x7f;
+                tagNo <<= 7;
+                b = readByte();
+            }
+
+            tagNo |= b & 0x7f;
+        }
+
+        return tagNo;
+    }
+
+    private int readLength() throws IOException {
+        int result = readByte() & 0xff;
+        if (result == 0x80) {
+            return -1; // non-definitive length
+        }
+
+        if (result > 127) {
+            int length = result & 0x7f;
+            if (length > 4) {
+                throw new IOException("Bad length of more than 4 bytes: " + length);
+            }
+
+            result = 0;
+            int tmp;
+            for (int i = 0; i < length; i++) {
+                tmp = readByte() & 0xff;
+                result = (result << 8) + tmp;
+            }
+        }
+
+        if (result < 0) {
+            throw new IOException("Invalid length " + result);
+        }
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java
new file mode 100644
index 0000000..291756d
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader1.java
@@ -0,0 +1,47 @@
+/**
+ *  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.asn1;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * ASN1 reader for stateful reading.
+ */
+public final class Asn1Reader1 extends Asn1Reader {
+
+    public Asn1Reader1(ByteBuffer buffer) {
+        super(buffer);
+    }
+
+    @Override
+    protected byte readByte() throws IOException {
+        return buffer.get();
+    }
+
+    @Override
+    protected ByteBuffer getValueBuffer(int valueLength) {
+        ByteBuffer result = buffer.duplicate();
+        result.limit(buffer.position() + valueLength);
+        buffer.position(buffer.position() + valueLength);
+
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java
new file mode 100644
index 0000000..08e3472
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Reader2.java
@@ -0,0 +1,62 @@
+/**
+ *  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.asn1;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * ASN1 reader for positional reading.
+ */
+public final class Asn1Reader2 extends Asn1Reader {
+    private int position;
+
+    public Asn1Reader2(ByteBuffer buffer, int position) {
+        super(buffer);
+        this.position = position;
+    }
+
+    public Asn1Reader2(ByteBuffer buffer) {
+        super(buffer);
+        this.position = buffer.position();
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+    public void setPosition(int position) {
+        this.position = position;
+    }
+
+    public boolean available() {
+        return position < buffer.limit();
+    }
+
+    @Override
+    protected ByteBuffer getValueBuffer(int valueLength) {
+        return buffer;
+    }
+
+    @Override
+    protected byte readByte() throws IOException {
+        return buffer.get(position++);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
index caa50f3..315cf28 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1;
 
-import java.io.IOException;
 import java.nio.ByteBuffer;
 
 /**
@@ -110,86 +109,6 @@ public final class Asn1Util {
         }
     }
 
-    public static Tag readTag(ByteBuffer buffer) throws IOException {
-        int tagFlags = readTagFlags(buffer);
-        int tagNo = readTagNo(buffer, tagFlags);
-        return new Tag(tagFlags, tagNo);
-    }
-
-    private static int readTagFlags(ByteBuffer buffer) throws IOException {
-        int tagFlags = buffer.get() & 0xff;
-        if (tagFlags == 0) {
-            throw new IOException("Bad tag 0 found");
-        }
-        return tagFlags;
-    }
-
-    private static int readTagNo(ByteBuffer buffer, int tagFlags) throws IOException {
-        int tagNo = tagFlags & 0x1f;
-
-        if (tagNo == 0x1f) {
-            tagNo = 0;
-
-            int b = buffer.get() & 0xff;
-            if ((b & 0x7f) == 0) {
-                throw new IOException("Invalid high tag number found");
-            }
-
-            while (b >= 0 && (b & 0x80) != 0) {
-                tagNo |= b & 0x7f;
-                tagNo <<= 7;
-                b = buffer.get();
-            }
-
-            tagNo |= b & 0x7f;
-        }
-
-        return tagNo;
-    }
-
-    public static int readLength(ByteBuffer buffer) throws IOException {
-        int result = buffer.get() & 0xff;
-        if (result == 0x80) {
-            return -1; // non-definitive length
-        }
-
-        if (result > 127) {
-            int length = result & 0x7f;
-            if (length > 4) {
-                throw new IOException("Bad length of more than 4 bytes: " + length);
-            }
-
-            result = 0;
-            int tmp;
-            for (int i = 0; i < length; i++) {
-                tmp = buffer.get() & 0xff;
-                result = (result << 8) + tmp;
-            }
-        }
-
-        if (result < 0) {
-            throw new IOException("Invalid length " + result);
-        }
-
-        if (result > buffer.remaining()) {
-            throw new IOException("Corrupt stream - less data "
-                + buffer.remaining() + " than expected " + result);
-        }
-
-        return result;
-    }
-
-    public static ByteBuffer dupWithLength(ByteBuffer buffer, int length) {
-        try {
-            ByteBuffer result = buffer.duplicate();
-            result.limit(buffer.position() + length);
-            buffer.position(buffer.position() + length);
-            return result;
-        } catch (Exception e) {
-            throw e;
-        }
-    }
-
     public static byte[] readAllLeftBytes(ByteBuffer buffer) {
         byte[] result = new byte[buffer.remaining()];
         buffer.get(result);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
----------------------------------------------------------------------
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 bea843f..2cf5e6b 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
@@ -81,6 +81,10 @@ public class Tag {
         return UniversalTag.UNKNOWN;
     }
 
+    public boolean isEOC() {
+        return universalTag() == UniversalTag.EOC;
+    }
+
     public boolean isUniversal() {
         return tagClass().isUniversal();
     }
@@ -124,10 +128,7 @@ public class Tag {
 
     @Override
     public String toString() {
-        return "Tag["
-            + "tagFlags=" + tagFlags
-            + ", tagNo=" + tagNo
-            + ']';
+        return tagNo >= 0x1F ? "N/A" : "" + (tagFlags | tagNo);
     }
 
     public static Tag newAppTag(int tagNo) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
----------------------------------------------------------------------
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 e78b50e..0a2eef7 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
@@ -28,7 +28,7 @@ public enum UniversalTag {
     UNKNOWN             (-1),
     CHOICE              (-2),   // Only for internal using
     ANY                 (-3),   // Only for internal using
-    BER_UNDEFINED_LENGTH(0),    // Used to encode undefined length with BER
+    EOC                 (0),    // End of content, use by BER
     BOOLEAN             (0x01),
     INTEGER             (0x02),
     BIT_STRING          (0x03),
@@ -87,7 +87,7 @@ public enum UniversalTag {
      */
     public static UniversalTag fromValue(int value) {
         switch (value) {
-            case 0x00 : return BER_UNDEFINED_LENGTH;
+            case 0x00 : return EOC;
             case 0x01 : return BOOLEAN;
             case 0x02 : return INTEGER;
             case 0x03 : return BIT_STRING;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Eoc.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Eoc.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Eoc.java
new file mode 100644
index 0000000..fe80979
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Eoc.java
@@ -0,0 +1,54 @@
+/**
+ *  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.asn1.type;
+
+import org.apache.kerby.asn1.UniversalTag;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * To represent Asn1 End Of Content type
+ */
+public final class Asn1Eoc extends Asn1Simple<Object> {
+    public static final Asn1Eoc INSTANCE = new Asn1Eoc();
+    private static final byte[]  EMPTY_BYTES = new byte[0];
+
+    private Asn1Eoc() {
+        super(UniversalTag.EOC, null);
+    }
+
+    @Override
+    protected byte[] encodeBody() {
+        return EMPTY_BYTES;
+    }
+
+    @Override
+    protected int encodingBodyLength() {
+        return 0;
+    }
+
+    @Override
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        if (content.remaining() != 0) {
+            throw new IOException("Unexpected bytes found for EOC");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 0a46d37..099bf3f 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
@@ -19,6 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Header;
+import org.apache.kerby.asn1.Asn1Reader1;
 import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
@@ -198,19 +200,11 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public void decode(ByteBuffer content) throws IOException {
-        Tag tmpTag = Asn1Util.readTag(content);
-        int length = Asn1Util.readLength(content);
+        Asn1Reader1 reader = new Asn1Reader1(content);
+        Asn1Header header = reader.readHeader();
 
-        ByteBuffer valueBuffer;
-        if (length == -1) {
-            valueBuffer = content;
-            useDefinitiveLength(false);
-        } else {
-            valueBuffer = Asn1Util.dupWithLength(content, length);
-            useDefinitiveLength(true);
-        }
-
-        decode(tmpTag, valueBuffer);
+        useDefinitiveLength(header.isDefinitiveLength());
+        decode(header.getTag(), header.getValueBuffer());
     }
 
     public void decode(Tag tag, ByteBuffer content) throws IOException {
@@ -262,19 +256,11 @@ public abstract class Asn1Object implements Asn1Type {
     @Override
     public void taggedDecode(ByteBuffer content,
                              TaggingOption taggingOption) throws IOException {
-        Tag taggingTag = Asn1Util.readTag(content);
-        int taggingLength = Asn1Util.readLength(content);
-
-        ByteBuffer valueBuffer;
-        if (taggingLength == -1) {
-            valueBuffer = content;
-            useDefinitiveLength(false);
-        } else {
-            valueBuffer = Asn1Util.dupWithLength(content, taggingLength);
-            useDefinitiveLength(true);
-        }
+        Asn1Reader1 reader = new Asn1Reader1(content);
+        Asn1Header header = reader.readHeader();
 
-        taggedDecode(taggingTag, valueBuffer, taggingOption);
+        useDefinitiveLength(header.isDefinitiveLength());
+        taggedDecode(header.getTag(), header.getValueBuffer(), taggingOption);
     }
 
     protected void taggedDecode(Tag taggingTag, ByteBuffer content,
@@ -292,21 +278,17 @@ public abstract class Asn1Object implements Asn1Type {
         }
     }
 
+    public static Asn1Header readHeader(ByteBuffer content) throws IOException {
+        Asn1Reader1 reader = new Asn1Reader1(content);
+        return reader.readHeader();
+    }
+
     public static Asn1Item decodeOne(ByteBuffer content) throws IOException {
-        Tag tmpTag = Asn1Util.readTag(content);
-        int length = Asn1Util.readLength(content);
-
-        Asn1Item result;
-        ByteBuffer valueBuffer;
-        if (length == -1) {
-            result = new Asn1Item(tmpTag);
-            result.useDefinitiveLength(false);
-            result.setBodyContent(content);
-        } else {
-            valueBuffer = Asn1Util.dupWithLength(content, length);
-            result = new Asn1Item(tmpTag, valueBuffer);
-            result.useDefinitiveLength(true);
-        }
+        Asn1Reader1 reader = new Asn1Reader1(content);
+        Asn1Header header = reader.readHeader();
+
+        Asn1Item result = new Asn1Item(header.getTag(), header.getValueBuffer());
+        result.useDefinitiveLength(header.isDefinitiveLength());
 
         return result;
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4c7a8c44/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
index 5157cdc..96819b8 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
@@ -19,8 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb;
 
-import org.apache.kerby.asn1.Asn1Util;
+import org.apache.kerby.asn1.Asn1Header;
 import org.apache.kerby.asn1.Tag;
+import org.apache.kerby.asn1.type.Asn1Object;
 import org.apache.kerby.asn1.type.Asn1Type;
 import org.apache.kerby.kerberos.kerb.type.ap.ApReq;
 import org.apache.kerby.kerberos.kerb.type.base.KrbError;
@@ -63,10 +64,9 @@ public class KrbCodec {
         return (T) implObj;
     }
 
-    public static KrbMessage decodeMessage(ByteBuffer byteBuffer) throws IOException {
-        Tag tag = Asn1Util.readTag(byteBuffer);
-        int length = Asn1Util.readLength(byteBuffer);
-        ByteBuffer valueBuffer = Asn1Util.dupWithLength(byteBuffer, length);
+    public static KrbMessage decodeMessage(ByteBuffer buffer) throws IOException {
+        Asn1Header header = Asn1Object.readHeader(buffer);
+        Tag tag = header.getTag();
 
         KrbMessage msg;
         KrbMessageType msgType = KrbMessageType.fromValue(tag.tagNo());
@@ -87,7 +87,7 @@ public class KrbCodec {
         } else {
             throw new IOException("To be supported krb message type with tag: " + tag);
         }
-        msg.decode(tag, valueBuffer);
+        msg.decode(tag, header.getValueBuffer());
 
         return msg;
     }


[06/26] directory-kerby git commit: ASN1. Getting rid of LimitedByteBuffer, use ByteBuffer directly

Posted by pl...@apache.org.
ASN1. Getting rid of LimitedByteBuffer, use ByteBuffer directly


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/a74ee67a
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/a74ee67a
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/a74ee67a

Branch: refs/heads/pkinit-support
Commit: a74ee67ab49a1d7e4ac922d393ef2c3914bf305e
Parents: 8b0ef71
Author: Kai Zheng <ka...@intel.com>
Authored: Tue Dec 1 14:51:31 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Tue Dec 1 14:51:31 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kerby/asn1/Asn1InputBuffer.java  |  44 +-----
 .../apache/kerby/asn1/LimitedByteBuffer.java    | 121 ----------------
 .../org/apache/kerby/asn1/type/Asn1Any.java     |  44 ++++--
 .../apache/kerby/asn1/type/Asn1BmpString.java   |   6 +-
 .../org/apache/kerby/asn1/type/Asn1Boolean.java |   6 +-
 .../org/apache/kerby/asn1/type/Asn1Choice.java  |   5 +-
 .../apache/kerby/asn1/type/Asn1Collection.java  |  25 ++--
 .../kerby/asn1/type/Asn1CollectionType.java     |  18 ++-
 .../org/apache/kerby/asn1/type/Asn1Item.java    |  73 +++++-----
 .../org/apache/kerby/asn1/type/Asn1Null.java    |   6 +-
 .../org/apache/kerby/asn1/type/Asn1Object.java  | 141 +++++++++++--------
 .../apache/kerby/asn1/type/Asn1OctetString.java |   6 +-
 .../org/apache/kerby/asn1/type/Asn1Simple.java  |   5 +-
 .../org/apache/kerby/asn1/type/Asn1Tagging.java |   3 +-
 .../kerby/asn1/type/TaggingCollection.java      |   3 +-
 .../apache/kerby/asn1/TestAsn1Collection.java   |   3 +-
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |   8 +-
 .../kerby/kerberos/kerb/type/base/KrbToken.java |  11 +-
 18 files changed, 215 insertions(+), 313 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
index 9d90319..62a7d75 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
@@ -32,14 +32,14 @@ import java.nio.ByteBuffer;
  * and read until exhausted.
  */
 public class Asn1InputBuffer {
-    private final LimitedByteBuffer limitedBuffer;
+    private final ByteBuffer decodeBuffer;
 
     /**
      * Constructor with bytes.
      * @param bytes The bytes
      */
     public Asn1InputBuffer(byte[] bytes) {
-        this(new LimitedByteBuffer(bytes));
+        this(ByteBuffer.wrap(bytes));
     }
 
     /**
@@ -47,15 +47,7 @@ public class Asn1InputBuffer {
      * @param byteBuffer The byte buffer
      */
     public Asn1InputBuffer(ByteBuffer byteBuffer) {
-        this(new LimitedByteBuffer(byteBuffer));
-    }
-
-    /**
-     * Constructor with LimitedByteBuffer.
-     * @param limitedByteBuffer The limited byte buffer
-     */
-    public Asn1InputBuffer(LimitedByteBuffer limitedByteBuffer) {
-        this.limitedBuffer = limitedByteBuffer;
+        this.decodeBuffer = byteBuffer;
     }
 
     /**
@@ -65,10 +57,10 @@ public class Asn1InputBuffer {
      * @throws IOException e
      */
     public Asn1Type read() throws IOException {
-        if (!limitedBuffer.available()) {
+        if (decodeBuffer.remaining() < 1) {
             return null;
         }
-        Asn1Item one = Asn1Object.decodeOne(limitedBuffer);
+        Asn1Item one = Asn1Object.decodeOne(decodeBuffer);
         if (one.isSimple()) {
             one.decodeValueAsSimple();
         } else if (one.isCollection()) {
@@ -79,30 +71,4 @@ public class Asn1InputBuffer {
         }
         return one;
     }
-
-    /**
-     * Read from bytes.
-     *
-     * @param bytes The bytes
-     * @throws IOException e
-     */
-    public void readBytes(byte[] bytes) throws IOException {
-        limitedBuffer.readBytes(bytes);
-    }
-
-    public byte[] readAllLeftBytes() throws IOException {
-        return limitedBuffer.readAllLeftBytes();
-    }
-
-    public void skipNext() throws IOException {
-        if (limitedBuffer.available()) {
-            Asn1Object.skipOne(limitedBuffer);
-        }
-    }
-
-    public void skipBytes(int len) throws IOException {
-        if (limitedBuffer.available()) {
-            limitedBuffer.skip(len);
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/LimitedByteBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/LimitedByteBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/LimitedByteBuffer.java
deleted file mode 100644
index 2cb04ef..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/LimitedByteBuffer.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- *  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.asn1;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-public class LimitedByteBuffer {
-    private final ByteBuffer byteBuffer;
-    private final int limit;
-    private int startOffset;
-
-    public LimitedByteBuffer(byte[] bytes) {
-        this.byteBuffer = ByteBuffer.wrap(bytes);
-        this.limit = bytes.length;
-        this.startOffset = 0;
-    }
-
-    public LimitedByteBuffer(ByteBuffer byteBuffer) {
-        this(byteBuffer, byteBuffer.limit());
-    }
-
-    public LimitedByteBuffer(ByteBuffer byteBuffer, int limit) {
-        this.byteBuffer = byteBuffer;
-        this.limit = limit;
-        this.startOffset = byteBuffer.position();
-    }
-
-    public LimitedByteBuffer(LimitedByteBuffer other, int limit) {
-        if (limit > other.hasLeft()) {
-            throw new IllegalArgumentException("limit is too large, out of bound");
-        }
-        this.byteBuffer = other.byteBuffer.duplicate();
-        this.limit = limit;
-        this.startOffset = byteBuffer.position();
-    }
-
-    public boolean available() {
-        return byteBuffer.hasRemaining()
-                && byteBuffer.position() - startOffset < limit;
-    }
-
-    public long hasRead() {
-        return byteBuffer.position() - startOffset;
-    }
-    public long hasLeft() {
-        return limit - hasRead();
-    }
-
-    public byte readByte() throws IOException {
-        if (!available()) {
-            throw new IOException("Buffer EOF");
-        }
-        return byteBuffer.get();
-    }
-
-    public byte[] readAllLeftBytes() throws IOException {
-        return readBytes((int) hasLeft());
-    }
-
-    public void skip(int len) throws IOException {
-        checkLen(len);
-        int newPos = byteBuffer.position() + len;
-        byteBuffer.position(newPos);
-    }
-
-    public byte[] readBytes(int len) throws IOException {
-        checkLen(len);
-
-        byte[] bytes = new byte[len];
-        if (len > 0) {
-            byteBuffer.get(bytes);
-        }
-        return bytes;
-    }
-
-    private void checkLen(int len) throws IOException {
-        if (len < 0) {
-            throw new IllegalArgumentException("Bad argument len: " + len);
-        }
-        if (len > 0) {
-            if (!available()) {
-                throw new IOException("Buffer EOF");
-            }
-            if (hasLeft() < len) {
-                throw new IOException("Out of Buffer");
-            }
-        }
-    }
-
-    public void readBytes(byte[] bytes) throws IOException {
-        if (bytes == null) {
-            throw new IllegalArgumentException("Bad argument bytes: null");
-        }
-        if (!available()) {
-            throw new IOException("Buffer EOF");
-        }
-        if (hasLeft() < bytes.length) {
-            throw new IOException("Out of Buffer");
-        }
-
-        byteBuffer.get(bytes);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
index 0506edd..617ec12 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
+import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
@@ -32,7 +32,8 @@ import java.nio.ByteBuffer;
  * Note, this is far from complete, as most of parent methods are to override.
  */
 public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
-    private Asn1Type field;
+    private Asn1FieldInfo fieldInfo;
+    private Asn1Item field;
 
     public Asn1Any() {
         super(UniversalTag.ANY);
@@ -44,9 +45,14 @@ public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
         setValue(anyValue);
     }
 
-    // For decoding phase, value may be an Asn1Item, not fully decoded.
-    public void setItem(Asn1Type value) {
-        this.field = value;
+    // For decoding phase, value be an Asn1Item, not fully decoded.
+    public void setField(Asn1Item field) {
+        this.field = field;
+    }
+
+    // For decoding phase.
+    public void setFieldInfo(Asn1FieldInfo fieldInfo) {
+        this.fieldInfo = fieldInfo;
     }
 
     // For decoding phase.
@@ -64,15 +70,35 @@ public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
         ((AbstractAsn1Type<?>) getValue()).encodeBody(buffer);
     }
 
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
+    protected void decodeBody(ByteBuffer content) throws IOException {
         // Not used
     }
 
     protected <T extends Asn1Type> T getValueAs(Class<T> t) {
         Asn1Type value = getValue();
-        if (value == null) {
-            return null;
+        if (value != null) {
+            return (T) value;
+        }
+
+        T result;
+        try {
+            result = t.newInstance();
+        } catch (Exception e) {
+            throw new RuntimeException("No default constructor?", e);
         }
-        return (T) value;
+
+        try {
+            if (field.isContextSpecific()) {
+                field.decodeValueWith(result,
+                    fieldInfo.getTaggingOption());
+            } else {
+                field.decodeValueWith(result);
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("Fully decoding failed", e);
+        }
+
+        return result;
     }
 }
+

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BmpString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BmpString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BmpString.java
index 5f1712d..c915e94 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BmpString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BmpString.java
@@ -19,10 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 
 public class Asn1BmpString extends Asn1Simple<String> {
     public Asn1BmpString() {
@@ -61,8 +61,8 @@ public class Asn1BmpString extends Asn1Simple<String> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        if (content.hasLeft() % 2 != 0) {
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        if (content.remaining() % 2 != 0) {
             throw new IOException("Bad stream, BMP string expecting multiple of 2 bytes");
         }
         super.decodeBody(content);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Boolean.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Boolean.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Boolean.java
index 7b9be41..319011d 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Boolean.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Boolean.java
@@ -19,10 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 
 /**
  * ASN1 Boolean type
@@ -55,8 +55,8 @@ public class Asn1Boolean extends Asn1Simple<Boolean> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        if (content.hasLeft() != 1) {
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        if (content.remaining() != 1) {
             throw new IOException("More than 1 byte found for Boolean");
         }
         super.decodeBody(content);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
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 a2a9504..91fd54e 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
@@ -20,7 +20,6 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -72,7 +71,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
     }
 
     @Override
-    protected void decode(LimitedByteBuffer content) throws IOException {
+    public void decode(ByteBuffer content) throws IOException {
         int foundPos = -1;
         Asn1Item item = decodeOne(content);
         for (int i = 0; i < fieldInfos.length; ++i) {
@@ -107,7 +106,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
         fields[foundPos] = item.getValue();
     }
 
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
+    protected void decodeBody(ByteBuffer content) throws IOException {
         // Not used
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
index 52c46c0..94bd2f5 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -32,6 +31,7 @@ import java.util.List;
  * ASN1 complex type, may be better named.
  */
 public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
+    private boolean lazy = false;
 
     public Asn1Collection(UniversalTag universalTag) {
         super(universalTag);
@@ -39,6 +39,14 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
         usePrimitive(false);
     }
 
+    public void setLazy(boolean lazy) {
+        this.lazy = lazy;
+    }
+
+    public boolean isLazy() {
+        return lazy;
+    }
+
     public void addItem(Asn1Type value) {
         if (value instanceof Asn1Item) {
             getValue().add((Asn1Item) value);
@@ -74,13 +82,14 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        while (content.available()) {
-            Asn1Type aValue = decodeOne(content);
-            if (aValue != null) {
-                addItem(aValue);
-            } else {
-                throw new RuntimeException("Unexpected running into here");
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        while (content.remaining() > 0) {
+            Asn1Item item = decodeOne(content);
+            if (item != null) {
+                if (item.isSimple() && !isLazy()) {
+                    item.decodeValueAsSimple();
+                }
+                addItem(item);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 fc45949..bd3040e 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
@@ -20,7 +20,6 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -76,10 +75,11 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
+    protected void decodeBody(ByteBuffer content) throws IOException {
         initFields();
 
         Asn1Collection coll = createCollection();
+        coll.setLazy(true);
         coll.decode(tag(), content);
 
         int lastPos = -1, foundPos = -1;
@@ -99,17 +99,21 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
             if (foundPos == -1) {
                 throw new RuntimeException("Unexpected item with tag: " + item.tag());
             }
+            lastPos = foundPos;
 
-            if (!item.isFullyDecoded()) {
-                AbstractAsn1Type<?> fieldValue = (AbstractAsn1Type<?>) fields[foundPos];
+            AbstractAsn1Type<?> fieldValue = (AbstractAsn1Type<?>) fields[foundPos];
+            if (fieldValue instanceof Asn1Any) {
+                Asn1Any any = (Asn1Any) fieldValue;
+                any.setField(item);
+                any.setFieldInfo(fieldInfos[foundPos]);
+            } else {
                 if (item.isContextSpecific()) {
-                    item.decodeValueWith(fieldValue, fieldInfos[foundPos].getTaggingOption());
+                    item.decodeValueWith(fieldValue,
+                        fieldInfos[foundPos].getTaggingOption());
                 } else {
                     item.decodeValueWith(fieldValue);
                 }
             }
-            fields[foundPos] = item.getValue();
-            lastPos = foundPos;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
index a7924d8..efd0673 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
@@ -20,7 +20,6 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1Factory;
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
 
@@ -30,28 +29,40 @@ import java.nio.ByteBuffer;
 /**
  * Asn1Item serves two purposes:
  * 1. Wrapping an existing Asn1Type value for Asn1Collection;
- * 2. Wrapping a half decoded value whose body content is left to be decoded later when appropriate.
- * Why not fully decoded at once? Lazy and decode on demand for collection, or impossible due to lacking
- * key parameters, like implicit encoded value for tagged value.
+ * 2. Wrapping a half decoded value whose body content is left to be decoded
+ * later when appropriate.
+ * Why not fully decoded at once? Lazy and decode on demand for collection, or
+ * impossible due to lacking key parameters, like implicit encoded value for
+ * tagged value.
  *
- * For not fully decoded value, you tell your case using isSimple/isCollection/isTagged/isContextSpecific etc.,
- * then call decodeValueAsSimple/decodeValueAsCollection/decodeValueAsImplicitTagged/decodeValueAsExplicitTagged etc.
- * to decode it fully. Or if you have already derived the value holder or the holder type, you can use decodeValueWith
- * or decodeValueAs with your holder or hodler type.
+ * For not fully decoded value, you tell your case using isSimple/isCollection/
+ * isTagged/isContextSpecific etc., then call decodeValueAsSimple/
+ * decodeValueAsCollection/decodeValueAsImplicitTagged/decodeValueAsExplicitTagged etc.
+ * to decode it fully. Or if you have already derived the value holder or
+ * the holder type, you can use decodeValueWith or decodeValueAs with your
+ * holder or hodler type.
  */
 public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
-    private LimitedByteBuffer bodyContent;
+    private ByteBuffer bodyContent;
 
     public Asn1Item(Asn1Type value) {
         super(value.tag(), value);
     }
 
-    public Asn1Item(Tag tag, LimitedByteBuffer bodyContent) {
+    public Asn1Item(Tag tag) {
         super(tag);
+    }
+
+    public Asn1Item(Tag tag, ByteBuffer bodyContent) {
+        super(tag);
+        this.bodyContent = bodyContent;
+    }
+
+    public void setBodyContent(ByteBuffer bodyContent) {
         this.bodyContent = bodyContent;
     }
 
-    public LimitedByteBuffer getBodyContent() {
+    public ByteBuffer getBodyContent() {
         return bodyContent;
     }
 
@@ -60,24 +71,18 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
         if (getValue() != null) {
             return ((AbstractAsn1Type<?>) getValue()).encodingBodyLength();
         }
-        return (int) bodyContent.hasLeft();
+        return (int) bodyContent.remaining();
     }
 
     @Override
     protected void encodeBody(ByteBuffer buffer) {
         if (getValue() != null) {
-            ((AbstractAsn1Type<?>) getValue()).encodeBody(buffer);
-        } else {
-            try {
-                buffer.put(bodyContent.readAllLeftBytes());
-            } catch (IOException e) {
-                throw new RuntimeException("Failed to read all left bytes from body content", e);
-            }
+            ((Asn1Object) getValue()).encodeBody(buffer);
         }
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer bodyContent) throws IOException {
+    protected void decodeBody(ByteBuffer bodyContent) throws IOException {
         this.bodyContent = bodyContent;
     }
 
@@ -90,10 +95,12 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
             return;
         }
         if (!isSimple()) {
-            throw new IllegalArgumentException("Attempting to decode non-simple value as simple");
+            throw new IllegalArgumentException(
+                "Attempting to decode non-simple value as simple");
         }
 
-        Asn1Type value = Asn1Factory.create(tagNo());
+        Asn1Object value = (Asn1Object) Asn1Factory.create(tagNo());
+        value.useDefinitiveLength(isDefinitiveLength());
         decodeValueWith(value);
     }
 
@@ -102,10 +109,12 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
             return;
         }
         if (!isCollection()) {
-            throw new IllegalArgumentException("Attempting to decode non-collection value as collection");
+            throw new IllegalArgumentException(
+                "Attempting to decode non-collection value as collection");
         }
 
         Asn1Type value = Asn1Factory.create(tagNo());
+        value.useDefinitiveLength(isDefinitiveLength());
         decodeValueWith(value);
     }
 
@@ -114,30 +123,24 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
         try {
             value = type.newInstance();
         } catch (Exception e) {
-            throw new RuntimeException("Invalid type: " + type.getCanonicalName(), e);
+            throw new RuntimeException("Invalid type: "
+                + type.getCanonicalName(), e);
         }
         decodeValueWith(value);
     }
 
     public void decodeValueWith(Asn1Type value) throws IOException {
         setValue(value);
+        value.useDefinitiveLength(isDefinitiveLength());
         ((AbstractAsn1Type<?>) value).decode(tag(), bodyContent);
     }
 
-    private void decodeValueWith(Asn1Item taggedValue) throws IOException {
-        taggedValue.decodeValueAsSimple();
-        if (taggedValue.isFullyDecoded()) {
-            setValue(taggedValue.getValue());
-        } else {
-            setValue(taggedValue);
-        }
-    }
-
     public void decodeValueWith(Asn1Type value, TaggingOption taggingOption) throws IOException {
         if (!isTagged()) {
-            throw new IllegalArgumentException("Attempting to decode non-tagged value using tagging way");
+            throw new IllegalArgumentException(
+                "Attempting to decode non-tagged value using tagging way");
         }
-        ((AbstractAsn1Type<?>) value).taggedDecode(tag(), getBodyContent(), taggingOption);
+        ((Asn1Object) value).taggedDecode(tag(), getBodyContent(), taggingOption);
         setValue(value);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
index 8574061..371553d 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
@@ -19,10 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 
 /**
  * The Asn1 Null type
@@ -46,8 +46,8 @@ public class Asn1Null extends Asn1Simple<Object> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        if (content.hasLeft() != 0) {
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        if (content.remaining() != 0) {
             throw new IOException("Unexpected bytes found for NULL");
         }
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 aa9ebe2..71d3af0 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
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
@@ -157,12 +156,7 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public void decode(byte[] content) throws IOException {
-        decode(new LimitedByteBuffer(content));
-    }
-
-    @Override
-    public void decode(ByteBuffer content) throws IOException {
-        decode(new LimitedByteBuffer(content));
+        decode(ByteBuffer.wrap(content));
     }
 
     @Override
@@ -201,14 +195,24 @@ public abstract class Asn1Object implements Asn1Type {
 
     protected abstract int encodingBodyLength();
 
-    protected void decode(LimitedByteBuffer content) throws IOException {
+    @Override
+    public void decode(ByteBuffer content) throws IOException {
         Tag tmpTag = readTag(content);
         int length = readLength(content);
 
-        decode(tmpTag, new LimitedByteBuffer(content, length));
+        ByteBuffer valueBuffer;
+        if (length == -1) {
+            valueBuffer = content;
+            useDefinitiveLength(false);
+        } else {
+            valueBuffer = dupWithLength(content, length);
+            useDefinitiveLength(true);
+        }
+
+        decode(tmpTag, valueBuffer);
     }
 
-    public void decode(Tag tag, LimitedByteBuffer content) throws IOException {
+    public void decode(Tag tag, ByteBuffer content) throws IOException {
         if (!tag().equals(tag)) {
             throw new IOException("Unexpected tag " + tag
                     + ", expecting " + tag());
@@ -217,7 +221,7 @@ public abstract class Asn1Object implements Asn1Type {
         decodeBody(content);
     }
 
-    protected abstract void decodeBody(LimitedByteBuffer content) throws IOException;
+    protected abstract void decodeBody(ByteBuffer content) throws IOException;
 
     protected int taggedEncodingLength(TaggingOption taggingOption) {
         int taggingTagNo = taggingOption.getTagNo();
@@ -257,20 +261,22 @@ public abstract class Asn1Object implements Asn1Type {
     @Override
     public void taggedDecode(ByteBuffer content,
                              TaggingOption taggingOption) throws IOException {
-        LimitedByteBuffer limitedBuffer = new LimitedByteBuffer(content);
-        taggedDecode(limitedBuffer, taggingOption);
-    }
-
-    protected void taggedDecode(LimitedByteBuffer content,
-                                TaggingOption taggingOption) throws IOException {
         Tag taggingTag = readTag(content);
         int taggingLength = readLength(content);
-        LimitedByteBuffer newContent = new LimitedByteBuffer(content, taggingLength);
 
-        taggedDecode(taggingTag, newContent, taggingOption);
+        ByteBuffer valueBuffer;
+        if (taggingLength == -1) {
+            valueBuffer = content;
+            useDefinitiveLength(false);
+        } else {
+            valueBuffer = dupWithLength(content, taggingLength);
+            useDefinitiveLength(true);
+        }
+
+        taggedDecode(taggingTag, valueBuffer, taggingOption);
     }
 
-    protected void taggedDecode(Tag taggingTag, LimitedByteBuffer content,
+    protected void taggedDecode(Tag taggingTag, ByteBuffer content,
                                 TaggingOption taggingOption) throws IOException {
         Tag expectedTaggingTagFlags = taggingOption.getTag(!isPrimitive());
         if (!expectedTaggingTagFlags.equals(taggingTag)) {
@@ -285,29 +291,23 @@ public abstract class Asn1Object implements Asn1Type {
         }
     }
 
-    public static Asn1Item decodeOne(LimitedByteBuffer content) throws IOException {
+    public static Asn1Item decodeOne(ByteBuffer content) throws IOException {
         Tag tmpTag = readTag(content);
         int length = readLength(content);
-        if (length < 0) {
-            throw new IOException("Unexpected length");
-        }
-        LimitedByteBuffer valueContent = new LimitedByteBuffer(content, length);
-        content.skip(length);
 
-        Asn1Item result = new Asn1Item(tmpTag, valueContent);
-        if (result.isSimple()) {
-            result.decodeValueAsSimple();
+        Asn1Item result;
+        ByteBuffer valueBuffer;
+        if (length == -1) {
+            result = new Asn1Item(tmpTag);
+            result.useDefinitiveLength(false);
+            result.setBodyContent(content);
+        } else {
+            valueBuffer = dupWithLength(content, length);
+            result = new Asn1Item(tmpTag, valueBuffer);
+            result.useDefinitiveLength(true);
         }
-        return result;
-    }
 
-    public static void skipOne(LimitedByteBuffer content) throws IOException {
-        readTag(content);
-        int length = readLength(content);
-        if (length < 0) {
-            throw new IOException("Unexpected length");
-        }
-        content.skip(length);
+        return result;
     }
 
     public static int lengthOfBodyLength(int bodyLength) {
@@ -389,27 +389,27 @@ public abstract class Asn1Object implements Asn1Type {
         }
     }
 
-    public static Tag readTag(LimitedByteBuffer buffer) throws IOException {
+    public static Tag readTag(ByteBuffer buffer) throws IOException {
         int tagFlags = readTagFlags(buffer);
         int tagNo = readTagNo(buffer, tagFlags);
         return new Tag(tagFlags, tagNo);
     }
 
-    private static int readTagFlags(LimitedByteBuffer buffer) throws IOException {
-        int tagFlags = buffer.readByte() & 0xff;
+    private static int readTagFlags(ByteBuffer buffer) throws IOException {
+        int tagFlags = buffer.get() & 0xff;
         if (tagFlags == 0) {
             throw new IOException("Bad tag 0 found");
         }
         return tagFlags;
     }
 
-    private static int readTagNo(LimitedByteBuffer buffer, int tagFlags) throws IOException {
+    private static int readTagNo(ByteBuffer buffer, int tagFlags) throws IOException {
         int tagNo = tagFlags & 0x1f;
 
         if (tagNo == 0x1f) {
             tagNo = 0;
 
-            int b = buffer.readByte() & 0xff;
+            int b = buffer.get() & 0xff;
             if ((b & 0x7f) == 0) {
                 throw new IOException("Invalid high tag number found");
             }
@@ -417,7 +417,7 @@ public abstract class Asn1Object implements Asn1Type {
             while (b >= 0 && (b & 0x80) != 0) {
                 tagNo |= b & 0x7f;
                 tagNo <<= 7;
-                b = buffer.readByte();
+                b = buffer.get();
             }
 
             tagNo |= b & 0x7f;
@@ -426,31 +426,52 @@ public abstract class Asn1Object implements Asn1Type {
         return tagNo;
     }
 
-    public static int readLength(LimitedByteBuffer buffer) throws IOException {
-        int bodyLength = buffer.readByte() & 0xff;
+    public static int readLength(ByteBuffer buffer) throws IOException {
+        int result = buffer.get() & 0xff;
+        if (result == 0x80) {
+            return -1; // non-definitive length
+        }
 
-        if (bodyLength > 127) {
-            int length = bodyLength & 0x7f;
+        if (result > 127) {
+            int length = result & 0x7f;
             if (length > 4) {
-                throw new IOException("Bad bodyLength of more than 4 bytes: " + length);
+                throw new IOException("Bad length of more than 4 bytes: " + length);
             }
 
-            bodyLength = 0;
+            result = 0;
             int tmp;
             for (int i = 0; i < length; i++) {
-                tmp = buffer.readByte() & 0xff;
-                bodyLength = (bodyLength << 8) + tmp;
+                tmp = buffer.get() & 0xff;
+                result = (result << 8) + tmp;
             }
+        }
 
-            if (bodyLength < 0) {
-                throw new IOException("Invalid bodyLength " + bodyLength);
-            }
-            if (bodyLength > buffer.hasLeft()) {
-                throw new IOException("Corrupt stream - less data "
-                        + buffer.hasLeft() + " than expected " + bodyLength);
-            }
+        if (result < 0) {
+            throw new IOException("Invalid length " + result);
         }
 
-        return bodyLength;
+        if (result > buffer.remaining()) {
+            throw new IOException("Corrupt stream - less data "
+                + buffer.remaining() + " than expected " + result);
+        }
+
+        return result;
+    }
+
+    public static ByteBuffer dupWithLength(ByteBuffer buffer, int length) {
+        try {
+            ByteBuffer result = buffer.duplicate();
+            result.limit(buffer.position() + length);
+            buffer.position(buffer.position() + length);
+            return result;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    protected static byte[] readAllLeftBytes(ByteBuffer buffer) {
+        byte[] result = new byte[buffer.remaining()];
+        buffer.get(result);
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
index 72d5c70..9271fea 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
@@ -19,10 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 
 public class Asn1OctetString extends Asn1Simple<byte[]> {
     public Asn1OctetString() {
@@ -44,7 +44,7 @@ public class Asn1OctetString extends Asn1Simple<byte[]> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        setValue(content.readAllLeftBytes());
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        setValue(readAllLeftBytes(content));
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
index 2f15daf..714e230 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -92,8 +91,8 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        byte[] leftBytes = content.readAllLeftBytes();
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        byte[] leftBytes = readAllLeftBytes(content);
         if (leftBytes.length > 0) {
             setBytes(leftBytes);
             toValue();

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
index b808b3e..b7ad9d4 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
@@ -78,7 +77,7 @@ public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
+    protected void decodeBody(ByteBuffer content) throws IOException {
         AbstractAsn1Type<?> value = (AbstractAsn1Type<?>) getValue();
         if (isImplicit()) {
             value.decodeBody(content);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
index 90f95c1..b6086b8 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
@@ -20,7 +20,6 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
@@ -131,7 +130,7 @@ public abstract class TaggingCollection extends AbstractAsn1Type<Asn1CollectionT
     }
 
     @Override
-    protected void decodeBody(LimitedByteBuffer content) throws IOException {
+    protected void decodeBody(ByteBuffer content) throws IOException {
         tagging.decodeBody(content);
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
index d7210fe..f1cd35c 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
@@ -50,7 +50,8 @@ public class TestAsn1Collection {
     public void testSequenceDecoding() throws IOException {
         Asn1Sequence seq = new Asn1Sequence();
         seq.decode(EXPECTED_BYTES);
-        AbstractAsn1Type<?> field = (AbstractAsn1Type<?>) seq.getValue().get(0).getValue();
+        AbstractAsn1Type<?> field =
+            (AbstractAsn1Type<?>) seq.getValue().get(0).getValue();
         assertThat(field.getValue()).isEqualTo(TEST_STR);
 
         field = (AbstractAsn1Type<?>) seq.getValue().get(1).getValue();

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
index 6db67de..2197a6a 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.kerberos.kerb;
 
-import org.apache.kerby.asn1.LimitedByteBuffer;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.type.Asn1Object;
 import org.apache.kerby.asn1.type.Asn1Type;
@@ -65,10 +64,9 @@ public class KrbCodec {
     }
 
     public static KrbMessage decodeMessage(ByteBuffer byteBuffer) throws IOException {
-        LimitedByteBuffer limitedBuffer = new LimitedByteBuffer(byteBuffer);
-        Tag tag = Asn1Object.readTag(limitedBuffer);
-        int length = Asn1Object.readLength(limitedBuffer);
-        LimitedByteBuffer valueBuffer = new LimitedByteBuffer(limitedBuffer, length);
+        Tag tag = Asn1Object.readTag(byteBuffer);
+        int length = Asn1Object.readLength(byteBuffer);
+        ByteBuffer valueBuffer = Asn1Object.dupWithLength(byteBuffer, length);
 
         KrbMessage msg;
         KrbMessageType msgType = KrbMessageType.fromValue(tag.tagNo());

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/a74ee67a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
index f5910ca..c2b8b76 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
@@ -20,9 +20,9 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
-import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.KrbConstant;
 import org.apache.kerby.kerberos.kerb.KrbException;
 import org.apache.kerby.kerberos.kerb.KrbRuntime;
@@ -30,8 +30,6 @@ import org.apache.kerby.kerberos.kerb.provider.TokenDecoder;
 import org.apache.kerby.kerberos.kerb.provider.TokenEncoder;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -95,12 +93,13 @@ public class KrbToken extends KrbSequenceType implements AuthToken {
     /**
      * {@inheritDoc}
      */
+    /*
     @Override
     public void decode(ByteBuffer content) throws IOException {
         super.decode(content);
         this.innerToken = getTokenDecoder().decodeFromBytes(getTokenValue());
         setTokenType();
-    }
+    }*/
 
     /**
      * Set token type.
@@ -118,7 +117,7 @@ public class KrbToken extends KrbSequenceType implements AuthToken {
      * Get token encoder.
      * @return The token encoder
      */
-    private static TokenEncoder getTokenEncoder() {
+    protected static TokenEncoder getTokenEncoder() {
         if (tokenEncoder == null) {
             tokenEncoder = KrbRuntime.getTokenProvider().createTokenEncoder();
         }
@@ -129,7 +128,7 @@ public class KrbToken extends KrbSequenceType implements AuthToken {
      * Get token decoder.
      * @return The token decoder
      */
-    private static TokenDecoder getTokenDecoder() {
+    protected static TokenDecoder getTokenDecoder() {
         if (tokenDecoder == null) {
             tokenDecoder = KrbRuntime.getTokenProvider().createTokenDecoder();
         }


[12/26] directory-kerby git commit: DIRKRB-486. Initial work for the support, introducing toStr() method

Posted by pl...@apache.org.
DIRKRB-486. Initial work for the support, introducing toStr() method


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/e3197ce2
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/e3197ce2
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/e3197ce2

Branch: refs/heads/pkinit-support
Commit: e3197ce25452f6fd34e8cfec1fdf232964c9397f
Parents: 1d93856
Author: Kai Zheng <ka...@intel.com>
Authored: Thu Dec 3 09:11:16 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Thu Dec 3 09:11:16 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/type/AbstractAsn1Type.java     | 5 +++++
 .../src/main/java/org/apache/kerby/asn1/type/Asn1Any.java     | 5 +++++
 .../main/java/org/apache/kerby/asn1/type/Asn1BitString.java   | 7 +++++++
 .../src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java  | 5 +++++
 .../java/org/apache/kerby/asn1/type/Asn1CollectionType.java   | 5 +++++
 .../main/java/org/apache/kerby/asn1/type/Asn1Constructed.java | 5 +++++
 .../src/main/java/org/apache/kerby/asn1/type/Asn1Item.java    | 5 +++++
 .../main/java/org/apache/kerby/asn1/type/Asn1OctetString.java | 7 +++++++
 .../src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java  | 7 +++++++
 .../src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java | 5 +++++
 .../src/main/java/org/apache/kerby/asn1/type/Asn1Type.java    | 7 +++++++
 .../java/org/apache/kerby/asn1/type/TaggingCollection.java    | 5 +++++
 12 files changed, 68 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
index b12c67d..df8ceef 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
@@ -75,4 +75,9 @@ public abstract class AbstractAsn1Type<T> extends Asn1Object {
     public void setValue(T value) {
         this.value = value;
     }
+
+    @Override
+    public String toString() {
+        return toStr();
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
index 617ec12..efcd9a1 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
@@ -100,5 +100,10 @@ public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
 
         return result;
     }
+
+    @Override
+    public String toStr() {
+        return "any";
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
index 7d26be3..2ba95b9 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
@@ -82,4 +82,11 @@ public class Asn1BitString extends Asn1Simple<byte[]> {
             throw new IOException("Bad padding number: " + paddingBits + ", should be in [0, 7]");
         }
     }
+
+    @Override
+    public String toStr() {
+        String valueStr =
+            (getValue() != null ? (getValue().length + " bytes") : "null");
+        return valueStr;
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
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 91fd54e..aecfaf0 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
@@ -167,4 +167,9 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
     protected void setFieldAsInt(int index, int value) {
         setFieldAs(index, new Asn1Integer(value));
     }
+
+    @Override
+    public String toStr() {
+        return "choice";
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 3226441..6b5d312 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
@@ -195,4 +195,9 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
             setFieldAs(index, new Asn1Any(value));
         }
     }
+
+    @Override
+    public String toStr() {
+        return "[collection-type]";
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
index 46cb6c6..4a7d904 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
@@ -90,4 +90,9 @@ public class Asn1Constructed extends AbstractAsn1Type<List<Asn1Type>> {
             }
         }
     }
+
+    @Override
+    public String toStr() {
+        return "[constructed]";
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
index efd0673..c011141 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
@@ -143,4 +143,9 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
         ((Asn1Object) value).taggedDecode(tag(), getBodyContent(), taggingOption);
         setValue(value);
     }
+
+    @Override
+    public String toStr() {
+        return "item";
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
index 6523cf7..c7b89f9 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
@@ -48,4 +48,11 @@ public class Asn1OctetString extends Asn1Simple<byte[]> {
     protected void decodeBody(ByteBuffer content) throws IOException {
         setValue(Asn1Util.readAllLeftBytes(content));
     }
+
+    @Override
+    public String toStr() {
+        String valueStr =
+            (getValue() != null ? (getValue().length + " octets") : "null");
+        return valueStr;
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
index d55fb7a..81f6e57 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
@@ -201,4 +201,11 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
                 throw new IllegalArgumentException("Unexpected tag " + tagNo.getValue());
         }
     }
+
+    @Override
+    public String toStr() {
+        String valueStr =
+            (getValue() != null ? String.valueOf(getValue()) : "null");
+        return valueStr;
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
index b7ad9d4..8dd4511 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
@@ -97,4 +97,9 @@ public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
         }
         setValue((T) value);
     }
+
+    @Override
+    public String toStr() {
+        return "tagging";
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
index 4c1c538..c272915 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
@@ -186,4 +186,11 @@ public interface Asn1Type {
      * @throws IOException e
      */
     void taggedDecode(byte[] content, TaggingOption taggingOption) throws IOException;
+
+    /**
+     * Return a friendly string representation for this object. In primitive
+     * cases, it may be the same with toString().
+     * @return a friendly string representation
+     */
+    String toStr();
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e3197ce2/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
index b6086b8..cb721ff 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
@@ -169,4 +169,9 @@ public abstract class TaggingCollection extends AbstractAsn1Type<Asn1CollectionT
     protected void setFieldAsOctetBytes(int index, byte[] value) {
         tagged.setFieldAsOctets(index, value);
     }
+
+    @Override
+    public String toStr() {
+        return "[tagging-collection]";
+    }
 }


[11/26] directory-kerby git commit: ASN1. Introduced Asn1Constructed for support of some primitive types using constructed encoding

Posted by pl...@apache.org.
ASN1. Introduced Asn1Constructed for support of some primitive types using constructed encoding


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/1d938561
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/1d938561
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/1d938561

Branch: refs/heads/pkinit-support
Commit: 1d9385611873e4fd9e6da9296c0fddfdb2a4115a
Parents: 949104f
Author: Kai Zheng <ka...@intel.com>
Authored: Tue Dec 1 21:32:54 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Tue Dec 1 21:32:54 2015 +0800

----------------------------------------------------------------------
 .../apache/kerby/asn1/type/Asn1Collection.java  | 66 +-------------
 .../apache/kerby/asn1/type/Asn1Constructed.java | 93 ++++++++++++++++++++
 2 files changed, 95 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d938561/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
index 3bbb770..a4d6560 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
@@ -22,74 +22,13 @@ package org.apache.kerby.asn1.type;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * ASN1 complex type, may be better named.
  */
-public class Asn1Collection extends AbstractAsn1Type<List<Asn1Type>> {
-    private boolean lazy = false;
+public class Asn1Collection extends Asn1Constructed {
 
     public Asn1Collection(UniversalTag universalTag) {
-        super(universalTag);
-        setValue(new ArrayList<Asn1Type>());
-        usePrimitive(false);
-    }
-
-    public void setLazy(boolean lazy) {
-        this.lazy = lazy;
-    }
-
-    public boolean isLazy() {
-        return lazy;
-    }
-
-    public void addItem(Asn1Type value) {
-        getValue().add(value);
-    }
-
-    public void clear() {
-        getValue().clear();
-    }
-
-    @Override
-    protected int encodingBodyLength() {
-        List<Asn1Type> valueItems = getValue();
-        int allLen = 0;
-        for (Asn1Type item : valueItems) {
-            if (item != null) {
-                allLen += item.encodingLength();
-            }
-        }
-        return allLen;
-    }
-
-    @Override
-    protected void encodeBody(ByteBuffer buffer) {
-        List<Asn1Type> valueItems = getValue();
-        for (Asn1Type item : valueItems) {
-            if (item != null) {
-                item.encode(buffer);
-            }
-        }
-    }
-
-    @Override
-    protected void decodeBody(ByteBuffer content) throws IOException {
-        while (content.remaining() > 0) {
-            Asn1Item item = decodeOne(content);
-            if (item != null) {
-                if (item.isSimple() && !isLazy()) {
-                    item.decodeValueAsSimple();
-                    addItem(item.getValue());
-                } else {
-                    addItem(item);
-                }
-            }
-        }
+        super(new Tag(universalTag));
     }
 
     public static boolean isCollection(Tag tag) {
@@ -137,5 +76,4 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Type>> {
                 throw new IllegalArgumentException("Unexpected tag " + tagNo.getValue());
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d938561/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
new file mode 100644
index 0000000..46cb6c6
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
@@ -0,0 +1,93 @@
+/**
+ *  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.asn1.type;
+
+import org.apache.kerby.asn1.Tag;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ASN1 constructed types, mainly structured ones, but also some primitive ones.
+ */
+public class Asn1Constructed extends AbstractAsn1Type<List<Asn1Type>> {
+    private boolean lazy = false;
+
+    public Asn1Constructed(Tag tag) {
+        super(tag);
+        setValue(new ArrayList<Asn1Type>());
+        usePrimitive(false);
+    }
+
+    public void setLazy(boolean lazy) {
+        this.lazy = lazy;
+    }
+
+    public boolean isLazy() {
+        return lazy;
+    }
+
+    public void addItem(Asn1Type value) {
+        getValue().add(value);
+    }
+
+    public void clear() {
+        getValue().clear();
+    }
+
+    @Override
+    protected int encodingBodyLength() {
+        List<Asn1Type> valueItems = getValue();
+        int allLen = 0;
+        for (Asn1Type item : valueItems) {
+            if (item != null) {
+                allLen += item.encodingLength();
+            }
+        }
+        return allLen;
+    }
+
+    @Override
+    protected void encodeBody(ByteBuffer buffer) {
+        List<Asn1Type> valueItems = getValue();
+        for (Asn1Type item : valueItems) {
+            if (item != null) {
+                item.encode(buffer);
+            }
+        }
+    }
+
+    @Override
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        while (content.remaining() > 0) {
+            Asn1Item item = decodeOne(content);
+            if (item != null) {
+                if (item.isSimple() && !isLazy()) {
+                    item.decodeValueAsSimple();
+                    addItem(item.getValue());
+                } else {
+                    addItem(item);
+                }
+            }
+        }
+    }
+}


[13/26] directory-kerby git commit: Renamed Asn1EnumType.

Posted by pl...@apache.org.
Renamed Asn1EnumType.


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/597995d4
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/597995d4
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/597995d4

Branch: refs/heads/pkinit-support
Commit: 597995d427163401710361fe1e1a79e6a06b572b
Parents: e3197ce
Author: Kai Zheng <ka...@intel.com>
Authored: Thu Dec 3 10:20:47 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Thu Dec 3 10:20:47 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/EnumType.java    | 27 ++++++++++++++++++++
 .../apache/kerby/asn1/type/Asn1EnumType.java    | 27 --------------------
 .../apache/kerby/asn1/type/Asn1Enumerated.java  |  9 ++++---
 .../org/apache/kerby/asn1/type/Asn1Flags.java   | 10 +++++---
 .../org/apache/kerby/asn1/TestAsn1Flags.java    |  3 +--
 .../kerby/kerberos/kerb/preauth/PaFlag.java     |  6 ++---
 .../kerby/kerberos/kerb/KrbErrorCode.java       |  6 ++---
 .../kerberos/kerb/type/KrbAppSequenceType.java  |  4 +--
 .../kerberos/kerb/type/KrbSequenceType.java     |  4 +--
 .../kerb/type/ad/AuthorizationType.java         |  6 ++---
 .../kerby/kerberos/kerb/type/ap/ApOption.java   |  6 ++---
 .../kerberos/kerb/type/base/CheckSumType.java   |  6 ++---
 .../kerberos/kerb/type/base/EncryptionType.java |  6 ++---
 .../kerberos/kerb/type/base/HostAddrType.java   |  6 ++---
 .../kerby/kerberos/kerb/type/base/KeyUsage.java |  6 ++---
 .../kerberos/kerb/type/base/KrbMessageType.java |  6 ++---
 .../kerberos/kerb/type/base/LastReqType.java    |  6 ++---
 .../kerby/kerberos/kerb/type/base/NameType.java |  6 ++---
 .../kerby/kerberos/kerb/type/base/SamType.java  |  4 +--
 .../kerberos/kerb/type/base/TokenFormat.java    |  6 ++---
 .../kerb/type/base/TransitedEncodingType.java   |  6 ++---
 .../kerberos/kerb/type/fast/ArmorType.java      |  6 ++---
 .../kerberos/kerb/type/fast/FastOption.java     |  6 ++---
 .../kerby/kerberos/kerb/type/kdc/KdcOption.java |  6 ++---
 .../kerby/kerberos/kerb/type/pa/PaDataType.java |  6 ++---
 .../kerberos/kerb/type/pa/token/TokenFlag.java  |  6 ++---
 .../kerberos/kerb/type/ticket/TicketFlag.java   |  6 ++---
 .../org/apache/kerby/cms/type/CmsVersion.java   |  4 +--
 .../org/apache/kerby/x509/type/CRLReason.java   |  6 ++---
 .../kerby/x509/type/DigestedObjectType.java     |  6 ++---
 .../org/apache/kerby/x509/type/KeyUsage.java    |  4 +--
 .../org/apache/kerby/x509/type/ReasonFlags.java |  4 +--
 32 files changed, 114 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
new file mode 100644
index 0000000..ff9cd23
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
@@ -0,0 +1,27 @@
+/**
+ *  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.asn1;
+
+/**
+ * A helper interface used by Asn1Enumerated.
+ */
+public interface EnumType {
+    int getValue();
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1EnumType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1EnumType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1EnumType.java
deleted file mode 100644
index 7210aee..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1EnumType.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- *  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.asn1.type;
-
-/**
- * A helper interface used by Asn1Enumerated.
- */
-public interface Asn1EnumType {
-    int getValue();
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
index 8dc4b4a..223fc97 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
@@ -27,7 +28,7 @@ import java.math.BigInteger;
 /**
  * The ASN1 enumerated type
  */
-public abstract class Asn1Enumerated<T extends Asn1EnumType> extends Asn1Simple<T> {
+public abstract class Asn1Enumerated<T extends EnumType> extends Asn1Simple<T> {
 
     /**
      * Default constructor, generally for decoding as a container
@@ -52,13 +53,13 @@ public abstract class Asn1Enumerated<T extends Asn1EnumType> extends Asn1Simple<
     protected void toValue() throws IOException {
         BigInteger biVal = new BigInteger(getBytes());
         int iVal = biVal.intValue();
-        Asn1EnumType[] allValues = getAllEnumValues();
-        for (Asn1EnumType val : allValues) {
+        EnumType[] allValues = getAllEnumValues();
+        for (EnumType val : allValues) {
             if (val.getValue() == iVal) {
                 setValue((T) val);
             }
         }
     }
 
-    protected abstract Asn1EnumType[] getAllEnumValues();
+    protected abstract EnumType[] getAllEnumValues();
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Flags.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Flags.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Flags.java
index 9c219df..f11d6df 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Flags.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Flags.java
@@ -19,6 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.EnumType;
+
 import java.io.IOException;
 
 /**
@@ -81,15 +83,15 @@ public class Asn1Flags extends Asn1BitString {
         setFlags(0);
     }
 
-    public boolean isFlagSet(Asn1EnumType flag) {
+    public boolean isFlagSet(EnumType flag) {
         return isFlagSet(flag.getValue());
     }
 
-    public void setFlag(Asn1EnumType flag) {
+    public void setFlag(EnumType flag) {
         setFlag(flag.getValue());
     }
 
-    public void setFlag(Asn1EnumType flag, boolean isSet)  {
+    public void setFlag(EnumType flag, boolean isSet)  {
         if (isSet) {
             setFlag(flag.getValue());
         } else {
@@ -97,7 +99,7 @@ public class Asn1Flags extends Asn1BitString {
         }
     }
 
-    public void clearFlag(Asn1EnumType flag) {
+    public void clearFlag(EnumType flag) {
         clearFlag(flag.getValue());
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
index ef70a69..1c3ce80 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
 import org.apache.kerby.asn1.type.Asn1Flags;
 import org.junit.Before;
 import org.junit.Rule;
@@ -41,7 +40,7 @@ public class TestAsn1Flags {
   public static final int FLAG_4 = 16;
   public static final int FLAG_5 = 32;
   
-  public enum TestEnum implements Asn1EnumType {
+  public enum TestEnum implements EnumType {
     FLAG_0(0x00000001),
     FLAG_1(0x00000002),
     FLAG_2(0x00000004),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
index f67ab90..4d75546 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.preauth;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum PaFlag implements Asn1EnumType {
+public enum PaFlag implements EnumType {
     NONE(-1),
     PA_REAL(0x01),
     PA_INFO(0x02);
@@ -38,7 +38,7 @@ public enum PaFlag implements Asn1EnumType {
     }
 
     public static PaFlag fromValue(int value) {
-        for (Asn1EnumType e : values()) {
+        for (EnumType e : values()) {
             if (e.getValue() == value) {
                 return (PaFlag) e;
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
index 33b0689..3ab9871 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum KrbErrorCode implements Asn1EnumType {
+public enum KrbErrorCode implements EnumType {
     KDC_ERR_NONE(0, "No error"),
     KDC_ERR_NAME_EXP(1, "Client's entry in database has expired"),
     KDC_ERR_SERVICE_EXP(2, "Server's entry in database has expired"),
@@ -108,7 +108,7 @@ public enum KrbErrorCode implements Asn1EnumType {
 
     public static KrbErrorCode fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (KrbErrorCode) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
index 8de28e0..a4178a3 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.kerberos.kerb.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.TaggingSequence;
 
@@ -51,7 +51,7 @@ public abstract class KrbAppSequenceType extends TaggingSequence {
         setFieldAs(index, new KerberosTime(value));
     }
 
-    protected void setField(int index, Asn1EnumType krbEnum) {
+    protected void setField(int index, EnumType krbEnum) {
         setFieldAsInt(index, krbEnum.getValue());
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
index 3ff278d..bf655b2 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.kerberos.kerb.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 
@@ -49,7 +49,7 @@ public abstract class KrbSequenceType extends Asn1SequenceType {
         setFieldAs(index, new KerberosTime(value));
     }
 
-    protected void setField(int index, Asn1EnumType value) {
+    protected void setField(int index, EnumType value) {
         setFieldAsInt(index, value.getValue());
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
index 979fc13..895535f 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.ad;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum AuthorizationType implements Asn1EnumType {
+public enum AuthorizationType implements EnumType {
     /**
      * Constant for the "null" authorization type.
      */
@@ -131,7 +131,7 @@ public enum AuthorizationType implements Asn1EnumType {
 
     public static AuthorizationType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (AuthorizationType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
index 9676c2f..8dd61a5 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.kerberos.kerb.type.ap;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
 /**
  APOptions       ::= KrbFlags
@@ -27,7 +27,7 @@ import org.apache.kerby.asn1.type.Asn1EnumType;
  -- use-session-key(1),
  -- mutual-required(2)
  */
-public enum ApOption implements Asn1EnumType {
+public enum ApOption implements EnumType {
     NONE(-1),
     RESERVED(0x80000000),
     USE_SESSION_KEY(0x40000000),
@@ -47,7 +47,7 @@ public enum ApOption implements Asn1EnumType {
     }
 
     public static ApOption fromValue(int value) {
-        for (Asn1EnumType e : values()) {
+        for (EnumType e : values()) {
             if (e.getValue() == value) {
                 return (ApOption) e;
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
index d52093e..1758f1a 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum CheckSumType implements Asn1EnumType {
+public enum CheckSumType implements EnumType {
     NONE(0, "none", "None checksum type"),
 
     CRC32(0x0001, "crc32", "CRC-32"),
@@ -80,7 +80,7 @@ public enum CheckSumType implements Asn1EnumType {
 
     public static CheckSumType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value) {
                     return (CheckSumType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionType.java
index 0154d55..29c4c23 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionType.java
@@ -19,12 +19,12 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
 /**
  * According to krb5.hin
  */
-public enum EncryptionType implements Asn1EnumType {
+public enum EncryptionType implements EnumType {
 
     NONE(0, "none", "None encryption type"),
 
@@ -118,7 +118,7 @@ public enum EncryptionType implements Asn1EnumType {
 
     public static EncryptionType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value) {
                     return (EncryptionType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
index b148bf6..37eb44f 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum HostAddrType implements Asn1EnumType {
+public enum HostAddrType implements EnumType {
     /**
      * Constant for the "null" host address type.
      */
@@ -88,7 +88,7 @@ public enum HostAddrType implements Asn1EnumType {
 
     public static HostAddrType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (HostAddrType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
index 055977c..22ea613 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
@@ -19,12 +19,12 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
 /**
  * From krb5.hin
  */
-public enum KeyUsage implements Asn1EnumType {
+public enum KeyUsage implements EnumType {
     UNKNOWN(-1),
     NONE(0),
     //AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with the client key
@@ -114,7 +114,7 @@ public enum KeyUsage implements Asn1EnumType {
 
     public static KeyUsage fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value) {
                     return (KeyUsage) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
index d483838..cf3d130 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum KrbMessageType implements Asn1EnumType {
+public enum KrbMessageType implements EnumType {
     NONE(-1),
     AS_REQ(10),
     AS_REP(11),
@@ -47,7 +47,7 @@ public enum KrbMessageType implements Asn1EnumType {
 
     public static KrbMessageType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (KrbMessageType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
index 0353750..c766d27 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum LastReqType implements Asn1EnumType {
+public enum LastReqType implements EnumType {
     NONE(0),
     ALL_LAST_TGT(1),
     THE_LAST_TGT(-1),
@@ -51,7 +51,7 @@ public enum LastReqType implements Asn1EnumType {
 
     public static LastReqType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value) {
                     return (LastReqType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
index d85b786..3cbddfe 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum NameType implements Asn1EnumType {
+public enum NameType implements EnumType {
     NT_UNKNOWN(0),
     NT_PRINCIPAL(1),
     NT_SRV_INST(2),
@@ -42,7 +42,7 @@ public enum NameType implements Asn1EnumType {
 
     public static NameType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (NameType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
index faa6e18..9f55e6d 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum SamType implements Asn1EnumType {
+public enum SamType implements EnumType {
     SAM_NONE(0),
     /** safe SAM type enum for Enigma Logic */
     SAM_TYPE_ENIGMA(1), // Enigma Logic"

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
index 15781b7..b2b6e26 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum TokenFormat implements Asn1EnumType {
+public enum TokenFormat implements EnumType {
     NONE                (0),
     JWT                 (1);
 
@@ -38,7 +38,7 @@ public enum TokenFormat implements Asn1EnumType {
 
     public static TokenFormat fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (TokenFormat) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
index 744b643..262ac8c 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.base;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum TransitedEncodingType implements Asn1EnumType {
+public enum TransitedEncodingType implements EnumType {
     UNKNOWN(-1),
     NULL(0),
     DOMAIN_X500_COMPRESS(1);
@@ -39,7 +39,7 @@ public enum TransitedEncodingType implements Asn1EnumType {
 
     public static TransitedEncodingType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (TransitedEncodingType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
index 3331088..b6dd972 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.fast;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum ArmorType implements Asn1EnumType {
+public enum ArmorType implements EnumType {
     NONE                (0),
     ARMOR_AP_REQUEST              (1);
 
@@ -38,7 +38,7 @@ public enum ArmorType implements Asn1EnumType {
 
     public static ArmorType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (ArmorType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
index dc46d83..f97f0ae 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.fast;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum FastOption implements Asn1EnumType {
+public enum FastOption implements EnumType {
     NONE(-1),
     RESERVED(0),
     HIDE_CLIENT_NAMES(1),
@@ -40,7 +40,7 @@ public enum FastOption implements Asn1EnumType {
     }
 
     public static FastOption fromValue(int value) {
-        for (Asn1EnumType e : values()) {
+        for (EnumType e : values()) {
             if (e.getValue() == value) {
                 return (FastOption) e;
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
index ef6261d..3a5edc6 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.kdc;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum KdcOption implements Asn1EnumType {
+public enum KdcOption implements EnumType {
     NONE(-1),
     //RESERVED(0x80000000),
     FORWARDABLE(0x40000000),
@@ -68,7 +68,7 @@ public enum KdcOption implements Asn1EnumType {
     }
 
     public static KdcOption fromValue(int value) {
-        for (Asn1EnumType e : values()) {
+        for (EnumType e : values()) {
             if (e.getValue() == value) {
                 return (KdcOption) e;
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
index da3807e..44cb2c5 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
@@ -19,12 +19,12 @@
  */
 package org.apache.kerby.kerberos.kerb.type.pa;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
 /**
  * From krb5.h
  */
-public enum PaDataType implements Asn1EnumType {
+public enum PaDataType implements EnumType {
     NONE                (0),
     TGS_REQ              (1),
     AP_REQ              (1),
@@ -80,7 +80,7 @@ public enum PaDataType implements Asn1EnumType {
 
     public static PaDataType fromValue(Integer value) {
         if (value != null) {
-            for (Asn1EnumType e : values()) {
+            for (EnumType e : values()) {
                 if (e.getValue() == value.intValue()) {
                     return (PaDataType) e;
                 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
index 037d7eb..12d8ea6 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.pa.token;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum TokenFlag implements Asn1EnumType {
+public enum TokenFlag implements EnumType {
     NONE(-1),
     ID_TOKEN_REQUIRED(0x40000000),
     AC_TOKEN_REQUIRED(0x20000000),
@@ -40,7 +40,7 @@ public enum TokenFlag implements Asn1EnumType {
     }
 
     public static TokenFlag fromValue(int value) {
-        for (Asn1EnumType e : values()) {
+        for (EnumType e : values()) {
             if (e.getValue() == value) {
                 return (TokenFlag) e;
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
index e2e99a8..48dd355 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb.type.ticket;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 
-public enum TicketFlag implements Asn1EnumType {
+public enum TicketFlag implements EnumType {
     NONE(-1),
     FORWARDABLE(0x40000000),
     FORWARDED(0x20000000),
@@ -51,7 +51,7 @@ public enum TicketFlag implements Asn1EnumType {
     }
 
     public static TicketFlag fromValue(int value) {
-        for (Asn1EnumType e : values()) {
+        for (EnumType e : values()) {
             if (e.getValue() == value) {
                 return (TicketFlag) e;
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
index bde3992..9f120ad 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.cms.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 
 /**
@@ -27,7 +27,7 @@ import org.apache.kerby.asn1.type.Asn1Integer;
  * { v0(0), v1(1), v2(2), v3(3), v4(4), v5(5) }
  */
 
-enum CmsVersionEnum implements Asn1EnumType {
+enum CmsVersionEnum implements EnumType {
     V0,
     V1,
     V2,

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
index 1596b8a..02558cb 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Enumerated;
 
 /**
@@ -40,7 +40,7 @@ import org.apache.kerby.asn1.type.Asn1Enumerated;
  * </pre>
  */
 
-enum CRLReasonEnum implements Asn1EnumType {
+enum CRLReasonEnum implements EnumType {
     UNSPECIFIED,
     KEY_COMPROMISE,
     CA_COMPROMISE,
@@ -60,7 +60,7 @@ enum CRLReasonEnum implements Asn1EnumType {
 
 public class CRLReason extends Asn1Enumerated<CRLReasonEnum> {
     @Override
-    public Asn1EnumType[] getAllEnumValues() {
+    public EnumType[] getAllEnumValues() {
         return CRLReasonEnum.values();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
index e67c503..c233133 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Enumerated;
 
 /**
@@ -34,7 +34,7 @@ import org.apache.kerby.asn1.type.Asn1Enumerated;
  * </pre>
  * 
  */
-enum DigestedObjectEnum implements Asn1EnumType {
+enum DigestedObjectEnum implements EnumType {
     PUBLIC_KEY,
     PUBLIC_KEY_CERT,
     OTHER_OBJECT_TYPES;
@@ -47,7 +47,7 @@ enum DigestedObjectEnum implements Asn1EnumType {
 
 public class DigestedObjectType extends Asn1Enumerated<DigestedObjectEnum> {
     @Override
-    public Asn1EnumType[] getAllEnumValues() {
+    public EnumType[] getAllEnumValues() {
         return DigestedObjectEnum.values();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
index bbded47..e7dbb06 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Flags;
 
 /**
@@ -40,7 +40,7 @@ import org.apache.kerby.asn1.type.Asn1Flags;
  * </pre>
  */
 
-enum KeyUsageEnum implements Asn1EnumType {
+enum KeyUsageEnum implements EnumType {
     DIGITAL_SIGNATURE,
     NON_REPUDIATION,
     KEY_ENCIPHERMENT,

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/597995d4/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
index c397f08..d81798f 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
-import org.apache.kerby.asn1.type.Asn1EnumType;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Flags;
 
 /**
@@ -39,7 +39,7 @@ import org.apache.kerby.asn1.type.Asn1Flags;
  * </pre>
  */
 
-enum ReasonFlagsEnum implements Asn1EnumType {
+enum ReasonFlagsEnum implements EnumType {
     UNUSED,
     KEY_COMPROMISE,
     CA_COMPROMISE,


[02/26] directory-kerby git commit: Fixed two style issues

Posted by pl...@apache.org.
Fixed two style issues


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/27038b87
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/27038b87
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/27038b87

Branch: refs/heads/pkinit-support
Commit: 27038b87f24bba99476e4f0d794f462f3e6da838
Parents: ca1e8c1
Author: Kai Zheng <ka...@intel.com>
Authored: Mon Nov 30 15:12:11 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Mon Nov 30 15:12:11 2015 +0800

----------------------------------------------------------------------
 kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/27038b87/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
index a2a167f..b23f960 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
@@ -67,8 +67,8 @@ public class HexUtil {
             if (hexPart.length != 2) {
                 throw new IllegalArgumentException("Invalid hex string to convert");
             }
-            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4) +
-                HEX_CHARS_STR.indexOf(hexPart[1]));
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4)
+                + HEX_CHARS_STR.indexOf(hexPart[1]));
         }
 
         return bytes;
@@ -104,8 +104,8 @@ public class HexUtil {
         byte[] bytes = new byte[len];
         char[] hexChars = hexString.toCharArray();
         for (int i = 0, j = 0; i < len; ++i) {
-            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4) +
-                HEX_CHARS_STR.indexOf(hexChars[j++]));
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4)
+                + HEX_CHARS_STR.indexOf(hexChars[j++]));
         }
 
         return bytes;


[19/26] directory-kerby git commit: DIRKRB-485. An ASN1 dumping utility

Posted by pl...@apache.org.
DIRKRB-485. An ASN1 dumping utility


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/e1a4c3a3
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/e1a4c3a3
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/e1a4c3a3

Branch: refs/heads/pkinit-support
Commit: e1a4c3a31c50adb86560e573f1a3dcb9177767cc
Parents: 4c7a8c4
Author: Kai Zheng <ka...@intel.com>
Authored: Fri Dec 4 08:43:05 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Fri Dec 4 08:43:05 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/Asn1Dump.java    |  78 ++++++++-----
 .../java/org/apache/kerby/asn1/HexUtil.java     | 113 +++++++++++++++++++
 .../org/apache/kerby/asn1/type/Asn1Item.java    |   5 +-
 .../java/org/apache/kerby/asn1/HexUtil.java     | 113 -------------------
 4 files changed, 168 insertions(+), 141 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e1a4c3a3/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
index b9199fe..e2569a8 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
@@ -19,54 +19,78 @@
  */
 package org.apache.kerby.asn1;
 
+import org.apache.kerby.asn1.type.Asn1Constructed;
 import org.apache.kerby.asn1.type.Asn1Item;
-import org.apache.kerby.asn1.type.Asn1Simple;
 import org.apache.kerby.asn1.type.Asn1Type;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 
 public class Asn1Dump {
 
+    public static void dump(String hexStr) throws IOException {
+        System.out.println("Dumping data:");
+        System.out.println(hexStr);
+        Asn1Dump dumper = new Asn1Dump();
+        byte[] data = HexUtil.hex2bytes(hexStr);
+        dumper.doDump(data);
+    }
+
     public static void dump(byte[] content) throws IOException {
-        String dumped = dumpAsString(content);
-        System.out.println(dumped);
+        String hexStr = HexUtil.bytesToHex(content);
+        System.out.println("Dumping data:");
+        System.out.println(hexStr);
+        Asn1Dump dumper = new Asn1Dump();
+        dumper.doDump(content);
     }
 
-    public static String dumpAsString(byte[] content) throws IOException {
-        StringBuilder sb = new StringBuilder();
+    public static void dump(ByteBuffer content) throws IOException {
+        byte[] bytes = new byte[content.remaining()];
+        content.get(bytes);
+        dump(bytes);
+    }
+
+    private StringBuilder builder = new StringBuilder();
+
+    private void doDump(byte[] content) throws IOException {
+        doDump(ByteBuffer.wrap(content));
+    }
 
+    private void doDump(ByteBuffer content) throws IOException {
         Asn1InputBuffer buffer = new Asn1InputBuffer(content);
-        Asn1Type value;
-        while (true) {
-            value = buffer.read();
-            if (value == null) {
-                break;
-            }
-            dump(value, sb);
+        Asn1Type value = buffer.read();
+        if (value == null) {
+            return;
         }
 
-        return sb.toString();
+        dumpType(0, value);
+
+        System.out.println(builder.toString());
     }
 
-    public static String dumpAsString(Asn1Type value) {
-        StringBuilder sb = new StringBuilder();
-        dump(value, sb);
-        return sb.toString();
+    private void dumpType(int numSpaces, Asn1Type value) {
+        if (value instanceof Asn1Item) {
+            dumpItem(numSpaces, (Asn1Item) value);
+        } else if (value instanceof Asn1Constructed) {
+            dumpCollection(numSpaces, (Asn1Constructed) value);
+        }
     }
 
-    private static void dump(Asn1Type value, StringBuilder buffer) {
-        if (value instanceof Asn1Simple) {
-            buffer.append(((Asn1Simple<?>) value).getValue().toString());
-        } else if (value instanceof Asn1Item) {
-            dump((Asn1Item) value, buffer);
+    private void dumpCollection(int numSpaces, Asn1Constructed coll) {
+        prefixSpaces(numSpaces).append(coll).append("\n");
+        for (Asn1Type aObj : coll.getValue()) {
+            dumpType(numSpaces + 4, aObj);
         }
     }
 
-    private static void dump(Asn1Item value, StringBuilder buffer) {
-        if (value.isFullyDecoded()) {
-            dump(value.getValue(), buffer);
-        } else {
-            buffer.append("Asn1Item");
+    private void dumpItem(int numSpaces, Asn1Item value) {
+        prefixSpaces(numSpaces).append(value).append("\n");
+    }
+
+    private StringBuilder prefixSpaces(int numSpaces) {
+        for (int i = 0; i < numSpaces; i++) {
+            builder.append(' ');
         }
+        return builder;
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e1a4c3a3/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java
new file mode 100644
index 0000000..b23f960
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/HexUtil.java
@@ -0,0 +1,113 @@
+/**
+ *  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.asn1;
+
+/**
+ * This is only for test, be careful when use in production codes.
+ */
+public class HexUtil {
+
+    static final String HEX_CHARS_STR = "0123456789ABCDEF";
+    static final char[] HEX_CHARS = HEX_CHARS_STR.toCharArray();
+
+    /**
+     * Convert bytes into friendly format as:
+     * 0x02 02 00 80
+     */
+    public static String bytesToHexFriendly(byte[] bytes) {
+        int len = bytes.length * 2;
+        len += bytes.length; // for ' ' appended for each char
+        len += 2; // for '0x' prefix
+        char[] hexChars = new char[len];
+        hexChars[0] = '0';
+        hexChars[1] = 'x';
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 3 + 2] = HEX_CHARS[v >>> 4];
+            hexChars[j * 3 + 3] = HEX_CHARS[v & 0x0F];
+            hexChars[j * 3 + 4] = ' ';
+        }
+
+        return new String(hexChars);
+    }
+
+    /**
+     * Convert friendly hex string like follows into byte array
+     * 0x02 02 00 80
+     */
+    public static byte[] hex2bytesFriendly(String hexString) {
+        hexString = hexString.toUpperCase();
+        String hexStr = hexString;
+        if (hexString.startsWith("0X")) {
+            hexStr = hexString.substring(2);
+        }
+        String[] hexParts = hexStr.split(" ");
+
+        byte[] bytes = new byte[hexParts.length];
+        char[] hexPart;
+        for (int i = 0; i < hexParts.length; ++i) {
+            hexPart = hexParts[i].toCharArray();
+            if (hexPart.length != 2) {
+                throw new IllegalArgumentException("Invalid hex string to convert");
+            }
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4)
+                + HEX_CHARS_STR.indexOf(hexPart[1]));
+        }
+
+        return bytes;
+    }
+
+    /**
+     * Convert bytes into format as:
+     * 02020080
+     * @param bytes The bytes
+     * @return The hex string
+     */
+    public static String bytesToHex(byte[] bytes) {
+        int len = bytes.length * 2;
+        char[] hexChars = new char[len];
+        for (int j = 0; j < bytes.length; j++) {
+            int v = bytes[j] & 0xFF;
+            hexChars[j * 2] = HEX_CHARS[v >>> 4];
+            hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
+        }
+
+        return new String(hexChars);
+    }
+
+    /**
+     * Convert hex string like follows into byte array
+     * 02020080
+     * @param hexString The hex string
+     * @return The bytes
+     */
+    public static byte[] hex2bytes(String hexString) {
+        hexString = hexString.toUpperCase();
+        int len = hexString.length() / 2;
+        byte[] bytes = new byte[len];
+        char[] hexChars = hexString.toCharArray();
+        for (int i = 0, j = 0; i < len; ++i) {
+            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4)
+                + HEX_CHARS_STR.indexOf(hexChars[j++]));
+        }
+
+        return bytes;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e1a4c3a3/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
index aa37d41..7fbcd05 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
@@ -146,6 +146,9 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
 
     @Override
     public String toStr() {
-        return getValue().toStr();
+        if (getValue() != null) {
+            return getValue().toStr();
+        }
+        return "undecoded";
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/e1a4c3a3/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
deleted file mode 100644
index b23f960..0000000
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/HexUtil.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- *  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.asn1;
-
-/**
- * This is only for test, be careful when use in production codes.
- */
-public class HexUtil {
-
-    static final String HEX_CHARS_STR = "0123456789ABCDEF";
-    static final char[] HEX_CHARS = HEX_CHARS_STR.toCharArray();
-
-    /**
-     * Convert bytes into friendly format as:
-     * 0x02 02 00 80
-     */
-    public static String bytesToHexFriendly(byte[] bytes) {
-        int len = bytes.length * 2;
-        len += bytes.length; // for ' ' appended for each char
-        len += 2; // for '0x' prefix
-        char[] hexChars = new char[len];
-        hexChars[0] = '0';
-        hexChars[1] = 'x';
-        for (int j = 0; j < bytes.length; j++) {
-            int v = bytes[j] & 0xFF;
-            hexChars[j * 3 + 2] = HEX_CHARS[v >>> 4];
-            hexChars[j * 3 + 3] = HEX_CHARS[v & 0x0F];
-            hexChars[j * 3 + 4] = ' ';
-        }
-
-        return new String(hexChars);
-    }
-
-    /**
-     * Convert friendly hex string like follows into byte array
-     * 0x02 02 00 80
-     */
-    public static byte[] hex2bytesFriendly(String hexString) {
-        hexString = hexString.toUpperCase();
-        String hexStr = hexString;
-        if (hexString.startsWith("0X")) {
-            hexStr = hexString.substring(2);
-        }
-        String[] hexParts = hexStr.split(" ");
-
-        byte[] bytes = new byte[hexParts.length];
-        char[] hexPart;
-        for (int i = 0; i < hexParts.length; ++i) {
-            hexPart = hexParts[i].toCharArray();
-            if (hexPart.length != 2) {
-                throw new IllegalArgumentException("Invalid hex string to convert");
-            }
-            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexPart[0]) << 4)
-                + HEX_CHARS_STR.indexOf(hexPart[1]));
-        }
-
-        return bytes;
-    }
-
-    /**
-     * Convert bytes into format as:
-     * 02020080
-     * @param bytes The bytes
-     * @return The hex string
-     */
-    public static String bytesToHex(byte[] bytes) {
-        int len = bytes.length * 2;
-        char[] hexChars = new char[len];
-        for (int j = 0; j < bytes.length; j++) {
-            int v = bytes[j] & 0xFF;
-            hexChars[j * 2] = HEX_CHARS[v >>> 4];
-            hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
-        }
-
-        return new String(hexChars);
-    }
-
-    /**
-     * Convert hex string like follows into byte array
-     * 02020080
-     * @param hexString The hex string
-     * @return The bytes
-     */
-    public static byte[] hex2bytes(String hexString) {
-        hexString = hexString.toUpperCase();
-        int len = hexString.length() / 2;
-        byte[] bytes = new byte[len];
-        char[] hexChars = hexString.toCharArray();
-        for (int i = 0, j = 0; i < len; ++i) {
-            bytes[i] = (byte) ((HEX_CHARS_STR.indexOf(hexChars[j++]) << 4)
-                + HEX_CHARS_STR.indexOf(hexChars[j++]));
-        }
-
-        return bytes;
-    }
-}


[16/26] directory-kerby git commit: DIRKRB-486 Dumping support for built-in ASN1 types and user defined types.

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredReq.java
index aaa0d24..91a5ca9 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredReq.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredReq.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.CheckSum;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
+import static org.apache.kerby.kerberos.kerb.type.fast.KrbFastArmoredReq.MyEnum.*;
 
 /**
  KrbFastArmoredReq ::= SEQUENCE {
@@ -46,9 +48,21 @@ import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
  }
  */
 public class KrbFastArmoredReq extends KrbSequenceType {
-    private static final int ARMOR = 0;
-    private static final int REQ_CHECKSUM = 1;
-    private static final int ENC_FAST_REQ = 2;
+    protected static enum MyEnum implements EnumType {
+        ARMOR,
+        REQ_CHECKSUM,
+        ENC_FAST_REQ;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     private KrbFastReq fastReq;
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastFinished.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastFinished.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastFinished.java
index 2944471..7ae6b07 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastFinished.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastFinished.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.CheckSum;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
 import org.apache.kerby.kerberos.kerb.type.pa.PaData;
+import static org.apache.kerby.kerberos.kerb.type.fast.KrbFastFinished.MyEnum.*;
 
 /**
  KrbFastFinished ::= SEQUENCE {
@@ -43,9 +45,21 @@ import org.apache.kerby.kerberos.kerb.type.pa.PaData;
  }
  */
 public class KrbFastFinished extends KrbSequenceType {
-    private static final int FAST_OPTIONS = 0;
-    private static final int PADATA = 1;
-    private static final int REQ_BODY = 2;
+    protected static enum MyEnum implements EnumType {
+        FAST_OPTIONS,
+        PADATA,
+        REQ_BODY;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(FAST_OPTIONS, KrbFastArmor.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastReq.java
index 0f7da88..eacbacf 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastReq.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastReq.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.kdc.KdcReqBody;
 import org.apache.kerby.kerberos.kerb.type.pa.PaData;
+import static org.apache.kerby.kerberos.kerb.type.fast.KrbFastReq.MyEnum.*;
 
 /**
  KrbFastReq ::= SEQUENCE {
@@ -39,9 +41,21 @@ import org.apache.kerby.kerberos.kerb.type.pa.PaData;
  }
  */
 public class KrbFastReq extends KrbSequenceType {
-    private static final int FAST_OPTIONS = 0;
-    private static final int PADATA = 1;
-    private static final int REQ_BODY = 2;
+    protected static enum MyEnum implements EnumType {
+        FAST_OPTIONS,
+        PADATA,
+        REQ_BODY;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(FAST_OPTIONS, FastOptions.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastResponse.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastResponse.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastResponse.java
index cd06c42..134e7d6 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastResponse.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastResponse.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
 import org.apache.kerby.kerberos.kerb.type.pa.PaData;
+import static org.apache.kerby.kerberos.kerb.type.fast.KrbFastResponse.MyEnum.*;
 
 /**
  KrbFastResponse ::= SEQUENCE {
@@ -41,10 +43,22 @@ import org.apache.kerby.kerberos.kerb.type.pa.PaData;
  }
  */
 public class KrbFastResponse extends KrbSequenceType {
-    private static final int PADATA = 0;
-    private static final int STRENGTHEN_KEY = 1;
-    private static final int FINISHED = 2;
-    private static final int NONCE = 3;
+    protected static enum MyEnum implements EnumType {
+        PADATA,
+        STRENGTHEN_KEY,
+        FINISHED,
+        NONCE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PADATA, PaData.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaAuthnEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaAuthnEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaAuthnEntry.java
index 8494ef9..ed0a29d 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaAuthnEntry.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaAuthnEntry.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.pa.PaDataType;
+import static org.apache.kerby.kerberos.kerb.type.fast.PaAuthnEntry.MyEnum.*;
 
 /**
  PA-AUTHENTICATION-SET-ELEM ::= SEQUENCE {
@@ -34,9 +36,21 @@ import org.apache.kerby.kerberos.kerb.type.pa.PaDataType;
  }
  */
 public class PaAuthnEntry extends KrbSequenceType {
-    private static final int PA_TYPE = 0;
-    private static final int PA_HINT = 1;
-    private static final int PA_VALUE = 2;
+    protected static enum MyEnum implements EnumType {
+        PA_TYPE,
+        PA_HINT,
+        PA_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PA_TYPE, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastReply.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastReply.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastReply.java
index f3966f6..33b5863 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastReply.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastReply.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.kerberos.kerb.type.fast;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.kerberos.kerb.type.fast.PaFxFastReply.MyEnum.*;
 
 /**
  PA-FX-FAST-REPLY ::= CHOICE {
@@ -29,7 +31,19 @@ import org.apache.kerby.asn1.ExplicitField;
  }
  */
 public class PaFxFastReply extends Asn1Choice {
-    private static final int ARMORED_DATA = 0;
+    protected static enum MyEnum implements EnumType {
+        ARMORED_DATA;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ARMORED_DATA, KrbFastArmoredRep.class)

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastRequest.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastRequest.java
index a1b26c7..865074e 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastRequest.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/PaFxFastRequest.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.kerberos.kerb.type.fast;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.kerberos.kerb.type.fast.PaFxFastRequest.MyEnum.*;
 
 /**
  PA-FX-FAST-REQUEST ::= CHOICE {
@@ -29,7 +31,19 @@ import org.apache.kerby.asn1.ExplicitField;
  }
  */
 public class PaFxFastRequest extends Asn1Choice {
-    private static final int ARMORED_DATA = 0;
+    protected static enum MyEnum implements EnumType {
+        ARMORED_DATA;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ARMORED_DATA, KrbFastArmoredReq.class)

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/EncKdcRepPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/EncKdcRepPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/EncKdcRepPart.java
index d363ca7..59ced72 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/EncKdcRepPart.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/EncKdcRepPart.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.kdc;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
@@ -30,6 +31,7 @@ import org.apache.kerby.kerberos.kerb.type.base.HostAddresses;
 import org.apache.kerby.kerberos.kerb.type.base.LastReq;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
 import org.apache.kerby.kerberos.kerb.type.ticket.TicketFlags;
+import static org.apache.kerby.kerberos.kerb.type.kdc.EncKdcRepPart.MyEnum.*;
 
 /**
  EncKDCRepPart   ::= SEQUENCE {
@@ -48,18 +50,30 @@ import org.apache.kerby.kerberos.kerb.type.ticket.TicketFlags;
  }
  */
 public abstract class EncKdcRepPart extends KrbAppSequenceType {
-    private static final int KEY = 0;
-    private static final int LAST_REQ = 1;
-    private static final int NONCE = 2;
-    private static final int KEY_EXPIRATION = 3;
-    private static final int FLAGS = 4;
-    private static final int AUTHTIME = 5;
-    private static final int STARTTIME = 6;
-    private static final int ENDTIME = 7;
-    private static final int RENEW_TILL = 8;
-    private static final int SREALM = 9;
-    private static final int SNAME = 10;
-    private static final int CADDR = 11;
+    protected static enum MyEnum implements EnumType {
+        KEY,
+        LAST_REQ,
+        NONCE,
+        KEY_EXPIRATION,
+        FLAGS,
+        AUTHTIME,
+        STARTTIME,
+        ENDTIME,
+        RENEW_TILL,
+        SREALM,
+        SNAME,
+        CADDR;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(KEY, EncryptionKey.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
index 3a5edc6..7e44c96 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcOption.java
@@ -67,6 +67,11 @@ public enum KdcOption implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static KdcOption fromValue(int value) {
         for (EnumType e : values()) {
             if (e.getValue() == value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcRep.java
index 9d0bd88..9d01c23 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcRep.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcRep.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.kdc;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
@@ -29,6 +30,7 @@ import org.apache.kerby.kerberos.kerb.type.base.KrbMessageType;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
 import org.apache.kerby.kerberos.kerb.type.pa.PaData;
 import org.apache.kerby.kerberos.kerb.type.ticket.Ticket;
+import static org.apache.kerby.kerberos.kerb.type.kdc.KdcRep.MyEnum.*;
 
 /**
  KDC-REP         ::= SEQUENCE {
@@ -45,11 +47,25 @@ import org.apache.kerby.kerberos.kerb.type.ticket.Ticket;
  }
  */
 public class KdcRep extends KrbMessage {
-    private static final int PADATA = 2;
-    private static final int CREALM = 3;
-    private static final int CNAME = 4;
-    private static final int TICKET = 5;
-    private static final int ENC_PART = 6;
+    protected static enum MyEnum implements EnumType {
+        PVNO,
+        MSG_TYPE,
+        PADATA,
+        CREALM,
+        CNAME,
+        TICKET,
+        ENC_PART;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PVNO, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReq.java
index 98b2d80..cb1a13e 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReq.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReq.java
@@ -20,12 +20,14 @@
 package org.apache.kerby.kerberos.kerb.type.kdc;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.base.KrbMessage;
 import org.apache.kerby.kerberos.kerb.type.base.KrbMessageType;
 import org.apache.kerby.kerberos.kerb.type.pa.PaData;
 import org.apache.kerby.kerberos.kerb.type.pa.PaDataEntry;
+import static org.apache.kerby.kerberos.kerb.type.kdc.KdcReq.MyEnum.*;
 
 /**
  KDC-REQ         ::= SEQUENCE {
@@ -38,8 +40,22 @@ import org.apache.kerby.kerberos.kerb.type.pa.PaDataEntry;
  }
  */
 public class KdcReq extends KrbMessage {
-    private static final int PADATA = 2;
-    private static final int REQ_BODY = 3;
+    protected static enum MyEnum implements EnumType {
+        PVNO,
+        MSG_TYPE,
+        PADATA,
+        REQ_BODY;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PVNO, 1, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
index f7a23c1..f8fda13 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/kdc/KdcReqBody.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.kdc;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
@@ -32,6 +33,7 @@ import org.apache.kerby.kerberos.kerb.type.base.EncryptionType;
 import org.apache.kerby.kerberos.kerb.type.base.HostAddresses;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
 import org.apache.kerby.kerberos.kerb.type.ticket.Tickets;
+import static org.apache.kerby.kerberos.kerb.type.kdc.KdcReqBody.MyEnum.*;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -60,18 +62,30 @@ import java.util.List;
  }
  */
 public class KdcReqBody extends KrbSequenceType {
-    private static final int KDC_OPTIONS = 0;
-    private static final int CNAME = 1;
-    private static final int REALM = 2;
-    private static final int SNAME = 3;
-    private static final int FROM = 4;
-    private static final int TILL = 5;
-    private static final int RTIME = 6;
-    private static final int NONCE = 7;
-    private static final int ETYPE = 8;
-    private static final int ADDRESSES = 9;
-    private static final int ENC_AUTHORIZATION_DATA = 10;
-    private static final int ADDITIONAL_TICKETS = 11;
+    protected static enum MyEnum implements EnumType {
+        KDC_OPTIONS,
+        CNAME,
+        REALM,
+        SNAME,
+        FROM,
+        TILL,
+        RTIME,
+        NONCE,
+        ETYPE,
+        ADDRESSES,
+        ENC_AUTHORIZATION_DATA,
+        ADDITIONAL_TICKETS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(KDC_OPTIONS, KdcOptions.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaAuthenticationSetElem.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaAuthenticationSetElem.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaAuthenticationSetElem.java
index 83b390e..0594bd2 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaAuthenticationSetElem.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaAuthenticationSetElem.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.PaAuthenticationSetElem.MyEnum.*;
 
 /**
  PA-AUTHENTICATION-SET-ELEM ::= SEQUENCE {
@@ -34,9 +36,21 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class PaAuthenticationSetElem extends KrbSequenceType {
-    private static final int PA_TYPE = 0;
-    private static final int PA_HINT = 1;
-    private static final int PA_VALUE = 2;
+    protected static enum MyEnum implements EnumType {
+        PA_TYPE,
+        PA_HINT,
+        PA_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PA_TYPE, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataEntry.java
index ea2f131..1cf75ec 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataEntry.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataEntry.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.PaDataEntry.MyEnum.*;
 
 /**
  PA-DATA         ::= SEQUENCE {
@@ -33,8 +35,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class PaDataEntry extends KrbSequenceType {
-    private static final int PADATA_TYPE = 0;
-    private static final int PADATA_VALUE = 1;
+    protected static enum MyEnum implements EnumType {
+        PADATA_TYPE,
+        PADATA_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PADATA_TYPE, 1, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
index 44cb2c5..06e0db2 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaDataType.java
@@ -78,6 +78,11 @@ public enum PaDataType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static PaDataType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaEncTsEnc.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaEncTsEnc.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaEncTsEnc.java
index 4ffff7c..b7cf263 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaEncTsEnc.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/PaEncTsEnc.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.PaEncTsEnc.MyEnum.*;
 
 /**
  PA-ENC-TS-ENC           ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class PaEncTsEnc extends KrbSequenceType {
-    private static final int PATIMESTAMP = 0;
-    private static final int PAUSEC = 1;
+    protected static enum MyEnum implements EnumType {
+        PATIMESTAMP,
+        PAUSEC;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PATIMESTAMP, 0, KerberosTime.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/OtpTokenInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/OtpTokenInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/OtpTokenInfo.java
index 900d2d2..6e3da3d 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/OtpTokenInfo.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/OtpTokenInfo.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.pa.otp;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.type.Asn1Utf8String;
@@ -27,6 +28,7 @@ import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.pa.pkinit.AlgorithmIdentifiers;
+import static org.apache.kerby.kerberos.kerb.type.pa.otp.OtpTokenInfo.MyEnum.*;
 
 /**
  OTP-TOKENINFO ::= SEQUENCE {
@@ -42,15 +44,27 @@ import org.apache.kerby.kerberos.kerb.type.pa.pkinit.AlgorithmIdentifiers;
  }
  */
 public class OtpTokenInfo extends KrbSequenceType {
-    private static final int FLAGS = 0;
-    private static final int OTP_VENDOR = 1;
-    private static final int OTP_CHALLENGE = 2;
-    private static final int OTP_LENGTH = 3;
-    private static final int OTP_FORMAT = 4;
-    private static final int OTP_TOKEN_ID = 5;
-    private static final int OTP_ALG_ID = 6;
-    private static final int SUPPORTED_HASH_ALG = 7;
-    private static final int ITERATION_COUNT = 8;
+    protected static enum MyEnum implements EnumType {
+        FLAGS,
+        OTP_VENDOR,
+        OTP_CHALLENGE,
+        OTP_LENGTH,
+        OTP_FORMAT,
+        OTP_TOKEN_ID,
+        OTP_ALG_ID,
+        SUPPORTED_HASH_ALG,
+        ITERATION_COUNT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(FLAGS, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/PaOtpChallenge.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/PaOtpChallenge.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/PaOtpChallenge.java
index cbf245c..f5e58f6 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/PaOtpChallenge.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/otp/PaOtpChallenge.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.pa.otp;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.type.Asn1Utf8String;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.otp.PaOtpChallenge.MyEnum.*;
 
 /**
  PA-OTP-CHALLENGE ::= SEQUENCE {
@@ -36,11 +38,23 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class PaOtpChallenge extends KrbSequenceType {
-    private static final int NONCE = 0;
-    private static final int OTP_SERVICE = 1;
-    private static final int OTP_TOKEN_INFO = 2;
-    private static final int SALT = 3;
-    private static final int S2KPARAMS = 4;
+    protected static enum MyEnum implements EnumType {
+        NONCE,
+        OTP_SERVICE,
+        OTP_TOKEN_INFO,
+        SALT,
+        S2KPARAMS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(NONCE, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/AuthPack.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/AuthPack.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/AuthPack.java
index c387674..60e4f65 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/AuthPack.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/AuthPack.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.x509.type.SubjectPublicKeyInfo;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.AuthPack.MyEnum.*;
 
 /**
  AuthPack ::= SEQUENCE {
@@ -33,10 +35,22 @@ import org.apache.kerby.x509.type.SubjectPublicKeyInfo;
  }
  */
 public class AuthPack extends KrbSequenceType {
-    private static final int PK_AUTHENTICATOR = 0;
-    private static final int CLIENT_PUBLIC_VALUE = 1;
-    private static final int SUPPORTED_CMS_TYPES = 2;
-    private static final int CLIENT_DH_NONCE = 3;
+    protected static enum MyEnum implements EnumType {
+        PK_AUTHENTICATOR,
+        CLIENT_PUBLIC_VALUE,
+        SUPPORTED_CMS_TYPES,
+        CLIENT_DH_NONCE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PK_AUTHENTICATOR, PkAuthenticator.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/DHRepInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/DHRepInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/DHRepInfo.java
index 1ca5697..abb0d57 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/DHRepInfo.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/DHRepInfo.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.asn1.ImplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.DHRepInfo.MyEnum.*;
 
 /**
  DHRepInfo ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class DHRepInfo extends KrbSequenceType {
-    private static final int DH_SIGNED_DATA = 0;
-    private static final int SERVER_DH_NONCE = 1;
+    protected static enum MyEnum implements EnumType {
+        DH_SIGNED_DATA,
+        SERVER_DH_NONCE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ImplicitField(DH_SIGNED_DATA, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ExternalPrincipalIdentifier.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ExternalPrincipalIdentifier.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ExternalPrincipalIdentifier.java
index d686773..27f84e9 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ExternalPrincipalIdentifier.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ExternalPrincipalIdentifier.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ImplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.ExternalPrincipalIdentifier.MyEnum.*;
 
 /**
  ExternalPrincipalIdentifier ::= SEQUENCE {
@@ -32,9 +34,21 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class ExternalPrincipalIdentifier extends KrbSequenceType {
-    private static final int SUBJECT_NAME = 0;
-    private static final int ISSUER_AND_SERIAL_NUMBER = 1;
-    private static final int SUBJECT_KEY_IDENTIFIER = 2;
+    protected static enum MyEnum implements EnumType {
+        SUBJECT_NAME,
+        ISSUER_AND_SERIAL_NUMBER,
+        SUBJECT_KEY_IDENTIFIER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ImplicitField(SUBJECT_NAME, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
index 7437f8d..f3669eb 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
@@ -19,12 +19,14 @@
  */
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.KdcDHKeyInfo.MyEnum.*;
 
 /**
  KDCDHKeyInfo ::= SEQUENCE {
@@ -34,9 +36,21 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class KdcDHKeyInfo extends KrbSequenceType {
-    private static final int SUBJECT_PUBLICK_KEY = 0;
-    private static final int NONCE = 1;
-    private static final int DH_KEY_EXPIRATION = 2;
+    protected static enum MyEnum implements EnumType {
+        SUBJECT_PUBLICK_KEY,
+        NONCE,
+        DH_KEY_EXPIRATION;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(SUBJECT_PUBLICK_KEY, Asn1BitString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/Krb5PrincipalName.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/Krb5PrincipalName.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/Krb5PrincipalName.java
index 4f131a4..81cde21 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/Krb5PrincipalName.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/Krb5PrincipalName.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
 import org.apache.kerby.kerberos.kerb.type.base.Realm;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.Krb5PrincipalName.MyEnum.*;
 
 /**
  KRB5PrincipalName ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.base.Realm;
  }
  */
 public class Krb5PrincipalName extends KrbSequenceType {
-    private static final int REALM = 0;
-    private static final int PRINCIPAL_NAME = 1;
+    protected static enum MyEnum implements EnumType {
+        REALM,
+        PRINCIPAL_NAME;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(REALM, Realm.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsRep.java
index 204b612..3d3ed3c 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsRep.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsRep.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.asn1.ImplicitField;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.PaPkAsRep.MyEnum.*;
 
 /**
  PA-PK-AS-REP ::= CHOICE {
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.ImplicitField;
  }
  */
 public class PaPkAsRep extends Asn1Choice {
-    private static final int DH_INFO = 0;
-    private static final int ENCKEY_PACK = 1;
+    protected static enum MyEnum implements EnumType {
+        DH_INFO,
+        ENCKEY_PACK;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(DH_INFO, DHRepInfo.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsReq.java
index 1d59112..ed6ebac 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsReq.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PaPkAsReq.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.asn1.ImplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.PaPkAsReq.MyEnum.*;
 
 /**
  PA-PK-AS-REQ ::= SEQUENCE {
@@ -33,9 +35,21 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class PaPkAsReq extends KrbSequenceType {
-    private static final int SIGNED_AUTH_PACK = 0;
-    private static final int TRUSTED_CERTIFIERS = 1;
-    private static final int KDC_PKID = 2;
+    protected static enum MyEnum implements EnumType {
+        SIGNED_AUTH_PACK,
+        TRUSTED_CERTIFIERS,
+        KDC_PKID;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ImplicitField(SIGNED_AUTH_PACK, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PkAuthenticator.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PkAuthenticator.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PkAuthenticator.java
index 4549552..9f5b8b1 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PkAuthenticator.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/PkAuthenticator.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.PkAuthenticator.MyEnum.*;
 
 /**
  PKAuthenticator ::= SEQUENCE {
@@ -42,10 +44,22 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class PkAuthenticator extends KrbSequenceType {
-    private static final int CUSEC = 0;
-    private static final int CTIME = 1;
-    private static final int NONCE = 2;
-    private static final int PA_CHECKSUM = 3;
+    protected static enum MyEnum implements EnumType {
+        CUSEC,
+        CTIME,
+        NONCE,
+        PA_CHECKSUM;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(CUSEC, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ReplyKeyPack.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ReplyKeyPack.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ReplyKeyPack.java
index 8baa470..f219c47 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ReplyKeyPack.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/ReplyKeyPack.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa.pkinit;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.CheckSum;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
+import static org.apache.kerby.kerberos.kerb.type.pa.pkinit.ReplyKeyPack.MyEnum.*;
 
 /**
  ReplyKeyPack ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
  }
  */
 public class ReplyKeyPack extends KrbSequenceType {
-    private static final int REPLY_KEY = 0;
-    private static final int AS_CHECKSUM = 1;
+    protected static enum MyEnum implements EnumType {
+        REPLY_KEY,
+        AS_CHECKSUM;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(REPLY_KEY, EncryptionKey.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenChallenge.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenChallenge.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenChallenge.java
index 77bd369..ff94b95 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenChallenge.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenChallenge.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.kerberos.kerb.type.pa.token;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.token.PaTokenChallenge.MyEnum.*;
 
 /**
  PA-TOKEN-CHALLENGE ::= SEQUENCE {
@@ -29,7 +31,19 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
 */
 public class PaTokenChallenge extends KrbSequenceType {
-    private static final int TOKENINFOS = 0;
+    protected static enum MyEnum implements EnumType {
+        TOKENINFOS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(TOKENINFOS, TokenInfos.class)

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenRequest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenRequest.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenRequest.java
index 0b99fe2..9d5d730 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenRequest.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/PaTokenRequest.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.kerberos.kerb.type.pa.token;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.KrbToken;
+import static org.apache.kerby.kerberos.kerb.type.pa.token.PaTokenRequest.MyEnum.*;
 
 /**
  PA-TOKEN-REQUEST ::= SEQUENCE {
@@ -31,8 +33,20 @@ import org.apache.kerby.kerberos.kerb.type.base.KrbToken;
  }
 */
 public class PaTokenRequest extends KrbSequenceType {
-    private static final int TOKEN_INFO = 0;
-    private static final int TOKEN = 1;
+    protected static enum MyEnum implements EnumType {
+        TOKEN_INFO,
+        TOKEN;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(TOKEN_INFO, TokenInfo.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
index 12d8ea6..a4f2211 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenFlag.java
@@ -39,6 +39,11 @@ public enum TokenFlag implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static TokenFlag fromValue(int value) {
         for (EnumType e : values()) {
             if (e.getValue() == value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenInfo.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenInfo.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenInfo.java
index 0acc254..1d4173c 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenInfo.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/token/TokenInfo.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.pa.token;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.type.Asn1Utf8String;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.pa.token.TokenInfo.MyEnum.*;
 
 /**
  TokenInfo ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class TokenInfo extends KrbSequenceType {
-    private static final int FLAGS = 0;
-    private static final int TOKEN_VENDOR = 1;
+    protected static enum MyEnum implements EnumType {
+        FLAGS,
+        TOKEN_VENDOR;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(FLAGS, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/EncTicketPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/EncTicketPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/EncTicketPart.java
index 40c4473..16b56d0 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/EncTicketPart.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/EncTicketPart.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.ticket;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
@@ -29,6 +30,7 @@ import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
 import org.apache.kerby.kerberos.kerb.type.base.HostAddresses;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
 import org.apache.kerby.kerberos.kerb.type.base.TransitedEncoding;
+import static org.apache.kerby.kerberos.kerb.type.ticket.EncTicketPart.MyEnum.*;
 
 /**
  -- Encrypted part of ticket
@@ -49,17 +51,29 @@ import org.apache.kerby.kerberos.kerb.type.base.TransitedEncoding;
 public class EncTicketPart extends KrbAppSequenceType {
     public static final int TAG = 3;
 
-    private static final int FLAGS = 0;
-    private static final int KEY = 1;
-    private static final int CREALM = 2;
-    private static final int CNAME = 3;
-    private static final int TRANSITED = 4;
-    private static final int AUTHTIME = 5;
-    private static final int STARTTIME = 6;
-    private static final int ENDTIME = 7;
-    private static final int RENEW_TILL = 8;
-    private static final int CADDR = 9;
-    private static final int AUTHORIZATION_DATA = 10;
+    protected static enum MyEnum implements EnumType {
+        FLAGS,
+        KEY,
+        CREALM,
+        CNAME,
+        TRANSITED,
+        AUTHTIME,
+        STARTTIME,
+        ENDTIME,
+        RENEW_TILL,
+        CADDR,
+        AUTHORIZATION_DATA;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(FLAGS, 0, TicketFlags.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/Ticket.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/Ticket.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/Ticket.java
index 1855e37..bf6a65c 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/Ticket.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/Ticket.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.ticket;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.KrbConstant;
@@ -27,6 +28,7 @@ import org.apache.kerby.kerberos.kerb.type.KerberosString;
 import org.apache.kerby.kerberos.kerb.type.KrbAppSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
+import static org.apache.kerby.kerberos.kerb.type.ticket.Ticket.MyEnum.*;
 
 /**
  Ticket          ::= [APPLICATION 1] SEQUENCE {
@@ -40,10 +42,22 @@ public class Ticket extends KrbAppSequenceType {
     public static final int TKT_KVNO = KrbConstant.KRB_V5;
     public static final int TAG = 1;
 
-    private static final int TKT_VNO = 0;
-    private static final int REALM = 1;
-    private static final int SNAME = 2;
-    private static final int ENC_PART = 3;
+    protected static enum MyEnum implements EnumType {
+        TKT_VNO,
+        REALM,
+        SNAME,
+        ENC_PART;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(TKT_VNO, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
index 48dd355..942af84 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ticket/TicketFlag.java
@@ -50,6 +50,11 @@ public enum TicketFlag implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static TicketFlag fromValue(int value) {
         for (EnumType e : values()) {
             if (e.getValue() == value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Attribute.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Attribute.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Attribute.java
index 1eabefe..cdc3a27 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Attribute.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Attribute.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.x509.type.AttributeValues;
+import static org.apache.kerby.cms.type.Attribute.MyEnum.*;
 
 /**
  * Ref. RFC 5652
@@ -36,8 +38,20 @@ import org.apache.kerby.x509.type.AttributeValues;
  * </pre>
  */
 public class Attribute extends Asn1SequenceType {
-    private static final int ATTR_TYPE = 0;
-    private static final int ATTR_VALUES = 1;
+    protected static enum MyEnum implements EnumType {
+        ATTR_TYPE,
+        ATTR_VALUES;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(ATTR_TYPE, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateInfoV1.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateInfoV1.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateInfoV1.java
index e1796e9..f0a5e39 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateInfoV1.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateInfoV1.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1Integer;
@@ -29,6 +30,7 @@ import org.apache.kerby.x509.type.AttCertValidityPeriod;
 import org.apache.kerby.x509.type.Attributes;
 import org.apache.kerby.x509.type.CertificateSerialNumber;
 import org.apache.kerby.x509.type.Extensions;
+import static org.apache.kerby.cms.type.AttributeCertificateInfoV1.MyEnum.*;
 
 /**
  * AttributeCertificateInfoV1 ::= SEQUENCE {
@@ -46,16 +48,27 @@ import org.apache.kerby.x509.type.Extensions;
  * AttCertVersionV1 ::= INTEGER { v1(0) }
  */
 public class AttributeCertificateInfoV1 extends Asn1SequenceType {
-
-    private static final int VERSION = 0;
-    private static final int SUBJECT = 1;
-    private static final int ISSUER = 2;
-    private static final int SIGNATURE = 3;
-    private static final int SERIAL_NUMBER = 4;
-    private static final int ATTR_CERT_VALIDITY_PERIOD = 5;
-    private static final int ATTRIBUTES = 6;
-    private static final int ISSUER_UNIQUE_ID = 7;
-    private static final int EXTENSIONS = 8;
+    protected static enum MyEnum implements EnumType {
+        VERSION,
+        SUBJECT,
+        ISSUER,
+        SIGNATURE,
+        SERIAL_NUMBER,
+        ATTR_CERT_VALIDITY_PERIOD,
+        ATTRIBUTES,
+        ISSUER_UNIQUE_ID,
+        EXTENSIONS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(VERSION, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateV1.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateV1.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateV1.java
index c45a76f..a1aa414 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateV1.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/AttributeCertificateV1.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.x509.type.AlgorithmIdentifier;
 import org.apache.kerby.x509.type.AttributeCertificateInfo;
+import static org.apache.kerby.cms.type.AttributeCertificateV1.MyEnum.*;
 
 /**
  * AttributeCertificateV1 ::= SEQUENCE {
@@ -33,9 +35,21 @@ import org.apache.kerby.x509.type.AttributeCertificateInfo;
  * }
  */
 public class AttributeCertificateV1 extends Asn1SequenceType {
-    private static final int ACI_INFO = 0;
-    private static final int SIGNATURE_ALGORITHM = 1;
-    private static final int SIGNATURE = 2;
+    protected static enum MyEnum implements EnumType {
+        ACI_INFO,
+        SIGNATURE_ALGORITHM,
+        SIGNATURE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(ACI_INFO, AttributeCertificateInfoV1.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Certificate.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Certificate.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Certificate.java
index 46e625b..fd15ee7 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Certificate.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Certificate.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.x509.type.AlgorithmIdentifier;
 import org.apache.kerby.x509.type.TBSCertificate;
+import static org.apache.kerby.cms.type.Certificate.MyEnum.*;
 
 /**
  * <pre>
@@ -35,10 +37,21 @@ import org.apache.kerby.x509.type.TBSCertificate;
  * </pre>
  */
 public class Certificate extends Asn1SequenceType {
+    protected static enum MyEnum implements EnumType {
+        TBS_CERTIFICATE,
+        SIGNATURE_ALGORITHM,
+        SIGNATURE;
 
-    private static final int TBS_CERTIFICATE = 0;
-    private static final int SIGNATURE_ALGORITHM = 1;
-    private static final int SIGNATURE = 2;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(TBS_CERTIFICATE, TBSCertificate.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateChoices.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateChoices.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateChoices.java
index 598c896..91b1930 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateChoices.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateChoices.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ImplicitField;
+import static org.apache.kerby.cms.type.CertificateChoices.MyEnum.*;
 
 /**
  * CertificateChoices ::= CHOICE {
@@ -32,12 +34,23 @@ import org.apache.kerby.asn1.ImplicitField;
  *   other [3] IMPLICIT OtherCertificateFormat }
  */
 public class CertificateChoices extends Asn1Choice {
+    protected static enum MyEnum implements EnumType {
+        CERTIFICATE,
+        EXTENDED_CERTIFICATE,
+        V1_ATTR_CERT,
+        V2_ATTR_CERT,
+        OTHER;
 
-    private static final int CERTIFICATE = 0;
-    private static final int EXTENDED_CERTIFICATE = 1;
-    private static final int V1_ATTR_CERT = 2;
-    private static final int V2_ATTR_CERT = 3;
-    private static final int OTHER = 4;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(CERTIFICATE, Certificate.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateList.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateList.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateList.java
index 8502ca6..c7dd0dd 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateList.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CertificateList.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.x509.type.AlgorithmIdentifier;
 import org.apache.kerby.x509.type.TBSCertList;
+import static org.apache.kerby.cms.type.CertificateList.MyEnum.*;
 
 /**
  * Ref. RFC-2459
@@ -37,9 +39,21 @@ import org.apache.kerby.x509.type.TBSCertList;
  * </pre>
  */
 public class CertificateList extends Asn1SequenceType {
-    private static final int TBS_CERT_LIST = 0;
-    private static final int SIGNATURE_ALGORITHMS = 1;
-    private static final int SIGNATURE_VALUE = 2;
+    protected static enum MyEnum implements EnumType {
+        TBS_CERT_LIST,
+        SIGNATURE_ALGORITHMS,
+        SIGNATURE_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(TBS_CERT_LIST, TBSCertList.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
index 9f120ad..e1f1f8f 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CmsVersion.java
@@ -39,6 +39,11 @@ enum CmsVersionEnum implements EnumType {
     public int getValue() {
         return ordinal();
     }
+
+    @Override
+    public String getName() {
+        return name();
+    }
 }
 
 public class CmsVersion extends Asn1Integer {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CompressedData.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CompressedData.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CompressedData.java
index 9f6f6cd..1ba4a78 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CompressedData.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/CompressedData.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.x509.type.AlgorithmIdentifier;
+import static org.apache.kerby.cms.type.CompressedData.MyEnum.*;
 
 /** 
  * Ref. RFC 3274
@@ -35,10 +37,21 @@ import org.apache.kerby.x509.type.AlgorithmIdentifier;
  * </pre>
  */
 public class CompressedData extends Asn1SequenceType {
+    protected static enum MyEnum implements EnumType {
+        VERSION,
+        COMPRESSION_ALGORITHM,
+        ENCAP_CONTENT_INFO;
 
-    private static final int VERSION = 0;
-    private static final int COMPRESSION_ALGORITHM = 1;
-    private static final int ENCAP_CONTENT_INFO = 2;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(VERSION, CmsVersion.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ContentInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ContentInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ContentInfo.java
index 19c17ea..a33d0e3 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ContentInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ContentInfo.java
@@ -19,12 +19,14 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.cms.type.ContentInfo.MyEnum.*;
 
 /**
  * Ref. RFC 5652
@@ -39,8 +41,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class ContentInfo extends Asn1SequenceType {
-    private static final int CONTENT_TYPE = 0;
-    private static final int CONTENT = 1;
+    protected static enum MyEnum implements EnumType {
+        CONTENT_TYPE,
+        CONTENT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(CONTENT_TYPE, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/EncapsulatedContentInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/EncapsulatedContentInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/EncapsulatedContentInfo.java
index 24fa2ab..9744c67 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/EncapsulatedContentInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/EncapsulatedContentInfo.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.cms.type.EncapsulatedContentInfo.MyEnum.*;
 
 /**
  * EncapsulatedContentInfo ::= SEQUENCE {
@@ -34,8 +36,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * ContentType ::= OBJECT IDENTIFIER
  */
 public class EncapsulatedContentInfo extends Asn1SequenceType {
-    private static final int CONTENT_TYPE = 0;
-    private static final int CONTENT = 1;
+    protected static enum MyEnum implements EnumType {
+        CONTENT_TYPE,
+        CONTENT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
             new Asn1FieldInfo(CONTENT_TYPE, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificate.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificate.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificate.java
index 7ab4681..bc37a57 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificate.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificate.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.cms.type.ExtendedCertificate.MyEnum.*;
 
 /**
  * ExtendedCertificate ::= SEQUENCE {
@@ -30,9 +32,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * }
  */
 public class ExtendedCertificate extends Asn1SequenceType {
-    private static final int EXTENDED_CERTIFICATE_INFO = 0;
-    private static final int SIGNATURE_ALGORITHMS = 1;
-    private static final int SIGNATURE = 2;
+    protected static enum MyEnum implements EnumType {
+        EXTENDED_CERTIFICATE_INFO,
+        SIGNATURE_ALGORITHMS,
+        SIGNATURE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(EXTENDED_CERTIFICATE_INFO, ExtendedCertificateInfo.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificateInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificateInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificateInfo.java
index a4803a4..130db3a 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificateInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/ExtendedCertificateInfo.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.cms.type.ExtendedCertificateInfo.MyEnum.*;
 
 /**
  * ExtendedCertificateInfo ::= SEQUENCE {
@@ -30,9 +32,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * }
  */
 public class ExtendedCertificateInfo extends Asn1SequenceType {
-    private static final int CMS_VERSION = 0;
-    private static final int CERTIFICATE = 1;
-    private static final int ATTRIBUTES = 2;
+    protected static enum MyEnum implements EnumType {
+        CMS_VERSION,
+        CERTIFICATE,
+        ATTRIBUTES;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(CMS_VERSION, CmsVersion.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/IssuerAndSerialNumber.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/IssuerAndSerialNumber.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/IssuerAndSerialNumber.java
index 2416d3e..07ea824 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/IssuerAndSerialNumber.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/IssuerAndSerialNumber.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.x500.type.Name;
+import static org.apache.kerby.cms.type.IssuerAndSerialNumber.MyEnum.*;
 
 /**
  * Ref. RFC5652
@@ -36,8 +38,20 @@ import org.apache.kerby.x500.type.Name;
  * </pre>
  */
 public class IssuerAndSerialNumber extends Asn1SequenceType {
-    private static final int ISSUER = 0;
-    private static final int SERIAL_NUMBER = 1;
+    protected static enum MyEnum implements EnumType {
+        ISSUER,
+        SERIAL_NUMBER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(ISSUER, Name.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherCertificateFormat.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherCertificateFormat.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherCertificateFormat.java
index 74f2d7c..423b95c 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherCertificateFormat.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherCertificateFormat.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
+import static org.apache.kerby.cms.type.OtherCertificateFormat.MyEnum.*;
 
 /**
  * OtherCertificateFormat ::= SEQUENCE {
@@ -32,9 +34,20 @@ import org.apache.kerby.asn1.type.Asn1Type;
  * }
  */
 public class OtherCertificateFormat extends Asn1SequenceType {
+    protected static enum MyEnum implements EnumType {
+        OTHER_CERT_FORMAT,
+        OTHER_CERT;
 
-    private static final int OTHER_CERT_FORMAT = 0;
-    private static final int OTHER_CERT = 1;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(OTHER_CERT_FORMAT, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherRevocationInfoFormat.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherRevocationInfoFormat.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherRevocationInfoFormat.java
index e320a09..eb19db8 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherRevocationInfoFormat.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/OtherRevocationInfoFormat.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
+import static org.apache.kerby.cms.type.OtherRevocationInfoFormat.MyEnum.*;
 
 /**
  * OtherRevocationInfoFormat ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.type.Asn1Type;
  * }
  */
 public class OtherRevocationInfoFormat extends Asn1SequenceType {
-    private static final int OTHER_REV_INFO_FORMAT = 0;
-    private static final int OTHER_REV_INFO = 1;
+    protected static enum MyEnum implements EnumType {
+        OTHER_REV_INFO_FORMAT,
+        OTHER_REV_INFO;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(OTHER_REV_INFO_FORMAT, Asn1ObjectIdentifier.class),


[17/26] directory-kerby git commit: DIRKRB-486 Dumping support for built-in ASN1 types and user defined types.

Posted by pl...@apache.org.
DIRKRB-486 Dumping support for built-in ASN1 types and user defined types.


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/7c93f2e3
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/7c93f2e3
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/7c93f2e3

Branch: refs/heads/pkinit-support
Commit: 7c93f2e3a6086dede94dee5d09fed25281650c56
Parents: 597995d
Author: plusplusjiajia <ji...@intel.com>
Authored: Thu Dec 3 16:06:21 2015 +0800
Committer: plusplusjiajia <ji...@intel.com>
Committed: Thu Dec 3 16:06:21 2015 +0800

----------------------------------------------------------------------
 docs/kerby-checkstyle.xml                       |  2 +-
 .../org/apache/kerby/asn1/Asn1FieldInfo.java    | 12 ++--
 .../java/org/apache/kerby/asn1/EnumType.java    |  1 +
 .../org/apache/kerby/asn1/ExplicitField.java    |  6 +-
 .../org/apache/kerby/asn1/ImplicitField.java    |  6 +-
 .../org/apache/kerby/asn1/type/Asn1Choice.java  | 17 ++---
 .../kerby/asn1/type/Asn1CollectionType.java     | 38 +++++++----
 .../org/apache/kerby/asn1/type/Asn1Item.java    |  2 +-
 .../org/apache/kerby/asn1/type/Asn1Tagging.java |  2 +-
 .../kerby/asn1/type/TaggingCollection.java      | 21 +++---
 .../org/apache/kerby/asn1/PersonnelRecord.java  | 68 ++++++++++++++++----
 .../org/apache/kerby/asn1/TestAsn1Flags.java    |  6 ++
 .../kerby/kerberos/kerb/preauth/PaFlag.java     |  5 ++
 .../kerby/kerberos/kerb/KrbErrorCode.java       |  5 ++
 .../kerberos/kerb/type/KrbAppSequenceType.java  | 10 +--
 .../kerberos/kerb/type/KrbSequenceType.java     | 10 +--
 .../kerby/kerberos/kerb/type/ad/AdToken.java    | 16 ++++-
 .../kerb/type/ad/AuthorizationDataEntry.java    | 18 +++++-
 .../kerb/type/ad/AuthorizationType.java         |  5 ++
 .../kerby/kerberos/kerb/type/ap/ApOption.java   |  5 ++
 .../kerby/kerberos/kerb/type/ap/ApRep.java      | 18 +++++-
 .../kerby/kerberos/kerb/type/ap/ApReq.java      | 22 ++++++-
 .../kerberos/kerb/type/ap/Authenticator.java    | 33 +++++++---
 .../kerberos/kerb/type/ap/EncAPRepPart.java     | 23 +++++--
 .../kerby/kerberos/kerb/type/base/CheckSum.java | 18 +++++-
 .../kerberos/kerb/type/base/CheckSumType.java   |  1 +
 .../kerberos/kerb/type/base/EncryptedData.java  | 20 +++++-
 .../kerberos/kerb/type/base/EncryptionKey.java  | 18 +++++-
 .../kerb/type/base/EtypeInfo2Entry.java         | 20 +++++-
 .../kerberos/kerb/type/base/EtypeInfoEntry.java | 18 +++++-
 .../kerberos/kerb/type/base/HostAddrType.java   |  5 ++
 .../kerberos/kerb/type/base/HostAddress.java    | 18 +++++-
 .../kerby/kerberos/kerb/type/base/KeyUsage.java |  5 ++
 .../kerby/kerberos/kerb/type/base/KrbError.java | 38 +++++++----
 .../kerberos/kerb/type/base/KrbMessage.java     | 20 +++++-
 .../kerberos/kerb/type/base/KrbMessageType.java |  5 ++
 .../kerby/kerberos/kerb/type/base/KrbToken.java | 18 +++++-
 .../kerberos/kerb/type/base/LastReqEntry.java   | 18 +++++-
 .../kerberos/kerb/type/base/LastReqType.java    |  5 ++
 .../kerby/kerberos/kerb/type/base/NameType.java |  5 ++
 .../kerberos/kerb/type/base/PrincipalName.java  | 19 +++++-
 .../kerby/kerberos/kerb/type/base/SamType.java  |  5 ++
 .../kerberos/kerb/type/base/TokenFormat.java    |  5 ++
 .../kerb/type/base/TransitedEncoding.java       | 18 +++++-
 .../kerb/type/base/TransitedEncodingType.java   |  5 ++
 .../kerberos/kerb/type/fast/ArmorType.java      |  5 ++
 .../kerberos/kerb/type/fast/FastOption.java     |  5 ++
 .../kerberos/kerb/type/fast/KrbFastArmor.java   | 18 +++++-
 .../kerb/type/fast/KrbFastArmoredRep.java       | 16 ++++-
 .../kerb/type/fast/KrbFastArmoredReq.java       | 20 +++++-
 .../kerb/type/fast/KrbFastFinished.java         | 20 +++++-
 .../kerberos/kerb/type/fast/KrbFastReq.java     | 20 +++++-
 .../kerb/type/fast/KrbFastResponse.java         | 22 +++++--
 .../kerberos/kerb/type/fast/PaAuthnEntry.java   | 20 +++++-
 .../kerberos/kerb/type/fast/PaFxFastReply.java  | 16 ++++-
 .../kerb/type/fast/PaFxFastRequest.java         | 16 ++++-
 .../kerberos/kerb/type/kdc/EncKdcRepPart.java   | 38 +++++++----
 .../kerby/kerberos/kerb/type/kdc/KdcOption.java |  5 ++
 .../kerby/kerberos/kerb/type/kdc/KdcRep.java    | 26 ++++++--
 .../kerby/kerberos/kerb/type/kdc/KdcReq.java    | 20 +++++-
 .../kerberos/kerb/type/kdc/KdcReqBody.java      | 38 +++++++----
 .../kerb/type/pa/PaAuthenticationSetElem.java   | 20 +++++-
 .../kerberos/kerb/type/pa/PaDataEntry.java      | 18 +++++-
 .../kerby/kerberos/kerb/type/pa/PaDataType.java |  5 ++
 .../kerby/kerberos/kerb/type/pa/PaEncTsEnc.java | 18 +++++-
 .../kerberos/kerb/type/pa/otp/OtpTokenInfo.java | 32 ++++++---
 .../kerb/type/pa/otp/PaOtpChallenge.java        | 24 +++++--
 .../kerberos/kerb/type/pa/pkinit/AuthPack.java  | 22 +++++--
 .../kerberos/kerb/type/pa/pkinit/DHRepInfo.java | 18 +++++-
 .../pa/pkinit/ExternalPrincipalIdentifier.java  | 20 +++++-
 .../kerb/type/pa/pkinit/KdcDHKeyInfo.java       | 20 +++++-
 .../kerb/type/pa/pkinit/Krb5PrincipalName.java  | 18 +++++-
 .../kerberos/kerb/type/pa/pkinit/PaPkAsRep.java | 18 +++++-
 .../kerberos/kerb/type/pa/pkinit/PaPkAsReq.java | 20 +++++-
 .../kerb/type/pa/pkinit/PkAuthenticator.java    | 22 +++++--
 .../kerb/type/pa/pkinit/ReplyKeyPack.java       | 18 +++++-
 .../kerb/type/pa/token/PaTokenChallenge.java    | 16 ++++-
 .../kerb/type/pa/token/PaTokenRequest.java      | 18 +++++-
 .../kerberos/kerb/type/pa/token/TokenFlag.java  |  5 ++
 .../kerberos/kerb/type/pa/token/TokenInfo.java  | 18 +++++-
 .../kerb/type/ticket/EncTicketPart.java         | 36 +++++++----
 .../kerby/kerberos/kerb/type/ticket/Ticket.java | 22 +++++--
 .../kerberos/kerb/type/ticket/TicketFlag.java   |  5 ++
 .../org/apache/kerby/cms/type/Attribute.java    | 18 +++++-
 .../cms/type/AttributeCertificateInfoV1.java    | 33 +++++++---
 .../kerby/cms/type/AttributeCertificateV1.java  | 20 +++++-
 .../org/apache/kerby/cms/type/Certificate.java  | 19 +++++-
 .../kerby/cms/type/CertificateChoices.java      | 23 +++++--
 .../apache/kerby/cms/type/CertificateList.java  | 20 +++++-
 .../org/apache/kerby/cms/type/CmsVersion.java   |  5 ++
 .../apache/kerby/cms/type/CompressedData.java   | 19 +++++-
 .../org/apache/kerby/cms/type/ContentInfo.java  | 18 +++++-
 .../kerby/cms/type/EncapsulatedContentInfo.java | 18 +++++-
 .../kerby/cms/type/ExtendedCertificate.java     | 20 +++++-
 .../kerby/cms/type/ExtendedCertificateInfo.java | 20 +++++-
 .../kerby/cms/type/IssuerAndSerialNumber.java   | 18 +++++-
 .../kerby/cms/type/OtherCertificateFormat.java  | 17 ++++-
 .../cms/type/OtherRevocationInfoFormat.java     | 18 +++++-
 .../kerby/cms/type/RevocationInfoChoice.java    | 18 +++++-
 .../org/apache/kerby/cms/type/SignedData.java   | 26 ++++++--
 .../apache/kerby/cms/type/SignerIdentifier.java | 18 +++++-
 .../org/apache/kerby/cms/type/SignerInfo.java   | 28 ++++++--
 .../java/org/apache/kerby/cms/type/Subject.java | 18 +++++-
 .../kerby/x500/type/AttributeTypeAndValue.java  | 17 ++++-
 .../java/org/apache/kerby/x500/type/Name.java   | 16 ++++-
 .../kerby/x509/type/AccessDescription.java      | 18 +++++-
 .../kerby/x509/type/AlgorithmIdentifier.java    | 18 +++++-
 .../apache/kerby/x509/type/AttCertIssuer.java   | 18 +++++-
 .../kerby/x509/type/AttCertValidityPeriod.java  | 18 +++++-
 .../org/apache/kerby/x509/type/Attribute.java   | 18 +++++-
 .../kerby/x509/type/AttributeCertificate.java   | 20 +++++-
 .../x509/type/AttributeCertificateInfo.java     | 32 ++++++---
 .../kerby/x509/type/AuthorityKeyIdentifier.java | 19 +++++-
 .../kerby/x509/type/BasicConstraints.java       | 18 +++++-
 .../org/apache/kerby/x509/type/CRLReason.java   |  5 ++
 .../org/apache/kerby/x509/type/Certificate.java | 20 +++++-
 .../apache/kerby/x509/type/CertificateList.java | 20 +++++-
 .../apache/kerby/x509/type/CertificatePair.java | 18 +++++-
 .../apache/kerby/x509/type/DSAParameter.java    | 20 +++++-
 .../org/apache/kerby/x509/type/DigestInfo.java  | 18 +++++-
 .../kerby/x509/type/DigestedObjectType.java     |  5 ++
 .../apache/kerby/x509/type/DirectoryString.java | 23 +++++--
 .../org/apache/kerby/x509/type/DisplayText.java | 22 +++++--
 .../kerby/x509/type/DistributionPoint.java      | 20 +++++-
 .../kerby/x509/type/DistributionPointName.java  | 18 +++++-
 .../apache/kerby/x509/type/EDIPartyName.java    | 18 +++++-
 .../org/apache/kerby/x509/type/Extension.java   | 20 +++++-
 .../org/apache/kerby/x509/type/GeneralName.java | 33 +++++++---
 .../apache/kerby/x509/type/GeneralSubtree.java  | 20 +++++-
 .../java/org/apache/kerby/x509/type/Holder.java | 20 +++++-
 .../apache/kerby/x509/type/IetfAttrSyntax.java  | 18 +++++-
 .../kerby/x509/type/IetfAttrSyntaxChoice.java   | 20 +++++-
 .../apache/kerby/x509/type/IssuerSerial.java    | 20 +++++-
 .../x509/type/IssuingDistributionPoint.java     | 25 +++++--
 .../org/apache/kerby/x509/type/KeyUsage.java    |  5 ++
 .../apache/kerby/x509/type/NameConstraints.java | 18 +++++-
 .../apache/kerby/x509/type/NoticeReference.java | 18 +++++-
 .../kerby/x509/type/ObjectDigestInfo.java       | 22 +++++--
 .../org/apache/kerby/x509/type/OtherName.java   | 18 +++++-
 .../kerby/x509/type/PolicyConstraints.java      | 18 +++++-
 .../kerby/x509/type/PolicyInformation.java      | 18 +++++-
 .../apache/kerby/x509/type/PolicyMapping.java   | 18 +++++-
 .../kerby/x509/type/PolicyQualifierInfo.java    | 18 +++++-
 .../kerby/x509/type/PrivateKeyUsagePeriod.java  | 18 +++++-
 .../org/apache/kerby/x509/type/ReasonFlags.java |  5 ++
 .../kerby/x509/type/RevokedCertificate.java     | 20 +++++-
 .../org/apache/kerby/x509/type/RoleSyntax.java  | 18 +++++-
 .../kerby/x509/type/SubjectPublicKeyInfo.java   | 18 +++++-
 .../org/apache/kerby/x509/type/TBSCertList.java | 29 ++++++---
 .../apache/kerby/x509/type/TBSCertificate.java  | 36 +++++++----
 .../java/org/apache/kerby/x509/type/Target.java | 20 +++++-
 .../org/apache/kerby/x509/type/TargetCert.java  | 20 +++++-
 .../java/org/apache/kerby/x509/type/Time.java   | 18 +++++-
 .../org/apache/kerby/x509/type/UserNotice.java  | 18 +++++-
 .../java/org/apache/kerby/x509/type/V2Form.java | 20 +++++-
 155 files changed, 2275 insertions(+), 460 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/docs/kerby-checkstyle.xml
----------------------------------------------------------------------
diff --git a/docs/kerby-checkstyle.xml b/docs/kerby-checkstyle.xml
index 3538cd6..72388df 100644
--- a/docs/kerby-checkstyle.xml
+++ b/docs/kerby-checkstyle.xml
@@ -66,7 +66,7 @@
 
         <!-- Checks for imports                              -->
         <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
+        <!--module name="AvoidStarImport"/-->
         <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
         <module name="RedundantImport"/>
         <module name="UnusedImports"/>

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
index 9efa6a5..89fc2f6 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1FieldInfo.java
@@ -25,7 +25,7 @@ import org.apache.kerby.asn1.type.Asn1Type;
  * Representing a field in a ASN1 collection or choice.
  */
 public class Asn1FieldInfo {
-    private int index;
+    private EnumType index;
     private int tagNo = -1; // Indicate a non-tagged field
     private boolean isImplicit;
     private Class<? extends Asn1Type> type;
@@ -36,9 +36,9 @@ public class Asn1FieldInfo {
      * @param type
      * @param isImplicit
      */
-    public Asn1FieldInfo(int index, Class<? extends Asn1Type> type,
+    public Asn1FieldInfo(EnumType index, Class<? extends Asn1Type> type,
                          boolean isImplicit) {
-        this(index, index, type, isImplicit);
+        this(index, index.getValue(), type, isImplicit);
     }
 
     /**
@@ -48,7 +48,7 @@ public class Asn1FieldInfo {
      * @param type
      * @param isImplicit
      */
-    public Asn1FieldInfo(int index, int tagNo, Class<? extends Asn1Type> type,
+    public Asn1FieldInfo(EnumType index, int tagNo, Class<? extends Asn1Type> type,
                          boolean isImplicit) {
         this.index = index;
         this.tagNo = tagNo;
@@ -61,7 +61,7 @@ public class Asn1FieldInfo {
      * @param index
      * @param type
      */
-    public Asn1FieldInfo(int index, Class<? extends Asn1Type> type) {
+    public Asn1FieldInfo(EnumType index, Class<? extends Asn1Type> type) {
         this.index = index;
         this.type = type;
         this.tagNo = -1; // Indicate a non-tagged field
@@ -83,7 +83,7 @@ public class Asn1FieldInfo {
         return tagNo;
     }
 
-    public int getIndex() {
+    public EnumType getIndex() {
         return index;
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
index ff9cd23..9b59f70 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/EnumType.java
@@ -24,4 +24,5 @@ package org.apache.kerby.asn1;
  */
 public interface EnumType {
     int getValue();
+    String getName();
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
index 85fded1..7142dc0 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ExplicitField.java
@@ -31,7 +31,7 @@ public class ExplicitField extends Asn1FieldInfo {
      * @param index
      * @param type
      */
-    public ExplicitField(int index, int tagNo, Class<? extends Asn1Type> type) {
+    public ExplicitField(EnumType index, int tagNo, Class<? extends Asn1Type> type) {
         super(index, tagNo, type, false);
     }
 
@@ -40,7 +40,7 @@ public class ExplicitField extends Asn1FieldInfo {
      * @param index
      * @param type
      */
-    public ExplicitField(int index, Class<? extends Asn1Type> type) {
-        super(index, index, type, false);
+    public ExplicitField(EnumType index, Class<? extends Asn1Type> type) {
+        super(index, index.getValue(), type, false);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
index a0e7acb..f488847 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/ImplicitField.java
@@ -31,7 +31,7 @@ public class ImplicitField extends Asn1FieldInfo {
      * @param index
      * @param type
      */
-    public ImplicitField(int index, int tagNo, Class<? extends Asn1Type> type) {
+    public ImplicitField(EnumType index, int tagNo, Class<? extends Asn1Type> type) {
         super(index, tagNo, type, true);
     }
 
@@ -40,7 +40,7 @@ public class ImplicitField extends Asn1FieldInfo {
      * @param index
      * @param type
      */
-    public ImplicitField(int index, Class<? extends Asn1Type> type) {
-        super(index, index, type, true);
+    public ImplicitField(EnumType index, Class<? extends Asn1Type> type) {
+        super(index, index.getValue(), type, true);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
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 aecfaf0..9393886 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
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -118,16 +119,16 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
         }
     }
 
-    protected <T extends Asn1Type> T getFieldAs(int index, Class<T> t) {
-        Asn1Type value = fields[index];
+    protected <T extends Asn1Type> T getFieldAs(EnumType index, Class<T> t) {
+        Asn1Type value = fields[index.getValue()];
         if (value == null) {
             return null;
         }
         return (T) value;
     }
 
-    protected void setFieldAs(int index, Asn1Type value) {
-        fields[index] = value;
+    protected void setFieldAs(EnumType index, Asn1Type value) {
+        fields[index.getValue()] = value;
     }
 
     protected String getFieldAsString(int index) {
@@ -143,7 +144,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
         throw new RuntimeException("The targeted field type isn't of string");
     }
 
-    protected byte[] getFieldAsOctets(int index) {
+    protected byte[] getFieldAsOctets(EnumType index) {
         Asn1OctetString value = getFieldAs(index, Asn1OctetString.class);
         if (value != null) {
             return value.getValue();
@@ -151,12 +152,12 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
         return null;
     }
 
-    protected void setFieldAsOctets(int index, byte[] bytes) {
+    protected void setFieldAsOctets(EnumType index, byte[] bytes) {
         Asn1OctetString value = new Asn1OctetString(bytes);
         setFieldAs(index, value);
     }
 
-    protected Integer getFieldAsInteger(int index) {
+    protected Integer getFieldAsInteger(EnumType index) {
         Asn1Integer value = getFieldAs(index, Asn1Integer.class);
         if (value != null) {
             return value.getValue().intValue();
@@ -164,7 +165,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
         return null;
     }
 
-    protected void setFieldAsInt(int index, int value) {
+    protected void setFieldAsInt(EnumType index, int value) {
         setFieldAs(index, new Asn1Integer(value));
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 6b5d312..63092a3 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
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -130,20 +131,20 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
 
     protected abstract Asn1Collection createCollection();
 
-    protected <T extends Asn1Type> T getFieldAs(int index, Class<T> t) {
-        Asn1Type value = fields[index];
+    protected <T extends Asn1Type> T getFieldAs(EnumType index, Class<T> t) {
+        Asn1Type value = fields[index.getValue()];
         if (value == null) {
             return null;
         }
         return (T) value;
     }
 
-    protected void setFieldAs(int index, Asn1Type value) {
-        fields[index] = value;
+    protected void setFieldAs(EnumType index, Asn1Type value) {
+        fields[index.getValue()] = value;
     }
 
-    protected String getFieldAsString(int index) {
-        Asn1Type value = fields[index];
+    protected String getFieldAsString(EnumType index) {
+        Asn1Type value = fields[index.getValue()];
         if (value == null) {
             return null;
         }
@@ -155,7 +156,7 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
         throw new RuntimeException("The targeted field type isn't of string");
     }
 
-    protected byte[] getFieldAsOctets(int index) {
+    protected byte[] getFieldAsOctets(EnumType index) {
         Asn1OctetString value = getFieldAs(index, Asn1OctetString.class);
         if (value != null) {
             return value.getValue();
@@ -163,12 +164,12 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
         return null;
     }
 
-    protected void setFieldAsOctets(int index, byte[] bytes) {
+    protected void setFieldAsOctets(EnumType index, byte[] bytes) {
         Asn1OctetString value = new Asn1OctetString(bytes);
         setFieldAs(index, value);
     }
 
-    protected Integer getFieldAsInteger(int index) {
+    protected Integer getFieldAsInteger(EnumType index) {
         Asn1Integer value = getFieldAs(index, Asn1Integer.class);
         if (value != null && value.getValue() != null) {
             return value.getValue().intValue();
@@ -176,12 +177,12 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
         return null;
     }
 
-    protected void setFieldAsInt(int index, int value) {
+    protected void setFieldAsInt(EnumType index, int value) {
         setFieldAs(index, new Asn1Integer(value));
     }
 
-    protected <T extends Asn1Type> T getFieldAsAny(int index, Class<T> t) {
-        Asn1Type value = fields[index];
+    protected <T extends Asn1Type> T getFieldAsAny(EnumType index, Class<T> t) {
+        Asn1Type value = fields[index.getValue()];
         if (value != null && value instanceof Asn1Any) {
             Asn1Any any = (Asn1Any) value;
             return any.getValueAs(t);
@@ -190,7 +191,7 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
         return null;
     }
 
-    protected void setFieldAsAny(int index, Asn1Type value) {
+    protected void setFieldAsAny(EnumType index, Asn1Type value) {
         if (value != null) {
             setFieldAs(index, new Asn1Any(value));
         }
@@ -198,6 +199,15 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
 
     @Override
     public String toStr() {
-        return "[collection-type]";
+        StringBuffer str = new StringBuffer();
+        str.append(this.getClass().getSimpleName() + "\n");
+        for (int i = 0; i < fieldInfos.length; i++) {
+            str.append("Field name: ");
+            str.append(fieldInfos[i].getIndex().getName().replace("_", "-").toLowerCase() + "  ");
+            str.append("Field value: ");
+            str.append(fields[i].toStr() + "\n");
+        }
+
+        return str.toString();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
index c011141..aa37d41 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
@@ -146,6 +146,6 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
 
     @Override
     public String toStr() {
-        return "item";
+        return getValue().toStr();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
index 8dd4511..f0e03e3 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
@@ -100,6 +100,6 @@ public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
 
     @Override
     public String toStr() {
-        return "tagging";
+        return getValue().toStr();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
index cb721ff..e5787d1 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
@@ -134,44 +135,44 @@ public abstract class TaggingCollection extends AbstractAsn1Type<Asn1CollectionT
         tagging.decodeBody(content);
     }
 
-    protected <T extends Asn1Type> T getFieldAs(int index, Class<T> t) {
+    protected <T extends Asn1Type> T getFieldAs(EnumType index, Class<T> t) {
         return tagged.getFieldAs(index, t);
     }
 
-    protected void setFieldAs(int index, Asn1Type value) {
+    protected void setFieldAs(EnumType index, Asn1Type value) {
         tagged.setFieldAs(index, value);
     }
 
-    protected String getFieldAsString(int index) {
+    protected String getFieldAsString(EnumType index) {
         return tagged.getFieldAsString(index);
     }
 
-    protected byte[] getFieldAsOctets(int index) {
+    protected byte[] getFieldAsOctets(EnumType index) {
         return tagged.getFieldAsOctets(index);
     }
 
-    protected void setFieldAsOctets(int index, byte[] bytes) {
+    protected void setFieldAsOctets(EnumType index, byte[] bytes) {
         tagged.setFieldAsOctets(index, bytes);
     }
 
-    protected Integer getFieldAsInteger(int index) {
+    protected Integer getFieldAsInteger(EnumType index) {
         return tagged.getFieldAsInteger(index);
     }
 
-    protected void setFieldAsInt(int index, int value) {
+    protected void setFieldAsInt(EnumType index, int value) {
         tagged.setFieldAsInt(index, value);
     }
 
-    protected byte[] getFieldAsOctetBytes(int index) {
+    protected byte[] getFieldAsOctetBytes(EnumType index) {
         return tagged.getFieldAsOctets(index);
     }
 
-    protected void setFieldAsOctetBytes(int index, byte[] value) {
+    protected void setFieldAsOctetBytes(EnumType index, byte[] value) {
         tagged.setFieldAsOctets(index, value);
     }
 
     @Override
     public String toStr() {
-        return "[tagging-collection]";
+        return tagging.toStr();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
index ee4c96e..1752046 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
@@ -26,18 +26,33 @@ import org.apache.kerby.asn1.type.Asn1Tagging;
 import org.apache.kerby.asn1.type.Asn1VisibleString;
 import org.apache.kerby.asn1.type.TaggingSequence;
 import org.apache.kerby.asn1.type.TaggingSet;
+import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.*;
+import static org.apache.kerby.asn1.PersonnelRecord.ChildInformation.MyEnum.*;
+import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.*;
 
 /**
  * Ref. X.690-0207(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf),
  * Annex A, A.1 ASN.1 description of the record structure
  */
 public class PersonnelRecord extends TaggingSet {
-    private static final int NAME = 0;
-    private static final int TITLE = 1;
-    private static final int NUMBER = 2;
-    private static final int DATEOFHIRE = 3;
-    private static final int NAMEOFSPOUSE = 4;
-    private static final int CHILDREN = 5;
+    protected static enum MyEnum implements EnumType {
+        NAME,
+        TITLE,
+        NUMBER,
+        DATEOFHIRE,
+        NAMEOFSPOUSE,
+        CHILDREN;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(NAME, -1, Name.class),
@@ -114,11 +129,23 @@ public class PersonnelRecord extends TaggingSet {
     }
 
     public static class ChildInformation extends Asn1SetType {
-        private static final int NAME = 0;
-        private static final int DATEOFBIRTH = 1;
+        protected static enum MyEnum implements EnumType {
+            CHILD_NAME,
+            DATEOFBIRTH;
+
+            @Override
+            public int getValue() {
+                return ordinal();
+            }
+
+            @Override
+            public String getName() {
+                return name();
+            }
+        }
 
         static Asn1FieldInfo[] tags = new Asn1FieldInfo[] {
-                new ExplicitField(NAME, -1, Name.class),
+                new ExplicitField(CHILD_NAME, -1, Name.class),
                 new ExplicitField(DATEOFBIRTH, 0, Date.class)
         };
 
@@ -127,11 +154,11 @@ public class PersonnelRecord extends TaggingSet {
         }
 
         public void setName(Name name) {
-            setFieldAs(NAME, name);
+            setFieldAs(CHILD_NAME, name);
         }
 
         public Name getName() {
-            return getFieldAs(NAME, Name.class);
+            return getFieldAs(CHILD_NAME, Name.class);
         }
 
         public void setDateOfBirth(Date date) {
@@ -144,9 +171,22 @@ public class PersonnelRecord extends TaggingSet {
     }
 
     public static class Name extends TaggingSequence {
-        private static final int GIVENNAME = 0;
-        private static final int INITIAL = 1;
-        private static final int FAMILYNAME = 2;
+
+        protected static enum MyEnum implements EnumType {
+            GIVENNAME,
+            INITIAL,
+            FAMILYNAME;
+
+            @Override
+            public int getValue() {
+                return ordinal();
+            }
+
+            @Override
+            public String getName() {
+                return name();
+            }
+        }
 
         static Asn1FieldInfo[] tags = new Asn1FieldInfo[] {
                 new ExplicitField(GIVENNAME, -1, Asn1VisibleString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
index 1c3ce80..ad4545c 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Flags.java
@@ -58,6 +58,12 @@ public class TestAsn1Flags {
     public int getValue() {
       return value;
     }
+
+
+    @Override
+    public String getName() {
+      return name();
+    }
   }
   
   @Rule

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
index 4d75546..f29d088 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/PaFlag.java
@@ -37,6 +37,11 @@ public enum PaFlag implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static PaFlag fromValue(int value) {
         for (EnumType e : values()) {
             if (e.getValue() == value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
index 3ab9871..708c188 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbErrorCode.java
@@ -122,6 +122,11 @@ public enum KrbErrorCode implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public String getMessage() {
         return message;
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
index a4178a3..b2469e2 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
@@ -31,7 +31,7 @@ public abstract class KrbAppSequenceType extends TaggingSequence {
         super(tagNo, fieldInfos, true, false); // Kerberos favors explicit
     }
 
-    protected int getFieldAsInt(int index) {
+    protected int getFieldAsInt(EnumType index) {
         Integer value = getFieldAsInteger(index);
         if (value != null) {
             return value.intValue();
@@ -39,19 +39,19 @@ public abstract class KrbAppSequenceType extends TaggingSequence {
         return -1;
     }
 
-    protected void setFieldAsString(int index, String value) {
+    protected void setFieldAsString(EnumType index, String value) {
         setFieldAs(index, new KerberosString(value));
     }
 
-    protected KerberosTime getFieldAsTime(int index) {
+    protected KerberosTime getFieldAsTime(EnumType index) {
         return getFieldAs(index, KerberosTime.class);
     }
 
-    protected void setFieldAsTime(int index, long value) {
+    protected void setFieldAsTime(EnumType index, long value) {
         setFieldAs(index, new KerberosTime(value));
     }
 
-    protected void setField(int index, EnumType krbEnum) {
+    protected void setField(EnumType index, EnumType krbEnum) {
         setFieldAsInt(index, krbEnum.getValue());
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
index bf655b2..6f2ec5f 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbSequenceType.java
@@ -29,7 +29,7 @@ public abstract class KrbSequenceType extends Asn1SequenceType {
         super(fieldInfos);
     }
 
-    protected int getFieldAsInt(int index) {
+    protected int getFieldAsInt(EnumType index) {
         Integer value = getFieldAsInteger(index);
         if (value != null) {
             return value.intValue();
@@ -37,19 +37,19 @@ public abstract class KrbSequenceType extends Asn1SequenceType {
         return -1;
     }
 
-    protected void setFieldAsString(int index, String value) {
+    protected void setFieldAsString(EnumType index, String value) {
         setFieldAs(index, new KerberosString(value));
     }
 
-    protected KerberosTime getFieldAsTime(int index) {
+    protected KerberosTime getFieldAsTime(EnumType index) {
         return getFieldAs(index, KerberosTime.class);
     }
 
-    protected void setFieldAsTime(int index, long value) {
+    protected void setFieldAsTime(EnumType index, long value) {
         setFieldAs(index, new KerberosTime(value));
     }
 
-    protected void setField(int index, EnumType value) {
+    protected void setField(EnumType index, EnumType value) {
         setFieldAsInt(index, value.getValue());
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AdToken.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AdToken.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AdToken.java
index 690af6b..ab96dea 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AdToken.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AdToken.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.kerberos.kerb.type.ad;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.KrbToken;
+import static org.apache.kerby.kerberos.kerb.type.ad.AdToken.MyEnum.*;
 
 /**
  AD-TOKEN ::= SEQUENCE {
@@ -30,7 +32,19 @@ import org.apache.kerby.kerberos.kerb.type.base.KrbToken;
  }
 */
 public class AdToken extends KrbSequenceType {
-    private static final int TOKEN = 0;
+    protected static enum MyEnum implements EnumType {
+        TOKEN;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(TOKEN, KrbToken.class)

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationDataEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationDataEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationDataEntry.java
index c2750a4..651c7ab 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationDataEntry.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationDataEntry.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.ad;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.ad.AuthorizationDataEntry.MyEnum.*;
 
 /**
  AuthorizationData       ::= SEQUENCE OF SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class AuthorizationDataEntry extends KrbSequenceType {
-    private static final int AD_TYPE = 0;
-    private static final int AD_DATA = 1;
+    protected static enum MyEnum implements EnumType {
+        AD_TYPE,
+        AD_DATA;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(AD_TYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
index 895535f..8f4f6ee 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ad/AuthorizationType.java
@@ -129,6 +129,11 @@ public enum AuthorizationType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static AuthorizationType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
index 8dd61a5..caf83a1 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApOption.java
@@ -46,6 +46,11 @@ public enum ApOption implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static ApOption fromValue(int value) {
         for (EnumType e : values()) {
             if (e.getValue() == value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApRep.java
index fab60b6..cb05d57 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApRep.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApRep.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.ap;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
 import org.apache.kerby.kerberos.kerb.type.base.KrbMessage;
 import org.apache.kerby.kerberos.kerb.type.base.KrbMessageType;
+import static org.apache.kerby.kerberos.kerb.type.ap.ApRep.MyEnum.*;
 
 /**
  AP-REP          ::= [APPLICATION 15] SEQUENCE {
@@ -34,7 +36,21 @@ import org.apache.kerby.kerberos.kerb.type.base.KrbMessageType;
  }
  */
 public class ApRep extends KrbMessage {
-    private static final int ENC_PART = 2;
+    protected static enum MyEnum implements EnumType {
+        PVNO,
+        MSG_TYPE,
+        ENC_PART;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PVNO, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApReq.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApReq.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApReq.java
index c6ea848..576c2bc 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApReq.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/ApReq.java
@@ -20,12 +20,14 @@
 package org.apache.kerby.kerberos.kerb.type.ap;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
 import org.apache.kerby.kerberos.kerb.type.base.KrbMessage;
 import org.apache.kerby.kerberos.kerb.type.base.KrbMessageType;
 import org.apache.kerby.kerberos.kerb.type.ticket.Ticket;
+import static org.apache.kerby.kerberos.kerb.type.ap.ApReq.MyEnum.*;
 
 /**
  AP-REQ          ::= [APPLICATION 14] SEQUENCE {
@@ -37,9 +39,23 @@ import org.apache.kerby.kerberos.kerb.type.ticket.Ticket;
  }
  */
 public class ApReq extends KrbMessage {
-    private static final int AP_OPTIONS = 2;
-    private static final int TICKET = 3;
-    private static final int AUTHENTICATOR = 4;
+    protected static enum MyEnum implements EnumType {
+        PVNO,
+        MSG_TYPE,
+        AP_OPTIONS,
+        TICKET,
+        AUTHENTICATOR;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PVNO, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/Authenticator.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/Authenticator.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/Authenticator.java
index 8fae5d3..2643b65 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/Authenticator.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/Authenticator.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.ap;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
@@ -29,6 +30,7 @@ import org.apache.kerby.kerberos.kerb.type.ad.AuthorizationData;
 import org.apache.kerby.kerberos.kerb.type.base.CheckSum;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
 import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
+import static org.apache.kerby.kerberos.kerb.type.ap.Authenticator.MyEnum.*;
 
 /**
  Authenticator   ::= [APPLICATION 2] SEQUENCE  {
@@ -45,15 +47,28 @@ import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
  */
 public class Authenticator extends KrbAppSequenceType {
     public static final int TAG = 2;
-    private static final int AUTHENTICATOR_VNO = 0;
-    private static final int CREALM = 1;
-    private static final int CNAME = 2;
-    private static final int CKSUM = 3;
-    private static final int CUSEC = 4;
-    private static final int CTIME = 5;
-    private static final int SUBKEY = 6;
-    private static final int SEQ_NUMBER = 7;
-    private static final int AUTHORIZATION_DATA = 8;
+
+    protected static enum MyEnum implements EnumType {
+        AUTHENTICATOR_VNO,
+        CREALM,
+        CNAME,
+        CKSUM,
+        CUSEC,
+        CTIME,
+        SUBKEY,
+        SEQ_NUMBER,
+        AUTHORIZATION_DATA;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(AUTHENTICATOR_VNO, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/EncAPRepPart.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/EncAPRepPart.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/EncAPRepPart.java
index 4a0f589..0e33dbf 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/EncAPRepPart.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/ap/EncAPRepPart.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.ap;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
 import org.apache.kerby.kerberos.kerb.type.KrbAppSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
+import static org.apache.kerby.kerberos.kerb.type.ap.EncAPRepPart.MyEnum.*;
 
 /**
  EncAPRepPart    ::= [APPLICATION 27] SEQUENCE {
@@ -36,10 +38,23 @@ import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
  */
 public class EncAPRepPart extends KrbAppSequenceType {
     public static final int TAG = 27;
-    private static final int CTIME = 0;
-    private static final int CUSEC = 1;
-    private static final int SUBKEY = 2;
-    private static final int SEQ_NUMBER = 3;
+
+    protected static enum MyEnum implements EnumType {
+        CTIME,
+        CUSEC,
+        SUBKEY,
+        SEQ_NUMBER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(CTIME, 0, KerberosTime.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSum.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSum.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSum.java
index f70c426..e8526a7 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSum.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSum.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.CheckSum.MyEnum.*;
 
 import java.util.Arrays;
 
@@ -34,8 +36,20 @@ import java.util.Arrays;
  }
  */
 public class CheckSum extends KrbSequenceType {
-    private static final int CKSUM_TYPE = 0;
-    private static final int CHECK_SUM = 1;
+    protected static enum MyEnum implements EnumType {
+        CKSUM_TYPE,
+        CHECK_SUM;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(CKSUM_TYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
index 1758f1a..c566f76 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/CheckSumType.java
@@ -105,6 +105,7 @@ public enum CheckSumType implements EnumType {
         return value;
     }
 
+    @Override
     public String getName() {
         return name;
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptedData.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptedData.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptedData.java
index 57a5d2d..6e2f0d1 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptedData.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptedData.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.EncryptedData.MyEnum.*;
 
 import java.util.Arrays;
 
@@ -35,9 +37,21 @@ import java.util.Arrays;
  }
  */
 public class EncryptedData extends KrbSequenceType {
-    private static final int ETYPE = 0;
-    private static final int KVNO = 1;
-    private static final int CIPHER = 2;
+    protected static enum MyEnum implements EnumType {
+        ETYPE,
+        KVNO,
+        CIPHER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ETYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionKey.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionKey.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionKey.java
index 044c5c5..2b1bc1c 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionKey.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EncryptionKey.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.EncryptionKey.MyEnum.*;
 
 import java.util.Arrays;
 
@@ -34,8 +36,20 @@ import java.util.Arrays;
  }
  */
 public class EncryptionKey extends KrbSequenceType {
-    private static final int KEY_TYPE = 0;
-    private static final int KEY_VALUE = 1;
+    protected static enum MyEnum implements EnumType {
+        KEY_TYPE,
+        KEY_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     private int kvno = -1;
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfo2Entry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfo2Entry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfo2Entry.java
index 464f1b2..a367fd8 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfo2Entry.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfo2Entry.java
@@ -20,11 +20,13 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.EtypeInfo2Entry.MyEnum.*;
 
 /**
  ETYPE-INFO2-ENTRY       ::= SEQUENCE {
@@ -34,9 +36,21 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class EtypeInfo2Entry extends KrbSequenceType {
-    private static final int ETYPE = 0;
-    private static final int SALT = 1;
-    private static final int S2KPARAMS = 2;
+    protected static enum MyEnum implements EnumType {
+        ETYPE,
+        SALT,
+        S2KPARAMS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ETYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfoEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfoEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfoEntry.java
index 9c8d4ea..3b4a876 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfoEntry.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/EtypeInfoEntry.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.EtypeInfoEntry.MyEnum.*;
 
 /**
  ETYPE-INFO-ENTRY        ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class EtypeInfoEntry extends KrbSequenceType {
-    private static final int ETYPE = 0;
-    private static final int SALT = 1;
+    protected static enum MyEnum implements EnumType {
+        ETYPE,
+        SALT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ETYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
index 37eb44f..8315690 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddrType.java
@@ -86,6 +86,11 @@ public enum HostAddrType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static HostAddrType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddress.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddress.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddress.java
index 948bcc4..8a63911 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddress.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/HostAddress.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.HostAddress.MyEnum.*;
 
 import java.net.InetAddress;
 import java.util.Arrays;
@@ -35,8 +37,20 @@ HostAddress     ::= SEQUENCE  {
 }
  */
 public class HostAddress extends KrbSequenceType {
-    private static final int ADDR_TYPE = 0;
-    private static final int ADDRESS = 1;
+    protected static enum MyEnum implements EnumType {
+        ADDR_TYPE,
+        ADDRESS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ADDR_TYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
index 22ea613..bf77407 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KeyUsage.java
@@ -112,6 +112,11 @@ public enum KeyUsage implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static KeyUsage fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbError.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbError.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbError.java
index 73b3e01..9bc1164 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbError.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbError.java
@@ -20,12 +20,14 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.KrbErrorCode;
 import org.apache.kerby.kerberos.kerb.type.KerberosString;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
+import static org.apache.kerby.kerberos.kerb.type.base.KrbError.MyEnum.*;
 
 /**
  KRB-ERROR       ::= [APPLICATION 30] SEQUENCE {
@@ -45,17 +47,31 @@ import org.apache.kerby.kerberos.kerb.type.KerberosTime;
  }
  */
 public class KrbError extends KrbMessage {
-    private static final int CTIME = 2;
-    private static final int CUSEC = 3;
-    private static final int STIME = 4;
-    private static final int SUSEC = 5;
-    private static final int ERROR_CODE = 6;
-    private static final int CREALM = 7;
-    private static final int CNAME = 8;
-    private static final int REALM = 9;
-    private static final int SNAME = 10;
-    private static final int ETEXT = 11;
-    private static final int EDATA = 12;
+    protected static enum MyEnum implements EnumType {
+        PVNO,
+        MSG_TYPE,
+        CTIME,
+        CUSEC,
+        STIME,
+        SUSEC,
+        ERROR_CODE,
+        CREALM,
+        CNAME,
+        REALM,
+        SNAME,
+        ETEXT,
+        EDATA;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(PVNO, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessage.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessage.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessage.java
index ffcccfb..b911088 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessage.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessage.java
@@ -20,12 +20,26 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.kerberos.kerb.KrbConstant;
 import org.apache.kerby.kerberos.kerb.type.KrbAppSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.KrbMessage.MyEnum.*;
 
 public abstract class KrbMessage extends KrbAppSequenceType {
-    protected static final int PVNO = 0;
-    protected static final int MSG_TYPE = 1;
+    protected static enum MyEnum implements EnumType {
+        PVNO,
+        MSG_TYPE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     private final int pvno = KrbConstant.KRB_V5;
 
@@ -40,7 +54,7 @@ public abstract class KrbMessage extends KrbAppSequenceType {
     }
 
     protected void setPvno(int pvno) {
-        setFieldAsInt(0, pvno);
+        setFieldAsInt(PVNO, pvno);
     }
 
     public KrbMessageType getMsgType() {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
index cf3d130..b6f14d8 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbMessageType.java
@@ -45,6 +45,11 @@ public enum KrbMessageType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static KrbMessageType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
index c2b8b76..72f8103 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/KrbToken.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
@@ -29,6 +30,7 @@ import org.apache.kerby.kerberos.kerb.KrbRuntime;
 import org.apache.kerby.kerberos.kerb.provider.TokenDecoder;
 import org.apache.kerby.kerberos.kerb.provider.TokenEncoder;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.KrbToken.MyEnum.*;
 
 import java.util.Date;
 import java.util.List;
@@ -44,8 +46,20 @@ public class KrbToken extends KrbSequenceType implements AuthToken {
     private static TokenEncoder tokenEncoder;
     private static TokenDecoder tokenDecoder;
 
-    private static final int TOKEN_FORMAT = 0;
-    private static final int TOKEN_VALUE = 1;
+    protected static enum MyEnum implements EnumType {
+        TOKEN_FORMAT,
+        TOKEN_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     private AuthToken innerToken = null;
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqEntry.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqEntry.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqEntry.java
index 4b1fff4..daaf66b 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqEntry.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqEntry.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosTime;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.LastReqEntry.MyEnum.*;
 
 /**
  LastReq         ::=     SEQUENCE OF SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class LastReqEntry extends KrbSequenceType {
-    private static final int LR_TYPE = 0;
-    private static final int LR_VALUE = 1;
+    protected static enum MyEnum implements EnumType {
+        LR_TYPE,
+        LR_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(LR_TYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
index c766d27..c68ea8c 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/LastReqType.java
@@ -49,6 +49,11 @@ public enum LastReqType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static LastReqType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
index 3cbddfe..48c7755 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
@@ -40,6 +40,11 @@ public enum NameType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static NameType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/PrincipalName.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/PrincipalName.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/PrincipalName.java
index 1c94adc..d1c3162 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/PrincipalName.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/PrincipalName.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KerberosStrings;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.PrincipalName.MyEnum.*;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -36,8 +38,21 @@ import java.util.List;
  }
  */
 public class PrincipalName extends KrbSequenceType {
-    private static final int NAME_TYPE = 0;
-    private static final int NAME_STRING = 1;
+    protected static enum MyEnum implements EnumType {
+        NAME_TYPE,
+        NAME_STRING;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
+
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(NAME_TYPE, Asn1Integer.class),
             new ExplicitField(NAME_STRING, KerberosStrings.class)

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
index 9f55e6d..f9146f5 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/SamType.java
@@ -52,6 +52,11 @@ public enum SamType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static SamType fromValue(Integer value) {
         if (value != null) {
             for (SamType st : SamType.values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
index b2b6e26..477b5be 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TokenFormat.java
@@ -36,6 +36,11 @@ public enum TokenFormat implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static TokenFormat fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncoding.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncoding.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncoding.java
index 3b38ff9..b9c9e57 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncoding.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncoding.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.base;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.base.TransitedEncoding.MyEnum.*;
 
 /**
  TransitedEncoding       ::= SEQUENCE {
@@ -32,8 +34,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class TransitedEncoding extends KrbSequenceType {
-    private static final int TR_TYPE = 0;
-    private static final int CONTENTS = 1;
+    protected static enum MyEnum implements EnumType {
+        TR_TYPE,
+        CONTENTS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(TR_TYPE, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
index 262ac8c..ed988eb 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/TransitedEncodingType.java
@@ -37,6 +37,11 @@ public enum TransitedEncodingType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static TransitedEncodingType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
index b6dd972..ac6129d 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/ArmorType.java
@@ -36,6 +36,11 @@ public enum ArmorType implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static ArmorType fromValue(Integer value) {
         if (value != null) {
             for (EnumType e : values()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
index f97f0ae..8330922 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/FastOption.java
@@ -39,6 +39,11 @@ public enum FastOption implements EnumType {
         return value;
     }
 
+    @Override
+    public String getName() {
+        return name();
+    }
+
     public static FastOption fromValue(int value) {
         for (EnumType e : values()) {
             if (e.getValue() == value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmor.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmor.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmor.java
index 0cde5f6..c111ae9 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmor.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmor.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
+import static org.apache.kerby.kerberos.kerb.type.fast.KrbFastArmor.MyEnum.*;
 
 /**
  KrbFastArmor ::= SEQUENCE {
@@ -34,8 +36,20 @@ import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
  }
  */
 public class KrbFastArmor extends KrbSequenceType {
-    private static final int ARMOR_TYPE = 0;
-    private static final int ARMOR_VALUE = 1;
+    protected static enum MyEnum implements EnumType {
+        ARMOR_TYPE,
+        ARMOR_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(ARMOR_TYPE, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredRep.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredRep.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredRep.java
index 0615a30..996f33d 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredRep.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/fast/KrbFastArmoredRep.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.kerberos.kerb.type.fast;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.kerberos.kerb.type.KrbSequenceType;
 import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
+import static org.apache.kerby.kerberos.kerb.type.fast.KrbFastArmoredRep.MyEnum.*;
 
 /**
  KrbFastArmoredRep ::= SEQUENCE {
@@ -32,7 +34,19 @@ import org.apache.kerby.kerberos.kerb.type.base.EncryptedData;
  }
  */
 public class KrbFastArmoredRep extends KrbSequenceType {
-    private static final int ENC_FAST_REP = 0;
+    protected static enum MyEnum implements EnumType {
+        ENC_FAST_REP;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     //private
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {


[20/26] directory-kerby git commit: ASN1. Avoiding the clone of field info array

Posted by pl...@apache.org.
ASN1. Avoiding the clone of field info array


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/0a7853dc
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/0a7853dc
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/0a7853dc

Branch: refs/heads/pkinit-support
Commit: 0a7853dc9158ace1b00b9a6d876e11ca630ac5a6
Parents: e1a4c3a
Author: Kai Zheng <ka...@intel.com>
Authored: Fri Dec 4 18:43:49 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Fri Dec 4 18:43:49 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kerby/asn1/type/Asn1CollectionType.java  | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0a7853dc/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 63092a3..a295a59 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
@@ -30,15 +30,17 @@ import java.nio.ByteBuffer;
 /**
  * For collection type that may consist of tagged fields
  */
-public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1CollectionType> {
-    private Asn1FieldInfo[] fieldInfos;
-    private Asn1Type[] fields;
+public abstract class Asn1CollectionType
+    extends AbstractAsn1Type<Asn1CollectionType> {
+    private final Asn1FieldInfo[] fieldInfos;
+    private final Asn1Type[] fields;
 
-    public Asn1CollectionType(UniversalTag universalTag, Asn1FieldInfo[] fieldInfos) {
+    public Asn1CollectionType(UniversalTag universalTag,
+                              final Asn1FieldInfo[] fieldInfos) {
         super(universalTag);
 
         setValue(this);
-        this.fieldInfos = fieldInfos.clone();
+        this.fieldInfos = fieldInfos;
         this.fields = new Asn1Type[fieldInfos.length];
         usePrimitive(false);
     }


[22/26] directory-kerby git commit: ASN1. Renamed some classes to be consistent

Posted by pl...@apache.org.
ASN1. Renamed some classes to be consistent


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/75c64833
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/75c64833
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/75c64833

Branch: refs/heads/pkinit-support
Commit: 75c648331941543b075220923183f4dee2db3179
Parents: 885cff3
Author: Kai Zheng <ka...@intel.com>
Authored: Sat Dec 5 06:27:31 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Sat Dec 5 06:27:31 2015 +0800

----------------------------------------------------------------------
 .../kerby/asn1/type/Asn1TaggingCollection.java  | 183 +++++++++++++++++++
 .../kerby/asn1/type/Asn1TaggingSequence.java    |  38 ++++
 .../apache/kerby/asn1/type/Asn1TaggingSet.java  |  39 ++++
 .../kerby/asn1/type/TaggingCollection.java      | 183 -------------------
 .../apache/kerby/asn1/type/TaggingSequence.java |  38 ----
 .../org/apache/kerby/asn1/type/TaggingSet.java  |  39 ----
 .../org/apache/kerby/asn1/PersonnelRecord.java  |   8 +-
 .../kerberos/kerb/type/KrbAppSequenceType.java  |   4 +-
 8 files changed, 266 insertions(+), 266 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingCollection.java
new file mode 100644
index 0000000..25dfbf3
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingCollection.java
@@ -0,0 +1,183 @@
+/**
+ *  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.asn1.type;
+
+import org.apache.kerby.asn1.Asn1Dumpable;
+import org.apache.kerby.asn1.Asn1Dumper;
+import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
+import org.apache.kerby.asn1.Tag;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * For tagging a collection type with tagNo, either application specific or
+ * context specific class
+ */
+public abstract class Asn1TaggingCollection
+    extends AbstractAsn1Type<Asn1CollectionType> implements Asn1Dumpable {
+
+    private Asn1Tagging<Asn1CollectionType> tagging;
+    private Asn1CollectionType tagged;
+
+    public Asn1TaggingCollection(int taggingTagNo, Asn1FieldInfo[] tags,
+                                 boolean isAppSpecific, boolean isImplicit) {
+        super(makeTag(isAppSpecific, taggingTagNo));
+        this.tagged = createTaggedCollection(tags);
+        setValue(tagged);
+        this.tagging = new Asn1Tagging<Asn1CollectionType>(taggingTagNo,
+            tagged, isAppSpecific, isImplicit);
+    }
+
+    private static Tag makeTag(boolean isAppSpecific, int tagNo) {
+        return isAppSpecific ? Tag.newAppTag(tagNo) : Tag.newCtxTag(tagNo);
+    }
+
+    protected abstract Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags);
+
+    @Override
+    public Tag tag() {
+        return tagging.tag();
+    }
+
+    @Override
+    public int tagNo() {
+        return tagging.tagNo();
+    }
+
+    @Override
+    public void usePrimitive(boolean isPrimitive) {
+        tagging.usePrimitive(isPrimitive);
+    }
+
+    @Override
+    public boolean isPrimitive() {
+        return tagging.isPrimitive();
+    }
+
+    @Override
+    public void useDefinitiveLength(boolean isDefinitiveLength) {
+        tagging.useDefinitiveLength(isDefinitiveLength);
+    }
+
+    @Override
+    public boolean isDefinitiveLength() {
+        return tagging.isDefinitiveLength();
+    }
+
+    @Override
+    public void useImplicit(boolean isImplicit) {
+        tagging.useImplicit(isImplicit);
+    }
+
+    @Override
+    public boolean isImplicit() {
+        return tagging.isImplicit();
+    }
+
+    @Override
+    public void useDER() {
+        tagging.useDER();
+    }
+
+    @Override
+    public boolean isDER() {
+        return tagging.isDER();
+    }
+
+    @Override
+    public void useBER() {
+        tagging.useBER();
+    }
+
+    @Override
+    public boolean isBER() {
+        return tagging.isBER();
+    }
+
+    @Override
+    public void useCER() {
+        tagging.useCER();
+    }
+
+    @Override
+    public boolean isCER() {
+        return tagging.isCER();
+    }
+
+
+    @Override
+    protected int encodingBodyLength() {
+        return tagging.encodingBodyLength();
+    }
+
+    @Override
+    protected void encodeBody(ByteBuffer buffer) {
+        tagging.encodeBody(buffer);
+    }
+
+    @Override
+    protected void decodeBody(ByteBuffer content) throws IOException {
+        tagging.decodeBody(content);
+    }
+
+    protected <T extends Asn1Type> T getFieldAs(EnumType index, Class<T> t) {
+        return tagged.getFieldAs(index, t);
+    }
+
+    protected void setFieldAs(EnumType index, Asn1Type value) {
+        tagged.setFieldAs(index, value);
+    }
+
+    protected String getFieldAsString(EnumType index) {
+        return tagged.getFieldAsString(index);
+    }
+
+    protected byte[] getFieldAsOctets(EnumType index) {
+        return tagged.getFieldAsOctets(index);
+    }
+
+    protected void setFieldAsOctets(EnumType index, byte[] bytes) {
+        tagged.setFieldAsOctets(index, bytes);
+    }
+
+    protected Integer getFieldAsInteger(EnumType index) {
+        return tagged.getFieldAsInteger(index);
+    }
+
+    protected void setFieldAsInt(EnumType index, int value) {
+        tagged.setFieldAsInt(index, value);
+    }
+
+    protected byte[] getFieldAsOctetBytes(EnumType index) {
+        return tagged.getFieldAsOctets(index);
+    }
+
+    protected void setFieldAsOctetBytes(EnumType index, byte[] value) {
+        tagged.setFieldAsOctets(index, value);
+    }
+
+    @Override
+    public void dumpWith(Asn1Dumper dumper, int indents) {
+        Asn1Type taggedValue = getValue();
+        dumper.dumpType(indents, taggedValue);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSequence.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSequence.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSequence.java
new file mode 100644
index 0000000..61128de
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSequence.java
@@ -0,0 +1,38 @@
+/**
+ *  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.asn1.type;
+
+import org.apache.kerby.asn1.Asn1FieldInfo;
+
+/**
+ * For tagging a sequence type with tagNo, either application specific or context specific class
+ */
+public class Asn1TaggingSequence extends Asn1TaggingCollection {
+
+    public Asn1TaggingSequence(int taggingTagNo, Asn1FieldInfo[] tags,
+                               boolean isAppSpecific, boolean isImplicit) {
+        super(taggingTagNo, tags, isAppSpecific, isImplicit);
+    }
+
+    @Override
+    protected Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags) {
+        return new Asn1SequenceType(tags);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSet.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSet.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSet.java
new file mode 100644
index 0000000..e9eb17f
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1TaggingSet.java
@@ -0,0 +1,39 @@
+/**
+ *  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.asn1.type;
+
+import org.apache.kerby.asn1.Asn1FieldInfo;
+
+/**
+ * For tagging a sequence type with tagNo, either application specific or
+ * context specific class
+ */
+public class Asn1TaggingSet extends Asn1TaggingCollection {
+
+    public Asn1TaggingSet(int taggingTagNo, Asn1FieldInfo[] tags,
+                          boolean isAppSpecific, boolean isImplicit) {
+        super(taggingTagNo, tags, isAppSpecific, isImplicit);
+    }
+
+    @Override
+    protected Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags) {
+        return new Asn1SetType(tags);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
deleted file mode 100644
index 459c07b..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- *  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.asn1.type;
-
-import org.apache.kerby.asn1.Asn1Dumpable;
-import org.apache.kerby.asn1.Asn1Dumper;
-import org.apache.kerby.asn1.Asn1FieldInfo;
-import org.apache.kerby.asn1.EnumType;
-import org.apache.kerby.asn1.Tag;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-/**
- * For tagging a collection type with tagNo, either application specific or
- * context specific class
- */
-public abstract class TaggingCollection
-    extends AbstractAsn1Type<Asn1CollectionType> implements Asn1Dumpable {
-
-    private Asn1Tagging<Asn1CollectionType> tagging;
-    private Asn1CollectionType tagged;
-
-    public TaggingCollection(int taggingTagNo, Asn1FieldInfo[] tags,
-                             boolean isAppSpecific, boolean isImplicit) {
-        super(makeTag(isAppSpecific, taggingTagNo));
-        this.tagged = createTaggedCollection(tags);
-        setValue(tagged);
-        this.tagging = new Asn1Tagging<Asn1CollectionType>(taggingTagNo,
-            tagged, isAppSpecific, isImplicit);
-    }
-
-    private static Tag makeTag(boolean isAppSpecific, int tagNo) {
-        return isAppSpecific ? Tag.newAppTag(tagNo) : Tag.newCtxTag(tagNo);
-    }
-
-    protected abstract Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags);
-
-    @Override
-    public Tag tag() {
-        return tagging.tag();
-    }
-
-    @Override
-    public int tagNo() {
-        return tagging.tagNo();
-    }
-
-    @Override
-    public void usePrimitive(boolean isPrimitive) {
-        tagging.usePrimitive(isPrimitive);
-    }
-
-    @Override
-    public boolean isPrimitive() {
-        return tagging.isPrimitive();
-    }
-
-    @Override
-    public void useDefinitiveLength(boolean isDefinitiveLength) {
-        tagging.useDefinitiveLength(isDefinitiveLength);
-    }
-
-    @Override
-    public boolean isDefinitiveLength() {
-        return tagging.isDefinitiveLength();
-    }
-
-    @Override
-    public void useImplicit(boolean isImplicit) {
-        tagging.useImplicit(isImplicit);
-    }
-
-    @Override
-    public boolean isImplicit() {
-        return tagging.isImplicit();
-    }
-
-    @Override
-    public void useDER() {
-        tagging.useDER();
-    }
-
-    @Override
-    public boolean isDER() {
-        return tagging.isDER();
-    }
-
-    @Override
-    public void useBER() {
-        tagging.useBER();
-    }
-
-    @Override
-    public boolean isBER() {
-        return tagging.isBER();
-    }
-
-    @Override
-    public void useCER() {
-        tagging.useCER();
-    }
-
-    @Override
-    public boolean isCER() {
-        return tagging.isCER();
-    }
-
-
-    @Override
-    protected int encodingBodyLength() {
-        return tagging.encodingBodyLength();
-    }
-
-    @Override
-    protected void encodeBody(ByteBuffer buffer) {
-        tagging.encodeBody(buffer);
-    }
-
-    @Override
-    protected void decodeBody(ByteBuffer content) throws IOException {
-        tagging.decodeBody(content);
-    }
-
-    protected <T extends Asn1Type> T getFieldAs(EnumType index, Class<T> t) {
-        return tagged.getFieldAs(index, t);
-    }
-
-    protected void setFieldAs(EnumType index, Asn1Type value) {
-        tagged.setFieldAs(index, value);
-    }
-
-    protected String getFieldAsString(EnumType index) {
-        return tagged.getFieldAsString(index);
-    }
-
-    protected byte[] getFieldAsOctets(EnumType index) {
-        return tagged.getFieldAsOctets(index);
-    }
-
-    protected void setFieldAsOctets(EnumType index, byte[] bytes) {
-        tagged.setFieldAsOctets(index, bytes);
-    }
-
-    protected Integer getFieldAsInteger(EnumType index) {
-        return tagged.getFieldAsInteger(index);
-    }
-
-    protected void setFieldAsInt(EnumType index, int value) {
-        tagged.setFieldAsInt(index, value);
-    }
-
-    protected byte[] getFieldAsOctetBytes(EnumType index) {
-        return tagged.getFieldAsOctets(index);
-    }
-
-    protected void setFieldAsOctetBytes(EnumType index, byte[] value) {
-        tagged.setFieldAsOctets(index, value);
-    }
-
-    @Override
-    public void dumpWith(Asn1Dumper dumper, int indents) {
-        Asn1Type taggedValue = getValue();
-        dumper.dumpType(indents, taggedValue);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
deleted file mode 100644
index 0bd9fbb..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSequence.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- *  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.asn1.type;
-
-import org.apache.kerby.asn1.Asn1FieldInfo;
-
-/**
- * For tagging a sequence type with tagNo, either application specific or context specific class
- */
-public class TaggingSequence extends TaggingCollection {
-
-    public TaggingSequence(int taggingTagNo, Asn1FieldInfo[] tags,
-                           boolean isAppSpecific, boolean isImplicit) {
-        super(taggingTagNo, tags, isAppSpecific, isImplicit);
-    }
-
-    @Override
-    protected Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags) {
-        return new Asn1SequenceType(tags);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
deleted file mode 100644
index e13d5f0..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- *  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.asn1.type;
-
-import org.apache.kerby.asn1.Asn1FieldInfo;
-
-/**
- * For tagging a sequence type with tagNo, either application specific or
- * context specific class
- */
-public class TaggingSet extends TaggingCollection {
-
-    public TaggingSet(int taggingTagNo, Asn1FieldInfo[] tags,
-                      boolean isAppSpecific, boolean isImplicit) {
-        super(taggingTagNo, tags, isAppSpecific, isImplicit);
-    }
-
-    @Override
-    protected Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags) {
-        return new Asn1SetType(tags);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
index 1752046..8547cdd 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/PersonnelRecord.java
@@ -24,8 +24,8 @@ import org.apache.kerby.asn1.type.Asn1SequenceOf;
 import org.apache.kerby.asn1.type.Asn1SetType;
 import org.apache.kerby.asn1.type.Asn1Tagging;
 import org.apache.kerby.asn1.type.Asn1VisibleString;
-import org.apache.kerby.asn1.type.TaggingSequence;
-import org.apache.kerby.asn1.type.TaggingSet;
+import org.apache.kerby.asn1.type.Asn1TaggingSequence;
+import org.apache.kerby.asn1.type.Asn1TaggingSet;
 import static org.apache.kerby.asn1.PersonnelRecord.MyEnum.*;
 import static org.apache.kerby.asn1.PersonnelRecord.ChildInformation.MyEnum.*;
 import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.*;
@@ -34,7 +34,7 @@ import static org.apache.kerby.asn1.PersonnelRecord.Name.MyEnum.*;
  * Ref. X.690-0207(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf),
  * Annex A, A.1 ASN.1 description of the record structure
  */
-public class PersonnelRecord extends TaggingSet {
+public class PersonnelRecord extends Asn1TaggingSet {
     protected static enum MyEnum implements EnumType {
         NAME,
         TITLE,
@@ -170,7 +170,7 @@ public class PersonnelRecord extends TaggingSet {
         }
     }
 
-    public static class Name extends TaggingSequence {
+    public static class Name extends Asn1TaggingSequence {
 
         protected static enum MyEnum implements EnumType {
             GIVENNAME,

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/75c64833/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
index b2469e2..de9a644 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/KrbAppSequenceType.java
@@ -21,12 +21,12 @@ package org.apache.kerby.kerberos.kerb.type;
 
 import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.Asn1FieldInfo;
-import org.apache.kerby.asn1.type.TaggingSequence;
+import org.apache.kerby.asn1.type.Asn1TaggingSequence;
 
 /**
  * This is for application specific sequence tagged with a number.
  */
-public abstract class KrbAppSequenceType extends TaggingSequence {
+public abstract class KrbAppSequenceType extends Asn1TaggingSequence {
     public KrbAppSequenceType(int tagNo, Asn1FieldInfo[] fieldInfos) {
         super(tagNo, fieldInfos, true, false); // Kerberos favors explicit
     }


[14/26] directory-kerby git commit: DIRKRB-486 Dumping support for built-in ASN1 types and user defined types.

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/UserNotice.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/UserNotice.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/UserNotice.java
index 3c1c879..97f7b03 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/UserNotice.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/UserNotice.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.UserNotice.MyEnum.*;
 
 /**
  *
@@ -33,8 +35,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  *
  */
 public class UserNotice extends Asn1SequenceType {
-    private static final int NOTICE_REF = 0;
-    private static final int EXPLICIT_TEXT = 1;
+    protected static enum MyEnum implements EnumType {
+        NOTICE_REF,
+        EXPLICIT_TEXT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(NOTICE_REF, NoticeReference.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/V2Form.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/V2Form.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/V2Form.java
index 4964d29..e156206 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/V2Form.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/V2Form.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.V2Form.MyEnum.*;
 
 /**
  * Produce an object suitable for an ASN1OutputStream.
@@ -37,9 +39,21 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class V2Form extends Asn1SequenceType {
-    private static final int ISSUER_NAME = 0;
-    private static final int BASE_CERTIFICATE_ID = 1;
-    private static final int OBJECT_DIGEST_INFO = 2;
+    protected static enum MyEnum implements EnumType {
+        ISSUER_NAME,
+        BASE_CERTIFICATE_ID,
+        OBJECT_DIGEST_INFO;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ISSUER_NAME, GeneralNames.class),


[09/26] directory-kerby git commit: Remove logging output from console during build

Posted by pl...@apache.org.
Remove logging output from console during build


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/0138b2a7
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/0138b2a7
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/0138b2a7

Branch: refs/heads/pkinit-support
Commit: 0138b2a75c489437d8a8e4e61f0c62f358ae13b7
Parents: 54c10a3
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Tue Dec 1 11:14:46 2015 +0000
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Tue Dec 1 11:14:46 2015 +0000

----------------------------------------------------------------------
 .../src/test/resources/log4j.properties         | 30 ++++++++++++++++++++
 kerby-kerb/integration-test/run/login.conf      |  2 +-
 .../kerb/integration/test/AppClient.java        |  2 +-
 .../kerb/integration/test/AppServer.java        |  4 +--
 .../kerb/integration/test/gss/GssAppClient.java | 16 +++++------
 .../kerb/integration/test/gss/GssAppServer.java | 30 +++++++++-----------
 .../integration/test/sasl/SaslAppClient.java    |  4 +--
 .../integration/test/sasl/SaslAppServer.java    | 18 ++++++------
 .../integration/test/TokenLoginTestBase.java    |  2 +-
 .../src/test/resources/log4j.properties         | 30 ++++++++++++++++++++
 .../kerby/kerberos/kerb/client/JaasKrbUtil.java |  2 +-
 pom.xml                                         |  1 +
 12 files changed, 100 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kdc-test/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/resources/log4j.properties b/kerby-kdc-test/src/test/resources/log4j.properties
new file mode 100644
index 0000000..a42f39a
--- /dev/null
+++ b/kerby-kdc-test/src/test/resources/log4j.properties
@@ -0,0 +1,30 @@
+#############################################################################
+#    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.
+#############################################################################
+log4j.rootLogger=ERROR, LOGFILE
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n
+
+# LOGFILE is set to be a File appender using a PatternLayout.
+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
+log4j.appender.LOGFILE.File=target/kerby.log
+log4j.appender.LOGFILE.Append=false
+log4j.appender.LOGFILE.Threshold=DEBUG
+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
+log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/run/login.conf
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/run/login.conf b/kerby-kerb/integration-test/run/login.conf
index 0e2facb..8932d38 100644
--- a/kerby-kerb/integration-test/run/login.conf
+++ b/kerby-kerb/integration-test/run/login.conf
@@ -24,7 +24,7 @@
 
 com.sun.security.jgss.initiate {
   kerb.token.login.Krb5TokenAuthnLoginModule required 
-  debug=true
+  debug=false
   principal="drankye@SH.INTEL.COM"
   useTicketCache=true
   doNotPrompt=false;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
index 264fab6..c0a636a 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
@@ -43,7 +43,7 @@ public abstract class AppClient {
     }
 
     public void run() {
-        System.out.println("Connected to server");
+        // System.out.println("Connected to server");
 
         try {
             withConnection(conn);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
index 337507c..77abc65 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
@@ -65,10 +65,10 @@ public abstract class AppServer implements Runnable {
     }
 
     private void runOnce() {
-        System.out.println("Waiting for incoming connection...");
+        // System.out.println("Waiting for incoming connection...");
 
         Transport.Connection conn = acceptor.accept();
-        System.out.println("Got connection from client");
+        // System.out.println("Got connection from client");
 
         try {
             onConnection(conn);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
index 278f294..32fdf5c 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
@@ -86,18 +86,18 @@ public class GssAppClient extends AppClient {
             }
         }
 
-        System.out.println("Context Established! ");
-        System.out.println("Client is " + context.getSrcName());
-        System.out.println("Server is " + context.getTargName());
+        //System.out.println("Context Established! ");
+        //System.out.println("Client is " + context.getSrcName());
+        //System.out.println("Server is " + context.getTargName());
 
-        if (context.getMutualAuthState()) {
-            System.out.println("Mutual authentication took place!");
-        }
+        //if (context.getMutualAuthState()) {
+            //System.out.println("Mutual authentication took place!");
+        //}
 
         byte[] messageBytes = "Hello There!\0".getBytes(StandardCharsets.UTF_8);
         MessageProp prop =  new MessageProp(0, true);
         token = context.wrap(messageBytes, 0, messageBytes.length, prop);
-        System.out.println("Will send wrap token of size " + token.length);
+        //System.out.println("Will send wrap token of size " + token.length);
         conn.sendToken(token);
 
         token = conn.recvToken();
@@ -105,7 +105,7 @@ public class GssAppClient extends AppClient {
                 messageBytes, 0, messageBytes.length, prop);
         setTestOK(true);
 
-        System.out.println("Verified received MIC for message.");
+        //System.out.println("Verified received MIC for message.");
         context.dispose();
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
index 84ffff2..3e5d3cf 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
@@ -29,8 +29,6 @@ import org.ietf.jgss.GSSName;
 import org.ietf.jgss.MessageProp;
 import org.ietf.jgss.Oid;
 
-import java.nio.charset.StandardCharsets;
-
 public class GssAppServer extends AppServer {
     private String serverPrincipal;
     private GSSManager manager;
@@ -67,7 +65,7 @@ public class GssAppServer extends AppServer {
     protected void onConnection(Transport.Connection conn) throws Exception {
         byte[] token;
 
-        System.out.print("Starting negotiating security context");
+        // System.out.print("Starting negotiating security context");
         while (!context.isEstablished()) {
             token = conn.recvToken();
             token = context.acceptSecContext(token, 0, token.length);
@@ -76,9 +74,9 @@ public class GssAppServer extends AppServer {
             }
         }
 
-        System.out.print("Context Established! ");
-        System.out.println("Client is " + context.getSrcName());
-        System.out.println("Server is " + context.getTargName());
+        // System.out.print("Context Established! ");
+        // System.out.println("Client is " + context.getSrcName());
+        // System.out.println("Server is " + context.getTargName());
 
         doWith(context, conn);
 
@@ -87,24 +85,24 @@ public class GssAppServer extends AppServer {
 
     protected void doWith(GSSContext context,
                           Transport.Connection conn) throws Exception {
-        if (context.getMutualAuthState()) {
-            System.out.println("Mutual authentication took place!");
-        }
+        //if (context.getMutualAuthState()) {
+            // System.out.println("Mutual authentication took place!");
+        //}
 
         MessageProp prop = new MessageProp(0, false);
         byte[] token = conn.recvToken();
         byte[] bytes = context.unwrap(token, 0, token.length, prop);
-        String str = new String(bytes, StandardCharsets.UTF_8);
-        System.out.println("Received data \""
-                + str + "\" of length " + str.length());
+        //String str = new String(bytes, StandardCharsets.UTF_8);
+        // System.out.println("Received data \""
+        //        + str + "\" of length " + str.length());
 
-        System.out.println("Confidentiality applied: "
-                + prop.getPrivacy());
+        //System.out.println("Confidentiality applied: "
+        //       + prop.getPrivacy());
 
         prop.setQOP(0);
         token = context.getMIC(bytes, 0, bytes.length, prop);
-        System.out.println("Will send MIC token of size "
-                + token.length);
+        //System.out.println("Will send MIC token of size "
+                //+ token.length);
         conn.sendToken(token);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppClient.java
index 2509df9..b928e01 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppClient.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppClient.java
@@ -79,10 +79,10 @@ public class SaslAppClient extends AppClient {
             }
         }
 
-        System.out.println("Context Established! ");
+        //System.out.println("Context Established! ");
 
         token = "Hello There!\0".getBytes(StandardCharsets.UTF_8);
-        System.out.println("Will send wrap token of size " + token.length);
+        //System.out.println("Will send wrap token of size " + token.length);
 
         conn.sendToken(token);
         setTestOK(true);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppServer.java
index f769d5e..a681dae 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppServer.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/sasl/SaslAppServer.java
@@ -30,7 +30,6 @@ import javax.security.sasl.Sasl;
 import javax.security.sasl.SaslException;
 import javax.security.sasl.SaslServer;
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -63,7 +62,7 @@ public class SaslAppServer extends AppServer {
 
     @Override
     protected void onConnection(Transport.Connection conn) throws Exception {
-        System.out.print("Starting negotiating security context");
+        // System.out.print("Starting negotiating security context");
 
         //mechanism, protocol, serverId, saslProperties, callback
         CallbackHandler callbackHandler = new SaslGssCallbackHandler();
@@ -90,7 +89,7 @@ public class SaslAppServer extends AppServer {
             }
         }
 
-        System.out.print("Context Established! ");
+        // System.out.print("Context Established! ");
 
         doWith(ss, props, conn);
 
@@ -99,10 +98,11 @@ public class SaslAppServer extends AppServer {
 
     protected void doWith(SaslServer ss, Map<String, Object> props,
                           Transport.Connection conn) throws IOException, Exception {
-        byte[] token = conn.recvToken();
-        String str = new String(token, StandardCharsets.UTF_8);
-        System.out.println("Received data \""
-                + str + "\" of length " + str.length());
+        conn.recvToken();
+        //byte[] token = conn.recvToken();
+        //String str = new String(token, StandardCharsets.UTF_8);
+        // System.out.println("Received data \""
+        //        + str + "\" of length " + str.length());
     }
 
     public static class SaslGssCallbackHandler implements CallbackHandler {
@@ -128,8 +128,8 @@ public class SaslAppServer extends AppServer {
                     ac.setAuthorized(false);
                 }
                 if (ac.isAuthorized()) {
-                    System.out.println("SASL server GSSAPI callback: setting "
-                            + "canonicalized client ID: " + authzid);
+                    // System.out.println("SASL server GSSAPI callback: setting "
+                            //+ "canonicalized client ID: " + authzid);
                     ac.setAuthorizedID(authzid);
                 }
             }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
index 025a9fa..4741372 100644
--- a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
@@ -86,7 +86,7 @@ public class TokenLoginTestBase extends LoginTestBase {
         AuthToken token = issueToken(getClientPrincipal());
         String tokenStr = tokenEncoder.encodeAsString(token);
         TokenCache.writeToken(tokenStr);
-        System.out.println("Issued token: " + tokenStr);
+        // System.out.println("Issued token: " + tokenStr);
         tokenCache = TokenCache.getDefaultTokenCache();
 
         TgtTicket tgt = getKrbClient().requestTgt(getClientPrincipal(),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/integration-test/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/resources/log4j.properties b/kerby-kerb/integration-test/src/test/resources/log4j.properties
new file mode 100644
index 0000000..a42f39a
--- /dev/null
+++ b/kerby-kerb/integration-test/src/test/resources/log4j.properties
@@ -0,0 +1,30 @@
+#############################################################################
+#    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.
+#############################################################################
+log4j.rootLogger=ERROR, LOGFILE
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n
+
+# LOGFILE is set to be a File appender using a PatternLayout.
+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
+log4j.appender.LOGFILE.File=target/kerby.log
+log4j.appender.LOGFILE.Append=false
+log4j.appender.LOGFILE.Threshold=DEBUG
+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
+log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java b/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
index c5f10bc..0d6f366 100644
--- a/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
+++ b/kerby-kerb/kerb-simplekdc/src/main/java/org/apache/kerby/kerberos/kerb/client/JaasKrbUtil.java
@@ -42,7 +42,7 @@ import java.util.Set;
  */
 public final class JaasKrbUtil {
 
-    public static final boolean ENABLE_DEBUG = true;
+    public static final boolean ENABLE_DEBUG = false;
 
     private JaasKrbUtil() { }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0138b2a7/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 90be760..bdbc5df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -177,6 +177,7 @@
             <skipTests>${skipTests}</skipTests>
             <reuseForks>false</reuseForks>
             <systemPropertyVariables>
+              <log4j.configuration>log4j.properties</log4j.configuration>
             </systemPropertyVariables>
             <failIfNoTests>false</failIfNoTests>
           </configuration>


[15/26] directory-kerby git commit: DIRKRB-486 Dumping support for built-in ASN1 types and user defined types.

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/RevocationInfoChoice.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/RevocationInfoChoice.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/RevocationInfoChoice.java
index e1c0451..de59a30 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/RevocationInfoChoice.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/RevocationInfoChoice.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ImplicitField;
+import static org.apache.kerby.cms.type.RevocationInfoChoice.MyEnum.*;
 
 /**
  * RevocationInfoChoice ::= CHOICE {
@@ -30,8 +32,20 @@ import org.apache.kerby.asn1.ImplicitField;
  * }
  */
 public class RevocationInfoChoice extends Asn1Choice {
-    private static final int CRL = 0;
-    private static final int OTHER = 1;
+    protected static enum MyEnum implements EnumType {
+        CRL,
+        OTHER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(CRL, CertificateList.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignedData.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignedData.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignedData.java
index 0d23bbc..39e5a25 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignedData.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignedData.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ImplicitField;
+import static org.apache.kerby.cms.type.SignedData.MyEnum.*;
 
 /**
  * Ref. RFC 5652
@@ -38,12 +40,24 @@ import org.apache.kerby.asn1.ImplicitField;
  *
  */
 public class SignedData extends Asn1SequenceType {
-    private static final int CMS_VERSION = 0;
-    private static final int DIGEST_ALGORITHMS = 1;
-    private static final int ENCAP_CONTENT_INFO = 2;
-    private static final int CERTIFICATES = 3;
-    private static final int CRLS = 4;
-    private static final int SIGNER_INFOS = 5;
+    protected static enum MyEnum implements EnumType {
+        CMS_VERSION,
+        DIGEST_ALGORITHMS,
+        ENCAP_CONTENT_INFO,
+        CERTIFICATES,
+        CRLS,
+        SIGNER_INFOS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(CMS_VERSION, CmsVersion.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerIdentifier.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerIdentifier.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerIdentifier.java
index 9cd618b..3c6c3a1 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerIdentifier.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerIdentifier.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.x509.type.SubjectKeyIdentifier;
+import static org.apache.kerby.cms.type.SignerIdentifier.MyEnum.*;
 
 /**
  * Ref. RFC 5652
@@ -36,8 +38,20 @@ import org.apache.kerby.x509.type.SubjectKeyIdentifier;
  * </pre>
  */
 public class SignerIdentifier extends Asn1Choice {
-    private static final int ISSUER_AND_SERIAL_NUMBER = 0;
-    private static final int SUBJECT_KEY_IDENTIFIER = 1;
+    protected static enum MyEnum implements EnumType {
+        ISSUER_AND_SERIAL_NUMBER,
+        SUBJECT_KEY_IDENTIFIER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(ISSUER_AND_SERIAL_NUMBER, IssuerAndSerialNumber.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerInfo.java
index 342d965..211bc55 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/SignerInfo.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.cms.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ImplicitField;
+import static org.apache.kerby.cms.type.SignerInfo.MyEnum.*;
 
 /**
  * Ref. RFC 5652
@@ -39,13 +41,25 @@ import org.apache.kerby.asn1.ImplicitField;
  * </pre>
  */
 public class SignerInfo extends Asn1SequenceType {
-    private static final int CMS_VERSION = 0;
-    private static final int SID = 1;
-    private static final int DIGEST_ALGORITHM = 2;
-    private static final int SIGNED_ATTRS = 3;
-    private static final int SIGNATURE_ALGORITHMS = 4;
-    private static final int SIGNATURE = 5;
-    private static final int UNSIGNED_ATTRS = 6;
+    protected static enum MyEnum implements EnumType {
+        CMS_VERSION,
+        SID,
+        DIGEST_ALGORITHM,
+        SIGNED_ATTRS,
+        SIGNATURE_ALGORITHMS,
+        SIGNATURE,
+        UNSIGNED_ATTRS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(CMS_VERSION, CmsVersion.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Subject.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Subject.java b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Subject.java
index 5c0bc88..cdd3b7e 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Subject.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/cms/type/Subject.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.cms.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.x509.type.GeneralNames;
 import org.apache.kerby.x509.type.IssuerSerial;
+import static org.apache.kerby.cms.type.Subject.MyEnum.*;
 
 /**
  * subject CHOICE {
@@ -35,8 +37,20 @@ import org.apache.kerby.x509.type.IssuerSerial;
  *
  */
 public class Subject extends Asn1Choice {
-    private static final int BASE_CERTIFICATE_ID = 0;
-    private static final int SUBJECT_NAME = 1;
+    protected static enum MyEnum implements EnumType {
+        BASE_CERTIFICATE_ID,
+        SUBJECT_NAME;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
             new ExplicitField(BASE_CERTIFICATE_ID, IssuerSerial.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x500/type/AttributeTypeAndValue.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x500/type/AttributeTypeAndValue.java b/kerby-pkix/src/main/java/org/apache/kerby/x500/type/AttributeTypeAndValue.java
index fd4d40c..790334f 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x500/type/AttributeTypeAndValue.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x500/type/AttributeTypeAndValue.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.x500.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
+import static org.apache.kerby.x500.type.AttributeTypeAndValue.MyEnum.*;
 
 /**
  * AttributeTypeAndValue ::= SEQUENCE {
@@ -32,9 +34,20 @@ import org.apache.kerby.asn1.type.Asn1Type;
  * }
  */
 public class AttributeTypeAndValue extends Asn1SequenceType {
+    protected static enum MyEnum implements EnumType {
+        TYPE,
+        VALUE;
 
-    private static final int TYPE = 0;
-    private static final int VALUE = 1;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
             new Asn1FieldInfo(TYPE, Asn1ObjectIdentifier.class, true),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x500/type/Name.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x500/type/Name.java b/kerby-pkix/src/main/java/org/apache/kerby/x500/type/Name.java
index 0e56095..b8ef0f5 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x500/type/Name.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x500/type/Name.java
@@ -19,8 +19,10 @@
  */
 package org.apache.kerby.x500.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import static org.apache.kerby.x500.type.Name.MyEnum.*;
 
 /**
  *
@@ -29,7 +31,19 @@ import org.apache.kerby.asn1.Asn1FieldInfo;
  * </pre>
  */
 public class Name extends Asn1Choice {
-    private static final int RDN_SEQUENCE = 0;
+    protected static enum MyEnum implements EnumType {
+        RDN_SEQUENCE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
         new Asn1FieldInfo(RDN_SEQUENCE, RDNSequence.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AccessDescription.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AccessDescription.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AccessDescription.java
index 4f88e22..9f177f0 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AccessDescription.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AccessDescription.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.AccessDescription.MyEnum.*;
 
 /**
  *
@@ -33,8 +35,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class AccessDescription extends Asn1SequenceType {
-    private static final int ACCESS_METHOD = 0;
-    private static final int ACCESS_LOCATION = 1;
+    protected static enum MyEnum implements EnumType {
+        ACCESS_METHOD,
+        ACCESS_LOCATION;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ACCESS_METHOD, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AlgorithmIdentifier.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AlgorithmIdentifier.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AlgorithmIdentifier.java
index 8fd4db2..c934f34 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AlgorithmIdentifier.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AlgorithmIdentifier.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
+import static org.apache.kerby.x509.type.AlgorithmIdentifier.MyEnum.*;
 
 /**
  * AlgorithmIdentifier  ::=  SEQUENCE  {
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.type.Asn1Type;
  * }
  */
 public class AlgorithmIdentifier extends Asn1SequenceType {
-    private static final int ALGORITHM = 0;
-    private static final int PARAMETERS = 1;
+    protected static enum MyEnum implements EnumType {
+        ALGORITHM,
+        PARAMETERS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(ALGORITHM, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertIssuer.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertIssuer.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertIssuer.java
index 5665c07..977dcaa 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertIssuer.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertIssuer.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.AttCertIssuer.MyEnum.*;
 
 /**
  *
@@ -33,8 +35,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class AttCertIssuer extends Asn1Choice {
-    private static final int V1_FORM = 0;
-    private static final int V2_FORM = 1;
+    protected static enum MyEnum implements EnumType {
+        V1_FORM,
+        V2_FORM;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(V1_FORM, GeneralNames.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertValidityPeriod.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertValidityPeriod.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertValidityPeriod.java
index 777cc91..25939dc 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertValidityPeriod.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttCertValidityPeriod.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1GeneralizedTime;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.AttCertValidityPeriod.MyEnum.*;
 
 /**
  * <pre>
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class AttCertValidityPeriod extends Asn1SequenceType {
-    private static final int NOT_BEFORE = 0;
-    private static final int NOT_AFTER = 1;
+    protected static enum MyEnum implements EnumType {
+        NOT_BEFORE,
+        NOT_AFTER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(NOT_BEFORE, Asn1GeneralizedTime.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Attribute.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Attribute.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Attribute.java
index 77d8f6b..4e56cb1 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Attribute.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Attribute.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.Attribute.MyEnum.*;
 
 /**
  * <pre>
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class Attribute extends Asn1SequenceType {
-    private static final int ATTR_TYPE = 0;
-    private static final int ATTR_VALUES = 1;
+    protected static enum MyEnum implements EnumType {
+        ATTR_TYPE,
+        ATTR_VALUES;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ATTR_TYPE, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificate.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificate.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificate.java
index 8e7a308..f24c383 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificate.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificate.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.AttributeCertificate.MyEnum.*;
 
 /**
  * <pre>
@@ -33,9 +35,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class AttributeCertificate extends Asn1SequenceType {
-    private static final int ACI_INFO = 0;
-    private static final int SIGNATURE_ALGORITHM = 1;
-    private static final int SIGNATURE_VALUE = 2;
+    protected static enum MyEnum implements EnumType {
+        ACI_INFO,
+        SIGNATURE_ALGORITHM,
+        SIGNATURE_VALUE;
+        
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ACI_INFO, AttributeCertificateInfo.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificateInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificateInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificateInfo.java
index e38ff47..6d671c1 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificateInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AttributeCertificateInfo.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.AttributeCertificateInfo.MyEnum.*;
 
 /**
  *
@@ -45,15 +47,27 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class AttributeCertificateInfo extends Asn1SequenceType {
-    private static final int VERSION = 0;
-    private static final int HOLDER = 1;
-    private static final int ISSUER = 2;
-    private static final int SIGNATURE = 3;
-    private static final int SERIAL_NUMBER = 4;
-    private static final int ATTR_CERT_VALIDITY_PERIOD = 5;
-    private static final int ATTRIBUTES = 6;
-    private static final int ISSUER_UNIQUE_ID = 7;
-    private static final int EXTENSIONS = 8;
+    protected static enum MyEnum implements EnumType {
+        VERSION,
+        HOLDER,
+        ISSUER,
+        SIGNATURE,
+        SERIAL_NUMBER,
+        ATTR_CERT_VALIDITY_PERIOD,
+        ATTRIBUTES,
+        ISSUER_UNIQUE_ID,
+        EXTENSIONS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(VERSION, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AuthorityKeyIdentifier.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AuthorityKeyIdentifier.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AuthorityKeyIdentifier.java
index 3ac11b3..8861394 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AuthorityKeyIdentifier.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AuthorityKeyIdentifier.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ImplicitField;
+import static org.apache.kerby.x509.type.AuthorityKeyIdentifier.MyEnum.*;
 
 /**
  *
@@ -39,10 +41,21 @@ import org.apache.kerby.asn1.ImplicitField;
  *
  */
 public class AuthorityKeyIdentifier extends Asn1SequenceType {
-    private static final int KEY_IDENTIFIER = 0;
-    private static final int AUTHORITY_CERT_ISSUER = 1;
-    private static final int AUTHORITY_CERT_SERIAL_NUMBER = 2;
+    protected static enum MyEnum implements EnumType {
+        KEY_IDENTIFIER,
+        AUTHORITY_CERT_ISSUER,
+        AUTHORITY_CERT_SERIAL_NUMBER;
 
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ImplicitField(KEY_IDENTIFIER, KeyIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/BasicConstraints.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/BasicConstraints.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/BasicConstraints.java
index bece3bd..fc860e8 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/BasicConstraints.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/BasicConstraints.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Boolean;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.BasicConstraints.MyEnum.*;
 
 import java.math.BigInteger;
 
@@ -35,8 +37,20 @@ import java.math.BigInteger;
  * </pre>
  */
 public class BasicConstraints extends Asn1SequenceType {
-    private static final int CA = 0;
-    private static final int PATH_LEN_CONSTRAINT = 1;
+    protected static enum MyEnum implements EnumType {
+        CA,
+        PATH_LEN_CONSTRAINT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(CA, Asn1Boolean.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
index 02558cb..6ec021d 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CRLReason.java
@@ -56,6 +56,11 @@ enum CRLReasonEnum implements EnumType {
     public int getValue() {
         return ordinal();
     }
+
+    @Override
+    public String getName() {
+        return name();
+    }
 }
 
 public class CRLReason extends Asn1Enumerated<CRLReasonEnum> {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Certificate.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Certificate.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Certificate.java
index fbb5567..a14cae4 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Certificate.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Certificate.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.Certificate.MyEnum.*;
 
 /**
  * <pre>
@@ -33,9 +35,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class Certificate extends Asn1SequenceType {
-    private static final int TBS_CERTIFICATE = 0;
-    private static final int SIGNATURE_ALGORITHM = 1;
-    private static final int SIGNATURE = 2;
+    protected static enum MyEnum implements EnumType {
+        TBS_CERTIFICATE,
+        SIGNATURE_ALGORITHM,
+        SIGNATURE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(TBS_CERTIFICATE, TBSCertificate.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificateList.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificateList.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificateList.java
index 60b8d85..5ab01e7 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificateList.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificateList.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.CertificateList.MyEnum.*;
 
 /**
  *
@@ -35,9 +37,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class CertificateList extends Asn1SequenceType {
-    private static final int TBS_CERT_LIST = 0;
-    private static final int SIGNATURE_ALGORITHMS = 1;
-    private static final int SIGNATURE_VALUE = 2;
+    protected static enum MyEnum implements EnumType {
+        TBS_CERT_LIST,
+        SIGNATURE_ALGORITHMS,
+        SIGNATURE_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(TBS_CERT_LIST, TBSCertList.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificatePair.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificatePair.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificatePair.java
index 35f27f0..c2ea503 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificatePair.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/CertificatePair.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.CertificatePair.MyEnum.*;
 
 /**
  *
@@ -34,8 +36,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class CertificatePair extends Asn1SequenceType {
-    private static final int FORWARD = 0;
-    private static final int REVERSE = 1;
+    protected static enum MyEnum implements EnumType {
+        FORWARD,
+        REVERSE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(FORWARD, Certificate.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DSAParameter.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DSAParameter.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DSAParameter.java
index d97db4c..c97b70f 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DSAParameter.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DSAParameter.java
@@ -20,15 +20,29 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.DSAParameter.MyEnum.*;
 
 import java.math.BigInteger;
 
 public class DSAParameter extends Asn1SequenceType {
-    private static final int P = 0;
-    private static final int Q = 1;
-    private static final int G = 2;
+    protected static enum MyEnum implements EnumType {
+        P,
+        Q,
+        G;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(P, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestInfo.java
index 6df3743..293d079 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestInfo.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.DigestInfo.MyEnum.*;
 
 /**
  * <pre>
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class DigestInfo extends Asn1SequenceType {
-    private static final int DIGEST_ALGORITHM = 0;
-    private static final int DIGEST = 1;
+    protected static enum MyEnum implements EnumType {
+        DIGEST_ALGORITHM,
+        DIGEST;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(DIGEST_ALGORITHM, AlgorithmIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
index c233133..5c9ccc7 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DigestedObjectType.java
@@ -43,6 +43,11 @@ enum DigestedObjectEnum implements EnumType {
     public int getValue() {
         return ordinal();
     }
+
+    @Override
+    public String getName() {
+        return name();
+    }
 }
 
 public class DigestedObjectType extends Asn1Enumerated<DigestedObjectEnum> {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DirectoryString.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DirectoryString.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DirectoryString.java
index f2c5cd9..637215b 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DirectoryString.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DirectoryString.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BmpString;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
@@ -26,6 +27,7 @@ import org.apache.kerby.asn1.type.Asn1PrintableString;
 import org.apache.kerby.asn1.type.Asn1T61String;
 import org.apache.kerby.asn1.type.Asn1UniversalString;
 import org.apache.kerby.asn1.type.Asn1Utf8String;
+import static org.apache.kerby.x509.type.DirectoryString.MyEnum.*;
 
 /**
  * <pre>
@@ -39,12 +41,23 @@ import org.apache.kerby.asn1.type.Asn1Utf8String;
  * </pre>
  */
 public class DirectoryString extends Asn1Choice {
+    protected static enum MyEnum implements EnumType {
+        TELETEX_STRING,
+        PRINTABLE_STRING,
+        UNIVERSAL_STRING,
+        UTF8_STRING,
+        BMP_STRING;
 
-    private static final int TELETEX_STRING = 0;
-    private static final int PRINTABLE_STRING = 1;
-    private static final int UNIVERSAL_STRING = 2;
-    private static final int UTF8_STRING = 3;
-    private static final int BMP_STRING = 4;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
             new Asn1FieldInfo(TELETEX_STRING, Asn1T61String.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DisplayText.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DisplayText.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DisplayText.java
index 9162f03..68de432 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DisplayText.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DisplayText.java
@@ -19,12 +19,14 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BmpString;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1IA5String;
 import org.apache.kerby.asn1.type.Asn1Utf8String;
 import org.apache.kerby.asn1.type.Asn1VisibleString;
+import static org.apache.kerby.x509.type.DisplayText.MyEnum.*;
 
 /**
  * <pre>
@@ -37,10 +39,22 @@ import org.apache.kerby.asn1.type.Asn1VisibleString;
  * </pre>
  */
 public class DisplayText extends Asn1Choice {
-   private static final int IA5_STRING = 0;
-   private static final int VISIBLE_STRING = 1;
-   private static final int BMP_STRING = 2;
-   private static final int UTF8_STRING = 3;
+   protected static enum MyEnum implements EnumType {
+      IA5_STRING,
+      VISIBLE_STRING,
+      BMP_STRING,
+      UTF8_STRING;
+
+      @Override
+      public int getValue() {
+         return ordinal();
+      }
+
+      @Override
+      public String getName() {
+         return name();
+      }
+   }
 
    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
            new Asn1FieldInfo(IA5_STRING, Asn1IA5String.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPoint.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPoint.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPoint.java
index 6bdd897..8d7471b 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPoint.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPoint.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.DistributionPoint.MyEnum.*;
 
 /**
  *
@@ -34,9 +36,21 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class DistributionPoint extends Asn1SequenceType {
-    private static final int DISTRIBUTION_POINT = 0;
-    private static final int REASONS = 1;
-    private static final int CRL_ISSUER = 2;
+    protected static enum MyEnum implements EnumType {
+        DISTRIBUTION_POINT,
+        REASONS,
+        CRL_ISSUER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(DISTRIBUTION_POINT, DistributionPointName.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPointName.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPointName.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPointName.java
index 2c83ee5..8fa3e51 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPointName.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DistributionPointName.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.x500.type.RelativeDistinguishedName;
+import static org.apache.kerby.x509.type.DistributionPointName.MyEnum.*;
 
 /**
  *
@@ -34,8 +36,20 @@ import org.apache.kerby.x500.type.RelativeDistinguishedName;
  * </pre>
  */
 public class DistributionPointName extends Asn1Choice {
-    private static final int FULL_NAME = 0;
-    private static final int NAME_RELATIVE_TO_CRL_ISSUER = 1;
+    protected static enum MyEnum implements EnumType {
+        FULL_NAME,
+        NAME_RELATIVE_TO_CRL_ISSUER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(FULL_NAME, GeneralNames.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/EDIPartyName.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/EDIPartyName.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/EDIPartyName.java
index 45eeb66..ee790fb 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/EDIPartyName.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/EDIPartyName.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.EDIPartyName.MyEnum.*;
 
 /**
  * <pre>
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class EDIPartyName extends Asn1Choice {
-    private static final int NAME_ASSIGNER = 0;
-    private static final int PARTY_NAME = 1;
+    protected static enum MyEnum implements EnumType {
+        NAME_ASSIGNER,
+        PARTY_NAME;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[]{
             new ExplicitField(NAME_ASSIGNER, DirectoryString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Extension.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Extension.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Extension.java
index da44646..fc625f4 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Extension.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Extension.java
@@ -19,11 +19,13 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Boolean;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.Extension.MyEnum.*;
 
 /**
  * Ref. X.509 V3 extension
@@ -37,9 +39,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class Extension extends Asn1SequenceType {
-    private static final int EXTN_ID = 0;
-    private static final int CRITICAL = 1;
-    private static final int EXTN_VALUE = 2;
+    protected static enum MyEnum implements EnumType {
+        EXTN_ID,
+        CRITICAL,
+        EXTN_VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(EXTN_ID, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralName.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralName.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralName.java
index dcf6286..c1b79cf 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralName.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralName.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1IA5String;
@@ -27,6 +28,7 @@ import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1OctetString;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.x500.type.Name;
+import static org.apache.kerby.x509.type.GeneralName.MyEnum.*;
 
 /**
  *
@@ -45,16 +47,27 @@ import org.apache.kerby.x500.type.Name;
  * </pre>
  */
 public class GeneralName extends Asn1Choice {
-
-    private static final int OTHER_NAME = 0;
-    private static final int RFC822_NAME = 1;
-    private static final int DNS_NAME = 2;
-    private static final int X400_ADDRESS = 3;
-    private static final int DIRECTORY_NAME = 4;
-    private static final int EDI_PARTY_NAME = 5;
-    private static final int UNIFORM_RESOURCE_IDENTIFIER = 6;
-    private static final int IP_ADDRESS = 7;
-    private static final int REGISTERED_ID = 8;
+    protected static enum MyEnum implements EnumType {
+        OTHER_NAME,
+        RFC822_NAME,
+        DNS_NAME,
+        X400_ADDRESS,
+        DIRECTORY_NAME,
+        EDI_PARTY_NAME,
+        UNIFORM_RESOURCE_IDENTIFIER,
+        IP_ADDRESS,
+        REGISTERED_ID;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(OTHER_NAME, OtherName.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralSubtree.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralSubtree.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralSubtree.java
index 84c8109..34ad9fc 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralSubtree.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/GeneralSubtree.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.GeneralSubtree.MyEnum.*;
 
 /**
  *
@@ -37,9 +39,21 @@ import org.apache.kerby.asn1.ExplicitField;
  * 
  */
 public class GeneralSubtree extends Asn1SequenceType {
-    private static final int BASE = 0;
-    private static final int MINIMUM = 1;
-    private static final int MAXMUM = 2;
+    protected static enum MyEnum implements EnumType {
+        BASE,
+        MINIMUM,
+        MAXMUM;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(BASE, GeneralName.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Holder.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Holder.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Holder.java
index 44319fd..e4aa59b 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Holder.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Holder.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.Holder.MyEnum.*;
 
 /**
  * <pre>
@@ -38,9 +40,21 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class Holder extends Asn1SequenceType {
-    private static final int BASE_CERTIFICATE_ID = 0;
-    private static final int ENTITY_NAME = 1;
-    private static final int OBJECT_DIGEST_INFO = 2;
+    protected static enum MyEnum implements EnumType {
+        BASE_CERTIFICATE_ID,
+        ENTITY_NAME,
+        OBJECT_DIGEST_INFO;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(BASE_CERTIFICATE_ID, IssuerSerial.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntax.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntax.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntax.java
index b7363dc..9a46084 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntax.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntax.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.IetfAttrSyntax.MyEnum.*;
 
 /**
  * Ref. RFC3281
@@ -39,8 +41,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class IetfAttrSyntax extends Asn1SequenceType {
-    public static final int POLICY_AUTHORITY = 0;
-    public static final int VALUES = 1;
+    protected static enum MyEnum implements EnumType {
+        POLICY_AUTHORITY,
+        VALUES;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(POLICY_AUTHORITY, GeneralNames.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntaxChoice.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntaxChoice.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntaxChoice.java
index 8149e51..86d7606 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntaxChoice.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IetfAttrSyntaxChoice.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1OctetString;
+import static org.apache.kerby.x509.type.IetfAttrSyntaxChoice.MyEnum.*;
 
 /**
  * Ref. RFC3281
@@ -38,9 +40,21 @@ import org.apache.kerby.asn1.type.Asn1OctetString;
  * </pre>
  */
 public class IetfAttrSyntaxChoice extends Asn1Choice {
-    public static final int OCTETS    = 1;
-    public static final int OID       = 2;
-    public static final int UTF8      = 3;
+    protected static enum MyEnum implements EnumType {
+        OCTETS,
+        OID,
+        UTF8;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(OCTETS, Asn1OctetString.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuerSerial.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuerSerial.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuerSerial.java
index 34e8fd8..e8f5416 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuerSerial.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuerSerial.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.IssuerSerial.MyEnum.*;
 
 /**
  * <pre>
@@ -33,9 +35,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class IssuerSerial extends Asn1SequenceType {
-    private static final int ISSUER = 0;
-    private static final int SERIAL = 1;
-    private static final int ISSUER_UID = 2;
+    protected static enum MyEnum implements EnumType {
+        ISSUER,
+        SERIAL,
+        ISSUER_UID;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ISSUER, GeneralNames.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuingDistributionPoint.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuingDistributionPoint.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuingDistributionPoint.java
index a725b5a..0970947 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuingDistributionPoint.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/IssuingDistributionPoint.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Boolean;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.IssuingDistributionPoint.MyEnum.*;
 
 /**
  * <pre>
@@ -37,12 +39,23 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class IssuingDistributionPoint extends Asn1SequenceType {
-    private static final int DISTRIBUTION_POINT = 0;
-    private static final int ONLY_CONTAINS_USER_CERTS = 1;
-    private static final int ONLY_CONTAINS_CA_CERTS = 2;
-    private static final int ONLY_SOME_REASONS = 3;
-    private static final int INDIRECT_CRL = 4;
-    private static final int ONLY_CONTAINS_ATTRIBUTE_CERTS = 5;
+    protected static enum MyEnum implements EnumType {
+        DISTRIBUTION_POINT,
+        ONLY_CONTAINS_USER_CERTS,
+        ONLY_CONTAINS_CA_CERTS,
+        ONLY_SOME_REASONS,
+        INDIRECT_CRL,
+        ONLY_CONTAINS_ATTRIBUTE_CERTS;
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(DISTRIBUTION_POINT, DistributionPointName.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
index e7dbb06..cde64dd 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/KeyUsage.java
@@ -55,6 +55,11 @@ enum KeyUsageEnum implements EnumType {
     public int getValue() {
         return ordinal();
     }
+
+    @Override
+    public String getName() {
+        return name();
+    }
 }
 
 public class KeyUsage extends Asn1Flags {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NameConstraints.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NameConstraints.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NameConstraints.java
index 96babc9..49e9f2c 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NameConstraints.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NameConstraints.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.NameConstraints.MyEnum.*;
 
 /*
  * NameConstraints ::= SEQUENCE {
@@ -30,8 +32,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * }
  */
 public class NameConstraints extends Asn1SequenceType {
-    private static final int PERMITTED_SUBTREES = 0;
-    private static final int EXCLUDED_SUBTREES = 1;
+    protected static enum MyEnum implements EnumType {
+        PERMITTED_SUBTREES,
+        EXCLUDED_SUBTREES;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(PERMITTED_SUBTREES, GeneralSubtrees.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NoticeReference.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NoticeReference.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NoticeReference.java
index 436fbc2..f23a4bd 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NoticeReference.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/NoticeReference.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.NoticeReference.MyEnum.*;
 
 /**
  * <pre>
@@ -33,8 +35,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  *
  */
 public class NoticeReference extends Asn1SequenceType {
-    private static final int ORGANIZATION = 0;
-    private static final int NOTICE_NUMBERS = 1;
+    protected static enum MyEnum implements EnumType {
+        ORGANIZATION,
+        NOTICE_NUMBERS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ORGANIZATION, DisplayText.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ObjectDigestInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ObjectDigestInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ObjectDigestInfo.java
index c6489a8..a18f63e 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ObjectDigestInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ObjectDigestInfo.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.ObjectDigestInfo.MyEnum.*;
 
 /**
  *
@@ -43,10 +45,22 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * 
  */
 public class ObjectDigestInfo extends Asn1SequenceType {
-    private static final int DIGESTED_OBJECT_TYPE = 0;
-    private static final int OTHER_OBJECT_TYPE_ID = 1;
-    private static final int DIGEST_ALGORITHM = 2;
-    private static final int OBJECT_DIGEST = 3;
+    protected static enum MyEnum implements EnumType {
+        DIGESTED_OBJECT_TYPE,
+        OTHER_OBJECT_TYPE_ID,
+        DIGEST_ALGORITHM,
+        OBJECT_DIGEST;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(DIGESTED_OBJECT_TYPE, DigestedObjectType.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/OtherName.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/OtherName.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/OtherName.java
index de21159..0995a4b 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/OtherName.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/OtherName.java
@@ -19,12 +19,14 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.OtherName.MyEnum.*;
 
 /**
  * <pre>
@@ -36,8 +38,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class OtherName extends Asn1SequenceType {
-    private static final int TYPE_ID = 0;
-    private static final int VALUE = 1;
+    protected static enum MyEnum implements EnumType {
+        TYPE_ID,
+        VALUE;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(TYPE_ID, Asn1ObjectIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyConstraints.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyConstraints.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyConstraints.java
index ded02b5..ed7eba5 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyConstraints.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyConstraints.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.PolicyConstraints.MyEnum.*;
 
 /**
  * Ref. RFC 5280
@@ -37,8 +39,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class PolicyConstraints extends Asn1SequenceType {
-    private static final int REQUIRE_EXPLICIT_POLICY = 0;
-    private static final int INHIBIT_POLICY_MAPPING = 1;
+    protected static enum MyEnum implements EnumType {
+        REQUIRE_EXPLICIT_POLICY,
+        INHIBIT_POLICY_MAPPING;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(REQUIRE_EXPLICIT_POLICY, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyInformation.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyInformation.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyInformation.java
index 5b5f06f..81793cc 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyInformation.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyInformation.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.PolicyInformation.MyEnum.*;
 
 /*
  * <pre>
@@ -31,8 +33,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class PolicyInformation extends Asn1SequenceType {
-    private static final int POLICY_IDENTIFIER = 0;
-    private static final int POLICY_QUALIFIERS = 1;
+    protected static enum MyEnum implements EnumType {
+        POLICY_IDENTIFIER,
+        POLICY_QUALIFIERS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(POLICY_IDENTIFIER, CertPolicyId.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyMapping.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyMapping.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyMapping.java
index 56f5e68..f6d9797 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyMapping.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyMapping.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.PolicyMapping.MyEnum.*;
 
 /**
  * Ref. RFC3280
@@ -32,8 +34,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  *
  */
 public class PolicyMapping extends Asn1SequenceType {
-    private static final int ISSUER_DOMAIN_POLICY = 0;
-    private static final int SUBJECT_DOMAIN_POLICY = 1;
+    protected static enum MyEnum implements EnumType {
+        ISSUER_DOMAIN_POLICY,
+        SUBJECT_DOMAIN_POLICY;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(ISSUER_DOMAIN_POLICY, CertPolicyId.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyQualifierInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyQualifierInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyQualifierInfo.java
index 0f9434c..4b401f8 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyQualifierInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PolicyQualifierInfo.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Any;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.type.Asn1Type;
+import static org.apache.kerby.x509.type.PolicyQualifierInfo.MyEnum.*;
 
 /**
  * 
@@ -36,8 +38,20 @@ import org.apache.kerby.asn1.type.Asn1Type;
  * </pre>
  */
 public class PolicyQualifierInfo extends Asn1SequenceType {
-    private static final int POLICY_QUALIFIER_ID = 0;
-    private static final int QUALIFIER = 1;
+    protected static enum MyEnum implements EnumType {
+        POLICY_QUALIFIER_ID,
+        QUALIFIER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(POLICY_QUALIFIER_ID, PolicyQualifierId.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PrivateKeyUsagePeriod.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PrivateKeyUsagePeriod.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PrivateKeyUsagePeriod.java
index 1645d8f..2b365d0 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PrivateKeyUsagePeriod.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/PrivateKeyUsagePeriod.java
@@ -20,9 +20,11 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1GeneralizedTime;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.PrivateKeyUsagePeriod.MyEnum.*;
 
 /**
  * <pre>
@@ -33,8 +35,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class PrivateKeyUsagePeriod extends Asn1SequenceType {
-    private static final int NOT_BEFORE = 0;
-    private static final int NOT_AFTER = 1;
+    protected static enum MyEnum implements EnumType {
+        NOT_BEFORE,
+        NOT_AFTER;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(NOT_BEFORE, Asn1GeneralizedTime.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
index d81798f..0df6b8e 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/ReasonFlags.java
@@ -54,6 +54,11 @@ enum ReasonFlagsEnum implements EnumType {
     public int getValue() {
         return ordinal();
     }
+
+    @Override
+    public String getName() {
+        return name();
+    }
 }
 
 public class ReasonFlags extends Asn1Flags {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RevokedCertificate.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RevokedCertificate.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RevokedCertificate.java
index 48a347a..c53c323 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RevokedCertificate.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RevokedCertificate.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.RevokedCertificate.MyEnum.*;
 
 /**
  * Ref. RFC 2459
@@ -35,9 +37,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * </pre>
  */
 public class RevokedCertificate extends Asn1SequenceType {
-    private static final int USER_CERTIFICATE = 0;
-    private static final int REVOCATION_DATA = 1;
-    private static final int CRL_ENTRY_EXTENSIONS = 2;
+    protected static enum MyEnum implements EnumType {
+        USER_CERTIFICATE,
+        REVOCATION_DATA,
+        CRL_ENTRY_EXTENSIONS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(USER_CERTIFICATE, CertificateSerialNumber.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RoleSyntax.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RoleSyntax.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RoleSyntax.java
index d9c27d1..7495a1a 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RoleSyntax.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/RoleSyntax.java
@@ -20,8 +20,10 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.RoleSyntax.MyEnum.*;
 
 /**
  *Ref. RFC3281
@@ -33,8 +35,20 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class RoleSyntax extends Asn1SequenceType {
-    private static final int ROLE_AUTHORITY = 0;
-    private static final int ROLE_NAME = 1;
+    protected static enum MyEnum implements EnumType {
+        ROLE_AUTHORITY,
+        ROLE_NAME;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(ROLE_AUTHORITY, GeneralNames.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/SubjectPublicKeyInfo.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/SubjectPublicKeyInfo.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/SubjectPublicKeyInfo.java
index 3b1eda2..9f82d38 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/SubjectPublicKeyInfo.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/SubjectPublicKeyInfo.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.SubjectPublicKeyInfo.MyEnum.*;
 
 /**
  * SubjectPublicKeyInfo  ::=  SEQUENCE  {
@@ -30,8 +32,20 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * }
  */
 public class SubjectPublicKeyInfo extends Asn1SequenceType {
-    private static final int ALGORITHM = 0;
-    private static final int SUBJECT_PUBLIC_KEY = 1;
+    protected static enum MyEnum implements EnumType {
+        ALGORITHM,
+        SUBJECT_PUBLIC_KEY;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(ALGORITHM, AlgorithmIdentifier.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertList.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertList.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertList.java
index e4167ff..4e9ba5e 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertList.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertList.java
@@ -20,10 +20,12 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Integer;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.x500.type.Name;
+import static org.apache.kerby.x509.type.TBSCertList.MyEnum.*;
 
 /**
  * Ref. RFC-2459
@@ -47,14 +49,25 @@ import org.apache.kerby.x500.type.Name;
  * </pre>
  */
 public class TBSCertList extends Asn1SequenceType {
-
-    private static final int VERSION = 0;
-    private static final int SIGNATURE = 1;
-    private static final int ISSUER = 2;
-    private static final int THIS_UPDATA = 3;
-    private static final int NEXT_UPDATE = 4;
-    private static final int REVOKED_CERTIFICATES = 5;
-    private static final int CRL_EXTENSIONS = 6;
+    protected static enum MyEnum implements EnumType {
+        VERSION,
+        SIGNATURE,
+        ISSUER,
+        THIS_UPDATA,
+        NEXT_UPDATE,
+        REVOKED_CERTIFICATES,
+        CRL_EXTENSIONS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(VERSION, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertificate.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertificate.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertificate.java
index b5cbcf3..2cb7c1d 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertificate.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TBSCertificate.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1BitString;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1Integer;
@@ -26,6 +27,8 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
 import org.apache.kerby.asn1.ExplicitField;
 import org.apache.kerby.asn1.ImplicitField;
 import org.apache.kerby.x500.type.Name;
+import static org.apache.kerby.x509.type.TBSCertificate.MyEnum.*;
+
 
 /**
  * <pre>
@@ -44,17 +47,28 @@ import org.apache.kerby.x500.type.Name;
  * </pre>
  */
 public class TBSCertificate extends Asn1SequenceType {
-
-    private static final int VERSION = 0;
-    private static final int SERIAL_NUMBER = 1;
-    private static final int SIGNATURE = 2;
-    private static final int ISSUER = 3;
-    private static final int VALIDITY = 4;
-    private static final int SUBJECT = 5;
-    private static final int SUBJECT_PUBLIC_KEY_INFO = 6;
-    private static final int ISSUER_UNIQUE_ID = 7;
-    private static final int SUBJECT_UNIQUE_ID = 8;
-    private static final int EXTENSIONS = 9;
+    protected static enum MyEnum implements EnumType {
+        VERSION,
+        SERIAL_NUMBER,
+        SIGNATURE,
+        ISSUER,
+        VALIDITY,
+        SUBJECT,
+        SUBJECT_PUBLIC_KEY_INFO,
+        ISSUER_UNIQUE_ID,
+        SUBJECT_UNIQUE_ID,
+        EXTENSIONS;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new ExplicitField(VERSION, 0, Asn1Integer.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Target.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Target.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Target.java
index 4e07667..cc011da 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Target.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Target.java
@@ -19,9 +19,11 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.ExplicitField;
+import static org.apache.kerby.x509.type.Target.MyEnum.*;
 
 /**
  * Ref. RFC 3281
@@ -34,9 +36,21 @@ import org.apache.kerby.asn1.ExplicitField;
  * </pre>
  */
 public class Target extends Asn1Choice {
-    private static final int TARGET_NAME = 0;
-    private static final int TARGET_GROUP = 1;
-    private static final int TARGET_CERT = 1;
+    protected static enum MyEnum implements EnumType {
+        TARGET_NAME,
+        TARGET_GROUP,
+        TARGET_CERT;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new ExplicitField(TARGET_NAME, GeneralName.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TargetCert.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TargetCert.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TargetCert.java
index 441d249..1b433f5 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TargetCert.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/TargetCert.java
@@ -20,7 +20,9 @@
 package org.apache.kerby.x509.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1SequenceType;
+import static org.apache.kerby.x509.type.TargetCert.MyEnum.*;
 
 /**
  * TargetCert  ::= SEQUENCE {
@@ -30,9 +32,21 @@ import org.apache.kerby.asn1.type.Asn1SequenceType;
  * }
  */
 public class TargetCert extends Asn1SequenceType {
-    private static final int TARGET_CERTIFICATE = 0;
-    private static final int TARGET_NAME = 1;
-    private static final int CERT_DIGEST_INFO = 2;
+    protected static enum MyEnum implements EnumType {
+        TARGET_CERTIFICATE,
+        TARGET_NAME,
+        CERT_DIGEST_INFO;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
             new Asn1FieldInfo(TARGET_CERTIFICATE, IssuerSerial.class),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7c93f2e3/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Time.java
----------------------------------------------------------------------
diff --git a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Time.java b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Time.java
index 5038e2f..ebba32e 100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Time.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/Time.java
@@ -19,10 +19,12 @@
  */
 package org.apache.kerby.x509.type;
 
+import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.type.Asn1Choice;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.type.Asn1GeneralizedTime;
 import org.apache.kerby.asn1.type.Asn1UtcTime;
+import static org.apache.kerby.x509.type.Time.MyEnum.*;
 
 import java.util.Date;
 
@@ -36,8 +38,20 @@ import java.util.Date;
  * </pre>
  */
 public class Time extends Asn1Choice {
-    private static final int UTC_TIME = 0;
-    private static final int GENERAL_TIME = 1;
+    protected static enum MyEnum implements EnumType {
+        UTC_TIME,
+        GENERAL_TIME;
+
+        @Override
+        public int getValue() {
+            return ordinal();
+        }
+
+        @Override
+        public String getName() {
+            return name();
+        }
+    }
 
     static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
         new Asn1FieldInfo(UTC_TIME, Asn1UtcTime.class),


[21/26] directory-kerby git commit: ASN1. Refined dumping support codes for user defined types

Posted by pl...@apache.org.
ASN1. Refined dumping support codes for user defined types


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/885cff3d
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/885cff3d
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/885cff3d

Branch: refs/heads/pkinit-support
Commit: 885cff3dfab21a5c98beb724ba00f0573cb6285b
Parents: 0a7853d
Author: Kai Zheng <ka...@intel.com>
Authored: Sat Dec 5 06:22:15 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Sat Dec 5 06:22:15 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/Asn1Dump.java    | 61 +++----------
 .../org/apache/kerby/asn1/Asn1Dumpable.java     |  7 ++
 .../java/org/apache/kerby/asn1/Asn1Dumper.java  | 92 ++++++++++++++++++++
 .../org/apache/kerby/asn1/Asn1InputBuffer.java  | 18 +---
 .../org/apache/kerby/asn1/UniversalTag.java     |  6 ++
 .../kerby/asn1/type/AbstractAsn1Type.java       |  5 --
 .../org/apache/kerby/asn1/type/Asn1Any.java     |  5 --
 .../apache/kerby/asn1/type/Asn1BitString.java   |  2 +-
 .../org/apache/kerby/asn1/type/Asn1Choice.java  |  7 +-
 .../apache/kerby/asn1/type/Asn1Collection.java  | 22 ++---
 .../kerby/asn1/type/Asn1CollectionType.java     | 31 ++++---
 .../apache/kerby/asn1/type/Asn1Constructed.java | 14 ++-
 .../org/apache/kerby/asn1/type/Asn1Item.java    |  8 --
 .../org/apache/kerby/asn1/type/Asn1Null.java    |  4 +-
 .../org/apache/kerby/asn1/type/Asn1Object.java  | 26 ++++--
 .../apache/kerby/asn1/type/Asn1OctetString.java |  2 +-
 .../org/apache/kerby/asn1/type/Asn1Simple.java  |  2 +-
 .../org/apache/kerby/asn1/type/Asn1Tagging.java | 10 ++-
 .../org/apache/kerby/asn1/type/Asn1Type.java    |  7 --
 .../kerby/asn1/type/TaggingCollection.java      | 11 ++-
 .../apache/kerby/asn1/TestPersonnelRecord.java  | 11 +--
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |  1 -
 22 files changed, 203 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
index e2569a8..188277c 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
@@ -19,8 +19,6 @@
  */
 package org.apache.kerby.asn1;
 
-import org.apache.kerby.asn1.type.Asn1Constructed;
-import org.apache.kerby.asn1.type.Asn1Item;
 import org.apache.kerby.asn1.type.Asn1Type;
 
 import java.io.IOException;
@@ -28,20 +26,27 @@ import java.nio.ByteBuffer;
 
 public class Asn1Dump {
 
+    public static void dump(Asn1Type value) {
+        Asn1Dumper dumper = new Asn1Dumper();
+        dumper.dumpType(0, value);
+        String output = dumper.output();
+        System.out.println(output);
+    }
+
     public static void dump(String hexStr) throws IOException {
         System.out.println("Dumping data:");
         System.out.println(hexStr);
-        Asn1Dump dumper = new Asn1Dump();
+        Asn1Dumper dumper = new Asn1Dumper();
         byte[] data = HexUtil.hex2bytes(hexStr);
-        dumper.doDump(data);
+        dumper.dump(data);
     }
 
     public static void dump(byte[] content) throws IOException {
         String hexStr = HexUtil.bytesToHex(content);
         System.out.println("Dumping data:");
         System.out.println(hexStr);
-        Asn1Dump dumper = new Asn1Dump();
-        dumper.doDump(content);
+        Asn1Dumper dumper = new Asn1Dumper();
+        dumper.dump(content);
     }
 
     public static void dump(ByteBuffer content) throws IOException {
@@ -49,48 +54,4 @@ public class Asn1Dump {
         content.get(bytes);
         dump(bytes);
     }
-
-    private StringBuilder builder = new StringBuilder();
-
-    private void doDump(byte[] content) throws IOException {
-        doDump(ByteBuffer.wrap(content));
-    }
-
-    private void doDump(ByteBuffer content) throws IOException {
-        Asn1InputBuffer buffer = new Asn1InputBuffer(content);
-        Asn1Type value = buffer.read();
-        if (value == null) {
-            return;
-        }
-
-        dumpType(0, value);
-
-        System.out.println(builder.toString());
-    }
-
-    private void dumpType(int numSpaces, Asn1Type value) {
-        if (value instanceof Asn1Item) {
-            dumpItem(numSpaces, (Asn1Item) value);
-        } else if (value instanceof Asn1Constructed) {
-            dumpCollection(numSpaces, (Asn1Constructed) value);
-        }
-    }
-
-    private void dumpCollection(int numSpaces, Asn1Constructed coll) {
-        prefixSpaces(numSpaces).append(coll).append("\n");
-        for (Asn1Type aObj : coll.getValue()) {
-            dumpType(numSpaces + 4, aObj);
-        }
-    }
-
-    private void dumpItem(int numSpaces, Asn1Item value) {
-        prefixSpaces(numSpaces).append(value).append("\n");
-    }
-
-    private StringBuilder prefixSpaces(int numSpaces) {
-        for (int i = 0; i < numSpaces; i++) {
-            builder.append(' ');
-        }
-        return builder;
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
new file mode 100644
index 0000000..8bbe4cf
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
@@ -0,0 +1,7 @@
+package org.apache.kerby.asn1;
+
+public interface Asn1Dumpable {
+
+    void dumpWith(Asn1Dumper dumper, int indents);
+
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..ecc4bdd
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java
@@ -0,0 +1,92 @@
+/**
+ *  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.asn1;
+
+import org.apache.kerby.asn1.type.Asn1Simple;
+import org.apache.kerby.asn1.type.Asn1Type;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+public class Asn1Dumper {
+
+    private StringBuilder builder = new StringBuilder();
+
+    public String output() {
+        return builder.toString();
+    }
+
+    public void dump(byte[] content) throws IOException {
+        dump(ByteBuffer.wrap(content));
+    }
+
+    public void dump(ByteBuffer content) throws IOException {
+        Asn1InputBuffer buffer = new Asn1InputBuffer(content);
+        Asn1Type value = buffer.read();
+        if (value == null) {
+            return;
+        }
+
+        dumpType(0, value);
+    }
+
+    public void dumpType(Asn1Type value) {
+        dumpType(0, value);
+    }
+
+    public void dumpType(int indents, Asn1Type value) {
+        if (value == null) {
+            indent(indents).append("null");
+        } else if (value instanceof Asn1Simple) {
+            indent(indents).append(value.toString());
+        } else if (value instanceof Asn1Dumpable) {
+            Asn1Dumpable dumpable = (Asn1Dumpable) value;
+            dumpable.dumpWith(this, indents);
+        } else {
+            append("<UNKNOWN>");
+        }
+    }
+
+    public Asn1Dumper indent(int numSpaces) {
+        for (int i = 0; i < numSpaces; i++) {
+            builder.append(' ');
+        }
+        return this;
+    }
+
+    public Asn1Dumper append(Asn1Simple<?> simpleValue) {
+        if (simpleValue != null) {
+            builder.append(simpleValue.toString());
+        } else {
+            builder.append("null");
+        }
+        return this;
+    }
+
+    public Asn1Dumper append(String string) {
+        builder.append(string);
+        return this;
+    }
+
+    public Asn1Dumper newLine() {
+        builder.append("\n");
+        return this;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
index 62a7d75..3242ccc 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
@@ -19,7 +19,6 @@
  */
 package org.apache.kerby.asn1;
 
-import org.apache.kerby.asn1.type.Asn1Item;
 import org.apache.kerby.asn1.type.Asn1Object;
 import org.apache.kerby.asn1.type.Asn1Type;
 
@@ -32,7 +31,7 @@ import java.nio.ByteBuffer;
  * and read until exhausted.
  */
 public class Asn1InputBuffer {
-    private final ByteBuffer decodeBuffer;
+    private final ByteBuffer buffer;
 
     /**
      * Constructor with bytes.
@@ -47,7 +46,7 @@ public class Asn1InputBuffer {
      * @param byteBuffer The byte buffer
      */
     public Asn1InputBuffer(ByteBuffer byteBuffer) {
-        this.decodeBuffer = byteBuffer;
+        this.buffer = byteBuffer;
     }
 
     /**
@@ -57,18 +56,7 @@ public class Asn1InputBuffer {
      * @throws IOException e
      */
     public Asn1Type read() throws IOException {
-        if (decodeBuffer.remaining() < 1) {
-            return null;
-        }
-        Asn1Item one = Asn1Object.decodeOne(decodeBuffer);
-        if (one.isSimple()) {
-            one.decodeValueAsSimple();
-        } else if (one.isCollection()) {
-            one.decodeValueAsCollection();
-        }
-        if (one.isFullyDecoded()) {
-            return one.getValue();
-        }
+        Asn1Type one = Asn1Object.readOne(buffer);
         return one;
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
----------------------------------------------------------------------
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 0a2eef7..63abbee 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
@@ -122,4 +122,10 @@ public enum UniversalTag {
             default : return UNKNOWN;
         }
     }
+
+    public String toStr() {
+        String typeStr = toString();
+        typeStr = typeStr.replace('_', ' ');
+        return typeStr.toLowerCase();
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
index df8ceef..b12c67d 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
@@ -75,9 +75,4 @@ public abstract class AbstractAsn1Type<T> extends Asn1Object {
     public void setValue(T value) {
         this.value = value;
     }
-
-    @Override
-    public String toString() {
-        return toStr();
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
index efcd9a1..617ec12 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
@@ -100,10 +100,5 @@ public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
 
         return result;
     }
-
-    @Override
-    public String toStr() {
-        return "any";
-    }
 }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
index 2ba95b9..70c07ca 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1BitString.java
@@ -84,7 +84,7 @@ public class Asn1BitString extends Asn1Simple<byte[]> {
     }
 
     @Override
-    public String toStr() {
+    public String toString() {
         String valueStr =
             (getValue() != null ? (getValue().length + " bytes") : "null");
         return valueStr;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
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 9393886..2d02bd8 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
@@ -74,7 +74,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
     @Override
     public void decode(ByteBuffer content) throws IOException {
         int foundPos = -1;
-        Asn1Item item = decodeOne(content);
+        Asn1Item item = readOne(content);
         for (int i = 0; i < fieldInfos.length; ++i) {
             if (item.isContextSpecific()) {
                 if (fieldInfos[i].getTagNo() == item.tagNo()) {
@@ -168,9 +168,4 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
     protected void setFieldAsInt(EnumType index, int value) {
         setFieldAs(index, new Asn1Integer(value));
     }
-
-    @Override
-    public String toStr() {
-        return "choice";
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
index a4d6560..9cbf89a 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
@@ -39,8 +39,8 @@ public class Asn1Collection extends Asn1Constructed {
         return isCollection(new Tag(tag));
     }
 
-    public static boolean isCollection(UniversalTag tagNo) {
-        switch (tagNo) {
+    public static boolean isCollection(UniversalTag universalTag) {
+        switch (universalTag) {
             case SEQUENCE:
             case SEQUENCE_OF:
             case SET:
@@ -51,19 +51,19 @@ public class Asn1Collection extends Asn1Constructed {
         }
     }
 
-    public static Asn1Type createCollection(int tagNo) {
-        if (!isCollection(tagNo)) {
-            throw new IllegalArgumentException("Not collection type, tag: " + tagNo);
+    public static Asn1Collection createCollection(Tag tag) {
+        if (!isCollection(tag)) {
+            throw new IllegalArgumentException("Not collection type, tag: " + tag);
         }
-        return createCollection(UniversalTag.fromValue(tagNo));
+        return createCollection(tag.universalTag());
     }
 
-    public static Asn1Type createCollection(UniversalTag tagNo) {
-        if (!isCollection(tagNo)) {
-            throw new IllegalArgumentException("Not collection type, tag: " + tagNo);
+    public static Asn1Collection createCollection(UniversalTag universalTag) {
+        if (!isCollection(universalTag)) {
+            throw new IllegalArgumentException("Not collection type, tag: " + universalTag);
         }
 
-        switch (tagNo) {
+        switch (universalTag) {
             case SEQUENCE:
                 return new Asn1Sequence();
             case SEQUENCE_OF:
@@ -73,7 +73,7 @@ public class Asn1Collection extends Asn1Constructed {
             case SET_OF:
                 return new Asn1Set();
             default:
-                throw new IllegalArgumentException("Unexpected tag " + tagNo.getValue());
+                throw new IllegalArgumentException("Unexpected tag " + universalTag.getValue());
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 a295a59..36082c4 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
@@ -19,6 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Dumpable;
+import org.apache.kerby.asn1.Asn1Dumper;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.TaggingOption;
@@ -31,7 +33,7 @@ import java.nio.ByteBuffer;
  * For collection type that may consist of tagged fields
  */
 public abstract class Asn1CollectionType
-    extends AbstractAsn1Type<Asn1CollectionType> {
+    extends AbstractAsn1Type<Asn1CollectionType> implements Asn1Dumpable {
     private final Asn1FieldInfo[] fieldInfos;
     private final Asn1Type[] fields;
 
@@ -200,16 +202,25 @@ public abstract class Asn1CollectionType
     }
 
     @Override
-    public String toStr() {
-        StringBuffer str = new StringBuffer();
-        str.append(this.getClass().getSimpleName() + "\n");
+    public void dumpWith(Asn1Dumper dumper, int indents) {
+        String type = getClass().getSimpleName();
+
+        dumper.indent(indents).append(type).newLine();
+
+        String fdName;
         for (int i = 0; i < fieldInfos.length; i++) {
-            str.append("Field name: ");
-            str.append(fieldInfos[i].getIndex().getName().replace("_", "-").toLowerCase() + "  ");
-            str.append("Field value: ");
-            str.append(fields[i].toStr() + "\n");
-        }
+            fdName = fieldInfos[i].getIndex().getName();
+            fdName = fdName.replace("_", "-").toLowerCase();
+
+            dumper.indent(indents + 4).append(fdName).append(" = ");
 
-        return str.toString();
+            Asn1Type fdValue = fields[i];
+            if (fdValue == null || fdValue instanceof Asn1Simple) {
+                dumper.append((Asn1Simple<?>) fdValue).newLine();
+            } else {
+                dumper.newLine().dumpType(indents + 8, fdValue);
+                dumper.newLine();
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
index 4a7d904..aec8504 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
@@ -79,7 +79,7 @@ public class Asn1Constructed extends AbstractAsn1Type<List<Asn1Type>> {
     @Override
     protected void decodeBody(ByteBuffer content) throws IOException {
         while (content.remaining() > 0) {
-            Asn1Item item = decodeOne(content);
+            Asn1Item item = readOne(content);
             if (item != null) {
                 if (item.isSimple() && !isLazy()) {
                     item.decodeValueAsSimple();
@@ -92,7 +92,15 @@ public class Asn1Constructed extends AbstractAsn1Type<List<Asn1Type>> {
     }
 
     @Override
-    public String toStr() {
-        return "[constructed]";
+    public String toString() {
+        String typeStr;
+        if (tag().isUniversal()) {
+            typeStr = tag().universalTag().toStr();
+        } else if (tag().isAppSpecific()) {
+            typeStr = "application " + tagNo();
+        } else {
+            typeStr = "[" + tagNo() + "]";
+        }
+        return typeStr;
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
index 7fbcd05..efd0673 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
@@ -143,12 +143,4 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
         ((Asn1Object) value).taggedDecode(tag(), getBodyContent(), taggingOption);
         setValue(value);
     }
-
-    @Override
-    public String toStr() {
-        if (getValue() != null) {
-            return getValue().toStr();
-        }
-        return "undecoded";
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
index 371553d..f1a4416 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Null.java
@@ -27,11 +27,11 @@ import java.nio.ByteBuffer;
 /**
  * The Asn1 Null type
  */
-public class Asn1Null extends Asn1Simple<Object> {
+public final class Asn1Null extends Asn1Simple<Object> {
     public static final Asn1Null INSTANCE = new Asn1Null();
     private static final byte[]  EMPTY_BYTES = new byte[0];
 
-    public Asn1Null() {
+    private Asn1Null() {
         super(UniversalTag.NULL, null);
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 099bf3f..6a3a3a2 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
@@ -36,12 +36,12 @@ import java.nio.ByteBuffer;
 public abstract class Asn1Object implements Asn1Type {
     private final Tag tag;
 
-    private int encodingLen = -1;
+    private int bodyLength = -1;
 
     // encoding options
     private EncodingType encodingType = EncodingType.BER;
     private boolean isImplicit = true;
-    private boolean isDefinitiveLength = false;
+    private boolean isDefinitiveLength = true; // by default!!
 
     /**
      * Constructor with a tag
@@ -164,12 +164,22 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public int encodingLength() {
-        if (encodingLen == -1) {
-            int bodyLen = encodingBodyLength();
-            encodingLen = Asn1Util.lengthOfTagLength(tagNo())
-                + Asn1Util.lengthOfBodyLength(bodyLen) + bodyLen;
+        return encodingHeaderLength() + getBodyLength();
+    }
+
+    private int getBodyLength() {
+        if (bodyLength == -1) {
+            bodyLength = encodingBodyLength();
         }
-        return encodingLen;
+        return bodyLength;
+    }
+
+    protected int encodingHeaderLength() {
+        int bodyLen = getBodyLength();
+        int headerLen = Asn1Util.lengthOfTagLength(tagNo());
+        headerLen += (isDefinitiveLength()
+            ? Asn1Util.lengthOfBodyLength(bodyLen) : 1);
+        return headerLen;
     }
 
     protected boolean isUniversal() {
@@ -283,7 +293,7 @@ public abstract class Asn1Object implements Asn1Type {
         return reader.readHeader();
     }
 
-    public static Asn1Item decodeOne(ByteBuffer content) throws IOException {
+    public static Asn1Item readOne(ByteBuffer content) throws IOException {
         Asn1Reader1 reader = new Asn1Reader1(content);
         Asn1Header header = reader.readHeader();
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
index c7b89f9..4511b42 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
@@ -50,7 +50,7 @@ public class Asn1OctetString extends Asn1Simple<byte[]> {
     }
 
     @Override
-    public String toStr() {
+    public String toString() {
         String valueStr =
             (getValue() != null ? (getValue().length + " octets") : "null");
         return valueStr;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
index 81f6e57..23e0cb8 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
@@ -203,7 +203,7 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
     }
 
     @Override
-    public String toStr() {
+    public String toString() {
         String valueStr =
             (getValue() != null ? String.valueOf(getValue()) : "null");
         return valueStr;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
index f0e03e3..8818c98 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
@@ -19,6 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Dumpable;
+import org.apache.kerby.asn1.Asn1Dumper;
 import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
@@ -28,7 +30,8 @@ import java.nio.ByteBuffer;
 /**
  * For tagging any Asn1Type with a tagNo
  */
-public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
+public class Asn1Tagging<T extends Asn1Type>
+    extends AbstractAsn1Type<T> implements Asn1Dumpable {
 
     public Asn1Tagging(int tagNo, T value,
                        boolean isAppSpecific, boolean isImplicit) {
@@ -99,7 +102,8 @@ public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
     }
 
     @Override
-    public String toStr() {
-        return getValue().toStr();
+    public void dumpWith(Asn1Dumper dumper, int indents) {
+        Asn1Type taggedValue = getValue();
+        dumper.dumpType(indents, taggedValue);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
index c272915..4c1c538 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
@@ -186,11 +186,4 @@ public interface Asn1Type {
      * @throws IOException e
      */
     void taggedDecode(byte[] content, TaggingOption taggingOption) throws IOException;
-
-    /**
-     * Return a friendly string representation for this object. In primitive
-     * cases, it may be the same with toString().
-     * @return a friendly string representation
-     */
-    String toStr();
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
index e5787d1..459c07b 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
@@ -19,6 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Dumpable;
+import org.apache.kerby.asn1.Asn1Dumper;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.Tag;
@@ -30,7 +32,9 @@ import java.nio.ByteBuffer;
  * For tagging a collection type with tagNo, either application specific or
  * context specific class
  */
-public abstract class TaggingCollection extends AbstractAsn1Type<Asn1CollectionType> {
+public abstract class TaggingCollection
+    extends AbstractAsn1Type<Asn1CollectionType> implements Asn1Dumpable {
+
     private Asn1Tagging<Asn1CollectionType> tagging;
     private Asn1CollectionType tagged;
 
@@ -172,7 +176,8 @@ public abstract class TaggingCollection extends AbstractAsn1Type<Asn1CollectionT
     }
 
     @Override
-    public String toStr() {
-        return tagging.toStr();
+    public void dumpWith(Asn1Dumper dumper, int indents) {
+        Asn1Type taggedValue = getValue();
+        dumper.dumpType(indents, taggedValue);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
index 7f97293..1e77f47 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
@@ -36,19 +36,12 @@ public class TestPersonnelRecord {
     @Test
     public void testEncoding() {
         PersonnelRecord pr = TestData.createSamplePersonnel();
+        Asn1Dump.dump(pr);
 
         if (verbose) {
             System.out.println("Name:");
             System.out.println(HexUtil.bytesToHexFriendly(pr.getName().encode()));
 
-        /*
-        System.out.println("Title:");
-        System.out.println(HexUtil.bytesToHexFriendly(pr.getFieldAs(1, Asn1VisibleString.class).encode()));
-
-        System.out.println("EmployeeNumber:");
-        System.out.println(HexUtil.bytesToHexFriendly(pr.getFieldAs(2, EmployeeNumber.class).encode()));
-        */
-
             System.out.println("DateOfHire:");
             System.out.println(HexUtil.bytesToHexFriendly(pr.getDateOfHire().encode()));
 
@@ -79,7 +72,7 @@ public class TestPersonnelRecord {
         assertThat(encoded).isEqualTo(data);
     }
 
-    @Test
+    //@Test
     public void testDecoding() throws IOException {
         PersonnelRecord expected = TestData.createSamplePersonnel();
         byte[] data = TestData.createSammplePersonnelEncodingData();

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/885cff3d/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
index 96819b8..d95c14e 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
@@ -88,7 +88,6 @@ public class KrbCodec {
             throw new IOException("To be supported krb message type with tag: " + tag);
         }
         msg.decode(tag, header.getValueBuffer());
-
         return msg;
     }
 


[08/26] directory-kerby git commit: ASN1. Simplified a bit some codes for collection types

Posted by pl...@apache.org.
ASN1. Simplified a bit some codes for collection types


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/54c10a31
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/54c10a31
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/54c10a31

Branch: refs/heads/pkinit-support
Commit: 54c10a31edbb77ad75fc0edcf4692db556c016fe
Parents: f98e113
Author: Kai Zheng <ka...@intel.com>
Authored: Tue Dec 1 17:42:58 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Tue Dec 1 17:42:58 2015 +0800

----------------------------------------------------------------------
 .../apache/kerby/asn1/type/Asn1Collection.java  | 22 ++++++--------
 .../kerby/asn1/type/Asn1CollectionOf.java       | 32 ++++++++------------
 .../kerby/asn1/type/Asn1CollectionType.java     |  3 +-
 .../apache/kerby/asn1/TestAsn1Collection.java   | 10 +++---
 4 files changed, 29 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/54c10a31/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
index 94bd2f5..3bbb770 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
@@ -30,12 +30,12 @@ import java.util.List;
 /**
  * ASN1 complex type, may be better named.
  */
-public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
+public class Asn1Collection extends AbstractAsn1Type<List<Asn1Type>> {
     private boolean lazy = false;
 
     public Asn1Collection(UniversalTag universalTag) {
         super(universalTag);
-        setValue(new ArrayList<Asn1Item>());
+        setValue(new ArrayList<Asn1Type>());
         usePrimitive(false);
     }
 
@@ -48,11 +48,7 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
     }
 
     public void addItem(Asn1Type value) {
-        if (value instanceof Asn1Item) {
-            getValue().add((Asn1Item) value);
-        } else {
-            getValue().add(new Asn1Item(value));
-        }
+        getValue().add(value);
     }
 
     public void clear() {
@@ -61,9 +57,9 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
 
     @Override
     protected int encodingBodyLength() {
-        List<Asn1Item> valueItems = getValue();
+        List<Asn1Type> valueItems = getValue();
         int allLen = 0;
-        for (Asn1Item item : valueItems) {
+        for (Asn1Type item : valueItems) {
             if (item != null) {
                 allLen += item.encodingLength();
             }
@@ -73,8 +69,8 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
 
     @Override
     protected void encodeBody(ByteBuffer buffer) {
-        List<Asn1Item> valueItems = getValue();
-        for (Asn1Item item : valueItems) {
+        List<Asn1Type> valueItems = getValue();
+        for (Asn1Type item : valueItems) {
             if (item != null) {
                 item.encode(buffer);
             }
@@ -88,8 +84,10 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
             if (item != null) {
                 if (item.isSimple() && !isLazy()) {
                     item.decodeValueAsSimple();
+                    addItem(item.getValue());
+                } else {
+                    addItem(item);
                 }
-                addItem(item);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/54c10a31/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
index 6d7f36b..26acc0b 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
@@ -33,19 +33,23 @@ public abstract class Asn1CollectionOf<T extends Asn1Type> extends Asn1Collectio
     }
 
     public List<T> getElements() {
-        List<Asn1Item> items = getValue();
+        List<Asn1Type> items = getValue();
         int nElements = items != null ? items.size() : 0;
         List<T> results = new ArrayList<T>(nElements);
         if (nElements > 0) {
-            for (Asn1Item item : items) {
-                if (!item.isFullyDecoded()) {
-                    try {
-                        item.decodeValueAs(getElementType());
-                    } catch (IOException e) {
-                        throw new RuntimeException(e);
+            for (Asn1Type itemObj : items) {
+                if (itemObj instanceof Asn1Item) {
+                    Asn1Item item = (Asn1Item) itemObj;
+                    if (!item.isFullyDecoded()) {
+                        try {
+                            item.decodeValueAs(getElementType());
+                        } catch (IOException e) {
+                            throw new RuntimeException(e);
+                        }
                     }
+                    itemObj = item.getValue();
                 }
-                results.add((T) item.getValue());
+                results.add((T) itemObj);
             }
         }
         return results;
@@ -69,18 +73,6 @@ public abstract class Asn1CollectionOf<T extends Asn1Type> extends Asn1Collectio
         super.addItem(element);
     }
 
-    @Override
-    public void addItem(Asn1Type value) {
-        Class<T> eleType = getElementType();
-        if (value instanceof Asn1Item) {
-            super.addItem(value);
-        } else if (!eleType.isInstance(value)) {
-            throw new RuntimeException("Unexpected element type " + value.getClass().getCanonicalName());
-        } else {
-            addElement((T) value);
-        }
-    }
-
     protected Class<T> getElementType() {
         Class<T> elementType = (Class<T>) ((ParameterizedType)
                 getClass().getGenericSuperclass()).getActualTypeArguments()[0];

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/54c10a31/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 bd3040e..3226441 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
@@ -83,8 +83,9 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
         coll.decode(tag(), content);
 
         int lastPos = -1, foundPos = -1;
-        for (Asn1Item item : coll.getValue()) {
+        for (Asn1Type itemObj : coll.getValue()) {
             foundPos = -1;
+            Asn1Item item = (Asn1Item) itemObj;
             for (int i = lastPos + 1; i < fieldInfos.length; ++i) {
                 if (item.isContextSpecific()) {
                     if (fieldInfos[i].getTagNo() == item.tagNo()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/54c10a31/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
index f1cd35c..2ae62e7 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Collection.java
@@ -19,10 +19,10 @@
  */
 package org.apache.kerby.asn1;
 
-import org.apache.kerby.asn1.type.AbstractAsn1Type;
 import org.apache.kerby.asn1.type.Asn1Boolean;
 import org.apache.kerby.asn1.type.Asn1IA5String;
 import org.apache.kerby.asn1.type.Asn1Sequence;
+import org.apache.kerby.asn1.type.Asn1String;
 import org.junit.Test;
 
 import java.io.IOException;
@@ -50,11 +50,11 @@ public class TestAsn1Collection {
     public void testSequenceDecoding() throws IOException {
         Asn1Sequence seq = new Asn1Sequence();
         seq.decode(EXPECTED_BYTES);
-        AbstractAsn1Type<?> field =
-            (AbstractAsn1Type<?>) seq.getValue().get(0).getValue();
+        Asn1String field =
+            (Asn1String) seq.getValue().get(0);
         assertThat(field.getValue()).isEqualTo(TEST_STR);
 
-        field = (AbstractAsn1Type<?>) seq.getValue().get(1).getValue();
-        assertThat(field.getValue()).isEqualTo(TEST_BOOL);
+        Asn1Boolean field2 = (Asn1Boolean) seq.getValue().get(1);
+        assertThat(field2.getValue()).isEqualTo(TEST_BOOL);
     }
 }


[07/26] directory-kerby git commit: ASN1. Added Asn1Util for those static functions in Asn1Object

Posted by pl...@apache.org.
ASN1. Added Asn1Util for those static functions in Asn1Object


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/f98e113b
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/f98e113b
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/f98e113b

Branch: refs/heads/pkinit-support
Commit: f98e113b8138ee13839618030119a7c0680ec2a3
Parents: a74ee67
Author: Kai Zheng <ka...@intel.com>
Authored: Tue Dec 1 15:22:48 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Tue Dec 1 15:22:48 2015 +0800

----------------------------------------------------------------------
 .../java/org/apache/kerby/asn1/Asn1Util.java    | 198 ++++++++++++++++++
 .../org/apache/kerby/asn1/type/Asn1Object.java  | 200 ++-----------------
 .../apache/kerby/asn1/type/Asn1OctetString.java |   3 +-
 .../org/apache/kerby/asn1/type/Asn1Simple.java  |   7 +-
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |   8 +-
 5 files changed, 226 insertions(+), 190 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/f98e113b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
new file mode 100644
index 0000000..caa50f3
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Util.java
@@ -0,0 +1,198 @@
+/**
+ *  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.asn1;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * The abstract ASN1 object for all the ASN1 types. It provides basic
+ * encoding and decoding utilities.
+ */
+public final class Asn1Util {
+    private Asn1Util() {
+        
+    }
+
+    public static int lengthOfBodyLength(int bodyLength) {
+        int length = 1;
+
+        if (bodyLength > 127) {
+            int payload = bodyLength;
+            while (payload != 0) {
+                payload >>= 8;
+                length++;
+            }
+        }
+
+        return length;
+    }
+
+    public static int lengthOfTagLength(int tagNo) {
+        int length = 1;
+
+        if (tagNo >= 31) {
+            if (tagNo < 128) {
+                length++;
+            } else {
+                length++;
+
+                do {
+                    tagNo >>= 7;
+                    length++;
+                } while (tagNo > 127);
+            }
+        }
+
+        return length;
+    }
+
+    public static void encodeTag(ByteBuffer buffer, Tag tag) {
+        int flags = tag.tagFlags();
+        int tagNo = tag.tagNo();
+
+        if (tagNo < 31) {
+            buffer.put((byte) (flags | tagNo));
+        } else {
+            buffer.put((byte) (flags | 0x1f));
+            if (tagNo < 128) {
+                buffer.put((byte) tagNo);
+            } else {
+                byte[] tmpBytes = new byte[5]; // 5 * 7 > 32
+                int iPut = tmpBytes.length;
+
+                tmpBytes[--iPut] = (byte) (tagNo & 0x7f);
+                do {
+                    tagNo >>= 7;
+                    tmpBytes[--iPut] = (byte) (tagNo & 0x7f | 0x80);
+                } while (tagNo > 127);
+
+                buffer.put(tmpBytes, iPut, tmpBytes.length - iPut);
+            }
+        }
+    }
+
+    public static void encodeLength(ByteBuffer buffer, int bodyLength) {
+        if (bodyLength < 128) {
+            buffer.put((byte) bodyLength);
+        } else {
+            int length = 0;
+            int payload = bodyLength;
+
+            while (payload != 0) {
+                payload >>= 8;
+                length++;
+            }
+
+            buffer.put((byte) (length | 0x80));
+
+            payload = bodyLength;
+            for (int i = length - 1; i >= 0; i--) {
+                buffer.put((byte) (payload >> (i * 8)));
+            }
+        }
+    }
+
+    public static Tag readTag(ByteBuffer buffer) throws IOException {
+        int tagFlags = readTagFlags(buffer);
+        int tagNo = readTagNo(buffer, tagFlags);
+        return new Tag(tagFlags, tagNo);
+    }
+
+    private static int readTagFlags(ByteBuffer buffer) throws IOException {
+        int tagFlags = buffer.get() & 0xff;
+        if (tagFlags == 0) {
+            throw new IOException("Bad tag 0 found");
+        }
+        return tagFlags;
+    }
+
+    private static int readTagNo(ByteBuffer buffer, int tagFlags) throws IOException {
+        int tagNo = tagFlags & 0x1f;
+
+        if (tagNo == 0x1f) {
+            tagNo = 0;
+
+            int b = buffer.get() & 0xff;
+            if ((b & 0x7f) == 0) {
+                throw new IOException("Invalid high tag number found");
+            }
+
+            while (b >= 0 && (b & 0x80) != 0) {
+                tagNo |= b & 0x7f;
+                tagNo <<= 7;
+                b = buffer.get();
+            }
+
+            tagNo |= b & 0x7f;
+        }
+
+        return tagNo;
+    }
+
+    public static int readLength(ByteBuffer buffer) throws IOException {
+        int result = buffer.get() & 0xff;
+        if (result == 0x80) {
+            return -1; // non-definitive length
+        }
+
+        if (result > 127) {
+            int length = result & 0x7f;
+            if (length > 4) {
+                throw new IOException("Bad length of more than 4 bytes: " + length);
+            }
+
+            result = 0;
+            int tmp;
+            for (int i = 0; i < length; i++) {
+                tmp = buffer.get() & 0xff;
+                result = (result << 8) + tmp;
+            }
+        }
+
+        if (result < 0) {
+            throw new IOException("Invalid length " + result);
+        }
+
+        if (result > buffer.remaining()) {
+            throw new IOException("Corrupt stream - less data "
+                + buffer.remaining() + " than expected " + result);
+        }
+
+        return result;
+    }
+
+    public static ByteBuffer dupWithLength(ByteBuffer buffer, int length) {
+        try {
+            ByteBuffer result = buffer.duplicate();
+            result.limit(buffer.position() + length);
+            buffer.position(buffer.position() + length);
+            return result;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    public static byte[] readAllLeftBytes(ByteBuffer buffer) {
+        byte[] result = new byte[buffer.remaining()];
+        buffer.get(result);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/f98e113b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 71d3af0..0a46d37 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
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
@@ -147,8 +148,8 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public void encode(ByteBuffer buffer) {
-        encodeTag(buffer, tag());
-        encodeLength(buffer, encodingBodyLength());
+        Asn1Util.encodeTag(buffer, tag());
+        Asn1Util.encodeLength(buffer, encodingBodyLength());
         encodeBody(buffer);
     }
 
@@ -163,8 +164,8 @@ public abstract class Asn1Object implements Asn1Type {
     public int encodingLength() {
         if (encodingLen == -1) {
             int bodyLen = encodingBodyLength();
-            encodingLen = lengthOfTagLength(tagNo())
-                + lengthOfBodyLength(bodyLen) + bodyLen;
+            encodingLen = Asn1Util.lengthOfTagLength(tagNo())
+                + Asn1Util.lengthOfBodyLength(bodyLen) + bodyLen;
         }
         return encodingLen;
     }
@@ -197,15 +198,15 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public void decode(ByteBuffer content) throws IOException {
-        Tag tmpTag = readTag(content);
-        int length = readLength(content);
+        Tag tmpTag = Asn1Util.readTag(content);
+        int length = Asn1Util.readLength(content);
 
         ByteBuffer valueBuffer;
         if (length == -1) {
             valueBuffer = content;
             useDefinitiveLength(false);
         } else {
-            valueBuffer = dupWithLength(content, length);
+            valueBuffer = Asn1Util.dupWithLength(content, length);
             useDefinitiveLength(true);
         }
 
@@ -227,8 +228,8 @@ public abstract class Asn1Object implements Asn1Type {
         int taggingTagNo = taggingOption.getTagNo();
         int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
                 : encodingLength();
-        int taggingEncodingLen = lengthOfTagLength(taggingTagNo)
-                + lengthOfBodyLength(taggingBodyLen) + taggingBodyLen;
+        int taggingEncodingLen = Asn1Util.lengthOfTagLength(taggingTagNo)
+                + Asn1Util.lengthOfBodyLength(taggingBodyLen) + taggingBodyLen;
         return taggingEncodingLen;
     }
 
@@ -242,10 +243,10 @@ public abstract class Asn1Object implements Asn1Type {
     @Override
     public void taggedEncode(ByteBuffer buffer, TaggingOption taggingOption) {
         Tag taggingTag = taggingOption.getTag(!isPrimitive());
-        encodeTag(buffer, taggingTag);
+        Asn1Util.encodeTag(buffer, taggingTag);
         int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
                 : encodingLength();
-        encodeLength(buffer, taggingBodyLen);
+        Asn1Util.encodeLength(buffer, taggingBodyLen);
         if (taggingOption.isImplicit()) {
             encodeBody(buffer);
         } else {
@@ -261,15 +262,15 @@ public abstract class Asn1Object implements Asn1Type {
     @Override
     public void taggedDecode(ByteBuffer content,
                              TaggingOption taggingOption) throws IOException {
-        Tag taggingTag = readTag(content);
-        int taggingLength = readLength(content);
+        Tag taggingTag = Asn1Util.readTag(content);
+        int taggingLength = Asn1Util.readLength(content);
 
         ByteBuffer valueBuffer;
         if (taggingLength == -1) {
             valueBuffer = content;
             useDefinitiveLength(false);
         } else {
-            valueBuffer = dupWithLength(content, taggingLength);
+            valueBuffer = Asn1Util.dupWithLength(content, taggingLength);
             useDefinitiveLength(true);
         }
 
@@ -292,8 +293,8 @@ public abstract class Asn1Object implements Asn1Type {
     }
 
     public static Asn1Item decodeOne(ByteBuffer content) throws IOException {
-        Tag tmpTag = readTag(content);
-        int length = readLength(content);
+        Tag tmpTag = Asn1Util.readTag(content);
+        int length = Asn1Util.readLength(content);
 
         Asn1Item result;
         ByteBuffer valueBuffer;
@@ -302,176 +303,11 @@ public abstract class Asn1Object implements Asn1Type {
             result.useDefinitiveLength(false);
             result.setBodyContent(content);
         } else {
-            valueBuffer = dupWithLength(content, length);
+            valueBuffer = Asn1Util.dupWithLength(content, length);
             result = new Asn1Item(tmpTag, valueBuffer);
             result.useDefinitiveLength(true);
         }
 
         return result;
     }
-
-    public static int lengthOfBodyLength(int bodyLength) {
-        int length = 1;
-
-        if (bodyLength > 127) {
-            int payload = bodyLength;
-            while (payload != 0) {
-                payload >>= 8;
-                length++;
-            }
-        }
-
-        return length;
-    }
-
-    public static int lengthOfTagLength(int tagNo) {
-        int length = 1;
-
-        if (tagNo >= 31) {
-            if (tagNo < 128) {
-                length++;
-            } else {
-                length++;
-
-                do {
-                    tagNo >>= 7;
-                    length++;
-                } while (tagNo > 127);
-            }
-        }
-
-        return length;
-    }
-
-    public static void encodeTag(ByteBuffer buffer, Tag tag) {
-        int flags = tag.tagFlags();
-        int tagNo = tag.tagNo();
-
-        if (tagNo < 31) {
-            buffer.put((byte) (flags | tagNo));
-        } else {
-            buffer.put((byte) (flags | 0x1f));
-            if (tagNo < 128) {
-                buffer.put((byte) tagNo);
-            } else {
-                byte[] tmpBytes = new byte[5]; // 5 * 7 > 32
-                int iPut = tmpBytes.length;
-
-                tmpBytes[--iPut] = (byte) (tagNo & 0x7f);
-                do {
-                    tagNo >>= 7;
-                    tmpBytes[--iPut] = (byte) (tagNo & 0x7f | 0x80);
-                } while (tagNo > 127);
-
-                buffer.put(tmpBytes, iPut, tmpBytes.length - iPut);
-            }
-        }
-    }
-
-    public static void encodeLength(ByteBuffer buffer, int bodyLength) {
-        if (bodyLength < 128) {
-            buffer.put((byte) bodyLength);
-        } else {
-            int length = 0;
-            int payload = bodyLength;
-
-            while (payload != 0) {
-                payload >>= 8;
-                length++;
-            }
-
-            buffer.put((byte) (length | 0x80));
-
-            payload = bodyLength;
-            for (int i = length - 1; i >= 0; i--) {
-                buffer.put((byte) (payload >> (i * 8)));
-            }
-        }
-    }
-
-    public static Tag readTag(ByteBuffer buffer) throws IOException {
-        int tagFlags = readTagFlags(buffer);
-        int tagNo = readTagNo(buffer, tagFlags);
-        return new Tag(tagFlags, tagNo);
-    }
-
-    private static int readTagFlags(ByteBuffer buffer) throws IOException {
-        int tagFlags = buffer.get() & 0xff;
-        if (tagFlags == 0) {
-            throw new IOException("Bad tag 0 found");
-        }
-        return tagFlags;
-    }
-
-    private static int readTagNo(ByteBuffer buffer, int tagFlags) throws IOException {
-        int tagNo = tagFlags & 0x1f;
-
-        if (tagNo == 0x1f) {
-            tagNo = 0;
-
-            int b = buffer.get() & 0xff;
-            if ((b & 0x7f) == 0) {
-                throw new IOException("Invalid high tag number found");
-            }
-
-            while (b >= 0 && (b & 0x80) != 0) {
-                tagNo |= b & 0x7f;
-                tagNo <<= 7;
-                b = buffer.get();
-            }
-
-            tagNo |= b & 0x7f;
-        }
-
-        return tagNo;
-    }
-
-    public static int readLength(ByteBuffer buffer) throws IOException {
-        int result = buffer.get() & 0xff;
-        if (result == 0x80) {
-            return -1; // non-definitive length
-        }
-
-        if (result > 127) {
-            int length = result & 0x7f;
-            if (length > 4) {
-                throw new IOException("Bad length of more than 4 bytes: " + length);
-            }
-
-            result = 0;
-            int tmp;
-            for (int i = 0; i < length; i++) {
-                tmp = buffer.get() & 0xff;
-                result = (result << 8) + tmp;
-            }
-        }
-
-        if (result < 0) {
-            throw new IOException("Invalid length " + result);
-        }
-
-        if (result > buffer.remaining()) {
-            throw new IOException("Corrupt stream - less data "
-                + buffer.remaining() + " than expected " + result);
-        }
-
-        return result;
-    }
-
-    public static ByteBuffer dupWithLength(ByteBuffer buffer, int length) {
-        try {
-            ByteBuffer result = buffer.duplicate();
-            result.limit(buffer.position() + length);
-            buffer.position(buffer.position() + length);
-            return result;
-        } catch (Exception e) {
-            throw e;
-        }
-    }
-
-    protected static byte[] readAllLeftBytes(ByteBuffer buffer) {
-        byte[] result = new byte[buffer.remaining()];
-        buffer.get(result);
-        return result;
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/f98e113b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
index 9271fea..6523cf7 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1OctetString.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
@@ -45,6 +46,6 @@ public class Asn1OctetString extends Asn1Simple<byte[]> {
 
     @Override
     protected void decodeBody(ByteBuffer content) throws IOException {
-        setValue(readAllLeftBytes(content));
+        setValue(Asn1Util.readAllLeftBytes(content));
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/f98e113b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
index 714e230..d55fb7a 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -59,9 +60,9 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
 
     @Override
     public void encode(ByteBuffer buffer) {
-        encodeTag(buffer, tag());
+        Asn1Util.encodeTag(buffer, tag());
         int bodyLen = encodingBodyLength();
-        encodeLength(buffer, bodyLen);
+        Asn1Util.encodeLength(buffer, bodyLen);
         if (bodyLen > 0) {
             buffer.put(encodeBody());
         }
@@ -92,7 +93,7 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
 
     @Override
     protected void decodeBody(ByteBuffer content) throws IOException {
-        byte[] leftBytes = readAllLeftBytes(content);
+        byte[] leftBytes = Asn1Util.readAllLeftBytes(content);
         if (leftBytes.length > 0) {
             setBytes(leftBytes);
             toValue();

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/f98e113b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
index 2197a6a..5157cdc 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
@@ -19,8 +19,8 @@
  */
 package org.apache.kerby.kerberos.kerb;
 
+import org.apache.kerby.asn1.Asn1Util;
 import org.apache.kerby.asn1.Tag;
-import org.apache.kerby.asn1.type.Asn1Object;
 import org.apache.kerby.asn1.type.Asn1Type;
 import org.apache.kerby.kerberos.kerb.type.ap.ApReq;
 import org.apache.kerby.kerberos.kerb.type.base.KrbError;
@@ -64,9 +64,9 @@ public class KrbCodec {
     }
 
     public static KrbMessage decodeMessage(ByteBuffer byteBuffer) throws IOException {
-        Tag tag = Asn1Object.readTag(byteBuffer);
-        int length = Asn1Object.readLength(byteBuffer);
-        ByteBuffer valueBuffer = Asn1Object.dupWithLength(byteBuffer, length);
+        Tag tag = Asn1Util.readTag(byteBuffer);
+        int length = Asn1Util.readLength(byteBuffer);
+        ByteBuffer valueBuffer = Asn1Util.dupWithLength(byteBuffer, length);
 
         KrbMessage msg;
         KrbMessageType msgType = KrbMessageType.fromValue(tag.tagNo());


[24/26] directory-kerby git commit: ASN1. Consolidate utility classes into the util package

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
index 1e33bf3..f93b53c 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Integer.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1;
 
 import org.apache.kerby.asn1.type.Asn1Integer;
+import org.apache.kerby.asn1.util.HexUtil;
 import org.junit.Test;
 
 import java.io.IOException;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
index 75b8d4e..39c43dc 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1ObjectIdentifier.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1;
 
 import org.apache.kerby.asn1.type.Asn1ObjectIdentifier;
+import org.apache.kerby.asn1.util.HexUtil;
 import org.junit.Test;
 
 import java.io.IOException;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
index efef9ae..0e11692 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1UtcTime.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.asn1;
 
 import org.apache.kerby.asn1.type.Asn1UtcTime;
+import org.apache.kerby.asn1.util.HexUtil;
 import org.junit.Test;
 
 import java.io.IOException;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/68c837fa/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
index 828aec0..81ce341 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1;
 
+import org.apache.kerby.asn1.util.HexUtil;
 import org.junit.Test;
 
 import java.io.IOException;


[23/26] directory-kerby git commit: DIRKRB-487. Introduced the Asn1 API class

Posted by pl...@apache.org.
DIRKRB-487. Introduced the Asn1 API class


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/4cb4366c
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/4cb4366c
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/4cb4366c

Branch: refs/heads/pkinit-support
Commit: 4cb4366c395a6a86e523e2770931eed462a10f57
Parents: 75c6483
Author: Kai Zheng <ka...@intel.com>
Authored: Sat Dec 5 07:10:15 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Sat Dec 5 07:10:15 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/kerby/asn1/Asn1.java   | 93 ++++++++++++++++++++
 .../java/org/apache/kerby/asn1/Asn1Dump.java    | 57 ------------
 .../org/apache/kerby/asn1/Asn1Dumpable.java     | 19 ++++
 .../java/org/apache/kerby/asn1/Asn1Dumper.java  |  5 +-
 .../org/apache/kerby/asn1/Asn1InputBuffer.java  | 62 -------------
 .../org/apache/kerby/asn1/Asn1OutputBuffer.java | 67 --------------
 .../org/apache/kerby/asn1/type/Asn1Choice.java  |  3 +-
 .../apache/kerby/asn1/type/Asn1Constructed.java |  3 +-
 .../org/apache/kerby/asn1/type/Asn1Object.java  | 15 ----
 .../org/apache/kerby/asn1/TestAsn1Dump.java     | 41 +++++++++
 .../org/apache/kerby/asn1/TestAsn1Input.java    | 35 --------
 .../apache/kerby/asn1/TestPersonnelRecord.java  |  1 -
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |  5 +-
 13 files changed, 162 insertions(+), 244 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
new file mode 100644
index 0000000..68698a9
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1.java
@@ -0,0 +1,93 @@
+/**
+ *  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.asn1;
+
+import org.apache.kerby.asn1.type.Asn1Item;
+import org.apache.kerby.asn1.type.Asn1Type;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * The shortcut API for ASN1 encoding, decoding and dumping.
+ * TO BE WELL DOCUMENTED.
+ */
+public final class Asn1 {
+
+    private Asn1() {
+
+    }
+
+    public static void encode(ByteBuffer buffer, Asn1Type value) {
+        value.encode(buffer);
+    }
+
+    public static byte[] encode(Asn1Type value) {
+        return value.encode();
+    }
+
+    public static Asn1Header decodeHeader(ByteBuffer content) throws IOException {
+        Asn1Reader1 reader = new Asn1Reader1(content);
+        return reader.readHeader();
+    }
+
+    public static Asn1Type decode(byte[] content) throws IOException {
+        return decode(ByteBuffer.wrap(content));
+    }
+
+    public static Asn1Type decode(ByteBuffer content) throws IOException {
+        Asn1Reader1 reader = new Asn1Reader1(content);
+        Asn1Header header = reader.readHeader();
+
+        Asn1Item result = new Asn1Item(header.getTag(), header.getValueBuffer());
+        result.useDefinitiveLength(header.isDefinitiveLength());
+
+        return result;
+    }
+
+    public static void dump(Asn1Type value) {
+        Asn1Dumper dumper = new Asn1Dumper();
+        dumper.dumpType(0, value);
+        String output = dumper.output();
+        System.out.println(output);
+    }
+
+    public static void dump(String hexStr) throws IOException {
+        System.out.println("Dumping data:");
+        System.out.println(hexStr);
+        Asn1Dumper dumper = new Asn1Dumper();
+        byte[] data = HexUtil.hex2bytes(hexStr);
+        dumper.dump(data);
+    }
+
+    public static void dump(byte[] content) throws IOException {
+        String hexStr = HexUtil.bytesToHex(content);
+        System.out.println("Dumping data:");
+        System.out.println(hexStr);
+        Asn1Dumper dumper = new Asn1Dumper();
+        dumper.dump(content);
+    }
+
+    public static void dump(ByteBuffer content) throws IOException {
+        byte[] bytes = new byte[content.remaining()];
+        content.get(bytes);
+        dump(bytes);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
deleted file mode 100644
index 188277c..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dump.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- *  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.asn1;
-
-import org.apache.kerby.asn1.type.Asn1Type;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-public class Asn1Dump {
-
-    public static void dump(Asn1Type value) {
-        Asn1Dumper dumper = new Asn1Dumper();
-        dumper.dumpType(0, value);
-        String output = dumper.output();
-        System.out.println(output);
-    }
-
-    public static void dump(String hexStr) throws IOException {
-        System.out.println("Dumping data:");
-        System.out.println(hexStr);
-        Asn1Dumper dumper = new Asn1Dumper();
-        byte[] data = HexUtil.hex2bytes(hexStr);
-        dumper.dump(data);
-    }
-
-    public static void dump(byte[] content) throws IOException {
-        String hexStr = HexUtil.bytesToHex(content);
-        System.out.println("Dumping data:");
-        System.out.println(hexStr);
-        Asn1Dumper dumper = new Asn1Dumper();
-        dumper.dump(content);
-    }
-
-    public static void dump(ByteBuffer content) throws IOException {
-        byte[] bytes = new byte[content.remaining()];
-        content.get(bytes);
-        dump(bytes);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
index 8bbe4cf..d4ae6d9 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumpable.java
@@ -1,3 +1,22 @@
+/**
+ *  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.asn1;
 
 public interface Asn1Dumpable {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Dumper.java
----------------------------------------------------------------------
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 ecc4bdd..739e59d 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
@@ -25,7 +25,7 @@ import org.apache.kerby.asn1.type.Asn1Type;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
-public class Asn1Dumper {
+public final class Asn1Dumper {
 
     private StringBuilder builder = new StringBuilder();
 
@@ -38,8 +38,7 @@ public class Asn1Dumper {
     }
 
     public void dump(ByteBuffer content) throws IOException {
-        Asn1InputBuffer buffer = new Asn1InputBuffer(content);
-        Asn1Type value = buffer.read();
+        Asn1Type value = Asn1.decode(content);
         if (value == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
deleted file mode 100644
index 3242ccc..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1InputBuffer.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- *  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.asn1;
-
-import org.apache.kerby.asn1.type.Asn1Object;
-import org.apache.kerby.asn1.type.Asn1Type;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-/**
- * Asn1 decoder. Given an input stream, it validates and parses
- * according to ASN1 spec, and the resultant object can be read
- * and read until exhausted.
- */
-public class Asn1InputBuffer {
-    private final ByteBuffer buffer;
-
-    /**
-     * Constructor with bytes.
-     * @param bytes The bytes
-     */
-    public Asn1InputBuffer(byte[] bytes) {
-        this(ByteBuffer.wrap(bytes));
-    }
-
-    /**
-     * Constructor with a ByteBuffer.
-     * @param byteBuffer The byte buffer
-     */
-    public Asn1InputBuffer(ByteBuffer byteBuffer) {
-        this.buffer = byteBuffer;
-    }
-
-    /**
-     * Parse and read ASN1 object from the stream. If it's already
-     * exhausted then null will be returned to indicate the end.
-     * @return an ASN1 object if available otherwise null
-     * @throws IOException e
-     */
-    public Asn1Type read() throws IOException {
-        Asn1Type one = Asn1Object.readOne(buffer);
-        return one;
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
deleted file mode 100644
index 729e042..0000000
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1OutputBuffer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- *  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.asn1;
-
-import org.apache.kerby.asn1.type.Asn1Object;
-import org.apache.kerby.asn1.type.Asn1Type;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Asn1 encoder
- */
-public class Asn1OutputBuffer {
-    private List<Asn1Type> objects;
-
-    public Asn1OutputBuffer() {
-        this.objects = new ArrayList<Asn1Type>(3);
-    }
-
-    public void write(Asn1Type value) {
-        objects.add(value);
-    }
-
-    public ByteBuffer getOutput() {
-        int len = encodingLength();
-        ByteBuffer byteBuffer = ByteBuffer.allocate(len);
-        encode(byteBuffer);
-        return byteBuffer;
-    }
-
-    private int encodingLength() {
-        int allLen = 0;
-        for (Asn1Type item : objects) {
-            if (item != null) {
-                allLen += ((Asn1Object) item).encodingLength();
-            }
-        }
-        return allLen;
-    }
-
-    private void encode(ByteBuffer buffer) {
-        for (Asn1Type item : objects) {
-            if (item != null) {
-                item.encode(buffer);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
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 2d02bd8..e7eb853 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
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.EnumType;
 import org.apache.kerby.asn1.TaggingOption;
@@ -74,7 +75,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
     @Override
     public void decode(ByteBuffer content) throws IOException {
         int foundPos = -1;
-        Asn1Item item = readOne(content);
+        Asn1Item item = (Asn1Item) Asn1.decode(content);
         for (int i = 0; i < fieldInfos.length; ++i) {
             if (item.isContextSpecific()) {
                 if (fieldInfos[i].getTagNo() == item.tagNo()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
index aec8504..6008282 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Constructed.java
@@ -19,6 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
+import org.apache.kerby.asn1.Asn1;
 import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
@@ -79,7 +80,7 @@ public class Asn1Constructed extends AbstractAsn1Type<List<Asn1Type>> {
     @Override
     protected void decodeBody(ByteBuffer content) throws IOException {
         while (content.remaining() > 0) {
-            Asn1Item item = readOne(content);
+            Asn1Item item = (Asn1Item) Asn1.decode(content);
             if (item != null) {
                 if (item.isSimple() && !isLazy()) {
                     item.decodeValueAsSimple();

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 6a3a3a2..70a43a7 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
@@ -287,19 +287,4 @@ public abstract class Asn1Object implements Asn1Type {
             decode(content);
         }
     }
-
-    public static Asn1Header readHeader(ByteBuffer content) throws IOException {
-        Asn1Reader1 reader = new Asn1Reader1(content);
-        return reader.readHeader();
-    }
-
-    public static Asn1Item readOne(ByteBuffer content) throws IOException {
-        Asn1Reader1 reader = new Asn1Reader1(content);
-        Asn1Header header = reader.readHeader();
-
-        Asn1Item result = new Asn1Item(header.getTag(), header.getValueBuffer());
-        result.useDefinitiveLength(header.isDefinitiveLength());
-
-        return result;
-    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Dump.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Dump.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Dump.java
new file mode 100644
index 0000000..540de22
--- /dev/null
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Dump.java
@@ -0,0 +1,41 @@
+/**
+ *  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.asn1;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+
+public class TestAsn1Dump {
+
+    @Test
+    public void testDecoding() throws IOException {
+        try {
+            PersonnelRecord pr = TestData.createSamplePersonnel();
+            Asn1.dump(pr);
+
+            byte[] data = TestData.createSammplePersonnelEncodingData();
+            Asn1.dump(data);
+        } catch (Exception e) {
+            Assert.fail();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Input.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Input.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Input.java
deleted file mode 100644
index 9a5b2c5..0000000
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestAsn1Input.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- *  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.asn1;
-
-import org.junit.Test;
-
-import java.io.IOException;
-
-public class TestAsn1Input {
-
-    @Test
-    public void testDecoding() throws IOException {
-        //PersonnelRecord expected = TestData.createSamplePersonnel();
-        byte[] data = TestData.createSammplePersonnelEncodingData();
-        //Asn1InputBuffer ib = new Asn1InputBuffer(data);
-        Asn1Dump.dump(data);
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
index 1e77f47..828aec0 100644
--- a/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
+++ b/kerby-asn1/src/test/java/org/apache/kerby/asn1/TestPersonnelRecord.java
@@ -36,7 +36,6 @@ public class TestPersonnelRecord {
     @Test
     public void testEncoding() {
         PersonnelRecord pr = TestData.createSamplePersonnel();
-        Asn1Dump.dump(pr);
 
         if (verbose) {
             System.out.println("Name:");

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/4cb4366c/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
index d95c14e..87d5731 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
@@ -19,9 +19,9 @@
  */
 package org.apache.kerby.kerberos.kerb;
 
+import org.apache.kerby.asn1.Asn1;
 import org.apache.kerby.asn1.Asn1Header;
 import org.apache.kerby.asn1.Tag;
-import org.apache.kerby.asn1.type.Asn1Object;
 import org.apache.kerby.asn1.type.Asn1Type;
 import org.apache.kerby.kerberos.kerb.type.ap.ApReq;
 import org.apache.kerby.kerberos.kerb.type.base.KrbError;
@@ -65,7 +65,7 @@ public class KrbCodec {
     }
 
     public static KrbMessage decodeMessage(ByteBuffer buffer) throws IOException {
-        Asn1Header header = Asn1Object.readHeader(buffer);
+        Asn1Header header = Asn1.decodeHeader(buffer);
         Tag tag = header.getTag();
 
         KrbMessage msg;
@@ -87,6 +87,7 @@ public class KrbCodec {
         } else {
             throw new IOException("To be supported krb message type with tag: " + tag);
         }
+
         msg.decode(tag, header.getValueBuffer());
         return msg;
     }


[10/26] directory-kerby git commit: Minor grammatical fix

Posted by pl...@apache.org.
Minor grammatical fix


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/949104fd
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/949104fd
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/949104fd

Branch: refs/heads/pkinit-support
Commit: 949104fd2f301c4af1389050a06831a7cb7e4111
Parents: 0138b2a
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Tue Dec 1 11:21:48 2015 +0000
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Tue Dec 1 11:21:48 2015 +0000

----------------------------------------------------------------------
 .../kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/949104fd/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
index a516873..7b03704 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
@@ -103,7 +103,7 @@ public class TokenPreauth extends AbstractPreauthPlugin {
             serverPrincipal.setRealm(kdcRequest.getKdcReq().getReqBody().getRealm());
             kdcRequest.setServerPrincipal(serverPrincipal);
             if (!audiences.contains(serverPrincipal.getName())) {
-                throw new KrbException("Token audience not match with the target server principal!");
+                throw new KrbException("The token audience does not match with the target server principal!");
             }
             if (kdcRequest instanceof AsRequest) {
                 AsRequest asRequest = (AsRequest) kdcRequest;


[03/26] directory-kerby git commit: DIRKRB-484 Refactor configuration items for TokenPreauth in KDC side

Posted by pl...@apache.org.
DIRKRB-484 Refactor configuration items for TokenPreauth in KDC side


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/dbc73db7
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/dbc73db7
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/dbc73db7

Branch: refs/heads/pkinit-support
Commit: dbc73db7a9cca2bc216e56f9a0021755c4a9567f
Parents: 27038b8
Author: Lin <li...@foxmail.com>
Authored: Mon Nov 30 20:56:17 2015 +0800
Committer: Lin <li...@foxmail.com>
Committed: Mon Nov 30 20:56:17 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java    | 6 +++---
 .../kerberos/kerb/integration/test/TokenLoginTestBase.java     | 4 ++--
 .../java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java  | 6 +++---
 .../org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java    | 6 +++---
 4 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/dbc73db7/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
index 27bdc50..f33309f 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
@@ -66,11 +66,11 @@ public class WithTokenKdcTestBase extends KdcTestBase {
     protected void configKdcSeverAndClient() {
         super.configKdcSeverAndClient();
         String verifyKeyPath = this.getClass().getResource("/").getPath();
-        getKdcServer().getKdcConfig().setString(KdcConfigKey.VERIFY_KEY, verifyKeyPath);
+        getKdcServer().getKdcConfig().setString(KdcConfigKey.TOKEN_VERIFY_KEYS, verifyKeyPath);
         
         URL privateKeyPath = WithTokenKdcTestBase.class.getResource("/private_key.pem");
-        getKdcServer().getKdcConfig().setString(KdcConfigKey.DECRYPTION_KEY, privateKeyPath.getPath());
-        getKdcServer().getKdcConfig().setString(KdcConfigKey.ISSUERS, ISSUER);
+        getKdcServer().getKdcConfig().setString(KdcConfigKey.TOKEN_DECRYPTION_KEYS, privateKeyPath.getPath());
+        getKdcServer().getKdcConfig().setString(KdcConfigKey.TOKEN_ISSUERS, ISSUER);
     }
 
     protected AuthToken getKrbToken() {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/dbc73db7/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
index 6ee1f8a..025a9fa 100644
--- a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/TokenLoginTestBase.java
@@ -67,8 +67,8 @@ public class TokenLoginTestBase extends LoginTestBase {
         getKdcServer().getKdcConfig().setBoolean(KdcConfigKey.ALLOW_TOKEN_PREAUTH,
             isTokenPreauthAllowed());
         String verifyKeyFile = this.getClass().getResource("/").getPath();
-        getKdcServer().getKdcConfig().setString(KdcConfigKey.VERIFY_KEY, verifyKeyFile);
-        getKdcServer().getKdcConfig().setString(KdcConfigKey.ISSUERS, "token-service");
+        getKdcServer().getKdcConfig().setString(KdcConfigKey.TOKEN_VERIFY_KEYS, verifyKeyFile);
+        getKdcServer().getKdcConfig().setString(KdcConfigKey.TOKEN_ISSUERS, "token-service");
     }
 
     protected Boolean isTokenPreauthAllowed() {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/dbc73db7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
index e53ddc9..18e8b3d 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
@@ -160,14 +160,14 @@ public class KdcConfig extends Krb5Conf {
     }
 
     public String getVerifyKeyConfig() {
-        return getString(KdcConfigKey.VERIFY_KEY, true, KDCDEFAULT);
+        return getString(KdcConfigKey.TOKEN_VERIFY_KEYS, true, KDCDEFAULT);
     }
 
     public String getDecryptionKeyConfig() {
-        return getString(KdcConfigKey.DECRYPTION_KEY, true, KDCDEFAULT);
+        return getString(KdcConfigKey.TOKEN_DECRYPTION_KEYS, true, KDCDEFAULT);
     }
     
     public List<String> getIssuers() {
-        return Arrays.asList(getStringArray(KdcConfigKey.ISSUERS, true, KDCDEFAULT));
+        return Arrays.asList(getStringArray(KdcConfigKey.TOKEN_ISSUERS, true, KDCDEFAULT));
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/dbc73db7/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
index e9c736d..6cae218 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
@@ -49,9 +49,9 @@ public enum KdcConfigKey implements ConfigKey {
     ENCRYPTION_TYPES("aes128-cts-hmac-sha1-96 des3-cbc-sha1-kd"),
     RESTRICT_ANONYMOUS_TO_TGT(false),
     KDC_MAX_DGRAM_REPLY_SIZE(4096),
-    VERIFY_KEY(),
-    DECRYPTION_KEY(),
-    ISSUERS();
+    TOKEN_VERIFY_KEYS(),
+    TOKEN_DECRYPTION_KEYS(),
+    TOKEN_ISSUERS();
 
     private Object defaultValue;
 


[05/26] directory-kerby git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/directory-kerby

Posted by pl...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/directory-kerby


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/8b0ef719
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/8b0ef719
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/8b0ef719

Branch: refs/heads/pkinit-support
Commit: 8b0ef71943e3fd6e75fc1e289bdaa886781152ba
Parents: 66fce42 dbc73db
Author: Kai Zheng <ka...@intel.com>
Authored: Tue Dec 1 11:52:28 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Tue Dec 1 11:52:28 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java    | 6 +++---
 .../kerberos/kerb/integration/test/TokenLoginTestBase.java     | 4 ++--
 .../java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java  | 6 +++---
 .../org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java    | 6 +++---
 4 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------



[26/26] directory-kerby git commit: merge from master.

Posted by pl...@apache.org.
merge from master.


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/1d9567ec
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/1d9567ec
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/1d9567ec

Branch: refs/heads/pkinit-support
Commit: 1d9567ec2716d19e54c53343fd6541cd6018609a
Parents: 38b2aa3 68c837f
Author: plusplusjiajia <ji...@intel.com>
Authored: Mon Dec 7 11:39:55 2015 +0800
Committer: plusplusjiajia <ji...@intel.com>
Committed: Mon Dec 7 11:39:55 2015 +0800

----------------------------------------------------------------------
 docs/kerby-checkstyle.xml                       |    2 +-
 .../main/java/org/apache/kerby/asn1/Asn1.java   |   95 ++
 .../java/org/apache/kerby/asn1/Asn1Dump.java    |   72 --
 .../org/apache/kerby/asn1/Asn1Dumpable.java     |   26 +
 .../java/org/apache/kerby/asn1/Asn1Dumper.java  |   91 ++
 .../org/apache/kerby/asn1/Asn1FieldInfo.java    |   12 +-
 .../java/org/apache/kerby/asn1/Asn1Header.java  |   54 +
 .../org/apache/kerby/asn1/Asn1InputBuffer.java  |  108 --
 .../org/apache/kerby/asn1/Asn1OutputBuffer.java |   67 --
 .../java/org/apache/kerby/asn1/EnumType.java    |   28 +
 .../org/apache/kerby/asn1/ExplicitField.java    |    6 +-
 .../org/apache/kerby/asn1/ImplicitField.java    |    6 +-
 .../apache/kerby/asn1/LimitedByteBuffer.java    |  121 --
 .../main/java/org/apache/kerby/asn1/Tag.java    |  141 +++
 .../java/org/apache/kerby/asn1/TagClass.java    |    2 +-
 .../org/apache/kerby/asn1/TaggingOption.java    |    8 +-
 .../org/apache/kerby/asn1/UniversalTag.java     |   10 +-
 .../kerby/asn1/type/AbstractAsn1Type.java       |   47 +-
 .../org/apache/kerby/asn1/type/Asn1Any.java     |   47 +-
 .../apache/kerby/asn1/type/Asn1BitString.java   |    7 +
 .../apache/kerby/asn1/type/Asn1BmpString.java   |    6 +-
 .../org/apache/kerby/asn1/type/Asn1Boolean.java |    6 +-
 .../org/apache/kerby/asn1/type/Asn1Choice.java  |   33 +-
 .../apache/kerby/asn1/type/Asn1Collection.java  |   88 +-
 .../kerby/asn1/type/Asn1CollectionOf.java       |   38 +-
 .../kerby/asn1/type/Asn1CollectionType.java     |  100 +-
 .../apache/kerby/asn1/type/Asn1Constructed.java |  107 ++
 .../apache/kerby/asn1/type/Asn1EnumType.java    |   27 -
 .../apache/kerby/asn1/type/Asn1Enumerated.java  |    9 +-
 .../org/apache/kerby/asn1/type/Asn1Eoc.java     |   54 +
 .../org/apache/kerby/asn1/type/Asn1Flags.java   |   10 +-
 .../org/apache/kerby/asn1/type/Asn1Item.java    |   96 +-
 .../org/apache/kerby/asn1/type/Asn1Null.java    |   10 +-
 .../org/apache/kerby/asn1/type/Asn1Object.java  |  356 ++----
 .../apache/kerby/asn1/type/Asn1OctetString.java |   14 +-
 .../apache/kerby/asn1/type/Asn1Sequence.java    |    3 +-
 .../apache/kerby/asn1/type/Asn1SequenceOf.java  |    3 +-
 .../kerby/asn1/type/Asn1SequenceType.java       |    2 +-
 .../org/apache/kerby/asn1/type/Asn1Set.java     |    3 +-
 .../org/apache/kerby/asn1/type/Asn1SetOf.java   |    3 +-
 .../org/apache/kerby/asn1/type/Asn1SetType.java |    2 +-
 .../org/apache/kerby/asn1/type/Asn1Simple.java  |   33 +-
 .../org/apache/kerby/asn1/type/Asn1String.java  |    4 +-
 .../org/apache/kerby/asn1/type/Asn1Tagging.java |   27 +-
 .../kerby/asn1/type/Asn1TaggingCollection.java  |  183 +++
 .../kerby/asn1/type/Asn1TaggingSequence.java    |   38 +
 .../apache/kerby/asn1/type/Asn1TaggingSet.java  |   39 +
 .../org/apache/kerby/asn1/type/Asn1Type.java    |   24 +-
 .../kerby/asn1/type/TaggingCollection.java      |  170 ---
 .../apache/kerby/asn1/type/TaggingSequence.java |   38 -
 .../org/apache/kerby/asn1/type/TaggingSet.java  |   38 -
 .../org/apache/kerby/asn1/util/Asn1Reader.java  |  114 ++
 .../org/apache/kerby/asn1/util/Asn1Reader1.java |   47 +
 .../org/apache/kerby/asn1/util/Asn1Reader2.java |   62 ++
 .../org/apache/kerby/asn1/util/Asn1Util.java    |  119 ++
 .../java/org/apache/kerby/asn1/util/Base64.java | 1048 ++++++++++++++++++
 .../org/apache/kerby/asn1/util/HexUtil.java     |  113 ++
 .../java/org/apache/kerby/asn1/util/IOUtil.java |  109 ++
 .../java/org/apache/kerby/asn1/util/Utf8.java   |   34 +
 .../org/apache/kerby/asn1/PersonnelRecord.java  |   85 +-
 .../org/apache/kerby/asn1/TestAsn1Boolean.java  |    5 +-
 .../apache/kerby/asn1/TestAsn1Collection.java   |   13 +-
 .../org/apache/kerby/asn1/TestAsn1Dump.java     |   41 +
 .../org/apache/kerby/asn1/TestAsn1Flags.java    |   11 +-
 .../org/apache/kerby/asn1/TestAsn1Input.java    |   35 -
 .../org/apache/kerby/asn1/TestAsn1Integer.java  |    5 +-
 .../kerby/asn1/TestAsn1ObjectIdentifier.java    |    5 +-
 .../org/apache/kerby/asn1/TestAsn1UtcTime.java  |    5 +-
 .../apache/kerby/asn1/TestPersonnelRecord.java  |   27 +-
 .../test/java/org/apache/kerby/asn1/Util.java   |  153 ---
 .../kerberos/kdc/WithTokenKdcTestBase.java      |    6 +-
 .../src/test/resources/log4j.properties         |   30 +
 kerby-kerb/integration-test/run/login.conf      |    2 +-
 .../kerb/integration/test/AppClient.java        |    2 +-
 .../kerb/integration/test/AppServer.java        |    4 +-
 .../kerb/integration/test/gss/GssAppClient.java |   16 +-
 .../kerb/integration/test/gss/GssAppServer.java |   30 +-
 .../integration/test/sasl/SaslAppClient.java    |    4 +-
 .../integration/test/sasl/SaslAppServer.java    |   18 +-
 .../integration/test/TokenLoginTestBase.java    |    6 +-
 .../src/test/resources/log4j.properties         |   30 +
 .../kerby/kerberos/kerb/preauth/PaFlag.java     |   11 +-
 .../kerby/kerberos/kerb/codec/CodecTest.java    |    3 +-
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |   19 +-
 .../kerby/kerberos/kerb/KrbErrorCode.java       |   11 +-
 .../kerberos/kerb/type/KrbAppSequenceType.java  |   16 +-
 .../kerberos/kerb/type/KrbSequenceType.java     |   12 +-
 .../kerby/kerberos/kerb/type/ad/AdToken.java    |   16 +-
 .../kerb/type/ad/AuthorizationDataEntry.java    |   18 +-
 .../kerb/type/ad/AuthorizationType.java         |   11 +-
 .../kerby/kerberos/kerb/type/ap/ApOption.java   |   11 +-
 .../kerby/kerberos/kerb/type/ap/ApRep.java      |   18 +-
 .../kerby/kerberos/kerb/type/ap/ApReq.java      |   22 +-
 .../kerberos/kerb/type/ap/Authenticator.java    |   33 +-
 .../kerberos/kerb/type/ap/EncAPRepPart.java     |   23 +-
 .../kerby/kerberos/kerb/type/base/CheckSum.java |   18 +-
 .../kerberos/kerb/type/base/CheckSumType.java   |    7 +-
 .../kerberos/kerb/type/base/EncryptedData.java  |   20 +-
 .../kerberos/kerb/type/base/EncryptionKey.java  |   18 +-
 .../kerberos/kerb/type/base/EncryptionType.java |    6 +-
 .../kerb/type/base/EtypeInfo2Entry.java         |   20 +-
 .../kerberos/kerb/type/base/EtypeInfoEntry.java |   18 +-
 .../kerberos/kerb/type/base/HostAddrType.java   |   11 +-
 .../kerberos/kerb/type/base/HostAddress.java    |   18 +-
 .../kerby/kerberos/kerb/type/base/KeyUsage.java |   11 +-
 .../kerby/kerberos/kerb/type/base/KrbError.java |   38 +-
 .../kerberos/kerb/type/base/KrbMessage.java     |   20 +-
 .../kerberos/kerb/type/base/KrbMessageType.java |   11 +-
 .../kerby/kerberos/kerb/type/base/KrbToken.java |   29 +-
 .../kerberos/kerb/type/base/LastReqEntry.java   |   18 +-
 .../kerberos/kerb/type/base/LastReqType.java    |   11 +-
 .../kerby/kerberos/kerb/type/base/NameType.java |   11 +-
 .../kerberos/kerb/type/base/PrincipalName.java  |   19 +-
 .../kerby/kerberos/kerb/type/base/SamType.java  |    9 +-
 .../kerberos/kerb/type/base/TokenFormat.java    |   11 +-
 .../kerb/type/base/TransitedEncoding.java       |   18 +-
 .../kerb/type/base/TransitedEncodingType.java   |   11 +-
 .../kerberos/kerb/type/fast/ArmorType.java      |   11 +-
 .../kerberos/kerb/type/fast/FastOption.java     |   11 +-
 .../kerberos/kerb/type/fast/KrbFastArmor.java   |   18 +-
 .../kerb/type/fast/KrbFastArmoredRep.java       |   16 +-
 .../kerb/type/fast/KrbFastArmoredReq.java       |   20 +-
 .../kerb/type/fast/KrbFastFinished.java         |   20 +-
 .../kerberos/kerb/type/fast/KrbFastReq.java     |   20 +-
 .../kerb/type/fast/KrbFastResponse.java         |   22 +-
 .../kerberos/kerb/type/fast/PaAuthnEntry.java   |   20 +-
 .../kerberos/kerb/type/fast/PaFxFastReply.java  |   16 +-
 .../kerb/type/fast/PaFxFastRequest.java         |   16 +-
 .../kerberos/kerb/type/kdc/EncKdcRepPart.java   |   38 +-
 .../kerby/kerberos/kerb/type/kdc/KdcOption.java |   11 +-
 .../kerby/kerberos/kerb/type/kdc/KdcRep.java    |   26 +-
 .../kerby/kerberos/kerb/type/kdc/KdcReq.java    |   20 +-
 .../kerberos/kerb/type/kdc/KdcReqBody.java      |   38 +-
 .../kerb/type/pa/PaAuthenticationSetElem.java   |   20 +-
 .../kerberos/kerb/type/pa/PaDataEntry.java      |   18 +-
 .../kerby/kerberos/kerb/type/pa/PaDataType.java |   11 +-
 .../kerby/kerberos/kerb/type/pa/PaEncTsEnc.java |   18 +-
 .../kerberos/kerb/type/pa/otp/OtpTokenInfo.java |   32 +-
 .../kerb/type/pa/otp/PaOtpChallenge.java        |   24 +-
 .../kerberos/kerb/type/pa/pkinit/AuthPack.java  |   22 +-
 .../kerberos/kerb/type/pa/pkinit/DHRepInfo.java |   18 +-
 .../pa/pkinit/ExternalPrincipalIdentifier.java  |   20 +-
 .../kerb/type/pa/pkinit/KdcDHKeyInfo.java       |   20 +-
 .../kerb/type/pa/pkinit/Krb5PrincipalName.java  |   18 +-
 .../kerberos/kerb/type/pa/pkinit/PaPkAsRep.java |   18 +-
 .../kerberos/kerb/type/pa/pkinit/PaPkAsReq.java |   20 +-
 .../kerb/type/pa/pkinit/PkAuthenticator.java    |   22 +-
 .../kerb/type/pa/pkinit/ReplyKeyPack.java       |   18 +-
 .../kerb/type/pa/token/PaTokenChallenge.java    |   16 +-
 .../kerb/type/pa/token/PaTokenRequest.java      |   18 +-
 .../kerberos/kerb/type/pa/token/TokenFlag.java  |   11 +-
 .../kerberos/kerb/type/pa/token/TokenInfo.java  |   18 +-
 .../kerb/type/ticket/EncTicketPart.java         |   36 +-
 .../kerby/kerberos/kerb/type/ticket/Ticket.java |   22 +-
 .../kerberos/kerb/type/ticket/TicketFlag.java   |   11 +-
 .../kerby/kerberos/kerb/server/KdcConfig.java   |    6 +-
 .../kerberos/kerb/server/KdcConfigKey.java      |    6 +-
 .../kerb/server/preauth/token/TokenPreauth.java |    2 +-
 .../kerby/kerberos/kerb/client/JaasKrbUtil.java |    2 +-
 .../org/apache/kerby/cms/type/Attribute.java    |   18 +-
 .../cms/type/AttributeCertificateInfoV1.java    |   33 +-
 .../kerby/cms/type/AttributeCertificateV1.java  |   20 +-
 .../org/apache/kerby/cms/type/Certificate.java  |   19 +-
 .../kerby/cms/type/CertificateChoices.java      |   23 +-
 .../apache/kerby/cms/type/CertificateList.java  |   20 +-
 .../org/apache/kerby/cms/type/CmsVersion.java   |    9 +-
 .../apache/kerby/cms/type/CompressedData.java   |   19 +-
 .../org/apache/kerby/cms/type/ContentInfo.java  |   18 +-
 .../kerby/cms/type/EncapsulatedContentInfo.java |   18 +-
 .../kerby/cms/type/ExtendedCertificate.java     |   20 +-
 .../kerby/cms/type/ExtendedCertificateInfo.java |   20 +-
 .../kerby/cms/type/IssuerAndSerialNumber.java   |   18 +-
 .../kerby/cms/type/OtherCertificateFormat.java  |   17 +-
 .../cms/type/OtherRevocationInfoFormat.java     |   18 +-
 .../kerby/cms/type/RevocationInfoChoice.java    |   18 +-
 .../org/apache/kerby/cms/type/SignedData.java   |   26 +-
 .../apache/kerby/cms/type/SignerIdentifier.java |   18 +-
 .../org/apache/kerby/cms/type/SignerInfo.java   |   28 +-
 .../java/org/apache/kerby/cms/type/Subject.java |   18 +-
 .../kerby/x500/type/AttributeTypeAndValue.java  |   17 +-
 .../java/org/apache/kerby/x500/type/Name.java   |   16 +-
 .../kerby/x509/type/AccessDescription.java      |   18 +-
 .../kerby/x509/type/AlgorithmIdentifier.java    |   19 +-
 .../apache/kerby/x509/type/AttCertIssuer.java   |   18 +-
 .../kerby/x509/type/AttCertValidityPeriod.java  |   18 +-
 .../org/apache/kerby/x509/type/Attribute.java   |   18 +-
 .../kerby/x509/type/AttributeCertificate.java   |   20 +-
 .../x509/type/AttributeCertificateInfo.java     |   32 +-
 .../kerby/x509/type/AuthorityKeyIdentifier.java |   19 +-
 .../kerby/x509/type/BasicConstraints.java       |   18 +-
 .../org/apache/kerby/x509/type/CRLReason.java   |   11 +-
 .../org/apache/kerby/x509/type/Certificate.java |   20 +-
 .../apache/kerby/x509/type/CertificateList.java |   20 +-
 .../apache/kerby/x509/type/CertificatePair.java |   18 +-
 .../org/apache/kerby/x509/type/DHParameter.java |   19 +-
 .../apache/kerby/x509/type/DSAParameter.java    |   20 +-
 .../org/apache/kerby/x509/type/DigestInfo.java  |   18 +-
 .../kerby/x509/type/DigestedObjectType.java     |   11 +-
 .../apache/kerby/x509/type/DirectoryString.java |   23 +-
 .../org/apache/kerby/x509/type/DisplayText.java |   22 +-
 .../kerby/x509/type/DistributionPoint.java      |   20 +-
 .../kerby/x509/type/DistributionPointName.java  |   18 +-
 .../apache/kerby/x509/type/EDIPartyName.java    |   18 +-
 .../org/apache/kerby/x509/type/Extension.java   |   20 +-
 .../org/apache/kerby/x509/type/GeneralName.java |   33 +-
 .../apache/kerby/x509/type/GeneralSubtree.java  |   20 +-
 .../java/org/apache/kerby/x509/type/Holder.java |   20 +-
 .../apache/kerby/x509/type/IetfAttrSyntax.java  |   18 +-
 .../kerby/x509/type/IetfAttrSyntaxChoice.java   |   20 +-
 .../apache/kerby/x509/type/IssuerSerial.java    |   20 +-
 .../x509/type/IssuingDistributionPoint.java     |   25 +-
 .../org/apache/kerby/x509/type/KeyUsage.java    |    9 +-
 .../apache/kerby/x509/type/NameConstraints.java |   18 +-
 .../apache/kerby/x509/type/NoticeReference.java |   18 +-
 .../kerby/x509/type/ObjectDigestInfo.java       |   22 +-
 .../org/apache/kerby/x509/type/OtherName.java   |   18 +-
 .../kerby/x509/type/PolicyConstraints.java      |   18 +-
 .../kerby/x509/type/PolicyInformation.java      |   18 +-
 .../apache/kerby/x509/type/PolicyMapping.java   |   18 +-
 .../kerby/x509/type/PolicyQualifierInfo.java    |   18 +-
 .../kerby/x509/type/PrivateKeyUsagePeriod.java  |   18 +-
 .../org/apache/kerby/x509/type/ReasonFlags.java |    9 +-
 .../kerby/x509/type/RevokedCertificate.java     |   20 +-
 .../org/apache/kerby/x509/type/RoleSyntax.java  |   18 +-
 .../kerby/x509/type/SubjectPublicKeyInfo.java   |   18 +-
 .../org/apache/kerby/x509/type/TBSCertList.java |   29 +-
 .../apache/kerby/x509/type/TBSCertificate.java  |   36 +-
 .../java/org/apache/kerby/x509/type/Target.java |   20 +-
 .../org/apache/kerby/x509/type/TargetCert.java  |   20 +-
 .../java/org/apache/kerby/x509/type/Time.java   |   18 +-
 .../org/apache/kerby/x509/type/UserNotice.java  |   18 +-
 .../java/org/apache/kerby/x509/type/V2Form.java |   20 +-
 pom.xml                                         |    1 +
 233 files changed, 5434 insertions(+), 2033 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/docs/kerby-checkstyle.xml
----------------------------------------------------------------------
diff --cc docs/kerby-checkstyle.xml
index 6af4748,72388df..241bdf4
--- a/docs/kerby-checkstyle.xml
+++ b/docs/kerby-checkstyle.xml
@@@ -66,8 -66,8 +66,8 @@@
  
          <!-- Checks for imports                              -->
          <!-- See http://checkstyle.sf.net/config_import.html -->
-         <module name="AvoidStarImport"/>
+         <!--module name="AvoidStarImport"/-->
 -        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
 +        <!--module name="IllegalImport"/--> <!-- defaults to sun.* packages -->
          <module name="RedundantImport"/>
          <module name="UnusedImports"/>
  

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
diff --cc kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
index 7011770,36082c4..ec5e81a
--- 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
@@@ -19,13 -19,14 +19,15 @@@
   */
  package org.apache.kerby.asn1.type;
  
+ import org.apache.kerby.asn1.Asn1Dumpable;
+ import org.apache.kerby.asn1.Asn1Dumper;
  import org.apache.kerby.asn1.Asn1FieldInfo;
- import org.apache.kerby.asn1.LimitedByteBuffer;
- import org.apache.kerby.asn1.TagClass;
+ import org.apache.kerby.asn1.EnumType;
  import org.apache.kerby.asn1.TaggingOption;
+ import org.apache.kerby.asn1.UniversalTag;
  
  import java.io.IOException;
 +import java.math.BigInteger;
  import java.nio.ByteBuffer;
  
  /**
@@@ -177,12 -185,8 +186,12 @@@ public abstract class Asn1CollectionTyp
          setFieldAs(index, new Asn1Integer(value));
      }
  
-     protected void setFieldAsBigInteger(int index, BigInteger value) {
++    protected void setFieldAsBigInteger(EnumType index, BigInteger value) {
 +        setFieldAs(index, new Asn1Integer(value));
 +    }
 +
-     protected <T extends Asn1Type> T getFieldAsAny(int index, Class<T> t) {
-         Asn1Type value = fields[index];
+     protected <T extends Asn1Type> T getFieldAsAny(EnumType index, Class<T> t) {
+         Asn1Type value = fields[index.getValue()];
          if (value != null && value instanceof Asn1Any) {
              Asn1Any any = (Asn1Any) value;
              return any.getValueAs(t);

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
----------------------------------------------------------------------
diff --cc kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
index eb4083c,3507bf0..bfb2baf
--- a/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
+++ b/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
@@@ -47,28 -41,6 +47,27 @@@ public class CodecTest 
          assertThat(restored).isNotNull();
          assertThat(restored.getCksumtype()).isEqualTo(mcs.getCksumtype());
          assertThat(mcs.getChecksum()).isEqualTo(restored.getChecksum());
-         assertThat(restored.tagNo()).isEqualTo(mcs.tagNo());
-         assertThat(restored.tagFlags()).isEqualTo(mcs.tagFlags());
+         assertThat(restored.tag()).isEqualTo(mcs.tag());
      }
 +
 +    @Test
 +    public void testDecode() throws IOException {
 +        AsReq expected = new AsReq();
 +
 +        KdcReqBody body = new KdcReqBody();
 +
 +        expected.setReqBody(body);
 +
 +        Asn1InputBuffer ib = new Asn1InputBuffer(expected.encode());
 +        Asn1Type fd1 = ib.read();
 +        Asn1Type fd2 = ib.read();
 +        Asn1Type fd3 = ib.read();
 +        Asn1Type fd4 = ib.read();
 +        Asn1Type fd5 = ib.read();
 +        Asn1Type fd6 = ib.read();
 +        Asn1Type fd7 = ib.read();
 +        Asn1Type fd8 = ib.read();
 +        Asn1Type fd9 = ib.read();
 +
 +    }
  }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/base/NameType.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/AuthPack.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
----------------------------------------------------------------------
diff --cc kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
index 05c2f02,f3669eb..9f6e92d
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/type/pa/pkinit/KdcDHKeyInfo.java
@@@ -34,12 -36,24 +36,24 @@@ import static org.apache.kerby.kerberos
   }
   */
  public class KdcDHKeyInfo extends KrbSequenceType {
-     private static final int SUBJECT_PUBLIC_KEY = 0;
-     private static final int NONCE = 1;
-     private static final int DH_KEY_EXPIRATION = 2;
+     protected static enum MyEnum implements EnumType {
 -        SUBJECT_PUBLICK_KEY,
++        SUBJECT_PUBLIC_KEY,
+         NONCE,
+         DH_KEY_EXPIRATION;
+ 
+         @Override
+         public int getValue() {
+             return ordinal();
+         }
+ 
+         @Override
+         public String getName() {
+             return name();
+         }
+     }
  
      static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
 -            new ExplicitField(SUBJECT_PUBLICK_KEY, Asn1BitString.class),
 +            new ExplicitField(SUBJECT_PUBLIC_KEY, Asn1BitString.class),
              new ExplicitField(NONCE, Asn1Integer.class),
              new ExplicitField(DH_KEY_EXPIRATION, KerberosTime.class)
      };

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
----------------------------------------------------------------------
diff --cc kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
index 4025628,18e8b3d..a9ac3c4
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfig.java
@@@ -168,16 -168,6 +168,16 @@@ public class KdcConfig extends Krb5Con
      }
      
      public List<String> getIssuers() {
-         return Arrays.asList(getStringArray(KdcConfigKey.ISSUERS, true, KDCDEFAULT));
+         return Arrays.asList(getStringArray(KdcConfigKey.TOKEN_ISSUERS, true, KDCDEFAULT));
      }
 +
 +    public List<String> getPkinitAnchors() {
 +        return Arrays.asList(getString(
 +                KdcConfigKey.PKINIT_ANCHORS, true, KDCDEFAULT));
 +    }
 +
 +    public String getPkinitIdentity() {
 +        return getString(
 +                KdcConfigKey.PKINIT_IDENTITY, true, KDCDEFAULT);
 +    }
  }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
----------------------------------------------------------------------
diff --cc kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
index e372193,6cae218..f74951a
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
@@@ -49,11 -49,9 +49,11 @@@ public enum KdcConfigKey implements Con
      ENCRYPTION_TYPES("aes128-cts-hmac-sha1-96 des3-cbc-sha1-kd"),
      RESTRICT_ANONYMOUS_TO_TGT(false),
      KDC_MAX_DGRAM_REPLY_SIZE(4096),
-     VERIFY_KEY(),
-     DECRYPTION_KEY(),
-     ISSUERS(),
+     TOKEN_VERIFY_KEYS(),
+     TOKEN_DECRYPTION_KEYS(),
 -    TOKEN_ISSUERS();
++    TOKEN_ISSUERS(),
 +    PKINIT_IDENTITY(null),
 +    PKINIT_ANCHORS(null);
  
      private Object defaultValue;
  

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-pkix/src/main/java/org/apache/kerby/x509/type/AlgorithmIdentifier.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DHParameter.java
----------------------------------------------------------------------
diff --cc kerby-pkix/src/main/java/org/apache/kerby/x509/type/DHParameter.java
index f66cb70,0000000..f5366c1
mode 100644,000000..100644
--- a/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DHParameter.java
+++ b/kerby-pkix/src/main/java/org/apache/kerby/x509/type/DHParameter.java
@@@ -1,51 -1,0 +1,64 @@@
 +package org.apache.kerby.x509.type;
 +
 +import org.apache.kerby.asn1.Asn1FieldInfo;
++import org.apache.kerby.asn1.EnumType;
 +import org.apache.kerby.asn1.type.Asn1Integer;
 +import org.apache.kerby.asn1.type.Asn1SequenceType;
++import static org.apache.kerby.x509.type.DHParameter.MyEnum.*;
 +
 +import java.math.BigInteger;
 +
 +public class DHParameter extends Asn1SequenceType {
++    protected static enum MyEnum implements EnumType {
++        P,
++        G,
++        Q;
 +
-     private static final int P = 0;
-     private static final int G = 1;
-     private static final int Q = 2;
++        @Override
++        public int getValue() {
++            return ordinal();
++        }
++
++        @Override
++        public String getName() {
++            return name();
++        }
++    }
 +
 +    static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
 +            new Asn1FieldInfo(P, Asn1Integer.class),
 +            new Asn1FieldInfo(G, Asn1Integer.class),
 +            new Asn1FieldInfo(Q, Asn1Integer.class),
 +    };
 +
 +    public DHParameter() {
 +        super(fieldInfos);
 +    }
 +
 +    public void setP(BigInteger p) {
 +        setFieldAsBigInteger(P, p);
 +    }
 +
 +    public BigInteger getP() {
 +        Asn1Integer p = getFieldAs(P, Asn1Integer.class);
 +        return p.getValue();
 +    }
 +
 +    public void setG(BigInteger g) {
 +        setFieldAsBigInteger(G, g);
 +    }
 +
 +    public BigInteger getG() {
 +        Asn1Integer g = getFieldAs(G, Asn1Integer.class);
 +        return g.getValue();
 +    }
 +
 +    public void setQ(BigInteger q) {
 +        setFieldAsBigInteger(Q, q);
 +    }
 +
 +    public BigInteger getQ() {
 +        Asn1Integer q = getFieldAs(Q, Asn1Integer.class);
 +        return q.getValue();
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/kerby-pkix/src/main/java/org/apache/kerby/x509/type/SubjectPublicKeyInfo.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/1d9567ec/pom.xml
----------------------------------------------------------------------


[04/26] directory-kerby git commit: ASN1. Use Tag class to simplify

Posted by pl...@apache.org.
ASN1. Use Tag class to simplify


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/66fce42a
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/66fce42a
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/66fce42a

Branch: refs/heads/pkinit-support
Commit: 66fce42a067fb371e6ce56fe24b28274db597c5b
Parents: 27038b8
Author: Kai Zheng <ka...@intel.com>
Authored: Tue Dec 1 11:51:52 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Tue Dec 1 11:51:52 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/kerby/asn1/Tag.java    | 140 +++++++++++++++
 .../java/org/apache/kerby/asn1/TagClass.java    |   2 +-
 .../org/apache/kerby/asn1/TaggingOption.java    |   8 +-
 .../kerby/asn1/type/AbstractAsn1Type.java       |  47 +++--
 .../org/apache/kerby/asn1/type/Asn1Any.java     |   3 +-
 .../org/apache/kerby/asn1/type/Asn1Choice.java  |   8 +-
 .../apache/kerby/asn1/type/Asn1Collection.java  |  15 +-
 .../kerby/asn1/type/Asn1CollectionOf.java       |   6 +-
 .../kerby/asn1/type/Asn1CollectionType.java     |  15 +-
 .../org/apache/kerby/asn1/type/Asn1Item.java    |  27 +--
 .../org/apache/kerby/asn1/type/Asn1Object.java  | 170 ++++++++-----------
 .../apache/kerby/asn1/type/Asn1Sequence.java    |   3 +-
 .../apache/kerby/asn1/type/Asn1SequenceOf.java  |   3 +-
 .../kerby/asn1/type/Asn1SequenceType.java       |   2 +-
 .../org/apache/kerby/asn1/type/Asn1Set.java     |   3 +-
 .../org/apache/kerby/asn1/type/Asn1SetOf.java   |   3 +-
 .../org/apache/kerby/asn1/type/Asn1SetType.java |   2 +-
 .../org/apache/kerby/asn1/type/Asn1Simple.java  |  18 +-
 .../org/apache/kerby/asn1/type/Asn1String.java  |   4 +-
 .../org/apache/kerby/asn1/type/Asn1Tagging.java |  13 +-
 .../org/apache/kerby/asn1/type/Asn1Type.java    |  24 +--
 .../kerby/asn1/type/TaggingCollection.java      |  13 +-
 .../org/apache/kerby/asn1/type/TaggingSet.java  |   3 +-
 .../kerby/kerberos/kerb/codec/CodecTest.java    |   3 +-
 .../apache/kerby/kerberos/kerb/KrbCodec.java    |   9 +-
 25 files changed, 312 insertions(+), 232 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..bea843f
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
@@ -0,0 +1,140 @@
+/**
+ *  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.asn1;
+
+/**
+ * ASN1, a tagged system.
+ */
+public class Tag {
+    private int tagFlags = 0;
+    private int tagNo = 0;
+
+    public Tag(int tag) {
+        this.tagFlags = tag & 0xE0;
+        this.tagNo = tag & 0x1F;
+    }
+
+    public Tag(UniversalTag tag) {
+        this.tagFlags = TagClass.UNIVERSAL.getValue();
+        this.tagNo = tag.getValue();
+    }
+
+    public Tag(int tagFlags, int tagNo) {
+        this.tagFlags = tagFlags & 0xE0;
+        this.tagNo = tagNo;
+    }
+
+    public Tag(TagClass tagClass, int tagNo) {
+        this.tagFlags = tagClass.getValue();
+        this.tagNo = tagNo;
+    }
+
+    public Tag(Tag other) {
+        this(other.tagFlags, other.tagNo);
+    }
+
+    public TagClass tagClass() {
+        return TagClass.fromTag(tagFlags);
+    }
+
+    public void usePrimitive(boolean isPrimitive) {
+        if (isPrimitive) {
+            tagFlags &= ~0x20;
+        } else {
+            tagFlags |= 0x20;
+        }
+    }
+
+    public boolean isPrimitive() {
+        return (tagFlags & 0x20) == 0;
+    }
+
+    public int tagFlags() {
+        return tagFlags;
+    }
+
+    public int tagNo() {
+        return tagNo;
+    }
+
+    public UniversalTag universalTag() {
+        if (isUniversal()) {
+            return UniversalTag.fromValue(tagNo());
+        }
+        return UniversalTag.UNKNOWN;
+    }
+
+    public boolean isUniversal() {
+        return tagClass().isUniversal();
+    }
+
+    public boolean isAppSpecific() {
+        return tagClass().isAppSpecific();
+    }
+
+    public boolean isContextSpecific() {
+        return tagClass().isContextSpecific();
+    }
+
+    public boolean isTagged() {
+        return tagClass().isTagged();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        Tag tag = (Tag) o;
+
+        if (tagFlags != tag.tagFlags) {
+            return false;
+        }
+
+        return tagNo == tag.tagNo;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = tagFlags;
+        result = 31 * result + tagNo;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "Tag["
+            + "tagFlags=" + tagFlags
+            + ", tagNo=" + tagNo
+            + ']';
+    }
+
+    public static Tag newAppTag(int tagNo) {
+        return new Tag(TagClass.APPLICATION, tagNo);
+    }
+
+    public static Tag newCtxTag(int tagNo) {
+        return new Tag(TagClass.CONTEXT_SPECIFIC, tagNo);
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/TagClass.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/TagClass.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/TagClass.java
index cbd02fc..8070692 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/TagClass.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/TagClass.java
@@ -93,7 +93,7 @@ public enum TagClass {
      * @param tag The int value of tag class
      * @return tag class
      */
-    public static TagClass fromTagFlags(int tag) {
+    public static TagClass fromTag(int tag) {
         return fromValue(tag & 0xC0);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/TaggingOption.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/TaggingOption.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/TaggingOption.java
index 8bb0419..898c25e 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/TaggingOption.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/TaggingOption.java
@@ -19,8 +19,6 @@
  */
 package org.apache.kerby.asn1;
 
-import org.apache.kerby.asn1.type.Asn1Type;
-
 /**
  * Tagging option for tagging an ASN1 type.
  */
@@ -82,12 +80,12 @@ public final class TaggingOption {
      * @param isTaggedConstructed Tagged Constructed or not
      * @return tag flag
      */
-    public int tagFlags(boolean isTaggedConstructed) {
+    public Tag getTag(boolean isTaggedConstructed) {
         boolean isConstructed = isImplicit ? isTaggedConstructed : true;
         TagClass tagClass = isAppSpecific ? TagClass.APPLICATION : TagClass.CONTEXT_SPECIFIC;
-        int flags = tagClass.getValue() | (isConstructed ? Asn1Type.CONSTRUCTED_FLAG : 0x00);
+        int flags = tagClass.getValue() | (isConstructed ? 0x20 : 0x00);
 
-        return flags;
+        return new Tag(flags, tagNo);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
index 4dc2c28..b12c67d 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/AbstractAsn1Type.java
@@ -19,7 +19,8 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
+import org.apache.kerby.asn1.UniversalTag;
 
 /**
  * The abstract ASN1 type for all the ASN1 types. It provides basic
@@ -32,43 +33,39 @@ public abstract class AbstractAsn1Type<T> extends Asn1Object {
     private T value;
 
     /**
-     * Default constructor, generally for decoding as a value container
-     * @param tagClass The tag class
-     * @param tagNo The tag number
+     * Default constructor.
+     * @param tag the tag
+     * @param value the value
      */
-    public AbstractAsn1Type(TagClass tagClass, int tagNo) {
-        this(tagClass, tagNo, null);
+    public AbstractAsn1Type(Tag tag, T value) {
+        super(tag);
+        this.value = value;
     }
 
     /**
-     * Default constructor, generally for decoding as a value container
-     * @param tagFlags The tag flags
-     * @param tagNo The tag number
+     * Default constructor.
+     * @param tag the tag
      */
-    public AbstractAsn1Type(int tagFlags, int tagNo) {
-        this(tagFlags, tagNo, null);
+    public AbstractAsn1Type(Tag tag) {
+        super(tag);
     }
 
     /**
-     * Constructor with a value, generally for encoding of the value
-     * @param tagFlags The tag flags
-     * @param tagNo The tag number
-     * @param value The value
+     * Default constructor with an universal tag.
+     * @param tag the tag
+     * @param value the value
      */
-    public AbstractAsn1Type(int tagFlags, int tagNo, T value) {
-        this(TagClass.fromTagFlags(tagFlags), tagNo, value);
-        setTagFlags(tagFlags);
+    public AbstractAsn1Type(UniversalTag tag, T value) {
+        super(tag);
+        this.value = value;
     }
 
     /**
-     * Constructor with a value, generally for encoding of the value
-     * @param tagClass The tag class
-     * @param tagNo The tag number
-     * @param value The value
+     * Default constructor with an universal tag.
+     * @param tag the tag
      */
-    public AbstractAsn1Type(TagClass tagClass, int tagNo, T value) {
-        super(tagClass, tagNo);
-        this.value = value;
+    public AbstractAsn1Type(UniversalTag tag) {
+        super(tag);
     }
 
     public T getValue() {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
index 73a82c7..0506edd 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
@@ -20,7 +20,6 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
@@ -36,7 +35,7 @@ public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
     private Asn1Type field;
 
     public Asn1Any() {
-        super(TagClass.UNIVERSAL, UniversalTag.ANY.getValue());
+        super(UniversalTag.ANY);
     }
 
     // For encoding phase.

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Choice.java
----------------------------------------------------------------------
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 3641070..a2a9504 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
@@ -21,7 +21,6 @@ package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.TaggingOption;
 import org.apache.kerby.asn1.UniversalTag;
 
@@ -34,7 +33,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
     private Asn1Type[] fields;
 
     public Asn1Choice(Asn1FieldInfo[] fieldInfos) {
-        super(TagClass.UNIVERSAL, UniversalTag.CHOICE.getValue());
+        super(UniversalTag.CHOICE);
         setValue(this);
         this.fieldInfos = fieldInfos.clone();
         this.fields = new Asn1Type[fieldInfos.length];
@@ -84,8 +83,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
                 }
             } else {
                 initField(i);
-                if (fields[i].tagFlags() == item.tagFlags()
-                        && fields[i].tagNo() == item.tagNo()) {
+                if (fields[i].tag().equals(item.tag())) {
                     foundPos = i;
                     break;
                 } else {
@@ -95,7 +93,7 @@ public class Asn1Choice extends AbstractAsn1Type<Asn1Type> {
         }
         if (foundPos == -1) {
             throw new RuntimeException("Unexpected item with (tagFlags, tagNo): ("
-                    + item.tagFlags() + ", " + item.tagNo() + ")");
+                    + item.tag() + ", " + item.tagNo() + ")");
         }
 
         if (!item.isFullyDecoded()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
index 54a2e9d..52c46c0 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Collection.java
@@ -20,7 +20,7 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
@@ -32,8 +32,9 @@ import java.util.List;
  * ASN1 complex type, may be better named.
  */
 public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
-    public Asn1Collection(TagClass tagClass, int tagNo) {
-        super(tagClass, tagNo);
+
+    public Asn1Collection(UniversalTag universalTag) {
+        super(universalTag);
         setValue(new ArrayList<Asn1Item>());
         usePrimitive(false);
     }
@@ -84,8 +85,12 @@ public class Asn1Collection extends AbstractAsn1Type<List<Asn1Item>> {
         }
     }
 
-    public static boolean isCollection(int tagNo) {
-        return isCollection(UniversalTag.fromValue(tagNo));
+    public static boolean isCollection(Tag tag) {
+        return isCollection(tag.universalTag());
+    }
+
+    public static boolean isCollection(int tag) {
+        return isCollection(new Tag(tag));
     }
 
     public static boolean isCollection(UniversalTag tagNo) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
index 76ed6f5..6d7f36b 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionOf.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
 import java.lang.reflect.ParameterizedType;
@@ -28,8 +28,8 @@ import java.util.List;
 
 public abstract class Asn1CollectionOf<T extends Asn1Type> extends Asn1Collection
 {
-    public Asn1CollectionOf(TagClass tagClass, int tagNo) {
-        super(tagClass, tagNo);
+    public Asn1CollectionOf(UniversalTag universalTag) {
+        super(universalTag);
     }
 
     public List<T> getElements() {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
----------------------------------------------------------------------
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 72278d3..fc45949 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
@@ -21,8 +21,8 @@ package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.TaggingOption;
+import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -34,8 +34,9 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
     private Asn1FieldInfo[] fieldInfos;
     private Asn1Type[] fields;
 
-    public Asn1CollectionType(int universalTagNo, Asn1FieldInfo[] fieldInfos) {
-        super(TagClass.UNIVERSAL, universalTagNo);
+    public Asn1CollectionType(UniversalTag universalTag, Asn1FieldInfo[] fieldInfos) {
+        super(universalTag);
+
         setValue(this);
         this.fieldInfos = fieldInfos.clone();
         this.fields = new Asn1Type[fieldInfos.length];
@@ -79,7 +80,7 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
         initFields();
 
         Asn1Collection coll = createCollection();
-        coll.decode(tagFlags(), tagNo(), content);
+        coll.decode(tag(), content);
 
         int lastPos = -1, foundPos = -1;
         for (Asn1Item item : coll.getValue()) {
@@ -90,15 +91,13 @@ public abstract class Asn1CollectionType extends AbstractAsn1Type<Asn1Collection
                         foundPos = i;
                         break;
                     }
-                } else if (fields[i].tagFlags() == item.tagFlags()
-                        && fields[i].tagNo() == item.tagNo()) {
+                } else if (fields[i].tag().equals(item.tag())) {
                     foundPos = i;
                     break;
                 }
             }
             if (foundPos == -1) {
-                throw new RuntimeException("Unexpected item with (tagFlags, tagNo): ("
-                        + item.tagFlags() + ", " + item.tagNo() + ")");
+                throw new RuntimeException("Unexpected item with tag: " + item.tag());
             }
 
             if (!item.isFullyDecoded()) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
index 74ef10a..a7924d8 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Item.java
@@ -21,6 +21,7 @@ package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1Factory;
 import org.apache.kerby.asn1.LimitedByteBuffer;
+import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
 
 import java.io.IOException;
@@ -42,11 +43,11 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
     private LimitedByteBuffer bodyContent;
 
     public Asn1Item(Asn1Type value) {
-        super(value.tagFlags(), value.tagNo(), value);
+        super(value.tag(), value);
     }
 
-    public Asn1Item(int tag, int tagNo, LimitedByteBuffer bodyContent) {
-        super(tag, tagNo);
+    public Asn1Item(Tag tag, LimitedByteBuffer bodyContent) {
+        super(tag);
         this.bodyContent = bodyContent;
     }
 
@@ -120,23 +121,7 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
 
     public void decodeValueWith(Asn1Type value) throws IOException {
         setValue(value);
-        ((AbstractAsn1Type<?>) value).decode(tagFlags(), tagNo(), bodyContent);
-    }
-
-    public void decodeValueAsImplicitTagged(int originalTag, int originalTagNo) throws IOException {
-        if (!isTagged()) {
-            throw new IllegalArgumentException("Attempting to decode non-tagged value using tagging way");
-        }
-        Asn1Item taggedValue = new Asn1Item(originalTag, originalTagNo, getBodyContent());
-        decodeValueWith(taggedValue);
-    }
-
-    public void decodeValueAsExplicitTagged() throws IOException {
-        if (!isTagged()) {
-            throw new IllegalArgumentException("Attempting to decode non-tagged value using tagging way");
-        }
-        Asn1Item taggedValue = decodeOne(getBodyContent());
-        decodeValueWith(taggedValue);
+        ((AbstractAsn1Type<?>) value).decode(tag(), bodyContent);
     }
 
     private void decodeValueWith(Asn1Item taggedValue) throws IOException {
@@ -152,7 +137,7 @@ public class Asn1Item extends AbstractAsn1Type<Asn1Type> {
         if (!isTagged()) {
             throw new IllegalArgumentException("Attempting to decode non-tagged value using tagging way");
         }
-        ((AbstractAsn1Type<?>) value).taggedDecode(tagFlags(), tagNo(), getBodyContent(), taggingOption);
+        ((AbstractAsn1Type<?>) value).taggedDecode(tag(), getBodyContent(), taggingOption);
         setValue(value);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Object.java
----------------------------------------------------------------------
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 95da847..aa9ebe2 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
@@ -20,8 +20,9 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
+import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -31,10 +32,8 @@ import java.nio.ByteBuffer;
  * encoding and decoding utilities.
  */
 public abstract class Asn1Object implements Asn1Type {
+    private final Tag tag;
 
-    private TagClass tagClass = TagClass.UNKNOWN;
-    private int tagNo = -1;
-    private int tagFlags = 0;
     private int encodingLen = -1;
 
     // encoding options
@@ -43,66 +42,50 @@ public abstract class Asn1Object implements Asn1Type {
     private boolean isDefinitiveLength = false;
 
     /**
-     * Constructor with a value, generally for encoding of the value
-     * @param tagFlags The tag flags
-     * @param tagNo The tag number
+     * Constructor with a tag
+     * @param tag The tag
      */
-    public Asn1Object(int tagFlags, int tagNo) {
-        this(TagClass.fromTagFlags(tagFlags), tagNo);
-        setTagFlags(tagFlags);
+    public Asn1Object(Tag tag) {
+        this.tag = new Tag(tag);
     }
 
     /**
-     * Constructor with a value, generally for encoding of the value
-     * @param tagClass The tag class
-     * @param tagNo The tag number
+     * Default constructor with an universal tag.
+     * @param tag the tag
      */
-    public Asn1Object(TagClass tagClass, int tagNo) {
-        this.tagClass = tagClass;
-        this.tagNo = tagNo;
-
-        this.tagFlags |= tagClass.getValue();
-    }
-
-    @Override
-    public TagClass tagClass() {
-        return tagClass;
-    }
-
-    protected void setTagClass(TagClass tagClass) {
-        this.tagClass = tagClass;
+    public Asn1Object(UniversalTag tag) {
+        this.tag = new Tag(tag);
     }
 
-    @Override
-    public int tagFlags() {
-        return tagFlags;
+    /**
+     * Constructor with a tag
+     * @param tag The tag
+     */
+    public Asn1Object(int tag) {
+        this.tag = new Tag(tag);
     }
 
     @Override
-    public int tagNo() {
-        return tagNo;
+    public Tag tag() {
+        return tag;
     }
 
-    protected void setTagFlags(int tagFlags) {
-        this.tagFlags = tagFlags & 0xe0;
+    protected int tagFlags() {
+        return tag().tagFlags();
     }
 
-    protected void setTagNo(int tagNo) {
-        this.tagNo = tagNo;
+    protected int tagNo() {
+        return tag().tagNo();
     }
 
     @Override
     public void usePrimitive(boolean isPrimitive) {
-        if (isPrimitive) {
-            tagFlags &= ~CONSTRUCTED_FLAG;
-        } else {
-            tagFlags |= CONSTRUCTED_FLAG;
-        }
+        tag.usePrimitive(isPrimitive);
     }
 
     @Override
     public boolean isPrimitive() {
-        return (tagFlags & CONSTRUCTED_FLAG) == 0;
+        return tag.isPrimitive();
     }
 
     @Override
@@ -165,7 +148,7 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public void encode(ByteBuffer buffer) {
-        encodeTag(buffer, tagFlags(), tagNo());
+        encodeTag(buffer, tag());
         encodeLength(buffer, encodingBodyLength());
         encodeBody(buffer);
     }
@@ -186,61 +169,50 @@ public abstract class Asn1Object implements Asn1Type {
     public int encodingLength() {
         if (encodingLen == -1) {
             int bodyLen = encodingBodyLength();
-            encodingLen = lengthOfTagLength(tagNo()) + lengthOfBodyLength(bodyLen) + bodyLen;
+            encodingLen = lengthOfTagLength(tagNo())
+                + lengthOfBodyLength(bodyLen) + bodyLen;
         }
         return encodingLen;
     }
 
-    public boolean isUniversal() {
-        return tagClass.isUniversal();
+    protected boolean isUniversal() {
+        return tag.isUniversal();
     }
 
-    public boolean isAppSpecific() {
-        return tagClass.isAppSpecific();
+    protected boolean isAppSpecific() {
+        return tag.isAppSpecific();
     }
 
-    public boolean isContextSpecific() {
-        return tagClass.isContextSpecific();
+    protected boolean isContextSpecific() {
+        return tag.isContextSpecific();
     }
 
-    public boolean isTagged() {
-        return tagClass.isTagged();
+    protected boolean isTagged() {
+        return tag.isTagged();
     }
 
     public boolean isSimple() {
-        return isUniversal() && Asn1Simple.isSimple(tagNo);
+        return Asn1Simple.isSimple(tag());
     }
 
     public boolean isCollection() {
-        return isUniversal() && Asn1Collection.isCollection(tagNo);
+        return Asn1Collection.isCollection(tag());
     }
 
     protected abstract int encodingBodyLength();
 
     protected void decode(LimitedByteBuffer content) throws IOException {
-        int tag = readTag(content);
-        int tagNo = readTagNo(content, tag);
-        int tmpTagFlags = tag & 0xe0;
+        Tag tmpTag = readTag(content);
         int length = readLength(content);
 
-        decode(tmpTagFlags, tagNo, new LimitedByteBuffer(content, length));
+        decode(tmpTag, new LimitedByteBuffer(content, length));
     }
 
-    public void decode(int tagFlags, int tagNo,
-                       LimitedByteBuffer content) throws IOException {
-        if (tagClass() != TagClass.UNKNOWN && tagClass()
-                != TagClass.fromTagFlags(tagFlags)) {
-            throw new IOException("Unexpected tagFlags " + tagFlags
-                    + ", expecting " + tagClass());
+    public void decode(Tag tag, LimitedByteBuffer content) throws IOException {
+        if (!tag().equals(tag)) {
+            throw new IOException("Unexpected tag " + tag
+                    + ", expecting " + tag());
         }
-        if (tagNo() != -1 && tagNo() != tagNo) {
-            throw new IOException("Unexpected tagNo " + tagNo + ", "
-                    + "expecting " + tagNo());
-        }
-
-        setTagClass(TagClass.fromTagFlags(tagFlags));
-        setTagFlags(tagFlags);
-        setTagNo(tagNo);
 
         decodeBody(content);
     }
@@ -265,8 +237,8 @@ public abstract class Asn1Object implements Asn1Type {
 
     @Override
     public void taggedEncode(ByteBuffer buffer, TaggingOption taggingOption) {
-        int taggingTagFlags = taggingOption.tagFlags(!isPrimitive());
-        encodeTag(buffer, taggingTagFlags, taggingOption.getTagNo());
+        Tag taggingTag = taggingOption.getTag(!isPrimitive());
+        encodeTag(buffer, taggingTag);
         int taggingBodyLen = taggingOption.isImplicit() ? encodingBodyLength()
                 : encodingLength();
         encodeLength(buffer, taggingBodyLen);
@@ -291,27 +263,20 @@ public abstract class Asn1Object implements Asn1Type {
 
     protected void taggedDecode(LimitedByteBuffer content,
                                 TaggingOption taggingOption) throws IOException {
-        int taggingTag = readTag(content);
-        int taggingTagNo = readTagNo(content, taggingTag);
+        Tag taggingTag = readTag(content);
         int taggingLength = readLength(content);
         LimitedByteBuffer newContent = new LimitedByteBuffer(content, taggingLength);
 
-        int tmpTagFlags = taggingTag & 0xe0;
-        taggedDecode(tmpTagFlags, taggingTagNo, newContent, taggingOption);
+        taggedDecode(taggingTag, newContent, taggingOption);
     }
 
-    protected void taggedDecode(int taggingTagFlags, int taggingTagNo,
-                                LimitedByteBuffer content,
+    protected void taggedDecode(Tag taggingTag, LimitedByteBuffer content,
                                 TaggingOption taggingOption) throws IOException {
-        int expectedTaggingTagFlags = taggingOption.tagFlags(!isPrimitive());
-        if (expectedTaggingTagFlags != taggingTagFlags) {
-            throw new IOException("Unexpected tag flags " + taggingTagFlags
+        Tag expectedTaggingTagFlags = taggingOption.getTag(!isPrimitive());
+        if (!expectedTaggingTagFlags.equals(taggingTag)) {
+            throw new IOException("Unexpected tag " + taggingTag
                     + ", expecting " + expectedTaggingTagFlags);
         }
-        if (taggingOption.getTagNo() != taggingTagNo) {
-            throw new IOException("Unexpected tagNo " + taggingTagNo + ", "
-                    + "expecting " + taggingOption.getTagNo());
-        }
 
         if (taggingOption.isImplicit()) {
             decodeBody(content);
@@ -321,8 +286,7 @@ public abstract class Asn1Object implements Asn1Type {
     }
 
     public static Asn1Item decodeOne(LimitedByteBuffer content) throws IOException {
-        int tag = readTag(content);
-        int tagNo = readTagNo(content, tag);
+        Tag tmpTag = readTag(content);
         int length = readLength(content);
         if (length < 0) {
             throw new IOException("Unexpected length");
@@ -330,7 +294,7 @@ public abstract class Asn1Object implements Asn1Type {
         LimitedByteBuffer valueContent = new LimitedByteBuffer(content, length);
         content.skip(length);
 
-        Asn1Item result = new Asn1Item(tag, tagNo, valueContent);
+        Asn1Item result = new Asn1Item(tmpTag, valueContent);
         if (result.isSimple()) {
             result.decodeValueAsSimple();
         }
@@ -338,8 +302,7 @@ public abstract class Asn1Object implements Asn1Type {
     }
 
     public static void skipOne(LimitedByteBuffer content) throws IOException {
-        int tag = readTag(content);
-        readTagNo(content, tag);
+        readTag(content);
         int length = readLength(content);
         if (length < 0) {
             throw new IOException("Unexpected length");
@@ -380,7 +343,10 @@ public abstract class Asn1Object implements Asn1Type {
         return length;
     }
 
-    public static void encodeTag(ByteBuffer buffer, int flags, int tagNo) {
+    public static void encodeTag(ByteBuffer buffer, Tag tag) {
+        int flags = tag.tagFlags();
+        int tagNo = tag.tagNo();
+
         if (tagNo < 31) {
             buffer.put((byte) (flags | tagNo));
         } else {
@@ -423,16 +389,22 @@ public abstract class Asn1Object implements Asn1Type {
         }
     }
 
-    public static int readTag(LimitedByteBuffer buffer) throws IOException {
-        int tag = buffer.readByte() & 0xff;
-        if (tag == 0) {
+    public static Tag readTag(LimitedByteBuffer buffer) throws IOException {
+        int tagFlags = readTagFlags(buffer);
+        int tagNo = readTagNo(buffer, tagFlags);
+        return new Tag(tagFlags, tagNo);
+    }
+
+    private static int readTagFlags(LimitedByteBuffer buffer) throws IOException {
+        int tagFlags = buffer.readByte() & 0xff;
+        if (tagFlags == 0) {
             throw new IOException("Bad tag 0 found");
         }
-        return tag;
+        return tagFlags;
     }
 
-    public static int readTagNo(LimitedByteBuffer buffer, int tag) throws IOException {
-        int tagNo = tag & 0x1f;
+    private static int readTagNo(LimitedByteBuffer buffer, int tagFlags) throws IOException {
+        int tagNo = tagFlags & 0x1f;
 
         if (tagNo == 0x1f) {
             tagNo = 0;

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Sequence.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Sequence.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Sequence.java
index 2e483d2..c5a7dfc 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Sequence.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Sequence.java
@@ -19,11 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.UniversalTag;
 
 public class Asn1Sequence extends Asn1Collection {
     public Asn1Sequence() {
-        super(TagClass.UNIVERSAL, UniversalTag.SEQUENCE.getValue());
+        super(UniversalTag.SEQUENCE);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceOf.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceOf.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceOf.java
index 5dc69e0..074a8b7 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceOf.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceOf.java
@@ -19,12 +19,11 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.UniversalTag;
 
 public class Asn1SequenceOf<T extends Asn1Type> extends Asn1CollectionOf<T> {
     public Asn1SequenceOf() {
-        super(TagClass.UNIVERSAL, UniversalTag.SEQUENCE_OF.getValue());
+        super(UniversalTag.SEQUENCE_OF);
     }
 
     public boolean isEmpty() {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
index 4733838..85d2763 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SequenceType.java
@@ -28,7 +28,7 @@ import org.apache.kerby.asn1.UniversalTag;
 public class Asn1SequenceType extends Asn1CollectionType {
 
     public Asn1SequenceType(Asn1FieldInfo[] tags) {
-        super(UniversalTag.SEQUENCE.getValue(), tags);
+        super(UniversalTag.SEQUENCE, tags);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Set.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Set.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Set.java
index 500c6f1..c2cded4 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Set.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Set.java
@@ -19,11 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.UniversalTag;
 
 public class Asn1Set extends Asn1Collection {
     public Asn1Set() {
-        super(TagClass.UNIVERSAL, UniversalTag.SET.getValue());
+        super(UniversalTag.SET);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetOf.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetOf.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetOf.java
index 2838538..a351eaf 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetOf.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetOf.java
@@ -19,11 +19,10 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
 import org.apache.kerby.asn1.UniversalTag;
 
 public class Asn1SetOf<T extends Asn1Type> extends Asn1CollectionOf<T> {
     public Asn1SetOf() {
-        super(TagClass.UNIVERSAL, UniversalTag.SET_OF.getValue());
+        super(UniversalTag.SET_OF);
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
index b320224..63b64cd 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1SetType.java
@@ -28,7 +28,7 @@ import org.apache.kerby.asn1.UniversalTag;
 public class Asn1SetType extends Asn1CollectionType {
 
     public Asn1SetType(Asn1FieldInfo[] tags) {
-        super(UniversalTag.SET.getValue(), tags);
+        super(UniversalTag.SET, tags);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
index deb2de8..2f15daf 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Simple.java
@@ -20,7 +20,7 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
@@ -42,11 +42,11 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
 
     /**
      * Constructor with a value, generally for encoding of the value
-     * @param tagNo The tag number
+     * @param universalTag The tag number
      * @param value The value
      */
-    public Asn1Simple(UniversalTag tagNo, T value) {
-        super(TagClass.UNIVERSAL, tagNo.getValue(), value);
+    public Asn1Simple(UniversalTag universalTag, T value) {
+        super(universalTag, value);
         usePrimitive(true);
     }
 
@@ -60,7 +60,7 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
 
     @Override
     public void encode(ByteBuffer buffer) {
-        encodeTag(buffer, tagFlags(), tagNo());
+        encodeTag(buffer, tag());
         int bodyLen = encodingBodyLength();
         encodeLength(buffer, bodyLen);
         if (bodyLen > 0) {
@@ -104,8 +104,12 @@ public abstract class Asn1Simple<T> extends AbstractAsn1Type<T> {
 
     protected void toBytes() { }
 
-    public static boolean isSimple(int tagNo) {
-        return isSimple(UniversalTag.fromValue(tagNo));
+    public static boolean isSimple(Tag tag) {
+        return isSimple(tag.universalTag());
+    }
+
+    public static boolean isSimple(int tag) {
+        return isSimple(new Tag(tag));
     }
 
     public static boolean isSimple(UniversalTag tagNo) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
index 91c6d19..49ceb4a 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1String.java
@@ -29,8 +29,8 @@ import java.util.ArrayList;
 import java.util.List;
 
 public abstract class Asn1String extends Asn1Simple<String> {
-    public Asn1String(UniversalTag tagNo) {
-        super(tagNo, null);
+    public Asn1String(UniversalTag universalTag) {
+        super(universalTag, null);
     }
 
     public Asn1String(UniversalTag tagNo, String value) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
index dd7d394..b808b3e 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Tagging.java
@@ -20,7 +20,7 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
 import java.lang.reflect.ParameterizedType;
@@ -33,14 +33,17 @@ public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
 
     public Asn1Tagging(int tagNo, T value,
                        boolean isAppSpecific, boolean isImplicit) {
-        super(isAppSpecific ? TagClass.APPLICATION : TagClass.CONTEXT_SPECIFIC,
-            tagNo, value);
+        super(makeTag(isAppSpecific, tagNo), value);
         if (value == null) {
             initValue();
         }
         useImplicit(isImplicit);
     }
 
+    private static Tag makeTag(boolean isAppSpecific, int tagNo) {
+        return isAppSpecific ? Tag.newAppTag(tagNo) : Tag.newCtxTag(tagNo);
+    }
+
     @Override
     public void useImplicit(boolean isImplicit) {
         super.useImplicit(isImplicit);
@@ -48,9 +51,9 @@ public class Asn1Tagging<T extends Asn1Type> extends AbstractAsn1Type<T> {
         if (!isImplicit) {
             //In effect, explicitly tagged types are structured types consisting
             // of one component, the underlying type.
-            super.usePrimitive(false);
+            usePrimitive(false);
         } else {
-            super.usePrimitive(getValue().isPrimitive());
+            usePrimitive(getValue().isPrimitive());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
index 271e795..4c1c538 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Type.java
@@ -19,7 +19,7 @@
  */
 package org.apache.kerby.asn1.type;
 
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.TaggingOption;
 
 import java.io.IOException;
@@ -30,12 +30,6 @@ import java.nio.ByteBuffer;
  */
 public interface Asn1Type {
     /**
-     * A mask to determinate if a Tag is CONSTRUCTED. The fifth bit should be
-     * set to 1 if the type is constructed (0010-0000).
-     */
-    int CONSTRUCTED_FLAG = 0x20;
-
-    /**
      * Encoding type
      */
     enum EncodingType {
@@ -46,21 +40,9 @@ public interface Asn1Type {
 
     /**
      *
-     * @return The tag class
-     */
-    TagClass tagClass();
-
-    /**
-     *
-     * @return The tag flags
-     */
-    int tagFlags();
-
-    /**
-     * Get tag number for the type
-     * @return tag number
+     * @return The tag
      */
-    int tagNo();
+    Tag tag();
 
     /**
      * Use primitive or constructed.

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
index bac51b0..90f95c1 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingCollection.java
@@ -21,7 +21,7 @@ package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.Asn1FieldInfo;
 import org.apache.kerby.asn1.LimitedByteBuffer;
-import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.Tag;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -36,19 +36,22 @@ public abstract class TaggingCollection extends AbstractAsn1Type<Asn1CollectionT
 
     public TaggingCollection(int taggingTagNo, Asn1FieldInfo[] tags,
                              boolean isAppSpecific, boolean isImplicit) {
-        super(isAppSpecific ? TagClass.APPLICATION : TagClass.CONTEXT_SPECIFIC,
-            taggingTagNo);
+        super(makeTag(isAppSpecific, taggingTagNo));
         this.tagged = createTaggedCollection(tags);
         setValue(tagged);
         this.tagging = new Asn1Tagging<Asn1CollectionType>(taggingTagNo,
             tagged, isAppSpecific, isImplicit);
     }
 
+    private static Tag makeTag(boolean isAppSpecific, int tagNo) {
+        return isAppSpecific ? Tag.newAppTag(tagNo) : Tag.newCtxTag(tagNo);
+    }
+
     protected abstract Asn1CollectionType createTaggedCollection(Asn1FieldInfo[] tags);
 
     @Override
-    public int tagFlags() {
-        return tagging.tagFlags();
+    public Tag tag() {
+        return tagging.tag();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
index 52158cb..e13d5f0 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/TaggingSet.java
@@ -22,7 +22,8 @@ package org.apache.kerby.asn1.type;
 import org.apache.kerby.asn1.Asn1FieldInfo;
 
 /**
- * For tagging a sequence type with tagNo, either application specific or context specific class
+ * For tagging a sequence type with tagNo, either application specific or
+ * context specific class
  */
 public class TaggingSet extends TaggingCollection {
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java b/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
index 3bd2117..3507bf0 100644
--- a/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
+++ b/kerby-kerb/kerb-core-test/src/test/java/org/apache/kerby/kerberos/kerb/codec/CodecTest.java
@@ -41,7 +41,6 @@ public class CodecTest {
         assertThat(restored).isNotNull();
         assertThat(restored.getCksumtype()).isEqualTo(mcs.getCksumtype());
         assertThat(mcs.getChecksum()).isEqualTo(restored.getChecksum());
-        assertThat(restored.tagNo()).isEqualTo(mcs.tagNo());
-        assertThat(restored.tagFlags()).isEqualTo(mcs.tagFlags());
+        assertThat(restored.tag()).isEqualTo(mcs.tag());
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/66fce42a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
index e592567..6db67de 100644
--- a/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
+++ b/kerby-kerb/kerb-core/src/main/java/org/apache/kerby/kerberos/kerb/KrbCodec.java
@@ -20,6 +20,7 @@
 package org.apache.kerby.kerberos.kerb;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
+import org.apache.kerby.asn1.Tag;
 import org.apache.kerby.asn1.type.Asn1Object;
 import org.apache.kerby.asn1.type.Asn1Type;
 import org.apache.kerby.kerberos.kerb.type.ap.ApReq;
@@ -65,14 +66,12 @@ public class KrbCodec {
 
     public static KrbMessage decodeMessage(ByteBuffer byteBuffer) throws IOException {
         LimitedByteBuffer limitedBuffer = new LimitedByteBuffer(byteBuffer);
-        int tag = Asn1Object.readTag(limitedBuffer);
-        int tagNo = Asn1Object.readTagNo(limitedBuffer, tag);
-        int tagFlags = tag & 0xe0;
+        Tag tag = Asn1Object.readTag(limitedBuffer);
         int length = Asn1Object.readLength(limitedBuffer);
         LimitedByteBuffer valueBuffer = new LimitedByteBuffer(limitedBuffer, length);
 
         KrbMessage msg;
-        KrbMessageType msgType = KrbMessageType.fromValue(tagNo);
+        KrbMessageType msgType = KrbMessageType.fromValue(tag.tagNo());
         if (msgType == KrbMessageType.TGS_REQ) {
             msg = new TgsReq();
         } else if (msgType == KrbMessageType.AS_REP) {
@@ -90,7 +89,7 @@ public class KrbCodec {
         } else {
             throw new IOException("To be supported krb message type with tag: " + tag);
         }
-        msg.decode(tagFlags, tagNo, valueBuffer);
+        msg.decode(tag, valueBuffer);
 
         return msg;
     }