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/ › tls.zig › hmacExpandLabel
hmacExpandLabel
tls.hmacExpandLabel
pub fn hmacExpandLabel (
comptime Hmac : type ,
secret : []const u8 ,
label_then_seed : []const []const u8 ,
comptime len : usize ,
) [len ]u8
File
Code
pub fn hmacExpandLabel (
comptime Hmac : type ,
secret : []const u8 ,
label_then_seed : []const []const u8 ,
comptime len : usize ,
) [len ]u8 {
const initial_hmac : Hmac = .init (secret );
var a : [Hmac .mac_length ]u8 = undefined ;
var result : [std .mem .alignForwardAnyAlign (usize , len , Hmac .mac_length )]u8 = undefined ;
var index : usize = 0 ;
while (index < result .len ) : (index += Hmac .mac_length ) {
var a_hmac = initial_hmac ;
if (index > 0 ) a_hmac .update (&a ) else for (label_then_seed ) |part | a_hmac .update (part );
a_hmac .final (&a );
var result_hmac = initial_hmac ;
result_hmac .update (&a );
for (label_then_seed ) |part | result_hmac .update (part );
result_hmac .final (result [index ..][0 ..Hmac .mac_length ]);
}
return result [0 ..len ].*;
}