public static byte[] SHA256_RIPEMD160(byte[] input) { byte[] sha256 = new SHA256CryptoServiceProvider().ComputeHash(input); var digest = new RipeMD160Digest(); digest.BlockUpdate(sha256, 0, sha256.Length); var outArray = new byte[20]; digest.DoFinal(outArray, 0); return outArray; }
/** * Copy constructor. This will copy the state of the provided * message digest. */ public RipeMD160Digest(RipeMD160Digest t) : base(t) { H0 = t.H0; H1 = t.H1; H2 = t.H2; H3 = t.H3; H4 = t.H4; Array.Copy(t.X, 0, X, 0, t.X.Length); xOff = t.xOff; }
private void CopyIn(RipeMD160Digest t) { CopyIn((GeneralDigest)t); H0 = t.H0; H1 = t.H1; H2 = t.H2; H3 = t.H3; H4 = t.H4; global::System.Array.Copy((global::System.Array)t.X, 0, (global::System.Array)X, 0, t.X.Length); xOff = t.xOff; }
private void CopyIn(RipeMD160Digest t) { base.CopyIn(t); this.H0 = t.H0; this.H1 = t.H1; this.H2 = t.H2; this.H3 = t.H3; this.H4 = t.H4; Array.Copy(t.X, 0, this.X, 0, t.X.Length); this.xOff = t.xOff; }
private void CopyIn(RipeMD160Digest t) { CopyIn((GeneralDigest)t); H0 = t.H0; H1 = t.H1; H2 = t.H2; H3 = t.H3; H4 = t.H4; Array.Copy(t.X, 0, X, 0, t.X.Length); xOff = t.xOff; }
private void CopyIn(RipeMD160Digest t) { base.CopyIn(t); H0 = t.H0; H1 = t.H1; H2 = t.H2; H3 = t.H3; H4 = t.H4; Array.Copy(t.X, 0, X, 0, t.X.Length); xOff = t.xOff; }
/** * Copy constructor. This will copy the state of the provided * message digest. */ public RipeMD160Digest(RipeMD160Digest t) : base(t) { CopyIn(t); }
/// <summary> /// Calculates RIPEMD160(SHA256(input)). This is used in Address calculations. /// </summary> public static byte[] Sha256Hash160(byte[] input) { var sha256 = new SHA256Managed().ComputeHash(input); var digest = new RipeMD160Digest(); digest.BlockUpdate(sha256, 0, sha256.Length); var @out = new byte[20]; digest.DoFinal(@out, 0); return @out; }
public override void Reset(IMemoable other) { RipeMD160Digest d = (RipeMD160Digest)other; CopyIn(d); }
/// <summary> /// Note: Clears pool contents before returning /// </summary> private void CreateNewPRNG(byte[] pool) { if (pool == null) { throw new CryptographicException("Refusing to reseed with null pool"); } try { if (pool.Length != PoolSize) { throw new CryptographicException("Refusing to reseed with invalid pool"); } // Now, pool has been seeded, file operations are all completed, it's time to create my internal PRNG IDigest digest; switch (this.myRNGAlgorithm) { case PrngAlgorithm.MD5_128bit: digest = new MD5Digest(); break; case PrngAlgorithm.RIPEMD128_128bit: digest = new RipeMD128Digest(); break; case PrngAlgorithm.RIPEMD160_160bit: digest = new RipeMD160Digest(); break; case PrngAlgorithm.RIPEMD256_256bit: digest = new RipeMD256Digest(); break; case PrngAlgorithm.RIPEMD320_320bit: digest = new RipeMD320Digest(); break; case PrngAlgorithm.SHA1_160bit: digest = new Sha1Digest(); break; case PrngAlgorithm.SHA256_256bit: digest = new Sha256Digest(); break; case PrngAlgorithm.SHA512_512bit: digest = new Sha512Digest(); break; case PrngAlgorithm.Tiger_192bit: digest = new TigerDigest(); break; case PrngAlgorithm.Whirlpool_512bit: digest = new WhirlpoolDigest(); break; default: throw new CryptographicException("Unknown prngAlgorithm specified: " + this.myRNGAlgorithm.ToString()); } var drng = new DigestRandomGenerator(digest); drng.AddSeedMaterial(pool); this.myRNG = drng; } finally { Array.Clear(pool, 0, pool.Length); } }
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"); }
public static byte[] RIPEMD160(byte[] data, int count) { RipeMD160Digest ripemd = new RipeMD160Digest(); ripemd.BlockUpdate(data, 0, count); byte[] rv = new byte[20]; ripemd.DoFinal(rv, 0); return rv; }
public RipeMD160Digest(RipeMD160Digest t) : base(t) { this.X = new int[0x10]; this.CopyIn(t); }
public override void Reset(IMemoable other) { RipeMD160Digest t = (RipeMD160Digest)other; this.CopyIn(t); }
public static byte[] Digest(byte[] data, String algo) { if (algo == null) { throw new ArgumentNullException("El algoritmo de huella digital no puede ser nulo"); } if (data == null) { throw new ArgumentNullException("Los datos no pueden ser nulos"); } switch (algo) { /** * ALGORITMOS DE HASING */ case AOSignConstants.SIGN_ALGORITHM_SHA1: { Sha1Digest dig = new Sha1Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } case AOSignConstants.SIGN_ALGORITHM_SHA256: { Sha256Digest dig = new Sha256Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } case AOSignConstants.SIGN_ALGORITHM_SHA384: { Sha384Digest dig = new Sha384Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } case AOSignConstants.SIGN_ALGORITHM_SHA512: { Sha512Digest dig = new Sha512Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } case AOSignConstants.SIGN_ALGORITHM_RIPEMD160: { RipeMD160Digest dig = new RipeMD160Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } case AOSignConstants.SIGN_ALGORITHM_MD5: { MD5Digest dig = new MD5Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } case AOSignConstants.SIGN_ALGORITHM_MD2: { MD2Digest dig = new MD2Digest(); dig.BlockUpdate(data, 0, data.Length); byte[] result = new byte[dig.GetDigestSize()]; dig.DoFinal(result, 0); return result; } default: // You can use the default case. throw new ArgumentNullException("El algoritmo no es reconocido"); } throw new ArgumentNullException("Algoritmo de hash no soportado: " + algo); }
/// <summary> /// Calculates RIPEMD160(SHA256(input)). This is used in Address calculations. /// </summary> public static byte[] Sha256Hash160(this byte[] me) { byte[] sha256=new SHA256Managed().ComputeHash(me); RipeMD160Digest digest=new RipeMD160Digest(); digest.BlockUpdate(sha256,0,sha256.Length); byte[] result=new byte[20]; digest.DoFinal(result,0); return result; }