Construct a Ripemd160
Length padding size
block size
Obtain the digest
The size of a Ripemd160 digest is 20 bytes
Performs the length padding
Pads the cipher data
Initialize the cipher
Performs the cipher on a block of data
Constructs the digest
Digest block size
Length padding size
Pads the digest data
Performs the length padding
Performs the digest on a block of data
Final processing of digest.
Initialize the digest
Digest additional data
Complete the digest
Converts 8 bit to 32 bit Little Endian
Converts 8 bit to 32 bit Big Endian
Converts 8 bit to 64 bit Little Endian
Converts 8 bit to 64 bit Big Endian
Rotate left by n
__gshared immutable immutable(char)[][] strings = [ "", "a", "abc", "message digest", "abcdefghijklmnopqrstuvwxyz", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "12345678901234567890123456789012345678901234567890123456789012345678901234567890" ]; __gshared immutable immutable(char)[][] results = [ "9c1185a5c5e9fc54612808977ee8f548b2258d31", "0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", "5d0689ef49d2fae572b881b123a85ffa21595f36", "f71c27109c692c1b56bbdceb5b9d2865b3708dbc", "12a053384a9c0c88e405a06c27dcf49ada62eb2b", "b0e20b6e3116640286ed3a87a5713079b21f5189", "9b752e45573d4b39f4dbd3323cab82bf63326bfb" ]; Ripemd160 h = new Ripemd160(); foreach (int i, immutable(char)[] s; strings) { h.update(cast(ubyte[]) s); char[] d = h.hexDigest(); assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); } char[] s = new char[1000000]; for (auto i = 0; i < s.length; i++) s[i] = 'a'; immutable(char)[] result = "52783243c1697bdbe16d37f97f68f08325dc1528"; h.update(cast(ubyte[]) s); char[] d = h.hexDigest(); assert(d == result,":(1 million times \"a\")("~d~")!=("~result~")");