package org.bouncycastle.crypto.test;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.util.encoders.Hex;
import org.bouncycastle.util.test.SimpleTestResult;
import org.bouncycastle.util.test.Test;
import org.bouncycastle.util.test.TestResult;
/**
* standard vector test for SHA-1 from "Handbook of Applied Cryptography", page 345.
*/
public class SHA1DigestTest
implements Test
{
static private String testVec1 = "";
static private String resVec1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
static private String testVec2 = "61";
static private String resVec2 = "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8";
static private String testVec3 = "616263";
static private String resVec3 = "a9993e364706816aba3e25717850c26c9cd0d89d";
static private String testVec4 = "6162636465666768696a6b6c6d6e6f707172737475767778797a";
static private String resVec4 = "32d10c7b8cf96570ca04ce37f2a19d84240d3a89";
public String getName()
{
return "SHA1";
}
public TestResult perform()
{
Digest digest = new SHA1Digest();
byte[] resBuf = new byte[digest.getDigestSize()];
String resStr;
//
// test 1
//
digest.doFinal(resBuf, 0);
resStr = new String(Hex.encode(resBuf));
if (!resVec1.equals(resStr))
{
return new SimpleTestResult(false,
"SHA-1 failing standard vector test 1"
+ System.getProperty("line.separator")
+ " expected: " + resVec1
+ System.getProperty("line.separator")
+ " got : " + resStr);
}
//
// test 2
//
byte[] bytes = Hex.decode(testVec2);
digest.update(bytes, 0, bytes.length);
digest.doFinal(resBuf, 0);
resStr = new String(Hex.encode(resBuf));
if (!resVec2.equals(resStr))
{
return new SimpleTestResult(false,
"SHA-1 failing standard vector test 2"
+ System.getProperty("line.separator")
+ " expected: " + resVec2
+ System.getProperty("line.separator")
+ " got : " + resStr);
}
//
// test 3
//
bytes = Hex.decode(testVec3);
digest.update(bytes, 0, bytes.length);
digest.doFinal(resBuf, 0);
resStr = new String(Hex.encode(resBuf));
if (!resVec3.equals(resStr))
{
return new SimpleTestResult(false,
"SHA-1 failing standard vector test 3"
+ System.getProperty("line.separator")
+ " expected: " + resVec3
+ System.getProperty("line.separator")
+ " got : " + resStr);
}
//
// test 4
//
bytes = Hex.decode(testVec4);
digest.update(bytes, 0, bytes.length);
digest.doFinal(resBuf, 0);
resStr = new String(Hex.encode(resBuf));
if (!resVec4.equals(resStr))
{
return new SimpleTestResult(false,
"SHA-1 failing standard vector test 4"
+ System.getProperty("line.separator")
+ " expected: " + resVec4
+ System.getProperty("line.separator")
+ " got : " + resStr);
}
//
// test 5
//
bytes = Hex.decode(testVec4);
digest.update(bytes, 0, bytes.length/2);
// clone the Digest
Digest d = new SHA1Digest((SHA1Digest)digest);
digest.update(bytes, bytes.length/2, bytes.length - bytes.length/2);
digest.doFinal(resBuf, 0);
resStr = new String(Hex.encode(resBuf));
if (!resVec4.equals(resStr))
{
return new SimpleTestResult(false,
"SHA1 failing standard vector test 5"
+ System.getProperty("line.separator")
+ " expected: " + resVec4
+ System.getProperty("line.separator")
+ " got : " + resStr);
}
d.update(bytes, bytes.length/2, bytes.length - bytes.length/2);
d.doFinal(resBuf, 0);
resStr = new String(Hex.encode(resBuf));
if (!resVec4.equals(resStr))
{
return new SimpleTestResult(false,
"SHA1 failing standard vector test 5"
+ System.getProperty("line.separator")
+ " expected: " + resVec4
+ System.getProperty("line.separator")
+ " got : " + resStr);
}
return new SimpleTestResult(true, getName() + ": Okay");
}
public static void main(
String[] args)
{
SHA1DigestTest test = new SHA1DigestTest();
TestResult result = test.perform();
System.out.println(result);
}
}