Subversion Repositories Code-Repo

Rev

Blame | Last modification | View Log | RSS feed

package org.vt.ece4564.latmb;

import java.security.MessageDigest;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class SecurityUtil {

        private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

        
        private static String convertToHex(byte[] data) {
                StringBuffer buf = new StringBuffer();
                for (int i = 0; i < data.length; i++) {
                        int halfbyte = (data[i] >>> 4) & 0x0F;
                        int two_halfs = 0;
                        do {
                                if ((0 <= halfbyte) && (halfbyte <= 9))
                                        buf.append((char) ('0' + halfbyte));
                                else
                                        buf.append((char) ('a' + (halfbyte - 10)));
                                halfbyte = data[i] & 0x0F;
                        } while (two_halfs++ < 1);
                }
                return buf.toString();
        }

        public static String getSha1Hash(String text) {
                try {
                        MessageDigest md;
                        md = MessageDigest.getInstance("SHA-1");
                        byte[] sha1hash = new byte[40];
                        md.update(text.getBytes("iso-8859-1"), 0, text.length());
                        sha1hash = md.digest();
                        return convertToHex(sha1hash);
                } catch (Exception e) {
                }

                return null;
        }

        public static String calculateRFC2104HMAC(String data, String key)
                         {
                try {

                        // get an hmac_sha1 key from the raw key bytes
                        SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(),
                                        HMAC_SHA1_ALGORITHM);

                        // get an hmac_sha1 Mac instance and initialize with the signing key
                        Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
                        mac.init(signingKey);

                        // compute the hmac on input data bytes
                        byte[] rawHmac = mac.doFinal(data.getBytes());

                        String result = "";
                        for (byte b : rawHmac) {
                            result += String.format("%02x", b);
                        }
                        
                        return result;

                } catch (Exception e) {
                        throw new RuntimeException("Failed to generate HMAC : "
                                        + e.getMessage());
                }
        }

}