+++ /dev/null
-/*******************************************************************************\r
- * ============LICENSE_START====================================================\r
- * * org.onap.aaf\r
- * * ===========================================================================\r
- * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
- * * ===========================================================================\r
- * * Licensed under the Apache License, Version 2.0 (the "License");\r
- * * you may not use this file except in compliance with the License.\r
- * * You may obtain a copy of the License at\r
- * * \r
- * * http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
- * * Unless required by applicable law or agreed to in writing, software\r
- * * distributed under the License is distributed on an "AS IS" BASIS,\r
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * * See the License for the specific language governing permissions and\r
- * * limitations under the License.\r
- * * ============LICENSE_END====================================================\r
- * *\r
- * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
- * *\r
- ******************************************************************************/\r
-package org.onap.aaf.cadi;\r
-\r
-import java.nio.ByteBuffer;\r
-import java.security.MessageDigest;\r
-import java.security.NoSuchAlgorithmException;\r
-\r
-public class Hash {\r
- private static char hexDigit[] = "0123456789abcdef".toCharArray();\r
- \r
-/////////////////////////////////\r
-// MD5\r
-/////////////////////////////////\r
- /**\r
- * Encrypt MD5 from Byte Array to Byte Array\r
- * @param input\r
- * @return\r
- * @throws NoSuchAlgorithmException\r
- */\r
- public static byte[] encryptMD5 (byte[] input) throws NoSuchAlgorithmException {\r
- MessageDigest md = MessageDigest.getInstance("MD5");\r
- md.update(input); \r
- return md.digest();\r
- }\r
-\r
- /**\r
- * Encrypt MD5 from Byte Array to Byte Array\r
- * @param input\r
- * @return\r
- * @throws NoSuchAlgorithmException\r
- */\r
- public static byte[] encryptMD5 (byte[] input, int offset, int length) throws NoSuchAlgorithmException {\r
- MessageDigest md = MessageDigest.getInstance("MD5");\r
- md.update(input,offset,length); \r
- return md.digest();\r
- }\r
-\r
-\r
-\r
- /**\r
- * Convenience Function: Encrypt MD5 from String to String Hex representation \r
- * \r
- * @param input\r
- * @return\r
- * @throws NoSuchAlgorithmException\r
- */\r
- public static String encryptMD5asStringHex(String input) throws NoSuchAlgorithmException {\r
- byte[] output = encryptMD5(input.getBytes());\r
- StringBuilder sb = new StringBuilder("0x");\r
- for (byte b : output) {\r
- sb.append(hexDigit[(b >> 4) & 0x0f]);\r
- sb.append(hexDigit[b & 0x0f]);\r
- }\r
- return sb.toString();\r
- }\r
-\r
-/////////////////////////////////\r
-// SHA256\r
-/////////////////////////////////\r
- /**\r
- * SHA256 Hashing\r
- */\r
- public static byte[] hashSHA256(byte[] input) throws NoSuchAlgorithmException {\r
- MessageDigest md = MessageDigest.getInstance("SHA-256");\r
- md.update(input); \r
- return md.digest();\r
- }\r
-\r
- /**\r
- * SHA256 Hashing\r
- */\r
- public static byte[] hashSHA256(byte[] input, int offset, int length) throws NoSuchAlgorithmException {\r
- MessageDigest md = MessageDigest.getInstance("SHA-256");\r
- md.update(input,offset,length); \r
- return md.digest();\r
- }\r
- \r
- /**\r
- * Convenience Function: Hash from String to String Hex representation\r
- * \r
- * @param input\r
- * @return\r
- * @throws NoSuchAlgorithmException\r
- */\r
- public static String hashSHA256asStringHex(String input) throws NoSuchAlgorithmException {\r
- byte[] output = hashSHA256(input.getBytes());\r
- StringBuilder sb = new StringBuilder("0x");\r
- for (byte b : output) {\r
- sb.append(hexDigit[(b >> 4) & 0x0f]);\r
- sb.append(hexDigit[b & 0x0f]);\r
- }\r
- return sb.toString();\r
- }\r
-\r
- /**\r
- * Convenience Function: Hash from String to String Hex representation\r
- * \r
- * @param input\r
- * @return\r
- * @throws NoSuchAlgorithmException\r
- */\r
- public static String hashSHA256asStringHex(String input, int salt) throws NoSuchAlgorithmException {\r
- byte[] in = input.getBytes();\r
- ByteBuffer bb = ByteBuffer.allocate(Integer.SIZE + in.length);\r
- bb.putInt(salt);\r
- bb.put(input.getBytes());\r
- byte[] output = Hash.hashSHA256(bb.array());\r
- StringBuilder sb = new StringBuilder("0x");\r
- for (byte b : output) {\r
- sb.append(hexDigit[(b >> 4) & 0x0f]);\r
- sb.append(hexDigit[b & 0x0f]);\r
- }\r
- return sb.toString();\r
- }\r
- \r
- /**\r
- * Compare two byte arrays for equivalency\r
- * @param ba1\r
- * @param ba2\r
- * @return\r
- */\r
- public static boolean isEqual(byte ba1[], byte ba2[]) {\r
- if(ba1.length!=ba2.length)return false;\r
- for(int i = 0;i<ba1.length; ++i) {\r
- if(ba1[i]!=ba2[i])return false;\r
- }\r
- return true;\r
- }\r
-\r
- public static int compareTo(byte[] a, byte[] b) {\r
- int end = Math.min(a.length, b.length);\r
- int compare = 0;\r
- for(int i=0;compare == 0 && i<end;++i) {\r
- compare = a[i]-b[i];\r
- }\r
- if(compare==0)compare=a.length-b.length;\r
- return compare;\r
- }\r
- \r
- public static String toHex(byte[] ba) {\r
- StringBuilder sb = new StringBuilder("0x");\r
- for (byte b : ba) {\r
- sb.append(hexDigit[(b >> 4) & 0x0f]);\r
- sb.append(hexDigit[b & 0x0f]);\r
- }\r
- return sb.toString();\r
- }\r
- \r
- public static byte[] fromHex(String s) throws CadiException{\r
- if(!s.startsWith("0x")) {\r
- throw new CadiException("HexString must start with \"0x\"");\r
- }\r
- boolean high = true;\r
- int c;\r
- byte b;\r
- byte[] ba = new byte[(s.length()-2)/2];\r
- int idx;\r
- for(int i=2;i<s.length();++i) {\r
- c = s.charAt(i);\r
- if(c>=0x30 && c<=0x39) {\r
- b=(byte)(c-0x30);\r
- } else if(c>=0x61 && c<=0x66) {\r
- b=(byte)(c-0x57); // account for "A"\r
- } else if(c>=0x41 && c<=0x46) {\r
- b=(byte)(c-0x37);\r
- } else {\r
- throw new CadiException("Invalid char '" + c + "' in HexString");\r
- }\r
- idx = (i-2)/2;\r
- if(high) {\r
- ba[idx]=(byte)(b<<4);\r
- high = false;\r
- } else {\r
- ba[idx]|=b;\r
- high = true;\r
- }\r
- }\r
- return ba;\r
- }\r
-\r
-}\r