018 | package org.apache.commons.codec.digest; |
019 |
020 | import java.io.ByteArrayInputStream; |
021 | import java.io.IOException; |
022 | import java.util.Random; |
023 |
024 | import org.apache.commons.codec.binary.StringUtils; |
025 |
026 | import junit.framework.TestCase; |
027 |
028 | /*** |
029 | * Tests DigestUtils methods. |
030 | * |
031 | * @author Apache Software Foundation |
032 | * @version $Id: DigestUtilsTest.java 800270 2009-08-03 09:32:08Z ggregory $ |
033 | */ |
034 | public class DigestUtilsTest extends TestCase { |
035 |
036 | private byte [] testData = new byte [ 1024 * 1024 ]; |
037 | |
038 | private byte [] getBytesUtf8(String hashMe) { |
039 | return StringUtils.getBytesUtf8(hashMe); |
040 | } |
041 |
042 | /** (non-Javadoc) |
043 | * @see junit.framework.TestCase#setUp() |
044 | */ |
045 | protected void setUp() throws Exception { |
046 | new Random().nextBytes(testData); |
047 | } |
048 |
049 | public void testConstructable() { |
050 | new DigestUtils(); |
051 | } |
052 | |
053 | public void testInternalNoSuchAlgorithmException() { |
054 | try { |
055 | DigestUtils.getDigest( "Bogus Bogus" ); |
056 | fail( "A RuntimeException should have been thrown." ); |
057 | } catch (RuntimeException e) { |
058 | // Expected exception. |
059 | } |
060 | } |
061 |
062 | public void testMd5Hex() throws IOException { |
063 | // Examples from RFC 1321 |
064 | assertEquals( "d41d8cd98f00b204e9800998ecf8427e" , DigestUtils.md5Hex( "" )); |
065 |
066 | assertEquals( "0cc175b9c0f1b6a831c399e269772661" , DigestUtils.md5Hex( "a" )); |
067 |
068 | assertEquals( "900150983cd24fb0d6963f7d28e17f72" , DigestUtils.md5Hex( "abc" )); |
069 |
070 | assertEquals( "f96b697d7cb7938d525a2f31aaf161d0" , DigestUtils.md5Hex( "message digest" )); |
071 |
072 | assertEquals( "c3fcd3d76192e4007dfb496cca67e13b" , DigestUtils.md5Hex( "abcdefghijklmnopqrstuvwxyz" )); |
073 |
074 | assertEquals( |
075 | "d174ab98d277d9f5a5611c2c9f419d9f" , |
076 | DigestUtils.md5Hex( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" )); |
077 |
078 | assertEquals( |
079 | "57edf4a22be3c955ac49da2e2107b67a" , |
080 | DigestUtils.md5Hex( "1234567890123456789012345678901234567890" + "1234567890123456789012345678901234567890" )); |
081 |
082 | assertEquals(DigestUtils.md5Hex(testData), |
083 | DigestUtils.md5Hex( new ByteArrayInputStream(testData))); |
084 | } |
085 |
086 | /*** |
087 | * An MD5 hash converted to hex should always be 32 characters. |
088 | */ |
089 | public void testMD5HexLength() { |
090 | String hashMe = "this is some string that is longer than 32 characters" ; |
091 | String hash = DigestUtils.md5Hex(getBytesUtf8(hashMe)); |
092 | assertEquals( 32 , hash.length()); |
093 |
094 | hashMe = "length < 32" ; |
095 | hash = DigestUtils.md5Hex(getBytesUtf8(hashMe)); |
096 | assertEquals( 32 , hash.length()); |
097 | } |
098 |
099 | /*** |
100 | * An MD5 hash should always be a 16 element byte[]. |
101 | */ |
102 | public void testMD5Length() { |
103 | String hashMe = "this is some string that is longer than 16 characters" ; |
104 | byte [] hash = DigestUtils.md5(getBytesUtf8(hashMe)); |
105 | assertEquals( 16 , hash.length); |
106 |
107 | hashMe = "length < 16" ; |
108 | hash = DigestUtils.md5(getBytesUtf8(hashMe)); |
109 | assertEquals( 16 , hash.length); |
110 | } |
111 |
112 | public void testSha256() throws IOException { |
113 | // Examples from FIPS 180-2 |
114 | assertEquals( "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" , |
115 | DigestUtils.sha256Hex( "abc" )); |
116 | assertEquals( "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" , |
117 | DigestUtils.sha256Hex(getBytesUtf8( "abc" ))); |
118 | assertEquals( "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" , |
119 | DigestUtils.sha256Hex( "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" )); |
120 | |
121 | assertEquals(DigestUtils.sha256Hex(testData), |
122 | DigestUtils.sha256Hex( new ByteArrayInputStream(testData))); |
123 | } |
124 |
125 | public void testSha384() throws IOException { |
126 | // Examples from FIPS 180-2 |
127 | assertEquals( "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" + |
128 | "8086072ba1e7cc2358baeca134c825a7" , |
129 | DigestUtils.sha384Hex( "abc" )); |
130 | assertEquals( "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" + |
131 | "8086072ba1e7cc2358baeca134c825a7" , |
132 | DigestUtils.sha384Hex(getBytesUtf8( "abc" ))); |
133 | assertEquals( "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712" + |
134 | "fcc7c71a557e2db966c3e9fa91746039" , |
135 | DigestUtils.sha384Hex( "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" + |
136 | "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" )); |
137 | assertEquals(DigestUtils.sha384Hex(testData), |
138 | DigestUtils.sha384Hex( new ByteArrayInputStream(testData))); |
139 | } |
140 |
141 | public void testSha512() throws IOException { |
142 | // Examples from FIPS 180-2 |
143 | assertEquals( "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" + |
144 | "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" , |
145 | DigestUtils.sha512Hex( "abc" )); |
146 | assertEquals( "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" + |
147 | "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" , |
148 | DigestUtils.sha512Hex(getBytesUtf8( "abc" ))); |
149 | assertEquals( "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018" + |
150 | "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909" , |
151 | DigestUtils.sha512Hex( "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" + |
152 | "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" )); |
153 | assertEquals(DigestUtils.sha512Hex(testData), |
154 | DigestUtils.sha512Hex( new ByteArrayInputStream(testData))); |
155 | } |
156 |
157 | public void testShaHex() throws IOException { |
158 | // Examples from FIPS 180-1 |
159 | assertEquals( "a9993e364706816aba3e25717850c26c9cd0d89d" , DigestUtils.shaHex( "abc" )); |
160 |
161 | assertEquals( "a9993e364706816aba3e25717850c26c9cd0d89d" , DigestUtils.shaHex(getBytesUtf8( "abc" ))); |
162 |
163 | assertEquals( |
164 | "84983e441c3bd26ebaae4aa1f95129e5e54670f1" , |
165 | DigestUtils.shaHex( "abcdbcdecdefdefgefghfghighij" + "hijkijkljklmklmnlmnomnopnopq" )); |
166 | assertEquals(DigestUtils.shaHex(testData), |
167 | DigestUtils.shaHex( new ByteArrayInputStream(testData))); |
168 |
169 | } |