package org.apereo.cas.util;
import org.apache.commons.codec.digest.MessageDigestAlgorithms;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
/**
* This is {@link DigestUtils}
* that encapsulates common compression calls and operations
* in one spot.
*
* @author Timur Duehr timur.duehr@nccgroup.trust
* @since 5.0.0
*/
public final class DigestUtils {
private DigestUtils() {
}
/**
* Computes hex encoded SHA512 digest.
*
* @param data data to be hashed
* @return sha-512 hash
*/
public static String sha512(final String data) {
return digest(MessageDigestAlgorithms.SHA_512, data.getBytes(StandardCharsets.UTF_8));
}
/**
* Computes hex encoded SHA256 digest.
*
* @param data data to be hashed
* @return sha-256 hash
*/
public static String sha256(final String data) {
return digest(MessageDigestAlgorithms.SHA_256, data.getBytes(StandardCharsets.UTF_8));
}
/**
* Computes hex encoded SHA digest.
*
* @param data data to be hashed
* @return sha hash
*/
public static String sha(final String data) {
return digest(MessageDigestAlgorithms.SHA_1, data);
}
/**
* Computes SHA digest.
*
* @param data data to be hashed
* @return sha hash
*/
public static byte[] sha(final byte[] data) {
return rawDigest(MessageDigestAlgorithms.SHA_1, data);
}
/**
* Computes hex encoded digest.
*
* @param alg Digest algorithm to use
* @param data data to be hashed
* @return hex encoded hash
*/
public static String digest(final String alg, final String data) {
return digest(alg, data.getBytes(StandardCharsets.UTF_8));
}
/**
* Computes hex encoded digest.
*
* @param alg Digest algorithm to use
* @param data data to be hashed
* @return hex encoded hash
*/
public static String digest(final String alg, final byte[] data) {
return EncodingUtils.hexEncode(rawDigest(alg, data));
}
/**
* Computes digest.
*
* @param alg Digest algorithm to use
* @param data data to be hashed
* @return hash
*/
public static byte[] rawDigest(final String alg, final byte[] data) {
try {
final MessageDigest digest = MessageDigest.getInstance(alg);
digest.reset();
return digest.digest(data);
} catch (final Exception cause) {
throw new SecurityException(cause);
}
}
}