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_kem.zig › testNistKat
testNistKat
ml_kem.testNistKat
fn testNistKat (mode : type , hash : []const u8 ) !void
File
Code
fn testNistKat (mode : type , hash : []const u8 ) !void {
var seed : [48 ]u8 = undefined ;
for (&seed , 0 ..) |*s , i | {
s .* = @as (u8 , @intCast (i ));
}
var fw : std .Io .Writer .Hashing (crypto .hash .sha2 .Sha256 ) = .init (&.{});
var g = NistDRBG .init (seed );
try fw .writer .print ("# {s}\n\n" , .{mode .name });
for (0 ..100 ) |i | {
g .fill (&seed );
try fw .writer .print ("count = {}\n" , .{i });
try fw .writer .print ("seed = {X}\n" , .{&seed });
var g2 = NistDRBG .init (seed );
// implementation calls randombytes twice generating the keypair,
// we have to do that as well.
var kseed : [64 ]u8 = undefined ;
var eseed : [32 ]u8 = undefined ;
g2 .fill (kseed [0 ..32 ]);
g2 .fill (kseed [32 ..64 ]);
g2 .fill (&eseed );
const kp = try mode .KeyPair .generateDeterministic (kseed );
const e = kp .public_key .encapsDeterministic (&eseed );
const ss2 = try kp .secret_key .decaps (&e .ciphertext );
try testing .expectEqual (ss2 , e .shared_secret );
try fw .writer .print ("pk = {X}\n" , .{&kp .public_key .toBytes ()});
try fw .writer .print ("sk = {X}\n" , .{&kp .secret_key .toBytes ()});
try fw .writer .print ("ct = {X}\n" , .{&e .ciphertext });
try fw .writer .print ("ss = {X}\n\n" , .{&e .shared_secret });
}
var out : [32 ]u8 = undefined ;
fw .hasher .final (&out );
var outHex : [64 ]u8 = undefined ;
_ = try std .fmt .bufPrint (&outHex , "{x}" , .{&out });
try testing .expectEqualStrings (&outHex , hash );
}