Android Open Source - Munin-for-Android Digest Utils






From Project

Back to project page Munin-for-Android.

License

The source code is released under:

GNU General Public License

If you think the Android project Munin-for-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.chteuchteu.munin.hlpr;
//  w ww .j a  v  a 2s .  co  m
import com.chteuchteu.munin.obj.MuninMaster;
import com.chteuchteu.munin.obj.MuninServer.AuthType;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class DigestUtils {
  private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
  
  public static String getDigestAuthHeader(MuninMaster master, String url) {
    if (master.getAuthType() == AuthType.DIGEST) {
      // WWW-Authenticate   Digest realm="munin", nonce="39r1cMPqBAA=57afd1487ef532bfe119d40278a642533f25964e", algorithm=MD5, qop="auth"
      String userName = master.getAuthLogin(),
        password = master.getAuthPassword(),
        realmName,
        nonce,
        algorithm = "MD5",
        opaque,
        qop = "auth",
        nc = "00000001",
        cnonce,
        uri = url,
        methodName = "GET";
      
      cnonce = DigestUtils.newCnonce();
      
      // Parse header
      realmName = DigestUtils.match(master.getAuthString(), "realm");
      nonce = DigestUtils.match(master.getAuthString(), "nonce");
      opaque = DigestUtils.match(master.getAuthString(), "opaque");
      qop = DigestUtils.match(master.getAuthString(), "qop");
      
      String a1 = DigestUtils.md5Hex(userName + ":" + realmName + ":" + password);
      String a2 = DigestUtils.md5Hex(methodName + ":" + uri);
      String responseSeed = a1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + a2;
      String response = DigestUtils.md5Hex(responseSeed);
      
      String header = "Digest ";
      header += DigestUtils.formatField("username", userName, false);
      header += DigestUtils.formatField("realm", realmName, false);
      header += DigestUtils.formatField("nonce", nonce, false);
      if (!opaque.equals(""))
        header += DigestUtils.formatField("opaque", opaque, false);
      header += DigestUtils.formatField("uri", uri, false);
      header += DigestUtils.formatField("response", response, false);
      header += DigestUtils.formatField("cnonce", cnonce, false);
      header += DigestUtils.formatField("nc", nc, false);
      if (!qop.equals(""))
        header += DigestUtils.formatField("qop", qop, false);
      header += DigestUtils.formatField("charset", "utf-8", false);
      header += DigestUtils.formatField("algorithm", algorithm, true);
      
      return header;
    }
    
    return "";
  }
  
  private static String match(String headerLine, String token) {
    if (headerLine == null)
      return "";
    
    int match = headerLine.indexOf(token);
    if (match <= 0) return "";
    
    // = to skip
    match += token.length() + 1;
    int traillingComa = headerLine.indexOf(",", match);
    String value = headerLine.substring(match, traillingComa > 0 ? traillingComa : headerLine.length());
    value = value.endsWith("\"") ? value.substring(0, value.length() - 1) : value;
    return value.startsWith("\"") ? value.substring(1) : value;
  }
  
  private static String newCnonce() {
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      byte[] b = md.digest(String.valueOf(System.currentTimeMillis()).getBytes("ISO-8859-1"));
      return toHexString(b);
    } catch (Exception e) {
      return "";
    }
  }
  
  private static String toHexString(byte[] data) {
    StringBuilder buffer = new StringBuilder();
    for (int i = 0; i < data.length; i++) {
      buffer.append(Integer.toHexString((data[i] & 0xf0) >>> 4));
      buffer.append(Integer.toHexString(data[i] & 0x0f));
    }
    return buffer.toString();
  }
  
  private static String formatField(String f, String v, boolean last) {
    // f="v",
    String s = "";
    s = s + f + "=\"" + v + "\"";
    if (!last)
      s += ", ";
    return s;
  }
  
  private static MessageDigest getDigest(String algorithm) {
    try {
      return MessageDigest.getInstance(algorithm);
    } catch (NoSuchAlgorithmException e) {
      throw new RuntimeException(e.getMessage());
    }
  }
  
  private static String encodeHex(byte[] data) {
    int l = data.length;
    char[] out = new char[l << 1];
    for (int i = 0, j = 0; i < l; i++) {
      out[j++] = HEX_DIGITS[(0xF0 & data[i]) >>> 4];
      out[j++] = HEX_DIGITS[0x0F & data[i]];
    }
    return new String(out);
  }
  
  private static byte[] md5(byte[] data) {
    return getDigest("MD5").digest(data);
  }
  
  private static String md5Hex(String data) {
    return encodeHex(md5(utf8Bytes(data)));
  }
  
  private static byte[] utf8Bytes(String data) {
    try {
      return data.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }
  }
}




Java Source Code List

