Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › crypto/ › argon2.zig › processBlockGeneric
processBlockGeneric
argon2.processBlockGeneric
fn processBlockGeneric (
out : *[block_length ]u64 ,
in1 : *const [block_length ]u64 ,
in2 : *const [block_length ]u64 ,
comptime xor : bool ,
) void
File
Code
fn processBlockGeneric (
out : *[block_length ]u64 ,
in1 : *const [block_length ]u64 ,
in2 : *const [block_length ]u64 ,
comptime xor : bool ,
) void {
var t : [block_length ]u64 = undefined ;
for (&t , 0 ..) |*v , i | {
v .* = in1 [i ] ^ in2 [i ];
}
var i : usize = 0 ;
while (i < block_length ) : (i += 16 ) {
blamkaGeneric (t [i ..][0 ..16 ]);
}
i = 0 ;
var buffer : [16 ]u64 = undefined ;
while (i < block_length / 8 ) : (i += 2 ) {
var j : usize = 0 ;
while (j < block_length / 8 ) : (j += 2 ) {
buffer [j ] = t [j * 8 + i ];
buffer [j + 1 ] = t [j * 8 + i + 1 ];
}
blamkaGeneric (&buffer );
j = 0 ;
while (j < block_length / 8 ) : (j += 2 ) {
t [j * 8 + i ] = buffer [j ];
t [j * 8 + i + 1 ] = buffer [j + 1 ];
}
}
if (xor ) {
for (t , 0 ..) |v , j | {
out [j ] ^= in1 [j ] ^ in2 [j ] ^ v ;
}
} else {
for (t , 0 ..) |v , j | {
out [j ] = in1 [j ] ^ in2 [j ] ^ v ;
}
}
}