Skip to content

Commit 007d6b8

Browse files
committed
[CODEC-139] DigestUtils: add updateDigest methods and make methods public.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/codec/trunk@1328553 13f79535-47bb-0310-9956-ffa450edef68
1 parent 2b8eba2 commit 007d6b8

3 files changed

Lines changed: 79 additions & 7 deletions

File tree

src/changes/changes.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ 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 dev="ggregory" type="fix" issue="CODEC-133" due-to="lathspell">
54+
<action dev="ggregory" type="add" issue="CODEC-139" due-to="dsebastien">
55+
DigestUtils: add updateDigest methods and make methods public.
56+
</action>
57+
<action dev="ggregory" type="add" issue="CODEC-133" due-to="lathspell">
5558
Add classes for MD5/SHA1/SHA-512-based Unix crypt(3) hash variants.
5659
</action>
5760
<action dev="ggregory" type="fix" issue="CODEC-96" due-to="sebb">

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

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private static byte[] getBytesUtf8(String data) {
8181
* @throws RuntimeException
8282
* when a {@link java.security.NoSuchAlgorithmException} is caught.
8383
*/
84-
static MessageDigest getDigest(String algorithm) {
84+
public static MessageDigest getDigest(String algorithm) {
8585
try {
8686
return MessageDigest.getInstance(algorithm);
8787
} catch (NoSuchAlgorithmException e) {
@@ -96,7 +96,7 @@ static MessageDigest getDigest(String algorithm) {
9696
* @throws RuntimeException
9797
* when a {@link java.security.NoSuchAlgorithmException} is caught.
9898
*/
99-
private static MessageDigest getMd5Digest() {
99+
public static MessageDigest getMd5Digest() {
100100
return getDigest("MD5");
101101
}
102102

@@ -110,7 +110,7 @@ private static MessageDigest getMd5Digest() {
110110
* @throws RuntimeException
111111
* when a {@link java.security.NoSuchAlgorithmException} is caught.
112112
*/
113-
private static MessageDigest getSha256Digest() {
113+
public static MessageDigest getSha256Digest() {
114114
return getDigest("SHA-256");
115115
}
116116

@@ -124,7 +124,7 @@ private static MessageDigest getSha256Digest() {
124124
* @throws RuntimeException
125125
* when a {@link java.security.NoSuchAlgorithmException} is caught.
126126
*/
127-
private static MessageDigest getSha384Digest() {
127+
public static MessageDigest getSha384Digest() {
128128
return getDigest("SHA-384");
129129
}
130130

@@ -138,7 +138,7 @@ private static MessageDigest getSha384Digest() {
138138
* @throws RuntimeException
139139
* when a {@link java.security.NoSuchAlgorithmException} is caught.
140140
*/
141-
private static MessageDigest getSha512Digest() {
141+
public static MessageDigest getSha512Digest() {
142142
return getDigest("SHA-512");
143143
}
144144

@@ -149,7 +149,7 @@ private static MessageDigest getSha512Digest() {
149149
* @throws RuntimeException
150150
* when a {@link java.security.NoSuchAlgorithmException} is caught.
151151
*/
152-
private static MessageDigest getShaDigest() {
152+
public static MessageDigest getShaDigest() {
153153
return getDigest("SHA");
154154
}
155155

@@ -578,4 +578,34 @@ public static String shaHex(InputStream data) throws IOException {
578578
public static String shaHex(String data) {
579579
return Hex.encodeHexString(sha(data));
580580
}
581+
582+
/**
583+
* Updates the given {@link MessageDigest}.
584+
*
585+
* @param messageDigest
586+
* the {@link MessageDigest} to update
587+
* @param valueToDigest
588+
* the value to update the {@link MessageDigest} with
589+
* @return the updated {@link MessageDigest}
590+
* @since 1.7
591+
*/
592+
public static MessageDigest updateDigest(final MessageDigest messageDigest, final String valueToDigest) {
593+
messageDigest.update(getBytesUtf8(valueToDigest));
594+
return messageDigest;
595+
}
596+
597+
/**
598+
* Updates the given {@link MessageDigest}.
599+
*
600+
* @param messageDigest
601+
* the {@link MessageDigest} to update
602+
* @param valueToDigest
603+
* the value to update the {@link MessageDigest} with
604+
* @return the updated {@link MessageDigest}
605+
* @since 1.7
606+
*/
607+
public static MessageDigest updateDigest(final MessageDigest messageDigest, byte[] valueToDigest) {
608+
messageDigest.update(valueToDigest);
609+
return messageDigest;
610+
}
581611
}

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222

2323
import java.io.ByteArrayInputStream;
2424
import java.io.IOException;
25+
import java.security.MessageDigest;
2526
import java.util.Random;
2627

28+
import org.apache.commons.codec.binary.Hex;
2729
import org.apache.commons.codec.binary.StringUtils;
2830
import org.junit.Test;
2931

@@ -177,4 +179,41 @@ public void testShaHex() throws IOException {
177179
DigestUtils.shaHex(new ByteArrayInputStream(testData)));
178180

179181
}
182+
183+
@Test
184+
public void testUpdateWithByteArray(){
185+
final String d1 = "C'est un homme qui rentre dans un café, et plouf";
186+
final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
187+
188+
MessageDigest messageDigest = DigestUtils.getShaDigest();
189+
messageDigest.update(d1.getBytes());
190+
messageDigest.update(d2.getBytes());
191+
final String expectedResult = Hex.encodeHexString(messageDigest.digest());
192+
193+
messageDigest = DigestUtils.getShaDigest();
194+
DigestUtils.updateDigest(messageDigest, d1.getBytes());
195+
DigestUtils.updateDigest(messageDigest, d2.getBytes());
196+
final String actualResult = Hex.encodeHexString(messageDigest.digest());
197+
198+
assertEquals(expectedResult, actualResult);
199+
}
200+
201+
@Test
202+
public void testUpdateWithString(){
203+
final String d1 = "C'est un homme qui rentre dans un café, et plouf";
204+
final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
205+
206+
MessageDigest messageDigest = DigestUtils.getShaDigest();
207+
messageDigest.update(StringUtils.getBytesUtf8(d1));
208+
messageDigest.update(StringUtils.getBytesUtf8(d2));
209+
final String expectedResult = Hex.encodeHexString(messageDigest.digest());
210+
211+
messageDigest = DigestUtils.getShaDigest();
212+
DigestUtils.updateDigest(messageDigest, d1);
213+
DigestUtils.updateDigest(messageDigest, d2);
214+
final String actualResult = Hex.encodeHexString(messageDigest.digest());
215+
216+
assertEquals(expectedResult, actualResult);
217+
}
218+
180219
}

0 commit comments

Comments
 (0)