Author: sebb Date: Sun May 22 14:15:46 2016 New Revision: 1745052 URL: http://svn.apache.org/viewvc?rev=1745052&view=rev Log: Simplify - always require key when creating the instance
Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java?rev=1745052&r1=1745051&r2=1745052&view=diff ============================================================================== --- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java (original) +++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/digest/HmacUtils.java Sun May 22 14:15:46 2016 @@ -42,19 +42,14 @@ import org.apache.commons.codec.binary.S * <p> * Sample usage: * <pre> + * import static HmacAlgorithms.*; * byte[] key = {1,2,3,4}; // don't use this! * String valueToDigest = "The quick brown fox jumps over the lazy dog"; - * byte[] hmac = HmacUtils.use(HmacAlgorithms.HMAC_SHA_224).key(key).update(valueToDigest).doFinal(); + * byte[] hmac = HmacUtils.use(HMAC_SHA_224, key).update(valueToDigest).doFinal(); * // Mac re-use - * HmacUtils hm1 = HmacUtils.use(HmacAlgorithms.HMAC_SHA_1).key(key); + * HmacUtils hm1 = HmacUtils.use("HmacAlgoName", key); // use a valid name here! * String hexPom = hm1.update(new File("pom.xml")).doFinalHex(); * String hexNot = hm1.update(new File("NOTICE.txt")).doFinalHex(); - * // Mac key update - * String algo = "HmacNew"; - * HmacUtils hm2 = HmacUtils.use(algo).key(key); - * byte[] key2 = {1,2,3,4,5}; // don't use this either! - * String hexPom2 = hm2.update(new File("pom.xml")).doFinalHex(); - * String hexNot2 = hm2.key(key2).update(new File("NOTICE.txt")).doFinalHex(); * </pre> * @since 1.10 * @version $Id$ @@ -854,7 +849,12 @@ public final class HmacUtils { return mac; } - // public to maintain binary compatibility + /** + * Preserves binary compatibity only. + * As for previous versions does not provide useful behaviour + * @deprecated since 1.11; only useful to preserve binary compatibility + */ + @Deprecated public HmacUtils() { this(null); } @@ -867,67 +867,36 @@ public final class HmacUtils { this.mac = mac; } - - /** - * Creates an instance using the provided {@link Mac} - * If necessary, the - * key must be provided using the {@link #key(byte[])} method - * before it can be used further. - * - * @param mac the {@link Mac} to be used. - * @return the instance - * @since 1.11 - */ - public static HmacUtils use(final Mac mac) { - return new HmacUtils(mac); + private HmacUtils(final String algorithm, final byte[] key) { + this(getInitializedMac(algorithm, key)); } + /** * Creates an instance using the provided algorithm type. - * The key must be provided using the {@link #key(byte[])} method - * before it can be used further. * - * @param algorithm to be used. + * @param algorithm to be used + * @param key the key to be used * @return the instance + * @throws IllegalArgumentException + * when a {@link NoSuchAlgorithmException} is caught or key is null or key is invalid. * @since 1.11 */ - public static HmacUtils use(final String algorithm) { - try { - return new HmacUtils(Mac.getInstance(algorithm)); - } catch (NoSuchAlgorithmException e) { - throw new IllegalArgumentException(e); - } + public static HmacUtils use(final String algorithm, final byte[] key) { + return new HmacUtils(algorithm, key); } /** * Creates an instance using the provided algorithm type. - * The key must be provided using the {@link #key(byte[])} method - * before it can be used further. * * @param algorithm to be used. * @return the instance + * @throws IllegalArgumentException + * when a {@link NoSuchAlgorithmException} is caught or key is null or key is invalid. * @since 1.11 */ - public static HmacUtils use(final HmacAlgorithms algorithm) { - return use(algorithm.getName()); - } - - /** - * Updates the stored {@link Mac} with the new key. - * This resets the Mac ready for re-use. - * - * @param key the new key - * @return this instance - * @since 1.11 - */ - public HmacUtils key(byte[] key) { - final SecretKeySpec keySpec = new SecretKeySpec(key, mac.getAlgorithm()); - try { - mac.init(keySpec); - } catch (InvalidKeyException e) { - throw new IllegalArgumentException(e); - } - return this; + public static HmacUtils use(final HmacAlgorithms algorithm, final byte[] key) { + return use(algorithm.getName(), key); } /** @@ -1027,7 +996,6 @@ public final class HmacUtils { /** * Finishes the MAC operation and returns the result. * The Mac can be re-used to produce further results from the same key. - * Or the key can be reset and the Mac reused. * * @return the result as a byte array * @since 1.11 @@ -1039,7 +1007,6 @@ public final class HmacUtils { /** * Finishes the MAC operation and returns the result. * The Mac can be re-used to produce further results from the same key. - * Or the key can be reset and the Mac reused. * * @return the result as a Hex String * @since 1.11