com.chteuchteu.munin.BootReceiver.java
com.chteuchteu.munin.CustomSSLFactory.java
com.chteuchteu.munin.MuninFoo.java
com.chteuchteu.munin.Service_Notifications.java
com.chteuchteu.munin.adptr.Adapter_ExpandableListView.java
com.chteuchteu.munin.adptr.Adapter_GraphView.java
com.chteuchteu.munin.adptr.Adapter_IconList.java
com.chteuchteu.munin.adptr.Adapter_SeparatedList.java
com.chteuchteu.munin.exc.ImportExportWebserviceException.java
com.chteuchteu.munin.exc.NullMuninFooException.java
com.chteuchteu.munin.exc.TrialExpirationDateReached.java
com.chteuchteu.munin.hlpr.BillingService.java
com.chteuchteu.munin.hlpr.DatabaseHelper.java
com.chteuchteu.munin.hlpr.DigestUtils.java
com.chteuchteu.munin.hlpr.DocumentationHelper.java
com.chteuchteu.munin.hlpr.DrawerHelper.java
com.chteuchteu.munin.hlpr.DynazoomHelper.java
com.chteuchteu.munin.hlpr.EncryptionHelper.java
com.chteuchteu.munin.hlpr.GridDownloadHelper.java
com.chteuchteu.munin.hlpr.I18nHelper.java
com.chteuchteu.munin.hlpr.ImportExportHelper.java
com.chteuchteu.munin.hlpr.JSONHelper.java
com.chteuchteu.munin.hlpr.MediaScannerUtil.java
com.chteuchteu.munin.hlpr.NetHelper.java
com.chteuchteu.munin.hlpr.SQLite.java
com.chteuchteu.munin.hlpr.Util.java
com.chteuchteu.munin.obj.AlertsWidget.java
com.chteuchteu.munin.obj.GraphWidget.java
com.chteuchteu.munin.obj.GridItem.java
com.chteuchteu.munin.obj.Grid.java
com.chteuchteu.munin.obj.HTTPResponse_Bitmap.java
com.chteuchteu.munin.obj.HTTPResponse.java
com.chteuchteu.munin.obj.Label.java
com.chteuchteu.munin.obj.MuninMaster.java
com.chteuchteu.munin.obj.MuninPlugin.java
com.chteuchteu.munin.obj.MuninServer.java
com.chteuchteu.munin.obj.SearchResult.java
com.chteuchteu.munin.ui.Activity_About.java
com.chteuchteu.munin.ui.Activity_AlertsPluginSelection.java
com.chteuchteu.munin.ui.Activity_Alerts.java
com.chteuchteu.munin.ui.Activity_GoPremium.java
com.chteuchteu.munin.ui.Activity_GraphView.java
com.chteuchteu.munin.ui.Activity_Grid.java
com.chteuchteu.munin.ui.Activity_Grids.java
com.chteuchteu.munin.ui.Activity_Label.java
com.chteuchteu.munin.ui.Activity_Labels.java
com.chteuchteu.munin.ui.Activity_Main.java
com.chteuchteu.munin.ui.Activity_Notifications.java
com.chteuchteu.munin.ui.Activity_Plugins.java
com.chteuchteu.munin.ui.Activity_Server.java
com.chteuchteu.munin.ui.Activity_ServersEdit.java
com.chteuchteu.munin.ui.Activity_Servers.java
com.chteuchteu.munin.ui.Activity_Settings.java
com.chteuchteu.munin.ui.HackyDrawerLayout.java
com.chteuchteu.munin.ui.MuninActivity.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_Configure.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_ViewsFactory.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_WidgetProvider.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_WidgetService.java
com.chteuchteu.munin.wdget.Widget_GraphWidget_Configure.java
com.chteuchteu.munin.wdget.Widget_GraphWidget_WidgetProvider.java
com.mobeta.android.dslv.DragSortController.java
com.mobeta.android.dslv.DragSortCursorAdapter.java
com.mobeta.android.dslv.DragSortItemViewCheckable.java
com.mobeta.android.dslv.DragSortItemView.java
com.mobeta.android.dslv.DragSortListView.java
com.mobeta.android.dslv.ResourceDragSortCursorAdapter.java
com.mobeta.android.dslv.SimpleDragSortCursorAdapter.java
com.mobeta.android.dslv.SimpleFloatViewManager.java
org.taptwo.android.widget.CircleFlowIndicator.java
org.taptwo.android.widget.FlowIndicator.java
org.taptwo.android.widget.TitleFlowIndicator.java
org.taptwo.android.widget.TitleProvider.java
org.taptwo.android.widget.ViewFlow.java
uk.co.senab.photoview.Compat.java
uk.co.senab.photoview.IPhotoView.java
uk.co.senab.photoview.PhotoViewAttacher.java
uk.co.senab.photoview.PhotoView.java
uk.co.senab.photoview.SDK16.java
uk.co.senab.photoview.ScrollerProxy.java
uk.co.senab.photoview.VersionedGestureDetector.java