DoxigAlpha

final

Function parameters

Parameters

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

Type definitions in this namespace

Types

#

Functions in this namespace

Functions

#

= 64

Values

#

Source

Implementation

#
pub fn final(d: *Sha1, 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[63] = @as(u8, @intCast(d.total_len & 0x1f)) << 3;
    while (i < 8) : (i += 1) {
        d.buf[63 - 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, .big);
    }
}