public static string ComputeRipeMd160Hash(this string valueForHash) { var ripeMd160 = new RipeMD160Digest(); var hash = new byte[ripeMd160.GetDigestSize()]; foreach (var @byte in Encoding.UTF8.GetBytes(valueForHash)) { ripeMd160.Update(@byte); } ripeMd160.DoFinal(hash, 0); return(Hex.ToHexString(hash)); }
public ITestResult Perform() { IDigest digest = new RipeMD160Digest(); byte[] resBuf = new byte[digest.GetDigestSize()]; for (int i = 0; i < messages.Length; i++) { byte[] m = Encoding.ASCII.GetBytes(messages[i]); digest.BlockUpdate(m, 0, m.Length); digest.DoFinal(resBuf, 0); if (!Arrays.AreEqual(resBuf, Hex.Decode(digests[i]))) { return(new SimpleTestResult(false, Name + ": Vector " + i + " failed")); } } // // test 2 // byte[] mm = Encoding.ASCII.GetBytes(messages[messages.Length - 1]); digest.BlockUpdate(mm, 0, mm.Length / 2); // clone the IDigest IDigest d = new RipeMD160Digest((RipeMD160Digest)digest); digest.BlockUpdate(mm, mm.Length / 2, mm.Length - mm.Length / 2); digest.DoFinal(resBuf, 0); if (!Arrays.AreEqual(resBuf, Hex.Decode(digests[digests.Length - 1]))) { return(new SimpleTestResult(false, "RipeMD160 failing clone test" + SimpleTest.NewLine + " expected: " + digests[digests.Length - 1] + SimpleTest.NewLine + " got : " + Hex.ToHexString(resBuf))); } d.BlockUpdate(mm, mm.Length / 2, mm.Length - mm.Length / 2); d.DoFinal(resBuf, 0); if (!Arrays.AreEqual(resBuf, Hex.Decode(digests[digests.Length - 1]))) { return(new SimpleTestResult(false, "RipeMD160 failing clone test - part 2" + SimpleTest.NewLine + " expected: " + digests[digests.Length - 1] + SimpleTest.NewLine + " got : " + Hex.ToHexString(resBuf))); } for (int i = 0; i < 1000000; i++) { digest.Update((byte)'a'); } digest.DoFinal(resBuf, 0); if (!Arrays.AreEqual(resBuf, Hex.Decode(MillionADigest))) { return(new SimpleTestResult(false, Name + ": Million a's failed")); } return(new SimpleTestResult(true, Name + ": Okay")); }