Ripemd160

Constructors

this
this()

Construct a Ripemd160

Members

Functions

addSize
uint addSize()

Length padding size

blockSize
uint blockSize()

block size

createDigest
void createDigest(ubyte[] buf)

Obtain the digest

digestSize
uint digestSize()

The size of a Ripemd160 digest is 20 bytes

padLength
void padLength(ubyte[] at, ulong length)

Performs the length padding

padMessage
void padMessage(ubyte[] at)

Pads the cipher data

reset
void reset()

Initialize the cipher

transform
void transform(ubyte[] input)

Performs the cipher on a block of data

Inherited Members

From MerkleDamgard

createDigest
void createDigest(ubyte[] buf)

Constructs the digest

blockSize
uint blockSize()

Digest block size

addSize
uint addSize()

Length padding size

padMessage
void padMessage(ubyte[] data)

Pads the digest data

padLength
void padLength(ubyte[] data, size_t length)

Performs the length padding

transform
void transform(ubyte[] data)

Performs the digest on a block of data

extend
void extend()

Final processing of digest.

reset
void reset()

Initialize the digest

update
MerkleDamgard update(const(void)[] input)

Digest additional data

binaryDigest
ubyte[] binaryDigest(ubyte[] buf)

Complete the digest

littleEndian32
void littleEndian32(ubyte[] input, uint[] output)

Converts 8 bit to 32 bit Little Endian

bigEndian32
void bigEndian32(ubyte[] input, uint[] output)

Converts 8 bit to 32 bit Big Endian

littleEndian64
void littleEndian64(ubyte[] input, ulong[] output)

Converts 8 bit to 64 bit Little Endian

bigEndian64
void bigEndian64(ubyte[] input, ulong[] output)

Converts 8 bit to 64 bit Big Endian

rotateLeft
uint rotateLeft(uint x, uint n)

Rotate left by n

Examples

static istring[] strings = [
        "",
        "a",
        "abc",
        "message digest",
        "abcdefghijklmnopqrstuvwxyz",
        "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
        "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
];

static istring[] results = [
        "9c1185a5c5e9fc54612808977ee8f548b2258d31",
        "0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
        "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc",
        "5d0689ef49d2fae572b881b123a85ffa21595f36",
        "f71c27109c692c1b56bbdceb5b9d2865b3708dbc",
        "12a053384a9c0c88e405a06c27dcf49ada62eb2b",
        "b0e20b6e3116640286ed3a87a5713079b21f5189",
        "9b752e45573d4b39f4dbd3323cab82bf63326bfb"
];

Ripemd160 h = new Ripemd160();

foreach (i, s; strings)
{
    h.update(cast(ubyte[]) s);
    char[] d = h.hexDigest;

    test(d == results[i],":("~s~")("~d~")!=("~results[i]~")");
}


char[] s = new char[1000000];
for (auto i = 0; i < s.length; i++) s[i] = 'a';
auto result = "52783243c1697bdbe16d37f97f68f08325dc1528";
h.update(cast(ubyte[]) s);
auto d = h.hexDigest;

test(d == result,":(1 million times \"a\")("~d~")!=("~result~")");

Meta