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/ › ml_dsa.zig › Mat
Mat
ml_dsa.Mat
fn Mat (comptime k : u8 , comptime l : u8 ) type
File
Code
fn Mat (comptime k : u8 , comptime l : u8 ) type {
return struct {
rows : [k ]PolyVec (l ),
const Self = @This ();
const VecL = PolyVec (l );
const VecK = PolyVec (k );
fn derive (rho : *const [32 ]u8 ) Self {
var m : Self = undefined ;
for (0 ..k ) |i | {
if (i + 1 < k ) {
@prefetch (&m .rows [i + 1 ], .{ .rw = .write , .locality = 2 });
}
for (0 ..l ) |j | {
const nonce : u16 = (@as (u16 , @intCast (i )) << 8 ) | @as (u16 , @intCast (j ));
m .rows [i ].ps [j ] = polyDeriveUniform (rho , nonce );
}
}
return m ;
}
fn mulVec (self : Self , v_hat : VecL ) VecK {
var result = VecK .zero ;
for (0 ..k ) |i | {
result .ps [i ] = dotHat (l , self .rows [i ], v_hat );
result .ps [i ] = result .ps [i ].reduceLe2Q ();
result .ps [i ] = result .ps [i ].invNTT ();
}
return result ;
}
fn mulVecHat (self : Self , v_hat : VecL ) VecK {
var result : VecK = undefined ;
for (0 ..k ) |i | {
result .ps [i ] = dotHat (l , self .rows [i ], v_hat );
}
return result ;
}
};
}