Skip to content

Commit 531b5dc

Browse files
committed
[CODEC-156] DigestUtils: add APIs named after standard alg name SHA-1.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/codec/trunk@1380014 13f79535-47bb-0310-9956-ffa450edef68
1 parent 2dfd039 commit 531b5dc

3 files changed

Lines changed: 85 additions & 6 deletions

File tree

src/changes/changes.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ The <action> type attribute can be add,update,fix,remove.
5151
</release>
5252
-->
5353
<release version="1.7" date="TBD" description="Feature and fix release.">
54+
<action issue="CODEC-156" dev="ggregory" type="add" due-to="ggregory">
55+
DigestUtils: add APIs named after standard alg name SHA-1.
56+
</action>
5457
<action issue="CODEC-155" dev="ggregory" type="add" due-to="ggregory">
5558
DigestUtils.getDigest(String) should throw IllegalArgumentException instead of RuntimeException.
5659
</action>

src/main/java/org/apache/commons/codec/digest/DigestUtils.java

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,20 @@ public static MessageDigest getMd5Digest() {
102102
return getDigest(MessageDigestAlgorithms.MD5);
103103
}
104104

105+
/**
106+
* Returns an SHA-1 digest.
107+
*
108+
* @return An SHA-1 digest instance.
109+
* @throws IllegalArgumentException
110+
* when a {@link NoSuchAlgorithmException} is caught, which should never happen because SHA-1 is a
111+
* built-in algorithm
112+
* @see MessageDigestAlgorithms#SHA_1
113+
* @since 1.7
114+
*/
115+
public static MessageDigest getSha1Digest() {
116+
return getDigest(MessageDigestAlgorithms.SHA_1);
117+
}
118+
105119
/**
106120
* Returns an SHA-256 digest.
107121
* <p>
@@ -244,6 +258,18 @@ public static byte[] sha(byte[] data) {
244258
return getShaDigest().digest(data);
245259
}
246260

261+
/**
262+
* Calculates the SHA-1 digest and returns the value as a <code>byte[]</code>.
263+
*
264+
* @param data
265+
* Data to digest
266+
* @return SHA-1 digest
267+
* @since 1.7
268+
*/
269+
public static byte[] sha1(byte[] data) {
270+
return getSha1Digest().digest(data);
271+
}
272+
247273
/**
248274
* Calculates the SHA-1 digest and returns the value as a <code>byte[]</code>.
249275
*
@@ -258,6 +284,20 @@ public static byte[] sha(InputStream data) throws IOException {
258284
return digest(getShaDigest(), data);
259285
}
260286

287+
/**
288+
* Calculates the SHA-1 digest and returns the value as a <code>byte[]</code>.
289+
*
290+
* @param data
291+
* Data to digest
292+
* @return SHA-1 digest
293+
* @throws IOException
294+
* On error reading from the stream
295+
* @since 1.7
296+
*/
297+
public static byte[] sha1(InputStream data) throws IOException {
298+
return digest(getSha1Digest(), data);
299+
}
300+
261301
/**
262302
* Calculates the SHA-1 digest and returns the value as a <code>byte[]</code>.
263303
*
@@ -597,8 +637,8 @@ public static String shaHex(String data) {
597637
* @return the updated {@link MessageDigest}
598638
* @since 1.7
599639
*/
600-
public static MessageDigest updateDigest(final MessageDigest messageDigest, final String valueToDigest) {
601-
messageDigest.update(getBytesUtf8(valueToDigest));
640+
public static MessageDigest updateDigest(final MessageDigest messageDigest, byte[] valueToDigest) {
641+
messageDigest.update(valueToDigest);
602642
return messageDigest;
603643
}
604644

@@ -612,8 +652,8 @@ public static MessageDigest updateDigest(final MessageDigest messageDigest, fina
612652
* @return the updated {@link MessageDigest}
613653
* @since 1.7
614654
*/
615-
public static MessageDigest updateDigest(final MessageDigest messageDigest, byte[] valueToDigest) {
616-
messageDigest.update(valueToDigest);
655+
public static MessageDigest updateDigest(final MessageDigest messageDigest, final String valueToDigest) {
656+
messageDigest.update(getBytesUtf8(valueToDigest));
617657
return messageDigest;
618658
}
619659
}

src/test/java/org/apache/commons/codec/digest/DigestUtilsTest.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,25 @@ public void testShaHex() throws IOException {
182182
}
183183

184184
@Test
185-
public void testUpdateWithByteArray(){
185+
public void testSha1UpdateWithByteArray(){
186+
final String d1 = "C'est un homme qui rentre dans un café, et plouf";
187+
final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
188+
189+
MessageDigest messageDigest = DigestUtils.getSha1Digest();
190+
messageDigest.update(d1.getBytes());
191+
messageDigest.update(d2.getBytes());
192+
final String expectedResult = Hex.encodeHexString(messageDigest.digest());
193+
194+
messageDigest = DigestUtils.getSha1Digest();
195+
DigestUtils.updateDigest(messageDigest, d1.getBytes());
196+
DigestUtils.updateDigest(messageDigest, d2.getBytes());
197+
final String actualResult = Hex.encodeHexString(messageDigest.digest());
198+
199+
assertEquals(expectedResult, actualResult);
200+
}
201+
202+
@Test
203+
public void testShaUpdateWithByteArray(){
186204
final String d1 = "C'est un homme qui rentre dans un café, et plouf";
187205
final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
188206

@@ -200,7 +218,25 @@ public void testUpdateWithByteArray(){
200218
}
201219

202220
@Test
203-
public void testUpdateWithString(){
221+
public void testSha1UpdateWithString(){
222+
final String d1 = "C'est un homme qui rentre dans un café, et plouf";
223+
final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
224+
225+
MessageDigest messageDigest = DigestUtils.getSha1Digest();
226+
messageDigest.update(StringUtils.getBytesUtf8(d1));
227+
messageDigest.update(StringUtils.getBytesUtf8(d2));
228+
final String expectedResult = Hex.encodeHexString(messageDigest.digest());
229+
230+
messageDigest = DigestUtils.getSha1Digest();
231+
DigestUtils.updateDigest(messageDigest, d1);
232+
DigestUtils.updateDigest(messageDigest, d2);
233+
final String actualResult = Hex.encodeHexString(messageDigest.digest());
234+
235+
assertEquals(expectedResult, actualResult);
236+
}
237+
238+
@Test
239+
public void testShaUpdateWithString(){
204240
final String d1 = "C'est un homme qui rentre dans un café, et plouf";
205241
final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
206242

0 commit comments

Comments
 (0)