DoxigAlpha

final

Function parameters

Parameters

#
d:*Self
out:*[digest_length]u8

The MD5 function is now considered cryptographically broken.

Types

#
Md5
The MD5 function is now considered cryptographically broken.

Source

Implementation

#
pub fn final(d: *Self, out: *[digest_length]u8) void {
    // The buffer here will never be completely full.
    @memset(d.buf[d.buf_len..], 0);

    // Append padding bits.
    d.buf[d.buf_len] = 0x80;
    d.buf_len += 1;

    // > 448 mod 512 so need to add an extra round to wrap around.
    if (64 - d.buf_len < 8) {
        d.round(d.buf[0..]);
        @memset(d.buf[0..], 0);
    }

    // Append message length.
    var i: usize = 1;
    var len = d.total_len >> 5;
    d.buf[56] = @as(u8, @intCast(d.total_len & 0x1f)) << 3;
    while (i < 8) : (i += 1) {
        d.buf[56 + i] = @as(u8, @intCast(len & 0xff));
        len >>= 8;
    }

    d.round(d.buf[0..]);

    for (d.s, 0..) |s, j| {
        mem.writeInt(u32, out[4 * j ..][0..4], s, .little);
    }
}