Construct a Ripemd256
Length padding size
block size
Obtain the digest
The size of a Ripemd256 digest is 32 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 = [ "02ba4c4e5f8ecd1877fc52d64d30e37a2d9774fb1e5d026380ae0168e3c5522d", "f9333e45d857f5d90a91bab70a1eba0cfb1be4b0783c9acfcd883a9134692925", "afbd6e228b9d8cbbcef5ca2d03e6dba10ac0bc7dcbe4680e1e42d2e975459b65", "87e971759a1ce47a514d5c914c392c9018c7c46bc14465554afcdf54a5070c0e", "649d3034751ea216776bf9a18acc81bc7896118a5197968782dd1fd97d8d5133", "3843045583aac6c8c8d9128573e7a9809afb2a0f34ccc36ea9e72f16f6368e3f", "5740a408ac16b720b84424ae931cbb1fe363d1d0bf4017f1a89f7ea6de77a0b8", "06fdcc7a409548aaf91368c06a6275b553e3f099bf0ea4edfd6778df89a890dd" ]; Ripemd256 h = new Ripemd256(); 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 = "ac953744e10e31514c150d4d8d7b677342e33399788296e43ae4850ce4f97978"; h.update(cast(ubyte[]) s); char[] d = h.hexDigest(); assert(d == result,":(1 million times \"a\")("~d~")!=("~result~")");