blob: e14de541c795eb6c9b89728d6b48a66a63a9f950 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.codec.digest;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.binary.StringUtils;
import org.junit.jupiter.api.Test;
/**
* Tests {@link HmacUtils}.
*/
class HmacUtilsTest {
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testEmptyKey() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.getHmacMd5(new byte[] {}));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testGetHMac() {
assertArrayEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_BYTES,
HmacUtils.getHmacMd5(HmacAlgorithmsTest.STANDARD_KEY_BYTES).doFinal(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_BYTES,
HmacUtils.getHmacSha1(HmacAlgorithmsTest.STANDARD_KEY_BYTES).doFinal(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_BYTES,
HmacUtils.getHmacSha256(HmacAlgorithmsTest.STANDARD_KEY_BYTES).doFinal(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_BYTES,
HmacUtils.getHmacSha384(HmacAlgorithmsTest.STANDARD_KEY_BYTES).doFinal(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_BYTES,
HmacUtils.getHmacSha512(HmacAlgorithmsTest.STANDARD_KEY_BYTES).doFinal(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testHmacMd5Hex() throws IOException {
assertEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_STRING,
HmacUtils.hmacMd5Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, "The quick brown fox jumps over the lazy dog"));
assertEquals("750c783e6ab0b503eaa86e310a5db738", HmacUtils.hmacMd5Hex("Jefe", "what do ya want for nothing?"));
assertEquals(
"750c783e6ab0b503eaa86e310a5db738",
HmacUtils.hmacMd5Hex("Jefe".getBytes(),
new ByteArrayInputStream("what do ya want for nothing?".getBytes())));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testHmacSha1Hex() throws IOException {
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING, HmacUtils.hmacSha1Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
assertEquals("f42bb0eeb018ebbd4597ae7213711ec60760843f", HmacUtils.hmacSha1Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, ""));
assertEquals("effcdf6ae5eb2fa2d27416d5f184df9c259a7c79",
HmacUtils.hmacSha1Hex("Jefe", "what do ya want for nothing?"));
assertEquals(
"effcdf6ae5eb2fa2d27416d5f184df9c259a7c79",
HmacUtils.hmacSha1Hex("Jefe".getBytes(),
new ByteArrayInputStream("what do ya want for nothing?".getBytes())));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testHmacSha1UpdateWithByteArray() {
final Mac mac = HmacUtils.getHmacSha1(HmacAlgorithmsTest.STANDARD_KEY_BYTES);
HmacUtils.updateHmac(mac, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES);
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING, Hex.encodeHexString(mac.doFinal()));
HmacUtils.updateHmac(mac, "".getBytes());
assertEquals("f42bb0eeb018ebbd4597ae7213711ec60760843f", Hex.encodeHexString(mac.doFinal()));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testHmacSha1UpdateWithInputStream() throws IOException {
final Mac mac = HmacUtils.getHmacSha1(HmacAlgorithmsTest.STANDARD_KEY_BYTES);
HmacUtils.updateHmac(mac, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING, Hex.encodeHexString(mac.doFinal()));
HmacUtils.updateHmac(mac, new ByteArrayInputStream("".getBytes()));
assertEquals("f42bb0eeb018ebbd4597ae7213711ec60760843f", Hex.encodeHexString(mac.doFinal()));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testHmacSha1UpdateWithString() {
final Mac mac = HmacUtils.getHmacSha1(HmacAlgorithmsTest.STANDARD_KEY_BYTES);
HmacUtils.updateHmac(mac, HmacAlgorithmsTest.STANDARD_PHRASE_STRING);
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING, Hex.encodeHexString(mac.doFinal()));
HmacUtils.updateHmac(mac, "");
assertEquals("f42bb0eeb018ebbd4597ae7213711ec60760843f", Hex.encodeHexString(mac.doFinal()));
}
@Test
void testInitializedMac() {
final Mac md5Mac = HmacUtils.getInitializedMac(HmacAlgorithms.HMAC_MD5, HmacAlgorithmsTest.STANDARD_KEY_BYTES);
final Mac md5Mac2 = HmacUtils.getInitializedMac("HmacMD5", HmacAlgorithmsTest.STANDARD_KEY_BYTES);
assertArrayEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_BYTES, HmacUtils.updateHmac(md5Mac, HmacAlgorithmsTest.STANDARD_PHRASE_STRING)
.doFinal());
assertArrayEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_BYTES, HmacUtils.updateHmac(md5Mac2, HmacAlgorithmsTest.STANDARD_PHRASE_STRING)
.doFinal());
}
@Test
void testInitializedMacNullAlgo() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.getInitializedMac((String) null, HmacAlgorithmsTest.STANDARD_KEY_BYTES));
}
@Test
void testInitializedMacNullKey() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.getInitializedMac(HmacAlgorithms.HMAC_MD5, null));
}
@Test
void testInternalNoSuchAlgorithmException() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.getInitializedMac("Bogus Bogus", StringUtils.getBytesUtf8("akey")));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testMd5HMac() throws IOException {
assertArrayEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_BYTES,
HmacUtils.hmacMd5(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_BYTES,
HmacUtils.hmacMd5(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_BYTES,
HmacUtils.hmacMd5(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
assertEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_STRING, HmacUtils.hmacMd5Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_STRING,
HmacUtils.hmacMd5Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertEquals(HmacAlgorithmsTest.STANDARD_MD5_RESULT_STRING,
HmacUtils.hmacMd5Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testMd5HMacFail() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.hmacMd5((byte[]) null, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testNullKey() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.getHmacMd5(null));
}
@Test
void testSecretKeySpecAllowsEmptyKeys() {
assertThrows(IllegalArgumentException.class, () -> new SecretKeySpec(new byte[] {}, "HmacMD5"));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha1HMac() throws IOException {
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_BYTES,
HmacUtils.hmacSha1(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_BYTES,
HmacUtils.hmacSha1(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_BYTES,
HmacUtils.hmacSha1(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING,
HmacUtils.hmacSha1Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING,
HmacUtils.hmacSha1Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA1_RESULT_STRING,
HmacUtils.hmacSha1Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha1HMacFail() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.hmacSha1((byte[]) null, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha256HMac() throws IOException {
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_BYTES,
HmacUtils.hmacSha256(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_BYTES,
HmacUtils.hmacSha256(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_BYTES,
HmacUtils.hmacSha256(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_STRING,
HmacUtils.hmacSha256Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_STRING,
HmacUtils.hmacSha256Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA256_RESULT_STRING,
HmacUtils.hmacSha256Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha256HMacFail() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.hmacSha256((byte[]) null, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha384HMac() throws IOException {
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_BYTES,
HmacUtils.hmacSha384(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_BYTES,
HmacUtils.hmacSha384(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_BYTES,
HmacUtils.hmacSha384(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_STRING,
HmacUtils.hmacSha384Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_STRING,
HmacUtils.hmacSha384Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA384_RESULT_STRING,
HmacUtils.hmacSha384Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha384HMacFail() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.hmacSha384((byte[]) null, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha512HMac() throws IOException {
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_BYTES,
HmacUtils.hmacSha512(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_BYTES,
HmacUtils.hmacSha512(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertArrayEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_BYTES,
HmacUtils.hmacSha512(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_STRING,
HmacUtils.hmacSha512Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_STRING,
HmacUtils.hmacSha512Hex(HmacAlgorithmsTest.STANDARD_KEY_BYTES, new ByteArrayInputStream(HmacAlgorithmsTest.STANDARD_PHRASE_BYTES)));
assertEquals(HmacAlgorithmsTest.STANDARD_SHA512_RESULT_STRING,
HmacUtils.hmacSha512Hex(HmacAlgorithmsTest.STANDARD_KEY_STRING, HmacAlgorithmsTest.STANDARD_PHRASE_STRING));
}
@SuppressWarnings("deprecation") // most of the static methods are deprecated
@Test
void testSha512HMacFail() {
assertThrows(IllegalArgumentException.class, () -> HmacUtils.hmacSha512((byte[]) null, HmacAlgorithmsTest.STANDARD_PHRASE_BYTES));
}
}