public static final byte[] parseHexString(String hex)
   {
      if (hex.length() % 2 != 0)
      {
         throw new IllegalArgumentException("Invalid hex string");
      }

      byte[] bytes = new byte[hex.length() / 2];
      for (int byteIndex = 0; byteIndex < bytes.length; byteIndex++)
      {
         int stringIndex = byteIndex * 2;
         int b = parseHexDigit(hex.charAt(stringIndex)) << 4;
         b += parseHexDigit(hex.charAt(stringIndex + 1));
         bytes[byteIndex] = (byte) b;
      }

      return bytes;
   }