You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/12/27 21:35:50 UTC

directory-kerby git commit: PKINIT. Fixed a decoding issue caused by previous commit

Repository: directory-kerby
Updated Branches:
  refs/heads/master 386592e65 -> 8e2febd1a


PKINIT. Fixed a decoding issue caused by previous commit


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

Branch: refs/heads/master
Commit: 8e2febd1a50d4828983c48e373600097cc23cebb
Parents: 386592e
Author: Kai Zheng <ka...@intel.com>
Authored: Mon Dec 28 04:35:00 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Mon Dec 28 04:35:00 2015 +0800

----------------------------------------------------------------------
 .../kerb/preauth/pkinit/PkinitCrypto.java       |  2 +-
 .../java/org/apache/kerby/util/HexUtil.java     | 47 ++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/8e2febd1/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/PkinitCrypto.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/PkinitCrypto.java b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/PkinitCrypto.java
index 015527c..262f84c 100644
--- a/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/PkinitCrypto.java
+++ b/kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/preauth/pkinit/PkinitCrypto.java
@@ -338,7 +338,7 @@ public class PkinitCrypto {
     public static Asn1ObjectIdentifier createOid(String content) throws KrbException {
         Asn1ObjectIdentifier oid = new Asn1ObjectIdentifier();
         oid.useDER();
-        KrbCodec.decode(HexUtil.hex2bytes(content), oid);
+        KrbCodec.decode(HexUtil.hex2bytesFriendly(content), oid);
         return oid;
     }
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/8e2febd1/kerby-util/src/main/java/org/apache/kerby/util/HexUtil.java
----------------------------------------------------------------------
diff --git a/kerby-util/src/main/java/org/apache/kerby/util/HexUtil.java b/kerby-util/src/main/java/org/apache/kerby/util/HexUtil.java
index 93f6dfd..f682f03 100644
--- a/kerby-util/src/main/java/org/apache/kerby/util/HexUtil.java
+++ b/kerby-util/src/main/java/org/apache/kerby/util/HexUtil.java
@@ -26,6 +26,53 @@ public final class HexUtil {
     private 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