changed to unmaintained
[aaf/authz.git] / cadi / core / src / main / java / org / onap / aaf / cadi / Hash.java
index acd4501..3827aed 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed 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.
@@ -25,9 +25,15 @@ import java.nio.ByteBuffer;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
+/**
+ * 
+ * 
+ * @author Jonathan
+ *
+ */
 public class Hash {
     private static char hexDigit[] = "0123456789abcdef".toCharArray();
-    
+
 /////////////////////////////////
 // MD5
 /////////////////////////////////
@@ -38,9 +44,9 @@ public class Hash {
      * @throws NoSuchAlgorithmException
      */
     public static byte[] hashMD5 (byte[] input) throws NoSuchAlgorithmException {
-        // Note: Protect against Multi-thread issues with new MessageDigest 
+        // Note: Protect against Multi-thread issues with new MessageDigest
         MessageDigest md = MessageDigest.getInstance("MD5");
-        md.update(input); 
+        md.update(input);
         return md.digest();
     }
 
@@ -51,17 +57,17 @@ public class Hash {
      * @throws NoSuchAlgorithmException
      */
     public static byte[] hashMD5 (byte[] input, int offset, int length) throws NoSuchAlgorithmException {
-        // Note: Protect against Multi-thread issues with new MessageDigest 
+        // Note: Protect against Multi-thread issues with new MessageDigest
         MessageDigest md = MessageDigest.getInstance("MD5");
-        md.update(input,offset,length); 
+        md.update(input,offset,length);
         return md.digest();
     }
 
 
 
     /**
-     * Convenience Function: Encrypt MD5 from String to String Hex representation 
-     * 
+     * Convenience Function: Encrypt MD5 from String to String Hex representation
+     *
      * @param input
      * @return
      * @throws NoSuchAlgorithmException
@@ -83,9 +89,9 @@ public class Hash {
      * SHA256 Hashing
      */
     public static byte[] hashSHA256(byte[] input) throws NoSuchAlgorithmException {
-        // Note: Protect against Multi-thread issues with new MessageDigest 
+        // Note: Protect against Multi-thread issues with new MessageDigest
         MessageDigest md = MessageDigest.getInstance("SHA-256");
-        md.update(input); 
+        md.update(input);
         return md.digest();
     }
 
@@ -93,15 +99,15 @@ public class Hash {
      * SHA256 Hashing
      */
     public static byte[] hashSHA256(byte[] input, int offset, int length) throws NoSuchAlgorithmException {
-        // Note: Protect against Multi-thread issues with new MessageDigest 
+        // Note: Protect against Multi-thread issues with new MessageDigest
         MessageDigest md = MessageDigest.getInstance("SHA-256");
-        md.update(input,offset,length); 
+        md.update(input,offset,length);
         return md.digest();
     }
-    
+
     /**
      * Convenience Function: Hash from String to String Hex representation
-     * 
+     *
      * @param input
      * @return
      * @throws NoSuchAlgorithmException
@@ -112,7 +118,7 @@ public class Hash {
 
     /**
      * Convenience Function: Hash from String to String Hex representation
-     * 
+     *
      * @param input
      * @return
      * @throws NoSuchAlgorithmException
@@ -124,7 +130,7 @@ public class Hash {
         bb.put(input.getBytes());
         return toHex(Hash.hashSHA256(bb.array()));
     }
-    
+
     /**
      * Compare two byte arrays for equivalency
      * @param ba1
@@ -132,9 +138,9 @@ public class Hash {
      * @return
      */
     public static boolean isEqual(byte ba1[], byte ba2[]) {
-        if(ba1.length!=ba2.length)return false;
-        for(int i = 0;i<ba1.length; ++i) {
-            if(ba1[i]!=ba2[i])return false;
+        if (ba1.length!=ba2.length)return false;
+        for (int i = 0;i<ba1.length; ++i) {
+            if (ba1[i]!=ba2[i])return false;
         }
         return true;
     }
@@ -142,13 +148,17 @@ public class Hash {
     public static int compareTo(byte[] a, byte[] b) {
         int end = Math.min(a.length, b.length);
         int compare = 0;
-        for(int i=0;compare == 0 && i<end;++i) {
+        for (int i=0;compare == 0 && i<end;++i) {
             compare = a[i]-b[i];
         }
-        if(compare==0)compare=a.length-b.length;
+        if (compare==0)compare=a.length-b.length;
         return compare;
     }
 
+    /**
+     * @param ba
+     * @return
+     */
     public static String toHexNo0x(byte[] ba) {
         StringBuilder sb = new StringBuilder();
          for (byte b : ba) {
@@ -158,6 +168,10 @@ public class Hash {
          return sb.toString();
     }
 
+    /**
+     * @param ba
+     * @return
+     */
     public static String toHex(byte[] ba) {
         StringBuilder sb = new StringBuilder("0x");
          for (byte b : ba) {
@@ -166,7 +180,7 @@ public class Hash {
          }
          return sb.toString();
     }
-    
+
     public static String toHex(byte[] ba, int start, int length) {
         StringBuilder sb = new StringBuilder("0x");
          for (int i=start;i<length;++i) {
@@ -176,29 +190,32 @@ public class Hash {
          return sb.toString();
     }
 
-    
-    public static byte[] fromHex(String s)  throws CadiException{
-        if(!s.startsWith("0x")) {
-            throw new CadiException("HexString must start with \"0x\"");
-        }
-        boolean high = true;
-        int c;
+
+    public static byte[] fromHex(String s) {
+       if(!s.startsWith("0x")) {
+               return fromHexNo0x(s);
+       }
         byte b;
-        byte[] ba = new byte[(s.length()-2)/2];
+        int c;
+        byte[] ba;
+        int extra = s.length()%2; // odd requires extra
+        ba = new byte[(s.length()-2)/2 + extra];
+        boolean high = extra==0;
+        
         int idx;
-        for(int i=2;i<s.length();++i) {
+        for (int i=2;i<s.length();++i) {
             c = s.charAt(i);
-            if(c>=0x30 && c<=0x39) {
+            if (c>=0x30 && c<=0x39) {
                 b=(byte)(c-0x30);
-            } else if(c>=0x61 && c<=0x66) {
+            } else if (c>=0x61 && c<=0x66) {
                 b=(byte)(c-0x57);  // account for "A"
-            } else if(c>=0x41 && c<=0x46) {
+            } else if (c>=0x41 && c<=0x46) {
                 b=(byte)(c-0x37);
             } else {
-                throw new CadiException("Invalid char '" + c + "' in HexString");
+                return null;
             }
-            idx = (i-2)/2;
-            if(high) {
+            idx = (i-2+extra)/2;
+            if (high) {
                 ba[idx]=(byte)(b<<4);
                 high = false;
             } else {
@@ -208,43 +225,36 @@ public class Hash {
         }
         return ba;
     }
-
+    
     /**
      * Does not expect to start with "0x"
      * if Any Character doesn't match, it returns null;
-     * 
+     *
      * @param s
      * @return
      */
     public static byte[] fromHexNo0x(String s) {
-        int c;
         byte b;
+        int c;
         byte[] ba;
-        boolean high;
-        int start;
-        if(s.length()%2==0) {
-            ba = new byte[s.length()/2];
-            high=true;
-            start=0;
-        } else {
-            ba = new byte[(s.length()/2)+1];
-            high = false;
-            start=1;
-        }
+        int extra = s.length()%2; // odd requires extra byte to store
+        ba = new byte[(s.length())/2 + extra];
+        boolean high = extra==0;
+        
         int idx;
-        for(int i=start;i<s.length();++i) {
-            c = s.charAt((i-start));
-            if(c>=0x30 && c<=0x39) {
+        for (int i=0;i<s.length();++i) {
+            c = s.charAt(i);
+            if (c>=0x30 && c<=0x39) {
                 b=(byte)(c-0x30);
-            } else if(c>=0x61 && c<=0x66) {
+            } else if (c>=0x61 && c<=0x66) {
                 b=(byte)(c-0x57);  // account for "A"
-            } else if(c>=0x41 && c<=0x46) {
+            } else if (c>=0x41 && c<=0x46) {
                 b=(byte)(c-0x37);
             } else {
                 return null;
             }
-            idx = i/2;
-            if(high) {
+            idx = (i+extra)/2;
+            if (high) {
                 ba[idx]=(byte)(b<<4);
                 high = false;
             } else {
@@ -254,5 +264,4 @@ public class Hash {
         }
         return ba;
     }
-
 }